1

我正在开发我的第一个应用程序,并且正在尝试使其成为多语言。
使用AppHub 示例和其他一些链接,我创建了资源文件,修复了组件上的绑定字符串并设置了设置页面。
我遇到的第一个问题是菜单项和应用程序栏按钮不能使用本地化字符串(项目启动时抱怨)所以我有:

  • TextBlocks 和其他与本地化字符串绑定的组件
  • 使用加载本地化字符串的过程手动本地化 Appbar 按钮和项目

现在我有了我的设置页面,用户可以更改的一项是语言。
好吧,根据用户选择选择正确的CultureInfo,然后我使用

Thread.CurrentThread.CurrentUICulture = Settings.Language;

当我按下后退按钮并返回主页时,应用栏项目已正确本地化,而其他所有内容均未正确本地化。
唯一的解决方法(我真的不喜欢,只是为了理解)是这样的:

public MainPage()
{
    Thread.CurrentThread.CurrentUICulture = Settings.Language;
    InitializeComponent();
    // Everything else I need here
}

所以我必须在创建组件之前设置语言以使其工作。
怎么了?使用绑定字符串更改语言后刷新页面的正确方法是什么?
我没有放很多代码,因为我基本上使用了链接中提供的代码,但是如果您需要更多信息,我将编辑我的问题。

4

1 回答 1

2

我终于找到了一种解决方案,可以自动更新我的应用程序组件以响应语言变化。
一个很好的教程可以在这里找到;简而言之,您必须找到一种方法来通知您的应用程序本地化资源已更改。

  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();

工作就完成了。

于 2012-06-08T09:16:47.080 回答