8

我已将我的 ExportForm 本地化为德语 (de) 和俄语 (ru),如下所示:

如果我的 CultureInfo 是德语(Austrian-de-AT),那么一切正常,我看到格式被翻译成德语:

string specCult = "de-AT";
Thread.CurrentThread.CurrentUICulture = new CultureInfo(specCult);

但是我看到带有俄语(ru-RU)CultureInfo 的英语用户界面

string specCult = "ru-RU";
Thread.CurrentThread.CurrentUICulture = new CultureInfo(specCult);

虽然如果我使用“ru”而不是“ru-RU”来创建 CultureInfo,它可以工作:

string specCult = "ru";
Thread.CurrentThread.CurrentUICulture = new CultureInfo(specCult);

你能帮我解决什么问题吗?或者请指出我调查问题的方向。

4

2 回答 2

2

我已经确定了问题:在我的主要项目程序集设置中, ru-RU被选为中性语言。

MSDN:NeutralResourcesLanguage 属性通知 ResourceManager 用于显示程序集的中性区域性资源的语言。当它在与中性资源语言相同的文化中查找资源时,ResourceManager 会自动使用位于主程序集中的资源。它这样做而不是搜索具有当前线程的当前用户界面文化的附属程序集。这提高了您加载的第一个资源的查找性能,并且可以减少您的工作集。

http://msdn.microsoft.com/en-us/library/bb385967.aspx

于 2012-05-21T10:13:47.563 回答
0

ru 是俄罗斯文化的中性名称,ru-Ru 是特定俄罗斯(俄罗斯)文化的名称。

这取自 MSDN 链接

在启动时,该示例在所有系统上将当前文化和当前 UI 文化设置为俄语(俄罗斯),但默认系统文化已经是俄语(俄罗斯)的系统除外。如果默认系统文化已经是俄语(俄罗斯),则代码将当前文化和当前 UI 文化设置为英语(美国)。

这是其他很好的解释

如果特定区域性的资源在操作系统中不可用,则使用相关中性区域性的资源。如果中性文化的资源不可用,则使用主程序集中嵌入的资源。

Windows API 中的语言环境列表与 .NET Framework 支持的区域性列表略有不同。如果需要与 Windows 的互操作性,例如,通过 p/invoke 机制,应用程序应使用为操作系统定义的特定区域性。使用特定区域性可确保与等效的 Windows 区域设置保持一致,后者使用与 LCID 相同的区域设置标识符进行标识。

于 2012-05-18T11:31:04.257 回答