国际化(vue-i18n),翻译词条繁琐操作问题

265 阅读2分钟

在使用国际化过程中,维护多语言时总会出现一些很繁琐的操作,特别是每个语言一个文件,要保持key统一(当然这个可以通过ts类型来解决), 还要将相对应词条的翻译一个个的复制粘贴,词条少些还好,一旦多起来就相当繁琐了。基于此,写了个npm包来简化这部分操作,我们只需要将需要翻译的词条放到excel表中,将其拿给翻译人员一一对照翻译即可。

安装

npm i sy-excel2json -g

excel 内容示例

key简体中文English
title标题Title
nav.home首页Home
tip.success成功Success

使用

outputType为object时,表格第一列用于生成对象的键,剩下的列用于生成值

sy-e2j filePath outputPath outputType [key1,key2...] [type1,type2,...]

filePath: 表示要转换的 .xlsx 文件路径

outputPath 表示转换后的 .json 文件路径

outputType 表示转换后的 .json 文件格式 目前支持数组(array)及对象(object) 类型,默认为array

key 表示表头(列名)转换后的键

type 表示列转换后值的类型
  type的可选类型为: string | number | boolean | date
  1. 直接使用(使用表头作为 key 的值)
  • 1.1 outputType为默认值:array
sy-e2j ./test.xlsx base
or
sy-e2j ./test.xlsx base.json

输出内容为:

[
  { "key": "title", "简体中文": "标题", "English": "Title" },
  { "key": "nav.home", "简体中文": "首页", "English": "Home" },
  { "key": "tip.success", "简体中文": "成功", "English": "Success" },
]
  • 1.2 outputType为object
sy-e2j ./test.xlsx base object
or
sy-e2j ./test.xlsx base.json object

输出内容为:

{
  "简体中文": {
    "title": "标题",
    "nav": {
      "home": "首页"
    },
    "tip": {
      "success": "成功"
    },
  },
  "English": {
    "title": "Title",
    "nav": {
      "home": "Home"
    },
    "tip": {
      "success": "Success"
    },
  }
}
  1. 使用自定义 key
  • 2.1 outputType为默认值:array
sy-e2j ./test.xlsx base array key,zh_CN,EN

输出内容为:

[
  {"key": "title", "zh_CN": "标题", "EN": "Title" },
  {"key": "nav.home", "zh_CN": "首页", "EN": "Home" },
  {"key": "tip.success", "zh_CN": "成功", "EN": "Success" },
]
  • 2.2 outputType为object
sy-e2j ./test.xlsx base object key,zh_CN,EN

输出内容为:

{
  "zh_CN": {
    "title": "标题",
    "nav": {
      "home": "首页"
    },
    "tip": {
      "success": "成功"
    }
  },
  "EN": {
    "title": "Title",
    "nav": {
      "home": "Home"
    },
    "tip": {
      "success": "Success"
    }
  }
}
  1. 使用自定义类型 若值类型为Number且该值无法转为Number时, 则为空字符串
indexvalue
111
2
313
sy-e2j ./test.xlsx base array label,value string,number

输出内容为:

[
  { "label": "1", "value": 11 },
  { "label": "2", "value": "" },
  { "label": "3", "value": 13 }
]

目前为止此包只支持简单的表格内容转换,有任何问题可以留言评论。