TAPi18n: Как показать текст на нескольких языках рядом?
Похоже, что tapi18n рассчитан на использование только одного активного языка в любой момент времени.
Я показываю форму, которая включает в себя одно и то же поле на нескольких языках. Я хочу перевести метки и заполнители, потому что это полезная информация для людей, заполняющих формы, но, поскольку у меня есть доступ только к текущему языку, я не могу показывать слова других.
Я хотел бы это:
## Description ##
English
[ enter the description ... ]
Español
[ enter the description ... ]
Deutsch
[ enter the description ... ]
выглядеть так:
## Description ##
English
[ enter the description ... ]
Español
[ introduzca la descripción ... ]
Deutsch
[ placeholder in german... ]
Я могу думать о взломах, таких как создание препроцессора, который копирует ключи как { "description_placeholder_$$": "introduzca la description" }
от каждого json-файла до любого другого json-файла, заменяя $$ на код языка, поэтому каждый язык имеет все ключи, содержащие $$, от любого другого языка.
Другим трюком будет загрузка всех файлов json в память независимо от tapi18n и прямой доступ к нужным словам.
Есть ли более элегантные способы решить эту проблему?
2 ответа
Как уже упоминалось @kyll, вот как это должно работать:
TAPi18n.__('amusing spaghetti', { lng: 'ru'});
Но он не загружает языки по требованию. В качестве обходного пути я предварительно загружаю языки на стороне клиента и устанавливаю переменную сеанса, чтобы указать, что все языки были загружены.
var langs = [
{ code: 'en', name: 'English' },
{ code: 'es', name: 'Español' },
{ code: 'de', name: 'Deutsch' }
];
Meteor.startup(function () {
_.each(langs, function(lang) {
TAPi18n._loadLanguage(lang.code).done(function() {
Session.set('langsLoaded',
langs.length == TAPi18n._loaded_languages.length);
});
});
});
Затем в шаблоне у меня есть:
{{trToLang 'amusing spaghetti' 'ru'}}
И, наконец, в помощник:
trToLang: function(key, lang) {
return Session.get('langsLoaded') ? TAPi18n.__(key, { lng: lang }) : '';
}
Переменная сеанса необходима, потому что без нее иногда языки не загружаются до визуализации шаблона, и это нарушает TAPi18n.
Я надеюсь, что кто-то публикует более красивое решение.
Не знаю, актуально ли это до сих пор, но я видел, как это используется в пакете md-blog Сэма, может быть, это поможет увидеть чью-то реализацию?
https://github.com/xolvio/md-blog
НТН