Я работаю над проектом 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
.
Что я здесь не так делаю?Заранее спасибо.