Как я могу сделать i18n для JavaScript с Middleman? - PullRequest
4 голосов
/ 18 февраля 2012

Есть ли уже что-то в технологическом стеке, используемом MM, которое будет обрабатывать i18n для JS?Например, что-то, что возьмет раздел javascript: из файла en.yml и es.yml и сделает его доступным как файл translation.js - или что-то подобное ( Я знаю только, как это иногда делается в rails ).

Fwiw, https://github.com/fnando/i18n-js кажется популярным решением для рельсов.Я предполагаю, что части JS будут работать нормально.Я просто не знаю, как интегрировать процесс сборки в стек ММ, чтобы все файлы были сгенерированы и оказались в нужном месте.

@ tdreyno предлагает: Не сейчас, но похожемы могли бы соединить Sprockets (JS) и I18n.

Кто-нибудь сделал это или есть предложения о том, как действовать (для кого-то, кто работает в Ruby / Rails, но не копался в3.1 путь к активу, но не боюсь попробовать).

Ответы [ 2 ]

1 голос
/ 24 мая 2015

Я просто думаю о том, чтобы решить точно такую ​​же проблему. Итак, вот мое решение:

В source/layouts/layout.html.slim:

javascript:
  var I18n = {};
  I18n.locale = 'fr';
  I18n.translations = {};
  I18n.translations['fr'] = #{I18n.backend.send(:translations)[:fr].to_json};

Тогда получить доступ к переводам в JS так же просто, как:

I18n.translations.fr['menu']['glossaire']
#=> "Glossaire"
0 голосов
/ 16 июня 2016
Решение

caedes простое и работоспособное, но в моем случае я хочу использовать некоторые из более сложных функций i18n-js, таких как интерполяция строк, а не просто иметь набор вложенных словарей.

К счастью, i18n-js может читать из словаря . Я установил i18n-js с browserify, импортировал его глобально с window.I18n = require('i18n-js'); и добавил частичный _i18n_js.slim:

javascript:
  I18n.translations = #{I18n.backend.send(:translations).to_json};

и тогда вы сможете использовать все отличные функции i18n-js.

...