För några år sedan skrev jag om processen med att internationalisera WordPress-baserade projekt. Trots att jag tycker att det finns vissa tillfällen då handledning inte nödvändigtvis behöver uppdateras, uppdateras eller ses, finns det andra tider där vi alla kan dra nytta av att återgå till ämnet.
När allt kommer omkring ändras programvaran från år till år, och vi får också erfarenhet när vi fortsätter att arbeta med ett visst program. WordPress är inte annorlunda.
Börja med den här artikeln och fortsätta till nästa uppsättning artiklar, vi ska ta en titt på följande:
Vi kommer till och med att bygga en liten, men funktionell WordPress-plugin som hjälper oss att visa praktiskt taget de punkter som vi har listat ovan.
Innan vi börjar, är det dock viktigt att förstå vad internationalisering är och vad WordPress erbjuder i sättet att göra det. Dessutom finns det några gotchas som kan överraska dig, speciellt om du är en erfaren programmerare.
Med det som skisseras i denna serie, låt oss börja om att få ett bra grepp om att internationalisera vårt arbete i WordPress.
WordPress Codex är alltid en av de bästa ställena att börja när du letar efter mer om ett visst ämne. Här är det som erbjuds i vägen för internationalisering (som vi förkortar som i18n bara om du ser det skrivet så):
Internationalisering är processen att utveckla ditt plugin så att det enkelt kan översättas till andra språk.
Dessutom fortsätter Codex att beskriva exakt varför detta är viktigt:
Eftersom WordPress används över hela världen är det en bra idé att förbereda ett WordPress-plugin så att det enkelt kan översättas till vilket språk som helst. Som utvecklare kan du inte ha en enkel tid att tillhandahålla lokaliseringar för alla användare. Du kanske trots allt inte talar sitt språk. En utvecklare kan emellertid framgångsrikt internationalisera ett tema så att andra kan skapa en lokalisering utan att behöva ändra källkoden i sig.
Det är vettigt, eller hur? WordPress driver ungefär en fjärdedel av webben och används över hela världen. Varför ska arbetet som vi tillhandahåller vara kvar i modersmålet vi talar?
Det här är inte att säga att det inte finns några gånger då det här är okej. Till exempel, om du bygger en lösning för någon och dig känna till att de tillsammans med en liten grupp ska använda applikationen, så är det meningsfullt att lämna det på modersmålet hos nämnda klient.
Men om du bygger något för utbredd distribution, är det ingen tvekan om att du ska internationalisera ditt arbete.
Kort sagt är internationalisering den process som vi ser till att vårt arbete kan översättas till ett annat språk.
Senare i den här artikeln ska vi titta på funktionerna i WordPress API för att se till att våra PHP-strängar är korrekt internationaliserade. Men det är en otroligt viktig tillvägagångssätt som du måste komma ihåg.
Minns du när du först lärde dig om variabler i vilket programmeringsspråk som helst när? Det var fantastiskt, eller hur? Du kan definiera en variabel en gång och sedan återanvända den variabeln i stället för strängen (eller vad som helst annat värde) varannan plats i koden så att du inte behöver repetera dig själv.
Det är faktiskt en del av de grundläggande principerna för programmering, är det inte?
DRY-principen anges som "Varje del av kunskapen måste ha en enda, entydig, auktoritativ representation inom ett system."
Jag är absolut, nästan otvetydigt med denna definition. Men när det gäller internationalisering av strängar i WordPress, måste vi göra ett undantag. Du kommer att se varför tillfälligt, men jag valde att inkludera det här avsnittet så att du kan undvika eventuella framtida misstag. Jag valde också att nämna detta så att du inte frågar om att försöka använda variabler inom ramen för internationaliserings API i framtida kontaktpunkter.
Om du kommer ihåg det här nu, kommer du att undvika denna hinder senare.
Vid denna tidpunkt är vi redo att titta på de funktioner som WordPress tillhandahåller. Vi kommer inte att sätta dem på jobbet i den här artikeln, men vi kommer att titta på funktionsnamnen, hur de ska användas och vad de används för i ett större sammanhang.
Från och med nästa artikel börjar vi använda dem. För nu, låt oss ta en titt på vad som är tillgängligt.
__ ()
är förmodligen den mest populära eller vanligaste internationaliseringsfunktionen som du hittar i WordPress-arbetet. Den här funktionen accepterar en enda sträng som ska översättas och den textdomän som den kommer att tillhöra. Det bör aldrig inkludera något utom en sträng (det vill säga ingen HTML, ingen JavaScript, etc.)._E ()
liknar ovanstående funktion, men snarare än att bara hämta den översatta versionen av strängen, kommer den också att eko resultatet av översättningen till skärmen._x ()
: tyvärr där är tider där en given sträng kommer att returnera fel översättning. När det händer är det användbart att använda den här funktionen, speciellt när man anger hur sammanhanget för strängen översattes. Detta kommer att se till att den avsedda versionen av strängen returneras._ex()
, precis som _E ()
och _x ()
listad ovan kommer att se till att den korrekta översättningen av strängen echoes till skärmen baserat på det angivna sammanhanget så att den felaktiga versionen inte är vald under körtiden._N ()
är en snygg funktion eftersom det tillåter WordPress att välja en eller flera versioner av det angivna numret baserat på vilket som används. Det betyder att vi som utvecklare måste tillhandahålla strängar för både singel- och pluralversionen så att översättare kan översätta det tillsammans med det faktiska numret. Men det gör det mycket lättare att arbeta med internationaliserade nummer än utan._nx ()
borde vara på det här laget klart hur det fungerar. Det är en kombination av _N ()
som vi bara delat och _x ()
som var täckt ovan. Detta innebär att om du har korrekt specificerat singular och pluralform av det angivna numret tillsammans med rätt textdomän, så kommer översättningen att visas som förväntat._n_noop ()
bör låta lite bekant för dem som är bekant med datavetenskap eller datateknik. En NOP är kort för "ingen operation" och i det här fallet har den brukade ha översatt flera pluralsträngar som vi inte nödvändigtvis vill använda vid en viss tidpunkt men kanske vill hämta senare. Kortfattat kan översättaren tillhandahålla översättningen och vi kan välja när de ska användas._nx_noop ()
är en kombination av ovanstående funktion och _x ()
funktion vi har sett så många gånger tidigare. Detta gör det möjligt för oss att få tillgång till en översättning för en viss textdomän utan att faktiskt behöva översätta dem.translate_noop_plural ()
läser lite annorlunda än de funktioner vi hittills har granskat, men genomförandet är ganska enkelt: Denna funktion ger en översättning av resultatet av _n_noop ()
och _nx_noop ()
. Den viktigaste saken att notera om denna funktion är att den förväntar sig att det första argumentet är en matris med singular- och pluralnycklarna som kommer från de ovan nämnda funktionerna.esc_html __ ()
liknar mycket __ ()
, men den är avsedd att användas i HTML-taggar. Det är det inte menat att Översätt HTML-taggar, men det är meningen att ta tag i översättningen och fly den för säker användning inom ramen för HTML.esc_html_e ()
är precis som funktionen ovanför och nästan exakt som _E ()
funktion vi tittade på ovan; Det är dock meningen att det är vanligt att fortsätta och eko resultatet av översättningen till skärmen.esc_html_x ()
bör vara tydlig vid denna tidpunkt givet hur många gånger vi har sett _x ()
används i andra funktioner. Kortfattat kommer det att göra samma sak som _x ()
, men det kommer att ge texten i gettext-sammanhanget och kommer att förbereda det för säker användning i HTML.esc_attr __ ()
används för att ta den angivna strängen och flytta den ordentligt så att den kan användas säkert som ett attribut som titel
attribut av en bild.esc_attr_e ()
kommer att visa den översatta texten med en extra kodning av alla tecken som större än, mindre än, ampersands och citat. Detta är en annan funktion som är avsedd att användas inom ramen för ett attribut av ett annat element.esc_attr_x ()
kommer att få tag i översättningen, fly den och sedan göra den i samband med ett elements attribut. Om ingen översättning har tillhandahållits kommer standardsträngen som tillhandahölls under utvecklingstiden att användas.number_format_18n ()
är en kraftfull funktion, speciellt när du arbetar med en mängd olika språk. Om du till exempel arbetar med ett nummer och du vill göra "1000" så skulle du inte ange en andra parameter för den här funktionen. Om du arbetar med valuta eller decimaler, skulle du dock vilja skicka "2" som det andra argumentet så att två digitaler skulle bifogas efter en decimal.date_i18n ()
är en annan kraftfull funktion som låter dig hämta datumet i ett lokalt format baserat på den angivna tidsstämpeln. För att lära dig mer om den här funktionen, dess parametrar och exempel på hur den används, kan du läsa igenom sin Codex-sida.Kom ihåg i avsnittet ovan där jag pratade om att undvika användningen av variabler? Det är här som kommer till nytta. Som du utan tvekan har märkt, tar var och en av funktionerna ovan två parametrar:
Textdomänen refererar till ett unikt förhållande mellan WordPress-plugin- eller WordPress-temat, WordPress och översättaren. I slutändan är det för att se till att översättaren kan tillhandahålla en översättning av strängen utan att tvinga översättningen av annan sträng någonstans i WordPress (eller annan lösning från tredje part).
I slutändan är din bästa satsning att använda pluggen i plugin som textdomän. Dessutom bör denna parameter alltid vara en sträng, inte en variabel. Oavsett hur många gånger du än behöver skriva ut det, lagra det inte i en variabel. Skriv bara textdomänen som den andra parametern till funktionen.
Det här har att göra med hur översättningsverktygen fungerar, och vi kommer att titta närmare på det i en framtida artikel.
Och det är primeren på internationaliseringsfunktionerna. Om du fortfarande är lite förvirrad på hur man applicerar några av dessa i ditt arbete, oroa dig inte. Det finns mer att täcka både när det gäller förklaring och praktiska demos.
Till exempel har vi kort berört begreppet gettext, eller hur? Och vad sägs om JavaScript? Dessutom, vad sägs om de verktyg som vi har tillgång till för att låta andra översätta våra strängar? Hur vet vi att de fungerar ordentligt?
Allt detta kommer att omfattas av denna serie. Men innan vi kom dit, behövde vi börja med grunderna. Så det är vad vi gjort. I nästa artikel kommer vi att fortsätta genom att prata lite om gettext och några av de tillgängliga verktygen.
Därefter kommer vi att uppmärksamma oss på att faktiskt skriva kod (inklusive JavaScript) och hur det hela passar samman inom ramen för våra egna WordPress-plugins.
Under tiden, om du letar efter andra verktyg för att hjälpa dig att bygga upp din växande uppsättning verktyg för WordPress eller till exempel kod för att studera och bli mer välbevandrad i WordPress, glöm inte att se vad vi har tillgång till i Envato Market.
Om du är intresserad av att lära dig mer om WordPress från ett utvecklingsperspektiv, notera att jag bara arbetar med WordPress och ofta skriver om det. Du kan fånga alla mina kurser och handledning på min profilsida, och du kan följa mig på min blogg och / eller Twitter på @tommcfarlin där jag pratar om mjukvaruutveckling i samband med WordPress.
Tveka inte att lämna några frågor eller kommentarer i foderet nedan, och jag vill sikta på att svara på var och en av dem.