Как сохранить содержание сайта переведенным даже после перехода на другую страницу? (ember.js ember-i18n) - PullRequest
0 голосов
/ 29 апреля 2018

В настоящее время я внедряю несколько языков в веб-приложение, использующее ember-i18n, и ищу способ, с помощью которого посетители и пользователи могут в любое время выбрать нужный язык.

Я следую учебному пособию, найденному здесь , создавая раскрывающееся меню, которое переключает язык содержимого на веб-странице, на которой это меню включено. Он позволяет переключать язык страницы без обновления.

Однако, когда я перехожу на новую страницу или обновляю текущую, язык возвращается к значению по умолчанию.

Как настроить веб-приложение таким образом, чтобы выбранный язык оставался активным при навигации по сайту? Нужно ли добавлять что-то еще, например, печенье?

Меню и текущая среда настроены следующим образом:

конфиг / environment.js

module.exports = function(environment) {
    var ENV = {
        ...

        i18n: {
            defaultLocale: 'en'}
        };
        ...
    }
}

приложение / app.js

App = Ember.Application.extend({
    locale: 'es',
    ...
});

приложение / компоненты / language.js

import Ember from 'ember';

export default Ember.Component.extend({
    i18n: Ember.inject.service(),
    classNames: ['language-select'],

    locales: Ember.computed('i18n.locale', 'i18n.locales', function() {
        const i18n = this.get('i18n');
        return this.get('i18n.locales').map(function (loc) {
            return { id: loc, text: i18n.t('language-select.language.' + loc) };
        });
    }),

    actions: {
        setLocale() {
            this.set('i18n.locale', this.$('select').val());
        }
    }
});

приложение / шаблоны / Компоненты / язык select.hbs

<select {{action 'setLocale' on='change'}}>
    {{#each locales as |loc|}}
        <option value="{{loc.id}}" selected={{is-equal loc.id i18n.locale}}>
            {{loc.text}}
        </option>
    {{/each}}
</select>

приложение / хелперы / есть-equal.js

import Ember from "ember";

export default Ember.Helper.helper(function([leftSide, rightSide]) {
    return leftSide === rightSide;
});

приложение / index.hbs

...
<p>{{language-select}}</p>
...

Кроме того, у меня есть свои локали.

1 Ответ

0 голосов
/ 30 апреля 2018

Этот ответ относится к версиям с 1.13 по крайней мере 3.x.

Самый простой способ сохранить состояние при обновлении страницы - это использовать параметры запроса маршрутизации, которые находятся в URL. Каждый маршрут может читать из этих параметров запроса или изменять их. Когда вы обновляете, URL остается прежним.

Подробнее о параметрах запроса вы можете прочитать в Руководствах .

...