.mo ファイル (PoEdit を使用) で PHP Gettext を使用して、フランス語 (fr_FR.UTF-8) から英語 (en_US.UTF-8) に翻訳しています。UTF-8 で正しく翻訳されていないアクセントについて話しているのではなく、一部の文字列全体が翻訳されていないだけです。
すべての 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 です (BOM なし)。
キャッシュに問題はありません。変更ごとに .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@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."
(...)
私は多くの解決策を試しましたが、誰もうまくいきません:
- 「en_US」、「en_US.utf8」、「en_US.utf-8」などの他のロケールを試してください...
- putenv('LANG=fra'), putenv('LC_ALL=fra')...
- Notepad++ を使用して、生成された .mo ファイルの UTF-8 エンコーディングを強制します。
解決策はありますか?Apache、PHP、または Gettext に問題はありますか?