Det er veldig enkelt å få et blikk øye med andre språk når du utvikler ditt WordPress-tema, men dette er en veldig dårlig vane og slår øyeblikkelig bort et helt marked for WordPress-brukere og potensielt tusenvis av dollar i tapte inntekter. Ut av de ti beste landene som søker på Google for "WordPress-temaer", er bare en engelskspråklig (USA), og det kommer 9.. Når du skriver dette, er det bare 269 temaer i WordPress 'tematatabase som er merket som oversettelsesklar ut av mer enn 1500 temaer. Det er bare 18% av temaene. Jeg skal vise deg hvordan du lager en av dem.
Når du vanligvis lager et tema, vil du ganske enkelt hardkode noen tema tekst som 404 feilmeldingen i 404.php fil eller etiketter som "kommentarer:" eller "forfatter:". Hvis brukerens WordPress er for eksempel tysk, vil disse tekststykkene fortsatt vises på engelsk. Løsningen på dette er å returnere eller ekko disse utsagnene ved hjelp av en av fire WordPress-funksjoner som er utformet for å referere til en språkfil for den riktige teksten. Når du har teksten din innpakket i disse funksjonene, kan du opprette en fil som inneholder alle oversettelsene som refereres hver gang temaet lastes. Det er tre oversettelsesfiler som vi bruker:
Hver av de fire funksjonene krever minst ett argument, som er teksten som skal oversettes. Funksjonene er:
__ ()
- (to understreker) Den grunnleggende funksjonen som du vil bruke mesteparten av tiden. Den returnerer teksten på riktig språk._E ()
- Det samme som __ ()
bortsett fra det ekko teksten i stedet for å returnere den._N ()
- Brukes når teksten har potensial til å være flertall, for eksempel hvis du skulle vise hvor mange kommentarer du har gjort, vil du kanskje sende ut enten «X kommentarer» eller «X kommentar» avhengig av hvor mange kommentarer du har._x ()
- Nyttig når oversettelsen av ordet avhenger av konteksten. "Innlegg" kan bety "et innlegg (substantiv)"eller" å legge inn (verb)"avhengig av kontekst. Det er viktig for oversetteren å vite hva du mener når oversettelsen skal være nøyaktig. _x ()
brukes hovedsakelig der enkelt ord brukes. Dette er de enkleste oversettelsesfunksjonene som WordPress har å tilby. La oss ta en titt på et eksempel på hver:
Begge disse funksjonene gjør akkurat det samme her. Erklæringen "dette er et innlegg" blir sjekket mot .mo-filen hvis det er en, og returnerer resultatet. __ ()
og _E ()
krever bare ett argument som skal sendes til dem, hvilket er teksten vi ønsker å bli oversatt. Et annet valgfritt argument er tilgjengelig, og vi kommer til det senere. Den eneste forskjellen mellom de to er det __ ()
trenger ekko
erklæring her. La oss se på et eksempel hvor __ ()
fungerer bedre enn _E ()
:
Istedenfor å sende en streng til innholdet()
funksjon, vi har brukt __ ()
slik at teksten kan oversettes. Hvis vi hadde brukt _E ()
her i stedet, ville du ha oversettelsen av "Klikk her for å lese mer" ekko til dokumentet i stedet for å bli sendt til innholdet()
som ville føre til alle slags unhelpful problemer.
Hva om du har en situasjon der teksten du skriver ut kan være en flertall eller en singular som "X kommentarer" eksempelet ovenfor? I stedet for å gi to forskjellige tekststrenger til oversetteren, kan du si at du har et enkelt stykke tekst som trenger en singular og flertall oversettelse. De følgende to eksemplene gir begge samme resultat til brukeren:
_N ()
krever tre argumenter. Den første er singularversjonen av teksten, den andre er flertallet, og den tredje er nummeret som det refererer til. I dette tilfellet, get_comments_number ()
er å finne hvor mange kommentarer er på et innlegg og da _N ()
Velger riktig tekst som skal brukes.
La oss si at du oversetter en .pot-fil, og du kommer over en oppføring "scroll". Skal du tolke det som "et stykke rullet papir" eller "panorere opp eller ned på nettsiden"? Du kan virkelig gjøre med noen kontekst for å beskrive hva du trenger å oversette den til. Disse funksjonene gir deg den muligheten, ved å ha en andre nødvendig attributt som ber om en kort beskrivelse for å beskrive uttrykket eller ordet. Se eksemplet nedenfor:
Eksemplet viser forskjellen mellom _x ()
og _ex ()
. Det er det samme e
, som med _E
, for å gjøre funksjonen ekko utgangen i stedet for å returnere den. For begge er vår første parameter vår tekst som trenger oversettelse, og den andre er en kommentar eller et notat om oversettelsesteksten for å gjøre det klart hva som menes.
La oss si at du har en situasjon der teksten du vil generere er sammensatt av en tekststreng med resultatet av en funksjon eller verdien av en variabel satt et sted inne i den. Du kan bli fristet til å rette noe slikt:
Når det gjelder å lage .pot-filen, ignorerer POEdit dette fordi den ikke vil bruke en variabel midt i en setning. Årsaken er at den vil sende strengen Du har valgt $ fargetemaet
til .pot-filen, men når det gjelder å søke etter oversettelsen når skriptet utføres, vil det søke etter strengen Du har valgt det blå temaet
som den ikke finner. Så hva hvis vi gjør dette i stedet:
Skriptet vil nå kunne hente oversettelsene, men nå er det blitt for vanskelig å oversette fordi setningen er brutt opp. Denne setningen kan ikke engang oversettes på noen språk som har stort sett forskjellig syntaks, for eksempel på tysk hvor deres ord for "valgt" skulle vises i slutten av setningen. Du trenger å gå gjennom trøbbel for å forklare at disse to separate tekststrengene er en del av en, og at "tema" kanskje ikke oversetter til "tema" i det hele tatt.
Løsningen er å bruke en enkelt tekststreng som har en enkelt sitat-vennlig syntaks. Det er her printf ()
eller sprintf ()
funksjoner blir nyttige. La oss ta en titt på hva vår kode må se ut som:
Ikke bare løser dette alt vårt problem vi hadde før, men det er mye tidier og bruker bare en linje med kode. De printf ()
eller sprintf ()
Funksjoner 'første argumenter er strengen som skal sendes ut som inneholder minst en plassholder, i dette tilfellet % s
(som betyr "streng"), og andre argumenter er variabler som skal plasseres i den innledende strengen. Det er mange forskjellige plassholdere du kan bruke inne i strengen din, og du kan finne en fullstendig liste under sprintf
i PHP manualen. Legg merke til at de forskjellige mellom printf ()
og sprintf ()
den er lik _E ()
og __ ()
henholdsvis.
Nå som du har merket all tekstutdata på temaet ditt, må du nå samle denne informasjonen i en .pot-fil. POEdit er et fantastisk program som gir deg muligheten til å lage din .pot-fil, og gir også en brukervennlig GUI som kan brukes til å lage .po og, enda viktigere, også .mo-filene dine.
Først må du laste ned POEdit, som du finner her for Windows, Mac og Linux:
http://www.poedit.net/download.php
Når POEdit er installert, kan du opprette .pot-filen din. For å gjøre dette, gå til Fil> Ny katalog. Du vil bli presentert med en dialogboks der du må legge inn noen grunnleggende opplysninger. Viktigst i fanen "Prosjektinfo" er prosjektnavnet og ditt språk / land. Du må også skrive inn følgende i boksen "Plural Forms":
Flertallskjemaer: nplurals = 2; flertall = n! = 1;
På banen "Fane", skriv inn banen der filene kan bli funnet i forhold til lagringsdestinasjonen til denne .pot-filen. For eksempel, hvis du setter .pot-filen i temaets rotmappe, skriver du inn .
(periode). Hvis du vil plassere .pot-filen i en "språk" -mappe inne i temaroten, skriv inn ...
(to perioder).
Deretter må du fortelle POEdit hvilke søkeord du skal se etter når du skanner våre filer. Skriv inn følgende:
De : 1,2
forlengelse fortell POEdit at disse søkeordene har to deler til dem. Som standard er det andre argumentet flertallet med mindre du inkluderer c
som betyr det andre argumentet er en kommentar.
Du er god å gå! Klikk på "OK" og velg et sted for å lagre .pot-filen. Husk at den må forholde seg til banen du definerte tidligere. POEdit vil nå skanne gjennom filene dine og finne alle forekomster av oversettelsesfunksjonene dine og lagre dem uten oversettelser i .pot-filen. Hvis du bare vil gi den minste støtten til internasjonal oversettelse, kan du sende din .pot-fil med temaet ditt og stoppe her, men hvis du selv kan oversette temaet ditt til et annet språk, kan du sende temaet ditt med en ferdig oversettelse som beskrevet i trinn 3.
Når du har oversatt alle strengene i .pot-filen, kan du lagre dette som din .po-fil. En hvilken som helst streng som du ikke har oppgitt en oversettelse for, vil vises på originalspråket når noen ser på temaet ditt.
Filnavnet til .po er avgjørende. Gettext bruker ISO 639-standarden for språkforkortelser og ISO 3166 for lokaler. Hvis oversettelsen din er skrevet på amerikansk engelsk for eksempel, vil filnavnet ditt se ut en-US.po
. Kapitalisering er også viktig her. For en fullstendig liste over språk- og landskoder, sjekk ut disse to koblingene:
Når du har lagret, oppretter POEdit som standard automatisk en .mo-fil ved siden av .po-filen. Det anbefales at du inkluderer alle tre oversettelsesfilene dine med temaet ditt slik at folk kan lage egne oversettelser og redigere dine eksisterende oversettelser enkelt.
La oss gjenskape hva du har gjort så langt. Du har fortalt WordPress all teksten du vil være oversettbar, og du brukte POEdit til å samle hver streng og plassere dem i en .pot-fil som kan oversettes til en .po og .mo-fil. Disse filene er da inkludert i temafilene. Det siste trinnet er å zip ditt tema, installere det og la WordPress vite hvilket språk .mo-fil du vil bruke den til. Dette er en veldig rett fremgangsprosedyre hvor du får tilgang til din wp-config.php
filen som finnes i WordPress 'rotmappe.
/ ** * WordPress Lokalt språk, som standard til engelsk. * * Endre dette for å lokalisere WordPress. En tilsvarende MO-fil for det valgte * språket må installeres på wp-innhold / språk. For eksempel, installer * de_DE.mo til wp-innhold / språk og sett WPLANG til 'de_DE' for å aktivere tysk * språkstøtte. * / define ('WPLANG', ");
Filen din bør allerede inneholde define ( 'WPLANG', ");
men hvis det ikke gjør det, kan du legge det inn. Du må bare legge til språk- og landskoden i definere
. Hvis du skulle oversette temaet ditt til tysk, ville du ha dette:
define ('WPLANG', 'de_DE');
Din internasjonalisering er fullført! Husk å inkludere .pot-filen din med temaet ditt, og hvis du kunne oversette temaet til et annet språk, for å inkludere .po og .mo-filene også.