我正在用Meteor构建一个网络应用程序。
我的webapp将有相同的UI (和页面)在不同的语言。它将在不同的ccTLDs (.cz、.sk、.hu、.tr、.com)上进行本地化和部署。
下面是我想要的类似的例子。这是一个捷克parfums。向下滚动时,会有指向不同域的标志(链接)。
我的webapp可以分解成以下几个部分:
应该有一些方法来构建/运行/调试具有不同路由文件和i18n文件的应用程序。
我不想拥有一个.com域,并且能够转换语言。为什么?
发布于 2015-07-22 17:02:45
考虑在国际化文件中使用一个代码库。您可以使用抽头-i18n包(https://github.com/TAPevents/tap-i18n)和铁路由器-i18n包(https://github.com/yoolab/iron-router-i18n)。例如:
meteor create intl
meteor add tap:i18n
meteor add iron:router
meteor add martino:iron-router-i18n这为演示目的创建了一个基本项目,并添加了抽头i18n、铁路由器和铁路由器i18n包。
让我们假设我们想支持英语、西班牙语和法语。创建一个i18n目录来存储国际化文件。这些文件包含为站点的不同版本翻译的文本字符串(如果我的翻译不够完美,很抱歉):
i18n/en.i18n.json:
{
"settings": "settings",
"home": "home",
"welcome text": "Welcome to Meteor!",
"home text": "This is the home page.",
"settings text": "On this page you can modify settings."
}i18n/es.i18n.json:
{
"settings": "configuracion",
"home": "inicial",
"welcome text": "Bienvenido a Meteoro!",
"home text": "Esta es la pagina de inicio.",
"settings text": "En esta pagina usted puede modificar la configuracion."
}i18n/fr.i18n.json:
{
"settings": "parametres",
"home": "premiere",
"welcome text": "Bienvenue au Meteor!",
"home text": "Cette page est la page d'accueil.",
"settings text": "Sur cette page vous pouvez modifier les parametres."
}注意,文件名以语言代码(en,es,fr)开头。我正在使用来自http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry的代码列表,但是代码并不重要,因为稍后您在铁路由器-i18n配置中正确地引用了它。
现在为应用程序创建一个settings.json文件,以指定要用于当前部署的语言。在这里,我在西班牙语中使用'es‘(同样,这必须与您的i18n文件前面使用的前缀匹配):
settings.json:
{
"public": {
"i18nLanguageCode": "es"
}
}--这是每个部署都需要修改的唯一文件.
在应用程序启动时,我们调用TAPi18n setLanguage函数,传递来自settings.json文件的值,我将注册一个全局模板助手以获得当前语言:
intl.js:
if (Meteor.isClient) {
TAPi18n.setLanguage(Meteor.settings.public.i18nLanguageCode);
Template.registerHelper("getCurrentLanguage", function(){
return Meteor.settings.public.i18nLanguageCode;
});
}下面是intl.html文件:
<template name="layout">
<h1>{{_ "welcome text"}}</h1>
{{> yield}}
</template>
<template name="home">
<p>{{_ "home text"}}</p>
<p><a href="{{pathFor route='settings' lang=getCurrentLanguage}}">{{_ "settings"}}</a></p>
</template>
<template name="settings">
<p>{{_ "settings text"}}</p>
<p><a href="{{pathFor route='home' lang='en'}}">{{_ "home"}}</a></p>
</template>请注意tap-i18n包提供的助手(下划线后面跟着引号中的字符串)。这些占位符(“欢迎文本”、“主页文本”、“设置文本”、“设置”、“主页”)被我们创建的i18n文件的正确翻译文本替换。getCurrentLanguage函数将当前语言代码传递给铁路由器-i18n pathFor助手。
现在让我们创建路由器配置。
router.js:
I18NConf.configure({
defaultLanguage: 'en',
languages: [Meteor.settings.public.i18nLanguageCode],
autoConfLanguage: true
});
Router.configure({
layoutTemplate: 'layout',
i18n: {
compulsoryLangCode: false,
langCodeForDefaultLanguage: false,
addLangCode: function(url){
return url;
},
langCodeAction: function(path){
/* by default Router.setLanguage would be called and we do not want that */
}
}
});
Router.route('/', function() {
this.render('home');
}, {
name: 'home'
});
Router.route('settings', function() {
this.render('settings');
}, {
i18n: {
languages: {
es: { path: '/ajustes' },
fr: { path: '/parametres'}
}
}
});请注意,我将Meteor.settings.public.i18nLanguageCode传递到I18NConf.configure中,对于您想要转换的路径的每个路由,您需要添加配置:
i18n: {
languages: {
es: { path: '/ajustes' },
fr: { path: '/parametres'}
}
}运行流星时,使用设置文件运行它:
meteor run --settings settings.json我在这里创建了一个示例回购:https://github.com/markleiber/intl
https://stackoverflow.com/questions/31568014
复制相似问题