Задание пространства имен и пространства имен по умолчанию при преобразовании с помощью i18next-scanner - PullRequest
0 голосов
/ 17 июня 2019

Я работаю над проектом React Native с Typescript.Проект имеет модульную структуру, и каждый модуль имеет свои собственные переведенные строки.Проблема в том, что когда я генерирую переводы, все вхождения строк внутри this.props.t переходят в пространство имен по умолчанию (common).

Возможно, это можно исправить, используя имя модуля в качестве пространства имен по умолчанию в функции преобразования.Функция преобразования будет использовать путь к файлу, чтобы определить модуль, в котором находится файл, и использовать его в качестве пространства имен по умолчанию.У меня есть жестко закодированная «учетная запись» в коде ниже, предполагая, что это текущий модуль.Я ожидаю, что все строки будут сохранены в account/i18n/en.json и account/i18n/nl.json, но вместо этого они все еще сохраняются в модуле common, который является пространством имен по умолчанию (defaultNs).Это код для сканера:

var fs = require("fs");
var path = require("path");
var typescript = require("typescript");

function typescriptTransform(options) {
    options = options || {};
    if (!options.extensions) {
        options.extensions = [".tsx"];
    }

    return function transform(file, enc, done) {
        const extension = path.extname(file.path);
        const parser = this.parser;
        let content = fs.readFileSync(file.path, enc);

        if (options.extensions.indexOf(extension) !== -1) {
            content = typescript.transpileModule(content, {
            compilerOptions: {
                target: 'es2018'
            },
            fileName: path.basename(file.path)
            }).outputText;
        parser.parseTransFromString(content, {
            options: {
                ns: "account",
                defaultNs: "account"
            }
        });
        parser.parseFuncFromString(content, {
            options: {
                ns: "account",
                defaultNs: "account"
            }
        });
    }
        done();
    };
};

module.exports = {
    options: {
        debug: true,
        func: {
            list: ['t', 'i18next.t', 'i18n.t'],
            extensions: ['.js', '.jsx', '.ts', '.tsx']
        },
        trans: {
            component: 'Trans',
            extensions: ['.js', '.jsx'],
        },
        transform: typescriptTransform({ extensions: ['.ts', '.tsx'] }),
        lngs: ['en', 'nl'],
        ns: ['account', 'common'],
        defaultNs: 'common',
        resource: {
            loadPath: 'app/{{ns}}/i18n/{{lng}}.json',
            savePath: 'app/{{ns}}/i18n/{{lng}}.json',
        },
    }
};

Проблема в том, что строки модуля account все еще генерируются в модуле common, хотя я ясно заявляю в transform, что яхотите, чтобы ns и defaultNs были account.

Что я здесь не так делаю?Заранее спасибо.

...