Як перевести wordpress тему на іншу мову

Не звертати уваги на інші мови при розробці вашої WordPress теми дуже просто, але це погана звичка, і вона миттєво відкидає цілий ринок WordPress користувачів, і потенційні тисячі доларів втраченого прибутку. З ТОП-10 країн, які шукають WordPress теми в Google, тільки одна англоговорящая (США), інших - 9. У момент написання це статті в базі даних тим WordPress з більш ніж 1500 тем було всього 269. які позначені як готові до переведення. Тобто всього 18%. Я покажу вам, як зробити вашу тему однієї з них.

Як це працює

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

Ось три файли перекладів. які ми використовуємо:

  • .pot (Portable Object Template) - шаблон, який містить посилання на кожен рядок тексту у вашій темі, яка потребує перекладу. Файл не містить перекладу. Це звичайний текстовий файл.
  • .po (Portable Object) - створений з .pot файлу. po містить всі рядки і їх переклади на один конкретний мову. Це теж текстовий файл, який можна редагувати.
  • .mo (Machine Object) - бінарна версія .po файлу. При використанні машинного коду, файл може використовуватися набагато швидше, ніж текстовий його варіант.

Крок 1. Чотири функції

Кожна з чотирьох функцій вимагає як мінімум один аргумент - текст, який потрібно перекласти. функції:

__ () і _e ()

Це найпростіші функції для перекладу, які може запропонувати WordPress. Давайте розглянемо приклад для кожної функції:

Обидві ці функції роблять одне і те ж. Затвердження "this is a post" перевіряється на наявність у файлі .mo і повертається результат.

__ () і _e () вимагають тільки один аргумент, який їм потрібно передати - текст для перекладу. Єдина різниця між цими функціями - для __ () потрібно вираз echo. Давайте розглянемо приклад, де __ () працює краще, ніж _e ():

Замість того, щоб передавати рядок функції _content (). ми використали __(). щоб текст можна було перевести. Якби ми використовували замість цього _e (). замість того, щоб передати текст в the_content (). переклад тексту був би виведений в документ, що могло б викликати різного роду неприємності.

Що, якщо у вас ситуація, коли текст, який ви виводите, може мати множинне або одиничне число, як «Х відгуків» в прикладі вище? Замість того, щоб давати дві різні рядки тексту для перекладу, ви можете сказати, що у вас є частина тексту, для якого потрібен переклад в одиничному і множині. Наступні два приклади виводять для користувача один і той же результат:

_x () і _ex ()

Припустимо, ви переводите .pot файл і ви проходите мимо слова "scroll". Ви інтерпретіруете його як «шматок скрученого паперу» або «прокрутити сайт»? Ви можете використовувати контекст, щоб пояснити, як його треба перекладати. Ці функції дадуть вам таку можливість своїм другим обов'язковим атрибутом, який вимагає короткий опис фрази або слова. Подивіться на приклад:

просунуті методики

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

Коли ви будете створювати ваш .pot файл, POEdit проігнорує це, оскільки він не хоче використовувати змінну всередині пропозиції. У .pot файл додасться You have chosen the $ color theme. але коли буде відбуватися пошук перекладу, коли скрипт виконується, буде шукатися рядок You have chosen the blue theme. яка не буде знайдена. Ось, що ми зробимо:

Таким чином, скрипт зможе отримувати перекази, але тепер стало складніше переводити, тому що пропозиція розбите. Ця пропозиція може навіть не мати перекладу на деяких мовах, які сильно відрізняються синтаксисом, наприклад, в німецькому, де їх переклад слова "chosen" повинен бути в кінці речення. Вам потрібно пояснити, що ці дві окремі текстові рядки - частина однієї, і що "theme" може не перекладатися як "theme".

Рішення - використовувати одну текстову рядок. Тут стануть в нагоді функції printf () або sprintf (). Давайте подивимося, на що повинен бути схожий наш код:

Це не лише дасть змогу розв'язати нашу проблему, але і буде набагато акуратніше по виконанню, а також використовує всього один рядок коду. Перший аргумент функцій printf () або sprintf () - рядок для виведення, яка включає як мінімум один заповнювач, в даному випадку% s (що означає рядковий тип "string"), а всі інші аргументи - змінні, які треба вставити в початкову рядок .

Є багато різних наповнювачів, який ви можете використовувати всередині рядка, ви можете знайти повний список по sprintf в PHP керівництві. Зверніть увагу, що відмінність між printf () і sprintf () подібно відмінності між _e () і __ () відповідно.

Крок 2. Введення в POEdit

Тепер, коли ви правильно розмітили весь виведений у вашій темі текст, вам потрібно зібрати цю інформацію в .pot файл. POEdit - фантастична програма, яка дає можливість створювати ваш .pot файл і також надає простий у використанні GUI, який можна використовувати для створення ваших .po і, що ще більш важливо, також .mo файлів.

По-перше, вам потрібно завантажити POEdit. який ви можете знайти для Windows, Mac і Linux за цим посиланням.

Коли POEdit встановлений, ви можете створити ваш файл .pot. Щоб зробити це, перейдіть в File → New Catalog. Ви побачите діалогове вікно, де вам потрібно буде ввести базові дані. У вкладці "Project Info" - назва проекту і ваш язик / країна. Ви також можете ввести в блоці "Plural Forms" наступне:

Plural Forms. nplurals = 2; plural = n! = 1;

Як перевести wordpress тему на іншу мову

У вкладці "Paths" введіть шлях, де можуть бути знайдені файли, по відношенню до місця, де лежить етот.pot файл. Наприклад, якщо ви розміщуєте файл .pot в кореневій папці теми, введіть. (Точку). Якщо ви хочете розмістити .pot файл в папці "language" всередині кореневої папки теми, введіть .. (дві крапки).

Як перевести wordpress тему на іншу мову

Тепер вам потрібно повідомити POEdit. які ключові слова шукати при скануванні наших файлів. Введіть наступне:

Як перевести wordpress тему на іншу мову

Якщо ви хочете забезпечити мінімальну підтримку міжнародного переказу, ви можете надати ваш .pot файл разом з темою і на цьому зупинитися, але якщо ви можете перевести тему на іншу мову самостійно, ви можете надати свою тему з підготовленим перекладом, як описано на кроці 3.

Крок 3. Переклад і створення свого .po файлу

Як перевести wordpress тему на іншу мову

  1. Список всіх рядків для перекладу.
  2. Поточна перекладається рядок.
  3. Ваш новий рядок.

Як перевести wordpress тему на іншу мову

  1. Єдине і множинне число поточного рядка.
  2. Виберіть для перемикання між єдиним і множинним числом.
  3. Ваш переклад.

Як тільки ви зберігається, POEdit за замовчуванням автоматично створює .mo файл крім .po файлу. Рекомендується включати всі три файли в вашу тему, щоб люди могли створити свої переклади і легко редагувати існуючі.

Крок 4. Налаштування WordPress

Давайте підіб'ємо підсумок, що ви вже зробили. Ви сказали WordPress про всьому тексті, який ви хочете зробити доступним для перекладу, потім ви використовували POEdit для збору всіх рядків і приміщення їх в файл .pot. який може бути переведений в файлах .po і .mo. Ці файли потім були включені в файли теми.

Останній крок - це запакувати вашу тему, встановити її і дати WordPress зрозуміти, .mo файл якої мови ви хочете використовувати. Це дуже проста процедура, де ви звертаєтеся до файлу wp-config.php в кореневій папці вашого WordPress.

Ваш файл повинен вже містити define ( 'WPLANG', ''); - але якщо цього немає, ви можете додати. Вам просто потрібно додати свою мову і код локалізації в define. Якщо ви переводили вашу тему на російський, у вас буде таке:

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

Джерело: WP.tutsplus.com

Доброго дня! Є така проблемка: придбав тему Avada, в файлі wp-config.php немає рядка define (# 'WPLANG #', # '#'); Додав після define (# 'WP_DEBUG #', true); Завантажив файли .po і .mo в директорії теми. Перевелося, але не всі. Хоча в файлі .po переклад є. Що я не вірно зробив?

Переклав шаблон і створив ru_Ru.po і ru_Ru.mo. Закинув їх в директорію шаблону в папку language, в / wp-content / languages ​​/ themes, перейменувавши файли в названіешаблона-ru_Ru.po / .mo.
Додав в wp-config рядок define ( 'WPLANG', 'ru_RU');
Додавав безліч варіантів в functions.php шаблону.

Нічого не допомогло. Що робити?

А в каталозі безпосередньо вашої теми є така папка? / Wp-content / themes / вашатема / language. Зазвичай туди потрібно поміщати файли локалізації, тому що в тій папці що ви вказали - зберігаються локалізації від штатних тим типу twentyfifteen і т.д.

Все робив по Вашій інструкції. Нічого не вийшло.

Робив через POEdit, все перевів, зайшов до себе на хостинг (ру-центр) в
файловий менеджер і додав файл .mo, оновив сайт, все також, нічого не
перевелося. Також, додавав і .po, не вийшло. Підкажіть, як правильно
перевести, тому-що робив все по інструкції і не вийшло
:(
Файл додавав в папку з самою темою, в корінь.

Після збереження перекладу у вас на виході має бути 2 файли. po і .mo. При чому вони повинні мати специфічне закінчення в назві, так для російської мови файли повинні називатися ru_RU.po і ru_RU.mo. Далі заливати їх потрібно не в корінь з темою, а в папку languages, що в корені теми. Якщо такий папки немає, її потрібно створити.

Спасибі за відповідь!

Да да, такі файли з'явилися, обидва файли я закинув через файловий менеджер на свій хостинг, / themes / моя тема / languages. Обидва файли туди злив, там вже знаходився файл .pot З ним я так зрозумів нічого робити не потрібно було. Оновив тему, все одно нічого не перевелося, скажіть в чому може бути проблема? Я не зовсім спец в цьому, робив по уроку, але нічого не вийшло. Переклад причому вийшов, все вийшло. Я відкривав відразу в POEdit і перекладав кілька десятків слів і фраз. Я вичитав в інтернеті, що після всього цього потрібно в темі знайти functions.php здається і вставити цей рядок для виклику load_theme_textdomain (domain-name) через Notepad, щоб тема змогла підключитися до цієї мови, це правда? Так я ще не пробував, тому що не зовсім зрозумів куди, що і навіщо вставляти. Якщо просто додати ці два файли в папку languages ​​самої теми, повторюся, то нічого не відбувається, все фрази в темі залишаються англійською, хоча тема була готова до перекладу, я її знайшов якраз на вашому сайті з посиланням на themeforest :)
Допоможіть, будь ласка, вже дуже хочеться щоб вона заорали російською, так як переклад готовий, але мабуть щось потрібно підключити кудись!

Нічого додатково прописувати в functions не потрібно. Переконайтеся, що у файлі wp-config.php в корені сайту прописаний правильний мовної ідентифікатор define ( 'WPLANG', 'ru_RU');

Схожі статті