ResourceManager和不受支持的平台

本文关键字:平台 支持 ResourceManager | 更新日期: 2023-09-27 18:28:43

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

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

当我想用英语显示UI时,我调用:

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不包含俄语,我不能修改操作系统来调用它,所以我的问题是,当我设置Culture = new CultureInfo("ru-RU")时,我如何对ResourceManger说使用Resourse.ru ru.resx

ResourceManager和不受支持的平台

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

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

以下是一个相当棘手的解决方法,但它将解决PlatformNotSupportedException问题。我还建议,这样做只能作为万不得已的手段。请注意,我只在WinCE 6.0上测试过这一点。

如果WinCE 6.0不支持您尝试实现的区域性,只需将其重新标记为不同的区域性即可。例如,与其将俄罗斯文化标记为"ru ru"(如上所述),不如将其重新命名为"eu ES"(巴斯克语)如果所使用的字体支持西里尔字母集,则值应在您编写时显示

注意:您还必须重命名资源文件,以匹配要替换的目标区域性。如果您使用"eu ES"代替"ru ru",则必须将您的"Resourse.ru ru.resx"重命名为"Resource.eu ES.resx"。

你失去的:目标文化(本例中为俄语)提供的任何本地支持(例如,格式正确的货币、日期等),因为这些支持现在都来自于围绕目标文化的工作(本例为巴斯克语)。请注意,只有当您通过区域性(即字符串格式({some CultureInfo.GetCurrentCulture},{additional formating},{some numerical value}))格式化字符串时,这才是应用程序中的问题。

看起来你很不幸被卡住了。你的问题很不寻常,因为通常移动应用程序不需要决定使用哪个区域性标识符。如果它只是依赖于系统在启动时为其设置的任何文化,那么用户可以切换会影响您的应用程序的全局文化设置,并使其使用您的本地化(如果存在)。

如果你在应用程序中实现了一个语言选择器,那么我想你需要筛选你的选择列表,这样你就只提供设备支持的区域性(CultureInfo.GetCultures会给你一个支持区域性的列表,你可以找到你有可用本地化的子集)。