我目前正在努力解决本地化方面的一些特殊情况。我读到了本地化WPF应用程序的不同方法,并决定采用由#34; locbaml"生成的附属程序集。
为了能够从c#-code本地化字符串,我决定使用如下所述的资源:http://msdn.microsoft.com/en-us/library/bb613547%28v=vs.110%29.aspx
所以我有这个资源字典:
<ResourceDictionary x:Uid="ResourceDictionary_1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib">
<system:String x:Uid="system:String_1" x:Key="TestKey">Development</system:String>
</ResourceDictionary>
我在app.xaml中合并它:
Application x:Uid="Application_1" x:Class="LocalizationIssue.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary x:Uid="ResourceDictionary_1">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Uid="ResourceDictionary_2" Source="Localization.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
这应该让我做类似的事情:
this.Message = (string)Application.Current.FindResource("TestKey");
确实如此。当我启动应用程序时,我可以看到&#34;开发&#34;。 我的示例项目只有两个Textblock。一个TextBlock的TextProperty绑定到名为&#34; Message&#34;的属性。另一个静态设置为&#34; StaticDevelopment&#34;。所以MainWindow.xaml看起来像这样:
<Window x:Uid="Window_1" x:Class="LocalizationIssue.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel x:Uid="StackPanel_1">
<TextBlock x:Uid="TextBlock_1" FontSize="20" Text="{Binding Message}" VerticalAlignment="Center" HorizontalAlignment="Center" />
<TextBlock x:Uid="TextBlock_2" FontSize="20" Text="StaticDevelopment" VerticalAlignment="Center" HorizontalAlignment="Center" />
</StackPanel>
</Window>
然后我按照所有步骤使用locbaml创建附属程序集,如下所述:
http://msdn.microsoft.com/en-us/library/ms746621%28v=vs.110%29.aspx
即:1。将UICulture添加到项目文件(以及assemblyinfo)中
2.创建uids:msbuild / t:updateuid LocalizationIssue.csproj
3.创建csv文件:locbaml / parse LocalizationIssue.resources.dll /out:loc.csv
4.翻译loc.csv中的值
5.创建卫星:locbaml / generate LocalizationIssue.resources.dll /trans:loc.csv / out:c:\ / cul:en-US
现在,当我将UI文化切换为法语时,它仍然显示带有绑定的TextBlock的英文翻译,但显示其他文本块的本地化值。
我有什么想法,我做错了什么?您使用&#34; locbaml&#34; -approach的体验是什么?我们应该采用resx文件的传统方式吗?
感谢任何输入;)
答案 0 :(得分:0)
尝试复制到新文件可能是loc_us.csv并进行更改然后运行locbaml / generate LocalizationIssue.resources.dll /trans:loc_us.csv / out:c:\ / cul:en-US
答案 1 :(得分:0)
我知道这个是旧的,但希望这能节省一些时间。
我遵循了相同的步骤并得到了与 CrazyChief 的原始帖子中详述的相同的结果。我错过的步骤是像这样将 xml:lang="en-US" 添加到我的资源字典中
<ResourceDictionary x:Uid="ResourceDictionary_1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xml:lang="en-US">
<!-- String resources that can be localized -->
<system:String x:Uid="system:String_1" x:Key="success">Success</system:String>
</ResourceDictionary>
在我进行此更改并重建项目后,我能够使用 locBAML 从 en-US 卫星程序集导出 CSV,进行翻译并从中生成 fr-CA 卫星程序集。