Многоязычие сайта на Drupal Multilingual sites in Drupal title Проблемы, решения, перспективы Problems, solutions, workarounds, and goodness on the way.

Содержание

Слайд 2

План

В чём задача и в чём проблема
Интернационализация Drupal 5 (кратко)
Интернационализация Drupal 6:
Как

План В чём задача и в чём проблема Интернационализация Drupal 5 (кратко)
устроена
Как её применять на практике
Какие при этом возникают проблемы и как их решать
Чего ждать от Drupal 7

Слайд 3

Какие ВОЗМОЖНОСТИ мы хотим иметь при создании многоязычных сайтов?

Содержание доступно на разных

Какие ВОЗМОЖНОСТИ мы хотим иметь при создании многоязычных сайтов? Содержание доступно на
языках
На любой странице - переключение языка и попадание на аналогичную страницу
Переключение необходимых элементов оформления (логотипов, заголовков и пр.)
Интерфейс пользователя доступен на разных языках
(желательно) Управление языком интерфейса администратора независимо от интерфейса пользователя
Удобство управления сайтом
(в принципе, можно создать отдельные сайты на разных языках и с каждой статьи вручную проставлять ссылки на иноязычные аналоги – но насколько это будет удобно???)

Слайд 4

ВОЗМОЖНОСТЬ vs ЦЕЛЕСООБРАЗНОСТЬ

А нужен ли нам на самом деле «сферический многоязычный сайт

ВОЗМОЖНОСТЬ vs ЦЕЛЕСООБРАЗНОСТЬ А нужен ли нам на самом деле «сферический многоязычный
в вакууме»?
Проблема актуальности:
какая-то часть содержания может быть неинтересной и бесполезной для иноязычной аудитории
Проблема наполнения: кто будет переводить содержание?
Сами авторы и редакторы?
Специально нанятые переводчики?
А что делать с user-generated content?

Слайд 5

Многоязычные сайты с user-generated content: отдельно или вперемешку?

Wikipedia: фактически отдельные сайты для

Многоязычные сайты с user-generated content: отдельно или вперемешку? Wikipedia: фактически отдельные сайты
каждого языка, связанные через interwiki-ссылки, общий логин, Wikimedia commons и т.п.
Youtube: Видеоматериалы и комментарии к ним на разных языках вперемешку, язык интерфейса переключается, но основное содержание общее.

Слайд 6

Если бы многоязычие с самого начала было заложено внутрь друпаловской ноды…

node/1
(multilingual)

Title (lang1)

Title

Если бы многоязычие с самого начала было заложено внутрь друпаловской ноды… node/1
(lang2)

Body (lang1)

Body (lang2)

Some field (lang1)

Some field (lang2)

Another field (language-neutral)

Some file attached (lang1)

Some file attached (lang2)

Another file attached (language-neutral)

comments

Слайд 7

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

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

node/1
lang1

Some file attached

Another file attached

node/2
lang2

Some file attached

Another file attached

Drupal торжественно объявляет node/1 и node/2 переводами друг друга

comments

comments

Слайд 8

Кодировка содержания в Drupal

Единственное, что утешает – content=“text/html; charset=utf-8”
Содержание всегда отдаётся в

Кодировка содержания в Drupal Единственное, что утешает – content=“text/html; charset=utf-8” Содержание всегда
кодировке utf-8 (8-битное представление Unicode), и нет нужды подбирать кодировку, в которой будет правильно видно содержание, пользовательский интерфейс и всё прочее.

Слайд 9

Drupal 5: Поддержки многоязычия в ядре - НЕТ

В базе данных нет полей,

Drupal 5: Поддержки многоязычия в ядре - НЕТ В базе данных нет
описывающих язык ноды и связь с её переводами на другие языки
Многоязычие возможно только за счёт установки дополнительных модулей
Модули, за счёт которых реализуется многоязычие:
i18n или Localizer

Слайд 10

Почему ”i18n”?

internationalization ⇨ i18n

18 штук ниасилили

10 штук ниасилили

Localization ⇨ L10n

Сокращения “i18n” и

Почему ”i18n”? internationalization ⇨ i18n 18 штук ниасилили 10 штук ниасилили Localization
“L10n” используются в названиях модулей Drupal, например “i18n”, “L10n_client”

Много букав.

Слайд 11

Drupal 5 + i18n.module

Additional db tables:
localizerblock
localizertranslation
localizernode
localizeruser

Drupal 5 + Localizer.module

Additional db tables:
i18n_blocks
i18n_blocks_i18n
i18n_node
i18n_profile_fields
i18n_strings
i18n_taxonomy_term
i18n_variable

vs

i18n vs

Drupal 5 + i18n.module Additional db tables: localizerblock localizertranslation localizernode localizeruser Drupal
Localizer: два способа сделать многоязычным сайт на Drupal 5

Слайд 12

i18n vs Localizer: Боливар не вынесет двоих

Разработка Localizer’а прекращена на стадии 5.x-3.13. Версии

i18n vs Localizer: Боливар не вынесет двоих Разработка Localizer’а прекращена на стадии
для Drupal 6 нет и не будет

Слайд 13

Многоязычие в ядре Drupal 6

node.language

node.tnid (= original node’s nid)

node.translate (translation status)

В таблице “node” появились

Многоязычие в ядре Drupal 6 node.language node.tnid (= original node’s nid) node.translate
три дополнительных поля

Слайд 14

Многоязычие в ядре Drupal 6

Два дополнительных модуля (по умолчанию отключены):
Locale (locale.module) –

Многоязычие в ядре Drupal 6 Два дополнительных модуля (по умолчанию отключены): Locale
общая поддержка дополнительных языков и перевод интерфейса
Content translation (translation.module) – перевод содержания

Слайд 15

Многоязычие в ядре Drupal 6

Казалось бы, этого уже достаточно, чтобы делать многоязычные

Многоязычие в ядре Drupal 6 Казалось бы, этого уже достаточно, чтобы делать
сайты – но… при попытке это сделать сразу возникают проблемы:
Меню, блоки, таксономия
Заголовок сайта, слоган, миссия
Интеграция с Views, значения и ярлыки в полях CCK, работа с приложенными файлами и т.д. и т.п.
Как всё это перевести и в зависимости от языка показать всё нужное и спрятать всё ненужное?
Без дополнительных модулей средства Drupal 6 для создания многоязычных сайтов совершенно недостаточны.

Слайд 16

Многоязычие в ядре Drupal 6

(Jose Reyero, i18n.module developer)

Многоязычие в ядре Drupal 6 (Jose Reyero, i18n.module developer)

Слайд 17

Drupal 6 + i18n: модуль и субмодули

i18n.module
i18nblocks
i18ncontent
i18nmenu
i18nprofile
i18nstrings
i18nsync
i18ntaxonomy
i18nviews

General features
Multilingual variables
Translatable user defined

Drupal 6 + i18n: модуль и субмодули i18n.module i18nblocks i18ncontent i18nmenu i18nprofile
strings: Menu items, taxonomy content type names and descriptions, etc...
Language selection: Only content in the selected language is displayed for each page view.
Several selection modes are available for content, meaning you can have node lists for only the current language, for current and default languages, all languages, etc.
Profile: Translates profile field names and descriptions in every language
Polls: Provides an aggregated view and results block for votes in all languages
Some, still limited, Views and CCK support
Multilingual Taxonomy
Language can be set up for vocabularies or terms, or terms can be localized
Both multilingual vocabularies with terms in multiple languages and single-language vocabularies can be created
Translations can be defined between terms in different languages
Taxonomy term synchronization can be defined per vocabulary for translations
Taxonomy term translation can be done using localization for selected vocabularies

Слайд 18

CivicActions.com: многоязычные сайты на D6 + i18n для Sony Music (запущены в

CivicActions.com: многоязычные сайты на D6 + i18n для Sony Music (запущены в
начале 2009). Заодно и код (D6 core & i18n) доработали…

Слайд 19

drupal.org/node/383954

drupal.org/node/383954

Слайд 20

Примерный список задач: что нужно сделать для интернационализации сайта

Модули: Установка и включение

Примерный список задач: что нужно сделать для интернационализации сайта Модули: Установка и
нужных (Content translation, Locale, i18n, i18n submodules), редактирование settings.php.
Языки: Включение нужных
Типы контента: Включение многоязычия для нужных типов (при этом, если нужно – задание синхронизации для выбранных полей: например, приложенных файлов, изображений, дат, таксономии и т.п.)
Переключатель языка: вывести (стандартный блок или сниппет, встраиваемый в шаблон темы)
Главная страница, название сайта, footer и т.п.: настроить в соответствии с языком
Pathauto: Если нужно – подстроить автоматические URL с учётом языка
Ноды: Подготовка к переводу - задать язык, если нода считается language-neutral; создание переводов
Меню: Перевод или дупликация, настройка в соответствии с языком
Блоки: Перевод или дупликация, настройка видимости по языкам и URL’ам
Тема: Если есть параметры, зависящие от языка – подстроить
Permissions: Настроить права доступа на перевод содержания и интерфейса
Решение непредвиденных проблем и прочее

Слайд 21

Для всех этих процедур есть довольно подробные инструкции

drupal.org/node/338018

Для всех этих процедур есть довольно подробные инструкции drupal.org/node/338018

Слайд 22

Пошаговая инструкция

drupal-translation.com/node/10

Пошаговая инструкция drupal-translation.com/node/10

Слайд 23

Многоязычные переменные: site_name, site_footer, theme_settings и т.п. прописываются в файле settings.php

/**
*

Многоязычные переменные: site_name, site_footer, theme_settings и т.п. прописываются в файле settings.php /**
Multilingual settings
*
* This is a collection of variables that can be set up for each language when i18n is enabled.
* These are the basic ones for Drupal core, but you can add your own here.
*/
$conf['i18n_variables'] = array(
// Site name, slogan, mission, etc..
'site_name',
'site_slogan',
'site_mission',
'site_footer',
'anonymous',
// Different front page for each language
'site_frontpage',
// Primary and secondary links
'menu_primary_links_source',
'menu_secondary_links_source',
// Contact form information
'contact_form_information',
// For theme variables, read more below
'theme_settings',
'theme_garland_settings',
);

Слайд 24

Многоязычные переменные, прописанные в файле settings.php

Теперь при редактировании параметров, соответствующих i18n_variables, в

Многоязычные переменные, прописанные в файле settings.php Теперь при редактировании параметров, соответствующих i18n_variables,
форме видна приписка: “This is a multilingual variable”.
Переключая языки, задайте и сохраните нужные значения для каждого языка

‘site_name'

‘site_slogan'

‘i18n_variables'

Слайд 25

Система перевода строк интерфейса

Ядро D6: поиск и перевод строк из встроенного интерфейса

Система перевода строк интерфейса Ядро D6: поиск и перевод строк из встроенного
(code-based strings).
Субмодуль i18n.strings: + строки из меню, блоков, таксономии и т.д. (user-entered strings).

Слайд 26

Многоязычная таксономия

Выбор варианта:
общие категории для всех языков
или разные для разных языков

Многоязычная таксономия Выбор варианта: общие категории для всех языков или разные для разных языков

Слайд 27

Многоязычная таксономия

Вариант 1: общие категории (common terms)

taxonomy/term/1 (для всех языков)

(EN)
Dogs
Everything about dogs

(RU)
Собаки
Всё о

Многоязычная таксономия Вариант 1: общие категории (common terms) taxonomy/term/1 (для всех языков)
собаках

Перевод названия - через систему перевода интерфейса

Слайд 28

Многоязычная таксономия

Вариант 2: категории раздельно по языкам (per language terms)

taxonomy/term/1
(EN)

Dogs
Everything about dogs

Собаки
Всё о

Многоязычная таксономия Вариант 2: категории раздельно по языкам (per language terms) taxonomy/term/1
собаках

taxonomy/term/2 (RU)

Объявляем категории переводами друг друга. (Ну и на что это влияет? SFW?)

Слайд 29

Блоки

Можно настроить видимость по языку: на всех языках или на каком-то одном
Два

Блоки Можно настроить видимость по языку: на всех языках или на каком-то
варианта:
Один блок, видимый на всех языках, с переводом заголовка и содержимого через систему перевода интерфейса
Отдельный блок для каждого языка

Mutlilingual Block

Translatable Title (переводимый заголовок)

Translatable Content (Переводимое содержание)

English Block

English Title

English Content

Русскоязычный блок

Русский заголовок

Русскоязычное содержание

Слайд 30

Views

i18n.views добавляет возможность фильтрации видов по языку в соответствии с языковыми настройками сайта

Поэтому

Views i18n.views добавляет возможность фильтрации видов по языку в соответствии с языковыми
блок, в который выводится вид, можно делать многоязычным: при переключении языка под него автоматически подстраивается содержание

Слайд 31

Меню

Казалось бы, те же два варианта, что и с блоками:
общее многоязычное меню

Меню Казалось бы, те же два варианта, что и с блоками: общее
с переводом через систему перевода интерфейса, или
отдельные одноязычные меню.
Но для случая меню есть отличия:
Настройки видимости по языку возможны для всего блока меню в целом и для каждого пункта отдельно. Внутри многоязычного блока отдельные пункты могут быть одноязычными или многоязычными.
Поведение пунктов меню зависит от того, на что они показывают: на ноду, таксономию, вид и т.п., т.е. на одноязычный элемент или многоязычный.
Primary/secondary links – особые виды меню, поведение которых может отличаться от остальных
JQuery Menu: многоязычной поддержки нет, только дублировать блоки

Слайд 32

Меню

Заголовок меню
Кто мы
Продукция
Пресса о нас
Контакты

Все языки
Язык 1
Язык 2

нода

таксономия

вид

форма

Общая видимость блока меню

Все языки
Язык

Меню Заголовок меню Кто мы Продукция Пресса о нас Контакты Все языки
1
Язык 2

Все языки
Язык 1
Язык 2

Все языки
Язык 1
Язык 2

Все языки
Язык 1
Язык 2

Види-мость каждого отдель-ного пункта меню

Можно дублировать блок в целом, можно внутри блока одни пункты дублировать, другие переводить. А переводить весь блок имеет смысл только при отсутствии ссылок на ноды.

Слайд 33

На что указывает пункт меню?

Ссылка на ноду, даже если задаётся по её

На что указывает пункт меню? Ссылка на ноду, даже если задаётся по
псевдониму (“about”), хранится в системном виде ”node/1”. Если перевести текст этого пункта меню (“About us” -> “О нас”), ссылка всё равно приведёт на англоязычную ноду.
Поэтому пункты меню, указывающие на ноды, приходится дублировать.
Пункты меню, указывающие на виды (Page View), таксономию (категории, общие для разных языков) и т.п., можно дублировать, а можно и переводить.

Слайд 34

Primary & secondary links

Для них настройки видимости пунктов меню могут не срабатывать:

Primary & secondary links Для них настройки видимости пунктов меню могут не
видны лишние кнопки, которые для данного языка нужно спрятать.

Причина: во многих темах их вывод описан не так, как вывод блоков и обычных меню

drupal.org/node/313302

Слайд 35

Многоязычные primary & secondary links: решение проблемы через многоязычные переменные

settings.php:
$conf['i18n_variables'] = array(
//

Многоязычные primary & secondary links: решение проблемы через многоязычные переменные settings.php: $conf['i18n_variables']
Primary and secondary links
'menu_primary_links_source',
'menu_secondary_links_source',
);

'menu_primary_links_source'

'menu_secondary_links_source'

Слайд 36

Субмодуль i18nsync: синхронизация полей при переводе

Синхронизируемые поля указываются в настройках свойств типа

Субмодуль i18nsync: синхронизация полей при переводе Синхронизируемые поля указываются в настройках свойств
материала.
Например, можно синхронизировать
Приложенные файлы
Приложенные фотографии
Даты проведения мероприятия
Ссылки и т.п.

Слайд 37

i18nsync и nodereference

Для синхронизации nodereference нужно у node/4 переключить ссылку с node/1

i18nsync и nodereference Для синхронизации nodereference нужно у node/4 переключить ссылку с
на node/2.
После недавних правок, i18nsync умеет это делать, хотя и с некоторым скрипом (например, при создании перевода может потребоваться ввести ссылку вручную, но при последующих изменениях синхронизация будет автоматической)

node/3 (en)

node/4 (ru)

node/1 (en)

node/2 (ru)

nodereference

nodereference

Перевод (tnid=1)

Перевод (tnid=3)

Слайд 38

Nodereference и проблема построения многоязычных видов

ru/lectures/by-teachers/ Распределение лекций между преподавателями:
Джон Браун (6)
Питер Грин

Nodereference и проблема построения многоязычных видов ru/lectures/by-teachers/ Распределение лекций между преподавателями: Джон
(4)

ru/lectures/by-teachers/37 Список лекций Джона Брауна

en/lectures/by-teachers/ Lectures grouped by teachers:
John Brown (6)
Peter Green (4)

en/lectures/by-teachers/36 List of lectures by John Brown

“John Brown” (node/36) и “Джон Браун” (node/37) – это разные ноды, поэтому при переключении языка вид “List of lectures by John Brown” не переключится на “Список лекций Джона Брауна”, а покажет пустой список.

en ?? ru

en ?? ru

Слайд 39

Общие комментарии для оригинальной ноды и её переводов

i18ncomments by neochief drupal.org/node/526942 Предложен как i18n

Общие комментарии для оригинальной ноды и её переводов i18ncomments by neochief drupal.org/node/526942
experimental module

Node/1 (en)

Node/2 (uk)

Node/3 (ru)

comments

Слайд 40

Ошибки, связанные с темами

Если вы всё переводите правильно, но какой-то элемент интерфейса

Ошибки, связанные с темами Если вы всё переводите правильно, но какой-то элемент
перевести не удаётся, ошибка может быть связана с темой
Проверьте, воспроизводится ли ошибка, если сменить тему на стандартную.

Слайд 41

Пример проблем, связанных с темой

Проблема 1: независимо от текущего языка, ссылка с

Пример проблем, связанных с темой Проблема 1: независимо от текущего языка, ссылка
логотипа и названия сайта ведёт на главную страницу на языке по умолчанию

Logo

Title

(En)
Main Page

Logo

Title

Logo

(Ru)
Главная страница

link

link

link

link

Слайд 42

Пример проблем, связанных с темой

Проблема 2: таксономические таги к нодам выводятся в

Пример проблем, связанных с темой Проблема 2: таксономические таги к нодам выводятся
непереведенном виде

Проверка: переключение на стандартные темы (Garland etc.); обе проблемы исчезают

проблемы связаны с темой

Тема сделана на основе Acquia Marina
Проблема может затронуть и другие темы на основе Acquia Marina – Waffles, Black Mamba, etc.

Слайд 43

Решение этих двух проблем, связанных с темой

drupal.org/node/494068

Проблема 1: замена ссылки в page.tpl.php:
$base_path check_url($front_page)
(как

Решение этих двух проблем, связанных с темой drupal.org/node/494068 Проблема 1: замена ссылки
в стандартных темах)
Проблема 2: замена ссылки в template.php: $terms= taxonomy_node_get_terms_by_vocabulary ($vars['node'], $vocabulary->vid) $terms=i18ntaxonomy_localize_terms (taxonomy_node_get_terms_by_vocabulary ($vars['node'], $vocabulary->vid))

Слайд 44

Поля CCK: список разрешённых значений и текстовых ярлыков к ним

AL|Albania AM|Armenia . . .

Albania

Текстовые

Поля CCK: список разрешённых значений и текстовых ярлыков к ним AL|Albania AM|Armenia
ярлыки должны переводиться через систему перевода интерфейса:

Албания

Armenia

Армения

Но реально перевод работает не всегда: бывает, что одни строки поиск находит, а другие нет.
Есть трюк с заданием значений поля CCK через php-код:

return array(
'AL' => t('Albania'),
'AM' => t('Armenia') );

Некоторые строки после этого находятся поиском, другие всё равно нет.

Запуск и перезапуск cron, «дергание» сайта за ноды и виды, прочие танцы с бубном.

WTF ???

drupal.org/node/293297

Слайд 45

Поля CCK: проблема перевода текстовых ярлыков к разрешённым значениям

Предложение neochief:
Субмодуль i18ncck
Патч

Поля CCK: проблема перевода текстовых ярлыков к разрешённым значениям Предложение neochief: Субмодуль
для CCK, обеспечивающий корректное взаимодействие с i18ncck и нахождение при поиске всех строк, которые нужно перевести.

drupal.org/node/531660

drupal.org/node/531662

Слайд 46

Объекты и методы их перевода

Объекты и методы их перевода

Слайд 47

Модуль “Language sections”

«Суррогат» многоязычного поля с маркерами языка в качестве разделителя
Можно использовать

Модуль “Language sections” «Суррогат» многоязычного поля с маркерами языка в качестве разделителя
в блоке, «шапке» views и т.п.
Иногда это проще и быстрее, чем переводить блок или «шапку» через систему перевода строк

=== en === English text === ru === Русский текст === qz === Текст на прочих языках === qq === Текст, не зависящий от языка

This is some =en= English =ru= Russian =qq= text

Не обязательно задавать параграфы целиком - можно использовать маркеры языка внутри одной строки

Слайд 48

Модуль “Translation Table”

Встраивается в систему перевода интерфейса
Добавляет закладки:
«Таксономия»
«Тип содержимого»
«Меню»
Облегчает перевод названий и

Модуль “Translation Table” Встраивается в систему перевода интерфейса Добавляет закладки: «Таксономия» «Тип
описаний таксономических категорий, пунктов меню, названий и описаний типов контента и их полей

Слайд 49

Модуль Translation table встраивается в систему перевода интерфейса

Модуль Translation table встраивается в систему перевода интерфейса

Слайд 50

Модуль “Localization client” (L10n_client)

Кнопка внизу экрана позволяет вызов прямо с просматриваемой страницы.

Модуль “Localization client” (L10n_client) Кнопка внизу экрана позволяет вызов прямо с просматриваемой
Выводится список используемых строк интерфейса, в котором можно найти нужную, тут же перевести и сохранить перевод.
Возможен конфликт с img_assist (drupal.org/node/273511)

Слайд 51

Модуль “Translation overview”

Помогает организовать работу по переводу содержания сайта
Выводится список нод, помеченный

Модуль “Translation overview” Помогает организовать работу по переводу содержания сайта Выводится список
флажками: непереведенные, переведенные, перевод устарел.
Можно вывести список нод, ожидающих перевода на такой-то язык (задание для переводчика)

Слайд 52

Drupal 7: наступит ли «многоязычная благодать»?

groups.drupal.org/node/19671

Drupal 7: наступит ли «многоязычная благодать»? groups.drupal.org/node/19671
Имя файла: Многоязычие-сайта-на-Drupal-Multilingual-sites-in-Drupal-title-Проблемы,-решения,-перспективы-Problems,-solutions,-workarounds,-and-goodness-on-the-way..pptx
Количество просмотров: 109
Количество скачиваний: 0