Advertisement
  1. Code
  2. Localization
Code

Lav Din opstart med PHP: Lokalisering Med I18n

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup With PHP: Geolocation and Google Places
Building Your Startup: Access Control, Active Record Relations and Slugs

Danish (Dansk) translation by Benjamin Høegh (you can also view the original English article)

Final product image
What You'll Be Creating

Dette er en del 4, af Opbyg dit Startup med PHP-serien på Tuts+. I denne serie, jeg vejlede dig gennem lancering af en opstart fra ide til virkelighed ved hjælp af min Mødeplanlægger app som en virkelige liv eksempel. Hvert skridt på vejen, vil vi frigive Mødeplanlægger kode som open source eksempler, du kan lære af. Vi vil også tage fat startup-relaterede forretningsmæssige problemstillinger, som de opstår.

I denne tutorial ønskede jeg at træde et skridt tilbage og tilføje I18n internationalisering understøttelse til vores ansøgning, før vi opbygge mere og mere kode. Ifølge Wikipedia er I18n et numeronym:

18 står for antallet af breve mellem første i og sidste n internationalisering, en skik, opfundet på DEC i 1970 ' erne eller 80 'er.

Med I18n erstattes alle tekststrengene vises til brugeren fra programmet funktionskald, der dynamisk kan indlæse oversatte strenge for ethvert sprog, som brugeren vælger.

Alle kode for Mødeplanlægger er skrevet i Yii2 Framework for PHP, som har indbygget understøttelse af I18n. Hvis du vil vide mere om Yii2, tjek vores parallel serie Programmering med Yii2 på Tuts+.

Bare en påmindelse, jeg deltager i kommentar tråde nedenfor. Jeg er især interesseret, hvis du har forskellige tilgange eller yderligere ideer, eller ønsker at foreslå emner til fremtidige tutorials.

Målene for internationalisering

Når du bygger en start, det er nyttigt at tænke globalt fra begyndelsen – men ikke altid. Skiftevis, kan det være fornuftigt at kun fokusere på dit lokale marked. Skal din mindste levedygtig produkt at arbejde på andre sprog for brugere fra forskellige lande?

I vores tilfælde, Yii Framework indeholder indbygget understøttelse af I18n, så det er relativt let at indbygge understøttelse til I18n fra begyndelsen – og tidskrævende at tilføje det i senere.

Hvordan I18n virker

I18n fungerer ved at erstatte alle henvisninger til tekst, der vises til brugeren med funktionskald, der leverer oversættelse efter behov.

For eksempel, er her hvad attribut feltnavne i sted model look som før I18n:

At yde oversatte versioner af koden ville blive meget kompliceret. Ikke-tekniske oversættere skulle oversætte koden i sted, sandsynligvis bryde syntaks.

Her er hvad den samme kode ser ud med I18n:

Yii:t() er et funktionskald, der undersøger, hvilket sprog der aktuelt er valgt og viser den passende oversatte streng. 'frontend' henviser til en del af vores program. Oversættelser kan eventuelt organiseret i forskellige kategorier. Men hvor synes disse oversatte strenge?

Standardsproget i dette tilfælde engelsk, er skrevet i kode, som vist ovenfor. Sprog ressourcefiler er lister over arrays af strenge hvis nøgle er den standard sprog text—e.g. 'Sted Type' — og hver fil indeholder oversatte tekstværdier for deres relevante sprog.

Her er et eksempel på vores færdige spansk oversættelses fil, sprogkoden "da". Funktionen Yii:t() bruger denne fil til at finde en passende oversættelse til at vise:

Mens dette ser tidskrævende, giver Yii scripts til at automatisere generation og organisation af disse filer.

Ved at adskille tekst fra koden, vi gør det lettere for ikke-tekniske flersprogede eksperter til at oversætte vores programmer for os — uden at bryde koden.

I18n tilbyder også specialiserede funktioner til oversættelse af tid, valuta, flertalsformer mfl. Jeg vil ikke gå i detaljer med disse i denne tutorial.

Konfiguration af I18n understøttelse

Desværre, Yii2 dokumentationen for I18n endnu ikke er meget beskrivende — og det var svært at finde arbejde, trin for trin eksempler. Heldigvis for dig vil jeg lede dig gennem hvad jeg har lært fra vaskning docs og på nettet. Jeg fandt The Code Ninja I18n eksempel og Yii2 Definitive Guide på I18n nyttige, og Yii bidragyder Alexander Makarov tilbød mig noget hjælp.

Generering af filen I18n konfiguration

Vi bruger Yii2 avancerede skabelon til mødeplanlægning. Dette skaber to Yii programmer i vores codebase, frontend og backend. Og det skaber et fælles område for modeller delt mellem begge programmer. Yiis konfigurationsfiler er indlæst når sideanmodninger er lavet. Vi vil bruge Yii's I18n besked scripts til at opbygge en konfigurationsfil til I18n i stien common/config.

Fra vores codebase rod, vil vi køre scriptet Yii message/config:

Dette genererer Filskabelonen til følgende, som vi kan tilpasse:

Jeg tilpasse min fil. Jeg flytter messagePath op til toppen og tilpasse sourcePath og messagePath. Jeg laver også angivelse af sprog Jeg vil have min application til understøtte udover engelsk-i dette tilfælde spansk og tysk, 'es' og 'de'. Her er en liste over alle I18n sprogkoder.

I det næste trin, vil vi køre Yiis Ekstraktet script, som vil skanne alle kode i sourcePath træet til at generere standard streng filer for alle de anvendte etiketter i vores kode. Jeg tilpasning af sourcePath for at scanne hele kode træet. Jeg tilpasning af messagePath for at generere den resulterende filer i common/message.

Du vil se Yii scanning alle din kodefiler:

Når den er færdig, vil du se noget som dette i din kodebase:

Meeting Planner I18n Message Files and Paths

Aktivering I18n og vælge et sprog

I den fælles konfigurationsfil, common/config/main.php, vil vi fortælle Yii om vores nye sprogunderstøttelse. Jeg vil gøre spansk mit standardsprog:

Men der er stadig mere at gøre. Vi skal gøre vores kode I18n opmærksomme.

Ved hjælp af Yii's Gii kode Generator med I18n

I del to af denne serie, bygning din opstart med PHP: funktionskrav og Database Design, vi brugte Yii's awesome kode generator, Gii, til at generere vores modeller, controllere og udsigt. Men vi gjorde ikke aktivere I18n, så alle vores kode indlejret tekststrenge. Lad os gentage dette.

Vi vende tilbage til Gii, sandsynligvis http://localhost:8888/mp/gii i din browser, og re-opstille model og controller generatorerne med I18n aktiveret.

Bemærk: Hvis du holdt op med del tre af vores serie, kan du nødt til at gøre opmærksom på forskellene med hver enkelt fil og flytte manuelt kode. Eller det kan være nemmest at erstatte din kode med Github opbevaringssted for denne tutorial, knyttet øverst til højre.

Her er et eksempel til at generere koden møde model med I18n aktiveret. Bemærk, at vi angiver "frontend" for vores besked kategori. Vi placerer alle vores frontend tekststrenge i én frontend kategori fil.

Meeting Planner I18n Gii Model Generator

Lad os gøre det samme for CRUD generation controllere og visninger:

Meeting Planner I18n Message CRUD Generator with Gii

Hvis du gennemse den genererede kode i modeller, controllere og udsigt, vil du se tekststrenge erstattet med funktionen Yii:t('frontend',...):

Oversæt Dine Meddelelses Filer

Tag et kig på vores spanske meddelelsesfil, /common/messages/es/frontend.php. Det er en lang liste af Tom array værdier:

For at udfylde vores spanske oversættelser for denne tutorial, vil jeg bruge Google Translate. Tricky, huh?

Meeting Planner I18n Using Google Translator to Fill Message Files

Derefter, vi vil nogle klippe og indsætte med disse oversættelser tilbage til meddelelsesfilen.

Når vi besøger sted indeksside, du vil se den spanske version-nice, huh?

Meeting Planner I18n Spanish Places Index Page

Bemærk, at navigationslinjen er stadig på engelsk-det er fordi scriptet besked/ekstrakt ikke afhente Bootstrap navigation array definitioner og konvertere dem til ved hjælp af Yii:t(). Vi vil gøre det i hånden. Bemærk også, at hjem og sidefil tekst blev oversat automatisk — Yii's codebase indeholder oversættelser for disse standard strenge.

Her er formen Opret et sted:

Meeting Planner I18n Spanish Create a Place Form

Hvis jeg ønsker at skifte tilbage til engelsk, ændre jeg bare konfigurationsfilen, /common/main.php, tilbage til engelsk:

Meeting Planner Create a Place in English

Du vil også bemærke, når du går videre, at erstatte strenge i JavaScript har sin egen kompleksitet. Jeg har ikke undersøgt det selv, men Yii 1.x JsTrans forlængelse kan give en nyttig rettesnor for at støtte dette.

Går videre med I18n

I sidste ende kan vi ønsker at omsætte vores program i et antal sprog. Jeg har sendt Yii funktionen om at udvide besked/ekstrakt scriptet for at bruge Google Oversæt API til at automatisere denne proces. Jeg har også bedt Tuts+ at lade mig skrive en tutorial om det, så stay tuned. Selvfølgelig, giver det bare en base oversættelse. Kan du hyre professionelle oversættere til at tune filerne bagefter.

Nogle programmer kan brugere at vælge deres eget sprog, så når de logger på, brugergrænsefladen automatisk oversætter for dem. I Yii betyder indstilling af $app->language variabel dette:

Andre applikationer, som JScrambler.com nedenfor, udnytte URL-sti for at skifte sprog. Brugeren klikker bare sprog præfiks de ønsker, fx "FR", og app er automatisk oversat:

JScrambler Dynamic Language Paths

Bemærk: Watch mine Tuts+ instruktør side for en kommende tutorial om JScrambler — det er en smuk nyttig service. Det kan allerede har optrådt ved den tid, du læser dette.

Yii's URL Manager kan give denne type af functionaliaty så godt. Jeg vil formentlig gennemføre disse funktioner for Mødeplanlægger i en fremtidig tutorial.

Hvad næste?

Jeg håber, du har lært noget nyt med denne tutorial. Jeg havde brugt I18n med Rails før — men det var første gang jeg havde gennemført det med PHP. Hold øje med kommende tutorials i vores bygning din opstart med PHP serie – der er masser af sjove funktioner kommer.

Behage beføle omkostningsfrit tilføje dine spørgsmål og kommentarer nedenfor; Jeg normalt deltage i drøftelserne. Du kan også kontakte mig på Twitter @reifman eller email mig direkte.

Relaterede Links

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.