我创建了一个WPF测试项目,其中只有一个窗口和一个按钮。然后,我卸载了该项目并修改了csproj,使其包含以下<UICulture>en-US</UICulture>。重建后,build文件夹现在包含一个名为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充满了繁琐的样本,其中没有一个是有效的。locbaml真的是微软想要的WPF应用本地化的方式吗?或者他们有没有想出合适的工具来完成这项工作?
发布于 2011-02-17 04:49:09
当我继续搜索时,我在Stackoverflow上找到了另一个链接。我们最初收到的编译错误与没有为.Net4.0设置的过时的LocBaml项目有关。这就是为什么我无法从DLL生成CSV,而必须直接访问资源文件的原因。点击此链接了解更多详细信息。Locbaml localization of .net wpf4 application
这个链接提供了一个指向csv4二进制文件的链接,一旦编译这些文件,您就可以直接转到dll来使用LocBaml生成.net。
发布于 2011-02-17 00:10:28
更新一下我今天早上调出了我的笔记。希望这能帮助你走得更远一点。
编译完项目后,将LocBaml.exe复制到生成构建的项目目录:在我的实例中,我将文件复制到了E:\localiztion_sample\localiztion_sample\obj\x86\Release
这是棘手的部分,因为构建并不包含bin目录中的所有DLL文件(telerik控件和其他程序集)。因此,我转到bin\release\,并将其中的所有DLL和资源文件复制到obj\x86\Release目录中。对于提示我覆盖的文件,我查看文件大小或创建日期是否存在差异,如果没有,则跳过这些对象的副本。
注意:为了让我生成CSV,我必须从bin目录复制dll和资源文件,并将它们放到obj目录中。忽略此步骤将导致创建CSV文件,但不会填充数据。
将必要的文件复制到该目录后,您将解析位于发布目录中的.resource文件。
在我的项目中,资源文件位于:
E:\localiztion_sample\localiztion_sample\obj\x86\Release
文件名的标题是: localiztion_sample.g.en-US.resources
注意:这与微软网站上的说明不同。微软声明,您应该对位于en-US目录中的dll文件运行LocBaml工具。然而,经过多次尝试和研究,我发现这实际上导致了32位和64位版本之间的兼容性问题,以及它完全不起作用。
在阅读wpf4 unleashed以及在线论坛时,建议改为指向*.gen.en-Us.resources文件。*=项目名称和gen.en-Us反映所选的开发语言
在VS命令中,您需要输入以下内容
LocBaml /parse filename.resources /out: sample-en.csv
注意事项:假设您已将LocBaml文件复制到此文件所在的根目录,并以系统管理员身份运行命令提示符。为了便于使用,我将命令提示符中的工作目录更改为VS项目目录
对于我的示例项目,该命令如下所示:
*LocBamlSample.g.en-US.resources本地化资源/out: /parse -en.csv*
然后,此命令将生成CSV文件,该文件用作当前项目的定义
这就是我所能做的,我能够修改文件并重新生成dll,但是我不能在应用程序中改变区域性,所以我仍然在做这件事。一旦我让它工作了,我会重新发布的。
发布于 2018-04-19 18:05:02
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> en-GB4)重新加载项目并编译这将在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_FR.csv /generate /trans: C:\yourprojectname\bin\Debug\yourlibrary.resources_FR.csv/generate /cul:fr-FR
14)上面的命令将在\bin\debug位置创建一个fr-FR文件夹
15)将计算机区域设置切换为法语(法国)
16)在代码中将本地化设置为Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture;Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;
17)编译并运行应用程序,您将在控件上看到已翻译的文本
https://stackoverflow.com/questions/4933726
复制相似问题