0

我不确定这是否是提出这个问题的正确论坛,或者我应该将其发布在另一个堆栈交换站点上,请提供建议。

我在 PHP 中生成翻译文件,翻译存储如下

$lang['fileName_md5_hashed_word'] = 'translation in arabic' 

lang 数组具有附加下划线 md5 散列词的文件名索引,该索引的值是该特定文件中该特定词的翻译。我生成这个文件如下:

$fh = fopen($file, 'w');

 //create the array to be stored in the language file
 .....
 .....

fwrite($fh, $translations) //write translations to the file, while $translations is the associative array of the words in the above mentioned format.

这非常适用于其他翻译,文件大小以 KB 为单位,如 70 KB(如普通主题翻译、管理翻译和模块翻译),但对于移动主题翻译,文件大小为 16 MB(是的 16 MB :( )和数字该文件的行数是 356 ,比其他翻译文件少。我不知道是什么问题,为什么它的大小那么高。

有人可以建议可能是什么问题吗?

谢谢

4

1 回答 1

1

这听起来很可疑。由于字符字节大小的增加,UTF-8 和 UTF-16 文件对于非 ASCII 字符可能比 ASCII 文本文件占用更多空间,但不会那么多!

有什么方法可以发布文件的链接吗?对于我的一些建议,我假设您正在运行基于 Linux 的操作系统。

尝试的事情

首先验证它确实是 16 MB。假设您的文件是“translation.php”:

ls -lh translations.php

翻译的行有多长?它可能只有 356 多行,但如果其中很多行缺少回车符,它们可能会很长。尝试在每个输出后添加回车,看看是否有区别。

$myContent += "\n";

您甚至可以尝试在将整个文件写入文件之前将其缓冲为字符串。然后,您可以在字符串达到一定大小时输出该字符串并检查您的循环。

您可以尝试对文件进行排序并处理重复的行。假设您的文件名为“translations.php”,您可以在命令行上快速处理:

sort translations.php | uniq > translations.php

您还可能需要删除“gremlins”或隐藏的控制字符。

preg_replace('/[\x00-\x1F\x7F]/', '', $input);

输出文件的循环条件也有可能出现问题。你能提供更多的代码吗?

于 2013-09-24T08:46:39.157 回答