В течение последнего года я работал над парой приложений Meteor. Поскольку я разработчик из Бельгии, я столкнулся с I18N почти с самого начала, и вначале все казалось довольно приятным. Есть замечательный пакет tap-i18n, который даже описан в Meteor Guide. Это поможет вам быстро начать работу.

Но это не так уж и страшно, что вам придется вести файл перевода вручную. Дело в том, что я уже пишу {{_ «translatable_tags»}} в файлах JavaScript и HTML. Так зачем мне снова записывать их в файл перевода JSON? Как не терять время на выяснение, какие строки я забыл вставить в файл перевода? И было бы особенно сложно удалить строки, которые устарели после того, как вы сделали третий поворот! Это приведет к тому, что на i18n будет потрачено намного больше времени и денег.

I18Next-parser приходит на помощь

Решение на самом деле намного проще, чем можно было бы ожидать. I18Next-parser - это небольшой пакет NPM, который может автоматически извлекать строки из вашего источника и помещать их в алфавитном порядке в ваш файл перевода. Аккуратный! Для этого потребуется небольшая настройка, но это действительно большая победа, если все будет настроено правильно.

Чтобы это работало правильно, я полностью поместил свой источник метеора в подкаталог моего репозитория git. Затем я добавил i18next-parser в корневой проект devDependencies, как это.

npm install i18next-parser --dev

Парсер I18next для Meteor должен работать с GULP, который необходимо установить глобально.

npm install -g gulp

Теперь мы готовы создать gulpfile.js в этой же корневой папке со следующей конфигурацией:

var gulp = require('gulp');
var i18next = require('i18next-parser');

gulp.task('default', function() {
    gulp.src(['!src/node_modules/**', '!src/public/**','src/**'])
        .pipe(i18next({
            output: 'i18n',
            locales: ['en'],
            functions: ['_','__'],
            namespace: 'YOUR_PROJECT_NAME',
            suffix: '.$LOCALE',
            extension: ".i18n.json",
            writeOld: false,
        }))
        .pipe(gulp.dest('src/i18n'));
});

Если вы следовали инструкциям, теперь вы должны иметь возможность выполнить «gulp» в папке проекта и скомпилировать файл i18n. Вы, конечно, можете создавать разные языки, добавляя локали в конфигурацию, но я обрабатываю это по-другому, о чем подробно расскажу в следующем посте.

Теперь у нас есть способ систематического создания файлов i18n, который поможет нам сократить наши файлы перевода и сократить расходы.

Простые схемы, таблицы и другие граничные случаи

Если вы не используете какие-либо пакеты с необычной атмосферой, вам, вероятно, хорошо идти. Но если вы используете простую схему / автоформу, в вашей схеме будет много ярлыков и текстов параметров. Поскольку пакет простой схемы есть повсюду, существует дополнительный пакет gwendall: autoform-i18n, который позволяет вам переводить эти метки и тексты опций.

На мой взгляд, здесь есть несколько проблем. Этот пакет использует отдельный файл перевода, который вы можете прикрепить к своей схеме, но вам придется снова отредактировать его вручную. Вдобавок ко всему, ваша схема становится намного понятнее, если вы сохраняете в ней метки и параметры. Учитывая это, я бы посоветовал управлять переводами в вашей схеме следующим образом.

Dogs.schema = new SimpleSchema({
    name: {
        type: String,
        label: () => TAPi18n.__("dogs.name")
    },
    color: {
        type: String,
        label: () => TAPi18n.__("dogs.color.label"),
        autoform: {
            options: [
                {
                    value: "black",
                    label: () => TAPi18n.__("dogs.color.opt.brown")
                },
                {
                    value: "white",
                    label: () => TAPi18n.__("dogs.type.opt.black")
                }
            ]
        }
    }
});

Таким образом, ваша схема остается за все, а i18next-parser собирает все переводимые теги.

Другая проблема, с которой вы можете столкнуться, - это когда вы все перевели, но ваши табличные таблицы еще не переведены. Это невозможно с пакетом aldeed. Хотя был сделан пул-реквест, который позволяет использовать тот же подход. Пока можно воспользоваться вилкой.

Заключительное примечание

Этот пост должен помочь вам с большей уверенностью управлять своими начинаниями с i18n. Конвейер перевода настолько силен, насколько сильна его самая слабая часть, поэтому после автоматизации ввода переводимых тегов нам также необходимо автоматизировать процесс перевода. В следующем посте я подробно объясню, как красиво замкнуть цикл.