Skip to content

文本映射

虽然VoerkaI18n推荐采用t("VoerkaI18n是一个非常不错的国际化方案")形式的符合直觉的翻译形式,而不是采用t("xxxx.xxx")这样不符合直觉的形式,但是为什么大部份的国际化方案均采用t("xxxx.xxx")形式?

在我们的方案中,t("VoerkaI18n是一个非常不错的国际化方案")`形式相当于采用原始文本进行查表,语言名形式如下:

javascript
// en.js
{
    "中华人民共和国":"the people's Republic of China"
}
// jp.js
{
    "中华人民共和国":"中華人民共和国"
}

很显然,直接使用文本内容作为key,虽然符合直觉,但是会造成大量的冗余信息。因此,voerkai18n compile会将之编译成如下:

javascript
//idMap.js
{
    "VoerkaI18n是一个非常不错的国际化方案":"1"
}
// en.js
{
    "1":"Long live the people's Republic of China"
}
// jp.js
{
    "2":"中華人民共和国"
}

如此,就消除了在en.jsjp.js文件中的冗余。但是在源代码文件中还存在t("VoerkaI18n是一个非常不错的国际化方案"),整个运行环境中存在两份副本,一份在源代码文件中,一份在idMap.js中。

为了进一步减少冗余内容,因此,我们需要将源代码文件中的t("VoerkaI18n是一个非常不错的国际化方案")更改为t("1"),这样就能确保无重复冗余。但是,很显然,我们不可能手动来更改源代码文件,这就需要由voerkai18n提供的一个编译期插件来做这一件事了。

@voerkai18n/plugins是一个通过vite/webpack/rollup等构建工具来实现的编译期插件,它会在编译期将根据IdMap.json信誓旦文件将t("VoerkaI18n是一个非常不错的国际化方案")转换为t("1")

所以,在最终形成编译后的代码中,实际上每一个t函数均是t("1")t("2")t("3")...t("n")的形式,最终代码还是采用了用key来进行转换,只不过这个过程是自动完成的而已。

注意:

  • 如果没有启用@voerkai18n/pluginsvite等编译期插件,还是可以正常工作,但是会有一份默认语言的冗余信息存在。