在地化
mdui 內部預設使用英文,如果要使用其他語言,則需要進行多語言設定。
使用方法
mdui 提供三個函式來實作多語言功能:
loadLocale:載入語言包。參數為一個函式,接收一個語言代碼作為參數,回傳 Promise,語言包載入完成時會 resolve 為對應的語言包。請確保在專案進入點呼叫該函式。setLocale:切換到指定的語言。參數為新的語言代碼,回傳 Promise,在新的語言包載入完成後會 resolve。getLocale:取得目前的語言代碼。
範例如下:
import { loadLocale } from 'mdui/functions/loadLocale.js';
import { setLocale } from 'mdui/functions/setLocale.js';
import { getLocale } from 'mdui/functions/getLocale.js';
// 在專案進入點處呼叫 loadLocale 載入語言包
loadLocale((locale) => import(`../node_modules/mdui/locales/${locale}.js`));
// 在需要切換語言時呼叫該函式。在 Promise resolve 後,語言切換成功
setLocale('zh-cn').then(() => {
// 呼叫 getLocale 可取得目前的語言代碼
console.log(getLocale()); // zh-cn
});
狀態事件
在語言切換開始、結束、失敗時,會在 window 上觸發 mdui-localize-status 事件,你可以監聽該事件來執行自訂操作,例如在語言切換成功後將語言代碼寫入 Cookie。
事件的detail.status 屬性描述了目前發生何種狀態的變更,可能的值包括:loading、ready、error:
detail.status |
描述 |
|---|---|
loading |
開始載入新的語言包。
|
ready |
新的語言包載入成功。
|
error |
新的語言包載入失敗。
|
範例如下:
window.addEventListener('mdui-localize-status', (event) => {
if (event.detail.status === 'loading') {
console.log(`開始載入新的語言包:${event.detail.loadingLocale}`);
} else if (event.detail.status === 'ready') {
console.log(`新語言包 ${event.detail.readyLocale} 載入成功`);
} else if (event.detail.status === 'error') {
console.error(
`新語言包 ${event.detail.errorLocale} 載入失敗:${event.detail.errorMessage}`,
);
}
});
語言包載入方式
延遲載入
使用動態引入可以在切換到對應語言時,才下載對應的語言包。這是最為推薦的方法。
import { loadLocale } from 'mdui/functions/loadLocale.js';
loadLocale((locale) => import(`../node_modules/mdui/locales/${locale}.js`));
預載入
在頁面載入時先預先下載所有需要的語言包。這樣在切換語言時就不必重新下載,切換也會更快。
import { loadLocale } from 'mdui/functions/loadLocale.js';
const localizedTemplates = new Map([
['zh-cn', import(`../node_modules/mdui/locales/zh-cn.js`)],
['zh-tw', import(`../node_modules/mdui/locales/zh-tw.js`)],
]);
loadLocale(async (locale) => localizedTemplates.get(locale));
靜態引入
使用此方法可將所有需要的語言包與專案程式碼打包成同一個檔案,不必另外下載語言包。
import { loadLocale } from 'mdui/functions/loadLocale.js';
import * as locale_zh_cn from 'mdui/locales/zh-cn.js';
import * as locale_zh_tw from 'mdui/locales/zh-tw.js';
const localizedTemplates = new Map([
['zh-cn', locale_zh_cn],
['zh-tw', locale_zh_tw],
]);
loadLocale(async (locale) => localizedTemplates.get(locale));
透過 CDN 載入語言包
如果你是透過 CDN 使用 mdui,可以直接從 CDN 載入語言包。範例如下:
<script src="https://unpkg.com/mdui@2/mdui.global.js"></script>
<script>
mdui.loadLocale(
(locale) => import(`https://unpkg.com/mdui@2/locales/${locale}.js`),
);
mdui.setLocale('zh-cn');
</script>
支援的語言
目前,mdui 支援以下語言:
| 語言 | 語言代碼 |
|---|---|
| 阿拉伯語 | ar-eg |
| 亞塞拜然語 | az-az |
| 保加利亞語 | bg-bg |
| 孟加拉語(孟加拉國) | bn-bd |
| 白俄羅斯語 | be-by |
| 加泰隆尼亞語 | ca-es |
| 捷克語 | cs-cz |
| 丹麥語 | da-dk |
| 德語 | de-de |
| 希臘語 | el-gr |
| 英語 | en-gb |
| 英語(美式) | en-us |
| 西班牙語 | es-es |
| 愛沙尼亞語 | et-ee |
| 波斯語 | fa-ir |
| 芬蘭語 | fi-fi |
| 法語(比利時) | fr-be |
| 法語(加拿大) | fr-ca |
| 法語(法國) | fr-fr |
| 愛爾蘭語 | ga-ie |
| 加利西亞語(西班牙) | gl-es |
| 希伯來語 | he-il |
| 印地語 | hi-in |
| 克羅埃西亞語 | hr-hr |
| 匈牙利語 | hu-hu |
| 亞美尼亞 | hy-am |
| 印尼語 | id-id |
| 義大利語 | it-it |
| 冰島語 | is-is |
| 日語 | ja-jp |
| 喬治亞語 | ka-ge |
| 高棉語 | km-kh |
| 北庫德語 | kmr-iq |
| 卡納達語 | kn-in |
| 哈薩克語 | kk-kz |
| 韓語/朝鮮語 | ko-kr |
| 立陶宛語 | lt-lt |
| 拉脫維亞語 | lv-lv |
| 馬其頓語 | mk-mk |
| 馬拉雅拉姆語 | ml-in |
| 蒙古語 | mn-mn |
| 馬來語(馬來西亞) | ms-my |
| 挪威語 | nb-no |
| 尼泊爾語 | ne-np |
| 荷蘭語(比利時) | nl-be |
| 荷蘭語 | nl-nl |
| 波蘭語 | pl-pl |
| 葡萄牙語(巴西) | pt-br |
| 葡萄牙語 | pt-pt |
| 羅馬尼亞語 | ro-ro |
| 俄語 | ru-ru |
| 斯洛伐克語 | sk-sk |
| 塞爾維亞語 | sr-rs |
| 斯洛維尼亞語 | sl-si |
| 瑞典語 | sv-se |
| 坦米爾語 | ta-in |
| 泰語 | th-th |
| 土耳其語 | tr-tr |
| 烏爾都語(巴基斯坦) | ur-pk |
| 烏克蘭語 | uk-ua |
| 越南語 | vi-vn |
| 簡體中文 | zh-cn |
| 繁體中文(中國香港) | zh-hk |
| 繁體中文(台灣) | zh-tw |
提交新的翻譯
要貢獻新的翻譯、或對現有翻譯進行改進,請在 GitHub 上發起一個 Pull Request。語言包位於 packages/mdui/src/xliff,你可以直接在 GitHub 上進行編輯。
本頁目錄