2011-02-04 18 views
1

これは、常に私を邪魔してきた大きな質問です。設定、レジストリ、および言語の名前の規則

はじめ

Iは、多言語およびカスタマイズする必要があり、Webアプリケーションを開発しています。 私は(私の内部構成をグループ化する)レジストリクラスと適切な言語ファイル(ブラウザ言語に基づいて)を取得し、必要な言語文字列を取得する世話をする言語クラスを開発しました。

はのは、より深い

がコードの同じ部分が

# it.lang.php 
self::set('duck-you', 'Daffanculo'); 
# en.lang.php 
self::set('duck-you', 'Duck you'); 
# whatever-file.php 
lang::get('duck-you'); 

を持つことになり、言語クラスに使用されるのは、このクラスの使用

# config.reg.php 
self::set('configuration-name'); 
# whatever-file.php 
reg::get('configuration-name'); 

についてお話しましょうましょう実物

構成のための言語のインデックスのための右の名前を選択しながら、私はいつもかなりのD * ckedだ、と私はいつものようなもので終わる:言語のための

self::set('your-login-action-has-encountered-a-problem-please-get-back-later'); 

self::set('that-error-message-that-appear-when-a-user-is-not-logged-in'); 

か、および:

self::set('that-cookie-name-used-in-X-file'); 

(設定用) ...それほど大きくはありません。

は、だから私は思っていた最後の質問、私はこれをトラフの取得を支援し、上に移動する可能性のある名前の規則があるのですか?あなたの言語の値は、あなたのレジストリオブジェクトにカプセル化すべきではない初心者のための

+0

あなたの投稿に「元のF単語」と書いてありますか?もう少し騒がしいかもしれないと確信しています。 –

+0

その言葉はあなたを妨害しますか?私はあなたが私が持っているこの幼稚な行動に移るのに十分な年齢であると思った。また、ここには子供がいないはずです。そして、私たちはすべて大人でなければなりません。本当のことは何ですか? (子供たちはその言葉の意味を知っていることに注意してください) – Shoe

+0

@Charlie:私は大人です。私はここで冒涜を使う理由は見当たりません。個人的には、不必要に悪い言葉を使うのは幼稚だと思う。 –

答えて

1

あなたの静的クラスがそうのように構築する必要がありますので、あなたのレジストリオブジェクトのみ、などなどのセッション、言語、入力、出力などのオブジェクトが含まれている必要があります。

abstract class Registry 
{ 
    public static function get($key) 
    { 
    } 

    public static function set($key,$object) 
    { 
    } 
} 

を、あなたがそうのようにレジストリにあなたのオブジェクトを挿入します:

Registry::set("Language", new Language()); 

次に、あなたの言語ファイルを取得するためにあなたの言語のクラスを使用する必要があります。

$Language = Registry::get("Language"); 
$Message = $Language->get("YourMessageKey"); 
私はすべて小文字を使用するようにあなたをアドバイスう命名規則、およびアンダースコアのみに関してで

(これは明確にするためである)

ので、次の行:

that-error-message-that-appear-when-a-user-is-not-logged-in 

that_error_message_that_appear_when_a_user_is_not_logged_in 

なりますしかし、これは長くて無意味ですが、エラーメッセージがエラーコンテキストに含まれるように、あなたの言葉を多次元にする必要があります。

ずっと読みやすくなり、あなたがそう

/locale/en/primary.php | loaded by default 
/locale/en/errors.php 
/locale/en/menu.php 
/locale/en/user.php 

呼び出されたときに、それぞれが唯一例えば、ロードされますように別々のファイルにあなたのコンテキストのアップを分割してしまうため、より良い性能を持っている

$Language->errors("user_not_logged_in"); 

$Language->user("welcome_new_user"); 
/*  ^     */ 

あなたの言語クラスでは、この種の選択を行うための呼び出しメソッドを作成します。

public function __call($context,$params) 
{ 
    if(!$this->contextLoader($context)) 
    { 
     $this->loadContext($context) 
    } 
    return $this->languages[$this->lid][$context][$params[0]]; 
} 

これにより、はるかに管理しやすくなります。

注:

あなたの汚い口を洗浄します!

+0

次にレジストリクラスのユーティリティは何ですか? – Shoe

+0

アプリケーション内のどこにいても、より広い範囲を提供するために、オブジェクトにアクセスしたり、バックトレースを手助けすることができます – RobertPitt

関連する問題