我使用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);
}
(因为我认识到CultureInfo.CurrentCulture和CultureInfo.CurrentUICulture总是" en-EN" no,我从这篇文章https://www.pedrolamas.com/2015/11/02/cultureinfo-changes-in-uwp/得到了这种对Windows 10区域文化的这种安静奇怪的方式。重要的是我在我的机器区域和语言设置中配置的内容)
要检查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-bundle并将其安装在另一个(Windows10-Desktop)设备上时,应用程序无法识别其语言。 在我的情况下,设备设置为德语,区域和语言。此外,当使用测试程序时,只要它是一个有效的文化名称,它就会默认获取我设置的字符串,例如:" en-EN"," en-US&# 34;," de-DE"," de"," en" (所有这些在我的开发机器上工作正常)如果它是一个无效的字符串,我得到一个异常,在我的unhandled-error-log中有一个日志条目。它刷新页面,甚至在我的PrimaryLanguageOverride-Log中写入新设置的语言,但它不会改变我翻译的任何文本。
所以我的问题是,这是一个常见的问题(因为我在UWP / Win10中认识到文化系统有点混乱)或者我是否使用错误的程序来覆盖App-Culture?
答案 0 :(得分:1)
这是AppXBundling的一个问题。安装软件包时,它会检查已安装语言包的当前操作系统,并从软件包中复制相关语言资源,并省略其他语言文件。单个捆绑包的目标是复制必要的资源并构建应用程序,因此不在系统中的语言被认为是无关紧要的。作为修复,您可以停止生成单个包并为每个CPU体系结构创建包。 Check this for more info