Как интернационализировать ваш сайт WordPress
Опубликовано: 2022-03-1030 сентября 2017 года международное сообщество WordPress объединилось на 24 часа для перевода экосистемы WordPress. В третий раз #WPTranslationDay объединил марафон перевода в течение всего дня с цифровыми мероприятиями и днями участников, призванными продвигать ценность создания доступных возможностей для пользователей со всего мира, более известного как «локализация».
Как сообщество открытого исходного кода, мы все должны стремиться к локализации нашего вклада в открытый исходный код. Прежде чем вы сможете транскрибировать свои цифровые активы, вы должны интернационализировать свою кодовую базу.
Термины «интернационализация» и «локализация» часто используются взаимозаменяемо, хотя технически они представляют собой два разных аспекта процесса перевода.
- Интернационализация (I18N) — это процесс интернационализации или адаптации вашей темы или плагина для перевода на любой язык мира.
- Локализация (L10N) — это последующий процесс локализации или перевода интернационализированных инструментов на заданный язык.
В настоящее время WordPress полностью локализован для более чем 65 языков и предлагает частичные переводы для дополнительных 95 языков. Международное использование продолжает расти по мере введения большего количества локализаций.
Неанглоговорящие пользователи WordPress превзошли англоговорящих пользователей в 2014 году, и они непреднамеренно продолжают снижать долю англоязычных пользователей в 2017 году по мере роста таких инициатив, как #WPTranslateDay.
Поскольку WordPress становится все более доступным с точки зрения языка, знание I18N и L10N необходимо разработчикам плагинов и тем для процветания в глобальной экономике WordPress. Для масштабирования бизнеса эти навыки разработки могут открыть двери на зарубежные рынки. Веб-доступность, включая языковую доступность, полезна для бизнеса и лучше для людей.
В продолжение #WPTranslationDay , вот обновленное руководство по интернационализации ваших плагинов и тем WordPress.
Вот краткий обзор процесса, который мы будем изучать сегодня.
- Открытие
- Знакомство с файлами перевода
- ПОТ-файл
- PO-файл
- МО-файл
- GlotPress и языковые пакеты
- Резервное копирование и подготовка среды
- Знакомство с файлами перевода
- Плагин I18N
- Заголовок плагина
- Загрузить текстовый домен
- Аудит строк
- Создать файл POT
- Тема И18Н
- Заголовок темы
- Загрузить текстовый домен
- Аудит строк
- Создать файл POT
- JavaScript I18N
- Дополнительные ресурсы
Открытие
Познакомьтесь с файлами перевода
WordPress использует библиотеку GNU gettext для упрощения I18N.
Во-первых, давайте познакомимся с файлами перевода gettext, созданными на протяжении всего процесса.
Файл шаблона переносимых объектов (POT)
В процессе I18N мы будем использовать инструмент для поиска интернационализированных строк и создания файла POT, содержащего весь переводимый текст в ваших плагинах и теме.
Переносимый объектный файл (PO)
По внешнему виду между файлом POT и файлом PO нет заметных различий. Они синтаксически одинаковы и различаются только по назначению.
После создания POT-файла текстовые строки должны быть переведены переводчиком на предпочитаемый вами язык. В конечном итоге файл PO будет содержать текстовые строки на вашем родном языке, а также соответствующие переводы.
Объектный файл машины (MO)
Наконец, файл PO преобразуется в машиночитаемый документ или файл Machine Object. Этот файл будет находиться в каталоге вашей темы или плагина, чтобы WordPress мог его вызвать, когда придет время предоставить переведенную версию.
Резервное копирование и подготовка среды
Перед изменением какой-либо разметки сделайте резервную копию своего плагина, темы или всего сайта (что бы вы ни интернационализировали!) и приведите в порядок свои среды разработки.
Обязательно проведите быстрый аудит плагинов, если планируете локализовать свой сайт. Удалите или деактивируйте все плагины, которые вы больше не используете. Этот быстрый аудит сэкономит вам время в долгосрочной перспективе.
Интернационализируйте свои плагины
ЗАГОЛОВОК ПЛАГИНА
Во-первых, мы обновим заголовок плагина. В частности, текстовый домен и путь к домену .
Пример заголовка плагина
/* Plugin Name: My Rad Plugin Plugin URI: https://myradplugin.com Description: Custom Plugin That Makes My Site Rad Author: Rad Plugin Creator Version: 1.0 Author URI: https://radplugincreator.com Text Domain: rad-plugin Domain Path: /languages/ */
Текстовый домен
Текстовый домен — это уникальный идентификатор WordPress для распознавания всего текста, принадлежащего плагину, и он должен соответствовать slug плагина .
Это особенно важно, если ваш плагин размещен на WordPress.org; они должны совпадать, чтобы GlotPress правильно импортировал переводы для вашего плагина.
В нашем примере файл плагина называется rad-plugin.php, а текстовый домен — rad-plugin .
Возможно, у вас уже есть набор текстовых доменов. Если вы этого не сделаете, не забудьте использовать дефисы, а не символы подчеркивания.
Путь к домену
Путь домена — это папка, в которой будут находиться окончательные файлы перевода. Вам следует создать новую папку в каталоге плагина, например, /languages/ , и обновить путь домена, чтобы WordPress точно знал, где искать файлы перевода.
ЗАГРУЗИТЬ ТЕКСТОВЫЙ ДОМЕН
Далее мы собираемся загрузить текстовый домен, добавив в наш код следующую функцию.
load_plugin_textdomain()
load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path );
Если файл перевода доступен для языка пользователя, функция загрузки текстового домена сообщит WordPress о его доставке.
Параметры
- $domain — текстовый домен (обязательно)
- $abs_rel_path — false (необязательный, устарел)
- $plugin_rel_path — /languages/ (необязательно, это относительный путь к каталогу, содержащему ваши файлы перевода. В нашем примере /languages/. Начиная с версии 4.6, WordPress будет искать эти файлы в каталоге плагина /languages/, если это идет неопределенно.)
Пример плагина Rad
Чтобы загрузить текстовый домен, мы подключимся к действию «plugins_loaded».
add_action( 'plugins_loaded', 'rad_plugin_load_text_domain' ); function rad_plugin_load_text_domain() { load_plugin_textdomain( 'rad-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); }
АУДИТ СТРИНГОВ
Следующий шаг — обернуть все текстовые строки плагина в функции перевода.
Наиболее распространенными функциями перевода являются __()
для возврата переведенной строки и _e()
для отображения переведенной строки.
Пример плагина Rad
__() $text = __( 'Super Rad!', 'rad-plugin' );
Эта функция будет работать для простых переводов. Он учитывает два параметра; текстовая строка и текстовый домен .
_e( 'Super Rad!', 'rad-plugin' );
Эта функция просто повторяет значение. В противном случае она работает точно так же, как и предыдущая функция.
Существует множество дополнительных функций перевода, которые также следует использовать при необходимости.
Другие основные функции
__() _e() _x() _ex() _n() _nx() _n_noop() _nx_noop() translate_nooped_plural()
Функции даты и числа
number_format_i18n() date_i18n()
Функции выхода
Не забудьте экранировать любые данные, которые выводятся, используя следующие функции экранирования.
esc_html__() esc_html__() esc_html_x() esc_attr__() esc_attr_e() esc_attr_x()
В нашем примере с Rad у нас может быть строка кода плагина, которая выглядит так:
function create_section() { esc_html_e( 'Below are your settings for Rad Plugin', 'rad-plugin' ); }
СОЗДАЙТЕ ФАЙЛ ПОТ
Последним шагом является создание файла POT. Существует несколько различных инструментов для создания файлов такого типа, но в этом руководстве мы будем придерживаться рекомендаций из кодекса WordPress и использовать Poedit, простой в использовании графический интерфейс для управления переводами.
Примечание . Если ваш плагин или тема уже есть в репозитории WordPress.org, вы можете пропустить этот процесс и создать файл POT со страницы администратора. В этом случае нет необходимости создавать файл .po для каждого языка. Внедрение GlotPress и языковых пакетов в 2015 году упростило процесс перевода; все, что нужно для GlotPress, — это файл .pot, который будет импортирован WordPress.org и предоставлен переводчикам через панель управления translate.wordpress.org. Соавторы со всего мира будут использовать эту панель инструментов для предоставления переводов в #WPTranslateDay.
Скачать Poedit
Настройка Poedit
Свойства перевода
Начните с перехода в « Файл» > « Создать ». Затем выберите родной язык вашего плагина и нажмите OK .
Затем выберите Каталог > Создать . Введите название проекта, версию, контакт и язык.
Пути
Далее выберите вкладку Sources Paths . Если это новый файл, сначала его нужно сохранить.
Следуя нашему примеру, мы бы выбрали « Файл» > « Сохранить как », чтобы сохранить как файл .po в каталоге /languages/ внутри rad-plugin. Опять же, имя файла должно соответствовать слагу вашего плагина.
rad-plugin.po
После сохранения введите относительный путь к каталогу, в котором будут храниться ваши файлы перевода. В этом случае языки .
Ключевые слова
Выберите вкладку Источники ключевых слов. Щелкните значок + , чтобы добавить соответствующие названия функций.
Шпаргалка
__ _e _x _ex _n _nx _n_noop _nx_noop translate_nooped_plural number_format_i18n date_i18n esc_html__ esc_html__ esc_html_x esc_attr__ esc_attr_e esc_attr_x
После этого вы можете нажать «ОК», а затем «Файл» > «Сохранить» .
Poedit сохранит файлы .mo и .po. Вы можете создать файл .pot, скопировав файл .po и добавив расширение .pot. Международные пользователи могут использовать файл шаблона .pot для перевода строк на свой язык.
Интернационализируйте свою тему
Процесс интернационализации вашей темы практически идентичен I18N для плагинов. Мы начнем с проверки заголовка темы и закончим созданием другого файла POT.
ЗАГОЛОВОК ТЕМА
Дважды проверьте заголовок вашей темы, чтобы убедиться, что ваш текстовый домен и путь к домену установлены.
Пример заголовка темы
/* Theme Name: Rad Theme Author: Rad Theme Author Text Domain: rad-theme Domain Path: /languages/ */
ЗАГРУЗИТЬ ТЕКСТОВЫЙ ДОМЕН
На этот раз следующим шагом будет загрузка текстового домена в файл functions.php вашей темы.
load_theme_textdomain()
load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' );
Чтобы эти файлы загружались, вы должны зарегистрировать их с помощью действия after_setup_theme.
add_action( 'after_setup_theme', 'rad_theme_setup' ); function rad_theme_setup() { load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' ); }
АУДИТ СТРИНГОВ
Время для очередной ревизии струн! К этому моменту вы должны быть знакомы с основными функциями перевода.
Давайте посмотрим на более сложные переводы.
Заполнители
Переменные PHP, подобные приведенному ниже примеру, не будут правильно переведены без использования заполнителей.
echo "We added $count rad points.";
printf() и спринтf()
Эти функции используют заполнители, такие как %s или %d для целых чисел, для интерполяции строки текста с динамическим содержимым.
Пример темы Rad
/* Translators: %d is the number of rad points added */ printf( esc_html__( 'We added %d rad points.', 'rad-plugin' ), $count );
множественное число
Функция _n()
может обрабатывать более сложные переводы строк, такие как множественное число, но использовать ее не рекомендуется из-за ее ограничений в программном обеспечении для перевода. Вместо этого вы можете написать простой оператор if, чтобы различать слова в единственном и множественном числе.
Пример плагина Rad
If ( 1 === $rad_points_found ) { $message = __( '1 rad point', 'rad-plugin' ); } else { /* Translators: %s is the number of rad points found */ $message = sprintf( __( '%s rad points' , 'rad-plugin' ) , $rad_points_found ); }
СОЗДАТЬ ФАЙЛ ПОТ
Процесс создания POT-файлов темы такой же, как и создание POT-файлов плагина. Изучите некоторые методы ниже.
Командная строка
С WordPress Trunk и установленным пакетом GNU gettext вы можете легко выполнить этот шаг, запустив скрипт makepot.php в командной строке.
Откройте командную строку и перейдите в каталог инструментов I18N.
cd wpdev/tools/i18n/
Скрипт должен выглядеть примерно так:
php path/to/makepot.php wp-theme path/to/rad-theme rad-theme.pot
Скрипт сделает свое дело, и готовый файл rad-theme.pot окажется в текущем каталоге.
Грунтовые задачи
Другой метод создания POT-файла — запустить задачи Grunt с помощью grunt-wp-i18n или grunt-pot. Запускатели задач, такие как Grunt, могут автоматизировать множество утомительных задач, таких как создание файлов POT.
Чтобы создать файл POT, сначала убедитесь, что у вас установлен node.js. Затем установите Grunt в свой языковой каталог через командную строку, и все готово. Теперь вы можете быстро запустить эти команды I18N и создать файл перевода, не выходя из командной строки.
JavaScript I18N
Если вы разработчик современной темы или плагина, скорее всего, вы используете JavaScript для обработки некоторых компонентов вашего проекта. wp_localize_script — это эффективная функция для извлечения данных PHP для предоставления вашим сценариям, и это единственный способ перевести JavaScript внутри WordPress.
WP_LOCALIZE_SCRIPT()
Эта функция позволит нам локализовать строки на стороне сервера в PHP и предоставить текстовые строки в качестве объекта JavaScript для скрипта.
wp_localize_script( $handle, $name, $data );
ПАРАМЕТРЫ
- $handle — дескриптор скрипта, для которого должны быть доступны данные (обязательно — должен соответствовать дескриптору скрипта, для которого предназначены эти данные, см. пример ниже)
- $name — имя объекта для хранения данных (обязательно — должно быть уникальным)
- $data — массив данных для передачи в скрипт (обязательно) .
ПРИМЕР ПЛАГИНА RAD
add_action( 'wp_enqueue_scripts', 'rad_theme_scripts' ); function rad_theme_scripts() { wp_enqueue_script( 'rad-theme-script', get_template_directory_url() . '/js/rad-theme-script.js' ); wp_localize_script( 'rad-theme-script', 'rad-I18n', array( 'message' => __( 'Super Rad!', 'rad-theme' ), ) ); }
ДОСТУПА К ДАННЫМ В JAVASCRIPT
Простой фрагмент кода ниже является примером того, как получить доступ к этим данным в вашем файле JavaScript.
alert( rad-I18n.message );
Дополнительные ресурсы
- I18N для разработчиков WordPress
- Справочник по темам WordPress: интернационализация
- Справочник по плагинам WordPress: интернационализация
- WordPress.tv: I18N
Подведение итогов
Поздравляем! Вы только что интернационализировали свою тему и/или плагин, сделав их доступными для людей, говорящих на всех языках. Независимо от того, распространяется ли ваш проект через репозиторий WordPress или разрабатывается специально для веб-сайта вашей организации, в интернационализации ваших файлов с самого начала есть только одно преимущество.
- Сделайте свои вклады с открытым исходным кодом доступными по всему миру.
- Создавайте беседы с новыми клиентами на зарубежных рынках.
- Экономьте время и сократите трудоемкие обновления в будущем.
Всегда интернационализируйте.