2012-05-18 98 views
8

我本地化我ExportForm成德语(DE)和俄语(RU),你可以看到如下: .NET本地化 - 如何设置语言?

如果我的CultureInfo是德国(奥脱AT),那么一切都OK,我见格式翻译成德文:

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

但我看到的俄罗斯(RU-RU)的英文UI的CultureInfo

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

虽然如果我用 “儒”,而不是 “RU-RU”,以创建它的作品CultureInfo:

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

您能帮我解答一下问题吗?或者请指出一个方向来调查问题。

+0

尝试为'ru-RU'添加一个空的资源文件。找不到的资源应该回到'ru'文件。 – Oded

+0

非常奇怪,但即使我为ru-RU添加非空资源文件,我也无法通过Thread.CurrentThread.CurrentUICulture = new CultureInfo(“ru-RU”)显示它 –

+0

我觉得这很奇怪,考虑到你没有看到“de-AT”这样的问题(并且它适用于“ru”)。在你的调试器中,你可以在分配新的CultureInfo(“RU-RU”)后检查Thread.CurrentThread.CurrentUICulture设置为什么......我想知道这个问题是否在CultureInfo构造函数中。 – Clafou

回答

0

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

This is taken from MSDN link

在启动时,例如将所有系统上的当前区域性和当前UI 文化,俄语(俄罗斯),除了那些在其上 系统默认的文化已经是俄罗斯(俄罗斯)。如果默认系统文化已经是俄罗斯语(俄罗斯),则代码将当前的文化和当前的用户界面文化设置为英语(美国)。

Here is other good explanation

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

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

+0

你需要阅读有关回退。这并没有解决这个问题。 – Oded

2

我已经确定的问题:RU-RU被选定为我的主要项目集设置一个中立的语言。

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

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