【问题标题】:How to get cakePHP i18n .pot files encoded in UTF-8?如何获取以 UTF-8 编码的 cakePHP i18n .pot 文件?
【发布时间】:2012-03-04 17:14:24
【问题描述】:

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

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

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

你知道用 UTF-8 格式获取这个 default.pot 文件的方法吗?

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

感谢您的阅读。

【问题讨论】:

  • 您是如何确定该文件不是 UTF-8 格式的?一个常见的错误是假设 UTF-8 文件必须以 U+FEFF 开头。
  • @MSalters 我认为这是因为 POedit 无法先打开文件。我用 Geany 打开了 default.pot,发现重音字符被替换为像“è”这样的字符串。正如我在 OP 中所说,我尝试使用 UTF-8 中的 notepad++(它以 ANSI 打开文件)进行转换,但没有成功(重音字符无法正确显示)。我希望这会有所帮助。
  • 记事本“打开...”对话框有一个选项可以明确指定编码为 UTF-8,它会覆盖默认值。您确实看到 è 的事实实际上是积极的,因为这清楚地表明实际的 UTF-8 被错误地检测为 Latin-1
  • 感谢您的解释,我确实设法以 UTF-8 格式打开它。但是为什么 POedit 会告诉我它“无法转换为 unicode”呢?
  • 听起来像是我在之前的 cmets 中提到的“常见错误”。或者您的 .pot 文件是从多种来源编译而来的,有些是 UTF-8,有些不是。

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


【解决方案1】:

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

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

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

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

第一行进入函数__buildFiles():

$string = utf8_decode($string);

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

第二行进入函数__writeHeader():

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

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

这是为我做的,注意更新你的 cakephp 会覆盖这些更改。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-14
      • 2017-05-08
      • 2013-07-04
      • 2018-05-02
      • 1970-01-01
      • 2022-07-20
      • 2016-01-29
      • 2014-09-11
      相关资源
      最近更新 更多