首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Locbaml是如何工作的?

Locbaml是如何工作的?
EN

Stack Overflow用户
提问于 2011-02-08 21:39:54
回答 3查看 4.1K关注 0票数 10

我创建了一个WPF测试项目,其中只有一个窗口和一个按钮。然后,我卸载了该项目并修改了csproj,使其包含以下<UICulture>en-US</UICulture>。重建后,build文件夹现在包含一个名为en-US的子文件夹,其中包含一个名为WpfLocalizationTest.resources.dll的文件。到目前为止一切正常。

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

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

代码语言:javascript
复制
locbaml /parse WpfLocalizationTest.resources.dll /out:test.csv

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

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

locbaml应该如何使用?MSDN充满了繁琐的样本,其中没有一个是有效的。locbaml真的是微软想要的WPF应用本地化的方式吗?或者他们有没有想出合适的工具来完成这项工作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-17 04:49:09

当我继续搜索时,我在Stackoverflow上找到了另一个链接。我们最初收到的编译错误与没有为.Net4.0设置的过时的LocBaml项目有关。这就是为什么我无法从DLL生成CSV,而必须直接访问资源文件的原因。点击此链接了解更多详细信息。Locbaml localization of .net wpf4 application

这个链接提供了一个指向csv4二进制文件的链接,一旦编译这些文件,您就可以直接转到dll来使用LocBaml生成.net。

票数 4
EN

Stack Overflow用户

发布于 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,但是我不能在应用程序中改变区域性,所以我仍然在做这件事。一旦我让它工作了,我会重新发布的。

票数 1
EN

Stack Overflow用户

发布于 2018-04-19 18:05:02

1)卸载您要本地化的项目

2)编辑项目.cproj文件

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

代码语言:javascript
复制
<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>   
代码语言:javascript
复制
     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 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)编译并运行应用程序,您将在控件上看到已翻译的文本

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4933726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档