Я использую PHP Gettext с .mo-файлами (используя PoEdit) для перевода с французского (fr_FR.UTF-8) на английский (en_US.UTF-8), и он отлично работает , но не все строки переведены! Я не говорю о том, что акценты не переведены правильно с UTF-8, некоторые целые строки просто не переведены.Gettext не переводит каждую строку
Я извлек французские строки для перевода из всех моих PHP файлов - _ («stringtotranslate») - благодаря оболочке сценарий:
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 (без спецификации).
Нет проблем с кешем: Я называю файл .mo по-разному для каждой модификации ('default_' + filemtime).
Что я могу заметить:
- Короткие строки без каких-либо UTF-8 символа переводятся.
- Длинные строки или содержащие символы utf-8 (французские акценты) не переведены ... но я нашел пример короткой строки без акцента, а не перевел тоже ... (другой найденный пример не найден).
Я установил локаль в соответствии с моим сервером (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 protected]>, 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."
(...)
Я пробовал много решений, но никто не работает:
- Попробуйте другие локали, такие как: «en_US», «en_US.utf8», «en_US.utf-8» ...
- putenv ('LANG = fra'), putenv ('LC_ALL = fra') ...
- Форсировать кодировку UTF-8 для файла .mo, с помощью Notepad ++.
Любое решение? Есть ли проблемы с Apache или PHP или Gettext ...?