[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с логикой мультиязычности
ip94
Здравствуйте! Я разрабатываю одну небольшую программу. Решил я её делать модульно и использовал при этом ООП и функционально-процедурный подход (т.к. опыта с ООП пока ещё очень мало). Сейчас я столкнулся с мультиязычностью. Логику я придумал следующую: есть главный файл (framework.php), который производит первичную настройку и подключает все необходимые файлы, в том числе и файл для работы с мультиязычостью. Языковые переменные хранятся в ini (rus.ini, eng.ini) файле. Информация о языке хранится в профиле пользователя в базе данных (будут только зарегистр. пользователи). Файл для работы с мультиязычностью подключается к БД и извлекает текущий язык текущего пользователя и подставляет его при подключении к ини файлу и идёт парсинг этого файла... Ко всем дочерним файлам (а именно файлы шаблона) подключается файл framework.php. Теперь у меня вопрос: как сделать так, что бы в шаблоне стояла переменная и она брала нужное значение с нужного ини файла.... Я понимаю, что получилось очень запутанно, но надеюсь, что Вы мне поможете это упростить. Читал похожие темы, но там логика была совершенно другая, нежели у меня.
Zzepish
Массивы в файлах
SDV
я бы сделал так, отдельный статичный класс для языков, функцию инициализации в нем, при выполнении которой заполнялся какой-нибудь массив, который хранит в себе нужный языковой пакет. в общих чертах, для меня плюс в том что не возникнет проблем с областью видимости переменных, можно использовать его повсеместно, главное его правильно "завести" перед работой
ip94
Цитата (SDV @ 22.08.2013 - 06:08)
я бы сделал так, отдельный статичный класс для языков, функцию инициализации в нем, при выполнении которой заполнялся какой-нибудь массив, который хранит в себе нужный языковой пакет. в общих чертах, для меня плюс в том что не возникнет проблем с областью видимости переменных, можно использовать его повсеместно, главное его правильно "завести" перед работой

Мне ваш вариант понравился. Можете, пожалуйста по-подробнее? В моём примере как раз и возникает ошибка в видимости переменных.
kaww
ip94, например, что-то типа такого
class Translator {

private $_locale;

private $_dictionary;

public function __construct($locale = 'en_US')
{
$this->_locale = $locale;
}

public function translate($message)
{
$dictionary = $this->getDictionary();
if (isset($dictionary[$message])) {

return $dictionary[$message];
}
return $message;
}

private function getDictionary()
{
if (!$this->_dictionary) {

$this->_dictionary = $this->_locale . '.php';
}
return $this->_dictionary;
}
}


файл ru_RU.php
return array(
'Hello, world!' => 'Привет, мир!'
);

использование:
$translator = new Translator('ru_RU');
echo $translator->translate('Hello, world!');


З.Ы. можно реализовать как singleton http://ru.wikipedia.org/wiki/Singleton#.D0....BD.D0.B0_PHP_5
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.