Gettext 不翻译每个字符串

Gettext not translating every string

我正在使用 PHP Gettext 和 .mo 文件(使用 PoEdit)从法语 (fr_FR.UTF-8) 翻译成英语 (en_US.UTF-8),并且它工作得很好但并不是所有的字符串都被翻译!我不是在谈论没有用 UTF-8 正确翻译的重音符号,一些整个字符串都没有翻译。

我已经从我所有的 PHP 文件中提取了要翻译的法语字符串 - _("stringtotranslate") - 感谢 shell 脚本 :

find . -iname "*.php" | xargs xgettext -j --from-code=UTF-8 -o locale/default.pot

一个default.pot已经全部正确生成,没有遗漏一个。从那个 .pot 文件中,我为英文版创建了一个 default.po 文件。 .po 是 UTF-8,我需要的 PHP 文件也是 UTF-8(无 BOM)。

缓存没有问题:我每次修改都不同地命名.mo文件('default_' + filemtime).

我能注意到什么:

我已经根据我的服务器设置了语言环境(Apache 1.3.37,PHP 4.4.4,--with-gettext)。语言环境是动态的,具体取决于在网站上单击的标志,这里是英文版本:

putenv('LANGUAGE=eng');
setlocale(LC_ALL, 'en_US.UTF-8');
bindtextdomain('default', './locale');
bind_textdomain_codeset('default', 'UTF-8');
textdomain('default');

正如我所说,一些字符串的英文翻译正确,但不是每个字符串。

这是英文版的网站:http://librairiedescarres.com/2015/en/

这是 .po 文件的一部分:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Librairie des Carrés\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-03 14:57+0200\n"
"PO-Revision-Date: 2015-08-04 10:08+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"

#: about-us.php:10 about-us.php:31
#, php-format
msgid ""
"Initialement spécialisé dans l'histoire des sciences et des voyages, notre stock est aujourd'hui largement diversifié : "
"%slivres illustrés%s, %shistoire%s, %sagriculture%s, %sjardinage et architecture%s, %smédecine%s, %sbibliophilie%s, "
"%slivres rares et curieux du XVème au XXème siècle%s."
msgstr ""
"Initially specialised in Travel and Science, our stock is now largely diversified and includes literature and "
"%sillustrated books%s, %shistory%s, %sagriculture%s, %sgardens and architecture%s, %smedicine%s, %sbibliophile%s and "
"%srare books from the XVth to the XXth century%s."
(...)

我尝试了很多解决方案,但没有一个有效:

有什么办法吗? Apache 或 PHP 或 Gettext 是否存在问题...?

我终于找到了答案!多亏了 post(法语 post):solution

Gettext 似乎不支持 msgid(或类似的东西)中的正确重音符号或 UTF-8 字符。

解决方案是使用“--no-hash”选项生成 .mo 文件:

msgfmt --no-hash default.po -o default.mo

我希望 PoEdit 自己完成,但我没有找到类似的设置...