Uvod
Prevodjenja wordpress-a možemo podeliti na:
- Prevodjenje unetog sadržaja tzv. frontend-a (prevodi korisnik korišćenjem plugina: Polylang ili WPML…)
- Prevodjenje backend-a:
- WordPress core (već prevedeno pri instalaciji)
- Teme ili plugin-a (priprema i prevodi programer)
Domen (text domain)
Domen za prevodjenje (text Domain) je jedinstveni slobodno izabrani pojam koji ukazuje na folder unutar teme ili plugin-a u kome se nalaze fajlovi neophodni za prevodjenje .po i .mo. WordPress po defaultu traži fajlove za prevodjenje na dva mesta:
- wp-content/languages
- wp-includes/languages
za sve druge lokacije je potrebno to i naglasiti.
Preporuka je da se u svakom fajlu teme ili plugin-a u kome postoji tekst spreman za prevodjenje u komentaru na početku pojavi i sledeće:
1 2 3 |
/* * textdomain: naziv domena */ |
Domen u temi
Kod razvoja teme wordpress proverava da li postoje i gde se nalaze fajlovi za prevodjenje sa funkcijom load_theme_textdomain(). Ova funkcija se koristi unutar functions.php i potrebna joj je putanja do domena.
1 |
load_theme_textdomain( $domain, $path ) |
Ova funkcija vraća TRUE ako je tekst domen učitan i FALSE ako nije.
Primer
1 2 3 4 |
function my_theme_setup(){ load_theme_textdomain('my_theme', get_template_directory() . '/languages'); } add_action('after_setup_theme', 'my_theme_setup'); |
Domen u plugin-u
Kod razvoja plugina se koristi funkcija load_plugin_textdomain().
1 |
load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) |
Gde su:
- $domain – (string) (required) jedinstveni naziv domena koji mora da se poklapa sa slug-om plugin-a. Ukoliko slug od više reči koristi se “dashes” – a ne underscore _
- $abs_rel_path – (string) (optional) Relativna putanja do foldera gde je .mo fajl. NE KORISTI SE VIŠE pa se ostavlja FALSE što je i default-na vrednost.
- $plugin_rel_path – Ovaj parametar se koristi umesto pretodnog. Obezbedjuje relativnu putanju do WP_PLUGIN_DIR.
Primer
1 2 3 4 |
function myplugin_load_textdomain() { load_plugin_textdomain( 'my-plugin', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' ); } add_action( 'plugins_loaded', 'myplugin_load_textdomain' ); |
Priprema teme ili plugin-a za prevodjenje
Internacionalizacija (tzv. i18n) i lokalizacija (tzv.l10n) u WordPress-u je proces pripreme delova teksta za prevodjenje. Ovo podrazumeva obavijanje (eng.wrap) teksta posebnim gettext funkcijama. Ove funkcije proveravaju da li postoji prevod “obavijenog” teksta u textdomain-u i ako postoji vraćaju ga.
Kada se pravi tema ili plugin tekst obavijen gettext funkcijom MORA biti napisan na ENGLESKOM jeziku !!!
Gettex funkcije
__()
Ovo je osnovna funkcija koja uzima tekst i vraća promenjivu sa prevedenim tekstom ako postoji u domenu.
1 |
$translated_text = __( $text, $domain ) |
Primer
Ukoliko unutar koda imamo ovakav deo:
1 |
the_content( ‘Read more’ ); |
Da bi omogućili prevodjenje teksta “Read more” kada se promeni jezik potrebno je obaviti tekst sa funkcijom kao u sledećem primeru:
1 |
the_content( __(‘Read more’,’mytheme’) ); |
_e()
Ova funkcija radi isto stim što i prethodna stim što i odmah štampa preveden tekst.
1 |
_e( $text, $domain ) |
Primer
Ukoliko unutar koda imamo ovakav deo:
1 |
echo ‘Hello user’; |
Da bi omogućili prevodjenje teksta “Read more” kada se promeni jezik potrebno je obaviti tekst sa funkcijom kao u sledećem primeru:
1 |
_e(‘Hello user’,’mytheme’); |
_n()
Ova fukcija omogućava pored jednine i vraćanje prevedene reči u množini
1 |
_n( $single, $plural, $number, $domain ) |
- $single – prevod teksta kojiće biti korišćen ukoliko je broj 1
- $plural – prevod teksta kojiće biti korišćen ukoliko je broj veći od 1
- $number – broj koji se koristi za odredjivanje množine
- $domain – domen
Primer
1 2 3 4 5 6 |
rating = '3'; $text = sprintf( _n( '%s star', '%s stars', $rating, 'your_textdomain' ), $rating ); echo $text; //za broj 3 vraća: 3 stars |
_x()
Ova funkcija omogućava različiti prevod iste reči u zavisnosti u kom kontekstu se pominje.
1 |
_x( $text, $context, $domain ) |
- $text – Tekst za prevod
- $context – Informacije o kontekstu
- $domain – domen
Funkcije za prevodjenje i encodovanje
Takodje postoje funkcije koje pored toga što rade kao prethodne funkcije i dodatno encoduju string-ove i omogućavaju bezbedno korišćenje. One se koriste kada je u pitanju unos preko formi:
- esc_attr__()
- esc_attr_e()
- esc_attr_x()
- esc_html__()
- esc_html_e()
- esc_html_x()
Primeri dobre prakse
Preporuka je da se koriste cele rečenice jer raspored reči u rečenici nije isti kod različitih jezika. Ukoliko bi se prevodila reč po reč onda rečenica na drugom jeziku možda ne bi imala smisla.
Primer
Koristite promenjive unutar rečenica za prevod.
1 2 3 4 5 |
printf( /* translators: %s: Name of a city */ __( 'Your city is %s.', 'my-plugin' ), $city ); |
Primer
Uvek je bolje koristiti “format string” umesto konkatenacije
1 2 3 4 5 6 |
printf( /* translators: 1: Name of a city 2: ZIP code */ __( 'Your city is %1$s, and your zip code is %2$s.', 'my-plugin' ), $city, $zipcode ); |
Primer nepravilnog koda
1 2 |
// This is incorrect do not use. _e( "Your city is $city.", 'my-plugin' ); |
Prethodni primer daje frazu za prevod: “Your city is $city.” i ne koristi promenjive.
Primer
Koristite “placeholders”
1 2 3 4 |
printf( __( 'Search results for: %s', 'my-plugin' ), get_search_query() ); |
Prevodjenje teme ili plugina
Svi podaci u vezi prevodjenja se čuvaju u fajlovim sa ekstenzijama:
-
.POT fajlovi
POT (Portable Object Template) fajl sadrži sve reči koje su obavijene sa nekom gettex funkcijom kao što je __() ili__e() .
-
.PO fajlovi
PO (Portable Object) fajl pored reči koje su “obavijene” sa gettex funkcijama sadrži i njihove prevode u obliku razumljivom ljudima.
-
.MO fajlovi
MO (Machine Object) fajl je konvertovani .PO fajl u format razumljiv kompjuteru.
Pošto smo napravili folder u okviru teme ili plugina poda nazivom “languages” i “load-ovali” text domen sada možemo da prikupimo sve delove taksta koji su obavijeni sa nekom gettext funkcijom na jedno mesto i pridružimo im prevod. Sve to se čuva u .po fajl-u. Za pravljenje .po fajlova i kompajliranje u .mo fajl-ove se koristi aplikacija “PoEdit”.
Postupak je sledeći:
- Nakon startovanja aplikacije kliknuti na File/New
- Izabrati jezik na koji prevodimo
- Sačuvamo fajl na ikonicu Save. Folder u koji smeštamo je “languages” a pri davanju imena se pridržavamo sledećih pravila:
- za teme u obliku “domen_locale.po” (za Srbiju bio sr_RS.po),
ostale skraćenice za svaki jezik možete pogledati na stranici make.wordpress.org/polyglots/teams/ - za plugin-e u obliku “text_domen-domen_locale.po”,
(pa bi za plugin sa tekst-domen-om: “plugin-domen” i za Srpsku lokalizaciju bio plugin-domen-sr_RS.po)
- za teme u obliku “domen_locale.po” (za Srbiju bio sr_RS.po),
- Otvorimo prozor za setovanje aplikacije “Catalog/Properties”
- U tabu Translation properties popunim osnovne podatke
- U tabu “Source path” izaberemo foldere u kojima se nalaze fajlovi sa tekstom koji je obavijen nekom od gettext funkcija
- U tabu “Source keywords” izaberemo koje gettext funkcije tražimo:
- Kada zatvorimo properties izaberemo opciju “Extract from sources” koja daje naredbu da se pretraže sve gettext funkcije u izabranim fajlovimo.
- Kada “PoEdit” završi potragu za gettext funkcijama onda otvori prozor sa spiskom svih textova obavijenih gettext funkcijama i dozovoljava da unesemo prevod. Prevod treba da bude na ćirilici jer se lako prebacuje na latinicu kasnije jednostavnim uključivanjem plugina za prebacivanje na latinicu.
- Nakon prevodjenja je neophodno snimiti sve promene na dugme “Update”
nakon čega ćé PoEdit napraviti fajl .po i .mo
Ovde takodje mogu da se izbace fajlovi ili folderi iz pretrage za gettext funkcijama.
Ukoliko otvorimo .po fajl sa Sublime text možemo jasno da vidimo u kojim fajlovima i u kom redu fajla se nalazi odredjeni tekst.
Promena jezika backend-a
Da prevodjenje bilo moguće neophodno je da postoje fajlovi sa prevodima i to:
- za standardne opcije admin stranice (wordpress core)
(fajlovi u textdaomain-u wp-content/languages)
Ovi fajlovi su pripremljeni i downloaduju se automatski pri izboru jezika - za deo admin stranice vezan za temu
(fajlovi u texdomenu naše teme tema/languages
Jezik backend-a se lako menja na admin stranici u delu Settings/General
Backend na različitom jeziku od Frontend-a
Ukoliko je potrebno da backend admin stranice bude na jednom jeziku a frontend na drugom onda koristimo plugin kao što je Backend Localization
Srpski WordPress
Srpski WordPress je standardni engleski wordpress samo što ima downloadovane fajlove za srpski prevod unutar standardnog text domena wp-content/languages
U ovome folderu (text-domain) se nalaze:
- fajlovi vezni za prevodjenje backend-a wordpress-a
- folder themes gde su prevodi defaultnih tema koje dolaze uz wordpress
- folder plugins u kome se nalazi fajl za prevodjenje plugina koji dolazi uz WordPress tj. Aksimet
Engleski WordPress uvek dolazi samo sa engleskim nazivima a nove jezike downloaduje tek po izboru jezika.
Ukoliko ipak nešto menjate u ovim fajlovima, sve promene će biti “pregažene” pri sledećem update-u stoga je pametno update-ovati engleski wordpress a ne srpski da bi se sačuvali podaci.
Srpski backend na latinici
Postupak prebacivanja ćiriličnog backend-a na latinicu je sledeći:
- Kliknite na „Kontrolnu tablu“.
- U meniju sa leve strane pronađite „Dodaci“ i pritisnite na to.
- Na novootvorenoj stranici biće prikazan spisak svih postavljenih dodataka. Pronađite dodatak „Srpski prevod na latinici“.
- Aktivirajte plugin.
- Nakon ovoga WordPress će biti na srpskom jeziku i latiničnom pismu. Ukoliko želite da ponovo uključite srpski jezik na ćirilici potrebno je samo da isključite ovaj dodatak.
- Posle svakog ažuriranja WordPress-a ostaće vaše podešavanje za jezik i pismo.