meteor i18n

Интернационализация meteor приложений

В этой статье хочу поделиться способом реализации многоязычных приложений на meteor. Одним словом это можно назвать интернационализацией, или просто i18n.

i18n — сокращение от слова internationalization. Его так часто записывают , потому что количество букв между i и n равно 18.

В данном посте расскажу как добавить новый язык в приложение, и как изменять его. Кстати, язык будет меняться на лету, без задержек, это выглядит круто. Сейчас как раз добавляю в своё приложение английский язык и решил поделиться способом, пока помню.

Весь функционал хранения и смены языков содержится в пакете tap:i18n. Поэтому ставим его:

Я распишу как добавить новый язык в приложение, но перед этим советую почитать документацию к пакету, в ней содержится много полезной информации.

Для не авторизованных пользователей выбранный язык будем хранить в куках. Для работы с куками в meteor я использую пакет chuangbo:cookie.

Всё, пакетов больше не понадобится. Переходим к реализации.

Вы наверное уже прочитали документацию к tap:i18n и знаете что языки хранятся в простых json файлах. Тут главное не перепутать с javascript объектом. Формат именно json, то есть с кавычками.

Название json файлов с языками должно соответствовать определённому формату — язык.i18n.json, например ru.i18n.json. Именно по первой части названия файла пакет определяет язык.

Файлы с языками рекомендуется класть в папку lib, так как её содержимое доступно и на клиенте и на сервере.

Содержимое файлов должно содержать перевод в виде ключ-значение. По ключу будет вытаскиваться сам перевод на язык. Например:

ru.i18n.json

en.i18n.json

Чтобы вставить значение перевод(значение ключа) в разметку Blaze используется специальный символ _ , например {{_ «wild»}}.

К примеру у нас есть следующий шаблон:

При текущем русском языке он отрендерится как :

При открытии пользователем Вашего приложения необходимо определить его язык и показать человеку уже локализованный продукт. Тут возникает множество вопросов, по крайней мере у меня возникло: Как хранить выбранный язык? В базе данных? А если пользователь не авторизован? На все эти вопросы ответы нашлись очень быстро. Алгоритм при запуске приложения следующий:

  1. Если пользователь авторизован, то пробуем взять язык из базы данных. Если язык нашёлся, то устанавливаем перевод.
  2. Пробуем взять язык из cookies. Если язык нашёлся, то устанавливаем его.
  3. Если языка нет ни в бд, ни в куках, то определяем его через http://freegeoip.net/json/

Делать это нужно на клиенте при старте приложения, создаём файл language.js в папке client:

Код не претендует на конечную версию, но работает. Теперь при открытии сайта язык для пользователя определится и запишется. Кстати,

это вызов серверного метода, вот его код:

Теперь необходимо дать пользователю возможность смены языка. Я сделал это как на большинстве сайтов, выпадающим списком с флажками:

смена языка meteor

Флаги стран можно взять тут http://www.free-country-flags.com.

При переключении языка(клик по флагу) нужно вызвать функцию SetLang(), например:

Всё, вариант i18n готов. Вот так просто можно сделать интернационализацию своего meteor приложения. Надеюсь кому то это поможет.

Также можно почитать: