i18n-dom - 浏览器中最省心的多语言工具
介绍 i18n-dom 是如何使用魔法拯救开发者于繁琐的多语言开发中
为什么需要 i18n-dom
做业务开发的时候,如果需要支持多语言是一件另人很头疼的事情。
假设现在已有一份英文的交互设计稿,此时因为多语言的文案还没给到,开发一般只有两种选择(假设多语言用的是 i18next):
1、在开发的页面中直接使用英文文案进,等多语言文案准备好了再使用多语言工具进行替换
2、直接在代码中使用多语言工具,并在多语言配置文件中先用自己翻译的文本占位,等多语言文案准备好了再统一替换配置中的多语言文本即可
无论哪一种方案,都会有漫长的替换、校对过程,很让人暴躁,即使编写脚本自动完成部分工作,但是主要的问题是一定会存在的,就是文档结构中会被插入大量的 i18n.t(xxxx)
或者 <span data-lang="xxxx"></span>
这些传统的方案都有以下问题:
- 需要为不同的文案定义一个唯一的 key,以在代码中引用
- 多语言工具对代码的侵入程度很高。当代码出问题时,甚至没办法根据页面显示的内容快速定位到对应的代码位置
总而言之,一个多语言功能,大大的降低了写代码的体验,这就是 i18n-dom 想要解决的问题
i18n-dom 的魔法
我们先直接看一下用 i18n-dom 实现多语言功能,是多么的轻松愉快
首先,你需要提供一些数据供 I18nDOM 实例化,主要提供多语言文案 resource
就可以了
import I18nDOM from "i18n-dom";
const i18n = new I18nDOM({
htmlLanguage: "en", // The language in which the web page is written
resource: {
en: ["Hello World!", "Second paragraph of text"],
zh: ["你好世界!", "第二段文本"],
ru: ["Привет, мир!", "Второй абзац текста"],
},
});
可以看到,在 resource 中并不需要定义额外的 key,只需要按照相同的顺序提供不同的语言的文案就可以了。因为该结构非常简单且不需要 key,所以可以使用脚本轻松的由其他多语言的文件生成。
初始换之后,如果没有特殊需求,就什么都不用做了!像下面这个例子:
<p>Hello World!</p>
<p><span></span></p>
<script>
i18n.changeLanguage("zh"); // Change the language to zh
document.querySelector("span").innerText = "Second paragraph of text"; // "第二段文本" will automatically appear on the page!
</script>
在代码中的直接使用英文文本开发就可以了,工具会在后台使用魔法将其显示为对应的语言!