【发布时间】:2016-10-18 05:14:06
【问题描述】:
我已使用 MulitlingualAppToolkit 4.0 将我的应用程序本地化为两种语言(英语和德语)。英语是基础语言,而德语是基于英语的翻译。 翻译作为 resw 文件存储在文件夹“strings.en”和“strings.de”中。
在 App.xaml.cs App() 我这样设置文化:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = GetCurrentCulture();
CultureInfo.CurrentUICulture = GetCurrentCulture();
private CultureInfo GetCurrentCulture()
{
var cultureName = new DateTimeFormatter("longdate", new[] {"US"}).ResolvedLanguage;
return new CultureInfo(cultureName);
}
(我从这篇文章https://www.pedrolamas.com/2015/11/02/cultureinfo-changes-in-uwp/ 中得到了这种安静奇怪的 Windows 10 区域文化方式,因为我认识到 CultureInfo.CurrentCulture 和 CultureInfo.CurrentUICulture 始终是“en-EN”,无论我在我的机器中配置什么区域和语言设置)
为了检查 PrimaryLanguageOverride 是否按预期工作,我在我的第一个页面上添加了一个名为 tbTest 的 TextBox,并添加了一个链接到此事件的按钮:
private void Button_Click(object sender, RoutedEventArgs e)
{
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = tbTest.Text;
Frame.Navigate(this.GetType(), 0);
System.IO.File.AppendAllText(System.IO.Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "PrimaryLanguageOverride.txt"),
DateTime.Now + " - Actual PrimaryLanguageOverride:\n " + WIndows.Globalization.ApplicationLanguages.PrimaryLanguageOverride);
}
catch(Exception ex) { Helper.Log.LogUnhandledError(ex); }
}
现在奇怪的东西来了:
当从我的开发机器调试或执行应用程序时,一切都按预期工作,但是当我制作一个 appx 捆绑包并将其安装在另一个(Windows10-桌面)设备上时,应用程序无法识别其语言。 在我的情况下,设备设置为德语、地区及其语言。此外,当使用测试程序时,它会得到我设置的字符串,只要它是有效的文化名称,例如:“en-EN”、“en-US”、“de-DE”、“de”, “en”(所有这些在我的开发机器上都可以正常工作)如果它是一个无效的字符串,我会得到一个异常,在我的未处理错误日志中有一个日志条目。它刷新页面,甚至在我的 PrimaryLanguageOverride-Log 中写入新设置的语言,但它不会更改我翻译的任何文本。
所以我的问题是,这是一个常见问题(因为我在 UWP/Win10 中认识到文化系统有点混乱)还是我使用了错误的程序来覆盖 App-Culture?
【问题讨论】:
标签: c# .net visual-studio localization uwp