Ubuntuでgettext (php)が動作しない 質問する

Ubuntuでgettext (php)が動作しない 質問する

次の例は、Apache を使用した Mac OS X では機能します。つまり、翻訳された文字列がエコーバックされます。しかし、lighttpd を使用した Ubuntu では、元のテキスト「Inactive account」が返されます。環境変数のあらゆる組み合わせを試しましたが、うまくいきませんでした。.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");

?>

何かアイデアはありますか?

ベストアンサー1

私も同じ問題に直面していました。Ubuntu 10.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'のロケールを生成した場合は、

ロケールを設定します(LC_ALL、"sv_SE");

しかし、そのロケールのUTF-8相当を生成した場合は、

ロケールを設定します(LC_ALL、"sv_SE.UTF-8");

今はすべて動作するはずです。

おすすめ記事