• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

i18n-chain: 高性能typescript版i18n国际化组件,支持react、react-native、node.js ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

i18n-chain

开源软件地址:

https://gitee.com/fwh1990/i18n-chain

开源软件介绍:

说到国际化,你是否也常年奔波于复制粘贴的重复劳动里?像 t('home:submit') t('common:something:success') 这些没有任何提示,需要脑子去记,不仅开发效率低,而且键盘敲快一点就容易打错字母,重点是你基本发现不了这种错误。

我更喜欢有提示的代码,利用typescript,我发明了一种使用链式操作的i18n组件,并拥有所有提示,就类似 i18n.common.something.success 这种,代码可以自动补全,保证不会写错。

兼容性

IEEdgeChromeFirefoxSafariNode
9+12+5+4+5+*

定义本地化文件

// ./src/i18n/locales/en.tsconst en = {  button: {    submit: 'Submit',    cancel: 'Go back',  },  user: {    profile: 'Tom',  },};export default en;export type Locale = typeof en;
// ./src/i18n/locales/zh.tsimport { Locale } from './en';const zh: Locale = {  button: {    submit: '提交',    cancel: '返回',  },  user: {    profile: '原罪',  },};export default zh;

创建i18n实例

// ./src/i18n/index.tsimport { createI18n } from '@i18n-chain/*';import en from './locales/en';const i18n = createI18n({  defaultLocale: {    key: 'en',    values: en,  },});export default i18n;

导入语言

第一种, 直接定义

import { createI18n } from '@i18n-chain/*';import zh from './locales/zh';const i18n = createI18n({  defaultLocale: { ... },});i18n._.define('zh', zh);export default i18n;

第二种, 异步导入。当组件检测到语言未定义时,会自动触发loader函数

const i18n = createI18n({  defaultLanguage: { ... },  loader: (name) => import('./locales/' + name),});export default i18n;

切换语言

i18n._.locale('zh');

调用字符串

你可以随意地切换 i18n._.t('button.submit')i18n.button.submit,他们是等价的。唯一的区别就是前者无法享受到typescript的类型提示。

带参数的模板

当你想用参数的时候,你需要把模板写成数组的形式

const en = {  property: ['{{property1}}template{{property2}}', { property1: value2, property2: value2 }],};

数组第二个元素就是参数列表以及,你可以设置参数的默认值。

const en = {  user: {    profile: [      'My name is {{name}}, I born in {{country}}, I am {{age}} old now, my birthday is {{birthday}}',      {        country: undefined,        name: 'Tom',        age: (value: number = 20) => {          if (value <= 1) {            return `${value} year`;          } else {            return `${value} years`;          }        },        birthday: (value: Date) => {          return value.toString();        },      },    ],  },};////////////////////////////////////// 上面的代码可以自动推导出和下面一致的类型:interface User {  Profile {    country: string | number;    name?: string;    age?: number;    birthday: Date;  }}/////////////////////////////////////// 最小化调用i18n.user.profile({  age: 20,  country: 'China',});// 增加可选的属性:`name`i18n.user.profile({  age: 30,  country: 'Usa',  name: 'Lucy',});

方法参数 agebirthday 的区别是,age的形参中含有默认值(value: number = 20) => {...},而后者没有。有默认值意味着调用的时候可以不传参数。


普通参数如果没有默认值,需要设置成undefined,这样typescript才能正确识别,并强制要求调用者输入对应的参数值。

const en = {  template: ['Hello, {{world}}', { world: undefined }]};

更多使用方法

平台使用版本
React & React-Native@i18n-chain/react
Vue开发中...
Angular开发中...
Taro@i18n-chain/taro
NodeJs & 原生JS@i18n-chain/core

案例

React I18n


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap