SlideShare a Scribd company logo
imgfield tnid tnid=1 tnid=1 node/nid node/2 node/1 country Ukraine Украина city Kiev Киев author Grigory NAUMOVETS Григорий НАУМОВЕЦ body Problems ,  solutions, workarounds, and “goodness on the way” Проблемы, решения ,  перспективы title Multilingual sites in  Drupal Многоязычие сайта на Drupal
План В чём задача и в чём проблема Интернационализация Drupal 5 (кратко) Интернационализация Drupal 6: Как устроена Как её применять на практике Какие при этом возникают проблемы и как их решать Чего ждать от Drupal 7
Какие ВОЗМОЖНОСТИ мы хотим иметь при создании многоязычных сайтов? Содержание доступно на разных языках На любой странице - переключение языка и попадание на аналогичную страницу Переключение необходимых элементов оформления (логотипов, заголовков и пр.)  Интерфейс пользователя доступен на разных языках (желательно) Управление языком интерфейса администратора независимо от интерфейса пользователя Удобство управления сайтом (в принципе, можно создать отдельные сайты на разных языках и с каждой статьи вручную проставлять ссылки на иноязычные аналоги – но насколько это будет удобно???)
ВОЗМОЖНОСТЬ  vs  ЦЕЛЕСООБРАЗНОСТЬ А нужен ли нам на самом деле «сферический многоязычный сайт в вакууме»? Проблема актуальности: какая-то часть содержания может быть неинтересной и бесполезной для иноязычной аудитории Проблема наполнения: кто будет переводить содержание? Сами авторы и редакторы? Специально нанятые переводчики? А что делать с  user-generated content?
Многоязычные сайты с  user-generated content : отдельно или вперемешку? Wikipedia :  фактически отдельные сайты для каждого языка, связанные через  interwiki- ссылки, общий логин ,   Wikimedia commons  и т.п .   Youtube:  Видеоматериалы и комментарии к ним на разных языках вперемешку, язык интерфейса переключается, но основное содержание  общее.
Если бы многоязычие с самого начала было заложено внутрь друпаловской ноды… node/1 (multilingual) Title (lang1) Title (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
...но  многоязычие не было заложено внутрь друпаловской ноды, и только потом прикручено к ней сбоку. 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 Title Body Some field Another field Title Body Some field Another field
Кодировка содержания   в  Drupal Единственное, что утешает –  content= “ text/html; charset=utf-8 ” Содержание всегда отдаётся в кодировке  utf-8 (8- битное представление  Unicode),  и нет нужды подбирать кодировку, в которой будет правильно видно содержание, пользовательский интерфейс и всё прочее.
Drupal 5:  Поддержки многоязычия в ядре - НЕТ В  баз е данных нет полей, описывающих язык ноды и связь с её переводами на другие языки Многоязычие возможно только за счёт установки дополнительных модулей Модули , за сч ёт которых реализуется многоязычие: i18n   или  Localizer
Почему  ”i18n”? i nternationalizatio n     i18n 18   штук ниасилили 10   штук ниасилили L ocalizatio n     L10n Сокращения  “ i18n ”  и  “ L10n ”  используются в названиях модулей  Drupal,  например  “i18n”, “L10n_client” Много букав.
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  Localizer: два способа сделать многоязычным сайт на  Drupal 5
i18n vs Localizer: Боливар не в ынес ет  двоих Разработка  Localizer’ а прекращена на стадии  5.x-3.13 .  Версии для  Drupal 6  нет и не будет
Многоязычие в ядре  Drupal 6 node.language node.tnid (= original node’s nid) node.translate (translation status) В  таблице  “node”  появились три дополнительных поля
Многоязычие в ядре Drupal 6 Два дополнительных модуля  (по умолчанию отключены): Locale  (locale.module) –  общая поддержка дополнительных языков и перевод интерфейса Content translation  (translation.module)  –  перевод содержания
Многоязычие в ядре Drupal 6 Казалось бы, этого уже достаточно, чтобы делать многоязычные сайты – но… при попытке это сделать сразу возникают проблемы: Меню, блоки, таксономия Заголовок сайта, слоган, миссия Интеграция с  Views , значения и ярлыки  в  полях  CCK,  работа с приложенными файлами и т.д. и т.п. Как всё это перевести и в зависимости от языка показать всё нужное и спрятать всё ненужное? Без дополнительных модулей средства  Drupal 6  для создания многоязычных сайтов совершенно недостаточны.
Многоязычие в ядре Drupal 6 ( Jose Reyero ,  i18n.module developer)
Drupal 6 + i18n:  модуль и субмодули i18n.module i18nblocks i18ncontent i18nmenu i18nprofile i18nstrings i18nsync i18ntaxonomy i18nviews General features Multilingual variables  Translatable user defined 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
CivicActions.com:  многоязычные сайты на  D6 + i18n  для  Sony Music ( запущены в начале 2009 ). Заодно и код  (D6 core & i18n)  доработали…
drupal.org/node/383954
Примерный список задач: что нужно сделать для интернационализации сайта Модули : Установка и включение нужных (Content translation, Locale, i18n, i18n submodules), редактирование settings.php. Языки : Включение нужных  Типы контента : Включение многоязычия для нужных типов (при этом, если нужно – задание  синхронизации  для выбранных полей: например, приложенных файлов, изображений, дат, таксономии и т.п.)  Переключатель языка : вывести (стандартный блок или сниппет, встраиваемый в шаблон темы)  Главная страница, название сайта, footer  и т.п.: настроить в соответствии с языком  Pathauto : Если нужно – подстроить автоматические URL с учётом языка Ноды : Подготовка к переводу - задать язык, если нода считается language-neutral; создание переводов Меню : Перевод или дупликация, настройка в соответствии с языком Блоки : Перевод или дупликация, настройка видимости по языкам и URL’ам Тема : Если есть параметры, зависящие от языка – подстроить Permissions : Настроить права доступа на перевод содержания и интерфейса Решение  непредвиденных проблем  и прочее
Для всех этих процедур есть довольно подробные инструкции drupal.org/node/338018
Пошаговая инструкция drupal - translation.com/node/10
Многояз ычные переменные:  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', );
М ногояз ычны е переменные , прописанные в файле  settings.php Теперь при редактировании параметров ,  соответствующих   i18n_variables ,   в форме видна приписка:  “This is a multilingual variable” . Переключ ая  языки, задайте и сохраните нужные значения для каждого языка ‘ site_name' ‘ site_slogan' ‘ i18n_variables'
Система перевода строк интерфейса Ядро  D6 :   поиск и перевод строк из встроенного интерфейса  ( code-based strings ).  Субмодуль  i18n . strings : +  строки из меню, блоков, таксономии и т.д.   ( user-entered strings ).
Многоязычная таксономия Выбор варианта: общие категории для всех языков или разные для разных языков
Многоязычная таксономия Вариант 1:   общие категории  ( common terms ) taxonomy/term/1 ( для  всех языков ) (EN) Dogs Everything about dogs (RU) Собаки Всё о собаках Перевод названия - через систему перевода интерфейса
Многоязычная таксономия Вариант  2 :   категории  раздельно по языкам ( per language terms ) taxonomy/term/1 (EN) Dogs Everything about dogs Собаки Всё о собаках taxonomy/term/2   (RU) Объявляем категории переводами друг друга. ( Ну и  на  что это влияет?  SFW?)
Блоки Можно настроить видимость по языку: на всех языках или на каком-то одном Два варианта: Один блок, видимый на всех языках, с переводом заголовка и содержимого через систему перевода интерфейса Отдельный блок для каждого языка Mutlilingual Block Translatable Title  (переводимый заголовок) Translatable Content ( Переводимое содержание) English Block English Title English  Content Русскоязычный блок Русский заголовок Русскоязычное содержание
Views i18n.views  добавляет возможность фильтрации видов по языку в соответствии с яз ы ковыми настройками сайта Поэтому блок, в который выводится вид, можно делать многоязычным: при переключении языка под него автоматически подстраивается содержание
Меню Казалось бы, те же два варианта, что и с блоками: общее многоязычное меню с переводом через систему перевода интерфейса, или отдельные одноязычные меню. Но для случая меню есть отличия: Настройки видимости по языку возможны для всего блока меню в целом и для каждого пункта отдельно. Внутри многоязычного блока отдельные пункты могут быть одноязычными или многоязычными.  Поведение пунктов меню зависит от того, на что они показывают: на ноду, таксономию, вид и т.п., т.е. на одноязычный элемент или многоязычный.  Primary/secondary links –  особые виды меню, поведение которых может отличаться от остальных JQuery Menu:  многоязычной поддержки нет, только дублировать блоки
Меню Заголовок меню Кто мы Продукция Пресса о нас Контакты Все языки Язык 1 Язык 2 нода таксономия вид форма Общая видимость блока меню Все языки Язык 1 Язык 2 Все языки Язык 1 Язык 2 Все языки Язык 1 Язык 2 Все языки Язык 1 Язык 2 Види-мость каждого   отдель-ного  пункта меню Можно дублировать блок в целом, можно внутри блока одни пункты дублировать, другие переводить.  А переводить весь блок имеет смысл только  при отсутствии ссылок на ноды .
На что указывает пункт меню? Ссылка на ноду, даже если задаётся по её псевдониму  (“about”) , хранится в  системном виде  ”node/1”.  Если перевести текст  эт ого пункта меню ( “About us” -> “ О нас ” ),  ссылка всё равно приведёт на англоязычную ноду. Поэтому пункты меню, указывающие на  ноды , приходится  дублировать . Пункты меню, указывающие на  виды  ( Page View ) ,  таксономию  (категории,  общие для разных языков )  и т.п., можно  дублировать , а можно и  переводить . node/2 node/1 Системн ый адрес ссылки О нас About us Текст   в меню ru/about en/about URL
Primary   & secondary links Для них настройки видимости пунктов меню могут не срабатывать: видны лишние кнопки, которые для данного языка нужно спрятать. Причина: во многих темах их вывод описан не так, как вывод блоков   и обычных меню drupal.org/node/313302
Многоязычные  primary   & secondary links :  решение проблемы через многоязычные переменные settings.php: $conf['i18n_variables'] = array( // Primary and secondary links 'menu_primary_links_source', 'menu_secondary_links_source', ); 'menu_primary_links_source' 'menu_secondary_links_source'
Субмодуль  i18nsync : синхронизация полей при переводе Синхронизируемые поля указываются в настройках свойств типа материала. Например, можно синхронизировать Приложенные файлы Приложенные фотографии Даты проведения мероприятия  Ссылки и т.п.
i18nsync  и  nodereference Для синхронизации  nodereference  нужно   у   node/4  переключить ссылку с  node/1  на  node/2. После недавних правок,  i18nsync  умеет это делать, хотя и с некоторым скрипом (например, при создании перевода может потребоваться ввести ссылку вручную, но при последующих изменениях синхронизация будет автоматической) node/3 (en) node/4 (ru) node/1 (en) node/2 (ru) nodereference nodereference Перевод ( tnid=1 ) Перевод ( tnid= 3)
Nodereference  и проблема построения многоязычных видов ru/lectures/by-teachers/ Распределение лекци й  между преподавателями: Джон Браун (6) Питер Грин (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
Общие комментарии   для оригинальной ноды и её переводов i18ncomments  by neochief drupal.org/node/526942 Предложен как  i18n experimental module Node/1 (en) Node/2 (uk) Node/3 (ru) comments
Ошибки, связанные с темами Если вы всё переводите правильно, но какой-то элемент интерфейса перевести не удаётся, ошибка может быть связана с темой Проверьте, воспроизводится ли ошибка, если сменить тему на стандартную.
Пример проблем, связанных с темой Проблема 1:  независимо от текущего языка, ссылка с логотипа и названия сайта ведёт на главную страницу на языке по умолчанию Logo Title ( En) Main Page Logo Title Logo (Ru) Главная страница link link link link Page Title Logo Страница Title Logo
Пример проблем, связанных с темой Проблема 2:  таксономические таги к нодам выводятся в непереведенном виде  Проверка:  переключение на стандартные темы  ( Garland  etc.) ;   обе  проблемы исчезают проблемы связаны с темой Тема сделана на основе Acquia Marina Проблема может затронуть и другие темы на основе Acquia Marina – Waffles, Black Mamba, etc.
Решение этих двух проблем,  связанных с темой Проблема 1: замена ссылки в  page.tpl.php:   $base_path check_url($front_page) ( как в стандартных темах) Проблема 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)) drupal.org/node/494068
Поля  CCK:  список разрешённых значений и текстовых ярлыков к ним AL|Albania AM|Armenia . . . Albania Текстовые ярлыки   должны   переводиться через систему перевода интерфейса: Албания A rmen ia Армения Но реально   перевод  работает не всегда: бывает, что одни строки поиск находит, а другие нет. Есть трюк с заданием значений поля  CCK  через  php- код: return array( 'AL' => t('Albania'), 'AM' => t('Armenia') ); Некоторые строки после этого находятся поиском, другие всё равно нет. Запуск и перезапуск  cron,  «дергание» сайта за ноды и виды, прочие танцы с бубном. WTF   ?? ? drupal.org/node/293297
Поля  CCK:  проблема перевода текстовых ярлыков к разрешённым значениям Предложение  neochief: Субмодуль  i18ncck  Патч для  CCK,  обеспечивающий корректное взаимодействие с  i18ncck и нахождение при поиске всех строк, которые нужно перевести.   drupal.org/node/531660 drupal.org/node/53166 2
Объекты и методы их перевода Загрузка  .po  файлов с переводом, отдельные строки -  система перевода строк Интерфейс C истема перевода строк; танцы с бубном Поля  CCK  и ярлыки к разрешённым значениям Добавление фильтра по языку; заголовки и подписи – система перевода строк Вид ы Как обычные меню; если проблемы – добавить к списку м ногоязычных переменных  i18n Primary & secondary links Перевод (система перевода строк) или дублирование пунктов – в зависимости от того, меняется ли ссылка Меню Перевод названия и содержания (система перевода строк) или дублирование Блоки Многоязычные переменные  i18n Название сайта,  slogan, footer, etc. Перевод (система перевода содержания) Ноды
Модуль “ L anguage sections ” « Суррогат »  многоязычного поля с маркерами языка в качестве разделителя Можно использовать в блоке, «шапке»  views  и т.п. Иногда это проще и быстрее, чем переводить блок или «шапку» через систему перевода строк === e n  === Engl ish  text ===  ru  === Русский текст === qz === Текст на прочих языках === qq === Т екст, не зависящий от языка This is some  =en=  English  =ru=  Russian  =qq=  text Не обязательно задавать параграфы целиком - можно использовать маркеры языка внутри одной строки
Модуль  “Translation Table” Встраивается в систему перевода интерфейса Добавляет закладки: «Таксономия» «Тип содержимого» «Меню» Облегчает перевод названий и описаний таксономических категорий, пунктов меню, названий и описаний типов контента и их полей
Модуль  Translation table   встраивается в систему перевода интерфейса
Модуль “ Localization client ”  (L10n_client) Кнопка внизу экрана позволяет вызов прямо с просматриваемой страницы. Выводится список  используемых строк интерфейса, в котором можно найти нужную, тут же перевести и сохранить перевод. Возможен конфликт с  img_assist (drupal.org/node/273511)
Модуль  “Translation overview” Помогает организовать работу по переводу содержания сайта Выводится список нод, помеченный флажками: непереведенные, переведенные, перевод устарел. Можно вывести список нод, ожидающих перевода на такой-то язык (задание для переводчика)
Drupal 7 : наступит ли «многоязычная благодать»?   groups.drupal.org/node/ 19671
В списке задач по поддержке многоязычия в  Drupal 7 Включение в ядро  D7  ряда возможностей модуля  i18n : Многоязычные блоки, меню и т.п.; Многоязычные переменные Перевод строк, заданных пользователем Улучшение интерфейса системы перевода строк Управление языком интерфейса независимо от языка содержания Translatable fields   (поддержка перевода полей в  Fields API )

More Related Content

PDF
presentashka
PPTX
компьютер изнутри
PDF
Project Office.Net - marketing plan
PPTX
бешков Lm Csv Rootconf
ODP
Платформы Java и .NET. Современные концепции ООП
PDF
Internet aplikacii razvoj marketig
PDF
Интерактивный терминал: Perl, XML и Firefox‎
PPT
Web 2.0 в ВУЗе
presentashka
компьютер изнутри
Project Office.Net - marketing plan
бешков Lm Csv Rootconf
Платформы Java и .NET. Современные концепции ООП
Internet aplikacii razvoj marketig
Интерактивный терминал: Perl, XML и Firefox‎
Web 2.0 в ВУЗе

What's hot (20)

PPTX
Как составить метатеги TITLE и DESCRIPTION для интернет-магазина
PDF
Прорывные идеи. Как поставить их на поток?
PDF
CMS Joomla! 1.5.x Tutorial (In Ukrainian)
PPSX
07 Ws08 R2 Virt
PDF
PPT
04 Ukr Prostir Web2
PDF
Internet Marketing at the Time of Crisis
PPTX
프레젠테이션1
PPTX
SEO за блогъри
PPSX
Sergey Kh Citrus Systems 2009
PDF
Adobe illustrator cs3 руководство пользователя (2007)
PPTX
HighLoad Sites, Oleg Bunin
PPTX
Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...
PDF
lenvendo on bitrix cms
PDF
Competitions Cloudwatcher_new
PPTX
ProMedia about Ambient Media
PDF
Quick and Clean with Ruby on Rails
PDF
презентация Uni Pacs
PDF
исчезнут ли российские эпс
PDF
АСКУЭ для ТГК
Как составить метатеги TITLE и DESCRIPTION для интернет-магазина
Прорывные идеи. Как поставить их на поток?
CMS Joomla! 1.5.x Tutorial (In Ukrainian)
07 Ws08 R2 Virt
04 Ukr Prostir Web2
Internet Marketing at the Time of Crisis
프레젠테이션1
SEO за блогъри
Sergey Kh Citrus Systems 2009
Adobe illustrator cs3 руководство пользователя (2007)
HighLoad Sites, Oleg Bunin
Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...
lenvendo on bitrix cms
Competitions Cloudwatcher_new
ProMedia about Ambient Media
Quick and Clean with Ruby on Rails
презентация Uni Pacs
исчезнут ли российские эпс
АСКУЭ для ТГК
Ad

Viewers also liked (20)

PPT
Drupal Paranoia
PDF
Lviv 2013 d7 vs d8
PDF
Multilangaunguage Drupal
PPT
Работа с Views в Drupal 7
PDF
Zend Framework Form: Mastering Decorators
PDF
AngularJS in practice
PPT
Работа с полями (fields) в Drupal 7
PPT
Работа с материалами (nodes) в Drupal 7
PPTX
Who is here? DrupalCamp Kyiv 2009 opening
PDF
Drupal code sprint для новичков
PDF
Drupal на 20-ти мегабайтах или издевательства над Shared Hosting
DOCX
Happy ever afters with ci workflow
PPT
Порівняння Drupal та Typo3
PDF
CIbox - OpenSource solution for making your #devops better
PDF
Drupal contrib module maintaining
PDF
Live deployment, ci, drupal
ODP
Історія, теорія та використання CMS Drupal
PDF
Drupal 8 DevOps . Profile and SQL flows.
PDF
DrupalCon Los Angeles - Continuous Integration Toolbox
PPTX
Drupal Continuous Integration Workflow
Drupal Paranoia
Lviv 2013 d7 vs d8
Multilangaunguage Drupal
Работа с Views в Drupal 7
Zend Framework Form: Mastering Decorators
AngularJS in practice
Работа с полями (fields) в Drupal 7
Работа с материалами (nodes) в Drupal 7
Who is here? DrupalCamp Kyiv 2009 opening
Drupal code sprint для новичков
Drupal на 20-ти мегабайтах или издевательства над Shared Hosting
Happy ever afters with ci workflow
Порівняння Drupal та Typo3
CIbox - OpenSource solution for making your #devops better
Drupal contrib module maintaining
Live deployment, ci, drupal
Історія, теорія та використання CMS Drupal
Drupal 8 DevOps . Profile and SQL flows.
DrupalCon Los Angeles - Continuous Integration Toolbox
Drupal Continuous Integration Workflow
Ad

More from Drupal Camp Kyiv (20)

PDF
DrupalCamp Kyiv 2009 Official Report
PPT
Что нового в Drupal 7
PPT
Безопасный код
PPTX
1day Opening
PPTX
2day Opening
PPTX
How to Make a Barcamp
RTF
Текст доклада о разработке плагина к модулю ССК
ODP
Обслуживание мультисайтинга
ODP
Разработка соц. сети на Друпале
PPTX
За что мы ненавидим Drupal
PPT
Gallery API
PPT
Drupal Do
PPT
Drupal 7 development: first impressions
PPT
Drupal on ASP.Net
PPT
Веб-аналитика в Drupal2
PPT
Веб-аналитика в Drupal1
PPT
Разработка модуля для Cms Drupal
PPT
Продвинутый мультисайтинг
ODP
Азы мультисайтинга
DrupalCamp Kyiv 2009 Official Report
Что нового в Drupal 7
Безопасный код
1day Opening
2day Opening
How to Make a Barcamp
Текст доклада о разработке плагина к модулю ССК
Обслуживание мультисайтинга
Разработка соц. сети на Друпале
За что мы ненавидим Drupal
Gallery API
Drupal Do
Drupal 7 development: first impressions
Drupal on ASP.Net
Веб-аналитика в Drupal2
Веб-аналитика в Drupal1
Разработка модуля для Cms Drupal
Продвинутый мультисайтинг
Азы мультисайтинга

Многоязычие сайта на Drupal

  • 1. imgfield tnid tnid=1 tnid=1 node/nid node/2 node/1 country Ukraine Украина city Kiev Киев author Grigory NAUMOVETS Григорий НАУМОВЕЦ body Problems , solutions, workarounds, and “goodness on the way” Проблемы, решения , перспективы title Multilingual sites in Drupal Многоязычие сайта на Drupal
  • 2. План В чём задача и в чём проблема Интернационализация Drupal 5 (кратко) Интернационализация Drupal 6: Как устроена Как её применять на практике Какие при этом возникают проблемы и как их решать Чего ждать от Drupal 7
  • 3. Какие ВОЗМОЖНОСТИ мы хотим иметь при создании многоязычных сайтов? Содержание доступно на разных языках На любой странице - переключение языка и попадание на аналогичную страницу Переключение необходимых элементов оформления (логотипов, заголовков и пр.) Интерфейс пользователя доступен на разных языках (желательно) Управление языком интерфейса администратора независимо от интерфейса пользователя Удобство управления сайтом (в принципе, можно создать отдельные сайты на разных языках и с каждой статьи вручную проставлять ссылки на иноязычные аналоги – но насколько это будет удобно???)
  • 4. ВОЗМОЖНОСТЬ vs ЦЕЛЕСООБРАЗНОСТЬ А нужен ли нам на самом деле «сферический многоязычный сайт в вакууме»? Проблема актуальности: какая-то часть содержания может быть неинтересной и бесполезной для иноязычной аудитории Проблема наполнения: кто будет переводить содержание? Сами авторы и редакторы? Специально нанятые переводчики? А что делать с user-generated content?
  • 5. Многоязычные сайты с user-generated content : отдельно или вперемешку? Wikipedia : фактически отдельные сайты для каждого языка, связанные через interwiki- ссылки, общий логин , Wikimedia commons и т.п . Youtube: Видеоматериалы и комментарии к ним на разных языках вперемешку, язык интерфейса переключается, но основное содержание общее.
  • 6. Если бы многоязычие с самого начала было заложено внутрь друпаловской ноды… node/1 (multilingual) Title (lang1) Title (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 Title Body Some field Another field Title Body Some field Another field
  • 8. Кодировка содержания в Drupal Единственное, что утешает – content= “ text/html; charset=utf-8 ” Содержание всегда отдаётся в кодировке utf-8 (8- битное представление Unicode), и нет нужды подбирать кодировку, в которой будет правильно видно содержание, пользовательский интерфейс и всё прочее.
  • 9. Drupal 5: Поддержки многоязычия в ядре - НЕТ В баз е данных нет полей, описывающих язык ноды и связь с её переводами на другие языки Многоязычие возможно только за счёт установки дополнительных модулей Модули , за сч ёт которых реализуется многоязычие: i18n или Localizer
  • 10. Почему ”i18n”? i nternationalizatio n  i18n 18 штук ниасилили 10 штук ниасилили L ocalizatio n  L10n Сокращения “ i18n ” и “ 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 Localizer: два способа сделать многоязычным сайт на Drupal 5
  • 12. i18n vs Localizer: Боливар не в ынес ет двоих Разработка Localizer’ а прекращена на стадии 5.x-3.13 . Версии для Drupal 6 нет и не будет
  • 13. Многоязычие в ядре Drupal 6 node.language node.tnid (= original node’s nid) node.translate (translation status) В таблице “node” появились три дополнительных поля
  • 14. Многоязычие в ядре Drupal 6 Два дополнительных модуля (по умолчанию отключены): Locale (locale.module) – общая поддержка дополнительных языков и перевод интерфейса Content translation (translation.module) – перевод содержания
  • 15. Многоязычие в ядре Drupal 6 Казалось бы, этого уже достаточно, чтобы делать многоязычные сайты – но… при попытке это сделать сразу возникают проблемы: Меню, блоки, таксономия Заголовок сайта, слоган, миссия Интеграция с Views , значения и ярлыки в полях CCK, работа с приложенными файлами и т.д. и т.п. Как всё это перевести и в зависимости от языка показать всё нужное и спрятать всё ненужное? Без дополнительных модулей средства Drupal 6 для создания многоязычных сайтов совершенно недостаточны.
  • 16. Многоязычие в ядре 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 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 ( запущены в начале 2009 ). Заодно и код (D6 core & i18n) доработали…
  • 20. Примерный список задач: что нужно сделать для интернационализации сайта Модули : Установка и включение нужных (Content translation, Locale, i18n, i18n submodules), редактирование settings.php. Языки : Включение нужных Типы контента : Включение многоязычия для нужных типов (при этом, если нужно – задание синхронизации для выбранных полей: например, приложенных файлов, изображений, дат, таксономии и т.п.) Переключатель языка : вывести (стандартный блок или сниппет, встраиваемый в шаблон темы) Главная страница, название сайта, footer и т.п.: настроить в соответствии с языком Pathauto : Если нужно – подстроить автоматические URL с учётом языка Ноды : Подготовка к переводу - задать язык, если нода считается language-neutral; создание переводов Меню : Перевод или дупликация, настройка в соответствии с языком Блоки : Перевод или дупликация, настройка видимости по языкам и URL’ам Тема : Если есть параметры, зависящие от языка – подстроить Permissions : Настроить права доступа на перевод содержания и интерфейса Решение непредвиденных проблем и прочее
  • 21. Для всех этих процедур есть довольно подробные инструкции drupal.org/node/338018
  • 23. Многояз ычные переменные: 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 , в форме видна приписка: “This is a multilingual variable” . Переключ ая языки, задайте и сохраните нужные значения для каждого языка ‘ site_name' ‘ site_slogan' ‘ i18n_variables'
  • 25. Система перевода строк интерфейса Ядро D6 : поиск и перевод строк из встроенного интерфейса ( code-based strings ). Субмодуль i18n . strings : + строки из меню, блоков, таксономии и т.д. ( user-entered strings ).
  • 26. Многоязычная таксономия Выбор варианта: общие категории для всех языков или разные для разных языков
  • 27. Многоязычная таксономия Вариант 1: общие категории ( common terms ) taxonomy/term/1 ( для всех языков ) (EN) Dogs Everything about dogs (RU) Собаки Всё о собаках Перевод названия - через систему перевода интерфейса
  • 28. Многоязычная таксономия Вариант 2 : категории раздельно по языкам ( per language terms ) taxonomy/term/1 (EN) Dogs Everything about dogs Собаки Всё о собаках taxonomy/term/2 (RU) Объявляем категории переводами друг друга. ( Ну и на что это влияет? SFW?)
  • 29. Блоки Можно настроить видимость по языку: на всех языках или на каком-то одном Два варианта: Один блок, видимый на всех языках, с переводом заголовка и содержимого через систему перевода интерфейса Отдельный блок для каждого языка Mutlilingual Block Translatable Title (переводимый заголовок) Translatable Content ( Переводимое содержание) English Block English Title English Content Русскоязычный блок Русский заголовок Русскоязычное содержание
  • 30. 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 ) , таксономию (категории, общие для разных языков ) и т.п., можно дублировать , а можно и переводить . node/2 node/1 Системн ый адрес ссылки О нас About us Текст в меню ru/about en/about URL
  • 34. Primary & secondary links Для них настройки видимости пунктов меню могут не срабатывать: видны лишние кнопки, которые для данного языка нужно спрятать. Причина: во многих темах их вывод описан не так, как вывод блоков и обычных меню drupal.org/node/313302
  • 35. Многоязычные primary & secondary links : решение проблемы через многоязычные переменные settings.php: $conf['i18n_variables'] = array( // Primary and secondary links 'menu_primary_links_source', 'menu_secondary_links_source', ); 'menu_primary_links_source' 'menu_secondary_links_source'
  • 36. Субмодуль i18nsync : синхронизация полей при переводе Синхронизируемые поля указываются в настройках свойств типа материала. Например, можно синхронизировать Приложенные файлы Приложенные фотографии Даты проведения мероприятия Ссылки и т.п.
  • 37. i18nsync и nodereference Для синхронизации nodereference нужно у node/4 переключить ссылку с node/1 на 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) Питер Грин (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 experimental module Node/1 (en) Node/2 (uk) Node/3 (ru) comments
  • 40. Ошибки, связанные с темами Если вы всё переводите правильно, но какой-то элемент интерфейса перевести не удаётся, ошибка может быть связана с темой Проверьте, воспроизводится ли ошибка, если сменить тему на стандартную.
  • 41. Пример проблем, связанных с темой Проблема 1: независимо от текущего языка, ссылка с логотипа и названия сайта ведёт на главную страницу на языке по умолчанию Logo Title ( En) Main Page Logo Title Logo (Ru) Главная страница link link link link Page Title Logo Страница Title Logo
  • 42. Пример проблем, связанных с темой Проблема 2: таксономические таги к нодам выводятся в непереведенном виде Проверка: переключение на стандартные темы ( Garland etc.) ; обе проблемы исчезают проблемы связаны с темой Тема сделана на основе Acquia Marina Проблема может затронуть и другие темы на основе Acquia Marina – Waffles, Black Mamba, etc.
  • 43. Решение этих двух проблем, связанных с темой Проблема 1: замена ссылки в page.tpl.php: $base_path check_url($front_page) ( как в стандартных темах) Проблема 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)) drupal.org/node/494068
  • 44. Поля CCK: список разрешённых значений и текстовых ярлыков к ним AL|Albania AM|Armenia . . . Albania Текстовые ярлыки должны переводиться через систему перевода интерфейса: Албания A rmen ia Армения Но реально перевод работает не всегда: бывает, что одни строки поиск находит, а другие нет. Есть трюк с заданием значений поля CCK через php- код: return array( 'AL' => t('Albania'), 'AM' => t('Armenia') ); Некоторые строки после этого находятся поиском, другие всё равно нет. Запуск и перезапуск cron, «дергание» сайта за ноды и виды, прочие танцы с бубном. WTF ?? ? drupal.org/node/293297
  • 45. Поля CCK: проблема перевода текстовых ярлыков к разрешённым значениям Предложение neochief: Субмодуль i18ncck Патч для CCK, обеспечивающий корректное взаимодействие с i18ncck и нахождение при поиске всех строк, которые нужно перевести. drupal.org/node/531660 drupal.org/node/53166 2
  • 46. Объекты и методы их перевода Загрузка .po файлов с переводом, отдельные строки - система перевода строк Интерфейс C истема перевода строк; танцы с бубном Поля CCK и ярлыки к разрешённым значениям Добавление фильтра по языку; заголовки и подписи – система перевода строк Вид ы Как обычные меню; если проблемы – добавить к списку м ногоязычных переменных i18n Primary & secondary links Перевод (система перевода строк) или дублирование пунктов – в зависимости от того, меняется ли ссылка Меню Перевод названия и содержания (система перевода строк) или дублирование Блоки Многоязычные переменные i18n Название сайта, slogan, footer, etc. Перевод (система перевода содержания) Ноды
  • 47. Модуль “ L anguage sections ” « Суррогат » многоязычного поля с маркерами языка в качестве разделителя Можно использовать в блоке, «шапке» views и т.п. Иногда это проще и быстрее, чем переводить блок или «шапку» через систему перевода строк === e n === Engl ish text === ru === Русский текст === qz === Текст на прочих языках === qq === Т екст, не зависящий от языка This is some =en= English =ru= Russian =qq= text Не обязательно задавать параграфы целиком - можно использовать маркеры языка внутри одной строки
  • 48. Модуль “Translation Table” Встраивается в систему перевода интерфейса Добавляет закладки: «Таксономия» «Тип содержимого» «Меню» Облегчает перевод названий и описаний таксономических категорий, пунктов меню, названий и описаний типов контента и их полей
  • 49. Модуль Translation table встраивается в систему перевода интерфейса
  • 50. Модуль “ Localization client ” (L10n_client) Кнопка внизу экрана позволяет вызов прямо с просматриваемой страницы. Выводится список используемых строк интерфейса, в котором можно найти нужную, тут же перевести и сохранить перевод. Возможен конфликт с img_assist (drupal.org/node/273511)
  • 51. Модуль “Translation overview” Помогает организовать работу по переводу содержания сайта Выводится список нод, помеченный флажками: непереведенные, переведенные, перевод устарел. Можно вывести список нод, ожидающих перевода на такой-то язык (задание для переводчика)
  • 52. Drupal 7 : наступит ли «многоязычная благодать»? groups.drupal.org/node/ 19671
  • 53. В списке задач по поддержке многоязычия в Drupal 7 Включение в ядро D7 ряда возможностей модуля i18n : Многоязычные блоки, меню и т.п.; Многоязычные переменные Перевод строк, заданных пользователем Улучшение интерфейса системы перевода строк Управление языком интерфейса независимо от языка содержания Translatable fields (поддержка перевода полей в Fields API )