Русификация плагина recent comments with Gravatar
Уже писал о некоторых доработках плагина Recent Comments with Gravatar. А теперь хочу его русифицировать.
О русификации wordpress уже также писал, точнее, подобную методику можно применить для любого php кода. Вот и применим её для русификации указанного плагина.
Берём исходный файл \wp-content\plugins\recent-comments-with-gravatar\recent-comments-with-gravatar.php. Натравливаем на него PoEdit. В меню файл – Создать каталог. Далее заполняем свойства каталога (справа). На странице Пути указываем папку, в которой лежит наш php файл. После всех указанных действий сохраняем файл как recent-comments-with-gravatar-ru_RU.po. Важно – не забываем на странице Ключевые слова добавить __ и _e, в противном случае ничего Вы не локализуете. Если всё проделали, теперь меню “Каталог \ Обновить из исходного кода”. После чего и получаем все строки, для которых поддерживается исходным кодом локализация.
Полученные файлы (recent-comments-with-gravatar-ru_RU.po, recent-comments-with-gravatar-ru_RU.mo) выкладываем в папку \wp-content\plugins\recent-comments-with-gravatar\. Проверяем, как работает.
Всё работает. Однако, выясним, почему для этого плагина приходится использовать такие “нетиповые” каталоги для размещения файлов локализации. Для большинства плагинов мы используем подкаталога languages, и вот почему. Пример кода из плагина add-to-any:
function A2A_SHARE_SAVE_textdomain() { global $A2A_SHARE_SAVE_plugin_url_path, $A2A_SHARE_SAVE_plugin_basename; load_plugin_textdomain('add-to-any', $A2A_SHARE_SAVE_plugin_url_path.'/languages', $A2A_SHARE_SAVE_plugin_basename.'/languages'); } add_filter('init', 'A2A_SHARE_SAVE_textdomain');
Как видно, требуется инициализация, в процессе которой через load_plugin_textdomain и будет указано относительное размещение файлов локализации. В случае же обсуждаемого нами сейчас плагина мы подобной инициализации не наблюдаем вовсе.
// initialization function global $recent_comments_gravatar; function recent_comments_gravatar_init() { $recent_comments_gravatar = new recent_comments_gravatar(); } class recent_comments_gravatar { function __construct() { $path = __FILE__; if (!$path) { $path = $_SERVER['PHP_SELF']; } $current_dir = dirname($path); $current_dir = str_replace('\\', '/', $current_dir); $current_dir = explode('/', $current_dir); $current_dir = end($current_dir); if (empty($current_dir) || !$current_dir) $current_dir = 'recent-comments-gravatar'; $this->_folder = $current_dir; $this->_path = '/wp-content/plugins/' . $this->_folder . '/'; $this->init(); } function init() { add_action('template_redirect', array(&$this, 'template_redirect')); add_filter("plugin_action_links_$plugin", array(&$this, 'link')); load_plugin_textdomain($this->_folder, false, $this->_folder); if (!function_exists('register_sidebar_widget') || !function_exists('register_widget_control')) return; register_sidebar_widget($this->_name, array(&$this, "widget")); register_widget_control($this->_name, array(&$this, "control"), $this->_width, $this->_height); } }
а где же load_plugin_textdomain? Есть (функция init), достаточно гибко использована (подобный подход можно применять через copy-paste для других плагинов), но вот не добавлен подкаталог /languages. На самом деле, и в плагине add-to-any указанная функция использована далеко не совсем корректно. Читаем в кодексе:
<?php load_plugin_textdomain( 'my-plugin', false, dirname( plugin_basename( __FILE__ ) ) ); ?>
Другими словами, вместо второго параметра следовало указать false. Так что в обсуждаемом плагине код инициализации даже более правильный, только с размещением файлов локализации как-то не совсем “стандартно” подошли.
Однако, результат может показаться не совсем удовлетворительным. Согласитесь, фразы типа “1 дней назад”, “3 недель назад” слегка портят впечатление от такой русификации. В следующей статье как раз и обсудим локализацию с учётом множественного числа.
RSS комментарии
Обратная ссылка