前端国际化,Nodejs自动生成对照文件。

1. 背景

目前项目使用ant-design-pro v5 国际化方案如下

src/page/user/user.tsx
<div>{intl.formatMessage({id:'user.login'})}</div>
locales/zh-CN.ts
'user.login.remember':'5天内免登陆',
'user.login':'登录',
...

缺点:需要手动去zh-CN文件下声明id,频繁的在两个文件之间操作,看起来很蠢。没有中文显示代码可读性也很差,全局搜索还要中转一次,效率很差

2. babel:

babel-plugin-react-intl: https://formatjs.io/docs/tooling/babel-plugin

and-pro使用了 formatjs ,formatjs官方提供的一个工具,很好是思路;
但是放到项目里面直接报错,报错位置大概在ant-desing-pro内部,改造估计成本很高。

3. 自动生成对照文件 locales/zh-CN.ts ?

  • 思路:
    我之前有封装过一个国际化组件,大概长这样:

    <LocaleText name='order.addbillway.track' label='运单号' />
    

    是否可以根据这个组件名称,动态去生成 locales/zh-CN.ts 对照文件?

    这样就完全不改变项目结构,新老项目都可以自动生成

  • 借助nodejs的fs和 path

    1:读取page文件夹下所有以.tsx文件,导出路径数组

    2:根据文件路径读取文件,创建promise

    2:读取后转为buffer转为字符串进行正则匹配

    3:正则匹配截取 指定的name和label组装成对象

    4:promise.all 执行所有读取转换promise

    5:promise.all回调中,组装成一个object,并写入到zh-CN.ts

  • 封装

    /lcoales/index.js

    const config = {
      readFolder: './src/pages/',                    // 读取的目标文件夹
      output: '../src/locales/build/cn.ts',          // 输出目录
      suffix: 'tsx',                                 // 指定的文件后缀
      component: ['FormItemEx','LocaleText'],        // 识别的目标组件
      key: 'name',                                   // 国际化的key
      value: 'label',                                // 翻译后的值
    };
    

    github地址 :

    https://github.com/jewool/build_locales

    下载文件夹build_locales 放在项目根目录,配置npm脚本
    修改config

    执行 node ./build_locales/index.js即可

more :

intl.formatMessage({id:‘user.login’,defaultMessage: ‘登录’,}) 自动生成配置文件?

其他框架?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值