Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio code 自动为VSCode扩展创建i18n目录_Visual Studio Code_Vscode Extensions - Fatal编程技术网

Visual studio code 自动为VSCode扩展创建i18n目录

Visual studio code 自动为VSCode扩展创建i18n目录,visual-studio-code,vscode-extensions,Visual Studio Code,Vscode Extensions,我试图理解中介绍的本地化Visual Studio代码扩展的工作流 我无法弄清楚i18n目录是如何创建的,以及该目录中的字符串键集是如何随着时间的推移得到维护的 在README.md中有一行写着“您可以手工创建此文件夹,或者您可以使用vscode nls dev工具来提取它。”…如何使用vscode nls dev工具来提取它 我所理解的 我知道您可以使用vscode-nls,并像这样包装字符串:localize(“some.key”,“我的字符串”)以在运行时获取该字符串的本地化版本 我非常确

我试图理解中介绍的本地化Visual Studio代码扩展的工作流

我无法弄清楚i18n目录是如何创建的,以及该目录中的字符串键集是如何随着时间的推移得到维护的

在README.md中有一行写着“您可以手工创建此文件夹,或者您可以使用vscode nls dev工具来提取它。”…如何使用vscode nls dev工具来提取它

我所理解的

我知道您可以使用
vscode-nls
,并像这样包装字符串:
localize(“some.key”,“我的字符串”)
以在运行时获取该字符串的本地化版本

我非常确定我了解在构建时使用
vscode-nls-dev
i18n
目录中的文件内容替换为传输的JavaScript代码,以及创建像
out/extension.nls.ja.json这样的文件

缺少什么

当然,这不是期望的:对于项目中的每个
file.ts
文件,您为您支持的每个lang创建一个
i18n/lang/out/file.i18n.json
,然后在每次字符串更改时手动更新该文件中的密钥集


我假设有一个过程会自动运行“file.ts中是否有
本地化(“key”,“String”)
调用file.i18n.json中尚未出现的新键?如果是,请添加带有一些未翻译值的键”。这是什么过程?

我已经弄明白了,参考

如果您将Transifex用于您的翻译器,则此功能将正常工作。您至少需要使用
.xlf
文件作为翻译文件格式

我认为最好用一个例子来说明这一点,因此假设您想在删除i18n文件夹后获得工作的

  • 步骤1:克隆该项目,并删除i18n目录
  • 步骤2:修改,以便
    compile
    函数也在
    out
    目录中生成nls元数据文件。比如:
  • 步骤3:运行
    gulpbuild
    命令。这将在
    out/
    目录中生成几个必要的元数据文件
  • 步骤4:创建并运行一个新的gulp函数,将必要的翻译导出到xlf文件。比如:
  • 步骤5:翻译生成的xlf文件。或者,添加一些虚拟值。我找不到是否/何处有所需文件格式的文档,但这对我很有用(扩展名):
  • 步骤7:再次运行
    gulpbuild
现在应该正确地重新创建
i18n/
目录!运行相同的构建/导出/翻译/导入/构建步骤将获取对TypeScript代码中的
localize()
调用的任何新更改


显然,这并不完美,有很多硬编码的路径等等,但希望它能帮助解决这个问题的其他人。

我已经解决了这个问题,参考

如果您将Transifex用于您的翻译器,则此功能将正常工作。您至少需要使用
.xlf
文件作为翻译文件格式

我认为最好用一个例子来说明这一点,因此假设您想在删除i18n文件夹后获得工作的

  • 步骤1:克隆该项目,并删除i18n目录
  • 步骤2:修改,以便
    compile
    函数也在
    out
    目录中生成nls元数据文件。比如:
  • 步骤3:运行
    gulpbuild
    命令。这将在
    out/
    目录中生成几个必要的元数据文件
  • 步骤4:创建并运行一个新的gulp函数,将必要的翻译导出到xlf文件。比如:
  • 步骤5:翻译生成的xlf文件。或者,添加一些虚拟值。我找不到是否/何处有所需文件格式的文档,但这对我很有用(扩展名):
  • 步骤7:再次运行
    gulpbuild
现在应该正确地重新创建
i18n/
目录!运行相同的构建/导出/翻译/导入/构建步骤将获取对TypeScript代码中的
localize()
调用的任何新更改

显然,这并不完美,有很多硬编码的路径等等,但希望它能帮助解决这个问题的其他人


    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())


    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')));
    }


    <?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>


    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)));
        }));
    });