Det är mycket lätt att blunda för andra språk när du utvecklar ditt WordPress-tema, men det här är en mycket dålig vana och omedelbart förvandlar en hel marknad av WordPress-användare och eventuellt tusentals dollar i förlorade intäkter. Av de 10 länder som söker Google för "WordPress-teman" är endast en inbyggd engelsktalande (USA) och den kommer 9: e. När det gäller att skriva detta finns det bara 269 teman i WordPress tematabell som är märkt som översättningsklar av mer än 1 500 teman. Det är bara 18% av teman. Jag ska visa dig hur man gör din en av dem.
När du vanligtvis gör ett tema kommer du helt enkelt att hårdkoda någon temtext som 404-felmeddelandet i 404.php fil eller etiketter som "kommentarer:" eller "författare:". Om användarens WordPress är tyska, visas dessa textstycken fortfarande på engelska. Lösningen på detta är att returnera eller eko dessa uttalanden med en av fyra WordPress-funktioner som är avsedda att referera till en språkfil för rätt text. När du har förstått texten i dessa funktioner kan du skapa en fil som innehåller alla översättningar som refereras varje gång temat laddas. Det finns tre översättningsfiler som vi använder:
Var och en av de fyra funktionerna kräver minst ett argument, vilket är texten som ska översättas. Funktionerna är:
__ ()
- (två underskrifter) Den grundläggande funktionen som du kommer att använda mestadels av tiden. Den returnerar texten på rätt språk._E ()
- Samma som __ ()
förutom att det echoes texten istället för att returnera den._N ()
- Används när texten har potential att vara plural, så till exempel om du skulle visa hur många kommentarer som har gjorts, kanske du vill skriva ut antingen "X comments" eller "X comment" beroende på hur många kommentarer du har._x ()
- Användbar för när översättningen av ordet beror på sammanhanget. "Post" kan betyda "ett inlägg (substantiv)"eller" att posta (verb)"beroende på sammanhang. Det är viktigt för översättaren att veta vad du menar när översättningen är korrekt. _x ()
används huvudsakligen där enskilda ord används. Dessa är de enklaste översättningsfunktionerna som WordPress har att erbjuda. Låt oss ta en titt på ett exempel på var och en:
Båda dessa funktioner gör exakt samma sak här. Uttrycket "detta är ett inlägg" kontrolleras mot .mo-filen om det finns en och returnerar resultatet. __ ()
och _E ()
kräver bara ett argument som skickas till dem, vilket är den text vi vill översättas. Ett andra valfritt argument är tillgängligt och vi kommer senare till det. Den enda skillnaden mellan de två är det __ ()
behöver eko
uttalande här. Låt oss titta på ett exempel där __ ()
fungerar bättre än _E ()
:
I stället för att skicka en sträng till innehållet()
funktion som vi har använt __ ()
så att texten kan översättas. Om vi hade använt _E ()
här istället skulle du ha översättningen av "Klicka här för att läsa mer" echoed till dokumentet istället för att skickas till innehållet()
vilket skulle orsaka alla slags ohjälpliga problem.
Vad händer om du har en situation där texten du skriver ut kan vara en plural eller en singular som "X kommentarer" -exemplet ovan? I stället för att ge två olika textsträngar för översättaren kan du säga att du har ett enda textstycke som behöver en singular och plural översättning. Följande två exempel ger både samma resultat till användaren:
_N ()
kräver tre argument. Den första är singularversionen av texten, den andra är plural och den tredje är det nummer som det refererar till. I detta fall, get_comments_number ()
är att hitta hur många kommentarer som finns på ett inlägg och då _N ()
väljer rätt text att använda.
Låt oss säga att du översätter en .pot-fil och du kommer över en post "scroll". Kommer du att tolka det som "en bit av rullat papper" eller "panorera upp eller ner på webbplatsen"? Du kan verkligen göra med något sammanhang för att beskriva vad du behöver översätta det till. Dessa funktioner ger dig den förmågan, genom att ha en andra nödvändig egenskap som ber om en kort beskrivning för att beskriva frasen eller ordet. Kolla exemplet nedan:
Exemplet visar skillnaden mellan _x ()
och _ex()
. Det är samma e
, som med _E
, för att få funktionen att eko utmatningen istället för att returnera den. För båda är vår första parameter vår text som behöver översättas och den andra är en kommentar eller anteckning om översättningstexten för att klargöra vad som menas.
Låt oss säga att du har en situation där texten som du vill generera består av en textsträng med resultatet av en funktion eller värdet på en variabel som sitter någonstans inuti den. Du kan bli frestad att rätta något så här:
När det gäller att göra din .pot-fil ignorerar POEdit detta eftersom det inte vill använda en variabel i en mening. Anledningen är att den kommer att lämna in strängen Du har valt temat $ färg
till .pot-filen, men när det gäller att söka efter översättningen när manuset körs, söker det efter strängen Du har valt det blå temat
som det inte kommer att hitta. Så vad händer om vi gör det här istället:
Skriptet kommer nu att kunna hämta översättningarna, men nu har det blivit alltför svårt att översätta eftersom meningen har blivit uppbruten. Denna mening kanske inte ens kan översättas på vissa språk som i stor utsträckning har olika syntax, till exempel på tyska där deras ord för "valda" skulle visas i slutet av meningen. Du skulle behöva gå igenom besväret att förklara att dessa två separata textsträngar är en del av en, och att "tema" kanske inte översättas till "tema" alls.
Lösningen är att använda en enda textsträng som har en enkel citationsvänlig syntax. Det är här printf ()
eller sprintf ()
funktioner blir användbara. Låt oss ta en titt på vad vår kod behöver se ut:
Det här löser inte bara allt vårt problem vi haft tidigare, men det är mycket tidigare och använder bara en rad kod. De printf ()
eller sprintf ()
Funktionernas första argument är strängen som ska matas ut som innehåller minst en platshållare, i det här fallet % s
(vilket betyder "sträng"), och andra argument är variabler som ska placeras inuti den ursprungliga strängen. Det finns många olika platshållare du kan använda inuti din sträng och du kan hitta en fullständig lista under sprintf
i PHP manualen. Observera att de olika mellan printf ()
och sprintf ()
liknar _E ()
och __ ()
respektive.
Nu när du har taggat all din textutskrift på ditt tema behöver du nu samla in den här informationen i en .pot-fil. POEdit är ett fantastiskt program som ger dig möjlighet att skapa din .pot-fil och ger också en användarvänlig GUI som kan användas för att göra .po och, ännu viktigare, dina .mo-filer också.
Först måste du ladda ner POEdit, som du kan hitta här för Windows, Mac och Linux:
http://www.poedit.net/download.php
När POEdit är installerat kan du skapa din .pot-fil. För att göra detta, gå till Arkiv> Ny katalog. Du kommer att presenteras med en dialogruta där du måste ange några grundläggande uppgifter. Viktiga punkter i fliken "Projektinfo" är projektnamnet och ditt språk / land. Du måste också ange följande i rutan "Plural Forms":
Pluralformer: nplurals = 2; plural = n! = 1;
På fliken "Banor" anger du sökvägen där filerna kan hittas i förhållande till sparade destination för denna .pot-fil. Om du till exempel lägger .pot-filen i tematets rotmapp, anger du .
(period). Om du vill placera .pot-filen i en "språk" -mapp inuti temrototen, ange ...
(två perioder).
Därefter måste du berätta för POEdit vilka sökord du ska leta efter när du skannar våra filer. Skriv följande:
De : 1,2
förlängning berätta POEdit att dessa sökord har två delar till dem. Som standard är det andra argumentet pluralum om du inte inkluderar c
vilket betyder det andra argumentet är en kommentar.
Du är bra att gå! Klicka på "OK" och välj ett ställe för att spara .pot-filen. Kom ihåg att det måste relatera till den väg du definierade tidigare. POEdit kommer nu att skanna igenom dina filer och hitta alla förekomster av dina översättningsfunktioner och spara dem utan översättningar till din .pot-fil. Om du bara vill tillhandahålla det minsta minimala stödet för internationell översättning kan du skicka din .pot-fil med ditt tema och stanna här, men om du själv kan översätta ditt tema till ett annat språk kan du skicka ditt tema med en premade översättning som beskrivits i steg 3.
När du har översatt alla strängarna i .pot-filen kan du spara den som din .po-fil. Alla strängar som du inte har tillhandahållit en översättning för visas på originalspråket när någon ser ditt tema.
Filnamnet på din .po är avgörande. Gettext använder ISO 639-standarden för språkförkortningar och ISO 3166 för locales. Om din översättning är t.ex. skrivet på amerikansk engelska, kommer ditt filnamn att se ut en-US.po
. Kapitalisering är också viktigt här. För en fullständig lista över språk- och landskoder, kolla in dessa två länkar:
När du väl har sparat, skapar POEdit som standard automatiskt en .mo-fil tillsammans med din .po-fil. Det rekommenderas att du inkluderar alla tre översättningsfilerna med ditt tema så att människor kan skapa egna översättningar och redigera dina befintliga översättningar enkelt.
Låt oss ta reda på vad du har gjort hittills. Du har sagt WordPress all text som du vill vara översättbar, och sedan använde du POEdit för att samla varje sträng och placera dem i en .pot-fil som kan översättas till en .po och .mo-fil. Dessa filer ingår sedan i temafilerna. Det sista steget är att zip ditt tema, installera det och låt WordPress veta vilket språk .mo-fil du vill använda den. Detta är ett mycket rakt framåtriktat förfarande där du får tillgång till din wp-config.php
filen finns i din WordPress-rotmapp.
/ ** * WordPress Lokalt språk, som standard till engelska. * * Ändra det här för att lokalisera WordPress. En motsvarande MO-fil för det valda * språket måste installeras till wp-innehåll / språk. Till exempel, installera * de_DE.mo till wp-innehåll / språk och sätt WPLANG till 'de_DE' för att aktivera tyskt * språkstöd. * / define ('WPLANG', ');
Din fil bör redan innehålla define ( 'WPLANG', ");
men om det inte gör det kan du lägga till det. Du behöver helt enkelt lägga till språk och landskod i definiera
. Om du skulle översätta ditt tema till tyska skulle du ha det här:
definiera ('WPLANG', 'de_DE');
Din internationalisering är klar! Kom ihåg att inkludera din .pot-fil med ditt tema, och om du kunde översätta ditt tema till ett annat språk, inkludera även .po och .mo-filerna.