Skip to content

常见问题

提取翻译内容是否能够过滤注释?

是的,翻译内容是可以过滤注释的。 翻译前会采用正则表达式过滤掉注释内容,如果有特殊情况,请提出issue。

是否支持查看哪些文件包含提取结果?

languages/translate/default.json中会显示从哪一个文件提取的。

json
{
    " - 更新格式化器:{}": {
        "en": " - Update formatters:{}",
        "$files": [
            "compile.command.js"  // 代表是从该文件中提取的
        ]
    }
}

如何处理不同上下文下的一词多译的情况?

一词多译指的是一个词在不同的地方要翻译显示为不同的内容。 比如t("确定"),在不同的上下文中,可能需要分别翻译为OKComplate,但是提取内容时则内能提出同一个词确定,这就导致无法做到一词多译。

很抱歉,现有版本没有针对此做特别的处理,您需要在不同上下文使用不同的中文词条,避免使用一词多译。

在下一版本中将考虑此问题的处理机制,

如何高效改造旧项目?

目前VoerkaI18n没有提供相应的插件或工具来将其他国际化方案迁移到VoerkaI18n

如果你的项目原来没有使用任何国际化方案,可以尝试以下方案来减轻一些工作量。

可以在VSCODE中使用在文件中替换,然后输入正则表达式(['"]([^'"\n\\]|\\[\s\S])*[\u4E00-\u9FFF]([^'"\n\\]|\\[\s\S])*['"]),替换成t($0)

这样可以将大部分包括中文且使用"xxx",'xxxx'的替换成t("xxxx")形式。

但是由于实际情况很复杂,哪些需要翻译哪些不需要等等,单靠一个正则表达式替换是不能解决问题的,即容易误伤,也容易出错。

只能说可以减少一些工作量,需要更多的人工介入才可以的。

为什么指定了activeLanguage不能生效?

为什么有时指定了activeLanguage参数后,还是不能生效?

原因可能是:

VoerkaI18n默认情况下会在LocalStorage下存储最近切换的语言,当您修改了languages/index.(js|ts)中的activeLanguage配置后. 由于LocalStorage中已经有值(上一次记住的activeLanguage)了,所以VoerkaI18n会优先使用LocalStorage中的值,而不是activeLanguage中的值。

这样就造成了activeLanguage不能生效的现象。

解决方案:

  • 清空LocalStorage中的language值,然后刷新页面即可。

提示出错

  • 运行时提示错误:[VoerkaI18n] 默认语言包必须是静态内容,不能使用异步加载的方式.?

languages/index.(ts|js)中,指定default=true的语言包必须是直接import的,不能使用异步加载的方式()=>import()

ts
// 语言配置文件

const scopeSettings = {
    "languages": [
        {
            "name": "zh",
            "title": "Chinese"
        },
        {
            "name": "en",
            "title": "English",
            "default":true, 
        } 
    ] 
}

// 错误示例

import defaultMessages from "./zh.js"  
const messages = {
    'zh' : defaultMessages,
    // 由于默认语言是en,采用了异步加载的,所以会报错
	'en' :  ()=>import("./en.js") 
}

// 正确示例
import defaultMessages from "./en.js"  
const messages = {
    'zh' : ()=>import("./en.js"),
	'en' : defaultMessages   // 正确:静态加载
}

defaultLanguageactiveLanguage

  • 默认语言(defaultLanguage):

指的是直接写在代码里面的语言。一般情况下,国产软件一般默认中文为默认语言,也就是我们直接在代码里面写的语言,如t("中文")。并且在执行voerkai18n translate命令时,总是将默认语言翻译成其他语言。

  • 激活语言(activeLanguage):

指是界面上实际显示的语言,我们切换语言时,就是切换的激活语言。

settings.json中,默认语言激活语言可以相同,也可以不同。

执行voerkai18n extract提取到一些不需要翻译的文本,怎么办?

简单地说,就是提取要翻译的文本出现误伤的问题了,怎么办?

voerkai18n extract的工作机制是这样的:

  1. 先使用正则表达式过滤掉注释内容。
  2. 再提取正则表达式提取t(".....")文本内容。

总之,就是利用正则表达式来匹配提取的,如果出现提取错误时,存在几种可能的原因:

  • 不同nodejs版本的正则表达式引擎存在差异,导致提取错误。可以尝试升级nodejs版本。
  • 用来提取的正则表达式不够准确,某此边界问题没有覆盖,导致提取错误。请提出issue,我们会尽快修复。
  • extract操作不能处理模板字符串的情况,比如**t(xx${xxx}xx)**就不能正确提取,请转换为使用插值变量的方式。