为什么我的本地化仅适用于我的开发机器?

时间:2016-06-16 15:25:50

标签: c# .net visual-studio localization uwp

我使用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?

1 个答案:

答案 0 :(得分:1)

这是AppXBundling的一个问题。安装软件包时,它会检查已安装语言包的当前操作系统,并从软件包中复制相关语言资源,并省略其他语言文件。单个捆绑包的目标是复制必要的资源并构建应用程序,因此不在系统中的语言被认为是无关紧要的。作为修复,您可以停止生成单个包并为每个CPU体系结构创建包。 Check this for more info