| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > многоязычность на сайте |
| Автор: DimaSiK 2.6.2007, 18:59 |
| Подскажите, как правильно проектировать сайт, который будет представлен сети на нескольких языках?, какие существуют нюансы, где хранить все языковую информацию сайта, как быстро подключатьб требуемый язык. |
| Автор: rMaveric 2.6.2007, 19:17 |
| Как организовать структуру - твои личные проблемы. Как хочешь так и хранишь всю информацию. Если в БД, то можешь просто добавить поле язык и при выборке требуемых данных использовать именно его. Если хранишь инфу в файле, то самый простой способ - папка с кодом языка в тимплейтах и контенте. Нюанс в принципе только один, как предложить пользователю использовать Язык. Я лично предпочитаю следующий алгоритм 1. Если у человека установлены предпочтения, то выставить язык согласно предпочтениям 2. Если у человека предпочтений нет, то посмотреть с какой он страны и выбрать наиболее подходящий для этой страны. 3. Если такого языка нет в качестве поддерживаемых сайтом, то ставим дефаултный (желательно английский или в некоторых случаях французский) 4. Не забыть в дизайне предусмотреть механизм смены языка. Это для первого захода. А для последующих проще. Отображать человеку на том языке, на котором он смотрел, когда заходил последний раз. Еще ньюанс. Если хочешь делать хорошо, то ссылки у тебя должны быть все с указанием языка. Так например, когда человек заходит на индексную страницу например http://domain.com/, то скрипт определяет язык и сразу перенаправляет раздел этого языка, например http://domain.com/ru/ Это делается для того, чтобы поисковые системы видели нормально твой сайт на разных языках, а не путались, что сегодня им на этом адресе показали русский текст, на через неделю немецкий. Также такая схема позваолит делать линки людям с цитатами, т.к. они будут указывать у себя прямую ссылку с указанием языка всегда и не будет путаницы. Ну а технически, повторюсь, делай как тебе нравится. |
| Автор: DimaSiK 2.6.2007, 20:02 | ||||
У меня намечается максимум три языка - рус,укр и eng. Предложение очень хорошее насчет автоматического выбора языка, сразу же заинтересовало. Определение откуда человек приходит делается с помощью geoip?
Всетаки хотелось узнать как правильно и как легче будет организовать многоязычность, высмысле легче для последующих и нежелательных изменений в структуре сайта. |
| Автор: Golda 2.6.2007, 20:45 |
| rMaveric, добавлю к Вашему алгоритму еще один пункт. Кроме geoip, возможно, перед ним, можно использовать приоритеты броузера (Accept-Language header)). Спасибо за мысли о удобствах/неудобствах автоматического определения языка для поисковиков. Не думала об этом. DimaSiK, вопрос организации многоязыкового сайта - это во многом, вопрос выбора шаблонов. Возможно, Вам будет интересно взглянуть на недавний опрос http://forum.vingrad.ru/forum/topic-153482.html. Я предпочитаю вариант XML/XSL, при котором одному XSL-темплейту соответствуют несколько XML, отличающиеся языками. А подводные камни при работе с языками - как всегда - кодировки. Меньше проблем, если работать с UTF-8. |
| Автор: Golda 2.6.2007, 22:09 | ||
А ok, я думала, Вы имели ввиду какой-то вариант профиля пользовтеля, где он сам может указать свои предпочтения явно |
| Автор: DimaSiK 6.6.2007, 22:12 |
| Страница ведь имеет два вида контента: контент - наполняющая сайт информация и контент - имена конпок, ссылки и так далее. Каким образом мне их разграничить по языкам?, стоит ли допустим все что касается кнопок, ссылок храняить как описание в xml файлах, допустим rus_xml, eng_xml, а данные распределить в БД учитывая языки? |
| Автор: Golda 6.6.2007, 22:46 |
| Если контент предполагается обширный, будет быстро добваляться, статьи относительно независимы, важна возможность поиска... Вам к базам данных, и тот вариант, что Вы предложили, вполне нормален. Но продумайте, что именно будет единицами хранения в ячейках базы, как отделить контент от его оформления. Если важнее возможность добавления/редактирования страниц непрофессионалами, разделение труда между контенщиками и web-мастерами, страниц относительно немного, но они требуют принципиально разного оформления, выбирайте файловую систему и, как посоветовал rMaveric, лучше разделите контент по языковым папкам. |
| Автор: DimaSiK 6.6.2007, 23:46 |
| Вот какое решение я надумал: Значит существует директория language, в ней соответственно /eng /rus, в данных директориях лежат xml файлы описывающие все кнопки, ссылки, одним словом весь функционал. Причем каждый файл описывает одну страницу - main_eng.xml описывает main.php и так далее. БД реализована так же для поддержки языков. При первом заходе на main.php выбирается язык по умолчанию, например rus, далее топаем в нужную языковую директорию и загружаем нужный xml с помощью DOM - main_rus.xml. После этого выбираем нужные языковые данные из ДБ и выставляем их в структуру загруженного xml. Последний этам это уже наложение XSLT на XML и отдача страницы в браузер. Помоему все получается все очень даже хорошо. Для добовления нового языка и новой страницы нужно добавить языковую директорию и xml файл, описывающий функционал страницы, а далее все описано выше. Скажите минусы моей затеи? |
| Автор: Daevaorn 7.6.2007, 01:03 |
| А в библиотеке php есть gettext? Если, есть то многие проблемы интернационализации пропадают. |
| Автор: DimaSiK 7.6.2007, 07:45 |
| Нет, gettext не хочу пробовать! |
| Автор: rMaveric 7.6.2007, 07:56 |
| 1. Медленно 2. Для каждой страницы грузить отдельный файл необосновано слишком много повторений будет |
| Автор: Golda 7.6.2007, 08:37 |
| DimaSiK, не очень поняла, зачем база данных, если для каждой страницы и так предполагается отдельный XML. Почему бы в нем же не хранить, кроме текстов элементов оформления, еще и сам контент? Я бы отделяла оформление от контента секциями в одном XML. Зачем морочить себе голову, поддерживая дополнительно еще и базу и замедляя формирование страниц (ведь при таком подходе нужно еще потратить время на формирования XML), уменьшая надежность (база данных - дополнительный элемент, за рабочим состоянием которого нужно следить), а возможно, и добавляя проблем с безопасностью. Впрочем, возможно, для Вас из каких-то соображений важно мпксимальное разделение контента и оформления. Например, важны возможности поиска, предоставляемые базой, изменением контента и оформления занимаются разные люди, часть страниц на самом деле задает не единственный варинт страницы, а целый класс, где содержимое меняется, а оформление остается... В общем, без анализа Вашей конкретной задачи правильность решения оценить нельзя. Но если принять за аксиому, что база данных нужна, описание звучит неплохо. Но сответую еще добавить какой-нибудь общий XML для каждого языка, чтобы не дублировать общие элементы оформления (текст копирайта, title илм его общая часть, текст пунктов меню... что-нибудь найдется). Также для системы в целом может понадобиться разделяемый XML для общих настроек (URL пунктов меню, непереводимые элементы оформления...) В принципе есть выбор, общие настройки можно хранить и в php-файле конфигурации, и в базе данных. Но на мой взгляд, настройкам, связанным с UI самое место в XML. (Прочитала сообщение rMaveric). 1. Проблемы со скоростью можно решать кешированием на стороне сервера 2. Да, для XSL тоже часто получаются общие подключаемые файлы с темплейтами, а иногда имеет смысл создать дефолтовый XSL для самого распространенного варианта страниц |
| Автор: DimaSiK 7.6.2007, 09:18 |
| 2Golda Представь, если у меня будет хотя бы 100 новосетй, как думаешь лучше их хранить в БД или же в xml файлах, хотя бы если организовывать поиск по новостям? Так как контентное наполнение будет довольно таки большим, я и решил, что лучше его хранить в БД, тем более оно будет на разных языках, не создавать же мне десятки xml файлов для этого, а потом смотреть где что находиться, выйдет путаница и в связи с количесвом даннм разростуться xml файлы. |
| Автор: Golda 9.6.2007, 19:09 |
| Согласна, лучше в базе. Соответсвенно xml и xsl-файлы должны определяться типом страницы (для каждой новости отдельный xml и xsl не нужен). |
| Автор: DimaSiK 9.6.2007, 21:19 | ||
Конечно не нужен, отдельный xml и xsl нужен только для основных сраниц(новостей, главной и так далее). Я так понимаю мой вариант не плохой и одобряется? |
| Автор: Golda 9.6.2007, 22:11 |
| Думаю, да. Если возникнут проблемы со скоростью, реализуйте средствами php кеширование на стороне сервера. Средствами php - чтобы сервер не запутался в случаях, когда на один и тот же запрос нужно выдавать разные страницы (страницы на разных языках). Но это я забегаю вперед. Проблемы надо решать по мере их поступления |