Локализация нод

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

Аватар пользователя PC_M@niac PC_M@niac 13 сентября 2006 в 12:46

Есть:
1. Нода node/23 - русская
2. Нода node/24 - английский перевод 23-й

Находясь по адресу /ru/node/23 имеем две ссылки:
1. В блоке "Языки" ссылку на /en/node/23 - переключает интерфейс на инглиш но оставляет показ русской ноды
2. Под нодой ссылка на /ru/node/24 - показывает английскую ноду на русском междумордии

Нужно:
В блоке "Языки" иметь ссылку на /en/node/24

Интуитивно я догадываюсь как, но хотелось-бы уточнить Smile

Фактически реализовывается таким-вот образом:
1. Если текущий URI указывает на ноду определённого типа (из заданного списка, например: story, blog, page, book)
2. Если у текущей ноды есть перевод на соответствующий язык
3. Заменить в блоке "Языки" ссылку на ту, которая переключит и междумордие и перевод контента.

В идеале хочется чтобы при заходе на /en/node/23 показывался английский перевод с английским междумордием а на /ru/node/24 - русский с русским. Т.е. чтобы содержание ноды подменялось её переводом если таковой имеется под текущий язык.

Для чего нужен идеальный вариант:
1. Создаём алиас soft для node/23 и при заходе на ru/soft видим контент node/23 на русском междумордии
2. Создаём перевод 23-й ноды node/24 но алиас ему задать не получается ибо ужо занят и при заходе на en/soft видим всё ту-же node/23 но с английским интерфейсом, что не есть гуд.

Фактически нужно шарить алиасы между переводами и переключать контент вместе с междумордием одним кликом, а не двумя.

Подскажите где копать Smile

Комментарии

Аватар пользователя B.X B.X 15 сентября 2006 в 16:01

мало у кого имеются двуязычные сайты... наверное поэтому и интерес невелик...
а какой модуль используется для двух языков?

Аватар пользователя Shedko Shedko 15 сентября 2006 в 17:55

Не очень долго мучался с таки, так как понял что создам себе еще больше проблем, смотрел модуль i18 - не понравилось

Потом просто у домена русского softq.org сделал английский поддомен eng.softq.org

Что это дало:

- просто, не надо мучаться с указанной проблемой

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

- человек когда за ходит а сайт видит именно нужный ему язык, вверху сделал просто 2 флага, для выбора языка.

Аватар пользователя B.X B.X 15 сентября 2006 в 18:00

кстати, есть ещё мультисайтинг... где-то на Друпале.ру обсуждалось, что можно сделать разные таблицы для разных языков и всё это будет работать под одним сайтом нормально...

Аватар пользователя PC_M@niac PC_M@niac 15 сентября 2006 в 20:32

Юзаю i18n. Мультисайтинг не подходит потому что пробовал - не понравилось. Модуль нормально рулит переводами, создавая фактически упрощённый вариант мультисайтинга. В "Типах материалов" могу задать какие типы нод локализуемы а в sites/default.php задать какие системные переменные локализуемы. Плюс через отдельный модуль рулю какие блоки на каких языках показывать, что актуально для вручную нарисованного графического меню. Всё хорошо кроме вышеозначенной траблы. Перевод фактически является другой нодой. Переключение пути с ru/xxx на en/xxx переключает междумордие (включая меню навигации и блоки) но вот открытая нода не затрагивается. Фактически нужно написать простейший хук но я API Друпала совсем не знаю и никогда под него не программировал (кроме ковыряния кривых модулей под 4.3.0). Подскажите как начать и я попробую.

Проблема актуальна т.к. делаю сейчас несколько двухъязыковых сайтов с распределённой системо обслуживания. Т.е. одним людям я дам право на размещение картинок, другим на написание статей а третьим на их перевод. Вот только-бы решить как-то проблему смены языка открытой статьи и всё будет в шоколаде Smile

Пока временно решил проблему, оставив выбор языка на странице входа и спрятав соответствующий блок со всех остальных страниц.

Аватар пользователя kiev1 kiev1 16 сентября 2006 в 1:37

и статья открытая переключается, все нормально - никаких хуков делать не надо, просто переключалку-ссылку нормальную повесить
<a href=\"/ru/". translation_url($_GET['q'], 'ru')  ."\">рус</a>

Аватар пользователя PC_M@niac PC_M@niac 19 сентября 2006 в 10:53

О! Работает Smile

Создал блок с таким текстом:

Для русского интерфейса:
<a href="/en/<?php print translation_url($_GET['q'], 'en') ?>">Переключиться на английский</a>

Для английского:
<a href="/ru/<?php print translation_url($_GET['q'], 'ru') ?>">Switch to russian</a>

Пока так, а когда будет диз сайта - влепим туды графическую переключалку

Аватар пользователя PC_M@niac PC_M@niac 21 сентября 2006 в 13:30

Откопал в официальной доке. Всё оказалось до безобразия просто.
Получается так:
Допустим у нас сайт на двух языках (en/ru)
Если я создаю ноду и присваиваю ей путь soft то она будет видна в ru/soft и en/soft, но вот если русской копии присвоить путь ru/soft а английской en/soft то они будут не на ru/ru/soft а именно на указанных местах. Так мы имеем на ru/soft русскую версию а на en/soft английскую. В меню подставляются эти-же самые алиасы. Вроде всё ок, но остаётся одна фигня: если использовать приведённую выше переключалку языков, то она нас будет бросать на ноды с путями node/xxx а не на алиасы. Так что остался вопрос как по коду ноды узнать её алиас.
Пойду покопаю path.module Smile

Аватар пользователя B.X B.X 21 сентября 2006 в 18:04

[b]Для русского интерфейса:

<a href=”/en/<?php print translation_url($_GET[‘q’], ‘en’) ?>”>Переключиться на английский</a>
Для английского:
<a href=”/ru/<?php print translation_url($_GET[‘q’], ‘ru’) ?>”>Switch to russian</a>

[/b]
надо бы наоборот... Switch to English и Переключиться на русский. Ведь, тем кто попадает ев английскую страницу (если они говорят на английском) переключаться на русский не нужно. Им наоборот, если они случайно на русскую попали, надо перейти на английскую версию... а если там будет надпись "Переключиться на английский", они же не понять могут...

Аватар пользователя PC_M@niac PC_M@niac 21 сентября 2006 в 18:49

Дельно, но я потом заменил это на:
[b]EN[/b]-[u]RU[/u] в английском
и на:
[u]EN[/u]-[b]RU[/b] в русском
Где подчёркивается ссылка на переключение.
А потом стало ещё смешнее, когда я обнаружил блок Translations который вместо Languages переключает всё, а не только интерфейс Smile
Вот оно как бывает с невнимательными Smile

Аватар пользователя vasyapupkin1 vasyapupkin1 25 сентября 2006 в 18:56
Я себе в шапку вставил код:
<a href=<?php print base_path() . 'ru/' . translation_url($_GET[‘q’], ‘en’) ?>><img src="<?php print base_path() . path_to_theme() ?>/images/ru.png" border="0" alt="Русский"></a>
<a href=<?php print base_path() . 'ua/' . translation_url($_GET[‘q’], ‘ru’) ?>><img src="<?php print base_path() . path_to_theme() ?>/images/ua.png" border="0" alt="Українська"></a>

_____________
/dev/regards
VITICH

Аватар пользователя PC_M@niac PC_M@niac 26 сентября 2006 в 20:28

Ну это то что ты только что сделал Smile
От англ quote - брать в кавычки, квотировать - видоизменять текст для вставки если его непосредственная вставка невозможна ввиду присутствия управляющих символов или тегов.