Мультиязычные сайты
Разрабатываю сайт, в структуру которого хотел бы заложить уклон на многоязычность. Под многоязычностью я понимаю количество языков 5 и более.
Проблематика вопроса: казалось бы, что здесь сложного, для каждого языка в каждой таблице содержащей контент создаем отдельное поле, например поля: ru, en, uk... и т.д. В итоге таблица разрастется очень стремительно в объеме при заполнении. А следовательно запросы к ней будут выполняться всё медленнее и медленнее. Исходя из своего опыта: уже набрав 1Гб данных в таблице, SELECT запросы не содержащие PRIMARY KEY будут выполняться неприлично долго. Также вариант с большим количеством полей у таблицы весьма неудобен при работе с БД. Выход из ситуации вижу такой: 1. создаем дополнительную таблицу вариант 1Примечание: у "профи" хотел бы узнать какой вариант оптимальнее? 2. Правка текущих таблиц В таблицах сайта где был контент за место текста проставляем значения из поля "id" из таблицы описанной в пункте 1. И следовательно поле в таблице заменяется на тип INT.3. Правка скриптов сайта во всех местах, где у нас раньше предполагался вывод контента, сделать вывод что-то вроде "[lang12345]", где 1234 - id из таблицы языка.4. Работа на уровне шаблонов Правим скрипт smarty(конечно если он используется на сайте), и регуляркой выцепляем все lang идентификаторы из страницы, и делаем запрос вида:Здесь я изложил основную суть идеи. Прошу, кидайте камни, если в идее есть изъяны. В любом случае спасибо что прочитали данный пост. |
я бы сделал так :
Чтобы различать языки, необходимо создать таблицу(-ы), в которой для каждого ID([lang12345]) будет храниться значение языка(ru,en), которому соответствует фраза, и сама фраза. примерная структура таблицы. с типами уже разобрались. Код:
|ID | фраза | язык| я предлагаю с помозью скрипта проверять, поддерживает ли текущий браузер Cookies Если же браузер - старый осёл с выключенными куками, то придётся использовать базу. При желании можно использовать хранилище Flash Приоритет использования такой : Цитата:
конечно, должна быть ещё одна таблица. Перед обсуждением её структуры необходимо знать, как идентифицировать пользователя, если у него нет кук. это домашнее задание. Но как МНЕ кажется, это можно делать через IP и юзерагента. В таблице будет чуть колонок. у меня кончается фантазия Код:
| IP | lang | ______________ это насчёт сервака. а чо делать с модальными окнами на сайте, сособенно, если они создаются динамически ? В модальных окнах ставить тайтл такого вида modal({ title : *!*lang[ 123 ]*/!* }); то бишь, тайтл выбирается из объекта lang а вот БД для скрипта %) lang = { "123" : "Hello, user" } Теперь надо определиться, какой файл где брать. пусть в папке будет лежать 2 файла - lang-ru.js и lang-en.js в зависимости от запомненного языка будет загружаться или ru, или en. если текст внутри модалей делается так, то беспокоиться о том, "чо там, прогрузилось или нет" не надо - каждый файл языка заменит свойства у объекта на свои. как запоминать ? Так как мы решили не использовать хранилище , потому что значение языка в хранилище надо передать php скрипту, а это - запрос, а это - время., то используем "продуманную" схему про куки и БД, описанную выше. т.е. если есть кука - используем куку, иначе - бд. Если эже ни там, ни там нету - используем язык по умолчанию. ___________________ насчёт запоминания. При клике на кнопку "поменять язык" скрипт будет устанавливать значение в куке ( то бишь одновременно запоминает для себя и для php )и перезагружать страницу ( то бишь применять изменения. перезагрузка страницы нужна для локализации через php. можно в принципе только часть страницы перезагрузить. ) |
melky,
Спасибо за подробное описание процесса запоминания языка. Я примерно так и думал реализовать. А относительно lang-ru.js и lang-en.js, я что-то и не догадался о подобной реализации, одним словом спасибо. Если у кого-то есть какие-то замечания относительно данной реализации, то просьба - пишите. |
Часовой пояс GMT +3, время: 23:50. |