我目前正在为本地化中的一些特殊情况而努力。我读到了本地化WPF应用程序的不同方法,并决定使用由"locbaml“生成的附属程序集。为了能够从c#代码本地化字符串,我决定使用资源字典,如下所述: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");事实的确如此。当我启动应用程序时,我可以看到“开发”。我的样例项目只有两个Textblock。一个消息的TextProperty被绑定到一个称为“TextBlock”的属性上。另一个静态设置为"StaticDevelopment“。所以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中)
文件创建uids: msbuild LocalizationIssue.csproj
现在,当我将UI区域性切换到法语时,它仍然显示带有绑定的TextBlock的英语翻译,但是其他textblock.Any的本地化值又有什么问题呢?你对"locbaml"-approach有什么经验?我们应该用传统的方式处理resx文件吗?
感谢您的意见;)
发布于 2018-02-23 23:16:34
尝试复制到可能是loc_us.csv的新文件并进行更改,然后运行locbaml /generate LocalizationIssue.resources.dll /trans:loc_us.csv /out:c:\ /cul:en-US
发布于 2021-07-29 19:28:52
我知道这是旧的,但希望这将节省一些人的时间。
我遵循了相同的步骤,并得到了与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 satellite程序集导出CSV,进行转换,并从它生成fr-CA附属程序集。
https://stackoverflow.com/questions/26235912
复制相似问题