Wpf Locbaml是如何工作的?

Wpf Locbaml是如何工作的?,wpf,locbaml,Wpf,Locbaml,我创建了一个WPF测试项目,其中只有一个窗口和一个按钮。然后我卸载了这个项目,并修改了csproj以包含以下en-US。重建后,生成文件夹现在包含一个名为en US的子文件夹,其中包含一个名为WpfLocalizationTest.resources.dll的文件。目前一切正常 然后我下载了Locbaml的源代码并构建了它。(在任何地方都找不到二进制下载,如图所示。) 然后,我将Locbaml.exe复制到en-US文件夹,并尝试以下操作 locbaml /parse WpfLocalizati

我创建了一个WPF测试项目,其中只有一个窗口和一个按钮。然后我卸载了这个项目,并修改了csproj以包含以下
en-US
。重建后,生成文件夹现在包含一个名为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应用本地化的方式吗?或者他们为这项工作找到了合适的工具了吗?

只是我今天早上做笔记的更新。希望这能帮助你走得更远

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

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

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

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

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

E:\localiztion\u sample\localiztion\u sample\obj\x86\Release

文件名为:localiztion_sample.g.en-US.resources

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

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

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

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

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

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

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

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


这是我所能做到的,我能够修改文件并重新生成dll,但我无法在应用程序中改变区域性,所以我仍在处理这件事。一旦我让它工作起来,我将重新发布。

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

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

1)卸载要本地化的项目

2) 编辑Project.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>   

pdbonly
真的
bin\Release\
痕迹
促使
4.
x86
en GB

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

5) 打开Properties\AssemblyInfo.cs文件并取消注释此行[assembly:NeutralResourcesLanguage(“en GB”,UltimateResourceCallbackLocation.Satellite)]这是一个后备附属程序集。我们需要这个条目,否则wpf应用程序会引发app.xaml.cs无法加载的异常

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

7) 从下载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\u FR.csv

11) 打开