ResourceManager和不支持的平台

时间:2012-03-21 09:57:45

标签: c# localization compact-framework

我使用ResourceManager进行WinCE 5软件的UI本地化。我有一些资源文件包含不同语言的文本字符串

Resourse.resx
Resourse.de-DE.resx
Resourse.ru-RU.resx

当我想用英语显示用户界面时,我打电话给:

Resourse.Culture = new CultureInfo("en-US");
label1.Text = Resourse.LabelText;

德语:

Resourse.Culture = new CultureInfo("de-DE");
label1.Text = Resourse.LabelText;

俄语:

Resourse.Culture = new CultureInfo("ru-RU");
label1.Text = Resourse.LabelText;

但是我得到 PlatformNotSupportedException

我知道我的WinCE不包含俄语而且我无法修改操作系统来解决这个问题,所以我的问题是如何对 ResourceManger 说使用 Resourse.ru-RU.resx 当我设置Culture = new CultureInfo("ru-RU")

3 个答案:

答案 0 :(得分:2)

以下是一个相当HACKED的解决方法,但它将解决PlatformNotSupportedException问题。我也建议这样做只是作为最后的手段。请注意,我只在WinCE 6.0上测试了这个。

如果WinCE 6.0不支持您尝试实施的文化,只需将其重新标记为不同的文化。例如,不是将俄罗斯文化标记为“ru-RU”(如上所述),而是将其重命名为“eu-ES”(巴斯克语)。 如果使用的字体支持西里尔字符集,则值应在您编写时显示。

注意:您还必须重命名资源文件以匹配您要替换的目标文化。如果您使用“eu-ES”代替“ru-RU”,则必须将“Resourse.ru-RU.resx”重命名为“Resourse.eu-ES.resx”。

你输了什么:目标文化提供的任何原生支持(在这种情况下是俄语),(例如正确格式化的货币,日期等),因为这些现在将来自解决方案的目标文化(Basque in这个案例)。请注意,如果您通过culture格式化字符串(例如stringFormat({some CultureInfo.GetCurrentCulture},{additional formatting},{some number value})),这应该只是应用程序中的问题。

答案 1 :(得分:2)

Jonathan提供的答案是我必须做的确切工作才能使我的设备显示简体中文。我使用了“en-ZW”英语(津巴布韦)。这适用于3个运行不同操作系统的不同设备(CE5,CE6和WEH / WM 6.5.3)

如果基本Tahoma字体不包含您需要的所有内容(如我的情况),您还需要将字体放在设备上并进行一些其他注册表更改以启用字体链接。它不是很复杂,只有几个注册表项。

此MSDN链接提供中文字体的信息,但对于任何其他字体集,它将以相同的方式使用。 http://msdn.microsoft.com/en-us/library/ms901082.aspx

有关字体链接的更通用的MSDN文章可以在这里找到: http://msdn.microsoft.com/en-us/library/ms901098.aspx

除此之外,我能够确定的唯一其他选项是滚动您自己的翻译资源类。

答案 2 :(得分:0)

似乎很遗憾你被困住了。您的问题很不寻常,因为通常移动应用程序不需要决定使用哪种文化标识符。如果它只依赖于系统在启动时为其设置的任何文化,那么用户可以切换会影响您的应用的全球文化设置,并使其使用您的本地化(如果存在)。

如果您要在应用内部实施语言选择器,那么我猜您需要过滤掉您的选择列表,以便您只提供设备支持的文化(CultureInfo.GetCultures将为您提供支持的文化列表,您可以找到可以使用本地化的子集。