1.0.4 • Published 6 years ago

i18n-csv v1.0.4

Weekly downloads
-
License
ISC
Repository
-
Last release
6 years ago

i18nCSV

  • 解析 CSV 翻译文件
  • 返回多语言 Object
  • 输出各个语言的 .json.yml 文件
  • 字符串处理

安装

npm install i18n-csv --save-dev

解析

CSV 文件内容:

Field nameenzh-cnjp
titleHello World你好世界こんにちは世界
subtitleThe weather is great !天气真好!天_はとても良いです!

使用 i18nCSV 解析:

const i18nCSV = require('i18n-csv')
i18nCSV.parse({ input: './file1.csv' })

返回的对象:

{
  en: {
    title: 'Hello World',
    subtitle: 'The weather is great !'
  },
  'zh-cn': {
    title: '你好世界',
    subtitle: '天气真好!'
  },
  jp: {
    title: 'こんにちは世界',
    subtitle: '天_はとても良いです!'
  }
}

设置起始列

默认使用第 2 行为正文的起始行,第 2 列作为正文的起始列。

有时我们需要指定正文的起始列。例如,为了和翻译人员协作,我们需要在正文前面插入两列描述内容,但是不希望这两列被当作语言解析到对象中。

CSV 文件内容:

Field nameDescription(Chinese)Description(English)enzh-cnjp
title标题main titleHello World你好世界こんにちは世界
subtitle副标题subtitleThe weather is great !天气真好!天_はとても良いです!

此时可以使用 startCol=4 指定正文从第 4 列开始:

i18nCSV.parse({ input: './file2.csv', startCol: 4 })

类似的,使用 startRow 可以设置正文的起始行。

设置语言代码

默认使用正文的列标题(第一行)作为语言代码:enzh-cnjp,并用作输出的文件名:en.jsonzh-cn.jsonjp.json

当需要和其他同事,比如翻译或运营人员协作时,列标题应该更加友好、通俗易懂。此时可以用 # 设置语言代码。列标题中包含多个 # 时将始终使用最后一个 # 后的内容作为语言代码。

示例:

Field nameEnglish #enChinese #zh-cnJapanese #jp
titleHello World你好世界こんにちは世界
subtitleThe weather is great !天气真好!天_はとても良いです!

输出

使用 ouput 指定输出目录,解析后会在目录下生成各个语言的 .json 文件。

i18nCSV.parse({ input: './file1.csv', output: 'path/to/output' })

输出完毕打印的日志:

Multi-language files has been generated !

source:  ./file1.csv
output:  path/to/output
format:  JSON

如无意外,path/to/output 目录下已经新增了 en.jsonzh-cn.jsonjp.json 三个文件。

生成的 en.json 文件内容:

// path/to/output/en.json
{
  "title": "Hello World",
  "subtitle": "The weather is great !"
}

使用 saveAsYAML=true 可以输出更简洁、易于修改的 YAML 格式:

i18nCSV.parse({
  input: './file1.csv',
  output: 'path/to/output',
  saveAsYAML: true
})

生成的 en.yml 文件内容:

# path/to/output/en.yml
title: Hello World
subtitle: The weather is great !

替换

假设有 CSV 文件内容如下:

Field nameenzh-cnjp
titleHello World你好世界こんにちは世界
subtitleShare trips with #trips参与话题 #trips 分享旅程#trips とのシェアトリップ

为了自定义文本中的 #trips 的样式,我们需要对文本进行一些处理。

replace 用于添加 替换任务,它的每一个元素都是一个任务。任务(数组)的第一个元素是被替换内容,可以是正则表达式或字符串,第二个元素是替换内容。

例如,将所有 #trips<hashtag> 标签包裹起来:

i18nCSV.parse({
  input: './file4.csv',
  replace: [
    [/(#\w+)/g, '<hashtag>$1</hashtag>']
  ]
})

返回的对象:

{
  en: {
    title: 'Hello World',
    subtitle: 'Share trips with <hashtag>#trips</hashtag>'
  },
  'zh-cn': {
    title: '你好世界',
    subtitle: '参与话题 <hashtag>#trips</hashtag> 分享旅程'
  },
  jp: {
    title: 'こんにちは世界',
    subtitle: '<hashtag>#trips</hashtag> とのシェアトリップ'
  }
}

任务的第三个元素可以指定仅对某个字段有效:

i18nCSV.parse({
  input: './file4.csv',
  replace: [
    [/(#\w+)/g, '<hashtag>$1</hashtag>', 'subtitle']
  ]
})

提示

  1. CSV 文件的第一列始终作为每一行文本的 Key 。
  2. CSV 文件的编码必须是 UTF-8 ,否则可能出现解析后的内容包含乱码。Mac 下转换编码:使用 Numbers 打开 CSV 文件,点击菜单中的 文件 > 导出到 > CSV,在“高级选项”中将“文本编码”修改为“UTF-8”后导出。