Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Theme Development

Как да преведем нашата Wordpress тема

by
Difficulty:BeginnerLength:LongLanguages:

Bulgarian (Български) translation by Mihail Petrov (you can also view the original English article)

Изключително лесно е да забравим че съществуват други езици освен нашият роден, особено неприятно е когато забравим този факт, докато разработваме нашата невероятна Wordpress тема. Късата ни памет води до потенциална загуба на потребители а оттук и на пари. Така че внимавайте! Ако погледнете статистиката на Google за търсенето на Wordpress теми, ще установите че само една десета от тях говорят английски език като роден такъв (цифрите може да варират). В момента на писането на тази статия само 269 от темите, намиращи се в официалната библиотека на Wordpress предлагат възможност за превод. Това са едва 18% от всички над 1500 теми в базата данни на най-популярната система за управление на съдържанието. В този урок ще ви покажа как да направите вашата тема една от тези.


Как се случва всичко

Разработвате вашата тема и стигате до момента в който ви се налага да въведете някакъв тест. Например страница 404 във файла 404.php или пък именувате някакво тестово поле като коментари или автор на статията. Но веднага се сблъскваме с проблем ако потребителя на системата ни е чужденец, той ще види текста, който сме написали на езика, на който сме го написали. Решението на този проблем е да използваме една от четирите функции специално създадени за визуализиране на текстове в контекста на определен език. Текстовите полета които ползвате трябва да бъдат предадени като аргументи на тези функции. Езиковият контекст, е част от специален файл съдържащ всички възможни преводи които системата може да визуализира. Можете да използвате три типа файлове за преводи на вашата система.

  • .pot (Portable Object Template) - Този файл съдържа само и единствено текстовете които трябва да бъдат преведени без фактическите им преводи.
  • .po (Portable Object) - Създава се от файловете с разширение .pot. Представлява двойка ключ стойност където ключа е името на вашето поле а стойността е превода му на определен език. Информацията се запазва в чист вид.
  • .mo (Machine Object) - Това е двоична версия на файловете с разширение .po, което означава че тези файлове могат да бъдат зареждани много по-бързо отколкото еквивалента им в чист вид.

Първа стъпка : Функции за визуализация на текст

Вече знаете че съществуват четири функции за визуализация на текст. Всяка една от тях, изисква задължително текста който ще бъде превеждан.

  • __() - (две подчертаващи тирета). Това е базова функция, която ще ползвате в голяма част от случаите. Функцията и е да връща текст в рамките на правилният езиков контекст
  • _e() - Използва горната функция но визуализира резултата вместо да го връща. (Ползва функцията echo)
  • _n() - Ползва се когато има потенциал текста да е в множествено число. Например ако искате да изведете броят на коментарите във вашата система. Можете да изпишете 1 коментар или X коментара в  зависимост от броят им.
  • _x() - Се ползва когато превода на думата зависи от контекста в който се ползва. Важно е когато превеждате вашите текстове да сте предварително наясно с контекста в които ги ползвате за да прецените адекватната употреба на _x() във вашата система.

__() и _e()

Нека разгледаме по подробно базовите функции, които WP ни предоставя.

И двете функции имат една и съща употреба в случай. Израза който се опитваме да изведем, бива проверяван в речника на нашият .mo. Ако съществува съвпадение, то се връща като резултат, в противен случай израза остава не преведен. __() и _e() изискват само един аргумент, текста който ще бъде преведен. Вторият аргумент е опционален и ще бъде разгледан по-късно. Единствената разлика между двете функции е че __() връща стойност. Нека разгледаме пример в който  употребата на __() е по-адекватна.

Функцията връща стойността която трябва да бъде преведена на the_content(). Ако бяхме ползвали _e() тогава щяхме да се опитаме да го изведем на екрана което щеше да доведе до серия от проблеми.

_n()

Как да се справим със ситуация в която текста който визуализираме има шанс да бъде в множествено или в единствено число. Вместо да превеждате два различни низови фрагмента, можете просто да подадете теста в различните му числа. Следващите два примера връщат един и същи резултат.

За правилната си работа _n() има нужда от три аргумента. Първият е низовият фрагмент в единствено число, вторият е низовият фрагмент в множествено число и третия е числото, за което се отнася. В примера функцията get_comments_number() има за цел да върне броя на коментарите, с което да послужи като индикатор за избор на правилният текст.

Функциите _x() & _ex()

Превеждате .pot файл от английски на български и достигате до думата "scroll". В зависимост от контекста може да означава както "навито на цилиндър парче хартия", така и  "действието което правим с колелото на мишката нагоре и надолу в рамките на една web страница". Но в този случай какво е значението на думата ? Понякога преводите ни се различават в зависимост от контекста в който срещаме думата или словосъчетанието. Тези функции ни дават тази възможност. Необходимо е да предоставим като втори аргумент представляващ кратко описание на контекста в който се среща думата.

Примера ви показва разликата между двете функции, която е абсолютно същата както между __() и _e(). _x() връща резултат а _ex() го визуализира Първият аргумент и на двете функции и превежданият низ, а вторият е коментар или бележка касаеща контекста на превежданият текст.

Техники за напреднали

Нека разгледаме сценария, при който искате да генерирате текст, който е композиран от текстов низ и резултат от функция или променлива.Сигурно се изкушавате да напишете нещо от този род :

Но за съжаление POEdit ще игнорира този фрагмент защото не желае да ползва име на променлива в рамките на текста. Получава се не консистентно поведение. Текста който ще се изпрати за генериране ще бъде You have chosen the $color theme, но по време на превода ще се търси съвпадение в низа You have chosen the blue theme , който няма да бъде намерен. Какво е решението на този проблем? Нека променим примера по следният начин:

Решаваме проблема като разделим низовете на две и конкатенираме с променливата. Създаваме си обаче нови главоболия защото се появява необходимостта да добавим нови преводи. Съществува вероятност тези изречения дои да не могат да бъдат преведени на някой от езиците, заради тяхната комплексност. Връщаме се в изходна позиция.

Решението на нашият проблем е да ползваме функция позволяваща вмъкване на текст. Такива са printf() и sprintf() нека разгледаме примера:

Не само, че решаваме всички проблемите, които констатирахме до сега, но и кода ни става сравнително по-четим от преди. И двете функции приемат като първи аргумент низа, който ще визуализират. Този низ съдържа поне един параметър, (в този случай %s), който ще бъде заменен със стойностите на останалите аргументи на функциите. Освен параметъра %s, функцията предоставя и други за които можете да прочетете повече информация в официалното ръководство на php. Забележете, че разликата между printf() и sprintf() е подобна на тази между _e() и __()


Втора стъпка : Въведение в POEdit

След като сме дефинирали всички необходими за превод низове, следва да ги съберем в рамките на темплейта ни за преводи. .pot. За целта ще ползваме инструмента POEdit, който ни дава възможност както да създаваме .pot файлове така и да генерираме резултатни .po и .mo файлове.

Свалете и инсталирайте POEdit от адреса
http://www.poedit.net/download.php

Създайте нов .pot файл. От диалоговото меню изберете File > New Catalog. Ще видите диалогов прозорец изискващ набор от данни. Най-важното поле е името на проекта и езика ви. Също така въведете следният текст в полето "Plural Forms":

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

POEdit project info

Навигирайте до таба "paths" и въведете пътя до мястото на което искате да съхраните резултатният .pot файл. Ако поставите .pot файла в основната директория на темата, въведете символа . (точка). Ако искате да сложите файла в директорията "language", тогава въведете символа .. (две поредни точки)

POEdit path

Следва да кажете на POEdit кои ключови думи да търси в процеса на сканиране на файловете. Въведете следните :

  • __
  • _e
  • _n:1,2
  • _x:1,2c
  • _ex:1,2c

Израза :1,2 казва на POEdit, че тези ключови думи имат две части. По подразбиране, вторият аргумент е множествено число освен ако не ползвате специалният символ c което означава че вторият аргумент е коментар.

POEdit keywords

Готови сме, натиснете "OK" и изберете дестинация за изходният ви файл. POEdit ще сканира всичките ви файлове, намирайки съвпадения с функциите ви за превод и съхранявайте ги без превод в новия .pot файл. Ако искате да предоставите базовият минимум за интернационализация на вашата система, е достатъчно просто да предоставите резултатният файл заедно с вашата Wordpress тема, но ако желаете да преведете темата си на друг език, следвайте следващата стъпка.


Трета стъпка : Превод и генериране на .po файлове

POEdit translating singular
  1. Списък на всички текстове за превод
  2. Текущо превежданият низ
  3. Превода
POEdit translating plural
  1. Единствено и множествено число на превежданият низ
  2. Табове за преминаване между единствено и множествено число.
  3. Превода

След като приключите с преводите, следва генериране на .po файл.Всеки непреведен низ, ще бъде визуализиран в оригинал, при опит да бъде визуализиран.

От огромно значение за правилната работа с файла ви е неговото име. Името се състои от две части, съкращение на езика и съкращение на станата. Ако превеждате темата си на американски английски, името на файла ви ще бъде en-US.po. Главните букви имат значение.Предоставям пълен списък с всички езици и техните кодове :

При успешно съхранение на файла POEdit автоматично генерира .mo файл. Важно е да съхранявате и трите файла заедно за да имат възможност и други транслатори да създават преводи за различни езици, както и да могат да добавят или поправят вече направени от вас транслации.


Четвърта стъпка : WordPress конфигурация

Нека да преговорим. Всички низове в рамките на вашата тема бяха подадени като аргументи на функциите за превод на WordPress. След това ползвахме POEdit за да ги намерим и добавим в рамките на .pot файла, който генерирахме. Този файл може да се ползва като основа за генериране на .po и .mo файлове. Всички генерирани файлове стават част от резултатната тема. Последната стъпка е архивирането и инсталирането и в рамките на WordPress платформата. Отворете файл wp-config.php разположен в основната директория на WordPress инсталацията.

Добавете кода на езика и страната който ползвате за превод на текущата тема, като аргумент на дефиницията define('WPLANG', ''); Например ако искате да преведете темата си на немски език, дефиницията ви ще изглежда по следният начин:

Честито, вашата тема вече е интернационализирана. Не забравяйте да добавите .pot , .po и .mo файловете към нея.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.