19

次の例は、Mac OS X と Apache で動作します。つまり、翻訳された文字列がエコー バックされます。しかし、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");

?>

誰にもアイデアはありますか?

4

2 に答える 2

54

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

setlocale(LC_ALL, "sv_SE");

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

setlocale(LC_ALL, "sv_SE.UTF-8");

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

于 2011-05-22T11:14:13.750 に答える
1

受け入れられた回答で概説されている手順に従いましたが、Ubuntu 14.04 LTS で動作させることができませんでした。私は2つの重要なことをしなければなりませんでした:

(1) messages.mo ファイルを生成する前に、message.po で明示的に文字セットに 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 <LL@li.org>\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 では、フォルダー名とファイル名の大文字と小文字が区別されます。そのため、大文字が上記のように維持されていることを確認してください。

于 2016-12-21T02:57:17.593 に答える