3

我有一个需要本地化的 C# 应用程序。我可以使用RESX .NET MUI 策略来做到这一点。现在,我有一个单独的团队在构建/编译后提供额外的本地化资源(XML 文件)。我想利用 .NETs MUI 策略,它提供了一个很好的回退机制,但我似乎无法找到实现这一目标的方法。

注意,我考虑过在我的应用程序的字符串资源文件中添加本地化文件名(我知道)。但是,如果在运行时该文件不存在,那么我会遇到问题(并且无法自动回退)。

那么,有没有办法在这种情况下利用 .NET MUI 策略?

4

1 回答 1

1

选项1:

您可以将 XML 文件存储在资源中,然后获取一个流对象来读取它,它使用与字符串等相同的方法。请参阅http://msdn.microsoft.com/en-us/library/ zxee5096.aspx为此。

选项 2:

您也可以应用与资源自己使用的基本方法相同的基本方法。我发现 Web 应用程序很方便,这些应用程序通常基于大量文件(.aspx、.html、.css、.js、.png 等)。假设您有一堆目录,例如:

localised/en/SomeFile1.xml(等等....) localised/en-US/SomeFile1.xml(等等....) localised/en-GB/SomeFile.xml localised/fr/SomeFile.xml

我带着我的 en-IE 偏好来了,你不匹配,但你匹配 en 并且这已经足够好了(好吧,理想情况下,你应该选择 en-IE 比 en-US 更接近 en-GB,但是这完全属于奖励信用领域,并且比 .NET 对资源的处理要好得多)。

您的匹配算法应该是:

  1. 尝试为所寻找的语言环境找到匹配项,如果找到则返回。
  2. 去掉语言环境的结尾,所以 en-GB-OED 变成 en-GB,en-GB 变成 en- 等等。如果这不能删除整个内容,请使用此新语言环境返回第 1 步。
  3. 尝试 zxx(zxx.NET afaik 不使用它,但它与 BCP 47/RFC 4647 和 ISO 639 一起用于没有语言内容的项目 - 例如,您的护照照片是区域设置 zxx,因为它与约鲁巴语或威尔士语的法语文件)。
  4. 尝试您定义的“默认”语言环境(如果您的应用程序承诺匹配良好,则错误)。

到那时,您将比资源文件做得更好。尽管如此,大多数情况下,选项 1 更简单,而且更加独立。

于 2012-08-24T22:15:28.847 回答