UWP App國際化的兩種實現

開發App,我們都會標配簡體中文和英文兩種語言。至於你加多少種,取決於你的客戶市場。無論如何,英語是必不可少的。

 

UWP平臺裏面,微軟也提供了一種默認的國際化方案,即修改Resources.resw資源文件,不過這種方案有一個很大的缺點,需要重啓App才能生效,這就對客戶體驗造成了很大的影響。

另一種方案是Github上的一個方案,作者做的很完美了,適配了WPF和UWP平臺,可以實現實時切換語言,而不必重啓App。

下面就看一下兩個方案的實現。

 

1. 微軟自家的修改Resources.resw方案  ——  需要重啓生效

微軟的方案比較麻煩,不推薦使用。

這裏舉一個簡單的例子。

a. 新建一個頁面有一個確定鍵,一個取消鍵,一個下拉框選擇語言。

 

注意需要翻譯的控件,我都添加了Uid屬性,系統就是根據這個找翻譯文字的,所以一定要定義好,而且不能重複。

<StackPanel>
        <Button x:Uid="button_ok" Content="OK"/>
        <Button x:Uid="button_cancel" 
                Margin="0 30" Content="Cancel"/>
        <ComboBox SelectionChanged="ComboBox_SelectionChanged">
            <TextBlock x:Uid="tb_lang_en" Text="English"/>
            <TextBlock x:Uid="tb_lang_zh" Text="簡體中文"/>
        </ComboBox>
    </StackPanel>

 

 

 

b. 如果解決方案中沒有Strings文件夾,那麼新建一個。然後再下面新建對應的語言文件夾。我這裏新建了zh-cn,en-us。

每一個下面新建一個資源文件Resources.resw。

 

 

 

然後打開Resources.resw,

編輯控件的對應的屬性,比如Button的Content,TextBlock的Text等等,要精確到屬性,不然只寫一個button,是不可以被識別的。

爲了避免Uid出錯,可以編輯完一個文件,然後整體複製過去,只用改Value就可以了。

 

 

 

 

 

 

c. 新增選擇語言事件,把選擇的語言記錄到本地存儲。

需要用到Windows.Storage.ApplicationData。

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if((sender as ComboBox).SelectedIndex == 0)
            {
                Windows.Storage.ApplicationData.Current.LocalSettings.Values["CurrentLanguage"] = "en-us";
            }
            else if ((sender as ComboBox).SelectedIndex == 1)
            {
                Windows.Storage.ApplicationData.Current.LocalSettings.Values["CurrentLanguage"] = "zh-cn";
            }

        }

 

d. 在App.xaml.cs中,設置App的首選語言。

在App初始化this.InitializeComponent();前設置。

        public App()
        {
            if (Windows.Storage.ApplicationData.Current.LocalSettings.Values["CurrentLanguage"] != null)
            {
                string strCurrentLanguage = Windows.Storage.ApplicationData.Current.LocalSettings.Values["CurrentLanguage"].ToString();
                Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = strCurrentLanguage;
            }
            else
                Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "zh-cn";

            this.InitializeComponent();
            this.Suspending += OnSuspending;
        }

 

 

這樣就算完成了。

 

 

打開App後,選擇語言,然而並沒有什麼卵反應。重啓一下App,才能看到效果。

你氣不氣!  

 

 

 

2. Github大神的動態加載方案  ——  實時生效,強烈推薦!!!

 

項目地址:https://github.com/DaZiYuan/MultiLanguageForXAML.git

 

裏面包含了源代碼,還有實例文件,非常非常全面。我就不多舉例了。

只需要定義好json文件,然後在代碼裏面引用即可。

現在非常流行的localise網站支持導出世界通用的json,從翻譯到開發,完美對接。

而不像微軟的Resw文件,localise不支持,也不會支持。

 

總之,甩微軟的那套方案10086條街。  

 

預覽效果:

 

原文出處:https://www.cnblogs.com/hupo376787/p/12373571.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章