Интернационализация темы обычно не вызывает особых проблем.
Для начала необходимо добавить к своей теме textdomain и установить определенную директорию для дополнительных языков. Это делается с помощью простого сниппета, размещенного в файле functions.php:
add_action('after_setup_theme', 'my_theme_setup'); function my_theme_setup() { load_theme_textdomain('mytheme', get_template_directory() . '/languages'); }
В четвертой строке вы можете увидеть mytheme. Это и будет выступать вашим textdomain — вам понадобится задать вместо него название вашей темы. Если название темы слишком длинное, вы можете заменить его чем-то более коротким. Убедитесь в том, что оно является уникальным. Если вы используете дочернюю тему, то вам понадобится заменить load_theme_textdomain на load_child_theme_textdomain.
Если бы вы решились когда-либо в будущем локализовать свою WordPress тему, вам понадобилось бы просто добавить .mo файлы в языковую директорию.
После установки textdomain идет фактическая интернационализация строк в вашей теме. Первое – это отображение переведенного текста. Давайте взглянем на тему Sunny Blue Sky, которая является одной из последних тем, добавленных в каталог WordPress. Через SVN мы можем взглянуть на файлы этой темы. Первый же файл 404.php демонстрирует распространенную ошибку:
<h1 class="content-title">Error 404 - Not Found</h1> <p>Apologies, but the page you requested could not be found.</p>
Правильный способ записи этих строк:
<h1 class="content-title"><?php _e('Error 404 - Not Found', 'sunny-blue-sky'); ?></h1> <p><?php _e('Apologies, but the page you requested could not be found.', 'sunny-blue-sky'); ?></p>
Не так трудно исправить, не правда ли?
Следующим шагом идет обработка переведенного текста. Чтобы показать это на примере, я возьму строки из файла functions.php:
<?php add_action('widgets_init', 'SunnyBlueSky_sidebar'); function SunnyBlueSky_sidebar() { register_sidebar ( array ( 'name' => 'Sidebar Widget Area', 'id' => 'sidebar-widget-area', 'description' => 'The sidebar widget area', 'before_widget' => '<li>', 'after_widget' => '</li>', 'before_title' => '<h2>', 'after_title' => '</h2>', ) ); }
Чтобы провести интернационализацию, нам достаточно изменить эти строки следующим образом:
<?php add_action('widgets_init', 'SunnyBlueSky_sidebar'); function SunnyBlueSky_sidebar() { register_sidebar ( array ( 'name' => __('Sidebar Widget Area', 'sunny-blue-sky'), 'id' => 'sidebar-widget-area', 'description' => __('The sidebar widget area', 'sunny-blue-sky'), 'before_widget' => '<li>', 'after_widget' => '</li>', 'before_title' => '<h2>', 'after_title' => '</h2>', ) ); }
Тоже не так тяжело, верно?
Чтобы не вдаваться в детали написания строк – по данному вопросу в сети очень много информации – я просто приведу несколько примеров, как можно это осуществить.
<?php printf( __('We deleted %d spam messages.', 'mytheme-textdomain'), $count);
<?php printf( __('Your city is %1$s, and your zip code is %2$s.', 'mytheme- textdomain'), $city, $zipcode);
В кодексе WordPress содержится прекрасное руководство по интернационализации.
Как только вы полностью проведете интернационализацию своей темы, вам останется просто добавить .pot или .po файл, чтобы переводчики смогли сделать свою работу по созданию .mo файлов, содержащих в себе готовую трансляцию. Вы можете добавить .po файл в языковую директорию.
С помощью инструмента POEdit можно быстро создать .pot, .po и .mo файлы для интернационализированной темы или плагина.
По материалам wpcandy.com