使用与OS语言不同的默认语言时本地化错误

问题描述:

我遇到了本地化问题 - 它有时会检索不正确的值。这里是我的情况:使用与OS语言不同的默认语言时本地化错误

在每个程序集中,我将NeutralResourcesLanguage设置为en-US。
可用资源列表是:default(english)fr,de。

所以我英语OS我选择任何语言 - 一切都很好(的UICulture设置为英语,法语或DE和文化分别为EN-US,DE-DE或FR-FR) 。

但是,当我有德国OS并选择英语(的UICulture是EN和文化为en-US) - 一些字符串都在德国。

另外,如果我离开Thread.CurrentThread.CurrentUICulture ==“德”和Thread.CurrentThread.CurrentCulture =“EN-US”,那么一些文字会英语..

任何解释和解决办法呢?

我发现问题 - 我使用的DependencyProperty默认值如PropertyMetadata(Resources.Text)。并且由于DP是静态的,它在使用系统语言进行初始化之前,在ApplicationStartup处理程序中应用了实际的本地化设置。

你需要使用适当的语言代码,在你的情况下,这些将是enfrde

如果没有必要,请不要使用专门的语言代码,因此如果您只有一个法语翻译,请只使用fr

只有在必要时才应使用更专业的。

更新:在Windows上,您无法完全控制从OS获得的消息的语言。通常他们会使用您当前的线程语言环境,但有时他们会使用操作系统默认语言,您无法对此做任何事情。只需记录用户的行为。

+0

呃,对不起?我不认为我理解你是对的 - 我正在使用适当的语言和UICultures,我不是吗? – Walkor

+0

我更新了答案,来自操作系统的字符串本地化并不完全在您的控制之下。 – sorin