PHPでのローカライズ、ベストプラクティス、またはアプローチ


11

PHPアプリケーションをローカライズしています。同じことを達成するための最良の方法を選択することにはジレンマがあります。

方法1:現在、PHPファイルの配列にローカライズする単語を保存しています

<?php

$values = array (
                        'welcome' => 'bienvenida'
                ); 

?>

必要に応じて各単語を抽出して返す関数を使用しています

方法2:同じ文字列を保存するtxtファイルを使用する必要がありますか?

<?php
$welcome = 'bienvenida'; 
?>

私の質問は、同じものを開発するための速度と労力の面で、どちらがより良い方法であり、なぜですか?

編集:2つの方法のうち、応答が速い方法を知りたいのですが、なぜそうなるのでしょうか?また、上記のコードの改善は大歓迎です!


2
gettextを検討しましたか?
-sagarchalise

@sagarchalise私はそれを調べましたが、私は独自のメソッド、つまり上記の2つを構築したいと思います。したがって、どのメソッドがより速く動作し、どのメソッドがより信頼性が高いかを知りたいです!:)
sree

速度の面で知りたい場合は、いくつかのテストケースを実行してください。最初の方法または2番目の方法の100万倍の速度で実行されるものは何ですか?
フランシスコプレゼンシア14年

2
正常に機能するホイールを再発明しないでください。
gbjbaanb 14

回答:


10

PHPには、ローカライズのための優れた組み込み機能があります。最も一般的な方法はgettextのようです- このチュートリアルでは、その使用方法を示します。

PHP 5.3以降、さらに多くの機能を提供するintlもあります(たとえば、ロケールに応じて数値、日付、通貨をフォーマットする)。


あなたの答えをありがとうございますが、速度と信頼性の観点から構築する方が良い方法を上記から知ることができます。
sree

10

まず第一にgettext、良い方法ですので、最初は簡単に聞こえない場合は却下しないでください。ただし、知っておくと便利な他のオプションもあります。それを説明する前に、まずあなたの提案を見てみましょう。

これarrayを行うあなたの方法では、かなり簡単な解決策があります。良い点は、翻訳をデータストレージに保存し、それを配列としてPHPスクリプトに読み込むことができるということです。ただし、配列をPHPファイルに静的に保存する場合は、編集する必要がありますa)PHPプログラマまたはPHP構文に精通した経験豊富なユーザー、ファイルを編集するだけb)4つまたは5つの異なる言語ファイル間で同期する非常に迷惑で、エラーが発生しやすくなります。

ここで考慮する必要があるのは、後で言語ファイルに新しい要素を追加する方法です。翻訳者に任せることができますか、PHPプログラマーが必要ですか?

あなたのvariableやり方は実際的ではありません。どうして?少なくともアプリケーションにはいくつかの機能があると思いますか?次に、関数を呼び出すときにこれらの変数をすべて渡すか、必要に応じて渡す必要がありglobalます。このような変数が10個以上あると思われる場合は、これを行うことを強くお勧めします。名前の競合もある可能性があります-同じ名前の別の変数の値をオーバーライドできる可能性がありますが、アンダースコアのような単純な接頭辞を追加することで解決できます$_welcome。たとえば、とにかく、私があなただったら、私もそれについて考えません。しないでください。

それを行う良い方法の1つは、定数を接頭辞で定義することです。だから例えばあなたにはen.lang.phpあなたのようなものがdefine( 'LABEL_WELCOME', 'Welcome' );あり、あなたにはno.lang.phpあなたがいるでしょうdefine ( 'LABEL_WELCOME', 'Velkommen' );。変数の代わりに定数を使用することの良い点は、スクリプトで常に使用できることです。したがって、それらを注入したり、グローバル化したりする必要はありません。配列と変数の両方と比較して、PHPがそれらを処理する方法のために、それらはより高速です-それらはメモリのより少ないスペースを占有します。欠点は、それらをトランスレーターに渡すことができないことです。したがって、やはりPHP開発者が必要です。また、ファイル間で同期するのも少し面倒です。

他のオプションは、翻訳を取得するための関数またはクラス/メソッドを持つことです。効率は低下しますが、そのような微最適化はまったく必要ないと思いますが、追加の利点は、翻訳を取得しながらカスタムロジックを適用できることです。たとえば、いつかあなたの最愛のプロジェクトマネージャーが、これらのテキストをすべて大文字に変換できるかどうかを尋ねてきたとします。それを拒否することはできません。そのため、すべての翻訳にパターンを適用/変更する必要があるときに、間に機能を持たせることは大いに役立ちます。

まとめるには:

  1. 翻訳者がそれをどのように使用できるかを考え、彼らのために実用的なKISSソリューションを考え出してください。

  2. 異なる言語間で同期を維持する方法について考えてください。

  3. 同じ翻訳が必要かどうかを考えてみましょう、モバイルアプリの場合。クロスプラットフォームソリューションは時間を節約できます。JSONや通常のデータベースを却下しないでください。

  4. 翻訳を取得するときに、ロジックを適用/変更する方法を考えてください。

  5. パフォーマンスを忘れました。99.9%の場合、定数変数関数呼び出しのようなマイクロ最適化を行うことができません。開発者/スタッフとしてのあなたの時間は、プロセッサー時間よりも高価だと思います。

アップデート#1

私の良さ、私は1年前の質問に対する答えを投稿します。誰もここで何も言っていないのはなぜですか?これらの場合にはアラートが必要です。

アップデート#2

右側には、1年前の質問だと書かれています。しかし、それは2年前に尋ねられました!ここではすべてが誤解を招きます!


あなたは時間旅行者のように見えます:)
sree 14

3
@sreeはい!2014年4月4日から来ています!2012年にFacebookまたはWhatsAppのシェアを購入した場合、2014年にPHPコードを記述する必要はありません!
マフディ14

1
ロフルは同意した!!!
sree 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.