【发布时间】:2024-01-31 04:55:02
【问题描述】:
我希望以前没有问过这个问题,我在 MSDN 或这里找不到简单的解决方案。
Windows phone 8.1 应用程序以不止一种语言部署。
为此,我使用Strings\en-US\Ressources.resw 中的默认语言(英语)并安装了Multilingual App Toolkit,并在其中添加了所有其他语言。
要更改语言,我有以下代码:
private void changeLang(string cul)
{
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = cul;
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset();
if (Frame != null)
Frame.Navigate(typeof(MainPage));
}
可以调用
changeLang("en-US");
之后我必须重新启动应用程序(如果不重新启动就无法使其工作)。
问题是我的实现。我创建了一个名为 Settings 的页面,我想在其中为用户提供更改语言的可能性。
现在我想为用户提供一个ComboBox,其中包含我已翻译的所有语言。默认情况下,选定的ComboBoxItem 应显示应用程序的当前语言(不是系统语言,因为用户可能已经更改了语言)。
这是我对问题的解决方案,我希望这对其他人也有用。
首先我们创建一个新的struct:
public class ComboboxItem
{
public string Text { get; set; }
public object Value { get; set; }
public override string ToString()
{
return Text;
}
}
然后在表单的OnNavigate 部分添加以下代码:
settings_language_cb.Items.Add(new ComboboxItem { Text = "Deutsch", Value = "de-DE" });
settings_language_cb.Items.Add(new ComboboxItem { Text = "English", Value = "en-US" });
var curLangItem = settings_language_cb.Items.SingleOrDefault(x => (x as ComboboxItem).Value.ToString() == CultureInfo.CurrentCulture.Name);
settings_language_cb.SelectedItem = curLangItem;
settings_language_cb.PlaceholderText = (curLangItem as ComboboxItem).Text;
仅此而已。
【问题讨论】:
-
gist.github.com/artem-zinnatullin/8062647 这可以帮助您在不重新启动应用程序的情况下更改语言。它在我的 windows phone 8 应用程序中对我有用。
标签: c# selection windows-phone-8.1 multilingual