1

我创建了一个简单的 Windows 商店应用程序,其中包含 3 种语言:英语、德语和俄语。我没有使用完整的文化名称,如 ru-RU、en-US 或 de-DE,但我只是指定语言:ru、en、de。所以我有以下资源文件结构:

prj-folder
\ strings
  \ de
    \ Resource.resw
  \ en
    \ Resource.resw
  \ ru
    \ Resource.resw

在清单中,我将默认文化设置为“en”。我的开发工作站具有美国文化,因此如果运行该应用程序,所有内容都是英文的(正如预期的那样,顺便说一句)。为了测试其他文化,我在以下代码中添加了以下代码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 文化下运行。我会试着找出我们的原因。

4

1 回答 1

2

您的清单是否列出了所有三种语言?应用程序使用的语言集被过滤为清单中存在的语言,因此,如果您的清单仅包含“en”,那么无论用户设置如何,您都会得到这样的结果。

.NET 文化和 UI 文化对 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 以某种方式卡在英语上。

于 2012-12-08T04:48:31.647 回答