Реализация мультиязычности в проектах на PHP

Статус
В этой теме нельзя размещать новые ответы.

trooll

PHP кодер
Регистрация
22 Дек 2008
Сообщения
482
Реакции
117
Доброго времени суток.

Не знаю может быть тема уже жеванная не раз, но на форуме не нашол не чего толкового.

Вобщем интересен вопрос реализации мульти-язычности проектов реализованных на PHP. Вобщем интересно кто какие способы использует в своиз проектах.

Мойвариант реализован на приравнивание констант (не знаю хорошо это или плохо, но пока проблем не возникало), собственно пример ниже:

Ланг файл ru-RU.ini (в данном случае русско-язычный:(
Код:
LNG_HELLO=привет
LNG_USER=пользователь
LNG_LINK_TYPE=тип ссылки
LNG_LINK_IS_NOT_DIRECT=ссылка не являеться прямой
LNG_SCRIPT_EXECUTION_HAS_BEEN_STOPPED=исполнение скрипта было остановлено

функция инициализации ланг-пака (языкового файла:(
PHP:
function initLangPack($v1)
{
	$pr1 = parse_ini_file($v1);
	$ct1 = sizeof($pr1);

	foreach ($pr1 as $key => $value){
		if(!defined($key))
		{
			define($key, $value);
		}
	}
}

пример вызова:
PHP:
initLangPack('./ru-RU.ini');

echo LNG_HELLO .' '. LNG_USER;
 
а не проще ли стразу создавать константами в ленг фаиле ? или массив делать?
 
а не проще ли стразу создавать константами в ленг фаиле ?
Не красиво это, да и для пользователя рядового (заказчика) часто не понятно что да как менять.


или массив делать?
Была у меня в свое время реализация на массивах, та же песня про не понятность от пользователей (заказчиков), с дальнейшим выяснением обстоятельств и причин по которым не работает скрипт.
 
по мне все просто массив, + в админке к нему модуль редактор
вариантов не так много
-константы
-массивы
-в СуБД табличка
--
ини фаил не желательно не там чего поставит и все...
лучше всего все же любой из -3х как больше нравится и к нему админ модуль с редактором) думаю это ненужно рассказывать как сделать
 
...ини фаил не желательно не там чего поставит и все...
Да есть такое дело, были заморочки. За то при этом варианте простота, быстрота. И как вариант при использовании моего варианта с константами, нельзя пере инициализировать константу заданную выше в скрипте по иерархической лестнице.


...лучше всего все же любой из -3х как больше нравится и к нему админ модуль с редактором)
Да вот к этому решению медленно и плавно иду, так как начинаю подумывать что бы записывать в файл уже профильтрованные данные, да бы избежать недоразумений.
 
Я еще видел такой вариант:

PHP:
echo e('Invalid login');
echo e('Hello, %s', $user);

И надо сказать, мне он понравился гораздо больше чем константы. Собственно, тремя вещами:

1) Не надо придумывать названия для констант типа ERR_INVALID_LOGIN, сами фразы на английском уже служат идентификаторами.

2) Легче в плане "плавности" миграции. Сначала, когда ты еще не задумывался о мультиязычности, ты везде писал просто echo "Invalid login"; потом прошелся, порасставлял везде вызов функции, а функция эта у тебя если не найдет адекватного перевода - возвращает свой аргумент без изменений, т.е. на английском. И дальше уже переводишь потихоньку.

3) Гибче. Можно иметь дополнительные параметры, можно в эту же функцию вставить "числа строкой" и оно для разных языков будет правильно переводиться, аналогично с числительными, падежами и т.п.

А из недостатков могу назвать только скорость работы и то, что приходится расставлять скобочки. Скорость снижается практически неощутимо, а то и вообще не снижается, а вот скобочки задалбывают.
 
а можно пример поподробнее интересное что решеие такое?
 
почему все пытаются языковые переменные держать именно в файлах, ведь есть более быстрая MySQL, я думаю в ней содержать все записи, да и редактировать быстрее вроде, или я не прав?
 
почему все пытаются языковые переменные держать именно в файлах, ведь есть более быстрая MySQL, я думаю в ней содержать все записи, да и редактировать быстрее вроде, или я не прав?

И каждый раз каждую строку селектить?

Редактировать - да, но часто ты интерфейсные сообщения собираешься редактировать? Имхо проще намертво вшить в код - и быстрее работать будет, и легче реализовать, и проще логика, без дополнительных сущностей.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху