Нужен совет php/mysql
#1
Отправлено 04 декабря 2007 - 15:58
То ли хранить переменную в сессии и кукисах, но там свои отдельные проблемы, то ли таскать язык в сылке, но надо учитывать много ньюансов.
С помощью темплатов не хочу, так как проектик не такой уж большой.
Думаю проще по ссылкам тегать, типа - линк.сom/ее/indeх.html
Второй вопрос, как лучше организовать бд. Делать, например, 2 таблицы "novosti_ee" i "novosti_ru", или просто раздваивать поля в 1 таблице типа title_ee, title_ru?
#5
Отправлено 04 декабря 2007 - 17:42
Лучше всего таскать язык в ссылке, это хорошо как для пользователя, так и для поисковиков (ссылки вида www.site.ee/est/page.html) таскать язык в параметрах (page.html?lang=est) - идиотизм, себе дороже.Вообшем хочу попросить совета, как лучше делать многоязычный сайт, каким способом?
То ли хранить переменную в сессии и кукисах, но там свои отдельные проблемы, то ли таскать язык в сылке, но надо учитывать много ньюансов.
С помощью темплатов не хочу, так как проектик не такой уж большой.
Думаю проще по ссылкам тегать, типа - линк.сom/ее/indeх.html
Второй вопрос, как лучше организовать бд. Делать, например, 2 таблицы "novosti_ee" i "novosti_ru", или просто раздваивать поля в 1 таблице типа title_ee, title_ru?
Для новостей сделай одну таблицу и добавь в неё индексируемое поле lang и в запросах просто пиши (where `lang` = 'est') отдельные компоненты страниц (отдельные фразы) желательно хранить в файлах. Например, est_lang.ini (parse_ini_file) или est_lang.php с массивом внутри. Вариантов множество. Не советую юзать константы, они достаточно тормозные. Просто там где надо что-то вставить, вызываешь например, ф-цию __( 'VAR_NAME' ); - это стиль gettext P.S. Ф-цию эту надо написать самому. Но лучше обзови её по-человечески.
#7
Отправлено 05 декабря 2007 - 09:31
Лучше всего таскать язык в ссылке, это хорошо как для пользователя, так и для поисковиков (ссылки вида www.site.ee/est/page.html) таскать язык в параметрах (page.html?lang=est) - идиотизм, себе дороже.
Для новостей сделай одну таблицу и добавь в неё индексируемое поле lang и в запросах просто пиши (where `lang` = 'est') отдельные компоненты страниц (отдельные фразы) желательно хранить в файлах. Например, est_lang.ini (parse_ini_file) или est_lang.php с массивом внутри. Вариантов множество. Не советую юзать константы, они достаточно тормозные. Просто там где надо что-то вставить, вызываешь например, ф-цию __( 'VAR_NAME' ); - это стиль gettext P.S. Ф-цию эту надо написать самому. Но лучше обзови её по-человечески.
Так и сделал с самого начала )
Но вот возникает проблема, когда.. допустим у пользователя должна быть страница на 2 языках, тоесть если смотришь страницу на эстонском - видишь ту инфу которую он писал на эстонском, ну и соответственно на русском видишь русскую инфу. Получается, что полем ланг тут не отделаешься, да и две записи ка с новостями не сделаешь тоже, ибо это уже будет считаться как 2 разных пользователя.
#8
Отправлено 05 декабря 2007 - 10:04
В таком случае, как вариант - можно убрать язык из ссылки... Или отказаться от идеологии "правильных ссылок" и вывести страницу на 2х языках (в UTF8) по тем же УРЛ (www.site.ee/est/page.html). Главное - не наломать дров, особенно, если у тебя таких страниц всего пару штук. Адаптировать под это всю систему бессмысленно. В любом случае пользователь выбирает тот язык, на котором хочет просматривать сайт и в течении сессии тебе не нужно потерять его выбор Так что мультиязычная страница - это не проблема. Особенно, если основной каркас сайта будет на выбранном пользователем языке, а сам контент на разных языках...Так и сделал с самого начала )
Но вот возникает проблема, когда.. допустим у пользователя должна быть страница на 2 языках, тоесть если смотришь страницу на эстонском - видишь ту инфу которую он писал на эстонском, ну и соответственно на русском видишь русскую инфу. Получается, что полем ланг тут не отделаешься, да и две записи ка с новостями не сделаешь тоже, ибо это уже будет считаться как 2 разных пользователя.
#11
Отправлено 05 декабря 2007 - 15:08
Да нет, обычная таблица news_id, language, news_text просто для каждой новости в этой таблице будешь язык указывать.Ок, остановлюсь всетаки на таскании языка в ссылке
Но вот в последнем посте я имел ввиду как быть с бд? Получается всетаки надо таблицу делать с полями инфо_ее инфо_ру и т.п?
Ну, я привёл массив тоже, как вариант. Ини просто удобно редактировать, на вкус и цвет... Я использую ini, а кешировать их можно в массивах. У меня шаблонизатор языковые переменные кеширует уже в шаблонах статически, так что они по-сути нужны только перед компиляцией шаблона, но и динамически тоже используются в скриптах. Мне удобней редактировать ини, чем массив. Некоторые маньяки в XML хранят, вот в их пользу мне сложно что-то сказать, только если использовать X-Path...Setor, а почему именно ini? чем массив плох?
#13
Отправлено 05 декабря 2007 - 15:37
1) users: users_id, login, password....
2) users_lang: users_id, language, lang_info1, lang_info2
Правда, таблица пользователей не очень подходит под это, не представляю что там могут быть за мультиязычные данные?)
Потом только джойниш таблицу с переводом... Но тогда надо следить, чтобы данные на нужном тебе языке оказались в таблице Иначе надо лефт жойном джойнить таблицу переводов и использовать группировку group by
#15
Отправлено 05 декабря 2007 - 16:16
LEFT JOIN безоговорочно вернёт все столбцы 1й таблицы и попробует подставить к ним столбцы из 2й, если каких-то соответствий не будет, значения этих столбцов будут равны NULL
P.S. чтобы избежать дублирования записей , например, будет на странице две записи о матти на русском и эст. языке, надо юзать GROUP BY users.user_id но это зависит от запроса)
#16
Отправлено 05 декабря 2007 - 16:35
Если у нас есть пользователь матти, открываем страницу на эстонском языке и нам нужна инфа только на эстонском, выполняется запрос SELECT * FROM users, users_lang WHERE users.id = users_lang.id AND users_lang = 'ee' LIMIT 1. Вроде как правильно.
#17
Отправлено 05 декабря 2007 - 16:47
Я приводил пример для выборки полного списка юзеров вне зависимости от того, есть для них запись на нужном языке или нету. А ты уж сам реши, что тебе надо
#22
Отправлено 09 декабря 2007 - 18:31
для поисковиков лучше сделать вообще mod_rewrite.Лучше всего таскать язык в ссылке, это хорошо как для пользователя, так и для поисковиков (ссылки вида www.site.ee/est/page.html) таскать язык в параметрах (page.html?lang=est) - идиотизм, себе дороже.
Опять таки, дело вкуса.. я бы вообще пихал в сессию все.
#23
Отправлено 10 декабря 2007 - 17:05
Тут есть вероятность, что у потенциального посетителя отключены куки (поисковый робот) и тогда он не сможет проиндексировать нормально сайт, а человек не сможет переключить язык Но людей с отключенными куками мало, а вот поисковики - да. Если таскать идентификатор сессии в URL (trans_sid), то ссылки получаются ужасными...для поисковиков лучше сделать вообще mod_rewrite.
Опять таки, дело вкуса.. я бы вообще пихал в сессию все.