我已经创建了一个简单的Windows应用程序,其中包含3种语言:英语,德语和俄语。我没有使用像ru-RU,en-US或de-DE这样的完整文化名称,但我只是指定语言:ru,en,de。所以我有以下资源文件结构:
prj-folder
\ strings
\ de
\ Resource.resw
\ en
\ Resource.resw
\ ru
\ Resource.resw
在清单中,我将默认文化设置为'en'。我的开发工作站有一个en-US文化,所以如果运行app,一切都是英文的(正如预期的那样,顺便说一句)。
为了测试其他文化,我在App.ctor
中添加了以下代码:
public App()
{
InitializeComponent();
var culture = new CultureInfo("ru-RU");
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = culture.Name;
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
// ...
}
效果很好。我可以用俄语或德语看到一切。
我已经发布了我的应用程序 - 今天它已经出现在商店中。在开发工作站(en-US)上,一切都按预期工作。但!在具有德语(de-DE文化)的工作站上 - 一切都是英文:Windows Store中的描述和应用程序中的UI。我不知道我的本地化有什么问题,为什么一切都是英文的。
注意:这可能很重要。我在应用更新中添加了德语和俄语。第一个版本只有一种语言 - 英语和默认文化是en-US。
更新:似乎问题与使用德语Windows 8的设备有关。大多数应用程序都使用de-DE文化运行,但我的应用程序在en-US文化下运行。我会试着弄明白为什么。
答案 0 :(得分:2)
您的清单是否列出了所有三种语言?应用程序使用的语言集将过滤为清单中的语言,因此,如果您的清单仅包含“en”,那么无论用户设置如何,您都可以获得这些语言。
.NET Culture和UI Culture对Windows应用商店应用的本地化没有影响。感兴趣的设置是:
Windows.Globalization.ApplicationLanguages.Languages 这是资源加载器使用的列表,它由以下构造:
1)Windows.System.UserProfile.GlobalizationPreferences.Languages在语言中设置的用户语言配置文件
2)Windows.Globalization.ApplicationLanguages.ManifestLanguages。应用程序清单中定义的语言。
3)Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride。可选的特定于应用程序的持久性主要语言。
简化一点,ApplicationLanguages.Languages是GlobalizationLPreferences.Languages与ManifestLanguages的交集。如果没有交集,那么清单语言就会赢。主语言覆盖始终预先添加到列表中,而不会对清单进行过滤。
如果其他现代应用程序显示德语,最可能的原因是您在清单中没有德语。另一种可能性是,PrimaryLanguageOverride以某种方式陷入了Engish。