Как лучше организовать мультиязычность?

Главные вкладки

Аватар пользователя Spider84@drupal.org Spider84@drupal.org 5 июня 2009 в 5:59

Есть сайт на русском языке работающий на друпале с самописной темой. Понадобидось добавить небольшой англоязычный раздел (пара страничек). Проблема в том что кроме статей там будет еще конечно и англоязычное меню и остальные элементы страницы будут на английском. Модуль перевода вроде не подходит - структура англоязычного раздела не соответствует остальному сайту? Как лучше поступить? Заранее спасибо!

Комментарии

Аватар пользователя kodo kodo 5 июня 2009 в 6:54

Так в чем тут сложность. Самый простой вариант многоязычного сайта
1. Добавляете отдельно меню для каждого языка (не перевод, отдельное меню стабильнее и проще)
2. При создании контента указываете язык и связываете с пунктом меню
3. Если необходимо, дорабатываете View с ограничением по текущему языку.
4. Видимость блоков так же можно сделать для каждого языка

Аватар пользователя Geldora Geldora 5 июня 2009 в 9:34

"kodo" wrote:
4. Видимость блоков так же можно сделать для каждого языка

Я сейчас планирую мультиязычный сайт с переходом на 6ку - эта функция есть в ядре? Или доп модуль надо ставить? Если да, то какой?

Аватар пользователя Bios Bios 5 июня 2009 в 9:49

Ставите модуль i18n...
Потом для каждого меню выбираете свой язык... У меня таким образом реализовано 3 языка на сайте...

Определяете язык /admin/settings/language русский - дефолтный
/admin/settings/language/configure - выбираете префикс в пути
/admin/settings/language/i18n - выбираете Current language and language neutral

В i18n у меня включены модули:
Block translation
Content type translation
Internationalization
String translation

Итого получаем:
При создании ноды указываем ее язык... Если ставим нейтральный язык то видим ноду на всех языках... Для каждого меню /admin/build/block тут ставите свой язык...

В итоге получаете счастье... (переводами нод не пользуюсь, на то есть глючные причины)
Переводами терминов таксономии не заморачивался так как не было необходимости...

Аватар пользователя kodo kodo 5 июня 2009 в 10:39

"Geldora" wrote:
Я сейчас планирую мультиязычный сайт с переходом на 6ку - эта функция есть в ядре? Или доп модуль надо ставить? Если да, то какой?

Да есть в ядре, то же принцип в блоке, что и для ноды. Выбираешь язык и виден только если данный язык активен. Как пример, блок адресов и телефонов фирмы под каждый язык.

Аватар пользователя glu2006 glu2006 5 июня 2009 в 16:05

<a href="mailto:Spider84@drupal.org">Spider84@drupal.org</a> wrote:
kodo спасибо! А не подскажете что делать с теми надписями которые забиты непосредственно в шаблоне темы?

Писать их на английском и заворачивать в функцию t() потом в админке переводить, а вообще в шаблон темы писать стационарные надписи без функции t() большой грех. Smile

Аватар пользователя glu2006 glu2006 6 июня 2009 в 11:09

<a href="mailto:shamaner@drupal.org">shamaner@drupal.org</a> wrote:
"glu2006" wrote:
большой грех. :)

да ну. if ($language=="ru"){ echo 'тыдых';} else {echo 'ololo'}
и че отсюда имеем? ага - два запроса к бд. я не прав?

Если подходить к этому с позиции количества запросов в БД то тогда вообще какой смысл делать мультиязычный сайт на одном двигуне и с одной базой? Зачем вообще тогда разработчики придумали этот модуль locale??

Аватар пользователя kodo kodo 5 июня 2009 в 20:21

Тут же вопрос не только в количестве запросов к БД, но и едином стиле, проблемах последующего сопровождения и т.д.
Так что как говирил все через t()

Аватар пользователя Dark_kz Dark_kz 6 июня 2009 в 11:39

"<a href="mailto:shamaner@drupal.org">shamaner@drupal.org</a>" wrote:
да ну. if ($language=="ru"){ echo 'тыдых';} else {echo 'ololo'}
и че отсюда имеем? ага - два запроса к бд. я не прав?

if ($language->language=="ru) { echo "русиш"; } ...
если текста много, и он в разных местах, лучше через switch одним запросом определить нужный текст в переменных.

По сабжу: делал мультиязычные сайты (3, 5 языков). Ответы на форуме есть Smile
Проблемы у меня возникали с урлами меню. Хотелось site_name/ru/contacts и site_name/en/contacts. В меню эта конструкция почему-то держалась очень недолго. Определил primary_links в блоке, а не через темизацию theme('links', ... ) в шаблоне и переключения прекрасно работают.

Удачи!

Аватар пользователя volocuga volocuga 6 июня 2009 в 12:15

Кто нибудь знает,как побороть проблему с коментами? Если включена многоязычность,мы имеем в сущности несколько нод-по одной на перевод.Следовательно,если я комментирую одну ноду,находясь,скажем на русском переводе,то комментарии будут относится ТОЛЬКО к русской ноде.Если человек заходит,скажем,с украинского перевода,ему показано,что комментарием ВООБЩЕ нет,хотя они есть в русском варианте ноды.Проблема!

Как валить каменты в кучу со всех вариантов перевода?

Аватар пользователя glu2006 glu2006 6 июня 2009 в 13:33

volocuga wrote:
Кто нибудь знает,как побороть проблему с коментами? Если включена многоязычность,мы имеем в сущности несколько нод-по одной на перевод.Следовательно,если я комментирую одну ноду,находясь,скажем на русском переводе,то комментарии будут относится ТОЛЬКО к русской ноде.Если человек заходит,скажем,с украинского перевода,ему показано,что комментарием ВООБЩЕ нет,хотя они есть в русском варианте ноды.Проблема!

Как валить каменты в кучу со всех вариантов перевода?

Между одинаковыми нодами на разных языках есть связь воспользуйтесь ей создания собственного SQL запроса который выгребет комменты для русской и украинской ноды и на экран их Smile

Аватар пользователя kodo kodo 6 июня 2009 в 18:16

"Dark_kz" wrote:
Проблемы у меня возникали с урлами меню. Хотелось site_name/ru/contacts и site_name/en/contacts. В меню эта конструкция почему-то держалась очень недолго.

Таже проблема была. Просто указал primary_links для каждого языка. Даже переводом не мучался. А вначале все пытался через перевод...

Аватар пользователя kodo kodo 6 июня 2009 в 19:27

"Dark_kz" wrote:
Зачем плодить primary_links'ы? лучше вставить один через блок

Это не подойдет в том случае если меню не полностью синхронны. Вводить видимость пункта меню для одного из языков, так же не вариант если ссылка идет на что-нибудь интернациональное (типа блога).

Аватар пользователя alexandr.poddubsky alexandr.poddubsky 9 июня 2009 в 16:43

"glu2006" wrote:
Если подходить к этому с позиции количества запросов в БД то тогда вообще какой смысл делать мультиязычный сайт на одном двигуне и с одной базой? Зачем вообще тогда разработчики придумали этот модуль locale??

если не подходить к позиции со словом производительность то никаких серваков не хватит.