Мультиязыковая платформа

alpes

Весь мир на ладони
Мультиязыковая платформа

Идея создания сайтов использующих неограниченное число языков отображения информации с возможностью относительно легкой подгрузки новых языковых переводов. Хочу обсудить как более правильно организовать структуру построения кода таких сайтов.
Реализовать собираюсь так:
1. Определить переменные:
PHP:
//переменная хранящая абривиатуру языка модуля управления (админа)
var $AdminLang="ru";
//переменная хранящая абривиатуру языка отображаемого в зависимости от выбора пользователя
//инициализирована в язык по умолчанию
var $CurrentLang="en";
//набор допустимых к использованию языковых абривиатур
var $PossibleLang=array("ru","en","it");
2. Всем рисункам, шаблонам, информационным страницам отображающим языковую информацию давать имена в таком виде: <name_xx.extension>, где хх-будет абривиатурой отображаемого языка.
3. В таблицах полям с названиями давать имена: <name_xx> - по аналогии выше.
4. Создать класс из массивов диалоговых сообщений, надписей и т.п. в томже виде: напр. $NameVar["en"]=array("Var"=>"str.mess.", ... ); ...
Также зделать и с именами ссылок (или же с сылками можно будет создать языковые файлы url_xx.inc ??)
5. Построить движек отображения информации пользователям в зависимости от $CurrentLang, а модуля управления в зависимости от $AdminLang.

Что мне здесь не совсем нравится - так это то что скажем рисунки содержащие текст надо заменять вставками c php кодом:
PHP:
<img src="/images/name_<?=$CurrentLang;?>.gif" width="100" height="10"  alt="<?=$Signature["$CurrentLang"];?>">
- а это не удобства работы с дизайном. Или тогда создавать единтичный шаблон но с разными окончаниями имени шаблона и естно с разными окончаниями у имен имиджей и отображемой инфой(пункт 4 тогда не нужен, хранение разбросаем по куче файлов). Пугает количество повторяюхся похожих файлов, где при добавке нового языка можно пропустить поменять где нить окончание и менять прийдется в куче мест а не в одном (в массиве переменных). Тоже неудобство относится и к подписям кнопок...
Собственно посоветуйте как правильно подойти к построению подобной структуры, хотелось бы прежде чем углубится в кодирование ПРАВИЛЬНО представить для себя как все должно быть взаимосвязано. Спасибо.
 

GoBeer

Guest
Шаблоны и картинки для разных языков лучше разложить в разные папки, типа:
PHP:
root_dir
  code - общая часть
  ru
    tpl
    img
    ...
  en
    tpl
    img
    ...
  ...
и в начале определятся из какой папки читать, так вроде удобнее ;)
 

alpes

Весь мир на ладони
Это уже реализация и по сути тоже самое что подставлять окончание имени, хотя в чем то есть смысл.
Вопрос в том как ПРАВИЛЬНО подойти к вопросу о структуре:
1 - "При куче похожих страниц" нужно открывать и модифицыровать каждую, что более хлопотно на большом сайте.
2 - Если использовать класс с массивом текста типа $NameVar["en"]=array("Var"=>"str.mess.", ... ); ... то не удобно работать дизайнерам, если надо заменить/создать дизайн сайта. Хотя добавлять текстовую инфу проще - всего в одном месте.

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

GoBeer

Guest
Что ты имеешь ввиду под "похожими страницами"?
 

Varg

Guest
Делай всё на темплейтах простейших. С текстами как разобраться (на уровне темплейтов это я думаю ясно), а картинки в папках /root/pics/en/ & /root/pics/ru/ например, а при генерации заменяй /pics/ru/ на pics/en/ если язык англ, и ничего не меняй если русский.

А названия имхо удобнее хранить в массиве ассоц. или обычном кому как.

$Lang = 'de';

$LN = $$Lang;

$en['warning'] = 'warning';
$ru['warning'] = "внимание';
$de['warning'] = 'achtung';

и везде теперь пишешь $LN['message_to_translate'];
 

Varg

Guest
Насчёт /pics/en/ - это что бы дизайнер не маялся...
 

alpes

Весь мир на ладони
Varg, спасибо! Собственно картинки с толку збивали, была мысля заменять..., непробывал в шаблоны прикрутить замену директории хранения, сейчас получилось и все стало более ясным.
Особое спасибо за совет использования символических ссылок, я их ранше вообще не юзал. А сейчас идея понравилась. Правда пример надо немного переписать, имеет место порядок объявления:
PHP:
$en['warning'] = 'warning';
$ru['warning'] = 'внимание';
$de['warning'] = 'achtung';

$Lang = 'de';

$LN = $$Lang;

echo $LN["warning"];
 

alpes

Весь мир на ладони
Паралельно возник вопрос по быстродействию, оказывается использование символических ссылок (пример выше) в 2 раза более быстродействующий чем такой пример:
PHP:
$warning['en'] = 'warning'; 
$warning['ru'] = 'внимание'; 
$warning['de'] = 'achtung'; 

$Lang = 'de'; 

echo $warning["$Lang"];
 

ma2dy

Повернуть землю легко
А так не пробовал
файлы
lang_ru.php

lang_en.php

lang_de.php

В них соответственно
PHP:
$warn="Внимание";

$warn= 'warning'; 

$warn= 'achtung';
А в скрипте
PHP:
include("lang_$LANG.php");
echo $warn;
 

.des.

Поставил пиво кому надо ;-)
25 раз обсуждают одно и то же ;)
alpes есть такое замечательное средство как gettext
но если разбираться не хочется.. но далеко от идеи тоже уходить не хочется то решается это просто

_l('mess') и везде где надо ты вставляешь именно так - с помощью функции которая возвращает тебе сообщение на текущем языке :)

удачи :)

З.Ы. тем не менее надо отдать должное Varg variable variables мне в голову не приходили :)
 

Varg

Guest
3V :)

Что я думаю, про gettext ничего сказать не могу, не пользовался. Про три разные файла (ma2dy) есть плюсы, есть минусы. Минус например в том, что перескакивать по файлам редактируя их при удалении некоторых сообщений - не приятно. А у меня всё поблочно и ясно.

Да и скорость нормальная. Хотя у меня около 300 пар + шаблоны и ничего. Может при более большом списке будет проблемы. Не знаю :)
 
Сверху