Правильные lng-файлы...

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.524
Всем привет!

И так, есть 3 варианта организации нескольких языков на сайте...
1) Мне совсем не нравится - мы делаем несколько вариантов шаблона (по одному для каждого языка).
Плюсы: Скорость работы потрясающая, мы вместо парсингов и прочего просто цепляем нужный файл и там уже всё готово.
Минусы: Правки в вёрстке куда чаще, чем в lang-файлах, а делать нам их теперь в n-цати местах, где n - количество языков

2) Использовать конструкции [lang=ru]Игры[/lang][lang=en]Games[/lang]
Плюсы: Не надо править lang-файлы в каждый раз, а так же сразу видно что будет показано юзеру
Минусы: Захламлённость файлов шаблона, особенно при 10+ языках

3) Использовать только lang-файлы, а в шаблоны вставлять аля {lang_bla_bla_bla}, а затем парсером проходиться по всем шаблонам
Плюсы: Лёгкий перевод, всё в одном месте, красиво, удобно... А главное - лёгкий контроль версий и добавление языков
Минусы: Дикая нагрузка из-за forech по lang-файлу...

В общем, какой из вариантов считаете лучше, какие за и против? Почему?

P.s. да, если какие-то куски заполняются по неким условиям, к примеру, сообщение об ошибке - мы берём шаблон и пихаем туда данные из ленг-файла... Тут других вариантов даже смотреть не хочу...
 
Реализовал так:
PHP:
	if (strpos ( $this->template, "{lang_" ) !== false) {
		$this->template = preg_replace_callback ( "#\\{(lang)_(.+?)\\}#is", array( &$this, 'lang'), $this->template );
	}

	function lang( $matches=array() ) {
		global $lang;
		
		return $lang[$matches[2]];
	
	}

В итоге получил комбинацию... Допустим как 2 вариант, так и 3 вариант... А через include могу делать и 1-ый =)) Универсальность - это круто )))
 
Последнее редактирование:
У меня lang-файл для каждого языка, но если нужного перевода нет, то берётся из по умолчанию.
Шаблонами как таковыми не пользуюсь. Сколько не пытался, столько отказывался.
T.e, скинов на сайте может быть и несколько, но если нужного "шаблона" нет, то берётся "шаблон" из скина по умолчанию.
Я хотел сказать что "шаблоны" на PHP))
ob_start();
include ..;
.. = ob_get_contents();
ob_end_clean();
 
Последнее редактирование:
почему не взять symfony translation: Для просмотра ссылки Войди или Зарегистрируйся
Ответный вопрос - а зачем? Реализация выше в 5 строчек, зачем мне столь большое решение? Экономия по скорости? Сомнительно... По расходу CPU и RAM? Ещё более сомнительно...

Давай как-нибудь аргументировано за и против =)
 
Gettext-подобный вариант, давно и успешно используемый в Unix, предполагает языковую функцию называть __()
Вот рабочий пример:
PHP:
function __($text){
global $lang;
if (isset($lang[$text])) return $lang[$text];
else return $text;
};
Потом в шаблоне очень доходчиво получается:
PHP:
<?=__('Delete')?>
Пример:
Для просмотра ссылки Войди или Зарегистрируйся
 
Назад
Сверху