本地化:一般文化与特定文化

时间:2012-11-02 11:40:19

标签: c# localization windows-8 windows-runtime windows-store

我已经创建了一个简单的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文化下运行。我会试着弄明白为什么。

1 个答案:

答案 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。