4

バックエンドでの登録、ログイン、パスワードのリセット、およびユーザー管理で構成される小さなプロジェクトに取り組んでいます。さまざまな言語の翻訳ファイルを作成する必要があり、gettext のようなもの (私は何も知りません) を使用する代わりに、次のように言語ファイルごとに静的配列を使用する非常に単純な方法を実装することにしました。

function plLang($phrase) {
    $trimmed = trim($phrase);
    static $lang = array(
    /* -----------------------------------
    1. REGISTRATION HTML
    ----------------------------------- */
    'LNG_1'     => 'some text',
    'LNG_2'     => 'some other text',
    etc. ...
    );

    $returnedPhrase = (!array_key_exists($trimmed,$lang)) ? $trimmed : $lang[$trimmed];
    echo $returnedPhrase;
}

この段階では非常に高速ですが、私のマークアップには php 言語タグが散らばっていて、正しい決定を下したかどうかはわかりません。私はこれまでにこれをやったことがないので、何を楽しみにしているのかわかりません。また、私がすべて完了するまでに、このファイルは 1 マイルの長さになるようです。

これはこれを行う良い方法ですか?あなたが提案できるより良い方法はありますか?

ありがとうございました!

4

3 に答える 3

8

これは私のcmsで私がしていることです:

  • プラグイン/プログラム/エンティティ(名前をeach付ける)の場合、私は開発し、/translationsフォルダを作成します。
  • el.txt、de.txt、uk.txtなどの名前のすべての翻訳をそこに置きます。すべての言語
  • 翻訳データはJSONで保存します。保存しやすく、読みやすく、誰もが投稿しやすいからです。
  • ファイルは、データベースをいじることなくファイル内で簡単にUTF8エンコードできるため、ファイルモードで読み取ることができます。(JSON.parseそれらだけ)
  • このようなプラグインをインストールすると、すべての翻訳をループしてデータベースに配置し、各言語をテーブル行ごとに配置します。(などa data column of TEXT datatype
  • ページのレンダリングごとに、選択した言語のこの行を取得するためにデータベースを1回クエリし、json_decode()結果全体を呼び出して1回取得します。次に、それを$ _SESSIONに入れて、次回、現在選択されている言語のフラッシュ速度で変換された文字列を取得します。

すべては、パフォーマンスと互換性の両方を念頭に置いて開発されました。

あなたの場合、そのようなファイルの行は次のようになります。

en.txt

{"id":"LNG_1","str":"My word"}

de.txt

{"id":"LNG_1","str":"Mein Wort"}

現在の言語は、 $ _SESSION["language"]のようにセッションに保存できます。それを出発点として使用します。次に、次のような翻訳を読むことができます。

lang("LNG_1");
于 2012-06-10T20:05:12.607 に答える
2

多くのフレームワークは、これらの言語配列を別々のファイルに格納します。どの言語の各配列も同じ名前です。次に、言語関数には、ユーザーが選択した言語(require('lang.en.php'))に適切なファイルが必要です。

// lang.en.php
$languageStrings = array(
    'login' => 'Log in',
);

// lang.ru.php
$languageStrings = array(
    'login' => 'Авторизовать в системе',
);

// lang.ja.php
$languageStrings = array(
    'login' => 'ログイン',
);

現在使用されている言語(ユーザーが選択した言語など)は、グローバルにアクセス可能な変数を使用して決定できます。

アイデア:IETF言語タグを言語キーとして使用します。

于 2012-06-10T20:39:07.917 に答える
0

国際化をサポートするテンプレート エンジンを使用する必要があります。
たとえば、私自身のテンプレート エンジンでは、次のようなことができます。

<p>(_text to be localized here)</p>

そして、そのマーカー内のテキストが翻訳されます。これにより、テンプレート ファイル内の php タグが次のように開くたびに回避されます。

<p><?php plLang('lang'); ?></p>

とにかく標準的な解決策は、gettext http://php.net/manual/en/book.gettext.phpを使用することです

例:

// alias _() for gettext()
echo _("Have a nice day");
于 2012-06-10T18:45:51.073 に答える