WPF 字符串本地化 - 在不同项目之间共享?

car*_*lot 3 c# wpf localization

我正在 VS2012 下开发一个 WPF C# 应用程序,其中解决方案中的不同项目中有来自不同来源的 UserControls。如果可以的话,我想将整个解决方案中的所有 UI 字符串本地化到一处。

看来locbaml并没有真正为这种事情设置,因为它出现在每个类库中,我需要为每个类库DLL创建一个单独的资源DLL?

谁能给我一些有关执行此操作的最佳实践方法的指导?我不知道如何将各种本地化技术应用于具有多个项目的解决方案。

感谢您的任何建议。科里.

ian*_*hol 6

稍微修改我的帖子以使其更具包容性:

MSDN 上详细介绍了总体最佳实践。

真的,你有三个选择。

  1. 自行本地化 - 手动推出您自己的 XML/文本文件/数据库解决方案。
  2. 使用 locbaml 进行本地化。这不允许在应用程序内进行动态语言切换。
  3. 使用 resx 文件进行本地化。这确实允许在应用程序内进行动态语言切换,具体取决于所选的实现。

在很多情况下 locbaml 都是最佳的,最佳实践页面上概述了这些情况,但 resx 文件具有相当的可移植性(格式很简单),并且可以满足动态语言交换的要求。

如果您决定选择(1),那么您就得靠自己了。天佑!:)

如果您选择使用 locbaml (2),最好通过首先将字符串抽象到 ResourceDictionary 中来解决该问题,从而允许您将所有字符串放入一个文件中进行本地化。请参阅此处:如何:使用 ResourceDictionary 管理可本地化字符串资源

链接的文章详细信息仍然使用 locbaml,但您应该只需要使用它来本地化单个 ResourceDictionary。以这种方式保持资源整齐地隔离应该会让您的生活变得更加轻松。请注意,如果需要,可以对 ResourceDictionaries 进行分类分割 - 只是一个整体文件或多个较小文件更适合您的项目的问题。

如果您选择使用 resx 文件 (3) 并希望支持轻松的运行时语言切换,这个简短的教程\示例代码提供了一个很好的起点。 它是根据 Prism 编写的,但可以毫无困难地在 Prism 之外使用。还有其他更简单的方法也使用 resx 文件,但如果您想要最好方法,恕我直言,您正在查看它。一个(也许?)主要警告是这种方法不适用于 Silverlight。这是一个 WPF 问题,但我意识到这可能是某些人关心的问题。