10

我创建了一个 WPF 测试项目,一个带有单个按钮的窗口。然后我卸载了项目并修改了 csproj 以包含以下<UICulture>en-US</UICulture>. 重建后,构建文件夹现在包含一个名为 en-US 的子文件夹,它包含一个名为 WpfLocalizationTest.resources.dll 的文件。到目前为止一切都清楚了。

然后我下载了 Locbaml 的源代码并构建了它。(在任何地方都找不到二进制下载,去看看。)

然后我将 Locbaml.exe 复制到 en-US 文件夹并尝试了以下操作。

locbaml /parse WpfLocalizationTest.resources.dll /out:test.csv

这会导致错误“无法加载文件或程序集 WpfLocalizationTest.resources.dll 或其依赖项之一。试图加载格式不正确的程序。

在 obj\x86\Debug 文件夹中有一个名为 WpfLocalizationTest.g.en-US.resources 的文件。我尝试在上面运行 locbaml,但结果是一样的。

locbaml 应该如何使用?MSDN 充满了 cockamamie 示例,但没有一个有效。locbaml 真的是微软打算如何本地化 WPF 应用程序吗?或者他们有没有为这项工作找到合适的工具?

4

3 回答 3

4

当我继续搜索时,我在 Stackoverflow 上找到了另一个链接。我们最初收到的编译错误与未为 .Net4.0 设置的过时 LocBaml 项目有关。这就是为什么我无法从 DLL 生成 CSV 并且不得不直接访问资源文件的原因。点击此链接了解更多详情。.net wpf4 应用程序的 Locbaml 本地化

此链接提供了指向 .net 4 二进制文件的链接,一旦编译,您就可以直接在 dll 处使用 LocBaml 生成 CSV。

于 2011-02-16T20:49:09.223 回答
1

只是今天早上我拉出我的笔记的更新。希望这将帮助您走得更远。

编译项目后,将 LocBaml.exe 复制到生成构建的项目目录:在我的实例中,我将文件复制到 E:\localiztion_sample\localiztion_sample\obj\x86\Release

这是一个棘手的部分,因为构建不包含 bin 目录中的所有 DLL 文件(telerik 控件和其他程序集)。结果我去了 bin\release\ 并将所有 DLL 和资源文件从那里复制到 obj\x86\Release 目录中。对于提示我覆盖的文件,我查看文件大小或创建日期是否存在差异,如果没有,我跳过这些对象的副本。

注意:为了生成 CSV,我必须从 bin 目录复制 dll 和资源文件并将它们放在 obj 目录中。省略此步骤将导致创建 CSV 文件但未填充数据。

将必要的文件复制到目录后,您将解析位于 Release 目录中的 .resource 文件。

在我的项目中,资源文件位于:

E:\localiztion_sample\localiztion_sample\obj\x86\Release

文件名的标题是:localiztion_sample.g.en-US.resources

注意:这与微软网站上的说明不同。Microsoft 声明您应该在位于 en-US 目录中的 dll 文件上运行 LocBaml 工具。然而,经过多次尝试和研究,我发现这实际上导致了 32 位和 64 位版本之间的兼容性问题,而且它完全无法正常工作。

在阅读 wpf4 unleashed 以及在线论坛时,建议改为指向 *.gen.en-Us.resources 文件。* = 项目名称和 gen.en-Us 反映选择的开发语言

在 VS 命令 untility 中,您将需要输入以下内容

LocBaml /parse filename.resources /out: sample-en.csv

注意:假设您已将 LocBaml 文件复制到该文件所在的根目录,并且您正在以系统管理员身份运行命令提示符。为了便于使用,我将命令提示符中的工作目录更改为 VS 项目目录

对于我的示例项目,命令如下所示:

*LocBaml /parse 本地化_sample.g.en-US.resources /out: sample-en.csv*

然后,此命令生成 CSV 文件,该文件充当当前项目的定义

据我所知,我能够修改文件并重新生成 dll,但我无法在应用程序中改变文化,所以我仍在研究这件作品。一旦我得到它的工作,我会重新发布。

于 2011-02-16T16:10:27.547 回答
1

1) 卸载要本地化的项目

2) 编辑项目 .cproj 文件

3) 在最后一个属性组的末尾添加属性组

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>x86</PlatformTarget>   
</PropertyGroup>   

英文版

4) 重新加载项目并编译这将在 bin\debug 位置的 en-GB 文件夹中创建一个附属程序集“yourlibrary.resources.dll”,该程序集将是默认程序集。

5) 打开 Properties\AssemblyInfo.cs 文件并取消注释这一行 [assembly: NeutralResourcesLanguage("en-GB", UltimateResourceFallbackLocation.Satellite)] 这是一个备用卫星程序集。我们需要这个条目,否则对于 wpf 应用程序它会在 app.xaml.cs 无法加载时引发异常

6) 从命令提示符运行此命令,该命令使用 msbuild 生成 UID C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild /t:updateuid 。\yourlibrary.csproj,打开 xaml 文件并检查您的控件,所有元素上都会有 UID。

7) 从https://github.com/JeremyDurnell/locbaml下载 locabaml.exe 源代码工具

8) 将 locabaml.exe 文件复制到 \yourprojectname\bin\debug 文件夹

9)我们现在将为法语创建一个卫星程序集。首先,我们需要解析默认的卫星程序集并将内容写入 csv 文件,如下所示

10:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild /parse C:\yourprojectname\bin\Debug\yourlibrary.resources.dll /out:C:\yourprojectname\bin\Debug\yourlibrary.resources_FR.csv

11) 打开 yourlibrary.resources_FR.csv 进行必要的翻译

12) 现在我们需要使用命令行在法语中创建一个卫星程序集

13) C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild /生成 C:\yourprojectname\bin\Debug\yourlibrary.Resources.dll /trans: C:\yourprojectname\bin\Debug\yourlibrary.resources_FR。 csv /out:C:\yourporjectname\bin\Debug\temp /cul:fr-FR

14) 上面的命令将在 \bin\debug 位置创建一个文件夹 fr-FR

15)将您的计算机区域设置切换为法语(法国)

16) 在代码集中本地化为 Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;

17) 编译并运行应用程序,您会在控件上看到翻译文本

于 2018-04-19T10:05:02.387 回答