介绍|i18next文档 --- Introduction | i18next documentation
相关站点
- 官网 https://www.i18next.com/
- github https://github.com/i18next/i18next
- gitbook https://github.com/i18next/i18next-gitbook
- Supported Frameworks https://www.i18next.com/overview/supported-frameworks
- icedog.i18next on 码云
简介
I18next 是一个用Javascript编写的也是用于Javascript的国际化-框架 。但是还有更多应用场景。
i18next 除了提供标准的 i18n 功能诸如 (plurals, context, interpolation, format). 它还提供了一个完整的从网站到移动端以及桌面的本地化解决方案。
学习一次 - 到处都可以使用本地化
i18next社区创建了诸如React, AngularJS, Vue.js等等前端的框架的i18next的集成。
但是这还没完,你还可以使用i18next到Node.js, PHP, iOS, Android 和其他平台.
完整方案
大多数框架都由您确定如何加载本地化文件。您负责检测用户语言,加载本地化文件并将它们导入框架。
i18next 为您处理这些问题. 我们为您提供插件用于:
- 检测用户语言
- 加载本地化文件
- 可选的缓存本地化文件
- 扩展,通过使用后处理 - 例如 启用sprintf支持
灵活性
i18next 具有大量的默认值,但它足够灵活,可以满足自定义需求。
- 使用 moment.js 的 intl 来格式化日期?
- 想要使用不同的前后缀来进行插值(interpolation)?
- 更喜欢使用 gettext形式 ?
i18next 可以有大量的内容可以被替换!!
可伸缩性
框架的构建考虑到了可伸缩性。对于较小的项目,拥有一个包含所有翻译的文件就够了, 但是对于较大的项目,这种方法很快就会崩溃。 i18next可以让您选择将翻译内容分隔为多个文件,并按需加载它们。
生态圈
有大量的模块围绕着i18Next 构建的。从代码中提取翻译而不是使用webpack绑定翻译,到将 gettext、CSV和RESX转换为JSON的模块都有。
本地化作为服务
通过locize.com, i18next 甚至提供自己的翻译管理工具: localization as a service.
和其他框架比较
你现在可能希望我们比较一下。如 react-i18next
和react-intl
,但这种情况不会发生;) 但是,我们将列出为什么您应该相信i18Next是国际化的最佳选择。
历史悠久的
I18next 是在2011年底创建的。这意味着什么?它比你现在使用的大多数库都要老,包括你的主要前端技术(react,vue,......)。
信不信由你,在编写时,可以通过添加一个很小的兼容层来把v11.x.x作为v1版本的替代品。这对我们来说很重要,而不是仅仅为了使用新的花哨的东西而破坏以前的东西(这并不意味着我们没有跟上最新的发展方向)。
相当成熟的
从 i18next 开源可用已经过了很长时间,没有遇到在 i18n
方面 i18next 真的无法解决问题的情况。
各种大小公司都在使用 i18next 和它的本地化服务https://locize.com。
可扩展性高
从 i18next 的 v2 版本开始,我们完全重构了 i18next ,使其尽可能的扩展,这样做以后,i18next 可以在任何 Javascript 环境(和一些非 Javascript环境,.net ,elm,iOS,android ),以及任何 UI框架、任何 i18n 格式中使用。扩展性可以说是无穷无尽的。
看看社区围绕 i18next core 构建的内容:
功能丰富的
规的i18n框架的工作方式如下:
- 您传入所有翻译和使用的语言
- 您调用一个函数,该函数根据传入的翻译返回正确的翻译,并提供区间和插值的值。
你不能在其他 i18n 框架中用,但是可以在 i18next中用的有
- 将翻译分成多个文件。按需加载翻译文件。
- 有一些插件可以检测大多数环境(浏览器,本机,服务器)的语言。这样可以设置检测位置的优先级,甚至可以在请求/访问时缓存设置的语言。
- 有无数的插件可以从服务器、文件系统等等加载翻译文件。而且后台还可以在判断为加载失败时重新尝试加载,或者文件不会加载两次,成功回调只调用一次。这些后台甚至可以为本地缓存提供额外的层,例如。在 localStorage。
- 根据语言选择加载什么和如何回退。
- 支持 objects and arrays
- 对存储的翻译文件完全控制管理。
- 丰富的事件系统,可对您的应用程序重要的更改做出反应。
- 不限制 i18n 格式 - 更喜欢 ICU? 只需要用 i18next-icu plugin.
但是我听说
i18next 太复杂了
确实,i18next的文档比其他 i18n 框架更多 - 但这也是为了提供更多你必须自己构建的功能(语言检测,翻译加载......)。
如果您不需要上面这些 i18next就像任何其他i18n框架一样简单:
import i18next from 'i18next';
i18next.init({
lng: 'de',
resources: {
de: {
translation: {
"hello world": "hallo Welt"
}
}
}
});
i18next.t('hello world'); // hallo Welt
i18next很臃肿
嗯......一年后再来问这个问题,当您的i18n框架需要满足生产系统的需求时。
我们努力保持代码库的清洁和可读性。我们添加了可能对很多用户有帮助的新功能,而不是基于我们认为很容易解决的问题。
i18next太大了
是的,33kb的压缩版和9kb的gzipped压缩文件是非常大的。但就像你之前看到的那样,内部还有更多内容,而不仅仅是基本的i18n功能。
但是你可以通过预编译翻译来缩小它。我们可以将i18next降低到4kb gzipped(很好的广告)但另一方面你的翻译文件会显着增大。
我们告诉你
i18next 可以做更多
你可以使用的两个扩展功能示例:
a. 如果没有可用的特定消息,曾经喜欢动态地将您的错误消息回退到常规信息吗?
translation.json
{
"error": {
"unspecific": "Something went wrong.",
"404": "The page was not found."
}
}
Sample
const error = '404';
i18next.t([`error.${error}`, 'error.unspecific']) // -> "The page was not found"
const error = '502';
i18next.t([`error.${error}`, 'error.unspecific']) // -> "Something went wrong"
b.或者喜欢说区间的数:
- 还有很多好吃的东西
- 还剩一些好吃的东西
- 没有好吃的东西了,你来晚了
{
key_interval: '(0){no goodies remaining...sorry you`re to late};(1-100){just a few goodies remaining...};(100-inf){many goodies still available};'
}
适用于服务器端
虽然其他一些i18n框架也运行在服务器端,但并没有对其进行优化。i18next 只加载一次翻译(想一下在react.js中渲染字符串,创建一个实例对象则注入翻译一次)。它还在异步请求期间保留设置语言,还是同时请求在设置正确的语言时创建竞争条件?
发表评论