1.0.1 • Published 7 years ago
react-translation-next v1.0.1
react-translation-next
React 项目多语言翻译;翻译功能性组件,简单、灵活可控、污染小
特点
- 小、简单: 仅两个组件
I18nProvider、I18nTranslate; 一个类I18n- 无繁杂配置:仅三处配置,均为可选配置
- 尽可能地减少代码污染:若去掉该功能仅需删除所引用的组件即可,不会引起大范围的代码删减
- 翻译行为可控:
- 默认被
I18nTranslate组件包裹的子组件所有的文本内容都将被翻译,- 若不想被翻译在元素/组件上添加属性
data-translation={false}或者data-translation={{disabled: 1}}即可阻止当前元素/组件下的文本内容或以下所有文本内容被翻译,- 再次设置
data-translation将重置翻译行为
使用
npm i --save react-translation-nextimport I18n, { I18nProvider, I18nTranslate } from 'react-translation-next'
...
const i18n = new I18n({
debug: true,
quitTranslationWarn: false,
locale: '',
defaultMessages: {},
storeKey: 'locale',
store: (key, locale)=>{}
})
class App extends React.PureComponent(){
constructor(){
this.state = {
locale: i18n.getLocale()
}
}
render(){
return (
<I18nProvider i18n={i18n} locale={this.state.locale}>
{/*其他内容*/}
<I18nTranslate>
{/*其他内容*/}
<div data-translation={false}>
{/*其他内容*/}
</div>
</I18nTranslate>
{/*其他内容*/}
</I18nProvider>
)
}
}介绍
1、 I18n 类
用法: const i18n = new I18n([options])
options:
debug: 用于开发环境打印日志,生产环境不起作用quitTranslationWarn: 出现错误后的警告日志,true 不输出, false 输出,仅用于开发环境locale:: 默认语言, 默认查找cookie=>navigator.languagedefaultMessages: 默认翻译storeKey: 存储的选择的语言的key, 默认localestore: 切换语言后存储语言的方法; 参数 1key即storeKey, 参数 2locale即选择的语言,默认cookie存储
2、I18nProvider 组件
用法:在入口处引入,并提供 实例化后的 i18n 和 locale 两个 props
注意:
i18n和locale两个props不提供也可以正常运行- 若不提供
locale将无法通过state或redux进行语言切换实时翻译;若提供了i18nprop可以通过刷新(F5)的形式翻译 - 若不提供
i18n将无法动态添加或修改翻译内容
3、I18nTranslate 组件
用法: 在需要翻译的地方添加该组件即可;建议在每个组件最上层添加即可(入口处须在 I18nProvider 之下)
4、data-translation 属性
用法: 在 html 元素和 React 组件上添加该属性
data-translation = {true}同不设置的效果一致data-translation = {false}不翻译当前元素/组件下的文本内容,不包含下级元素/组件data-translation = {{disabled: <Boolean | Number> , before: <Functon>, after: <Functon>}}disabled: 若为true同data-translation = {false};不设置或为false同data-translation = {true};若为数字,将不翻译当前元素/组件以下所有子元素/组件的文本内容;除非子元素/组件添加data-translation属性before: 翻译之前修改文本内容,必须返回, 支持React Componentafter: 翻译之后修改文本内容,必须返回, 支持React Component
API
I18n 实例
i18n.getLocale() 获取当前的语言
i18n.setLocale(locale) 切换当前的语言
i18n.getLanguages() 获取所支持的语言
i18n.translate(locale, [message]) 动态添加翻译内容
locale:String示例zh-CN, enlocale:Object示例{'zh-CN': {}}, 此时message无效message:示例{Login: '登录'}
注意:
- 默认翻译的一段文本,可使用
html标签或React标签将其隔断成单词进行翻译 - 需要提供语言包
- 在语言包中,添加
__name__属性,可作为当前语言的名称使用