本地化和绑定不能一起工作

时间:2012-06-08 08:50:06

标签: windows-phone-7 globalization

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

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

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

Thread.CurrentThread.CurrentUICulture = Settings.Language;

当我按下后退按钮并返回主页面时,appbar项目已正确本地化,而其他一切都没有 唯一的解决方法(我真的不喜欢,只是为了理解)是这样的:

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

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

1 个答案:

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

并完成了工作。