【问题标题】:How can I translate routes in ember-cli?如何在 ember-cli 中翻译路线?
【发布时间】:2017-07-18 07:26:05
【问题描述】:

我在 app/router.js 中创建了一些路由

Router.map(function () {
    let i18n = this.service('i18n');
    this.route("lang", { path: '/:lang' }, function () {
        this.route('home', { path: '/', template: 'home' });
        this.route('about', { path: '/' + i18n.t('router.about'), template: 'about' });
        this.route('locales', { path: '/' + i18n.t('router.locations'), template: 'locales' });
    });
});

但 i18n 只翻译第一次。

如何通过更改语言翻译这些路线?

我正在使用:

ember-cli:2.11.1

节点:7.4.0

ember-i18n: 5.0.0

【问题讨论】:

  • 请阅读此页面:xyproblem.info,然后仔细描述您愿意实现的目标。你的做法是非常错误的,所以我想听听你最初的目标,而不是你实现它的预期方法。
  • 是否要翻译 URL 中的路由名称?如果是,不要!这是一个真的坏主意。
  • @Lux,我正在尝试翻译路线路径。
  • 这是不可能的。为您的路径使用英文名称。

标签: ember.js internationalization ember-cli translate


【解决方案1】:

路由创建一次,不能更改路由名称。

为了你的目标,你可以这样做:

//router.js

this.route("lang", {path: '/:lang'}, function() {
    this.route('register', {path: ':path'});
  });

在模板中:

//index.hbs
{{#link-to "lang.register" locale path}}{{t "routes.register"}}{{/link-to}}

并在相应的控制器中:

//controllers/index.js
i18n: Ember.inject.service(),

  locale: Ember.computed.readOnly('i18n.locale'),

  path: Ember.computed('locale', function() {
    return {
      path: this.get('i18n').t('routes.register')
    };
  }),

现在您的路线 URL 已根据 i18n 语言环境更改。

请看this twiddle

【讨论】:

  • 但是,如何同时更改当前的URI?
  • @BrunoSalgado 我更新了我的 twiddle。请看changeLang动作
  • 易卜拉欣,这很好用。但是,当我使用多个路由时,Ember 总是调用定义的第一个路由。这是因为路径是动态的(路径:'/:path')。你能帮我吗? twiddle
  • @BrunoSalgado Thta 问题是因为路线名称重叠。我在this twiddle提供解决方案
  • 我可以通过来自 URI 的语言和路由加载应用程序吗?示例:用户直接访问 pt-br/sobre 路径。
猜你喜欢
  • 2014-08-12
  • 2023-03-20
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2014-09-24
相关资源
最近更新 更多