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。
希望有人贴出更漂亮的解决方案。
似乎 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。
希望有人贴出更漂亮的解决方案。