TAPi18n:如何并排显示多种语言的文本?

TAPi18n: How to show text in several languages side by side?

似乎 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...               ]

我可以想到一些技巧,比如创建一个预处理器,将每个 json 文件中的 { "description_placeholder_$$": "introduzca la description" } 之类的键复制到每个其他 json 文件中,将 $$ 替换为语言代码, 所以每种语言都有包含来自其他语言的 $$ 的所有键。

另一个技巧是将所有 json 文件加载到内存中,独立于 tapi18n,并直接访问所需的单词。

有没有更优雅的方法来解决这个问题?

不知道这是否仍然相关,但我看到它在 Sam 的 md-blog 包中使用,也许它会帮助查看其他人的实现?

https://github.com/xolvio/md-blog

HTH

正如@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。

希望有人贴出更漂亮的解决方案。