Локализация
В mdui по умолчанию используется английский язык. Для использования других языков требуется настройка локализации.
Использование
mdui предоставляет три функции для реализации локализации:
loadLocale: загружает языковой пакет. Параметр — функция, которая получает код языка и возвращает Promise, который разрешается (resolve) в соответствующий языковой пакет. Вызовите эту функцию в точке входа вашего приложения.setLocale: переключает на указанный язык. Параметр — новый код языка, возвращает Promise, который разрешается после завершения загрузки языкового пакета.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 разрешится после успешного переключения
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
Если вы используете mdui через CDN, вы можете загружать языковые пакеты непосредственно из 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 |
Добавление нового перевода
Чтобы добавить новый перевод или улучшить существующий, создайте Pull Request на Github. Языковые пакеты находятся в packages/mdui/src/xliff. Вы можете редактировать их прямо на Github.