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