Ember.js предоставляет мощные инструменты для создания динамичных веб-приложений, и одна из его ключевых возможностей — это поддержка интернационализации (i18n). Интернационализация позволяет создавать приложения, которые могут быть легко адаптированы для различных языков и регионов. Это особенно важно для глобальных сервисов, которые обслуживают пользователей из разных стран и говорят на разных языках. В этой главе рассмотрим, как в Ember.js можно реализовать поддержку нескольких языков с помощью различных инструментов и подходов.
Для работы с интернационализацией в Ember.js обычно используется
библиотека ember-intl. Это официальный пакет для поддержки
i18n, который интегрируется с Ember.js и предоставляет набор
инструментов для работы с переводами, форматированием дат, чисел и
валют.
Чтобы установить и настроить ember-intl в проекте, нужно
выполнить следующие шаги:
Установка пакета
Для установки библиотеки используйте команду:
ember install ember-intlКонфигурация
После установки необходимо настроить локали, с которыми будет
работать ваше приложение. Для этого создается файл конфигурации в
config/environment.js. В нем указывается язык по умолчанию
и список поддерживаемых локалей:
module.exports = function (environment) {
let ENV = {
// Другие настройки
'ember-intl': {
defaultLocale: 'en', // Язык по умолчанию
locales: ['en', 'ru', 'fr'] // Список поддерживаемых языков
}
};
return ENV;
};Создание файлов переводов
Для каждой локали нужно создать соответствующие файлы переводов. Они
должны быть размещены в директории translations. Например,
для английского и русского языков файлы будут выглядеть так:
translations/en.yamltranslations/ru.yamlВ этих файлах описываются ключи и их переводы. Пример для английского языка:
greeting: "Hello, World!"
Для русского языка:
greeting: "Привет, мир!"Ember.js предоставляет удобные способы использования переводов в
шаблонах. Для этого используется хелпер {{t}}, который
позволяет выводить переводы для заданных ключей. Например, чтобы вывести
перевод для ключа greeting, можно использовать следующий
код:
<h1>{{t 'greeting'}}</h1>
Если в файле перевода для текущей локали найдено значение по ключу
greeting, оно будет выведено на странице. Если перевод не
найден, будет использовано значение по умолчанию.
Для изменения языка приложения в Ember.js с использованием
ember-intl необходимо использовать сервис
intl. С его помощью можно динамически менять язык без
перезагрузки страницы.
Пример переключения локали в компоненте:
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
export default class LanguageSwitcherComponent extends Component {
@service intl;
switchLocale(locale) {
this.intl.setLocale(locale);
}
}
В этом примере создается компонент, который позволяет переключать
язык, используя метод setLocale сервиса intl.
Чтобы изменить язык, достаточно вызвать метод с нужным параметром,
например, this.switchLocale('ru') для установки русского
языка.
Кроме переводов, ember-intl также предоставляет
возможности для форматирования данных, таких как даты, числа и валюты, в
зависимости от локали. Это особенно полезно для корректного отображения
данных в различных регионах.
Для форматирования дат в шаблонах используется хелпер
{{format-date}}. Например, чтобы отобразить текущую дату в
формате, соответствующем локали, можно использовать следующий код:
<p>{{format-date today}}</p>
Где today — это переменная, содержащая объект даты. В
зависимости от текущей локали формат вывода даты может изменяться.
Для форматирования чисел и валют также существуют хелперы
{{format-number}} и {{format-currency}}.
Пример форматирования числа:
<p>{{format-number 1234567.89}}</p>
Пример форматирования валюты:
<p>{{format-currency 1234567.89 currency="USD"}}</p>
В обоих случаях формат будет соответствовать текущей локали. Например, в русской локали число будет отображено с запятой вместо точки, а валюта будет отображаться в соответствующем формате для региона.
Когда ключ перевода отсутствует в файле локализации, можно настроить
поведение по умолчанию с помощью заглушек. Библиотека
ember-intl позволяет задать значение по умолчанию для
каждого ключа, если перевод для текущей локали не найден.
Пример настройки заглушек:
greeting:
default: "Hello, World!"
ru: "Привет, мир!"
В данном примере, если для русского языка нет перевода ключа
greeting, будет использовано значение по умолчанию —
“Hello, World!”.
В Ember.js можно создавать локализованные URL с помощью системы маршрутов. Это позволяет, например, строить URL с учетом текущей локали, что полезно для многозначных сайтов, где URL зависит от языка.
Пример локализованного маршрута:
this.route('about', { path: '/:locale/about' });
Где :locale — это параметр маршрута, который может
принимать значения типа en, ru и так далее.
При переходе по маршруту /ru/about приложение будет знать,
что нужно отобразить контент на русском языке.
Для более сложных приложений, где данные загружаются асинхронно,
важно, чтобы интернационализация учитывалась и на уровне API. Это
означает, что сервер должен поддерживать локализованные ответы в
зависимости от выбранной локали. Например, запросы могут отправляться с
параметром Accept-Language, который будет информировать
сервер о предпочтениях пользователя относительно языка.
На стороне клиента можно использовать сервис intl для
динамического обновления локали и загрузки нужных данных, а затем
отображать их в интерфейсе.
Ember.js предоставляет мощные инструменты для интернационализации,
которые позволяют создать приложения, поддерживающие несколько языков и
регионы. Использование библиотеки ember-intl позволяет
легко управлять переводами, форматированием дат и чисел, а также
динамически менять язык интерфейса. Интеграция с роутерами и
асинхронными данными делает Ember.js удобным инструментом для создания
многоязычных веб-приложений.