Многоязычный WordPress с WPML

  1. Как работает WPML и стандарты
  2. Делать реальные запросы
  3. Логическая структура шаблона
  4. Полезные функции WPML
  5. Icl_object_id: получить идентификатор переведенного контента
  6. Icl_link_to_element: ссылка на локализованный контент
  7. Icl_get_languages: список доступных языков
  8. Удалите ненужные CSS и JS
  9. Переводы статического содержания
  10. Различные функции перевода
  11. __ («перевод строки», «домен»)
  12. _e («цепочка для перевода», «домен»)
  13. _x («строка для перевода», «контекст», «домен»)
  14. _n («строка-единственное число для перевода», «строка-множественное число-для перевода», количество,...
  15. wp_sprintf (__ («Я% s», «домен»), $ name)
  16. Переведите слагов из типов постов
  17. Hooker дополнительные тексты
  18. Перевести другой контент
  19. Выбор контента для перевода
  20. Совместимые расширения

Если вы хотите создать многоязычный сайт на WordPress, у вас есть выбор между некоторыми расширениями: qTranslate , Xili language , Multilingual Press ... и WPML . Последний действительно выделяется ,

Этот плагин, в настоящее время в версии 3.0.1, существует с 2009 года, имеет большое сообщество и отзывчивую поддержку.
Его полная лицензия стоит 79 долларов - цена, которая является вполне разумной и быстро амортизируется в ходе проектов.

Если вы протестировали и одобрили, вам все равно нужно понять, как это работает для разработки совместимых тем.

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

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

Разработка многоязычной темы WordPress

Как работает WPML и стандарты

Плагин во время установки создаст несколько таблиц в вашей базе данных. Один из них (* icl_translations ) будет использоваться для хранения соответствия между статьями, таксономиями и элементами разных языков. Например, вы найдете такую ​​информацию:

Страница с идентификатором 90 является английской версией страницы с идентификатором 4, которая является французской и относится к группе перевода 122

Во время каждого запроса WordPress WPML проверяет в этой таблице, что запрошенный объект соответствует текущему языку, или находит его соответствие. Затем он будет использовать хуки, такие как posts_where , чтобы отфильтровать результат запроса и сохранить только содержимое активного языка.

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

Делать реальные запросы

Некоторые из проблем, с которыми вы столкнетесь в WPML, возможно, связаны с «экзотическими» запросами.

Расширение использует хуки для изменения поведения WordPress; использование класса WP_Query - лучший способ убедиться, что он работает правильно (возвращаемые объекты будут хорошо отфильтрованы). Вы сможете использовать идентификаторы элементов или слагов типов записей, но не имена (которые будут переведены).

Очевидно, что вы должны запретить запросы SQL для содержимого прерывателя ( LOL ). Вам также следует избегать использования get_post () и get_posts ().

По умолчанию функция get_posts извлекает все содержимое без применения фильтров. Если у вас включен WPML и вы используете эту функцию, вы получите не только нужную статью, но и все эти переводы.

На мой взгляд, мы вполне можем обойтись без get_posts и предпочитаем использовать настоящий WP_Query . Однако, если вы не можете обойтись без get_posts, знайте, что вам просто нужно передать аргумент suppress_filters в false, чтобы плагин мог выполнять свою работу.

Логическая структура шаблона

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

Использование шаблона иерархии является основательным. Некоторые премиальные темы используют пользовательские шаблоны страниц для отображения архивов пост-типа. На тех WPML будут потеряны ... Аналогично, если ваши циклы вкладывают другие циклы ...

Если ваша тема логична, расширение не составит труда привить.

Полезные функции WPML

Этот плагин перевода предоставляет разработчикам некоторые «теги шаблона» для упрощения интеграции WPML в их темах.
Я объясню работу наиболее полезных ее функций.

Просто подумайте, что WPML не обязательно будет установлен при активации вашей темы; поэтому необходимо проверить их поддержку через:

функция существует

<? php if (function_exists ('icl_get_languages')) {// ... Делать вещи}

Icl_object_id: получить идентификатор переведенного контента

Среди основных функций WPML наиболее важной мне кажется icl_object_id . Позволяет получить идентификатор статьи в соответствии с ее языком.

Он должен использоваться в двух случаях:

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

Эта функция принимает до 4 аргументов в следующем порядке:

  1. идентификатор контента (обязательно)
  2. тип контента, если вы его не знаете, вы, вероятно, сможете найти его в глобальном $ post (обязательно)
  3. логический аргумент (по умолчанию false), указывающий, следует ли возвращать идентификатор элемента на языке по умолчанию, если перевод не существует
  4. нужный язык (необязательно) код языка (две буквы) идентификатора контента, который вы хотите получить

Icl_link_to_element: ссылка на локализованный контент

Полезность этой функции заключается в создании локализованных ссылок на содержимое. Это позволяет избежать создания get_permalink для icl_object_id . Лично я предпочитаю быть хозяином своих ссылок и редко им пользуюсь.

Это не значит, что это вам не пригодится. Вот его параметры:

  1. идентификатор контента, на который вы хотите направить ссылку
  2. тип целевого контента (страница / пост / категория / тег)
  3. текст ссылки , он может содержать HTML
  4. массив аргументов , которые будут добавлены в get к URL ссылки
  5. якорь ссылки , если вам нужно указать ее на конкретный элемент целевой страницы
  6. логическое значение, указывающее, хотите ли вы напечатать ссылку или просто вернуть ее (по умолчанию true)
  7. логическое значение (по умолчанию true) для возврата исходного содержимого, если перевод отсутствует

Icl_get_languages: список доступных языков

WPML автоматически предоставляет селектор языка, который можно отобразить с помощью функции do_action ('language_switcher'). Он может быть примерно персонализирован через администрацию, но не обязательно адаптируется к вашей модели.

Поэтому я использовал свой собственный переключатель языка, получая необходимую информацию с помощью функции icl_get_languages . Эта функция возвращает PHP-массив доступных переводов для текущего контента.

Он принимает массив аргументов, который может содержать следующие ключи:

  • skip_missing (логическое) указывает, следует ли отображать языки, на которых контент не переведен
  • orderby (id / code / name / custom) используется для выбора порядка упорядочения языков
  • order (asc или desc) в корреляции с orderby , он позволяет определять восходящий или нисходящий порядок отображения
  • link_empty_to (str), если для skip_missing установлено значение false, позволяет выбрать ссылку для подстановки (по умолчанию она вернется на главную страницу)

Поэтому эта функция возвращает таблицу, которая принимает следующую форму:

Array ([0] => Array ([id] => 1 [active] => 1 [native_name] => английский [отсутствует] => 0 [translation_name] => английский [language_code] => в [country_flag_url] => http://example.com/wpmlpath/res/flags/en.png [url] => http://example.com/about) [1] => Массив ([id] => 4 [active] => 0 [native_name] => английский [отсутствует] => 0 [переведенное_имя] => французский [language_code] => en [country_flag_url] => http://example.com/wpmlpath/res/flags/en.png [url] => http://example.com/en/about) [2] => Массив ([id] => 27 [active] => 0 [native_name] => Italiano [missing] => 0 [translation_name] => Итальянский [language_code] => it [country_flag_url] => http://example.com/wpmlpath/res/flags/it.png [url] => http://example.com/it/circa))

Вот пример, чтобы сделать выбор языка:

Пользовательский переключатель языка

<? php $ languages ​​= icl_get_languages ​​('skip_missing = 1'); foreach ($ languages ​​как $ l) if ($ l ['active']) echo '<div class = "flag"> <img src = "'. $ l ['country_flag_url']. '" alt = "см. l \ 'article in'. $ l ['translation_name']. '"> </ div>'; foreach ($ languages ​​as $ l) if (! $ l ['active']) echo '<a href="'. esc_url( $l['url']).'" class="flag"> <img src = "'. $ l [' country_flag_url '].'" alt = "см. статью в.. $ l ['translation_name']. '"> </a>';

Удалите ненужные CSS и JS

WPML всегда загружает файлы CSS и Javascript впереди, чтобы разрешить использование определенных компонентов (через шорткоды).
Если вы считаете, что не используете, вы можете отключить постановку в очередь этих элементов, присваивая некоторым константам значение true.

Просто добавьте эти строки в файл wp-config.php :

  • define ('ICL_DONT_LOAD_NAVIGATION_CSS', true), чтобы отключить постановку в очередь крошечных стилей расширения
  • define ('ICL_DONT_LOAD_LANGUAGE_SELECTOR_CSS', true) отключает загрузку стилей переключения языка по умолчанию
  • define ('ICL_DONT_LOAD_LANGUAGES_JS', true) предотвращает загрузку JavaScript переключателя языка (раскрывающийся список)

Плагин предоставляет некоторые константы для доступа к информации активного языка.

  • ICL_LANGUAGE_CODE вернет формат языка в формате ISO 639-1 (две буквы)
  • ICL_LANGUAGE_NAME предоставляет название текущего языка на своем собственном языке (например, французском)
  • ICL_LANGUAGE_NAME_EN возвращает название языка на английском языке

Переводы статического содержания

WPML предлагает простой интерфейс для управления вашим динамическим контентом, таким как статический контент. Однако все равно будет необходимо использовать обычные функции локализации для «жестких слов» вашей темы.

Различные функции перевода

Вот небольшое резюме этих функций ...

__ («перевод строки», «домен»)

Это самая основная из функций перевода. Требуется только два параметра: текстовая строка для перевода, затем домен перевода. Она просто вернет ваш переведенный текст.

Домен перевода - это po-файл, который управляет переводами ваших шаблонов. По умолчанию я призываю вас назвать его в качестве темы.

Может не заполняться, если перевод текста уже доступен в po- файле WordPress

_e («цепочка для перевода», «домен»)

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

_x («строка для перевода», «контекст», «домен»)

Эта функция работает подобно функции __ (), но позволяет контекстуализировать строку для перевода.

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

_n («строка-единственное число для перевода», «строка-множественное число-для перевода», количество, «домен»)

Некоторые тексты могут совпадать по количеству с элементом вне цепочки. Наиболее часто встречающийся пример - это комментарии: если есть только один комментарий, нужно написать « комментарий », а если их несколько, это будут « комментарии ».

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

wp_sprintf (__ («Я% s», «домен»), $ name)

Иногда вам нужно будет разместить переменные внутри статических текстов. Для этого предназначена функция wp_sprintf . Требуется как минимум два параметра:

  1. текст или текстовая функция для перевода (это то, что нас здесь интересует). Эта строка должна содержать хотя бы один знак (% s,% d), который будет заменен другими параметрами wp_sprintf
  2. переменные , которые придут, чтобы заменить знаки в переведенном тексте

Признаки могут быть:

  • % s простая строка символов
  • % d десятичное число
  • % f число с плавающей запятой
  • % 1 $ s , % 2 $ s , % 3 $ s ... эта запись позволяет вам изменять порядок параметров в строке (например, % 2 $ s вернет третий аргумент функции)

Фактически, wp_sprintf - это простой порт WordPress функции PHP sprintf , разница в том, что первый из них может быть подключен. Это удобно ;-P

Пока все ваши статические тексты содержатся в этих функциях, ваша тема может быть полностью переведена.

Для этого есть две возможности:

  • или используйте po- файл, сгенерированный из библиотеки pot , используя программное обеспечение poedit . Это стабильный метод, но поначалу он не обязательно прост в обращении.
  • использовать расширение, предоставляемое WPML: Перевод строк WPML

Для второго способа вам нужно активировать этот плагин baby в администрировании WordPress, затем перейти на вкладку « Расположение темы и плагинов» на вкладке WPML.

Затем в разделе « Цепочки темы » вы должны нажать « проанализировать тему цепочки » (да, я знаю, это не очень по-французски, как предложение ^^). Затем ваша тема будет отсканирована, а переводимые тексты будут проиндексированы и доступны на вкладке « Перевод строки » в меню WPML.

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

Ваши трудные тексты теперь переведены в фронт-офис.

Переведите слагов из типов постов

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

Но с последних версий это теперь возможно. Все происходит в объявлении пост-типа.

Перевести типы сообщений

<? php register_post_type ('book', array ('public' => true 'has_archive' => true, 'slug' => _x ('books', 'URL slug', 'domain')));

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

Hooker дополнительные тексты

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

Есть еще способ: простое восстановление этих опций. Этот метод деактивирует, однако, редактирование этих каналов через администрацию WordPress, но вы должны знать, что вы хотите ...

Перевести вариант

<? php add_filter ('option_option_to_translate', 'my_option_to_translate'); function my_option_a_traduire ($ text) {return __ ('новый текст', 'домен'); }

Перевести другой контент

Для всего остального контента на сайте использование плагина является относительно инстинктивным.

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

Просмотр списка статей

Выбор контента для перевода

По умолчанию только ваши статьи и страницы могут быть переведены. Если вы хотите создать версии своих категорий, тегов, типов записей и других таксономий, вам необходимо перейти в меню «Управление переводами», а затем на вкладку «Конфигурация многоязычного контента» (чтобы активировать этот экран, вы должны активировать мини- Плагин управления переводами WPML .

Вы обнаружите, что эта страница довольно длинная. Это нормально ...

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

Мы должны убедиться, что метаданные SEO WordPress могут быть переведены, чтобы обеспечить оптимальное SEO.

Начиная с версии 3, вы также можете переводить таксономии, перейдя непосредственно через подменю « Перевод таксономии » ...

Система перевода меню довольно проста в использовании. Каждое меню украшено языком и полем « Это меню является переводом ... ». Когда вы начинаете переводить меню, ошибки часто переходят на другие языки. Мы должны следить за этим ;-)

WPML связывает меню друг с другом независимо от «темы аренды». Таким образом, мы можем использовать функцию wp_nav_menu с атрибутом theme_location или атрибутом меню (но лучше всего использовать только theme_location, чтобы пользователь мог изменить его, не касаясь темы).

Здесь по-прежнему беспокоит небольшая деталь: элементы, которые можно поместить в переведенные меню, отображаются на этом языке. Таким образом, вы должны понимать голландский, чтобы разработать голландское меню ...

Чтобы преодолеть эту проблему, вот эти строки кода:

Перевести пункты меню

add_filter ('wp_setup_nav_menu_item', 'wpml_menus'); function wpml_menus ($ menu_item) {if (function_exists ('icl_object_id') && ICL_LANGUAGE_CODE! = 'en') {if ($ menu_item-> type == 'post_type') {$ menu_item_title = get_the_title (icl_obite_id (icl_object_id) , $ menu_item-> post_type, true, 'fr')); if ($ menu_item_title) $ menu_item-> post_title = $ menu_item-> post_title. '('. esc_html ($ menu_item_title). ')'; } elseif ($ menu_item-> type == 'taxonomy' &&! isset ($ menu_item-> post_title)) {$ menu_item_term = get_term (icl_object_id ($ menu_item-> term_id, $ menu_item-> object, true, 'en') , $ menu_item-> object); if ($ menu_item_term) $ menu_item-> title = $ menu_item-> title. '('. esc_html ($ menu_item_term-> name). ')'; }} return $ menu_item; }

Вы можете поместить их в плагин mu или в functions.php вашей темы. Благодаря хуку wp_setup_nav_menu_item мы просто модифицируем отображение пост-типа и таксономии в полях добавления пункта меню и добавляем перевод на французский язык.

Мы все еще находим это лучше ;-)

Совместимые расширения

WPML - один из самых популярных плагинов премиум-класса. Поэтому он относительно хорошо поддерживается большинством расширений WordPress. Более того вы найдете на сайте неисчерпывающий список совместимых плагинов ,

К минусам я знаю, что у него проблемы с «перенаправлениями», которые автоматически настраивают 301 переадресацию на исходный контент. Поэтому я советую вам использовать оба одновременно (и это позор, потому что этот плагин полезен для SEO).


Поэтому я советую вам использовать оба одновременно (и это позор, потому что этот плагин полезен для SEO)

Вот и все, теперь у вас есть больше карточек для адресации и использования расширения WPML. Не стесняйтесь поделиться своими примерами достижений!

О том, как смешивать свежевыжатые соки
Ни для кого не секрет, что стакан свежевыжатого овощного или фруктового сока, способен придать заряд энергии и бодрости, а также положительным образом отразиться на состоянии здоровья человека. При этом

Полный список кандидатов в президенты страны станет известен к концу января
9 января 2008, 15:53 Текст: editor На будущей неделе закончится срок приема документов для регистрации кандидатов в президенты. На принятие решения по документам у Центризбиркома будет десять дней. НОРИЛЬСК.

ЄДНІСТЬ : У Києві через високий рівень захворюваності на грип та ГРВІ закрили вже 75 шкіл
У Києві призупинено заняття у 75 школах (2127 класів), у яких рівень захворюваності на грип та ГРВІ перевищив 20%. Інформує  «Є!» , з посиланням на УНІАН. Про це наразі повідомив перший заступник

Список полезных заготовок из овощей и фруктов на зиму
Список полезных заготовок из овощей и фруктов на зиму Август и сентябрь — традиционно хлопотное время для многих хозяек, садоводов и дачников-любителей. В первую очередь необходимо собрать урожай или

Березовый сок можно ли использовать при сахарном диабете
Березовый сок при сахарном диабете — сахарный диабет: все о заболевании и методах лечения Березовый сок с давних времен славится своими целебными свойствами. Дело в том, что в весенний период береза

Свежевыжатые соки. (кому не лень читать)
Вы видели фильм о , которую исследовал японский ученый Имоту Масара? Уникальные опыты показали, что структурированная жидкость может творить чудеса и оздоравливать наши клетки, омолаживая организм

Купажирование и подслащивание соков
Некоторые соки иногда бывают пресными, слишком кислыми или недостаточно сладкими. Чтобы такие соки были полноценными по вкусовым и питательным качествам, к ним добавляют соки из того же вида сырья, но

Лечение рака по Бройсу и др
Лечение Рака по Бройсу. (Рудольф Бройс) «Совсем недавно китайские медики обнаружили, что у онкобольных количество микроэлементов в печени, в волосах и некоторых других органах резко снижено. Возможно,

С каким соком пить водку?
Ответ: С каким соком пить водку? ВИНОВАТ АНТИАЛКОГОЛЬНЫЙ ФЕРМЕНТ - Владимир Георгиевич, главный вопрос

Сок добрый
Министерство общего и профессионального образования Российской Федерации Санкт-Петербургский Государственный Технологический институт (Технический университет) Факультет Экономики и