Locbaml如何运作?

时间:2011-02-08 13:39:54

标签: wpf locbaml

我创建了一个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应用程序本地化吗?或者他们为这份工作找到了合适的工具?

3 个答案:

答案 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-FR

15)将您的计算机区域设置切换为法语(法国)

16)在代码集中本地化为Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture;             Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;

17)编译并运行应用程序,您将在控件上看到翻译文本