Поддержка Переводы Проблемы с переводом темы

  • Использую для перевода на русский плагин Codestyling Localization — очень удобный способ редактировать po/mo файлы. И вот столкнулся с проблеммой такого плана.

    У меня стоит BuddyPress/bbPress-тема Salutation и похоже, что в ее языковых файлах очень много пересечений с языковыми файлами Buddypress/Wordpress по крайней мере фразы уже переведенные в po/mo-файлах Buddypress/Wordpress должны быть также переведены в po/mo-файлах этой темы, что создает неудобства, но не смертельно.

    Реальные проблемы начинаются предупреждения плагина Codestyling Localization о теме Salutation:

    Compatibility: Textdomain Naming Issue: Author uses a variable to define the textdomain constant. It will be assumed to be equal to theme name now.

    Вот что о текстдомейнах написано в самом плагине:

    Hint: The extended feature for textdomain separation shows at dropdown box Textdomain the pre-selected primary textdomain.
    All other additional contained textdomains occur at the source but will not be used, if not explicitely supported by this component!
    Please contact the author, if some of the non primary textdomain based phrases will not show up translated at the required position!
    The Textdomain default always stands for the WordPress main language file, this could be either intentionally or accidentally!

    Скриншот http://pixant.ru/05Mz/rusifikatsiya-buddypress-15—wordpress-32

    И вот в чем заключается проблема: когда mo файл генерируется из текстдомена по умолчанию (это «parallelus-salutation» в данном случае), то Buddypress наполовину становится на англ-языке (хотя почти весь фронтэнд переведен и в лэнг-файлах самого баддипресс и в лэнг-файлах шаблна). Теперь делаем «финт ушами», выбираем текстдомен «Buddypress» и из него генерируем mo-файл (файл в данном случае получается другого размера): фронт Buddypress становится на русском, но весь остальной шаблон становится английским.

    Итого, проблема в том, что не получается совместить в одном mo-файле шаблона все его текстдомейны, можно только выбрать для какого генерировать mo, хотя в po — весь нужный перевод есть.

    Не понимаю: где конкретно проблема, и как ее вылечить? Если проблема в шаблоне не знаю как это сформулировать на англ, т/к я и на русском это с трудом сформулировал и сам не до конца понял.

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Вот плагин Codestyling Localization http://wordpress.org/extend/plugins/codestyling-localization/

    Скомпилировал mo-файл из po для шаблона десктопной прогой. Она не спрашивала про текстдомейны и скомпилировала весь файл — локализовался и баддипресс и шаблон. Соответственно проблема в том, что Codestyling Localization не хочет в данном конкретном случае комплировать все текстдомейны вместе. Это проблема либо плагина или шаблона, а скорее всего обоих.

    Как это починить можно? — использование десктопной проги дико неудобно.

    функция load_theme_textdomain() используется так:
    <?php load_theme_textdomain( $domain, $path ) ?>

    А вообще, для извлечения строк ( создания POT файла ), проще всего использовать следующий метод:

    1. Подготовьте все строки, нуждающиеся в локализации, в ваших *.php файлах, заключив их в функции __() и _e()
    2. Получите последнюю версию WordPress-i18n Tools, например выполнив в командной строке svn co http://i18n.svn.wordpress.org/tools/trunk/ (к этому времени SVN у вас должна быть установлена)
    3. Перейдите в командной строке в скаченную папку
    4. Запустите утилиту makepot.php с командной строки, выполнив команду: php makepot.php wp-plugin your-plugin-directory-path

    Формат использования makepot.php:
    php makepot.php ПРОЕКТ КАТАЛОГ [РЕЗУЛЬТАТ]
    Где аргументы:

    • ПРОЕКТ — generic, wp-frontend, wp-admin, wp-network-admin, wp-core, wp-ms, wp-tz, wp-plugin, wp-theme, bb, mu, bp, rosetta, wporg-bb-forums
    • КАТАЛОГ — полный путь к каталогу из которого вы будете извлевать строки в POT-файл
    • РЕЗУЛЬТАТ — не обязательный аргумент, если он не используется, то результат, POT-файл, будет создан в том же каталоге, откуда вы запустили makepot.php, а если используется — имя файла, возможно с полным адресом к нему, для для генерации POT

    Далее, сгенерированный POT-файл можно использовать для локализации например в следующих программах:
    Poedit
    Gtranslator

    Важно помнить следующие особенности при локализации темы:

    • po- и mo-файл нужно назвать ll_CC.mo, где ll_CC — имя локали, например ru_RU.mo
    • Правильно использовать функцию load_theme_textdomain. Можно создать файл functions.php, поместить его в каталог вашей темы, и поместить в него код:
    add_action('after_setup_theme', 'my_theme_setup');
    function my_theme_setup(){
        load_theme_textdomain('my_theme', get_template_directory() . '/languages');
    }

    В примере выше:

    • Файлы локализаций, например ru_RU.po и ru_RU.mo, должны находиться в каталоге languages, который в свою очередь, должен находиться в каталоге с вашей темой
    • my_theme — название вашей темы
Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Проблемы с переводом темы» закрыта для новых ответов.