2011-02-04 4 views
1

음, 항상 저를 방해하는 큰 질문이 있습니다.구성, 레지스트리 및 언어 이름 규칙 표기 규칙

내가 다중 언어 및 사용자 정의를해야 웹 응용 프로그램을 개발하고 있어요

소개. 그래서 (내부 구성을 그룹화 할) 레지스트리 클래스와 브라우저 언어를 기반으로 올바른 언어 파일을 가져와 필요한 언어 문자열을 얻는 언어 클래스를 개발했습니다.

이의이

# 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 

그러나 이것은 길고 무의미한 길입니다. 오류 메시지가 오류 컨텍스트 내에 포함되도록 언어를 다차원으로 유지해야합니다.

$Language->user("welcome_new_user"); 
/*  ^     */ 
: 훨씬 더 읽기되고 당신은 예를 들어, 그래서

/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"); 

언어 클래스에서 다음과 같은 종류의 호출을 수행 할 수있는 호출 방법을 만듭니다.

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

이렇게하면 더 쉽게 관리 할 수 ​​있습니다.

참고 :

더러운 입을 씻어!

+0

그런 다음 레지스트리 클래스의 유틸리티는 무엇입니까? – Shoe

+0

응용 프로그램 내에서 더 넓은 범위를 제공하여 개체에 접근 할 수 있고 백 트레이스를 도울 수 있습니다. – RobertPitt