none
MvvM模式下,实时切换多国语言失效(localization) RRS feed

  • 问题

  • 我想进行实时多国语言的切换,建了两个测试工程,一个是使用MvvM进行的页面切换,一个是用的微软的sample的方式进行的页面切换方式:

    用微软sample的方式切换页面的工程首页是一个textblock和button:

    点击switchTo之后切换到下一个界面,这个界面只有一个返回的按钮,在点击back返回之前,在系统设置里,将系统的语言,设置为日语。

    然后点击back,可以看到textblock的语言自动切换为日语了:

    但是我用MVVM的切换方式,界面差不多,但是无法实现之前的效果,切换语言然后点击back按钮之后,textblock显示的仍然是“this is english”,我想知道这是不是微软的一个bug?

    你可以在下面的链接获得我的两个测试工程:

    微软sample的切换方式:

    https://skydrive.live.com/redir?resid=9933D7B95BB797D8!2318

    MvvM切换方式:

    https://skydrive.live.com/redir?resid=9933D7B95BB797D8!2319

    2012年7月20日 9:09

答案

  • Hi,

    我仔细看了你提供的微软Sample和MvvM切换方式的代码。我发现两个代码之间的区别在于微软sample在切换页面的时候使用的是navigate方法而MvvM程序用的是设置Window.Current.Content的内容。可能因为直接设置内容的原因所以不能够在程序运行当中得知语言切换。之所以出现你遇到的问题可能是因为navigate方法实现了在导航到页面之前对系统一些设置进行更新。因此我们手动的对你的程序写了update方法希望能够同样更新设置。但是却发现即使重新生成页面之后赋值给Content问题依然存在。

    我们推荐使用navigate来做页面之间的导航,我不认为这是bug而是实现方法的问题。如果你依然想使用这种方法进行页面切换的话,可以手动的进行语言检测和语言设置。

    获取语言设置:

    // Get the top user-preferred language and its display name.
    var topUserLanguage = Windows.System.UserProfile.GlobalizationPreferences.languages[0];
    var language = new Windows.Globalization.Language(topUserLanguage);
    var displayName = language.displayName;

    手动设置语言比如设置日语:

                Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "ja-JP";
    

    ApplicationLanguage class文档:

    http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.globalization.applicationlanguages.aspx

    Hope this helps

     
    • 已标记为答案 simon_liao 2012年7月24日 5:43
    2012年7月24日 4:46
    版主