即时更改本地化

时间:2013-09-09 05:51:57

标签: c# windows-phone-8

我正在为WP8开发一个多语言应用程序。

我已阅读this blog entry,但我发现“让用户动态更改语言”步骤过于繁琐。

是否有可能以某种方式刷新整个应用程序或至少页面的UI元素的语言和文本属性?

1 个答案:

答案 0 :(得分:3)

本文中方法的问题是当前页面的元素不会自动更新,因为它们已经呈现,您需要在代码中更新字符串。

可能的解决方案是在更改语言时重新加载页面。 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));
}

这样,元素将被重新渲染,并将显示本地化的字符串,而无需逐个更改它们。