次の例は、Apacheを搭載したMac OS Xで機能します。つまり、翻訳された文字列がエコーバックされます。しかし、lighttpdを使用したUbuntuでは、元のテキスト「非アクティブアカウント」が表示されます。私は運が悪かったので、環境変数のあらゆる種類の組み合わせを試しました。 .moファイルの内容をエコーアウトできるため、ファイルのアクセス許可でもありません。
<?php
//$locale = 'sv_SE.UTF-8';
$locale = 'sv_SE';
$dir = dirname(__FILE__);
// File permission is apparantly not a problem as this works...
//echo file_get_contents($dir . '/sv_SE/LC_MESSAGES/flattr.mo');
putenv("LANG=$locale");
putenv("LANGUAGE=$locale");
putenv("LC_ALL=$locale");
putenv("LC_MESSAGES=$locale");
setlocale(LC_ALL, $locale);
setlocale(LC_MESSAGES, $locale);
//setlocale(LANG, $locale);
//setlocale(LANGUAGE, $locale);
bindtextdomain('flattr', $dir);
//bind_textdomain_codeset("flattr", 'UTF-8');
textdomain('flattr');
echo _("Inactive account");
?>
誰かアイデアはありますか?
私も同じ問題に直面していました。 Ubuntu10.10で修正するために行ったことについて説明します。
1)「gettext」がインストールされていることを確認します。
Sudo apt-get install gettext
または、「gettext」をインストールできない場合は、「php-gettext」をインストールできます。 'gettext'が既にインストールされている場合、パッケージ 'php-gettext'は必要ありません。
2)次に、言語のロケールを生成します。この例では、「sv_SE」を使用します。 '/ usr/share/i18n/SUPPORTED'でサポートされているロケールを検索します。
less /usr/share/i18n/SUPPORTED
'sv_SE'で始まる複数の行があります。
sv_SE.UTF-8 UTF-8
sv_SE ISO-8859-1
sv_SE.ISO-8859-15 ISO-8859-15
これは、sv_SEのロケールを生成するための複数のオプションがあることを意味します。オプションの1つに、名前にピリオド(。)が含まれていません(つまり、sv_SE ISO-8859-1
);これは、そのロケールのデフォルトの文字セットです。デフォルトの文字セットのロケールを生成するには、次のコマンドを実行します。
Sudo locale-gen sv_SE
UTF-8文字セット用にそのロケールを生成する場合は、次のコマンドを実行します。
Sudo locale-gen sv_SE.UTF-8
ロケールを生成した後、Apacheを再起動します(そうでなければ、新しく生成されたロケールは見つかりません)、
Sudo service Apache2 restart
3)最後に、生成したロケールに一致するようにPHPスクリプトを更新します。'sv_SE 'のロケールを生成した場合は、
setlocale(LC_ALL、 "sv_SE");
ただし、そのロケールに相当するUTF-8を生成した場合は、、
setlocale(LC_ALL、 "sv_SE.UTF-8");
これですべてが機能するはずです。
受け入れられた回答に概説されている手順に従いましたが、Ubuntu 14.04LTSで動作させることができませんでした。私は2つの重要なことをしなければなりませんでした:
(1)messages.moファイルを生成する前に、message.poでcharsetのUTF-8を明示的に指定する必要がありました。
msgid ""
msgstr "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-19 16:28+0530\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" <---------change here
"Content-Transfer-Encoding: 8bit\n"
(2)インストールされているロケールと同じフォルダ名を維持する必要がありました。たとえば、Sudo locale-gen kn_IN
を実行してカンナダ語をインストールしました。これにより、kn_IN.UTF-8
が生成されました。 UTF-8の大文字とハイフンに注意してください。 phpスクリプトでロケールを設定するとき、およびmessages.moファイルを配置するフォルダー名にこれと同じ名前を使用しました。
PHPスクリプト:
// I18N support information
$locale = "kn_IN.UTF-8"; <----------change here
putenv("LANG=".$locale);
putenv("LC_ALL=".$locale);
setlocale(LC_ALL, $locale);
$domain = 'messages';
bindtextdomain($domain, "./Locale");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
フォルダ名:
project_folder
/Locale
/kn_IN.UTF-8 <------change here
/LC_MESSAGES
/messages.mo
Ubuntuは、フォルダー名とファイル名で大文字と小文字を区別します。したがって、大文字が上記のように維持されていることを確認してください。