Skip to content

文本映射

虽然VoerkaI18n推荐采用t("中华人民共和国万岁")形式的符合直觉的翻译形式,而不是采用t("xxxx.xxx")这样不符合直觉的形式,但是为什么大部份的国际化方案均采用t("xxxx.xxx")形式?

在我们的方案中,t("中华人民共和国万岁")`形式相当于采用原始文本进行查表,语言名形式如下:

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

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

javascript
//idMap.js
{
    "中华人民共和国万岁":"1"
}
// en.js
{
    "1":"Long live the people's Republic of China"
}
// jp.js
{
    "2":"中華人民共和国"
}

如此,就消除了在en.jsjp.js文件中的冗余。但是在源代码文件中还存在t("中华人民共和国万岁"),整个运行环境中存在两份副本,一份在源代码文件中,一份在idMap.js中。

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

babel-plugin-voerkai18n插件为例,该插件同时还完成一项任务,就是自动读取voerkai18n compile生成的idMap.js文件,然后将t("中华人民共和国万岁")自动更改为t("1"),这样就完全消除了重复冗余信息。

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

注意:

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