1. 程式人生 > >UWP App國際化的兩種實現

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條街。  

 

預覽效果:

&n