miten rakentaa monikielinen sovellus: Demo PHP: llä ja Gettextillä

olitpa rakentamassa verkkosivustoa tai täysimittaista web-sovellusta, jotta se olisi saatavilla laajemmalle yleisölle edellyttää usein, että se on saatavilla eri kielillä ja eri paikoissa.

useimpien ihmisten kielten perustavanlaatuiset erot tekevät tästä kaikkea muuta kuin helppoa. Kielioppisääntöjen, kielen vivahteiden, päivämäärämuotojen ja muiden erot tekevät lokalisoinnista ainutlaatuisen ja valtavan haasteen.

tarkastellaan tätä yksinkertaista esimerkkiä.

Englannin pluralisaatiosäännöt ovat melko suoraviivaisia: sanan yksikössä voi olla sanan tai sanan monikkomuoto.

muissa kielissä, tosin-kuten slaavilaisissa kielissä-on yksiköllisen lisäksi kaksi monikkomuotoa. Saatat jopa löytää kieliä, joissa on yhteensä neljä, viisi tai kuusi monikkomuotoa, esimerkiksi Sloveniassa, Iirissä tai Arabiassa.

tapa, jolla koodi on järjestetty, ja miten komponentit ja käyttöliittymä on suunniteltu, on tärkeä tekijä määritettäessä, kuinka helposti voit paikallistaa sovelluksen.

kansainvälistyminen (i18n) auttaa varmistamaan, että se voidaan mukauttaa eri kieliin tai alueisiin suhteellisen helposti. Kansainvälistyminen tehdään yleensä kerran, mieluiten projektin alussa, jotta ei tarvitsisi suuria muutoksia lähdekoodiin matkan varrella.

kuinka rakentaa monikielinen sovellus: Demo PHP ja Gettext

kun codebase on kansainvälistynyt, lokalisointi (l10n) tulee kysymys kääntää sisällön sovelluksen tietylle kielelle/lokaali.

lokalisointi on tehtävä aina, kun uutta kieltä tai aluetta on tuettava. Myös, aina kun osa käyttöliittymän (sisältää tekstiä) päivitetään, uutta sisältöä tulee saataville – joka sitten on lokalisoitu (eli, käännetty) kaikille tuetuille locales.

tässä artikkelissa opetellaan PHP: llä kirjoitettujen ohjelmistojen kansainvälistämistä ja lokalisointia. Käymme läpi erilaisia toteutusvaihtoehtoja ja käytettävissämme olevia erilaisia työkaluja prosessin helpottamiseksi.

kansainvälistymisen Työkalut

helpoin tapa kansainvälistää PHP-ohjelmisto on array-tiedostojen avulla. Matriisit asutetaan käännetyillä merkkijonoilla, jotka voidaan sitten etsiä mallien sisältä:

<h1><?=$TRANS?></h1>

tämä on kuitenkin tuskin suositeltava tapa vakavasti otettaville hankkeille, sillä se aiheuttaa varmasti kunnossapitoon liittyviä ongelmia tien varrella. Jotkut asiat saattavat jopa näkyä aivan alussa, kuten tuen puute muuttuva interpolointi tai pluralization substantiivien ja niin edelleen.

yksi klassisimmista työkaluista (käytetään usein viitteenä i18n: lle ja l10n: lle) on Gettext-niminen Unix-työkalu.

vaikka se on peräisin vuodelta 1995, se on edelleen kattava työkalu ohjelmistojen kääntämiseen, jota on myös helppo käyttää. Vaikka se on melko helppo aloittaa, se on silti tehokkaita tukityökaluja.

Gettext on mitä käytämme tässä viestissä. Esittelemme suuren GUI-sovelluksen, jota voidaan käyttää helposti päivittämään l10n-lähdekooditiedostoja, jolloin vältetään tarve käsitellä komentoriviä.

kirjastot helpottamaan asioita

Major PHP web frameworks and libraries that support Gettext

on olemassa suuria PHP web kehyksiä ja kirjastoja, jotka tukevat Gettext ja muut toteutukset i18n. jotkut ovat helpompia asentaa kuin toiset, tai sport lisäominaisuuksia tai tukea eri i18n tiedostomuotoja. While in this document, we focus on the tools provided with the PHP core, here ’ s a list of some others worth mentioning:

  • oscarotero/Gettext: Gettext-tuki oliopainotteisella käyttöliittymällä; sisältää parannetut apulaistoiminnot, tehokkaat extractorit useille tiedostomuodoille (joitakin niistä ei tueta natiivisti gettext – komennolla). Voi myös viedä formaatteja pidemmälle vain. mo/. po tiedostoja, jotka voivat olla hyödyllisiä, jos haluat integroida käännöstiedostoja muihin osiin järjestelmää, kuten JavaScript-käyttöliittymä.

  • symfony / translation: tukee monia eri formaatteja, mutta suosittelee verbose XLIFF: n käyttöä. ei sisällä apulaistoimintoja tai sisäänrakennettua linkoa, mutta tukee strtr(): ää käyttäviä paikkamerkkejä sisäisesti.

  • zend / i18n: Tukee array-ja INI-tiedostoja tai Gettext-formaatteja. Toteuttaa välimuistikerroksen, jotta tiedostojärjestelmää ei tarvitse lukea joka kerta. Sisältää myös view helpers, ja locale-aware input suodattimet ja validaattorit. Siinä ei kuitenkaan ole viestinloukutinta.

muissa kehyksissä on myös i18n-moduuleja, mutta niitä ei ole saatavilla niiden koodibaasien ulkopuolella:

  • Laravel: tukee basic array-tiedostoja; ei ole automaattista linkoa, mutta sisältää @lang – apulaisen mallitiedostoille.

  • Jii: Tukee array, Gettext, ja tietokanta-pohjainen käännös, ja sisältää viestien extractor. Tukena Intl – laajennus, joka on saatavilla PHP 5.3: sta lähtien, ja perustuu teho-osastoprojektiin. Tämä mahdollistaa Yii suorittaa tehokkaita korvaavia, kuten oikeinkirjoituksen numerot, muotoilu päivämäärät, ajat, intervallit, valuutta, ja ordinaalit.

jos päätät valita jonkin kirjastoista, jotka eivät tarjoa linkoja, voit käyttää Gettext-formaatteja, joten voit käyttää alkuperäistä Gettext toolchainia (mukaan lukien Poedit), kuten luvussa on kuvattu.

Gettextin asentaminen

saatat joutua asentamaan Gettextin ja siihen liittyvän PHP-kirjaston käyttämällä paketinhallintaasi, kuten apt-get tai yum. Kun se on asennettu, ota se käyttöön lisäämällä extension=gettext.so (Linux / Unix) tai extension=php_gettext.dll (Windows) php.ini – tiedostoosi.

tässä käytetään myös Poeditia käännöstiedostojen luomiseen. Löydät sen luultavasti järjestelmäsi paketinhallinnasta; se on saatavilla Unixille, Macille ja Windowsille ja sen voi ladata ilmaiseksi myös sen verkkosivuilta.

gettext-tiedostojen tyypit

on kolme tiedostotyyppiä, joita käsittelet yleensä työskennellessäsi Gettextin kanssa.

tärkeimmät ovat PO (Portable Object) ja Mo (Machine Object) – tiedostot, joista ensimmäinen on luettelo luettavista ”käännetyistä objekteista” ja toinen vastaava binääri (gettext tulkitsee lokalisointia tehtäessä). Mukana on myös POT (Po Template) – tiedosto, joka sisältää yksinkertaisesti kaikki olemassa olevat avaimet lähdetiedostoistasi, ja sitä voidaan käyttää oppaana kaikkien PO-tiedostojen luomiseen ja päivittämiseen.

mallitiedostot eivät ole pakollisia; riippuen työkalu käytät tehdä l10n, sinulla on vain PO/MO tiedostoja. Sinulla on yksi pari po/MO tiedostoja per kieli ja alue, mutta vain yksi POT per verkkotunnus.

alueiden erottaminen

isoissa projekteissa on joitakin tapauksia, joissa saatetaan joutua erottamaan käännöksiä, kun samat sanat välittävät eri merkityksiä eri yhteyksissä.

näissä tapauksissa sinun on jaettava ne eri ”verkkotunnuksiin”, jotka ovat periaatteessa nimettyjä pot/PO/MO-tiedostojen ryhmiä, joissa tiedostonimi on mainittu käännösalue.

pienissä ja keskisuurissa projekteissa käytetään yleensä yksinkertaisuuden vuoksi vain yhtä verkkotunnusta; sen nimi on mielivaltainen, mutta käytämme koodinäytteissämme ”main”.

esimerkiksi Symfony-projekteissa käytetään verkkotunnuksia käännöksen erottamiseen validointisanomien osalta.

Locale Code

a locale on yksinkertaisesti koodi, joka tunnistaa yhden version kielestä. Se on määritelty ISO 639-1-ja ISO 3166-1 alpha-2-standardien mukaisesti: kaksi pienaakkosta kieltä varten, valinnaisesti sen jälkeen alaviiva ja kaksi suuraakkosta maa-tai aluetunnuksen tunnistamiseksi.

harvinaisissa kielissä käytetään kolmea kirjainta.

joidenkin puhujien kohdalla maaosa voi tuntua tarpeettomalta. Joissakin kielissä onkin murteita eri maissa, kuten Itävallan Saksassa (de_AT) tai Brasilian Portugalissa (pt_BR). Jälkimmäistä osaa käytetään erottamaan nämä murteet toisistaan-kun sitä ei ole, sitä pidetään kielen ”geneerisenä” tai ”hybridiversiona”.

hakemistorakenne

käyttääksemme Gettextiä meidän on noudatettava tiettyä kansiorakennetta.

ensin sinun on valittava mielivaltainen juuri l10n-tiedostoille lähdekoodivarastossasi. Sen sisällä, sinulla on kansio kullekin tarvitaan locale, ja kiinteä ”LC_MESSAGES” kansio, joka sisältää kaikki po/MO paria.

LC_MESSAGES-kansio

monikkomuodot

kuten johdannossa totesimme, eri kielillä saattaa olla erilaiset pluralisaatiosäännöt. Gettext kuitenkin säästää meidät tältä vaivalta.

uutta luotaessa .po-tiedosto, sinun täytyy julistaa pluralization säännöt, että kieli, ja käännetty kappaletta, jotka ovat monikko-herkkä on eri muodossa kunkin näistä säännöistä.

kun soitat Gettextiä koodilla, sinun täytyy määrittää lauseeseen liittyvä numero (esimerkiksi lauseelle ”sinulla on n-viestejä.”, sinun täytyy määrittää arvo n), ja se selvittää oikea muoto käyttää – jopa käyttämällä merkkijono korvaaminen tarvittaessa.

monikon säännöt koostuvat siitä määrästä sääntöjä, joka tarvitaan Boolen-testillä kutakin sääntöä varten (enintään yhden säännön testi voidaan jättää pois). Esimerkiksi:

  • Japani: nplurals=1; plural=0; – yksi sääntö: monikkomuotoja ei ole

  • Englanti: nplurals=2; plural=(n != 1); – kaksi sääntöä: käytä monikkomuotoa vain silloin, kun n ei ole 1, muuten käytä yksikömuotoa.

  • Brasilian portugali: nplurals=2; plural=(n > 1); – kaksi sääntöä, käytä monikkomuotoa vain silloin, kun n on suurempi kuin 1, muussa tapauksessa käytä yksikömuotoa.

syvempi selitys, on informatiivinen LingoHub opetusohjelma saatavilla verkossa.

Gettext määrittää käytettävän säännön annetun numeron perusteella ja käyttää merkkijonon oikeaa lokalisoitua versiota. Jousille, joissa pluralization on käsiteltävä, sinun täytyy sisällyttää .po tiedosto eri lause kunkin monikon sääntö määritelty.

Otostoteutus

kaiken tuon teorian jälkeen, ryhdytään vähän käytännön toimiin. Tässä ote a: sta .po-tiedosto (älä huoli vielä liikaa syntaksista, vaan sen sijaan vain saada käsitys yleisestä sisällöstä):

msgid ""msgstr """Language: pt_BR\n""Content-Type: text/plain; charset=UTF-8\n""Plural-Forms: nplurals=2; plural=(n > 1);\n"msgid "We're now translating some strings"msgstr "Nós estamos traduzindo algumas strings agora"msgid "Hello %1$s! Your last visit was on %2$s"msgstr "Olá %1$s! Sua última visita foi em %2$s"msgid "Only one unread message"msgid_plural "%d unread messages"msgstr "Só uma mensagem não lida"msgstr "%d mensagens não lidas"

ensimmäinen osio toimii kuin otsikko, sillä msgid ja msgstr ovat tyhjiä.

se kuvaa tiedoston koodausta, monikkomuotoja ja muutamia muita asioita. Toinen osio kääntää yksinkertaisen merkkijonon Englannista brasilianportugaliksi, ja kolmas tekee samoin, mutta hyödyntää merkkijonon vaihtamista sprintf, jolloin käännös sisältää käyttäjätunnuksen ja vierailupäivän.

viimeinen osa on otos pluralisaatiomuodoista, joissa yksikössä ja monikossa on englanninkielinen versio msgid ja niitä vastaavat käännökset msgstr 0 ja 1 (monikkosäännön antaman luvun jälkeen).

siellä käytetään myös merkkijonon korvaamista, joten numero näkyy suoraan lauseessa käyttämällä %d. Monikkomuotoja on aina kaksi msgid (yksikkö ja monikko), joten käännöksen lähteenä ei kannata käyttää monimutkaista kieltä.

Lokalisointinäppäimet

kuten Olet ehkä huomannut, käytämme lähdetunnisteena varsinaista englanninkielistä lausetta. Että msgid on sama käytetään kaikissa .po-tiedostot, Eli muilla kielillä on sama formaatti ja samat msgid kentät, mutta käännetyt msgstr rivit.

käännösavaimista puhuttaessa tässä on kaksi standardisoitua ”filosofista” lähestymistapaa:

1. msgid reaalilauseena

tämän lähestymistavan tärkeimmät edut ovat:

  • jos ohjelmiston osia ei ole käännetty millekään kielelle, näytettävä avain säilyttää silti jonkin merkityksen. Jos esimerkiksi osaat kääntää englannista espanjaksi, mutta tarvitset apua ranskaksi kääntämisessä, saatat julkaista uuden sivun, jossa on puuttuvia ranskankielisiä lauseita, ja osa verkkosivustosta näytetään sen sijaan englanniksi.

  • kääntäjän on paljon helpompi ymmärtää, mitä on tekeillä, ja tehdä kunnon käännös msgidperusteella.

  • se antaa sinulle ”ilmainen” l10n yhdelle kielelle-lähde yksi.

toisaalta ensisijainen haitta on se, että jos varsinaista tekstiä pitää muuttaa, pitää sama msgid korvata useilla kielitiedostoilla.

2. msgid uniikkina, strukturoituna avaimena

tämä kuvaisi lauseen roolia sovelluksessa strukturoidulla tavalla, mukaan lukien mallin tai osan, jossa merkkijono sijaitsee sen sisällön sijaan.

tämä on loistava tapa järjestää koodi, erottaen tekstisisällön mallilogiikasta. Se voisi kuitenkin aiheuttaa ongelmia kääntäjälle, joka ei ymmärtäisi asiayhteyttä.

lähdekielitiedosto tarvittaisiin pohjaksi muille käännöksille. Esimerkiksi kehittäjä olisi mieluiten ” en.po ”tiedosto, että kääntäjät lukisivat ymmärtää, mitä kirjoittaa” fr.po”.

puuttuvat käännökset näyttäisivät ruudulla merkityksettömiä näppäimiä (”top_menu.Tervetuloa ”sijaan” Hei siellä, käyttäjä!”mainitulla kääntämättömällä ranskankielisellä sivulla).

se on hyvä, koska se pakottaisi käännöksen valmiiksi ennen julkaisua-mutta huono, koska käännösongelmat olisivat käyttöliittymässä todella kamalia. Joissakin kirjastoissa on kuitenkin mahdollisuus määritellä tietty kieli ”varasuunnitelmaksi”, jolloin käytös on samanlaista kuin muussakin lähestymistavassa.

Gettext-käsikirja suosii ensimmäistä lähestymistapaa, koska se on yleensä kääntäjille ja käyttäjille ongelmatilanteissa helpompaa. Sitä lähestymistapaa tulemme käyttämään myös täällä.

on kuitenkin huomattava, että Symfony-dokumentaatio suosii avainsanapohjaista kääntämistä, jotta kaikkiin käännöksiin voidaan tehdä itsenäisiä muutoksia vaikuttamatta myös mallipohjiin.

Arkikäyttö

yhteisessä sovelluksessa käyttäisit joitain Gettext-funktioita kirjoittaessasi staattista tekstiä sivuillesi.

nämä lauseet näkyisivät silloin .po-tiedostoja, saada käännetty, koottu. mo-tiedostoja, ja sitten käyttää Gettext kun renderöinti todellinen käyttöliittymä. Ottaen huomioon, että Let ’ s sitoa yhteen, mitä olemme keskustelleet tähän mennessä askel-askeleelta esimerkki:

1. Mallipohjatiedosto, mukaan lukien joitakin erilaisia gettext-puheluita

<?php include 'i18n_setup.php' ?><div> <h1><?=sprintf(gettext('Welcome, %s!'), $name)?></h1> <!-- code indented this way only for legibility → <?php if ($unread): ?> <h2> <?=sprintf( ngettext('Only one unread message', '%d unread messages', $unread), $unread )?> </h2> <?php endif ?></div><h1><?=gettext('Introduction')?></h1><p><?=gettext('We\'re now translating some strings')?></p>
  • gettext() yksinkertaisesti kääntää msgid sen vastaavaksi msgstr tietylle kielelle. Myös pikakirjoitusfunktio _() toimii samalla tavalla

  • ngettext() tekee samoin, mutta monikon säännöillä

  • on myös dgettext() ja dngettext(), jonka avulla voit ohittaa verkkotunnuksen yhdellä puhelulla (lisää verkkotunnuksen määrityksestä seuraavassa esimerkissä)

2. Näytteen asetustiedosto (i18n_setup.php kuten edellä), oikean lokaalin valitseminen ja gettext

– asetusten määrittäminen Gettextin avulla sisältää hieman boilerplate-koodia, mutta kyse on lähinnä locales-hakemiston määrittämisestä ja sopivien parametrien (lokaali ja verkkotunnus) valitsemisesta.

<?php/** * Verifies if the given $locale is supported in the project * @param string $locale * @return bool */function valid($locale) { return in_array($locale, ) && valid($_GET)) { // the locale can be changed through the query-string $lang = $_GET; //you should sanitize this! setcookie('lang', $lang); //it's stored in a cookie so it can be reused} elseif (isset($_COOKIE) && valid($_COOKIE)) { // if the cookie is present instead, let's just keep it $lang = $_COOKIE; //you should sanitize this!} elseif (isset($_SERVER)) { // default: look for the languages the browser says the user accepts $langs = explode(',', $_SERVER); array_walk($langs, function (&$lang) { $lang = strtr(strtok($lang, ';'), ); }); foreach ($langs as $browser_lang) { if (valid($browser_lang)) { $lang = $browser_lang; break; } }}// here we define the global system locale given the found languageputenv("LANG=$lang");// this might be useful for date functions (LC_TIME) or money formatting (LC_MONETARY), for instancesetlocale(LC_ALL, $lang);// this will make Gettext look for ../locales/<lang>/LC_MESSAGES/main.mobindtextdomain('main', '../locales');// indicates in what encoding the file should be readbind_textdomain_codeset('main', 'UTF-8');// if your application has additional domains, as cited before, you should bind them here as wellbindtextdomain('forum', '../locales');bind_textdomain_codeset('forum', 'UTF-8');// here we indicate the default domain the gettext() calls will respond totextdomain('main');// this would look for the string in forum.mo instead of main.mo// echo dgettext('forum', 'Welcome back!');?>

3. Käännöksen valmistelu ensimmäistä ajoa varten

yksi Gettextin suurista eduista mukautettuihin kehyspaketteihin verrattuna on sen laaja ja tehokas tiedostomuoto.

ehkä mietit ”oh man, that’ s quite hard to understand and edit by hand, a simple array would be easily!”Älä erehdy, sovellukset kuten Poedit ovat täällä auttamassa – paljon. Voit saada ohjelman niiden verkkosivuilla, se on ilmainen ja saatavilla kaikille alustoille. Se on melko helppo työkalu tottua, ja erittäin tehokas yksi samaan aikaan – käyttäen kaikkia ominaisuuksia Gettext on käytettävissä. Työskentelemme täällä uusin versio, Poedit 1.8.

näkymä sisälle Poedit.

ensimmäisellä ajolla sinun tulee valita valikosta ”Tiedosto > Uusi…”. Sinulta kysytään kieltä; valitse / Suodata kieli, jolle haluat kääntää, tai käytä edellä mainittua muotoa, kuten en_US tai pt_BR.

Kielen valinta.

Nyt, tallenna tiedosto – käyttämällä että hakemistorakenne mainitsimme samoin. Sitten sinun tulee klikata ”Pura lähteistä”, ja täällä voit määrittää eri asetuksia louhinta ja käännös tehtäviä. Kaikki nämä löytyvät myöhemmin ”luettelo > ominaisuudet”:

  • Lähdepolut: Sisällytä kaikki kansiot projektista, jossa gettext() (ja sisarukset) kutsutaan – tämä on yleensä sinun mallipohjasi/katselukansiosi. Tämä on ainoa pakollinen asetus.

  • käännöksen ominaisuudet:

    • Projektin nimi ja versio, tiimi ja tiimin sähköpostiosoite: hyödyllisiä tietoja, jotka menevät sisään .po – tiedoston otsikko.
    • monikkomuodot: nämä ovat aiemmin mainitut säännöt. Voit jättää sen oletusvaihtoehdolla suurimman osan ajasta, sillä Poedit sisältää jo kätevän tietokannan monikon säännöistä monille kielille.
    • Charsets: UTF-8, mieluiten.
    • lähdekoodin charset:koodisi käyttämä charset-luultavasti myös UTF-8, eikö?
  • Lähdesanat: taustalla oleva ohjelmisto tietää, miltä gettext() ja vastaavat funktiokutsut näyttävät useilla ohjelmointikielillä, mutta yhtä hyvin voi luoda omia käännösfunktioita. Se on täällä voit lisätä niitä muita menetelmiä. Tätä käsitellään myöhemmin ”vinkit” – osiossa.

kun olet asettanut nämä ominaisuudet, Poedit suorittaa skannauksen läpi lähdetiedostot löytää kaikki lokalisointi puhelut. Jokaisen skannauksen jälkeen Poedit näyttää yhteenvedon siitä, mitä löytyi ja mitä lähdetiedostoista poistettiin. Uudet merkinnät tyhjenevät käännöstaulukkoon, jolloin voit syöttää näiden merkkijonojen lokalisoidut versiot. Tallenna se ja. mo tiedosto on (uudelleen)koottu samaan kansioon ja, presto!, projektisi on kansainvälistynyt!

projekti kansainvälistyi.

Poedit voi myös ehdottaa yleisiä käännöksiä verkosta ja aiemmista tiedostoista. Se on kätevä, joten sinun tarvitsee vain tarkistaa, onko niissä järkeä, ja hyväksyä ne. Jos olet epävarma käännöksestä,voit merkitä sen sumeaksi, ja se näytetään keltaisella. Siniset merkinnät ovat sellaisia, joilla ei ole käännöstä.

4. Käännösjouset

kuten Olet ehkä huomannut, lokalisoituja merkkijonoja on kahta päätyyppiä: yksinkertaisia ja monikkomuotoja sisältäviä.

yksinkertaisissa on vain kaksi laatikkoa: lähde ja lokalisoitu merkkijono. Lähdemerkkijonoa ei voi muuttaa, koska Gettext/Poedit eivät sisällä mahdollisuutta muuttaa lähdetiedostojasi, vaan sinun täytyy muuttaa lähdettä itse ja hakea tiedostot uudelleen. (Vihje: Jos napsautat käännösriviä hiiren kakkospainikkeella, se näyttää vihjeen lähdetiedostoista ja riveistä, joilla kyseistä merkkijonoa käytetään.)

Monikkomuotoiset merkkijonot sisältävät kaksi ruutua, jotka näyttävät kaksi lähdemuotoa, ja välilehdet, jotta voit määrittää eri lopulliset muodot.

määrittelen lopullisia lomakkeita.

esimerkki merkkijonosta, jossa on monikkomuoto Poeditissa ja joka näyttää käännösvälilehden jokaiselle.

aina kun muutat lähdekooditiedostojasi ja haluat päivittää käännökset, paina Päivitä ja Poedit hakee koodin uudelleen, poistaa olemattomat merkinnät, yhdistää muuttuneet ja lisää uusia.

Poedit voi myös yrittää arvata joitakin käännöksiä muiden tekemiesi käännösten perusteella. Nämä arvaukset ja muuttuneet merkinnät saavat ”sumea” merkki, joka osoittaa, että ne tarvitsevat tarkistusta, näytetään keltaisella luettelossa.

siitä on hyötyä myös, jos on käännöstiimi ja joku yrittää kirjoittaa jotain, mistä ei ole varma: merkitse se sumeaksi, niin joku muu tarkistaa sen myöhemmin.

lopuksi on suositeltavaa jättää ”Näytä > Kääntämättömät merkinnät ensin” – merkintä, koska se auttaa välttämään merkintöjen unohtamista. Tästä valikosta voit myös avata käyttöliittymän osia, joiden avulla voit tarvittaessa jättää kontekstuaalisia tietoja kääntäjille.

Tips & Tricks

Web-palvelimet voivat päätyä .mo-tiedostojen välimuistiin.

jos käytät PHP: tä moduulina Apachessa (mod_php), saatat kohdata ongelmia .mo-tiedoston välimuistissa ollessa. Se tapahtuu ensimmäistä kertaa se luetaan,ja sitten, päivittää sitä, saatat joutua käynnistämään palvelimen.

Nginxillä ja PHP5: llä käännösvälimuistin päivittämiseen kuluu yleensä vain pari sivua, PHP7: llä sitä tarvitaan harvoin.

kirjastot tarjoavat aputoimintoja, joilla lokalisointikoodi pysyy lyhyenä.

monien suosimana on helpompi käyttää _() gettext()sijasta. Monet kehysten mukautetut i18n-kirjastot käyttävät myös jotain t(): n kaltaista, jotta käännetty koodi olisi lyhyempi. Kuitenkin, se on ainoa toiminto, joka Urheilu oikotie.

haluat ehkä lisätä projektiisi joitakin muita, kuten __() tai _n() ngettext(), tai ehkä fancy _r(), joka liittyisi gettext() ja sprintf() soittoihin. Myös muut kirjastot, kuten oscarotero ’ s Gettext, tarjoavat aputoimintoja kuten nämä.

näissä tapauksissa sinun on ohjeistettava Gettext-apuohjelmaa siitä, miten merkkijonot puretaan näistä uusista funktioista. Älä pelkää, se on helppoa. Se on vain pelto .po-tiedosto tai asetusnäyttö Poeditissa (editorissa kyseinen vaihtoehto on sisällä ”luettelo > ominaisuudet > lähteet avainsanat”).

muista: Gettext tietää jo oletustoiminnot monille kielille, joten älä ole huolissasi, jos lista näyttää tyhjältä. Sinun täytyy sisällyttää tähän luetteloon uusien toimintojen TEKNISET TIEDOT tämän nimenomaisen muodon mukaisesti.:

  • jos luot jotain t(), joka yksinkertaisesti palauttaa käännöksen merkkijonolle, voit määrittää sen muotoon t. Gettext tietää ainoa funktion argumentti on merkkijono käännetään;

  • jos funktiolla on useampi kuin yksi argumentti, voit määrittää, missä niistä ensimmäinen merkkijono on ja tarvittaessa myös monikkomuoto. Esimerkiksi jos funktion allekirjoitus on __('one user', '%d users', $number), spesifikaatio olisi __:1,2, eli ensimmäinen muoto on ensimmäinen argumentti ja toinen muoto toinen argumentti. Jos numerosi tulee sen sijaan ensimmäisenä argumenttina, spektri on __:2,3, mikä osoittaa, että ensimmäinen muoto on toinen argumentti ja niin edelleen.

sen jälkeen, kun nämä uudet säännöt on sisällytetty .po-tiedosto, Uusi skannaus tuo uusia merkkijonoja yhtä helposti kuin ennen.

tee PHP-sovelluksestasi monikielinen Gettext

Gettext on erittäin tehokas työkalu PHP-projektisi kansainvälistämiseen. Beyond sen joustavuus, joka mahdollistaa tuen suuri määrä ihmisten kieliä, sen tuki yli 20 ohjelmointikieliä avulla voit helposti siirtää tietosi käyttää sitä PHP muihin kieliin, kuten Python, Java, tai C#.

lisäksi Poedit voi auttaa tasoittamaan koodin ja käännettyjen merkkijonojen välistä polkua, mikä tekee prosessista suoraviivaisemman ja helpomman seurata. Se voi myös virtaviivaistaa yhteisiä käännöstoimia Crowdin-integroinnillaan.

harkitse mahdollisuuksien mukaan muita kieliä, joita käyttäjäsi saattavat puhua. Tämä on enimmäkseen tärkeää ei-englanninkielisissä projekteissa: voit lisätä käyttöoikeuttasi, jos julkaiset sen sekä englanniksi että äidinkielelläsi.

kaikissa projekteissa ei tietenkään ole kansainvälistymisen tarvetta, mutta on paljon helpompaa aloittaa i18n projektin alkuvaiheessa, vaikka sitä ei aluksi tarvittaisikaan, kuin tehdä se myöhemmin, jos siitä myöhemmin tulisi vaatimus. Ja, työkaluja kuten Gettext ja Poedit se on helpompaa kuin koskaan.

Related: Introduction To PHP 7: What ’s New and What’ s Gone

Leave a Reply

Sähköpostiosoitettasi ei julkaista.