Мультиязычность и производительность.

12
T
На сайте с 04.10.2005
Offline
63
1364

Здравствуйте!

Очень интересует, как лучше сделать несколько версий сайт. (английская, французская, русская...)

Возник вопрос по производительности, что лучше делать создавать страницу, а потом весь код сайта облачить в ob_start, затем в переменную и в конце использовать str_raplace($lang[%], $lang['ru'], $site); по базе типа:

$lang['%'][] = '%slovo1%';

$lang['ru'] = 'слово1';

$lang['en'] = 'word1';

$lang['%'][] = '%slovo1%';

$lang['ru'] = 'слово1';

$lang['en'] = 'word1';

а в самом документе просто например писать так %privetstvie%, %opisanie%

ИЛИ лучше сделать функцию, типа

function lang($s) {

globals $multi;

$r['slovo1']['ru'] = 'slovo1';

$r['slovo1']['en'] = 'slovo1';

$r['slovo2']['ru'] = 'slovo2';

$r['slovo2']['en'] = 'slovo2';

return $r[$s][$multi];

}

и вызывать функцию в самом php документе, echo $lang('slovo1');

насчёт выигрышности, str_replace возможно выигрывает, ну можно в конце ещё потом пробелы лишние удалить, табы и другой мусор, который только для удобства программиста, так же мне удобнее это так как использую memcache. А вот насчёт производительности, это ведь получает функция будет оббегать весь документ при каждом запросе пользователя.

Очень волнует вопрос производительности, прошу помочь.

Сайт посещают около 40-50тыс хостов/день.

L
На сайте с 12.11.2009
Offline
79
#1

Сделайте шаблонизатор и кеширование.

А так, устройте замеры с str_replace и без, и сравните результаты.

T
На сайте с 04.10.2005
Offline
63
#2

Шаблонизатор считаю не нужным.

Для кеширования использую memcache.

Насчёт замеров понятно, т.е. ответа конкретно сразу здесь не известно?

rtyug
На сайте с 13.05.2009
Offline
263
#3

я придумал такой вариант:

если этих значений $word[34] = 'вперёд'; будет порядка 2000 и текст будет занимать порядка 2-10Мб то это будет не красиво??

можно сделать, например, для каждой страниц файлы (всего страниц 30-50)

show.tpl.php



....

$show_tpl[34] = 'вперёд';

....

скриптом обновлять...

cделать таблицу с id и data

этот массив сериализировать в json и поставить в data с id который соответсвует show.tpl

а запрос минималистический будет

select data from lang where id=22

десериализируем с json в php



$array = json_decode($from_db_json);

php не будет тратить лишние ресурсы постоянно на инициализацию этого массива (если он не маленький), а будет все время очень быстро десериализовать

1) $array в smatry отправляется

2) или $from_db_json прямо на станицу в js и там распарсить

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
T
На сайте с 04.10.2005
Offline
63
#4

Я не использую шаблонизатор.

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

Тематика сайта музыка, поэтому много чего-то там переводить не нужно, а вот комментарии или биографии, они будут уже доставаться из базы с пометкой для определенного языка.

[Удален]
#5

Что значит будет оббегать весь документ? Вы фигачите всё в буфер и потом находите подстроку и меняете ее? :) Ну это бред полный. Сами же сказали, что у вас только меню и прочие элементы будут переведены.


$lang = 'en';
$messages = array('en'=>array('INTRO'=>'Hi there'),'ru'=>array('INTRO'=>'Как дила?'))
echo $message[$lang]['INTRO']

Если у вас целиком сайт многоязычный, тогда вот вам:

http://www.debian.org/doc/manuals/intro-i18n/

http://en.wikipedia.org/wiki/Internationalization_and_localization

http://www.gnu.org/software/gettext/

http://php.net/manual/en/book.gettext.php

:-D

T
На сайте с 04.10.2005
Offline
63
#6

Только вот этих переменных ведь будет многовато, как минимум сотня, вот мне и интересно, что будет лучше, заносить всю страницу в буфер а потом str_replace или переменными доставать, там где это необходимо.

RO
На сайте с 13.07.2009
Offline
88
#7

я делаю так:

3 файла с названиями ru.php en.php ua.php в каждом файле массив вида

$_LANG=array(

'title'=>'ololo',

'text'=>'ololo'

);

далее в зависимости от языка который в сессии тащится

include 'ololo/'.$_SESSION['lang'].'.php';

дальше echo $_LANG['title']

[Удален]
#8
Tizzor:
Только вот этих переменных ведь будет многовато, как минимум сотня, вот мне и интересно, что будет лучше, заносить всю страницу в буфер а потом str_replace или переменными доставать, там где это необходимо.

А там где это не необходимо, вы будете специальную разметку делать мол это слово не пререводим? :) Пример:

"На этом сайте находится информация о новых автомобилях".

У вас есть на сайте в конфиге переводов $['lang']['en']['информация'] = 'information';

Что вы получите после str_replace?

"На этом сайте находится information о новых автомобилях".

А изначально предполагалось, что будет переводиться только пункт меню "Информация".

Юрать из буфера и прогонять через str_replace - очень криво. Хотите перевести меню и прочией "стандартные" вещи на вашем сайте - используйте описанный мной способ. Хотите полную англо-франко-русскоязычную версию - переводите каждый декст, смотрите в зависимости от страны/сессионной куки какой язык используется и отдавайте пользователю текст.

firefox19
На сайте с 05.11.2009
Offline
34
#9

а не проще и эту инфу загнать в БД? И из нее уже дергать нужный язык и подставлять.

К примеру создать таблицы:

en_text

ru_text

ua_text

и вписать туда всё... да хоть через "|". Потом наряду со всей информацией дергать текст из БД, дробить через explode и подставлять просто нужный элемент массива.

Перечитал, в общем похоже на решение ТС, только не на файлах

Ваши идеи - наша работа (http://yaweb.ru) Продам Сайт агентства недвижимости (/ru/forum/561489)
rtyug
На сайте с 13.05.2009
Offline
263
#10

если сайт большой, и если текст на сайте занимает окло 10М + еще англйиский 10М всего 20М

хранит это в памяти, разве красиво? (судя по пописанию темы автором "производительность")

можно поставить в таблицу каждую страниц...

ну и можно в виде json поставить

отправлять этот json (структуру(ы)) на клиент и там на js распарсить, чтобы не тратить ресурсы щаблонизатора или php скрипта (если без шалонизатора) ...

или еще можно memchache

но это дело творчества, и если действительно ресурсы занимает и если сайт большой

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий