Главная » 2013 » Февраль » 1 » Как перевести wordpress тему на другой язык
06:20

Как перевести wordpress тему на другой язык





Не обращать внимания на другие языки при разработке вашей WordPress темы очень просто, но это плохая привычка, и она мгновенно отвергает целый рынок WordPress пользователей, и потенциальные тысячи долларов потерянной прибыли. Из ТОП-10 стран, которые ищут WordPress темы в Google, только одна англоговорящая (США), остальных – 9. В момент написания это статьи в базе данных тем WordPress из более чем 1500 тем было всего 269, которые помечены как готовые к переводу. То есть всего 18%. Я покажу вам, как сделать вашу тему одной из них.

Как это работает

Обычно, когда вы создаете тему, вы просто пишете напрямую в коде любой текст темы, например, сообщение о 404 ошибке в файле 404.php или метки типа «Comments:» или «Author». Если пользователь темы, например, — немец или русскмй, эти части темы все равно будут отображаться на английском.

Решение этого вопроса – возвращать или показывать эти тексты, используя одну из четырех функций WordPress, которые разработаны для отсылки к языковому файлу за нужным текстом. Когда ваш текст заключен в эти функции, вы можете создать файл, содержащий все переводы, и к которому будут обращаться каждый раз, когда тема загружается.

Вот три файла переводов, которые мы используем:

  • .pot (Portable Object Template) – шаблон, который содержит ссылку на каждую строку текста в вашей теме, которая нуждается в переводе. Файл не содержит перевода. Это обычный текстовый файл.
  • .po (Portable Object) – созданный из .pot файла, .po содержит все строки и их переводы на один конкретный язык. Это тоже текстовый файл, который можно редактировать.
  • .mo (Machine Object) – бинарная версия .po файла. При использовании машинного кода, файл может использоваться гораздо быстрее, чем текстовый его вариант.

Шаг 1. Четыре функции

Каждая из четырех функций требует как минимум один аргумент – текст, который нужно перевести. Функции:

  • __ () – (два нижних подчеркивания) базовая функция, которую вы будете использовать в большинстве случаев. Возвращает текст на правильном языке.
  • _e () – то же самое ,что __ () , но она выводит текст вместо того, чтобы возвращать его.
  • _n () – используется, когда текст может быть во множественном числе, например, если вы хотите показать, сколько комментариев было оставлено, вы можете захотеть вывести «Х отзыв» или «Х отзывов», в зависимости от того, сколько будет комментариев.
  • _x () – полезная функция в том случае, если перевод слова зависит от контекста. «Post» может значить запись или «разместить», в зависимости от контекста. Для переводчика важно знать, что вы имеете в виду, чтобы перевод был точным. _x () в основном используется для отдельных слов.

__ () и _e ()

Это самые простые функции для перевода, которые может предложить WordPress. Давайте рассмотрим пример для каждой функции:

<?php if( is_single() ) { //If this is a "post" echo __( 'This is a post.' ); } ?> <?php if( is_single() ) { //If this is a "post" _e( 'This is a post.' ); } ?>

Обе эти функции делают одно и то же. Утверждение «this is a post» проверяется на наличие в файле .mo и возвращается результат.

__ () и _e () требуют только один аргумент, который им нужно передать – текст для перевода. Единственная разница между этими функциями — для __ () нужно выражение echo. Давайте рассмотрим пример, где __ () работает лучше, чем _e ():

<?php the_content( __( 'Click here to read more' ) ); ?>

Вместо того, чтобы передавать строку функции _content (), мы использовали __ (), чтобы текст можно было перевести. Если бы мы использовали вместо этого _e (), вместо того, чтобы передать текст в the_content (), перевод текста был бы выведен в документ, что могло бы вызвать разного рода неприятности.

_n ()

Что, если у вас ситуация, когда текст, который вы выводите, может иметь множественное или единичное число, как «Х отзывов» в примере выше? Вместо того, чтобы давать две разных строки текста для перевода, вы можете сказать, что у вас есть часть текста, для которого нужен перевод в единичном и множественном числе. Следующие два примера выводят для пользователя один и тот же результат:

<?php if(get_comments_number() == 1) { _e( 'There is a comment' ); } else { _e( 'There are comments' ); } ?> <?php echo _n( 'There is a comment' , 'There are comments' , get_comments_number() ); ?>

_n () требует три аргумента. Первый – версия текста в единичном числе, второй – в множественном, а третий – количество, к которому он относится. В данном случае, get_comments_number () определяет, сколько комментариев есть к посту и затем _n () выбирает подходящий текст.

_x () и _ex ()

Допустим, вы переводите .pot файл и вы проходите мимо слова «scroll». Вы интерпретируете его как «кусок скрученной бумаги» или «прокрутить сайт»? Вы можете использовать контекст, чтобы объяснить, как его нужно переводить. Эти функции дадут вам такую возможность своим вторым обязательным атрибутом, который требует короткое описание фразы или слова. Посмотрите на пример:

<?php echo _x( 'post link' , 'A link to the post' ); _ex( 'post link' , 'Submit a link' ); ?>

Пример показывает вам разницу между _x () и _ex (). Это то же e, как в функции _e, что заставляет функцию выводить результат вместо того, чтобы возвращать его. Для обеих функций первый параметр – наш текст, который нужно перевести, а второй – комментарий или заметка о переводимом тексте, чтобы обозначить точно, о чем идет речь.

Продвинутые методики

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

<?php $color = the_color(); _e( "You have chosen the $color theme" ); ?>

Когда вы будете создавать ваш .pot файл, POEdit проигнорирует это, поскольку он не хочет использовать переменную внутри предложения. В .pot файл добавится You have chosen the $color theme, но когда будет происходить поиск перевода, когда скрипт исполняется, будет искаться строка You have chosen the blue theme, которая не будет найдена. Вот, что мы сделаем:

<?php $color = the_color(); echo __( 'You have chosen the ' ) . $color . __( ' theme.' ); ?>

Таким образом, скрипт сможет получать переводы, но теперь стало сложнее переводить, так как предложение разбито. Это предложение может даже не иметь перевода на некоторых языках, которые сильно отличаются синтаксисом, например, в немецком, где их перевод слова “chosen” должен быть в конце предложения. Вам нужно объяснить, что эти две отдельные текстовые строки — часть одной, и что “theme” может не переводиться как “theme”.

Решение – использовать одну текстовую строку. Здесь пригодятся функции printf () или sprintf (). Давайте посмотрим, на что должен быть похож наш код:

<?php echo sprintf( __( 'You have chosen the %s theme.' ) , the_color() ); printf( __( 'You have chosen the %s theme.' ) , the_color() ); ?>

Это не только решит нашу проблему, но и будет гораздо аккуратнее по исполнению, а также использует всего одну строку кода. Первый аргумент функций printf () или sprintf () – строка для вывода, которая включает как минимум один заполнитель, в данном случае %s (что значит строчный тип “string”), а все другие аргументы – переменные, которые надо вставить в начальную строку.

Есть много разных заполнителей, который вы можете использовать внутри строки, вы можете найти полный список по sprintf в PHP руководстве. Обратите внимание, что отличие между printf () и sprintf () подобно отличию между _e () и __ () соответственно.

Шаг 2. Введение в POEdit

Теперь, когда вы правильно разметили весь выводимый в вашей теме текст, вам нужно собрать эту информацию в .pot файл. POEdit – фантастическая программа, которая дает возможность создавать ваш .pot файл и также предоставляет простой в использовании GUI, который можно использовать для создания ваших .po и, что еще более важно, также .mo файлов.

Во-первых, вам нужно скачать POEdit, который вы можете найти для Windows, Mac и Linux по этой ссылке.

Когда POEdit установлен, вы можете создать ваш файл .pot. Чтобы сделать это, перейдите в File New Catalog. Вы увидите диалоговое окно, где вам нужно будет ввести базовые данные. Во вкладке «Project Info» — название проекта и ваш язык/страна. Вы также можете ввести в блоке «Plural Forms»следующее:

Plural Forms: nplurals=2; plural=n != 1;

poedit1 Как перевести WordPress тему на другой язык
Во вкладке «Paths» введите путь, где могут быть найдены файлы, по отношению к месту, где лежит этот.pot файл. Например, если вы размещаете файл .pot в корневой папке темы, введите . (точку). Если вы хотите разместить .pot файл в папке «language» внутри корневой папки темы, введите ... (две точки).

poedit2 Как перевести WordPress тему на другой язык

Теперь вам нужно сообщить POEdit, какие ключевые слова искать при сканировании наших файлов. Введите следующее:

  • __
  • _e
  • _n:1,2
  • _x:1,2c
  • _ex:1,2c

:1,2 — указывает POEdit, что эти ключевые слова состоят из двух частей. По умолчанию, второй аргумент – множественное число, если только вы не включили c, которое обозначает, что второй аргумент — комментарий.

poedit3 Как перевести WordPress тему на другой язык

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

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

Шаг 3. Перевод и создание своего .po файла

poedit4 Как перевести WordPress тему на другой язык

  1. Список всех строк для перевода.
  2. Текущая переводимая строка.
  3. Ваш перевод строки.

poedit5 Как перевести WordPress тему на другой язык

  1. Единственное и множественное число текущей строки.
  2. Вкладки для переключения между единственным и множественным числом.
  3. Ваш перевод.

Когда вы перевели все строки в .pot файле, вы можете сохранить это в вашем .po файле. Любая строка, для которой вы не сделали перевод, при просмотре темы будет отображаться на оригинальном языке.

Названия вашего файла .po имеет ключевое значение. Gettext использует стандарт ISO 639 для аббревиатур языков и ISO 3166 для локализаций. Если ваш перевод сделан на американском английском, например, то ваше имя будет выглядеть по типу en-US.po. Заглавные буквы в данном случае тоже важны. Полный список языков и кодов стран есть по ссылкам:

Как только вы сохраняетесь, POEdit по умолчанию автоматически создает .mo файл помимо .po файла. Рекомендуется включать все три файла в вашу тему, чтоб люди могли создать свои переводы и легко редактировать существующие.

Шаг 4. Настройка WordPress

Давайте подведем итог, что вы уже сделали. Вы сказали WordPress о всем тексте, который вы хотите сделать доступным для перевода, затем вы использовали POEdit для сбора всех строк и помещения их в файл .pot, который может быть переведен в файлах .po и .mo. Эти файлы затем были включены в файлы темы.

Последний шаг – это запаковать вашу тему, установить ее и дать WordPress понять, .mo файл какого языка вы хотите использовать. Это очень простая процедура, где вы обращаетесь к файлу wp-config.php в корневой папке вашего WordPress.

/** * WordPress Localized Language, defaults to English. * * Change this to localize WordPress. A corresponding MO file for the chosen * language must be installed to wp-content/languages. For example, install * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German * language support. */ define('WPLANG', '');

Ваш файл должен уже содержать define ('WPLANG', ''); — но если этого нет, вы можете добавить. Вам просто нужно добавить свой язык и код локализации в define. Если вы переводили вашу тему на русский, у вас будет следующее:

define('WPLANG', 'ru_RU');

Ваша работа закончена! Не забудьте добавить ваш .pot файл в вашу тему, и если вы можете перевести вашу тему на другой язык, включить также файлы .po и .mo.

VN:F [1.9.22_1171]

Как перевести WordPress тему на другой язык, 4.7 out of 5 based on 7 ratings Google+

Просмотров: 808 | Добавил: bhopenered | Рейтинг: 0.0/0
Всего комментариев: 0


Сделать бесплатный сайт с uCoz
Copyright MyCorp © 2025