Вопрос о мультиязычности сайта

Savio

Новичок
Вопрос о мультиязычности сайта

Пирет всем!
Воспользовавшись поиском на форуме почитал и понял, что по теме мультиязычности инфы предостаточно. Каждый хвалит свое болото. Я же пишу свою (чисто для себя) CMS. Возник вопрос локализации. Вижу для своей слудеющие ришения, прошу знающих подсказать лутший из хутших вариант

Попробую все предоставить на примитивном примере

Темплейт вайла
--- index.tpl ---
Привет {USER}!

В index.php использую шаблонизатор от PEAR
... $tpl->setVariable("USER",_USER)...
(не описываю детально, так как суть не в этом)

*) Первый вариант
- Определяю активный язык(храню в сесии), если нету то присваиваю язык по умолчанию (задаеться в конфиге).
- По ходу загрузки страницы каждый модуль и блок имеет свой языковый файл, в котором define(_CONST_NAME,"Value") и т.д. ... (в даном случии define(_USER,"Вася"))
*) Второй вариант
- Определяю активный язык(храню в сесии), если нету то присваиваю язык по умолчанию (задаеться в конфиге).
- Работает с БД (MySql). Создаем две таблици следующей структуры

table language

id, - айдишник языка 1 2
lang, - метка языка en ru
lang_name - название языка English Russian

table data

id - айдишник записи
id_lang - айдишник языка(для опредиления на каком языке дата)
user - значение
...
пример

table data

id 0 1
id_lang 1 2
user Vasja Вася
...

При появлении нового скажем так "объекта" на странице сайта, который нада переводить, просто добавляем field в таблицу

Далее делаем
$q="SELECT * from data where id_lang=".$id_lang;
$res=mysql_query($q);
$row=mysql_fetch_assoc($res)
После чего нужно делать или
$data['user']=$row['user']
...
$tpl->setVariable("USER",$data['user'])
...
или же как в первом способе
_USER=$row['user']
...
$tpl->setVariable("USER",_USER)
...

Подскажите плиз как будет быстрее и более рациональние а то уж запутался совсем







-
 

zerkms

TDD infected
Команда форума
всегда делал и делаю так как ты описал в варианте 2
 

Savio

Новичок
Автор оригинала: zerkms
всегда делал и делаю так как ты описал в варианте 2
zerkms, меня интересует как там быстродействие? то что в базе хранить удобнее, это понятно, но с базы получаеться быстрее читать или все же стоит подключать необхлдимые языковые файлы? и что если проэкт выроститт, и само собой база будет пообъмнее. как это повлияет?
и вообще народ, сколько максимум, или поставлю вопрос иначе, есть ли ограничение максимального количества fields в таблице?
 

SelenIT

IT-лунатик :)
Savio

Прошу уточнения: речь идет о локализации админского интерфейса?
 

Popoff

popoff.donetsk.ua
Определяю активный язык(храню в сесии),
Вы, видимо, не достаточно внимательно читали, что по поводу многоязычности пишут другие.
меня интересует как там быстродействие? то что в базе хранить удобнее, это понятно, но с базы получаеться быстрее читать или все же стоит подключать необхлдимые языковые файлы?
Я для ускорения использую предварительную подгрузку всех необходимых сообщений одним запросом.
и что если проэкт выроститт, и само собой база будет пообъмнее.
Огромная база Вас пугает. А огромные скрипты Вас не пугают?
 

Nest

Новичок
Использую первый вариант для текста на страницах, который не изменяется динамически и 2 для инфы выводимой в контенте, примером реализации этих обоих вариантов является движок ИМ osCommerce, пока проблем небыло
 

Akick

Новичок
Re: Вопрос о мультиязычности сайта

Автор оригинала: Savio
- Определяю активный язык(храню в сесии), если нету то присваиваю язык по умолчанию (задаеться в конфиге).
А вот теперь представьте себе ситуацию, когда, например, испаноязычный человек кидает ссылку на Ваш сайт своему же испаноязычному другу, а по умолчанию у Вас стоит русский язык... Нехорошо получится, имхо...
 

Nest

Новичок
Akick вот, чтоб такого небыло и ставят язык по умолчанию английский.

kpumuk незнаю как у тебе, но мне после GetText все равно приходится подправлять перевод
 

Savio

Новичок
Не пожалел времени и сделал такой маленький эксперимент.

Индекс для всех вариантов описаных ниже один и тот же
PHP:
index.php
<?php
...
include("lang.php");
...
?>
1) Данные храняться в файле
Создал создал следующий файлик локализации
lang.php
PHP:
<?php
define("_CONST_1","tra-ta-ta");
define("_CONST_2","tra-ta-ta");
define("_CONST_3","tra-ta-ta");
define("_CONST_4","tra-ta-ta");
....
define("_CONST_300","tra-ta-ta");
?>
Время затраченое на загрузку в среднем 0.07 секунды
2) Данные храняться в БД
- Создал в БД таблицу proba следующей структуры
id
field_1
field_2
field_3
...
field_300
- записал одну строку в таблицу:
id=1
field_1="tra-ta-ta"
field_2="tra-ta-ta"
field_3="tra-ta-ta"
...
field_300="tra-ta-ta"
- далее переделал lang.php
PHP:
<?php
...
(коннект к базе не описываю)
$query="select * from proba where id=1";
$res=mysql_query($query);
$row=mysql_fetch_assoc($res);

define("_CONST_1",$row["field_1"]);
define("_CONST_2",$row["field_2"]);
define("_CONST_3",$row["field_3"]);
define("_CONST_4",$row["field_4"]);
...
define("_CONST_300",$row["field_300"]);
?>
Время затраченое на загрузку от 0.0077 до 0.01 секунды

Почему так вышло я непонимаю. По моему с базы должно быть дольше, потому что сначала читаем с базы, а потом идет так сказать присвоение значения константе. Но если честно, мне как-то всеравно. В одном и в другом случаи время очень маленькое, что приятно радует. Пробовал эти скрипты как на локалхосте так и на реальном хостинге в инете. Результат тот же.

Еще добавлю что есть один нюанс с БД. Максимальное число field'ов которые мне удалось создать в таблице равно 653. Чё так не знаю...
Читал где-то что вроде define("CONST","Value") работает медлене чем присвоение масиву, но в принцепе это как-то не важно на фоне 0.01 секунды.

Так что для себя решил все хранить в базе. В своей CMS которую пишу чисто для себя, решил создавать таблицу локализации для каждого модуля и блока.
 

Gas

может по одной?
просто добавляем field в таблицу... мне удалось создать в таблице равно 653
не нужно так делать

Определяю активный язык(храню в сесии)
язык должен передаваться в урле

почитай в избранном http://phpclub.ru/talk/showthread.php?s=&threadid=31025&rand=1

в факе статейки на эту темы были, только сейчас он кажется "валяется"
http://phpclub.ru/faq/wakka.php?wakka=Map&v=qvl
 

Akick

Новичок
Автор оригинала: Nest
Akick вот, чтоб такого небыло и ставят язык по умолчанию английский.
И что поменяется? Пользователь должен получить ссылку именно на то место и на тот язык, на который ему ссылка выслана.
 

дымчик

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

WayBe

Новичок
В своё время я эту проблему решил отдельными файлами, в которых сообщения хранились в виде элементов массива. Сейчас по мере необходимости просто добавляю сообщения, а в интерфейсе вставляю строки типа echo $lang[100].
Языковые предпочтения сохраняются в куке (тогда мне это показалось положительным :) ), которые постоянно обновляются, и по ним инклюдится необходимый файл.

-~{}~ 10.03.06 12:46:

Блин, GetText требует установки на сервер. А сервер совсем не всем доступен. Поэтому - не самый лучший вариант...
 

tf

крылья рулят
дымчик не забывай о file_get_content() он вродебы не посылает ничего. или telnet
 
Сверху