2011-02-04 6 views
1

Ну, вот большой вопрос, который меня всегда беспокоил.Конфигурации, соглашения об именах реестров и языков

Введение

Я занимаюсь разработкой веб-приложение, которое должно быть несколько языков и настраиваемый. Итак, я разработал класс реестра (который будет группировать мои внутренние конфигурации) и класс языка, который позаботится о том, чтобы получить правильный языковой файл (на основе языка браузера) и получить нужную мне строку языка.

Давайте глубже

Давайте поговорим об использовании этих классов

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

Тот же кусок кода используется для класса языка, который будет иметь

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

Реальное дело

Хорошо, теперь. Я всегда в значительной степени d * трахнуться при выборе правильного имени для конфигураций и языковых индексов, и я всегда в конечном итоге что-то вроде:

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

Или:

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

для языков , и:

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->errors("user_not_logged_in"); 

, который становится гораздо более удобным для чтения и имеет более высокую производительность, так как вы бы разделить ваши для Context на отдельные файлы, такие как так

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

Каждый будет загружен только при вызове, например:

$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

Смежные вопросы