Я понял это, ссылаясь на https://github.com/Microsoft/vscode-extension-samples/issues/74
Это сработало, если вы используете Transifex для своего переводчика. Как минимум, вам нужно использовать .xlf
файлы в качестве формата файла перевода.
Я думаю, что это лучше всего проиллюстрировать на примере, поэтому предположим, что вы хотите получить пример проекта работает после того, как вы удалили папку i18n
- Шаг 1: клонируйте этот проект и удалите каталог i18n
- Шаг 2: измените gulp file , поэтому функция
compile
также генерирует файлы метаданных nls в каталоге out
. Что-то вроде:
function compile(buildNls) {
var r = tsProject.src()
.pipe(sourcemaps.init())
.pipe(tsProject()).js
.pipe(buildNls ? nls.rewriteLocalizeCalls() : es.through())
.pipe(buildNls ? nls.createAdditionalLanguageFiles(languages, 'i18n', 'out') : es.through())
.pipe(buildNls ? nls.bundleMetaDataFiles('ms-vscode.node-debug2', 'out') : es.through())
.pipe(buildNls ? nls.bundleLanguageFiles() : es.through())
- Шаг 3: Запустите команду
gulp build
. Это создаст несколько необходимых файлов метаданных в каталоге out/
- Шаг 4. Создайте и запустите новую функцию gulp для экспорта необходимых переводов в файл xlf. Что-то вроде:
gulp.task('export-i18n', function() {
return gulp.src(['package.nls.json', 'out/nls.metadata.header.json', 'out/nls.metadata.json'])
.pipe(nls.createXlfFiles("vscode-extensions", "node-js-debug2"))
.pipe(gulp.dest(path.join('vscode-translations-export')));
}
- Шаг 5: Получите переведенный xlf-файл. Или добавьте несколько фиктивных значений. Я не могу найти, если / где есть документация для необходимого формата файла, но это сработало для меня (для расширения):
<?xml version="1.0" encoding="utf-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file original="package" source-language="en" target-language="ja" datatype="plaintext"><body>
<trans-unit id="extension.sayHello.title">
<source xml:lang="en">Hello</source>
<target>JA_Hello</target>
</trans-unit>
<trans-unit id="extension.sayBye.title">
<source xml:lang="en">Bye</source>
<target>JA_Bye</target>
</trans-unit>
</body></file>
<file original="out/extension" source-language="en" target-language="ja" datatype="plaintext"><body>
<trans-unit id="sayHello.text">
<source xml:lang="en">Hello</source>
<target>JA_Hello</target>
</trans-unit>
</body></file>
<file original="out/command/sayBye" source-language="en" target-language="ja" datatype="plaintext"><body>
<trans-unit id="sayBye.text">
<source xml:lang="en">Bye</source>
<target>JA_Bye</target>
</trans-unit>>
</body></file>
</xliff>
- Шаг 6: Вставьте этот файл в какой-то известныйместоположение, скажем,
/path/to/translation.xlf
. Затем добавьте / запустите еще одну новую задачу gulp, чтобы импортировать перевод. Что-то вроде:
gulp.task('i18n-import', () => {
return es.merge(languages.map(language => {
console.log(language.folderName)
return gulp.src(["/path/to/translation.xlf"])
.pipe(nls.prepareJsonFiles())
.pipe(gulp.dest(path.join('./i18n', language.folderName)));
}));
});
- Шаг 7: Запустите
gulp build
снова.
Каталог i18n/
теперь должен быть воссоздан правильно! Выполнение тех же шагов сборки / экспорта / перевода / импорта / сборки приведет к появлению любых новых изменений вызовов localize()
в вашем коде TypeScript
Очевидно, что это не идеально, есть много жестко закодированных путей и тому подобное. , но, надеюсь, это поможет любому, кто решит эту проблему.