我正在使用 Visual Studio 2015 在 SilverLight 中创建 Windows Phone 应用程序 8.1。我正在用英语和阿拉伯语创建多语言应用程序。为此,我在项目中创建了 Strings 文件夹,其中包含 en-US 和 ar-KW 两个文件夹,每个文件夹中都有 Resources.resw 文件。
I am x:Uid设置属性。例如Key:- Actual.Text Value:- Actual
<TextBlock x:Uid="Actual" TextWrapping="Wrap" MaxWidth="65" HorizontalAlignment="Center" />
上面的效果非常好。我有包含 EN 和 AR 项目的组合框。我正在触发 SelectionChanged 事件来更改语言但问题是,当我停止应用程序并再次运行它时,它只会更改文本和布局。
我怎样才能在运行时做到这一点而不需要重新启动。
private void LanguageComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string selectedItem = (e.AddedItems[0] as ComboBoxItem).Content as string;
var RootFrame = Window.Current.Content as SlideApplicationFrame;
if (selectedItem == "EN")
ApplicationLanguages.PrimaryLanguageOverride = "en-US";
else if (selectedItem == "AR")
ApplicationLanguages.PrimaryLanguageOverride = "ar-KW";
RootFrame.Navigate(this.GetType());
}
据我记得,微软不建议在运行时更改语言(通过覆盖它),但您可以通过重新加载页面来做到这一点。最简单的方法是将带有代码的组合框放在另一个页面上,在那里您将覆盖语言,因此当您向后导航(并且页面将重新加载)时,您将拥有您想要的内容。请记住,覆盖语言不会在运行时本地化控件(但这对您来说不应该是一个大问题)。您必须重新启动应用程序才能本地化控件。
当您使用以下代码覆盖语言时:
ApplicationLanguages.PrimaryLanguageOverride = "xx-XX";
然后它会被保存,您不必在开始时再次覆盖它。应用程序将使用覆盖的语言加载。
此外,当您本地化应用程序时,最好覆盖文化信息,因为如果您有一些日期 - 它们会根据文化正确显示(例如 12/01/2015 或 01-12-2015)
string lang = "en-US"; //default
var culture = new CultureInfo(lang);
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = lang;
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
还有一个重要的 thing.
在您的应用程序清单或那里的内容中,您需要设置生成应用程序包到“从不”。原因是,当您将打包版本上传到商店时,您的运行时本地化将无法工作。您可以使用模拟器或调试版本甚至有时使用已部署的发行版本在运行时本地化您的应用程序。但是您需要这样做,这样当您的应用程序在商店中时,本地化就不会出现问题,并且可以访问所有语言字符串(因为对于打包版本,如果您尚未安装该语言,则其中一些字符串可能无法访问)在您的手机上)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)