ГлавнаяТемыКак переводить темы для WordPress

Как переводить темы для WordPress

Большинство тем для WordPress написаны на английском языке, и хотя некоторые из них имеют перевод на русский и другие языки, большинство всё же остаются исключительно на английском. В этой статье мы расскажем вам о том, как переводить темы для WordPress на русский язык с помощью программы Poedit.

Не переводите исходный код темы

Первым делом стоит отметить, что перевод английских строк на русский язык внутри исходных .php файлов темы — является неправильным подходом к переводу тем. Эту ошибку совершают большинство начинающих разработчиков и пользователей WordPress.

Для локализации WordPress использует технологию GNU gettext, которая говорит о том, что исходный код программы должен быть написан на английском языке. Это позволяет переводить продукт с английского языка на любой другой язык, а сам перевод распространять в специальном формате, отдельным от исходного кода.

Такой подход позволяет переводить темы для WordPress, не изменяя исходный код самих тем. При этом, после выхода обновления к той или иной теме, ваш перевод не потеряется.

Готова ли тема к переводу

К сожалению не все существующие темы для WordPress можно перевести «правильным» путём. Это зависит от того, подготовил ли разработчик свою тему к переводу. Вопрос подготовки темы к переводу заслуживает отдельной стати.

Найти тему, готовую к переводу, достаточно легко. В официальной директории тем на WordPress.org есть для этого специальная метка translation-ready, которая означает, что разработчик подготовил тему к переводу, и вы можете перевести её на русский язык, не заходя в исходный код программы. Просмотреть все темы в директории с меткой translation-ready можно здесь, на сегодняшний день их порядка 500.

Темы для WordPress готовые к переводу

Темы для WordPress готовые к переводу

Если вы работаете с темой не из официальной директории, то информацию о том, готова ли тема к переводу, ищите на сайте разработчика. Напоминаем вам, что темы для WordPress стоит скачивать только из официальных ресурсов. Пользоваться темами со сторонних сайтов (особенно с тех, которые предлагают бесплатные темы для WordPress) крайне опасно. Подробнее вы можете почитать в нашей статье.

Файлы .po и .mo

После того как вы скачали тему для перевода, найдите в ней директорию languages. В ней содержатся файлы перевода темы на различные языки, а так же шаблон для перевода на любой другой язык. Название файла соответствует названию локали конкретного языка. Для русского языка, это ru_RU.

Файлы перевода имеют расширение .po и .mo. Файлы .po содержат переведённые строки в текстовом формате. С этими файлами работает переводчик темы. Файлы .mo это те же строки, но в скомпилированом варианте. С этими файлами работает ядро WordPress для отображения перевода.

После редактирования перевода в файле .po, его нужно скомпилировать в файл .mo, чтобы изменения вступили в силу. Программа Poedit делает это автоматически.

Перевод темы с помощью Poedit

Poedit — это программа для работы с файлами перевода формата .po и .mo. Скачать Poedit для Windows, Mac OS X или Linux можно здесь.

После запуска программы для создания нового перевода следует Создать каталог из POT-файла через пункт меню Файл. Выберите файл .pot (или .po) из директории languages в вашей теме. Poedit попросит вас заполнить небольшую форму о переводе, после чего предложит вам сохранить ваш новый каталог. Сохраняйте его в той же директории languages с названием локали, например ru_RU.po.

Для редактирования существующего перевода, достаточно открыть соответствующий файл .po.

Перевод темы на русский язык

Перевод темы на русский язык

Работать с программой Poedit достаточно легко — исходный текст слева, перевод справа. Для редактирования перевода щёлкните на соответствующую строку и введите новый перевод. При сохранении, Poedit автоматически скомпилирует ваш перевод и создаст соответсвующий файл .mo.

Установить перевод

После того как вы будете довольны вашим переводом, не забудьте его сохранить. Затем вы можете загрузить вашу тему с переводом на ваш сайт и активировать её, как любую другую тему WordPress. Если тема уже установлена на вашем сайте, то достаточно загрузить в её директорию languages новые файлы переода ru_RU.po и ru_RU.mo, например через FTP.

Если WordPress установлен на русском языке, то вы сразу же увидите изменения. Если же WordPress настроен на английский язык, то следует изменить локаль в файле wp-config.php. Найдите в этом файле строку определяющая константу WPLANG и измените её:

define( 'WPLANG', 'ru_RU' );

После этого, тема на вашем сайте будет отображаться на русском языке. Но не останавливайтесь на этом!

Внесите свой вклад

Если вы перевели тему для WordPress на русский язык, вы можете связаться с автором этой темы и отправить ему ваши файлы перевода .po и .mo. Автор может включить новый перевод при выпуске следующего обновления к своей теме, и другие пользователи WordPress смогут наслаждаться темой на русском языке.

Перевод тем, плагинов и самого ядра — является одним из многочисленных способов внести свой вклад в развитие проекта WordPress.

Если у вас есть вопросы по переводу тем для WordPress, задавайте их в комментариях. Мы с радостью ответим. По любым другим вопросам вы можете связаться с нами.

Константин Ковшенин

Сооснователь журнала WP Magazine и первой конференции WordCamp в России. Разработчик в компании Automattic, принимает активное участие в развитии ядра WordPress. Любимый язык программирования: Python.

Подписаться на рассылку

Подписаться → Подпишитесь на бесплатную рассылку журнала WP Magazine и получайте новости, события, подборки тем и плагинов, уроки, советы и многое другое в мире WordPress!

  • Александр

    Попытался перевести тему одну. Начали выскакивать ошибка «Записи с ошибками были отмечены красным в списки. Подробности ошибки будут показаны при выборе такой записи. Файл был безопасно сохранён, но он не может быть скомпилирован в формат MO и использован». И затем ошибка, содержащая текст «invalid nplurals value».

    Хотелось бы узнать, что это за ошибки, как это может повлиять на перевод и как от них избавиться.

    • Александр, можете сказать на какой именно записи возникает ошибка? Что помечено красным в Poedit? Вероятно вы неверно указали строку plural forms в свойствах каталога. Для русского языка это строка:

      nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
      
      • Артем

        Спасибо автору, статья действительно дельная, в особенности для тех кто только начинает работать с WordPress и ищет темы, ведь большинство тем напичканы вирусами и назойливыми ссылками. Лучше перевести самостоятельно одну из бесплатных.

        • Спасибо за добрые слова Артём!

  • Сегодня попробовал. Все получилось. Может, остались какие-то косяки, которые надо будет исправлять вручную (например, формат даты, или шрифт, который не поддерживает кириллицу), но все равно так ГОРАЗДО удобнее и быстрее, чем лазить по всем php-файлам (есть в этом деле серьезный опыт :), отыскивая слово за словом.
    Спасибо!

    • Владимир, здорово! Да, со шрифтами иногда возникают проблемы, особенно Google Web Fonts и Typekit, хотя у некоторых из них есть поддержка кирилицы и её всего лишь нужно включить. Это кстати добавляет немного веса страницам.

      Формат даты и времени как правило идёт от сервера. Если на сервере установлена русскоязычная локаль, то формат указанный в настройках WordPress будет поддерживать русские месяца и т.д.

      Успехов, и спасибо за комментарий!

      • Leonking

        Привет Константин. Купил тему вордпрес, все перевел, но вот проблема с форматом даты. Я так понимаю что где-то в коде прописано, что-то, что не хочет переводить месяц на русский язык. Не приходилось сталкиваться с таким, спасибо.

        • Месяц переводится на уровне системы, вам необходимо установить русскую локаль на ваш сервер. Обратитесь к хостинг-провайдеру за помощью!

    • Людмила

      У меня вопрос, может не совсем в тему — но вдруг кто-нибудь сталкивался с этим. Хочу купить тему с техподдержкой на год, Но с англ. у меня не очень — как вести переговоры, и переведут ли они сами тему на русский?

      • Людмила, работать таким образом с разработчиком темы напрямую будет сложно, но вы можете найти фрилансера, например на fl.ru, который выступит посредником, переведет для вас тему на русский язык, и внесет в нее все необходимые изменения.

  • Александр

    Добрый день! Пытаюсь сгенерировать .mo для .po вордпресса, версия 3.5.1. Получаю, во-первых, ошибку формата множественного числа (исправляю). Затем получаю ошибку по каждой строке. Кто-то вообще сталкивался с необходимостью перевести ВП? Файл по с рабочего сайта, вроде как всё ок, но создать mo не получается.

    • Александр, а какой именно файл вы пытаетесь перевести, и какую ошибку вам выдаёт Poedit? Или же вы пытаетесь создать новый каталог из исходных кодов WordPress? Учтите, что WordPress уже переведён на несколько десятков языков. Если вы хотите отредактировать несколько строк в существующем переводе, вы можете скачать его в формате .po и отредактировать с помощью Poedit.

  • Кирилл

    Добрый день. А можно ли как-то язык выставлять в соответствии с пользователем который вошел на сайт? Зашел из России — русский перевод. Зашел из других стран — Английский.

    • Здравствуйте Кирилл. Можно, для этого вам потребуется плагин, например qTranslate или WPML.

  • Кирилл

    Спасибо. По изучаю плагины.) А вот со сменой языка, что то туго. WP у меня русский, так что в wp-config стоит русский. А вот в самой теме: есть language папка с en_US.mo .po файлами, поменял некоторые строки(c en_US на ru_RU) в function.php, попробовал, поменял название фалов на ru_RU, попробовал, удалил файл en_US.mo .po. Ни фига, не меняется локаль.

    • Кирилл, вам не нужно менять строки в functions.php, вам нужно скопировать файл en_US.po, открыть новый файл в редакторе Poedit, перевести строки на русский язык и сохранить ваш новый файл как ru_RU.po (и он автоматически создаст скомпилированный ru_RU.mo).

      При этом в wp-config.php локаль должна быть выставле как ru_RU. Можете назвать тему, которую вы пытаетесь перевести?

  • Кирилл

    Ну так и сделал. Спасибо за подсказку.) Разобрался удалил mo файл, pedit сгенерировал новый. Поменял локаль в function.php с en_US.mo на ru_RU.mo и все заработало. Тема GeoPlaces

    • Кирилл, локаль вам нужно менять в файле конфигурации, а не functions.php. Файл функций темы должен подключать ту локаль, которая указана в wp-config.php с помощью функции load_theme_textdomain.

  • Кирилл

    У меня не так все. Функция load_theme_textdomain тупо ссылается на ‘/language/en_US.mo’

    <?php session_start();
    load_theme_textdomain( 'templatic' );
    load_textdomain( 'templatic', get_template_directory(). '/language/ru_RU.mo' );
    include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); 
    define('TAGKW_TEXT_COUNT',40);
    
    • Это не правильно, потому и локаль сменить оказалось так сложно. Если эту тему использовать например в режиме сети (мультисайт) то она и не позволит использовать два разных сайта с двумя разными локалями. Ну для одного сайта работать будет, правда нет никаких гарантий, что всё это не сломается при обновлении в будущем. В общем наш совет — используйте другую тему :)

  • Кирилл

    Ахаха)) Ну спасибо за совет. И за помощь в целом. Я уже к этой начал прикручиваться, да и перевел уже много. Напишу разработчикам, может они сделают правильно.

    • Напишу разработчикам, может они сделают правильно.

      Это правильный подход к работе с WordPress. Успехов вам и дайте знать если можем чем-нибудь помочь!

  • у меня в теме отсутствует папка с языками. как быть?
    тема платная

    • Артём, вероятнее всего ваша тема просто не готова к переводу (отсутствуют функции первода и/или отсутствует файл .pot). Вам следует обратиться к разработчику темы за дополнительной информации.

  • Спасибо, очень помогла статья. Я уже не знал как перевести Read more.. С вашими подсказками все получилось :)

  • Julia

    Все так и сделала, все-равно не перевелось) Что делать подскажите пожалуйста.

    • Julia, на каком языке у вас отображается панель администрирования WordPress? Можете подробнее о том, какую тему вы пытаетесь перевести, и желательно адрес вашего сайта? Спасибо!

  • Руслан

    Добрый день, Константин. Спасибо за статью, очень полезная. У меня русский вордпресс, но английская тема. В файле wp-config.php прописано: define( ‘WPLANG’, ‘ru_RU’ );
    В директории languages у меня находятся файлы ru_RU.po и ru_RU.mo, но это файлы перевода вордпресса, а не темы. Подскажите подробный путь куда установить новые файлы перевода темы ru_RU.po и ru_RU.mo чтобы сама тема отображалась на русском?

    • Руслан, файлы о которых вы говорите — это файлы перевода самого ядра, находятся они в директории wp-content/languages. У каждой темы обычно своя собственная директория languages, например wp-content/themes/expound/languages (в нашем случае тема называется Expound), куда вам и нужно установить файлы с переводом темы.

  • Ринат

    Автору большое спасибо за статью, перевел с её помощью пару тем — быстро и просто. Сайт однозначно в закладки.

    • Спасибо за добрые слова Ринат, рады что статься оказалась вам полезной.

  • Евгений

    Спасибо Вам огромное!!! Я всегда так мучился,когда необходимо было перевести или шаблон или плагин. Теперь есть очень удобный инструмент. С его помощью я перевел один шаблон и один плагин. Еще раз,спасибо!!!

    • Евгений, рады что статья оказалась для вас полезной :)

  • Александр

    Это просто великолепно!!! Первый раз переводил тему и сделал это за 5 минут с помощью этой проги и Google переводчика. Собирался с помощью поиска и замены искать англ слова и заменять, с помощью программы сэкономил уйму времени.
    Большое спасибо за статью!

    • Александр, рады были помочь. Спасибо за комментарий!

  • Спасибо, дорогой друг! Два часа, пока не нашла твою статью, обвиняла хостинг в жестком кешировании…

    • Юлия, спасибо за комментарий, рады что статья оказалась для вас полезной :)

  • Viruz

    Очень полезный материал. А как переводить такие строки «Page %s» «% Comments» и другие. Больше интересует не как переводить)) а само значение этих знаков и цифр в англ. вариант

    • Viruz

      если я правильно разобрал, то % из курса программинга служит для связки строк, тобишь его значение на любом языке ENG RUS будет действовать.

      • %s это то, куда будет подставляться что-либо. В вашем случае это номер страницы и количество комментариев. При переводе важно оставить эти символы, но можно и местами поменять, если это необходимо, например «комментариев: %s».

  • Serhio Hose

    Добрый вечер! Я все сделал у себя на локальном сервере,перевод отлично работает, но когда залил все на сервер, перевод не отображался, хотя все на месте, в чем может быть причина? тема surframa.

    • Проверьте значение константны WPLANG на сервере, и убедитесь что вы залили все файлы туда же, куда и на локальном сервере. Так же не забудьте сбросить кэш страниц, если вы его используете.

  • Вы сделали всё правильно. Возможно тема неправильно пытается подключить файлы перевода. Пришлите нам архив с темой на wpmagru@gmail.com — мы посмотрим.

  • Пан Іванко

    А как переводить g:i a, g a, Y, F, и т.п. ?

    • Это формат времени и даты, можно оставить как есть, или же установить другой формат, если нужно. Все допустимые значения можно посмотреть в документации к функции date().

  • Пан Іванко

    Или например вот это Search results for "%1$s"

    • %1$s это то, куда будет подставляться фраза, по которой пользователь выполнил поиск, то есть перевести это можно так: Результаты поиска по запросу «%1$s»

      • Пан Іванко

        Большое спасибо!

  • Спасибо за статью. Забыли про замечательный плагин — Codestyling Localization. Он гораздо удобнее чем Poedit.

    • Действительно упомянутый плагин может создавать файлы .po/mo не покидая административную панель WordPress, но к сожалению это не всегда работает, особенно если на хостинге установлены ограничения по правам на запись. Как ещё одну альтернативу рекомендую рассмотреть проект GlotPress.

  • Максим

    воспользовался вашим советом(частично по крайней мере) и скачал тему с wordpress. org/themes/greyzed
    тема очень нравится, но в ней отсутсвует директория languages. Она частично на русском, но хотелось бы добить! подскажите что делать
    Заранее благодарен!

    • Если тема частично на русском, значит она имеет файлы перевода. Поищите их в другом месте, например в директории lang, l10n, i18n, locale, translations и т.д.

  • Стас

    CodeStyling Localization И пусть весь Мир подождёт. Не парьтесь

    • Как я уже упомянул, действительно с помощью этого плагина можно создавать файлы перевода не покидая админ-панель WordPress, но это не всегда возможно в зависимости от настроек хостинг-площадки. Ещё в качестве альтернативы советую рассмотреть проект GlotPress.

  • Стас

    Ставите себе этот плагин и ставьте любой шаблон. И через админ панель сразу переводите всё что есть в шаблоне. Сразу вам будет и .ро и .mo

  • rootkey

    Плагин WPML содержит встроенные средства перевода и даже найма переводчиков и управления переводами. Ставлю его уже несколько лет для международных проектов. Тяжеловат для слабых хостингов. Но очень удобен.

    • Да, плагин WPML (который кстати платный) имеет свои плюсы и минусы, мы стараемся его не рекомендовать из-за его ограничений в многосерверной архитектуре. Если нужен действительно многоязычный ресурс, попробуйте WordPress в режиме мультисайт, и замечательную функцию switch_to_blog() для обмена данными между сайтами.

      • Только как всегда остается проблема с uploads (( каждый отдельный сайт в multisite плодит копии загруженных файлов, я пока не нашел возможности использовать общую папку uploads. Any ideas?

        • Можно организовать единую медиатеку с помощью какого-нибудь плагина для работы например с сервером S3 или Dropbox.

    • Большой и тяжелый, к тому же платный. Попробуйте Polylang. Перешел на него полгода назад, все новые сайты делаю только с ним — ни разу не пожалел.

  • Не так уж и резко, возможность использовать директорию wp-content/languages для файлов перевода тем появилась больше года назад еще в версии 3.5 :)

  • Maxim

    Привет!

    Столкнудся с такой проблемой.
    Плагин.
    В плагине не было каких либо файлов .pot .po .mo есть только размеченые ключами __ _e php файла и есть пустая папка laguages

    Я создал новый каталог в Poedit, превел, сохранил как ru_RU.po залил файлы перевода в папку laguages. Но плагин продолжает отображаться на англ. WP русский, в wp-config все в порядке.

    Пробовал загружать перевод в корень плагина, в корень папки plugins, результата — ноль!
    Как быть? Где искать проблему?

    • Максим, есть ли в плагине вызов функции load_plugin_textdomain()? Можете выложить куда-нибудь исходный код плагина?

      • Maxim

        такой функции не нашел. Куда я могу отправить для вас ссылку на архив с плагином? он коммерческий и я не хочу публиковать его для всех

        • wpmagru@gmail.com, но поскольку в нем нет функции load_plugin_textdomain() вероятнее всего он просто не локализован, или локализован но не до конца. Именно эта функция отвечает за подключение файлов перевода.

  • Swan

    Доброго времени суток! Подскажите пожалуйста. Я перевела плагин user-access-manager. Сохранила файл .po в папке «lang» как user-access-manager-kk_KZ. Текст из плагина все равно отображается на английском. Вордпресс казахский. Файл wp-config прописан правильно. Тему тоже перевела. Она отображается корректно. Пробовала перевести другие плагины, тоже не отображаются в нужном языке. Подскажите, пожалуйста, в чем может быть причина?

    • Swan, вам нужен не только файл .po, но и скомпилированный файл .mo в той же директории с таким же названием. WordPress читает переведенные строки именно из файлов .mo.

      • Swan

        Спасибо за ответ! Этот файл тоже есть.

        • Пришлите нам архив с вашим измененным плагином, и файлов wp-config.php и мы посмотрим. Можете в конфиге удалить пароли.

      • Swan

        скомпилирован в Poedit

      • Swan

        Разобралась. Все работало. Причина была в том, что текст, прописанный в настройках плагина, имеет приоритет выше, чем в файле перевода. Также и с остальными плагинами.

  • Vitamin007

    Спасибо, статья очень помогла!

  • Спасибо, все получилось )

  • Спасибо за статью. Давно пытаюсь разобраться в этом хозяйстве. Какая разница между файлами .pot и.po? Кроме того, заметил, что при работе с POEDIT часто возникает проблема с множественным числом для тем и плагинов. Хотелось бы так же узнать ваше мнение относительно WPML. Заметил, что в последнее время разработчики иной раз вообще не утруждают себя подготовкой к локализации и в поддержке кивают в сторону этой системы.

    • Особой разницы между .po и .pot нет, но подразумевается, что .pot это пустой шаблон для создания файлов .po, которые затем уже компилируются в .mo.

      Проблемы с множественным числом чаще всего возникают из-за неправильной настройке самого Poedit. Множественные числа в gettext обрабатываются с помощью функци _n(), _nx(), и _n_noop(). Эти три функции в Poedit должны быть описаны функции для множественного числа, эта настройка берется из файла .pot, или задается вручную в настройке программы.

      После этого при создании нового перевода, вам необходимо указать формы множественного числа. Для русского языка это магическая строка (не пугайтесь):

      nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);

      После этого в строках с множественном числом, Poedit (и другие интерфейсы) предложат вам не два поля для ввода единсвтенного и множественного числа, а три: 1 комментарий, 2 комментария, 25 комментариев.

      Относительно WPML, я всегда всем советую разрабатывать многоязычные сайты отдельно друго от друга, может быть в сети Multisite, а с такими плагиами как WPML, qTranslate и прочее, вы рано или поздно упретесь в потолок. Элементарный пример — как с помощью WPML хостить русский сайт в России, а английский сайт в США?

      А обмен данными между разными сайтами можно легко реализовать с помощью switch_to_blog() если они на одной площадек, или с помощью простого JSON API или XML-RPC если на разных.

      • Спасибо за ответ. Про магическую строку для наших множественных форм я знаю, но на нее то как раз иногда и ругается poedit.

        • В новой версии poedit при создании и настройке каталога язык выбирается из списка и магическая строка подставляется автоматически. Работает без проблем.

      • Kosss

        Проблема с множественным числом достала просто. Вот пример (волшебная строка берется поедитом из локали ru_RU). Poedit ругается при компилировании на это:

        #, php-format
        msgid «this comment was edited %1$s»
        msgid_plural «this comment was edited %2$d times, last edited %1$s»
        msgstr[0] «этот комментарий был отредактирован %1$s»
        msgstr[1] «этот комментарий был отредактирован %2$d раза, последний раз %1$s»
        msgstr[2] «этот комментарий был отредактирован %2$d раз, последний раз %1$s»

        Я себе все глаза сломал но не понял что тут не так. Рядом в переводе такие строки:

        #, php-format
        msgid «%d more comment»
        msgid_plural «%d more comments»
        msgstr[0] «%d более подробный комментарий»
        msgstr[1] «%d более подробных комментария»
        msgstr[2] «%d более подробных комментариев»

        и на них не ругается! Я что только не делал, помогает одно, полное удаление переведенных строк. Любое значение в них будет вызывать ошибку. Почему — не ясно. Сравнивал с другим лэнг файлом — там та же волшебная строка, локаль и те же 3 варианта множественного числа, компилируется без ошибок. Ну не знаю куда копать больше. Пока удалил перевод проблемной строки. Но это же не дело и не первый раз и не последний это будет вылезать. Может знаете пусть не серебряную так хоть посеребренную пулю против этой заразы (освященную минимум в трех конфессиях и отлитую в горах Тибета столетними монахами-буддистами)?

        • Kosss

          Ошибка «спецификация формата аргумента 2 не существует в msgstr»

        • Проблема здесь в том, что в оригинале (msgid) у вас есть лишь один аргумент, а в переводе вы используете второй (%2$d), и поскольку этого второго аргумента нет в оригинале, Poedit и выдает ошибку.

          Я бы сказал, что здесь скорее ошибка программиста, который часть логики (выводить дату последнего изменения или нет) вставил в функции перевода. Это скорее должны были быть две разные строки.

          • Kosss

            Не уверен, т/к Poedit не в курсе что там прописано в коде, я перевожу только po/pot файл. И в нем, как я показал выше, проблемная строка выглядит точно также как и беспроблемная. Вот это у меня не укладывается в голове.

          • Poedit не в курсе, что прописано в коде, но Poedit прекрасно распознает аргументы (вида %d, %s, %1$s и т.д.) и будет ругаться, если аргументы в исходном тексте и в переводе не совпадают, как это происходит в вашем случае.

            Попробуйте убрать аргумент «%2$d» из строк перевода множественного числа, замените его например словами «несколько раз» :)

          • Kosss

            Почему не совпадают? Все аргументы на своих местах. Более того, в качестве перевода я полностью копировал и вставлял англоязычную строку — все равно ошибка. Какой есть обходной путь, кроме как долбить автора? Т/к я не понимаю в чем ошибка, я и автору не смогу объяснить ее суть. Автор кстати японец, странно, что он не догадывается о проблемах с множественными числами (не знаю уж сколько окончаний чслительных в японском).

          • Посмотрите еще раз. Оригинал:

            msgid «this comment was edited %1$s»

            Переводы:

            msgstr[0] «этот комментарий был отредактирован %1$s»
            msgstr[1] «этот комментарий был отредактирован %2$d раза, последний раз %1$s»
            msgstr[2] «этот комментарий был отредактирован %2$d раз, последний раз %1$s»

            В переводе в двух формах используется аргумент %2$d. В оригинале этого аргумента нет. Да, может быть он и есть в множественном числе на английском языке, но множественные формы переводятся с оригинала.

            Не знаю уж сколько окончаний в японском

            Сколько окончаний сказать не могу, а вот множественная форма, в отличие от русского языка (3) и английского языка (2) всего одна: http://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html?id=l10n/pluralforms

          • Kosss

            >>В оригинале этого аргумента нет.
            Есть во множественном числе. А почему множественный формы берутся с оригинала? В этом есть какая-то необходимость или это баг? Я вот не вижу смысла в том чтобы множественные формы перевода сравнивать с единственной формой исходного языка. У меня настолько сильных препаратов нет, чтобы понять это? Ошибка волшебной строки?

            >>а вот множественная форма
            Это решает. Как же повезло японцам и англофонам.

          • А почему множественные формы берутся с оригинала?

            Потому что множественная форма в английском языке отличается от множественной формы в русском и во многих других языках. Я не думаю, что это баг, но чтобы подтвердить мою теорию, вам нужно попробовать удалить «лишний» аргумент и посмотреть решит ли это вашу проблему.

          • Kosss

            попробовал в различных вариантах. не решило. :(
            Под конец вообще удалил все аргументы из этих строк — все равно ошибка

          • Странно. А какая именно ошибка? И меняется ли она в зависимости от ваших разных вариантов?

          • Kosss

            Ошибку я выше писал в комменте. Сейчас этого коммента не вижу — кривой дискуз чудит. Ошибка не меняется.

          • Kosss

            Как вы этим дискузом пользуетесь? Захожу на сайт — нет моих некоторых комментариев в том числе и последних. По какой-то ссылке попал на страницу дискуз.ком — тут есть полное дерево со всеми комментами. Что за ерунда? Махровая антиконсистентность в степени Пи.

            Ошибка «спецификация формата аргумента 2 не существует в msgstr»

            это на случай если вы тоже не видите моих комментов.

          • Kosss

            попробую вечерком, но глажат сомнения

          • Kosss

            Да и в любом случае, как быть? Не переводить проблемные строки или можно придумать какой-то костыль?

          • Вообще советую связаться с автором плагина или темы, которую вы пытаетесь перевести и объяснить суть проблемы — количество аргументов в множественных формах не должно отличаться от количества аргументов в оригинальной строке.

  • Валентина

    Здравствуйте, в моей теме заявлено, что она поддерживает русский язык. Но когда установила, в админке все на английском. Скажите, пожалуйста, где включить русский язык? Файлы .ро и .mo есть. Заранее благодарю!

    • Валентина, русский язык необходимо включить в файле конфигурации WordPress wp-config.php, смотрите раздел «Установить перевод» в статье. Учтите, что тема отвечает только за перевод строк внутри самой темы, а не всей админ-панели WordPress.

      Если вы хотите изменить интерфейс административной панели на русский язык, вам необходимо установить файлы перевода самого ядра WordPress, а не только темы. Подробнее в нашей статье.

  • Сергей

    Благодарю

  • Андрей

    Респект за статью, искал в гугле, выдало одной из первых, установил поедит и все заработало. вообщем мерси)

  • а как сделать, чтобы был отдельный файл перевода только с русским языком?
    поедит сохряняет файл и с англ и с переведённым языком =(

    • Poedit сохраняет оригинальные строки, чтобы понимать что переводить, а как иначе сопоставить переведенные строки с оригиналами? :)

      • понял, просто в лангвиджес были только ЕН файлы, сравнить бело не с чем, потом уже понял, что так и должно быть.

  • Ann Presnyakova

    А что делать если у меня мультиязычный сайт и мне нужно поменять текст на немецком и на английском. На немецком я поменяла быстро открыв фаил po с помощью poedit. А что делать с английским? если я зайду в php фаил и тупо поменяю там, оно конечно поменяется но локализачия на немецкий перестанет работать

    • В этом случае вам нужно на немецком сайте устанавливать константу WPLANG в de_DE, а на английском оставить пустой. Ни в коем случае не меняйте строки в самих PHP файлах.

      • Ann Presnyakova

        Что? я вообще не понимаю о чем вы говорите. может вы не правильно поняли то что я спросила? мне нужно было поменять английский текст, а он был записан только в php файле. Я решила проблему таким образом: у меня был фаил de_DE, но не было файла en_US (этот текст брался из php файла), так я его просто создала и поменяла там описание полей как мне нужно

        • Очевидно и правда не поняли :) Да, поменять оригиналы строк можно с помощью псевдо-перевода en_US.po/mo.

  • Antony Bark

    спасибо! в статье доходчиво, и комментарии помогли.

  • Радмир

    а если плагин не определяет русский, например, в плагине пишешь название категории русскими буквами, а он отображает вопросами, каждый символ заменяет на «???». что делать

    • Возможно проблема с кодировкой в плагине или в базе данных. С этой проблемой лучше обратиться к хостинг-провайдеру.

  • Вячеслав

    В самом начале, в названии файла нужно выбирать тот язык на которой перевожу или не критично и можно оставить англ. ?
    Заранее спасибо за оперативный ответ.

    • Лучше выбрать, а поменять никогда не поздно, но WordPress этими мета-данными не пользуется.

  • Кирилл

    Возникла проблема с переводом темы DW Timeline v1.0.9. Использовал программу poedit и плагин CodeStyling Localization — все тщетно. Файлы перевода появляются, но на них никак не реагирует тема. в файле конфига стоит локал ru_RU. В чем может быть проблема?

  • Феликс

    Скажите, а как оставить язык админки WordPress английский, а тему оставить русской? То бишь раздельно.

    • Вам потребуется «на лету» менять локаль с помощью фильтра locale в функции get_locale(). Возможно уже есть какой-нибудь плагин, который делает что-то подобное.

  • Егор

    А что делать, если я уже переводил .php файлы темы? Это может как-то негативно сказаться на сайте?

    • Особо негативно — нет, но у вас перевод потеряется при обновлении или переустановки темы. Лучше всего откатить все изменения и сделать «по правильному».

  • Что я не так делаю? Открываю Poedit, выбираю «Create new translation», открываю po файл с моей темы, всплывает окно, где есть 1 пункт — русский, выбираю. В графе «Перевод» ничего не появляется. Что мне делать? Подскажите, пожалуйста.

    • Егор, видимо тема не переведа на русский язык, потому и пустой перевод. Вы можете перевести ее самостоятельно. Если же исходные строки тоже пустые, то вероятнее всего тема не готова для перевода.

      • А как самостоятельно перевести?

        • В редакторе Poedit, так как описано в статье. Учтите, что вы не сможете это сделать если тема не подготовлена для перевода, см. раздел «готова ли тема для перевода.»

  • Да, тема готова к переводу, но перевод вам необходимо создать самостоятельно с помощью программы Poedit. Слева будут английские строки, справа пустые — вам их надо заполнить и создать файл перевода ru_RU.po

  • Tony Arty

    А я стал использовать плагин CodeStyling Localization, чтобы не отходя от админки переводить. Плагин генерит .po и .mo

  • Дмитрий Шкут

    Codestyling Localization — отличный плагин для перевода тем и плагинов. Пользуюсь уже давно.

  • Anna

    Добры день,
    подскажите пожалуйста, в чем может быть причина того, что
    при переводе темы с помощью Codestyling Localization, не все переводы в итоге подтянулись (т.е. переведено все, а непосредственно на сайте отражаются лишь некоторые переводы, часть осталась на английском).
    Заранее спасибо за ответ.

    • Это может зависеть от темы, например если указана оригинальная строка для перевода но не указан «текстовый домен». Таким образом Poedit и другие средства эти строки видят, но отображаются они все равно на оригинальном языке на сайте из-за отсутствия этого самого текстового домена.

      • p.svetlaya

        Что вы подразумеваете под текстовым доменом?
        И как перевести слова, которые остались на английском? через php файлы?

  • Руслан

    Как перевести админ панель (e-panel)? Я так понял это файл options.php в папке e-panel.Но там много всего и непонятно что трогать,а что нет.С чего начать перевод?

  • _n() поддерживает неограниченное количество форм множественных чисел, это задается в заголовке .po файла специальной формулой, но это используется именно для множественных чисел, например 1 комментарий, 2 комментария, 5 комментариев, т.е. не думаю что _n() можно легко адаптировать для суффиксов, особенно когда он зависит еще и от рода :)

    • А как же тогда это в коде записать изначально? Я посмотрел в кодексе и в исходниках — _n () принимает два аргумента (тип строки), которые и будут переводиться. А у меня 5 вариантов — th, st, nd, rd.
      Или изначально в _n () написать «Page %1s» (без всяких приписок) и дополнительно делать языковые файлы для en_US, в которых уже и описывать все это?
      Род — да, но тут же одно конкретное слово — «N-я страница». Или я что-то упустил?
      Для суффиксов (окончаний, нужное подчеркнуть) — я думаю без разницы.
      1 комментарИЙ (изменение на конце)
      1-Я страница (изменение где-то в середине)
      Какая разница в каком месте изменение? :)

      • Еще раз повторю, не думаю что _n() можно легко адаптировать для суффиксов. _n() используется для множественных форм, в английском языке их всего 2, потому и аргументов у _n() всего два, а дополнительные формы задаются в файле перевода.

        На вашем месте я бы написал вспомогательную функцию, и внутри нее организовал бы перевод самих суффиксов в зависимости от текущей локали. Функция будет похожа на то, что вы уже написали, правда можно ее упростить, есть масса примеров на StackOverflow и т.д. По поводу рода да, но если вы в функцию перевода передаете лишь часть «nd», «st» и т.д., то у переводчика недостаточно контекста и он может перевести все варианты как «-й», получится 5-й страница :)

        В общем думаю что с помощью gettext() не получится это правильно локализовать, поэтому лучше написать свою функцию. Если нет времени, пишите «Страница №N».

  • Александр Явтушкевич

    Там где установить перевод ошибка. ЗАтем.

  • Алексей Савченков

    Статья хорошая, нужная. Но я вот подзастрял дальше. Т.е. Есть теперь у меня два файла для каждого языка. Из комментариев я даже понял как зафиксировать админку на нужном языке. А вот как сделать, чтоб на сайте пользователь теперь мог переключать язык интерфейса на основе моих файлов? Чем создать «флажки языков»?

    • Флажки и переключение языков вам поможет реализовать плагин вроде qTranslate, WPML и т.д.

  • А реально как-то задать на какой язык переводить? Пример. Мультисайт. Многоязычный. Чтобы для каждого языкового каталога свой перевод подгружался.

    • Да. Вы же файлы локализации называете в соответствии с языком, например ru_RU.mo для русского, de_DE.mo для немецкого и т.д. а в мультисайте можно в настройках каждого сайта поменять язык для этого сайта. Начиная с версии 4.0 это можно и в обычных установках WordPress.

  • Спасибо еще раз за статью Константин. Просто, вам задел на будущее, хотелось бы теперь вот на эту тему осветить — «Вопрос подготовки темы к переводу заслуживает отдельной стати.»

    • Примем к сведению, спасибо Дмитрий :)

  • Единственный минус программы и плагина — нельзя добавить свои строки перевода. Лишь редактировать то, что есть в оригинале. Чтобы добавить свой перевод (к примеру, вы в сам шаблон подобавляли строки, готовые к переводу) можно, открыв файл PO расширение, к примеру, программой Notepad++, в нем по аналогии добавить нужные строки. Ну а затем скомпилировать MO файл.

    • Лучше для этого не редактировать тему, а создать дочернюю тему с дополнительными строками, и к дочерней теме уже готовить перевод.

      А если вы и добавили или убрали строки из кода исходной темы, с помощью Poedit вам нужно лишь обновить строки из исходного кода. Он сам найдет новые строки которые вы добавили, строки которые вы изменили и удалили.

      Работать напрямую с файлами .po в текстовом редакторе это слишком мучительно, а при обновлении из исходного кода или из шаблона .pot ваши новые строки могут пропасть.

      • Спасибо за совет :-) Но я пока не разбираюсь, что такое дочерняя тема. Вчера что-то про неё читал, но всё равно не усвоил материал. Сейчас я описал тот случай, когда пишешь тему сам. Потому что программы или плагина я не нашел, который бы делал всё тоже самое, только умел добавлять строки. Сейчас попробую в саму тему сразу конструкции закидывать, погляжу, как он их распознает. Благодарю!

  • Вот, ещё вопрос. У WordPress языковые переводы для тем хранятся в разных местах
    1) /wp-content/languages/themes/
    2) /wp-content/themes/my-themes/languages/
    3) /wp-content/languages/ (тут локализация самого WP, но перевод и туда можно всунуть. Причем, могу ошибаться, он приоритетней других).

    Если делаешь под себя чисто (не на заказ), где лучше всего и правильнее хранить переводы своей темы?

    • Если вы файлы с переводами поставляете вместе с темой, то лучше хранить в директории, которую вы указываете в load_theme_textdomain(). Директорию wp-content/languages WordPress использует для установки или обновления переводов с сервера WordPress.org (ядра, тем и плагинов).

      • А у меня такая проблема…)
        Перевёл всю тему с англ. на русский. Всё отлично, всё красиво.
        Но теперь нужен сайт копия на другом домене, но только с английским языком. Как вернуть английский язык сайту, чтобы скопировать его на другой домен? А на старом домене вернуть назад русский язык после всего этого?
        Спасибо! Буду очень ждать ответа)

  • Насколько я знаю, есть еще некая система мультиперевода GlotPress — http://blog.glotpress.org/
    Встречал на нескольких больших проектах. Но как ее скачивать и устанавливать пока совершенно не понятно. Интересно было бы узнать поподробнее.

    • Установить GlotPress не намного сложнее, чем сам WordPress. Более того, если вы хотите иметь интерфейс для управления пользователями и их ролями (валидатор и т.д.) в GlotPress, то его лучше поставить вместе с WordPress, иначе через командную строку.

  • Артур

    Добрый день. Хочу перевести админку темы Hueman. Внешняя уже переведена. Как это сделать?

    • Артур, если речь идет об опциях темы, контекстной документации и т.д., то в последней теме Hueman все эти строки не используют функции локализации WordPress, поэтому перевести их с помощью файлов локализации невозможно. В таком случае следует обратиться к автору темы с просьбой подготовить к переводу админскую часть, или сделать это самостоятельно.

      • Артур

        А как это сделать самостоятельно?

        • С помощью функций локализации в WordPress: __(), _e() и другие. У нас на эту тему к сожалению пока статей нет, но все функции локализации находятся в файле wp-includes/l10n.php в ядре.

  • А как сделать перевод плагина или темы, если она уже переведена (или я сам перевожу то, что не переведено, чтобы не слетело при обновлении)? Например, есть bbPress и он уже переведен на русский, но мне хочется чтобы везде вместо слов Forums (Форумы) было написано Talks (Разговоры). Делаем свой mo-файл, а дальше?
    У нас есть load_plugin_textdomain() и load_theme_textdomain() которые в итоге вызывают load_textdomain(). Покопался в исходниках, сходу не разобрался. В load_texdomain есть пара фильтров:

    $plugin_override = apply_filters( 'override_load_textdomain', false, $domain, $mofile );
    do_action( 'load_textdomain', $domain, $mofile );
    $mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );

    Получается тогда вешаем свою функцию на фильтр override_load_textdomain (или другой выбрать?), в ней сверяемся, если domain = ‘bbpress’, то просто в $mofile подсовываем свой путь до своего mo-файла и готово? Никаких манипуляций с копированием файлов (они складываются в wp-content/languages/) и еще чего-то?

    • В wp-content/languages складываются языковые пакеты, они могут обновляться автоматически, так что если вы не хотите потерять ваш перевод, то лучше его разместить в другом месте, например в плагине. По поводу фильтра подсказать не могу, но если с override_load_textdomain работает, то наверное правильно :)

  • Ромка

    Тема Hueman. Перевёл с помощью Poedit, как у вас в руководстве. Получилось два файла ро и мо. Загнал их в папку Languade темы, но ничего не перевелось. Тема так и осталась на английском.

  • Shimmy

    Куда можно залить перевод для темы, чтобы сообщество могло им пользоваться?

    • Сейчас пока никак, но в будущем это будет возможно с помощью GlotPress на translate.wordpress.org. Пока можно отправить файлы перевода автору темы.

  • Олег Комов

    Как в вашей теме semicolon сделать перевод слова «Поиск…» и даты — типа 4 дня назад на иностранный язык?

    • Олег, посмотрите исходный код темы, копайте в сторону human_time_diff.

  • Спасибо за интересную статью! А я вот всё думал, как исправить то, что перевод постоянно слетает при обновлении:) Оказывается, не нужно было php файлы переводить:)

  • Олег Комов

    Ребята, спасибо за инфо!

  • А у меня такая проблема…)
    Перевёл всю тему с англ. на русский. Всё отлично, всё красиво.
    Но теперь нужен сайт копия на другом домене, но только с английским языком. Как вернуть английский язык сайту, чтобы скопировать его на другой домен? А на старом домене вернуть назад русский язык после всего этого?
    Спасибо! Буду очень ждать ответа)

    • Вы просто для второго домена в настройках указываете английский язык, тогда он не будет использовать переводы.

  • Алексей

    Добрый день.

    Подскажите, пожалуйста, советом. Установил тему Mystile+WooCommerce+Saphali на WordPress 4.1.1 Rus. В верхней части домашней страницы остались Checkout и item.
    В папке Lang для этой темы есть только один файл en_GB.po. Нужно ли его править на русский язык или нужно создавать новый файлик ru_RU.po и закачать его новым файлом в Lang?

    Просто правка en_GB.po результата не дало. Как мне правильно поступить?

    • Алексей, вам необходимо скопировать en_GB.po в ru_RU.po, отредактировать его и скомпилировать в файл ru_RU.mo, оба файла затем разместить на хостинг-площадке и все должно заработать, если у вас язык в WordPress выставлен как ru_RU.

  • Vladimir Ponomarev

    А возможно что тема которая идет с тэгом translation-ready и имеется в вашей ссылке не готова к переводу (речь о теме colormag). Во всяком случае не в директории languages/themes ни в директории colormag/languages файлов по и мо этой темы я не нашел :(

    • PO файл можно сгенерировать из POT файла. MO вообще не нужен — он генерируется, когда создается перевод. Только что проверил — в теме как раз есть languages/colormag.pot. Это означает, что из него можно сделать PO-файл в Poedit.

  • Vitaly Tsymbal

    Есть ли бесплатная версия программы Поедит? ссылка что на вашем сайте стоит 19 долларов!

    • Она бесплатная. Платная версия включает в себя более «удобную» работу с файлами PO для WordPress насколько я понимаю и автогенерацию POT файла (вероятно). Короче, все отлично переводится и в бесплатной версии :)

  • Hayk Sahakyan

    Если в теме нет ru_RU его нельзя переводить?

  • Нодир

    я так и сделал но не получается (( в чем проблема??

  • Назар

    Спасибо, очень помогла ваша статья)

  • к

    Спасибо, предельно ясно.

  • Андрей

    Благодарю за статью! Воспользовался материалом во благо )

  • Анти

    Скажите, а у вас нет информации, как тему с нуля подготовить для перевода и создать на ее основании тот самый POT файл? Т.е. как самому сделать тему translation-ready?

  • Robert Mendes

    Большое спасибо. Признаться, не ожидал такого количества необходимого перевода в 1-й теме.

  • Max Prib

    Подскажите пож-та, а как отключить обновление? Я добавляю новые строки перевода, на сайте меняется, но на след день все слетает.

  • Creativitation

    В статье сказано, что не переводите исходный код темы. Ребят, а если я с нуля тему собираю, там у меня в файлах все на русском, так же какие то дополнительные элементы, которые выводятся статичным образом. Почему это считается ошибкой?

  • Александр

    У меня при переводе сайта возникла небольшая проблема.

    Тема полностью переведена на русский язык, но в некоторых местах текст просто не добавлен в файлы переводов. Такой текст удалось найти только в .php файлах. Соответсвенно перевести его удалось только там, НО при обновлении темы придется снова переводить текст в .php файле.

    Можно ли как-то обернуть этот текст и добавить его к списку переводов в .po файл?

    Спасибо!

  • Странно, но почему то не могу перевести один из своих сайтов. Использовал «Loco Translate». Использовал кто то? Делаю перевод, но он не меняется.

  • Макс Майборода

    Подскажите, можно ли повторно использовать перевод темы, чтобы слова и выражения повторяющиеся не переводить по 2ому, 3ему и так далее разу? Перевести одну тему полностью, потом для второй использовать этот же перевод, а если не хватает чего, то добавить перевод уже.

  • А у меня перевод темы сделан, но слово SHARE (поделиться) — не перевелось и где искать его, чтобы перевести, не имею представления. Можно его конечно вообще убрать, но опять же — где оно?

  • Дмитрий

    Loco Translate ни чем не хуже