0

サイトの多言語化を維持したい。このため、ラベルなどの json ファイルの例を以下に示します。

果物.json:

{
    "apple" : {
        "en" : "apple",
        "de" : "apfel"
    },
    "banana" : {
        "en" : "banana",
        "de" : "banane"
    },
    "cherry" : {
        "en" : "cherry",
        "de" : "kirsche"
    }
}

ページ コントローラーは、そこから配列を作成します。

PHP:

$lang = json_decode(file_get_contents("fruits.json"), true);

現時点では、次のコードを使用して、ページ ビューで必要なラベルにアクセスします。

$lang['apple']['de'];

最終結果を達成するためのより簡単な方法はありますか? ページ ビューから言語インデックスを削除するとよいので、最後のコードは "$lang['apple']" のようになります。

しかし、一般的な質問: これは多言語サイトにとって良い方法ですか? または、別の方法でファイルを構成する必要がありますか?

4

5 に答える 5

1

私の意見では、あなたは半分良いアプローチを取っています。i18n を json-alike ファイルに保存しても問題ありません。ただし、言語ごとに個別のファイルを提供する方がよいと思います。したがって、英語とドイツ語の json 翻訳用に別のファイルができます。したがって、次のようになります。

{
    "apple" : "apfel",
    "banana" : "banane",
    "cherry" : "kirsche"
}

ドイッチ用。1 つの巨大なファイルを編集する必要がないため、多くの言語を使用している場合は、このようなファイルを維持する方が簡単です。代わりに 1 つのファイルを追加します。

i18n ファイルを保存する i18n ディレクトリを作成できます。

i18n/
    en.json
    de.json

拡張子が .json のすべてのファイルを読み取るクラスを作成し、1 つの i18n 関数に 2 つの引数を指定します。

fun translate(lang, key)
{
    // access your i18n data here
}

この関数は、ビュー レイヤー (MVC) から直接アクセスされます。

簡単に編集できるようにしたい場合は、i18n をデータベースに保存するという別の方法もあります。ビジネス要件によって異なります。

于 2013-10-17T19:48:04.797 に答える
1
{
  "de" : {
    "apple" : "apfel",
    "banana" : "banane",
    "cherry" : kirsche
  }
}

トップレベルのディメンションとして言語を使用すると、それが解決すると思います。次に、json ファイルをデコードしたら、その言語の配列を取得するだけで、必要なすべてのコンテンツが含まれます。

$lang_all = json_decode(file_get_contents("fruits.json"), true);
$lang=$lang_all['de'];

その後、$lang['apple'] を使用してアクセスできます。

于 2013-10-17T19:50:33.347 に答える
1

キーが変更される可能性があるため、json をスキップすることをお勧めします。単に配列をマスター言語に保持し、他のすべての言語をそれにマップする方が理にかなっています。これは、各行にメッセージ/単語を含むマスター言語ファイルと、行番号に直接マップされる各言語の翻訳ファイルとして簡単に実行できます。こちらの方が管理もしやすいです。翻訳を行うには、単にマスター ファイルをコピーし、単語を 1 行ずつ新しい言語に変更します。これは、プログラマーでなく、JSON などに不慣れな翻訳者が行うことができます。

私が見てきた最良の方法は、pot(個人向けのテンプレート) を使用してpo(個人向けの) ファイルを生成し、それをmoファイル (マシン向け) にコンパイルしてパフォーマンスを向上させることです。pot/po/mo ファイルを操作するための Web ベースおよびデスクトップ ツールが多数あります。私はワードプレスでそれらを使用し、プラグインを使用して翻訳を管理し、大きな成功を収めました.

于 2013-10-17T20:00:04.280 に答える
0

JSON は実際には人間が読める形式ではありません。

前述のように、言語ごとに個別のファイルを使用することをお勧めします。さらに、lang ごとに個別のフォルダーを使用し、theme/plugin/library/feature ごとにファイルを使用することをお勧めします (ただし、アプリケーションはプラグインのサイズです)。

多くのフレームワークは、優れたアーキテクチャといくつかのツール (既にコード化されています) を使用するのに役立ちます。

PO/MO ファイル、i18n、gettext() も表示されます。

于 2013-10-17T19:56:52.487 に答える
0

JSON を に読み込んだ後$lang、現在の言語を含む新しい配列を作成できます。

$words = array_map(function($word) use ($curlang) { return $word[$curlang]; }, $lang);

その後、アクセスできます$words['apple']

于 2013-10-17T19:51:54.403 に答える