中文包的更新方法问题(二)

关于中文包的更新方法问题 (原创) 中,我们曾经提出过一个问题:

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

当时博主提出了使用数据库的连接查询来制作中文包的方法。后来,Neo 同学使用该方法时,出现了数据导入时并没有按照逗号分隔符分割字段的情况。于是 Neo 使用了 php 方法来替换。这种方法比之前省力许多,又好用,再次感谢 Neo !

Neo 同意将代码放出来,下面的代码供大家参考。

<?php
header("Content-type: text/html; charset=utf-8");
$filename = "newGenerate.csv";
$handle = fopen($filename, "a+");
$ofile = fopen('old.csv','r');
$nfile = fopen('new.csv','r');
while ($data = fgetcsv($ofile)) {
    $olist[$data[0]] = $data;
}
while ($sdata = fgetcsv($nfile)) {
    if(isset($olist[$sdata[0]])){
        $sdata[1] = $olist[$sdata[0]][1];
    }
    fputcsv( $handle, $sdata );
}
fclose($handle);
fclose($ofile);
fclose($nfile);
echo 'suceess!';

?>

主要就是用 php 读取 csv 文件放到数组中进行替换,然后写入文件。

Magento 2 中文化问题(原创)中曾经提到过 csv 文件有的有四栏,有的有两栏,但是实际使用时,却发现效果没什么差别。

如果你对 Magneto 的翻译机制比较好奇,请访问这里 Translation Mechanism in Magento 2.x Platform

我们接下来要说结论了,的确,四栏的后两栏根本没有用到。假设我们的 csv 中有多个重复的字段,那么取得是最后一个的翻译值。

所以,我们提取出来的很多字段是重复的,不妨先进行一次清洗。以下是清洗的代码:

<?php
header("Content-type: text/html; charset=utf-8");
$filename = "newGenerate.csv";
$handle = fopen($filename, "a+");
$ofile = fopen('old.csv','r');
while ($data = fgetcsv($ofile)) {
    $olist[$data[0]] = $data;
}
foreach ($olist as $key => $value) {
    $sdata[0] = $key;
    $sdata[1] = $value[1];
    fputcsv( $handle, $sdata );
}
fclose($handle);
fclose($ofile);
echo 'suceess!';
?>

最后,再次感谢 Neo 的分享!

发表评论

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