我创建了一个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充满了cockamamie样本,但没有一个起作用。 locbaml真的是微软打算如何将WPF应用程序本地化吗?或者他们为这份工作找到了合适的工具?
答案 0 :(得分:3)
当我继续搜索时,我在Stackoverflow上找到了另一个链接。我们最初收到的编译错误与一个没有为.Net4.0设置的过时的LocBaml项目有关。这就是为什么我无法从DLL生成CSV并且必须直接在资源文件中。请点击此链接了解更多详情。 Locbaml localization of .net wpf4 application
此链接提供.net 4二进制文件的链接,一旦编译,您就可以直接使用本地邮件生成使用LocBaml的CSV。
答案 1 :(得分: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 \ 86 \释放
文件名的标题是:localiztion_sample.g.en-US.resources
注意:这与Microsoft网站上的说明不同。 Microsoft声明您应该在en-US目录中的dll文件上运行LocBaml工具。然而,经过多次尝试和研究后,我发现这实际上导致了32位和64位版本之间兼容性的许多问题以及它无法正常工作。
在阅读wpf4释放以及在线论坛时,建议改为指向* .gen.en-Us.resources文件。 * =项目名称和gen.en-Us反映了所选择的开发语言
在VS命令中,您需要输入以下内容
LocBaml / parse filename.resources / out:sample-en.csv
注意:假设您已将LocBaml文件复制到此文件所在的根目录,并且您正在以系统管理员身份运行命令提示符。为了便于使用,我将命令提示符下的工作目录更改为VS项目目录
对于我的示例项目,命令显示为:
* LocBaml / parse localization_sample.g.en-US.resources / out:sample-en.csv *
然后,此命令将生成CSV文件,该文件充当当前项目的定义
这是我得到的,我能够修改文件并重新生成dll,但我无法在应用程序中更改文化,所以我仍在研究这篇文章。一旦我开始工作,我会转发。
答案 2 :(得分: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>
EN-GB
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 / generate 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 location
创建一个文件夹fr-FR15)将您的计算机区域设置切换为法语(法国)
16)在代码集中本地化为Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;
17)编译并运行应用程序,您将在控件上看到翻译文本