Поддержка Переводы Захотел локализовать Platinum SEO Pack 1.3.7

  • Собственно сам сабж: создал файл проекта platinum-seo-pack-ru_RU.po при помощи Poedit из php вытянул строки для перевода, перевел частично, решил проверить, не работает замещение, начал копать php файл там указание на строку замещения _e у тех плагинов что стоят в системе __ и все коректно замещаеться, попробовал заменить _e на __ вообще не добавляет строки, подскажите что делаю не так, первый раз локализую плагин.

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Сейчас попробовал в системе 3.3.1 ru версия, подключил плагин другой в нем файлы присуствуют локали но тоже не цепляет, подскажите что не так может быть в одних плагинах цепляет в других нет, спасибо.

    Важно понимать, что __($message, $domain) используется в тех местах, где присутствуют какие то вычисления. Т.е. в функцию __() передаются не статичные строки. Пример использования такой функции:

    add_settings_section(
        'gf_setting_section',
        __( 'Site Favicon Settings', 'gravatar-favicon' ),
        'gf_setting_section_callback_function',
        'general'
      );

    А функцию _e($message, $domain) используют в тех местах, где нужно просто вывести текст пользователю, предварительно с ним ничего не делая. Например:
    echo '<h2>' . _e( 'Category SEO Meta Tags Settings', 'category-seo-meta-tags' ) . '</h2>';

    Так же стоит обратить внимание на функцию load_plugin_textdomain. Правильно ли она используется в сочетании с add_action?

    Модератор Юрий

    (@yube)

    klay, простите, но всё не так.

    Функция __() возвращает перевод, а _e() его выводит. Так что echo '<h2>' . _e(... — простите, чушь.

    Дабы избежать ненужных споров, привожу код обеих функций.

    function __( $text, $domain = 'default' ) {
    	return translate( $text, $domain );
    }
    
    function _e( $text, $domain = 'default' ) {
    	echo translate( $text, $domain );
    }

    Юрий
    Всё правильно.
    Но почему это чушь?:

    echo '<h2>' . _e( 'Category SEO Meta Tags Settings', 'category-seo-meta-tags' ) . '</h2>';

    Именно так это и работает. Да, тут можно и так использовать:

    echo '<h2>' . echo __( 'Category SEO Meta Tags Settings', 'category-seo-meta-tags' ) . '</h2>';

    Суть в том, что например вот в этом, реально работающем примере:

    add_settings_section(
        'gf_setting_section',
        __( 'Site Favicon Settings', 'gravatar-favicon' ),
        'gf_setting_section_callback_function',
        'general'
      );

    функцию __() нельзя заменить на _e() — не будет работать.

    И потом, вот тут: http://codex.wordpress.org/Написание_плагина, об этом так и сказано:

    __($message, $domain)
    Переводит $message, используя текущую локаль для $domain. Оберните строки, которые собираетесь использовать в расчетах, в эту функцию.
    _e($message, $domain)
    Переводит $message, используя текущую локаль для $domain, и выводит на экран. Оберните в эту функцию строки, которые собираетесь показывать пользователю.

    Модератор Юрий

    (@yube)

    Покурил. Успокоился. Объясняю.
    Код

    echo '<h2>' . echo __( 'Category SEO Meta Tags Settings', 'category-seo-meta-tags' ) . '</h2>';

    выводит (первое слева echo) конкатенацию строк <h2>, результат работы (возврат) второго оператора echo (не функция!!!) и </h2>. Второе слева echo выводит, ничего не возвращая, перевод фразы ‘Category SEO Meta Tags Settings’ с использованием домена ‘category-seo-meta-tags’. То есть, сначала выводится переведенная фраза, а затем её обрамление в h2 ('<h2>' . '' . '</h2>'). И это в том случае, если интерпретатор не выругается на такую синтаксическую конструкцию, в чем лично я сильно сомневаюсь.

    Тфу, запарился, и правда! :[
    Я имел ввиду:

    '<h2>' . echo __( 'Category SEO Meta Tags Settings', 'category-seo-meta-tags' ) . '</h2>';

    Прошу прощения

    Хотя можно и так:

    echo __( '<h2>Category SEO Meta Tags Settings</h2>', 'category-seo-meta-tags' ) ;

    Но лучше всё же так:

    '<h2>' . _e( 'Category SEO Meta Tags Settings', 'category-seo-meta-tags' ) . '</h2>';

    Модератор Юрий

    (@yube)

    🙂

    В шаблоне каноничней так:

    <h2><?php _e( phrase, domain ); ?></h2>

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Захотел локализовать Platinum SEO Pack 1.3.7» закрыта для новых ответов.