We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
最近在持续改造旧项目多语言的过程中,发现一个词条维护的问题,git做不了excel的版本管理。
目前使用的词条管理是在一个xlsx的文件,设计初衷是为了方便导入导出,给供应商翻译。
如果一直都是一个人负责多语言的生成和构建或者一直都只在一个分支上推进还好,但是如果多人管理,两个分支上的xlsx有变动的话,git是没办法进行diff的,因为这对git来说这是一个二进制文件,你能做的只是 选择A版本,或者B版本。
你只能选择覆盖别人的数据或者被别人覆盖,这完全是一个黑盒操作,不管是哪一个都是有问题的。
git 无法直接对xlsx进行diff,所以我们用外部的工具来处理这一块。他的原理是配置git的diff行为,diff的时候,如果遇到 "excel"类型,则直接运行下面的command。
[diff "excel"] command = ./exceldiff.cmd
还需要配置 .gitattributes用来告诉git哪些文件属于excel的类型。
.gitattributes
*.xlsx diff=excel *.xls diff=excel
用了之后,发现确实可以对比,但是还是比较鸡肋,看着也很麻烦不够直观,做做demo还行但是远远达不到在项目中用的程度。
才改动了一个看着都觉得有点乱,如果有一百个 简直不敢想怎么解决冲突,所以最后还是放弃了这种方案
具体可见:
How to git diff for MS-Excel files(xls/xlsx) on Mac-OS
GitHub - na-ka-na/ExcelCompare: Command line tool (and API) for diffing Excel Workbooks
一开始我提议用csv,比起xlsx比较符合程序员的操作习惯(至少可以直接在编辑器打开操作)。后面为了方便供应商翻译以及词条管理,我们将项目按照业务分成多个模块,每个模块一个sheet,所以才改用xlsx。
如果改用csv的话,需要把多个sheet合成一个sheet,但是给供应商的时候还是提供多Sheet的xlsx。
所以第一步应该解决 xlsx与cvs的转换,加一个module的列,将xlsx的每个Sheet加到没一列的module上。
所以需要做的写个脚本,实现xlsx与csv的互转,日常维护用csv,供应商翻译用xlsx。
正准备写代码的时候,突然察觉到自己陷入了一个误区,为什么一定要纠结cvs?而且全部词条都放在cvs的话,维护起来也不方便。为什么不直接改用json格式?
所以最后又转换成 json 与 xlsx的转换,这个就很简单了,有现成工具 sheetJs 来处理,我们只需要重新捋好工作流的逻辑:
i18n-auto
i18n-auto -json
最后确定选用json作为维护的数据格式,主要的改动其实是实现一个工具,方便json与excel互转,再改动一下代码从读取excel变成读取json。
工作流变为:
The text was updated successfully, but these errors were encountered:
No branches or pull requests
目前使用的词条管理是在一个xlsx的文件,设计初衷是为了方便导入导出,给供应商翻译。
如果一直都是一个人负责多语言的生成和构建或者一直都只在一个分支上推进还好,但是如果多人管理,两个分支上的xlsx有变动的话,git是没办法进行diff的,因为这对git来说这是一个二进制文件,你能做的只是 选择A版本,或者B版本。
你只能选择覆盖别人的数据或者被别人覆盖,这完全是一个黑盒操作,不管是哪一个都是有问题的。
解决方案:
用excel-compare
git 无法直接对xlsx进行diff,所以我们用外部的工具来处理这一块。他的原理是配置git的diff行为,diff的时候,如果遇到 "excel"类型,则直接运行下面的command。
还需要配置
.gitattributes
用来告诉git哪些文件属于excel的类型。用了之后,发现确实可以对比,但是还是比较鸡肋,看着也很麻烦不够直观,做做demo还行但是远远达不到在项目中用的程度。
才改动了一个看着都觉得有点乱,如果有一百个 简直不敢想怎么解决冲突,所以最后还是放弃了这种方案
具体可见:
How to git diff for MS-Excel files(xls/xlsx) on Mac-OS
GitHub - na-ka-na/ExcelCompare: Command line tool (and API) for diffing Excel Workbooks
采用csv文件保存
一开始我提议用csv,比起xlsx比较符合程序员的操作习惯(至少可以直接在编辑器打开操作)。后面为了方便供应商翻译以及词条管理,我们将项目按照业务分成多个模块,每个模块一个sheet,所以才改用xlsx。
如果改用csv的话,需要把多个sheet合成一个sheet,但是给供应商的时候还是提供多Sheet的xlsx。
所以第一步应该解决 xlsx与cvs的转换,加一个module的列,将xlsx的每个Sheet加到没一列的module上。
所以需要做的写个脚本,实现xlsx与csv的互转,日常维护用csv,供应商翻译用xlsx。
正准备写代码的时候,突然察觉到自己陷入了一个误区,为什么一定要纠结cvs?而且全部词条都放在cvs的话,维护起来也不方便。为什么不直接改用json格式?
所以最后又转换成 json 与 xlsx的转换,这个就很简单了,有现成工具 sheetJs 来处理,我们只需要重新捋好工作流的逻辑:
i18n-auto
会先读取json数据,然后再提取替换当前模块文案,如果发现有新的文案,默认再更新会json中i18n-auto -json
根据json生成excel,把该文件给供应商翻译后,再将带有翻译的最新excel生成json,这时候生成的json会和原来的数据对比 合并 替换。json维护
最后确定选用json作为维护的数据格式,主要的改动其实是实现一个工具,方便json与excel互转,再改动一下代码从读取excel变成读取json。
工作流变为:
i18n-auto -json
根据json生成一份全新的excel ⇒ 翻译 ⇒ excel生成json与原来i18n-store合并成最新的词条数据The text was updated successfully, but these errors were encountered: