Как я могу сделать i18n для javascript с помощью Middleman?

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

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

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

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


person mm2001    schedule 18.02.2012    source источник


Ответы (2)


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

In 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"
person caedes    schedule 24.05.2015

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

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

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

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

person NealJMD    schedule 16.06.2016