我正在开发我的第一个应用程序,并且我正在努力使其成为多语言 使用AppHub example和其他一些链接创建了我的资源文件,修复了我的组件上的绑定字符串并设置了设置页面 我遇到的第一个问题是菜单项和appbar按钮无法使用本地化字符串(项目在启动时被抱怨)所以我有:
现在我有了我的设置页面,用户可以更改的一个项目是语言 那么,根据用户选择选择正确的CultureInfo然后我使用
Thread.CurrentThread.CurrentUICulture = Settings.Language;
当我按下后退按钮并返回主页面时,appbar项目已正确本地化,而其他一切都没有 唯一的解决方法(我真的不喜欢,只是为了理解)是这样的:
public MainPage()
{
Thread.CurrentThread.CurrentUICulture = Settings.Language;
InitializeComponent();
// Everything else I need here
}
因此我必须在创建组件之前设置语言才能使其正常工作 怎么了?使用绑定字符串更改语言后,哪个页面刷新是正确的? 我没有放很多代码,因为我基本上使用了链接中提供的代码,但是如果你需要更多信息,我会编辑我的问题。
答案 0 :(得分:2)
我终于找到了一个解决方案,可以自动更新我的应用程序组件,以应对语言变化 可以找到一个很好的教程here;简而言之,您必须找到一种方法来通知您的应用程序本地化资源已更改。
public class LocalizedStrings : ViewModelBase
{
private static AppResources localizedresources = new AppResources();
public AppResources LocalizedResources
{
get { return localizedresources; }
}
public void UpdateLanguage()
{
localizedresources = new AppResources();
RaisePropertyChanged(() => LocalizedResources);
}
public static LocalizedStrings LocalizedStringsResource
{
get
{
return Application.Current.Resources["LocalizedStrings"]
as LocalizedStrings;
}
}
}
当用户更改语言时,您应该只需运行
LocalizedStrings.LocalizedStringsResource.UpdateLanguage();
并完成了工作。