Node.js处理国际化

之前做国际化,用java写的一个工具提取代码中的中文,用于翻译。再将代码中的中文替换成变量,以便根据系统语言设置,转换语言。

这次我想通过NodeJS实现,下面写下具体思路。这里有全量代码

首先NodeJS需要实现两个功能:读文件和写文件。

NodeJS怎么读单个文件?

处理文件需要引入NodeJS的一个模块:

var fs = require('fs');复制代码

写一个方法来处理读取文件:

// 读文件
function readFile(file){  
    fs.readFile(file, function(err, data){  
        if(err)  
            console.log("读取文件fail " + err + file);  
        else{  
            // 读取成功时  
            // 输出字节数组  
            console.log("读文件操作成功" + file)
        }  
    });  
}复制代码

NodeJS怎么写单个文件?

可以读文件了,接下来就需要处理文件内容。

同样也写一个方法来专门处理文件内容:

// 写文件
function writeFile(file, data){  
    fs.writeFile(file, data,function(err, data){
        if(err) {
            console.log(file+'写文件操作失败:',err);
        } else {
            console.log("写文件操作"+file);
        }    
    });
}复制代码

如何识别出中文,并替换成比变量?

文件内容读取出来了,就需要将内容中的中文替换成变量,方便显示不同的语言。

需要实现的效果如下:

读取出文件内容:

// do something
var a = [1,2,3]
var key = [
    "测试用户",
    "什么",
]

function render() {
    return (
        <div>
         <p>{"用户权限信息无效,验证权限失败!"}</p>
         <p>{"好的"}</p>
        </div>
    )
}复制代码

替换后的文件内容:

// do something
var a = [1,2,3]
var key = [
    $i18n["userMgr_js_1"],
    $i18n["comfirm_js_2"],
]

function render() {
    return (
        <div>
         <p>{$i18n["userMgr_js_2"]}</p>
         <p>{$i18n["comfirm_js_1"]}</p>
        </div>
    )
}复制代码

具体的实现步骤:

  • 将文件读取出的内容,通过按行分割成数组。读取出来的内容是一个字符串。
    strs.split('\n');复制代码
  • 遍历每一行,过滤出行内含有中文的,再通过"分割成数组。
    str.split(/["]/)复制代码
  • 接着遍历数组把中文替换成你想要的变量。
  • 最后通过writeFile()方法将处理后的内容覆盖源文件。

如何处理多个文件?

单个文件的处理实现了,但是我们肯定不止一个文件,我们需要将某个路径的文件都扫描出来。所以写一个方法来处理路径的读取:

let files = []

// 读取路径
function ScanDir(path) {
  let that = this
  if (fs.statSync(path).isFile()) {
    return files.push(path)
  }
  try {
    fs.readdirSync(path).forEach(function (file) {
      console.log('path  + file',path + '/' + file)
      ScanDir.call(that, path + '/' + file)
    })
  } catch (e) {
  }
}复制代码

得到所有的文件后,再通过遍历,按照上面的方式进行处理就可以了。

最后

感谢你的阅读,上面是大体的思路,有些细节省略了。这里有全量代码

如你发现有不妥的地方或者有更好的实现方法,欢迎讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值