博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端另一种多语言的实现思路
阅读量:6844 次
发布时间:2019-06-26

本文共 2325 字,大约阅读时间需要 7 分钟。

多语言i18n往常的做法是一个语言一个配置文件, 但是这样需要添加一个新的字符串时, 需要逐个打开许多个语言文件, 常常会漏, 并且每次修改一个字符都要编辑好几个文件. 我们换一种思路, 把 i18n 的多语言直接写在当前代码中,而不是写在配置文件中.

思路

用一个方法,根据开发环境\当前浏览器语言去处理应该使用哪个字符串, 并且暴露设置当前语言的函数,以兼容 nodejs 端或者开发人员扩展其他语言. 该库仅仅不到 70 行代码, 实现一个精巧的i18fn.

使用

安装 i18fn 库:

$ npm i --save i18fn复制代码
const i18fn = require('i18fn');const hello = i18fn.lang({ english: 'hello', chinese: '你好' });console.log(hello);复制代码

使用参数

const i18fn = require('i18fn');const personHello = i18fn.lang(    { English: '__person__, hello', Chinese: '__person__, 你好' },    {      person: { English: 'Mr.Ming', Chinese: '小明' },    },  );console.log(personHello);});复制代码

自动语言缺失排查

如果浏览器语言是中文, 而你忘记添加中文的语言内容, 在开发模式中会做错误提示, 如下面这行代码:

const say = i18fn.lang({ English: 'hello' });// 在生产环境, i18fn 使用英文作为代替// 在开发环境, i18fn 会添加 - [Miss i18fn: languageType] 在英文后头if (process.env.NODE_ENV === 'production') {  console.log(say); // hello} else {  console.log(say); // hello - [Miss i18fn: english]}复制代码

设置当前语言

如果我们要使用设置修改当前语言,可以手动修改当前语言以覆盖浏览器的语言识别:

const i18fn = require('i18fn');i18fn.setNowLanguage('Chinese');复制代码

如果你还是喜欢把 i18n 写在配置文件里

如果我们希望文案可以更好的复用, 我们也可以这样把多个语言写在一个文件中:

const { lang } = require('i18fn');const languages = {  done: lang({ English: 'done!', Chinese: '完成!' }),  hello: lang({ English: 'hello', Chinese: '你好' }),};// useconsole.log(languages.done);console.log(languages.hello);复制代码

当前支持自动识别的语言

  • English
  • Chinese
  • ChineseTraditional
  • Dutch
  • Korea
  • French
  • German
  • Japanese
  • Italian
  • Portuguese
  • Spanish
  • Swedish
  • Russian
  • Arabic
  • Vietnamese
  • Polish
  • Finnish
  • Afrikaans
  • Khmer
  • Thai
  • Turkish
  • Ukrainian
  • Zulu

增加其他语言判断

如果你的应用需要添加匈牙利, 你可以这样:

const i18fn = require('i18fn');i18fn.addLanguage('hu-HU', 'Magyar');// ok like default use:const hello = i18fn.lang({ English: 'hello', Magyar: 'helló' });console.log(hello);复制代码

测试可靠性

安装测试包:

$ yarn install && yarn test复制代码

你可以尝试测试, 测试内容编写在 src/index.test.js, 以下是通过的测试:

$ jest PASS  src/index.test.js  ✓ test chinese (4ms)  ✓ test english  ✓ test english params (1ms)  ✓ test english params, use object  ✓ test config  ✓ test config function (1ms)  ✓ test error chinese  ✓ test error english  ✓ test error chinese prod  ✓ test error english prod (1ms)  ✓ test add other languageTest Suites: 1 passed, 1 totalTests:       10 passed, 10 totalSnapshots:   0 totalTime:        1.257sRan all test suites.✨  Done in 1.80s.复制代码

这就是全部, 谢谢!

i18fn is .

Github 地址

转载地址:http://epdul.baihongyu.com/

你可能感兴趣的文章
android studio 开发android app 真机调试
查看>>
[stm32] STM32的通用定时器TIMx系统了解
查看>>
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
查看>>
添加php的memcached扩展模块
查看>>
W3wp.exe占用CPU及内存资源
查看>>
Rabbitmq~对Vhost的配置
查看>>
CentOS下Web服务器环境搭建LNMP一键安装包
查看>>
Redis发布订阅实现原理
查看>>
Java魔法堂:JVM的运行模式 (转)
查看>>
thinkPHP四种URL访问方式(二)
查看>>
使用InstallShield打包VS程序
查看>>
我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类...
查看>>
shell正则表达式匹配样例
查看>>
Sublime Text 的安装和配置
查看>>
数据库设计三大范式
查看>>
为了加速应用物联网,IT高管必须做的6件事
查看>>
查看MYSQL中数据表占用的空间
查看>>
栗蔚:中国云计算“风景独好”
查看>>
使用sqlparse分析SQL语句,及自己写的SQL分析语句
查看>>
搭建国际交流平台 黑龙江海外人才工作站涉及3D打印
查看>>