C#在运行时访问本地化的XML

时间:2012-08-24 20:24:32

标签: c# xml localization runtime

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

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

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

1 个答案:

答案 0 :(得分:1)

选项1:

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

选项2:

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

localized / en / SomeFile1.xml(等等......) localized / en-US / SomeFile1.xml(等等......) 集中式/ EN-GB / SomeFile.xml 局部/ FR / SomeFile.xml

我接受了我的en-IE偏好,并且你不匹配,但是你确实匹配en并且这已经足够好了(理想情况下你应该选择en-IE比en更接近en-GB-美国,但这完全进入奖励 - 信用领域,并且比.NET更好地利用资源)。

您的匹配算法应为:

  1. 尝试找到所寻找的区域设置的匹配项,如果找到则返回。
  2. 删除语言环境的末尾,因此en-GB-OED变为en-GB,en-GB变为en-en,依此类推。如果这不能删除整个内容,请使用此新语言环境返回步骤1。
  3. 尝试zxx(zxx未被.NET afaik使用,但它与BCP 47 / RFC 4647和ISO 639一起用于没有语言内容的项目 - 例如你的护照照片是locale zxx因为将法国文件作为约鲁巴语或威尔士语文件使用是恰当的。)
  4. 尝试使用您定义的“默认”区域设置(如果您的应用程序承诺能够很好地匹配,则会出错)。
  5. 此时,您将比资源文件做得更好。尽管如此,大多数选项1更简单,而且更加独立。