欢迎光临散文网 会员登陆 & 注册

antd项目中国际化改造

2023-08-12 17:05 作者:小老虎Tigger  | 我要投稿

项目中的国际化采用了react-intl-universal来实现,如何使用可参考官网,目前的做法是在原有intl.get基础上包装了一层,在项目中调用包装后的函数,然后通过脚本遍历所有项目文件,找到包装后的函数,再根据函数中的参数导出一份excel,配合一些翻译工具,自动进行翻译。

但是这样做有一些问题,首先就是写法比较繁琐,每次都要写intl.get(key, default, value),其次就是通用的一些词汇没有办法快速复用,因为local data都是根据脚本生成的,在使用intl时不知道有哪些公共的词汇能够复用,导致像新增、删除这些通用的词汇在项目中的各个地方都有定义,还有就是目前的脚本是通过遍历整个项目文件来实现,略微有些繁琐,生成文件较慢。

我们期待的是可以像使用一个js对象那样去进行国际化,类似于这样。

我们希望做到书写简单,并且国际化配置文件可以自动生成,统一管理。

那么如何修改呢?

我们其实可以这样做,首先在项目中创建一个i18n的文件夹,来放置我们每个页面的国际化文件。目录结构类似于这样。

module中的文件内容非常简单。

common.ts

我们要做的就是根据module中的文件生成配置文件,以及供我们在页面中进行调用的i18n对象。

utils.ts

我们通过递归,将整个对象的value都变成intl.get的返回值。这样,我们在页面中就可以直接这样书写,非常方便快捷。

我们还需要生成与之对应的国际化配置文件,主要使用babel进行操作。

generator.js

如果我们需要传递参数进到配置当中,可以这样操作。

定义时按照规则定义。

user.ts

调用时将参数传入

formatMessage函数,templete在我们页面调用时并不关心,只是为了我们使用babel生成配置文件时使用。

utils.ts

经过这样的简单处理,我们就能非常方便的进行国际化操作,因为有了代码提示,所以像一些通过的词汇,都可以先到common根据英文查找,避免了一个词汇到处都有的问题。

antd项目中国际化改造的评论 (共 条)

分享到微博请遵守国家法律