首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为不同的ccTLD构建相同的网络

为不同的ccTLD构建相同的网络
EN

Stack Overflow用户
提问于 2015-07-22 15:48:29
回答 1查看 89关注 0票数 0

我正在用Meteor构建一个网络应用程序。

我的webapp将有相同的UI (和页面)在不同的语言。它将在不同的ccTLDs (.cz、.sk、.hu、.tr、.com)上进行本地化和部署。

下面是我想要的类似的例子。这是一个捷克parfums。向下滚动时,会有指向不同域的标志(链接)。

我的webapp可以分解成以下几个部分:

  • DB数据库对于许多语言来说都是一样的。
  • 公共代码大部分代码在不同语言之间是相同的。
  • 路由& i18n每种语言的不同部分是路由文件和i18n文件

应该有一些方法来构建/运行/调试具有不同路由文件和i18n文件的应用程序。

我不想拥有一个.com域,并且能够转换语言。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-22 17:02:45

考虑在国际化文件中使用一个代码库。您可以使用抽头-i18n包(https://github.com/TAPevents/tap-i18n)和铁路由器-i18n包(https://github.com/yoolab/iron-router-i18n)。例如:

代码语言:javascript
复制
meteor create intl
meteor add tap:i18n
meteor add iron:router
meteor add martino:iron-router-i18n

这为演示目的创建了一个基本项目,并添加了抽头i18n、铁路由器和铁路由器i18n包。

让我们假设我们想支持英语、西班牙语和法语。创建一个i18n目录来存储国际化文件。这些文件包含为站点的不同版本翻译的文本字符串(如果我的翻译不够完美,很抱歉):

i18n/en.i18n.json:

代码语言:javascript
复制
{
        "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:

代码语言:javascript
复制
{
        "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:

代码语言:javascript
复制
{
        "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:

代码语言:javascript
复制
{
  "public": {
    "i18nLanguageCode": "es"
  }
}

--这是每个部署都需要修改的唯一文件.

在应用程序启动时,我们调用TAPi18n setLanguage函数,传递来自settings.json文件的值,我将注册一个全局模板助手以获得当前语言:

intl.js:

代码语言:javascript
复制
if (Meteor.isClient) {

  TAPi18n.setLanguage(Meteor.settings.public.i18nLanguageCode);

  Template.registerHelper("getCurrentLanguage", function(){
    return Meteor.settings.public.i18nLanguageCode;
  });

}

下面是intl.html文件:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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中,对于您想要转换的路径的每个路由,您需要添加配置:

代码语言:javascript
复制
  i18n: {
    languages: {
      es: { path: '/ajustes' },
      fr: { path: '/parametres'}
    }
  }

运行流星时,使用设置文件运行它:

代码语言:javascript
复制
meteor run --settings settings.json

我在这里创建了一个示例回购:https://github.com/markleiber/intl

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31568014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档