如何获得以UTF-8编码的cakePHP i18n .pot文件?

时间:2012-02-13 09:32:25

标签: cakephp encoding utf-8 internationalization command-line-interface

我正在使用cake i18n命令在我的应用程序中提取__()函数的内容。 但是,default.pot输出文件没有以UTF-8编码,因此没有正确显示加重的字符,这是一个问题,因为主要语言是法语(很多'é','à'...)。 / p>

我在Windows 7上使用wamp服务器。

我尝试使用chcp更改Windows控制台的编码,使用notepad ++或PSpad编辑器转换UTF-8中的default.pot文件,但没有成功。

您知道如何以UTF-8格式获取此default.pot文件吗?

所有.php或.ctp文件都使用Komodo或Geany编辑,在Windows上都配置为使用UTF-8。 如果有帮助,我也在使用颠覆。

感谢您的阅读。

2 个答案:

答案 0 :(得分:2)

与cakephp 1.3有相同的问题(不确定它是否在2.x中修复):所有不符合ANSI标准的“特殊”字符(例如ä,ü,ö,ß),其中提取的是。 pot文件,由ANSI解释(例如“Ô而不是“ü”)。

Camille提到的解决方案(手动更改字符)并不是很可行,因为它是很多字符,这部分地破坏了.pot格式,更糟糕的是.po文件的自动更新将无法工作。

我找到的解决方法是在php文档中对write()(在控制台任务中使用)中的注释的帮助:http://www.php.net/manual/en/function.fwrite.php#73764

根据那里的描述,我用两行扩展了文件/cake/console/libs/tasks/extract.php:

第一行进入函数__buildFiles():

$string = utf8_decode($string);

我在第351行写了它,但它只需要在函数使用变量之前的第二个foreach循环和couse中。

第二行进入函数__writeHeader():

替换行$ File-> write($ output);与

$File->write(utf8_encode($output));

这样做对我来说,请注意更新你的cakephp会覆盖这些变化。

答案 1 :(得分:0)

感谢@Msalters,我找到了解决这个问题的方法。我更改了编辑器的默认编码并覆盖了错误的字符。