关于中文包的更新方法问题 (原创)

如何提取翻译短语

先从制作说起,如果我们要提取某个模块的翻译短语,可以使用下面的命令:

magento i18n:collect-phrases [-o|--output="<csv file path and name>"] [-m|--magento] <path to directory to translate>
i18n:collect-phrases -o "zh_Hans_CN.csv" E:\www\M204BSD\vendor\magento\module-backup

这个例子是提取 E:\www\M204BSD\vendor\magento\module-backup 的翻译短语到根目录 zh_Hans_CN.csv 文件中。

如果要提取全部的,那么使用:

i18n:collect-phrases -o "zh_Hans_CN.csv" -m

存在的问题

因为 Magento 2 的版本在不断更迭,所以短语会有一些变化。如果我们要用最新版本的语言包,必须要自己制作。在Magento 2 中文化问题(原创)中,博主提到官方中文包存在的问题,其中之一就是他跟不上节奏。

现在的问题是,如何才能在每次版本升级后,快速地制作出最新的语言包?也就是说,两个版本的语言包大部分是重叠的,仅有少部分的更改,如何将旧版本的翻译短语直接用到新提取的 csv 文件中。

最笨的肯定是人工,人工还是不要想了,工作量很大而且枯燥乏味,容易出错,最费事。迭代过程肯定不能使用人工来完成,但是第一遍的校正真的是非人工不可。。博主测试,速度大概是每半小时100行,总共有接近 8000 条翻译短语(有重复的),这样算起来大概要5个工作日,每天8小时计算。但是这样真的会死人的。。所以还是每天抽空翻译一点好了。

方法

下面是基于第一遍校正已经完成后的假设,如何使用手头已经校正好的 csv 文件替换新提取的 csv 中相同的短语。

博主尝试写 php 代码,逐行判断,看起来不是难事,But,csv 中包含了特殊字符,做等于判断直接报错,想想要处理特殊字符绝对麻烦的事情,所以博主就放弃这个念头了。

下面要说重点了,何不利用数据库的连接查询?哈哈,快来夸我。。

csv 导入数据库是很简单的,我们把新提取的 csv 导入后命名为 target,把已经矫正过的 csv 导入后命名为 para ,结果表就叫 result。

首先我们只需要 para 的两列,并且是不重复的

insert into para2 (SELECT DISTINCT col1 , col2 FROM `para` )

这样我们取得的是 col1, col2 两列都不重复的记录放入 para2 表。

对于 target,我们要先去掉四列都相同的

insert into target2 (SELECT DISTINCT col1 , col2, col3, col4 FROM `target` )

然后对 target2 根据第三列和第一列进行合并第四列,(这个步骤也可以省略)

insert into target3 (SELECT col1,col2,col3,GROUP_CONCAT(col4) as col4 from target2 GROUP by col3,col1)

最后就是用 target3 和 para2 进行左连接了

insert into result SELECT a.col1, b.col2, a.col3,a.col4 from target3 a left JOIN para2 b on a.col1=b.col1

这样我们得到的 result 就是充分使用了原有短语的表,我们可以将他导出为 csv ,然后手工补上没有找到的短语(没有找到的为 NULL)

理论上这是 OK 的,但是实验尚未完成,因为博主卡在第一遍的手工校正上了。先记录下来,以备后续补充更正。

另外发现 Magento 提取的短语有换行和空行,博主做了一些测试,可能是 bug ,已经提交 github,戳这里了解更多:https://github.com/magento/magento2/issues/7767

发表评论

电子邮件地址不会被公开。 必填项已用*标注