我正在为 WP8 开发多语言应用程序。
我已阅读此博客条目,但我发现“使用户能够即时更改语言”步骤过于繁琐。
是否有可能以某种方式刷新整个应用程序或至少页面的 UI 元素的语言和文本属性?
文章中方法的问题是当前页面的元素因为已经渲染,所以不会自动更新,需要在代码中更新字符串。
一种可能的解决方案是在更改语言时重新加载页面。该SetUILanguage
方法如下所示:
private void SetUILanguage(string locale)
{
// Set this thread's current culture to the culture associated with the selected locale.
CultureInfo newCulture = new CultureInfo(locale);
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture;
// Set the FlowDirection of the RootFrame to match the new culture.
FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection),
AppResources.ResourceFlowDirection);
App.RootFrame.FlowDirection = flow;
// Set the Language of the RootFrame to match the new culture.
App.RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);
// Refresh the page in order to localize already rendered elements
NavigationService.Navigate(new Uri(NavigationService.Source + "?Refresh=true", UriKind.Relative));
}
这样元素将被重新渲染,并显示本地化的字符串,而无需一一更改。