Статья размещена автором Бетке Сергей Сергеевич

Русификация плагина recent comments with Gravatar

Уже писал о некоторых доработках плагина Recent Comments with Gravatar. А теперь хочу его русифицировать.

О русификации wordpress уже также писал, точнее, подобную методику можно применить для любого php кода. Вот и применим её для русификации указанного плагина.

Берём исходный файл \wp-content\plugins\recent-comments-with-gravatar\recent-comments-with-gravatar.php. Натравливаем на него PoEdit. В меню файл – Создать каталог. Далее заполняем свойства каталога (справа).Русификация плагина recent comments with Gravatar Русификация плагина recent comments with GravatarРусификация плагина recent comments with Gravatar На странице Пути указываем папку, в которой лежит наш 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. Так что в обсуждаемом плагине код инициализации даже более правильный, только с размещением файлов локализации как-то не совсем “стандартно” подошли.

Русификация плагина recent comments with GravatarОднако, результат может показаться не совсем удовлетворительным. Согласитесь, фразы типа “1 дней назад”, “3 недель назад” слегка портят впечатление от такой русификации. В следующей статье как раз и обсудим локализацию с учётом множественного числа.

Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка