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

НТН

Другие вопросы по тегам