Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Многоязыковой сайт - как наиболее эффективно


Автор: Royan 11.7.2006, 02:00
Планируется написать сайт на нескольких языках. Соответственно очень хочется иметь максимально удобный способ вывода строк на нужном языке (на кнопках, в меню и т.д.) просто указывая ее уникальный код. Было бы любопытно узнать о решении проблемы у того кто ее решал (возможно в PHP есть какие-то подводные камни). Строк будет достаточно много поэтому было бы здорово найти способ, который бы не сильно влиял на загрузку сервера.  

Автор: vasac 11.7.2006, 08:31
Вот статья может быть полезной:
http://www.p-stone.ru/libr/internet/prog/php/data/public19/ 

Автор: skyboy 11.7.2006, 09:00
Поделюсь своим решением, может, кто подскажет, как его можно оптимизировать... 
У меня три справочника: страниц, слов и языков(фактически они нужны только для генерации автоинкрементного ключа, но я добавил для удобства поле имени на русском языке: для языков - название языка, для слова - написание на русском, для страниц - краткое описание, чтоб не забыть). А ещё - две таблицы с отношениями многие-ко-многим:
связь слов со страницами(idслова + idстраницы)
перевод слова на разные языки в unicode(idслова + idязыка + написание слова на этом языке)
В начале скрипта я вызываю функцию, которая загружает мне в массив слова по idстраницы и idязыка. Доступ получаю по числовому идентификатору(впрочем, для наглядности можно использовать в качестве ассоциативных ключей то самое написание в русском языке из справочника слов). И в скрипте вывожу: 
Код

echo $words[125];
...
// или 
...
echo $words['Добро пожаловать!'];
 
Возможно, я описал то, что реализовано в getText, упомянутом vasac, но я не плагиатор smile 

Автор: ZlojEzh 12.7.2006, 09:27
хочу предложить еще одно решение, как альтернативу динамическим переводам:
генерирация уже переведенных версий стриптов
очень помогает при большой нагрузке на сервер - убиваются лишние запросы к БД и уменьшается объем используемой памяти
в кратце:
имеется главная версия всех скриптов сайта, в которой все непереведенные фразы записываются в виде:
Код

<trans page='_razdel_slovarja_'>русская фраза</trans>

имеется также скрипт, который собственно и переводит все эти скрипты на нужные языки
достоинства подхода:
- меньше запросов к БД при выводе страниц пользователю
- легче вводить различия междй версиями сайта на разных языках (я, например, использую теги <lng=ru>...</lng> или <lng!=de>...</lng>)
- если UTF не подходит - легче реализовать различные кодировки для разных языков, не приходится ничего перекодировать налету
недостатки:
- не слишком удобно при передаче id'шника языка через GET - призодится во всех скриптах инклудить переведенную версию
 

Автор: shurale 2.9.2006, 18:47
У меня сделано почти так, как описал skyboy
Есть директория для языковых файлов, есть файл на каждый язык, в котором находится массив с фразами, вверху каждой страницы инклюдится функция на проверку куки и сессии, в куку и сессию соответственно заносится  язык (ru,en,de,.....)

При выборе языка (достаточно один раз выбрать язык - index.php?lang=en ) , автоматом записывается кука и сессия. Все, теперь пользователь всегда будет видеть на нужном ему языке, и не нужно указывать переменную в строке броузера, что приятно пользователю.  smile 

Автор: skyboy 2.9.2006, 22:59
Цитата(shurale @  2.9.2006,  17:47 Найти цитируемый пост)
и не нужно указывать переменную в строке броузера, что приятно пользователю

... ради чего, собственно, сессии и задумывались... smile

Автор: ZlojEzh 4.9.2006, 09:37
Цитата(shurale @  2.9.2006,  18:47 Найти цитируемый пост)
и не нужно указывать переменную в строке броузера, что приятно пользователю

и совсем не приятно поисковому роботу
при таком подходе проиндексируется только одна версия сайта

Автор: ewolf 4.9.2006, 18:25
Не совсем согласен. Так как на сайте будут ссылки на все языковые версии, то поисковик посетит их все. Конечно, при этом не будет возможности использовать для хранения сессий информацию из cookies, но php спокойно работает, передавая параметры через url

Автор: ZlojEzh 4.9.2006, 21:37
в принципе согласен...
НО, http://www.google.com/support/webmasters/bin/answer.py?answer=35769#quality
конкретно - раздел Technical guidelines, пункт 2

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)