Русифікація wordpress, навіщо потрібні файли mo po, переклад тим, невидимий горизонт

Як я підозрюю, цей спосіб працює не тільки з Wordpress'ом, але і з іншими CMS і програмами з відкритим вихідним кодом.

В інеті є купа статей з порадами типу: «Відкриваємо файл footer.php і замінюємо всі тексти, які там знайшли, на російський еквівалент (не забудьте про кодування). Повторити для всіх файлів у папці твоєї теми ». І як тільки ти послухався цієї ради, а тема взяла і оновилася, і тобі доведеться переводити все заново.

Що ж пропоную я?

Я пропоную створити (або відредагувати вже існуючий) файл локалізації. Тоді при оновленні плагіна або Wordpress теми переклад нікуди не дінеться.

Що це за файл локалізації .po (.mo)? Теорія.

Ти, напевно, часто бачив файли з розширенням .po або .mo в папці з темою для WordPress'а або в папці зашібенного_плагіна. Якщо не знайшов відразу, то вони ще можуть ховатися в папці Languages. Ну а якщо не бачив, то зараз почуєш про них вперше (дуже корисні і безкоштовні файли, між іншим).

.po файли - це файли локалізації. Багато популярних мови програмування (C, C ++, сценарії sh, Python, Perl, PHP, Java, Паскаль і купа інших) мають функцію gettext. ngettext або подібні, якими розмічають текст для майбутнього перекладу. Але ти скажеш, що нічого подібного не бачили в файлах footer.php. header.php або зашібенний_плагін.php і будеш прав. Оскільки ці функції, для зручності читання коду, замінюють коротким синонімом __ (два символи підкреслення) або _e або _c або ще чимось.

printf (gettext ( "My name is% s."), my_name)

printf (__ ( "My name is% s."), my_name)

Потім спеціальним екстрактором витягають всі такі рядки в спеціальний файл-шаблон з розширенням .pot. Ця ж рядок в .pot файлі буде виглядати так:

#: Header.php: 19
msgid "My name is% s."
msgstr ""

де header.php - це той файл, з якого витягли рядок "My name is% s.". а число 19 - це номер цього рядка.

Потім перекладач створює з цього файлу-шаблона файл локалізації з розширенням .po. І ось в цей файл ти можеш вписати новий рядок. Виглядати це буде так:

#: Header.php: 19
msgid "My name is% s."
msgstr "А звуть мене% s."

Але це ще не кінець. Але вже і не початок.

Як останній штрих програма перекладач створює бінарний файл (відкомпільований) з розширенням .mo. який і згодовується движку WordPress'а. Ось чому ті, хто Пробував не змогли редагувати файл .mo. Як його створити (редагувати) ти дізнаєшся далі.

Послідовність дій для перекладу.

Тепер покроково розповім як потрібно діяти якщо у тебе ні з того ні з сього з'явилося непередбачуване бажання перевести плагін або тему під улюблений CMS.

Якщо .po файли вже існують, то можна відкрити будь-який з них (якщо немає російського ru_RU.po) і відредагувати (замінити фрази іншої мови на російські). Але я, для універсальності методу, розповім про створення цього файлу з нуля.

Створи де-небудь папку (називай як хочеш) і закачувати (або копіюй) туди все .php файли твоєї теми, які потрібно русифікувати;

Русифікація wordpress, навіщо потрібні файли mo po, переклад тим, невидимий горизонт

Русифікація Wordpress або навіщо потрібні файли .mo і po, частина 1. 8.7 out of 10 based on 168 ratings

Виявляється, обов'язковим вимога для локалізації плагіна є використання у функціях __ () і _е () другого параметра.
Таким чином щоб переклад плагіна працював, крім усього вищесказаного, потрібно в його коді використовувати наступну конструкцію:
__ ( "перекладається текст", "названіе_плагіна")
І файл mo повинен мати назву - «названіе_плагіна-ru_RU.mo«.

По-перше дякую за змістовну статтю. Однак мій перший же досвід в написанні локалізації зазнав повного фіаско)

Судячи з того що у вихідних файлах присутні конструкції типу __ ( «Bla-bla-bla% s») тема повинна підтримувати файли локалізації. Однак виконавши всі інструкції даної статті і затоку файли ru_RU.po і ru_RU.mo в корінь теми перекладу на морді сайту так і не побачив ...

WP: 2.8.2
Garland-revisited: 1.4

UPD: Дуже малоймовірно, але можливо, що ти використовуєш плагін WP Super Cache (або подібний) і забув видалити кеш.

/ **
* Задаємо шлях до файлу ru_RU.mo локалізації теми
* /
load_theme_textdomain ( 'your-theme-name');

І після цього локалізація починає працювати, коли використовуємо наступний механізм розриву рядків:

_e ( 'Деяка рядок для перекладу', 'yuor-theme-name');

Щиро Дякую! Підштовхнули в потрібному напрямку ... Але хотів би додати, що крім назви теми, необхідно вказати шлях до файлу * .mo.
У моєму випадку, виявилося необхідним написати так:
load_theme_textdomain ( 'my_theme', get_template_directory (). '/ languages');
. тобто додати шлях до каталогу в якій розміщений файл * .mo (файл розташований в папці languages ​​локализуемой теми)
Сподіваюся інфа виявиться корисною

Ось ця ось штука:

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

Дякуємо! Пробую робити локалізацію. Але поки здається, що простіше вже переводити кожну нову версію.))

Файл .pot і .po - це по суті одне і те ж. Просто файл .po вже з перекладом, а .pot - без нього.
Тому ти просто вибираєш Файл -> Створити каталог ... і виконуєш, всі кроки як в статті.

Потім змінюєш розширення, і підправляти заголовок (якщо потрібно). Наводжу приклад заголовка файлу .pot зі стандартною теми Wordpress:

Є po файл для іншої версії теми, в коді старої теми так

в новій версії теми так
Sorry, the page that you are looking for does not exist.

І тому не використовується функція _e (і ніяка інша), то Poedit не знаходить текст для перекладу.

Чи є рішення, яке ключове слово вказати, щоб Poedit побачив текст?

Або ж робити локалізацію нової версії через Poedit не вийде?

вітання. у мене вордпресс3.0, російська, встановив тему зарубіжних, скористався poeditом, і виянілось, що не всі слова переведені. в випадаючому списку наприклад є «all items», виянілось що в кореневому каталоги теми є файл language.php - там є все слова =)). але з'ясувалося що якщо там замінити слова на російський то на сайті. значки питання в ромбики. значить я (за порадою друзів вирішив придбати автомашину «Москвич»), і вони ж порадили і я виконав:
Почнемо по порядку:

1. Заходимо в phpMyAdmin і переглядаємо кодування таблиць, повинна бути cp1251

Знаки питань замість тексту

2. Йдемо в саму таблицю і дивимося в якому вигляді текст статей, якщо все в порядку, то пропускаємо цей пункт, якщо вопросики, то робимо так:

* Відкриваємо дамп з базою даних (сам файл) і зберігаємо його в кодуванні cp1251
* Йдемо в phpMyAdmin і при імпорті вибираємо кодування cp1251
* Все, тепер знаків питання в таблицях не повинно бути.

3. Заходимо через фтп або менеджер файлів ISPmanager в папку з вашим сайтом / www / ваш_домен / і перейменовуємо htaccess.txt в .htaccess

ще передбачалося замінити рядки в файлі daiabase.php але він є вджумле а в вордпресс його не знайшлося ...

Значиться тепер частина слів захопила таки локалізація самого ворд преса, але не все, коли я заміняю файли pot локалізації теми (шаблону), ворд прес їх не «підхоплює», доводиться замінювати в кореневому каталозі ворд преса potфайли, тими, що я переклав poeditom, але тоді админка стає російської і знову таки poedit бракує файли з коду php. за допомогою якого організований пошук у мене. ЧПА тепер робити та..Не дає тому що прищі, а прищі тому що не дає, допоможіть розірвати це порочне коло

На скільки я зрозумів, деяких танців з бубном можна було уникнути. Просто для цього, коли ти правил language.php потрібно було вказати потрібне кодування.

З приводу перших двох пунктів нічого сказати не можу - не було потреби таке проробляти.
По третьому пункту - це навіщо було робити? Що у тебе там в .htaccess? Ти там кодування вказував? І чому до цього у тебе не було .htaccess?

І далі я не зовсім зрозумів. У тебе ж були НЕ переведені тільки файли ТЕМИ. Чому сталося так, що вже й сам WORDPRESS не перекладено?

Чисто логічно дуже дубовий спосіб локалізації - все в плюс і обсяги і пам'ять. Взяти ту ж Joom або phpprobid - перемкнув розкладку і вантажиться тільки локалізація, ніяких проблем з навантаженнями. А тут локу підключаємо і пам'ять відразу в великий плюс. Звичайно, ресурсів зараз не міряють, але чи треба їх так тринькати. І для локалізації своїх тим не знаходжу логічного підтвердження потреби в таких милицях.

Дякую за статтю, виявилася дуже корисною і пізнавальною для мене.
В'ячеслав
у мене після поновлення all in One SEO пропав російську мову, до цього був з перекладом від Лекактуса, після прочитання цієї статті копнув останнє оновлення плагіна, і виявив в ньому повна відсутність російського .РО файлу, в іншому і не тільки російського. По мимо всього іншого, виявилося, що в файлі .POT є невідповідність в номерах рядків (розбіжність на 50 рядків) ... Можливо. вам буде корисна ця інформація

Адже є більш простий спосіб ... у мене було все переведено, але після чергового оновлення теми злетіло Не пам'ятаю, в чому цей простий спосіб полягає.

Забавно, звичайно, написати таку об'ємну статтю про переведення тим і не перевести пару сслов з рейтингу: «Rating: 0 (from 0 votes)»
Браво!

У мене чомусь російська локалізація працює, а ось румунська переводить вибірково. Скажімо дату переводить, а інші частини сайту немає ...

Мої здогадки: там є російська .php в якому як то обмовляється робота скриптів. До кінця не разобраля, але суть

add_data ( «$ locale-ie», 'conditional', 'IE');

wp_print_styles ();
>
add_action ( 'admin_head', 'ru_accomodate_markup');

function ru_populate_options () add_option ( 'rss_language', 'ru');
>
add_action ( 'populate_options', 'ru_populate_options');

function ru_restore_scripts_l10n () global $ wp_scripts;

if (is_a ($ wp_scripts, 'WP_Scripts')) do_action_ref_array ( 'wp_default_scripts', array ($ wp_scripts));
>
>
add_action ( 'init', 'ru_restore_scripts_l10n');
?>

І ще. Я не зрозумів як застосувати віджети на двох мовах. Адже вони відображаються одночасно обадва. Або мова йде про написання вручну в темі з використанням «вилки»?

Товариші, підкажіть будь ласка, чи можна з МО зробити назад ПО. Або як відкрити МО. Справа в тому, що він не докінця переведений і є ПО, але без перекладу взагалі.

Хочу відкрити той недоконаності і доперекласти.

На скільки я знаю, файли mo правити не можна. Вам потрібної знайти або потрібний po або pot і вже їх переводити.

Для тих, у кого локалізація не працює, ось коротка інструкція:
1) Додаємо ru_RU в wp-config.php, виходить define ( 'WPLANG', 'ru_RU');
2) В локализуемой темі дивимося в functions.php рядок load_theme_textdomain ( 'myname');
3) Перевіряємо, що в .php файлах присутня _e ( 'sometext', 'myname');
4) У Poedit звіряємо «Каталог» - »Налаштування» - »Назва проекту та версія» - »myname», а «Шляхи» - ».» (Одна точка, якщо файл локалізації в тій де папці, де і php-файли) і генеруємо з нашого .po файл .mo
5) Файл локалізації повинен називатися ru_RU.mo, а не myname-ru_RU.mo
Тепер все має працювати!

Господа.
Ви будете сміятися, промучался я з цією справою до 3-ї години ночі.
В результаті:
Перейменував з «моя-тема-ru_RU.po» на просто «ru_RU.po» і все запрацювало як годинник!
Сподіваюся кому небудь буде корисна ця інформація.

Про yuriki і про блог

Пишу тут для тих, кому захотілося що-небудь поліпшити в цьому житті. Будь то сайт в інтернеті або суспільство, що йде на поводу у грошей (вірніше, на поводу у тих, хто нав'язує нам користуватися грошима).

Що це за картинки праворуч?

Вони для підняття настрою і натхнення на подальше вдосконалення.

Для натхнення

Схожі статті