看起来locbaml并没有为这种情况做好准备,因为似乎对于每个类库,我都需要为每个类库DLL创建一个单独的资源DLL?
有人能给我一些关于如何应用各种本地化技术到具有多个项目的解决方案的最佳实践指南吗?
感谢任何建议。 Corey。
我稍微修改了一下我的帖子,以使其更具包容性:
事实上,你有三个选择。
最佳实践页面概述了许多情况下locbaml最优秀的地方,但resx文件比较易于移植(格式很简单),并且可以满足动态语言切换的要求。
如果你选择(1),你将独立完成。祝你好运!:)
如果你选择使用locbaml (2),最好先将字符串抽象为ResourceDictionary问题,从而可以将所有字符串放入一个文件中进行本地化。请参见此处:如何:使用 ResourceDictionary 管理可本地化的字符串资源
链接的文章详细介绍了使用locbaml,但你只需要使用它来本地化单个ResourceDictionary。以这种方式将资源整洁地隔离开来,应该可以让你的工作更轻松。请注意,如果需要,ResourceDictionaries可以按类别分割——只需确定对于您的项目而言,是一个单一的文件还是多个较小的文件更好。
如果您选择使用resx文件(3),并希望支持无痛运行时语言切换,此短教程/示例代码提供了一个很好的起点。它是为Prism编写的,但可以在Prism之外使用,没有困难。还有其他更简单的方法,也使用resx文件,但如果你想要最佳途径,我的意见是你正在看它。唯一的(或许)主要缺陷是,这种方法不适用于Silverlight。这是一个WPF问题,但我意识到对某些人可能是一个问题。
<TextBlock Text="Hello World"/>
然后“最佳实践”建议摆脱XAML字符串,将其添加到RESX中,最后用引用替换XAML
<TextBlock Text="{Binding Path=Resource1.HelloText, Source={StaticResource LocalizedString }}"/>
+
<data name="LocalizedString" xml:space="preserve">
<value>Hello World</value>
</data>
不要这样做。只在代码中使用的字符串中放置RESX。将XAML的所有字符串保留为原样。本地化RESX和XAML文件。最后编译包含本地化RESX和XAML的卫星程序集文件。
Visual Studio或locbaml只能本地化RESX。您可以使用文本编辑器手动本地化XAML,但我不建议这样做。本地化的XAML必须与原始文件相同。这意味着结构必须相同。它必须包含所有组件、属性和事件,就像原始XAML一样。本地化XAML的唯一可行方法是使用某些本地化工具。
选择本地化工具时必须小心。它必须执行以下两个操作。
一旦您使用这样的本地化工具,您的本地化不仅变得更加容易,而且您还可以将用户控件放置在其自己的程序集中或将其链接到使用它的所有项目中。
lex:ResxLocalizationProvider.DefaultAssembly="MyTranslationAssembly"
。 - Shahin Dohan