Step-by-step instructions for creating multi-language applications/fi

From Lazarus wiki
Jump to navigationJump to search

English (en) suomi (fi)

Vaiheittaiset ohjeet monikielisten sovellusten luomiseen

Johdanto

Sovellusten laatiminen useille kielille voi olla mysteeri - kunnes sitä kokeilee. Kokeilun jälkeen voidaan huomata, että se on hämmästyttävän yksinkertaista, kun ottaa nämä ensimmäiset askeleet.

On mahdollista hypätä sisään. Mutta voi olla hyvä idea oppia jotain arkkitehtuurin taustalla olevista perusideoista. Siksi on hyvä lukemaan wiki-artikkeleita [[lokalisointi ja / tai käännökset i18n ohjelmille, jotka selittävät kohtauksen taustalla olevat perustekijät.


Aloittaminen

Ennen kuin aloitetaan niin pitää mainita, että tämä opetusohjelma on alunperin kirjoitettu Lazarus 1.2 -versioon ja on nyt päivitetty versioon 1.4. Täällä on joitain muistiinpanoja ja täällä tunnistaa versioiden väliset erot.

imgviewer orig.png

Ensin tarvitaan sovellus, joka halutaan kääntää. Lazaruksen mukana on kansio (hakemisto) examples\imgviewer jota voidaan käyttää esim. tässä. Jos halutaan säilyttää alkuperäinen versio niin kopioi koko projektikansion erilliseen hakemistoon, esim. imgviewer_multilanguage. Avaa Lazaruksessa projektitiedosto imgview.lpi ja suorita se. Joloin nähdään tyypillinen sovellus. Sovelluksessa on valikko ja joitain hallintatoimintoja tiedostojen luetteloimiseksi ja valitun kuvan näyttämiseksi.

Muunnetaan tämä sovellus tukemaan muitakin kieliä.

Graafisen käyttöliittymän suunnittelu

Graafisen käyttöliittymän suunnittelussa on huomioitava, että merkkijonolla on eri pituus jokaisella kielellä. Siksi kaikkien komponenttien Autosize- ominaisuuden on oltava True . On normaalia odottaa, että joillakin kielillä merkkijono voi olla noin 50% pidempi, mutta jopa 200% ei ole kovin epätavallinen.

GUI-mittasuhteissa on otettava huomioon laitteen näyttö, jossa sovellus suoritetaan. Tietokoneessa, jossa lomake ei ole skrollattavissa, se ei saa olla suurempi kuin 1024 x 600 pikseliä (10 "netbook-näyttö), mikä tarkoittaa, että jos käytetään vain yhden rivin merkkijonoja, niiden on sovitettava oikein 700x600 pikselin lomakkeelle. Kun lomake laajenee 1024x600 pikseliin niin se riittänee muillekin kielille.

Jos käytetään useita pystysuoraan sijoitettuja painikkeita ja niiden odotetaan olevan yhtä leveitä, niiden lisäksi Autosize = True ja .Constraints.MinWidth on asetettava riittävän suuri arvo.

Osien päällekkäisyyden estämiseksi on käytettävä "ankkurointia" .

Tekstikentät (TLabel) sijoitetaan usein kontrollien vasemmalle puolelle, johon ne viittaavat. Tällöin on ryhdyttävä varotoimiin, jotta ne eivät pääse konrollien sekaan, jos ne tulevat liian pitkiksi. Yksi vaihtoehto olisi sallia useiden rivien tekstikentät asettamalla niiden WordWrap-ominaisuus arvoon true (ja AutoSize arvoon false). Vaihtoehtoisesti yksiriviset tekstikentät voidaan sijoittaa kontrollien yläpuolelle.

Ota käännökset käyttöön

Käännös edellyttää vain yhtä muutosta projektiin. Se löytyy projektin asetuksista nimikkeellä "i18n". Outo sana, vai mitä? Se on lyhenne sanasta "internationalization" (kansainvälistäminen) ja se tarkoittaa "18 kirjainta i: n ja n: n välillä".

Merkkaa valintaruutu Salli kansainvälistäminen (Enable i18n ). Tämä aktivoi Kansainvälisyysasetukset (i18n Options ). Anna PO-kirjoitushakemisto (PO Output Directory) (Jona suositellaan käyttämään joko locale tai languages hakemistoa jolloin myöhemmin se löytyisi automaattisesti). Tämä on kansio (tai hakemisto), johon käännetyt tekstit sisältävät tiedostot tallennetaan. Kuten myöhemmin näet, käännöstiedostossa on tiedostolaajennus .po. Valitaan käytettäväksi kansioksi languages. Huomaa, että tämä kansio on suhteessa kansioon, jossa on ns. exe-tiedosto. Muista säilyttää tämä rakenne, jos halutaan kopioida EXE: n muualle.

enable i18n.png

Pidä valintaruutu Luo tai päivitä .po-tiedosto, kun lfm-tiedosto talletetaan (Create/update .po file when saving a lfm file) valittuna. Tämä päivittää käännös "master" -tiedoston aina, kun tallennat.

Kun projekti käännetään uudelleen, projektikansioon tulee kaksi muutosta: Aluksi on uusi tiedosto, joka on .rst-tiedostoloppuinen . Tämä tiedostotyyppi kerää yksikössä ilmoitetut resurssimerkkijonot. Resurssimerkkijonot ovat käännöstoiminnon avaintekijöitä: kun haluat merkkijonon käännettäväksi, määritä kaikki tekstit resourcestring-osioon, ei muualle koodiin, eikä Const-osioon.


Esimerkkinä: Virheilmoituksen näyttäminen "File does not exist." ("Tiedostoa ei ole olemassa."). Älä kutsu kuten ShowMessage aliohjelmaa näin

begin
  ShowMessage('File does not exist.');
end;
</source>
mutta määritä teksti <code>resourcestring</code>:nä ja käytä sitä parametrina <code>ShowMessage</code> aliohjelman kutsussa :
<source>
resourcestring
  SFileDoesNotExist = 'File does not exist.';
begin
  ShowMessage(SFileDoesNotExist);
end;

Imgview esimerkkiprojektissa on neljä resourcestring määrittelyä käännösyksikön frmmain toteutusosan alussa. Suuremmassa projektissa on tavallista kerätä kaikki resurssit erilliseen käännösyksikköön; Tällöin voidaan käyttää samoja merkkijonoja muilla lomakkeilla ja käännösyksiköissä ja välttää yksiköiden ristiinviittausta tällä tavoin.

Toinen muutos projektista on uusi kansio "languages". Se sisältää tiedoston imgview.po. Lazarus on luonut tämän tiedoston automaattisesti ja sisältää resourcestrings-muodossa valmiiksi käännettäväksi. Luodaksesi saksankielisen käännöksen kyseisestä tiedostosta luo kopio ja nimeä se imgview.de.po . "de" on käännösjärjestelmässä "saksankielinen" kielikoodi, joten voit käyttää "en" englanniksi, "fi" "suomeksi" jne. Katso esim. www.science.co.il/Language/Locale-codes.asp luetteloa kaikkien kielten koodeista.


On mahdollista avata tiedosto imgview.de.po ja lisätä sinne käännöksiä suoraan. Mutta on vielä yksinkertaisempi tapa, kuten myöhemmin näemme. Ennen kuin näin tehdään, niin tehdään toinen muutos demo-projektiin.


Käytä LCLTranslator käännösyksikköä (class TDefaultTranslator)

Toistaiseksi po-tiedostot sisältävät vain resursseja, jotka on nimenomaisesti julistettu sellaisiksi. Sovelluksess on kuitenkin monia muita merkkijonoja, joita ei ole vielä käsitelty, kuten koko valikko ja alavalikot, tekstikentissä tai luetteloissa olevat tekstit jne.

On erittäin helppo tapa sisällyttää käyttöliittymän merkkijonot käännösjärjestelmään: Lisätään käännösyksikkö LCLTranslator vain päälomakkeen uses-lauseeseen . Kun projekti kootaan tämän muutoksen jälkeen, löytyvät kaikki merkkijonot po-tiedostosta.

LCLTranslator.png

Light bulb  Huomaa: Lazarus-versiot, joka on vanhempia kuin 1.4 tämä toiminnallisuus sijaitsee käännösyksikössä DefaultTranslator.pas.

Kääntäminen

Käännökselle voisimme muokata po-tiedostoja suoraan käyttämällä tavallista tekstieditoria. Mutta moni käyttää halukkaammin erillistä ohjelmaa, joka on optimoitu tähän tarkoitukseen. Tälläisiä ohjelmia ovat:

Tässä annetaan jotain vihjeitä poedit käyttöön.

Asenna ohjelma. Jos et ole aikaisemmin tehnyt, kopioi imgviewer.po ja nimeä se imgviewer.de.po (kun halutaan tehdä saksankielinen versio). Avaa imgviewer.de.po poedit-ohjelmassa .


Poedit näyttää luettelon kaikista resourcestrings: eksplisiittisesti määritelty ja ne jotka on otettu DefaultTranslator:lla LCL-konrolleilta. Valitse merkkijono ja kirjoita sen käännös alempaan muistioon. Käy läpi kaikki tekstit. Tallenna. Ennen tallennusta avaa sitten valikkokohta "Catalog" / "Properties" ja tarkista, onko "Charset" UTF-8 - poedit joskus unohtaa tämän oikean asetuksen.

poedit.png

Samalla tavalla voit lisätä muita kieliä: avata poedit-ohjelmassa sovelluksen .po-tiedosto, lisätä käännökset ja tallentaa ne vastaavaan kielikoodiin ennen po-tiedostonlopunlaajennusta.

Koska testisovellus on englanninkielinen, on erittäin helppoa luoda englanninkielinen käännöstiedosto: imgview.po : n lataamisen jälkeen poedit , valitse jokainen merkkijono ja paina Ctrl+B, joka kopioi suoraan resurssiarvot käännösmuistioon. Tallenna nimellä imgview.en.po.

Alustuksessa DefaultTranslator hakee nykyisen järjestelmän kieliasetusta. Siksi, jos työskennellään saksankielisen tietokoneen kanssa, demo-projekti tulee nyt automaattisesti saksaksi. Oletuskielen havaitseminen ja resurssijonojen korvaaminen vastaavasta po-tiedostosta on suoritettu Lazaruksen käännössysteemillä.

Kielen vaihto

Mutta entä jos tietokone ei ole saksan kielinen? Tällöin voidaan käyttää Lazarus-käännösjärjestelmää vaihtamaan kieltä ajon aikana.

Ensinnäkin LCLTranslator käännösyksikkö lukee komentorivin valitsimet --lang tai -l joka ohittaa automaattisen kielen tunnistamisen. Esimerkiksi

    imgview.exe --lang de

avaa saksankielisen ohjelman käännöksen vaikkapa englanninkielisessä järjestelmässä.

Tietenkin, kielten vaihtaminen ajon aikana olisi vieläkin mukavampaa. Aikaisemmin tämä ei ollut mahdollista (Lazarus ennen versiota 1.2). Mutta se ei ole ongelma nykyisissä Lazarus-versiossa, jossa LCLTranslator tarjoaa menettelyn SetDefaultLang vaihtaa kieliä käyttäjän pyynnöstä. (Jälleen: "Käytä" käännösyksikköä DefaultTranslator LCLTranslator sijaan Lazarus 1.2.x: n tapauksessa).

Aluksi tarvitaan jonkin verran hallintaa käyttöliittymässä vaihtaa kieliä. Entä uusi valikkokohta "Kieli" ja alavalikko, joka sisältää käytettävissä olevat kielet? Päämuodon valikon suunnittelija lisää uuden kohdan "Kielet" ja tyhjän alivalikon. Sitten, kustakin käytettävissä olevasta kielestä, lisää vastaavan kielen nimi alavalikkoon.Tietenkin voit myös näyttää lippukuvakkeen jokaiselle kielelle - ilmaiset lippukuvakkeet ovat saatavilla [1]. OnClick tapahtumien käsittelijässä on SetDefaultLang jossa on kielikoodi parametrina, esim.

procedure TMainForm.MEnglishlanguageClick(Sender: TObject);
begin
  SetDefaultLang('en');
end;  

procedure TMainForm.MGermanLanguageClick(Sender: TObject);
begin
  SetDefaultLang('de');
end;

Tietenkin voidaan käyttää hienostuneempaa koodia, joka määrittää löytyneiden tiedostojen nimien kielikoodit ja luo valikkokohteet käytettävissä olevien käännösten mukaan.

Tämän jälkeen voidaan klikata kielen valikkokohtaa ja sovelluskieli vaihtuu valitulle kielelle automaattisesti!

Jos huomataan, että uusi valikkokohta "Kielet" ja sen alavalikosta ei ole käännetty. Tämä johtuu siitä, että nämä ovat uusia käännöksiä, jotka puuttuvat käännetyistä po-tiedostoista. Avaa käännetyt tiedostot poedit ja lisää uusiin merkkijonoihin liittyvät käännökset. Kaikki aiemmat käännökset ovat edelleen olemassa. Tallenna ja kaikki asetettu.

LCL: n määrittelemät merkkijonot

Tässä on yksi ajatus hienosäätöä varten: LCL: n määrittelemät, standardi-valintaikkunoissa tai viestiruutuissa käytetyt virheviestit eivät ole vielä kääntyneet. Niiden kääntäminen on erittäin helppoa: niiden käännöstiedostot löytyvät Lazarus-asennuksen hakemistosta lcl/languages ; ne on nimetty lclstrconsts.*.po . Valitse ne käännökset, joita käytät sovelluksessa ja kopioi ne projektin kielikansioon. (Lisää käännösyksikkö lclstrconsts uses lausekkeeseen, joka viittaa johonkin näistä merkkijonoista).

Tämä toimii, koska resourcestrings on tehty kaikista kielitiedostoista, joka löytyy kielikansiosta.

Muotoasetukset

Monikielisiä sovelluksia luotaessa käännökset ei ole ainoa tehtävä. Toinen asia on, että erilaiset muotoasetukset voivat muuttua maasta toiseen. Muotoasetukset - ne määrittävät päivämäärän ja kellonajan muotoilun, kuukausi- ja päivien nimet, desimaali- tai tuhanneterotin jne. TFormatSettings jne

Lazaruksessa tietue (record) TFormatSettings kerää tähän liittyen kaikki mahdolliset tiedot. DefaultSettings käytetään vakiomuotoisissa muunnosrutiineissa, kuten StrToDate, DateToStr, StrToFloat tai FloatToStr jne.

Windowsissa on olemassa aliohjelma (procedure) GetLocaleFormatSettings käännösyksikössä sysutils joka palauttaa TFormatSettings annetulle maalle. Parametri LCID määrittää kielikoodin Windowsissa. Muunnostaulukko löytyy kielikoodeista. Tässä taulukossa "saksa" on LCID $407 ja "englanti" on LCID $409. Siksi muokkataan OnClick tapahtumakäsittelijää kielen valinnan valikkokohtiin seuraavasti:

procedure TMainForm.MEnglishlanguageClick(Sender: TObject);
begin
  SetDefaultLang('en');
  GetLocaleFormatSettings($409, DefaultFormatSettings);
end;

procedure TMainForm.MGermanLanguageClick(Sender: TObject);
begin
  SetDefaultLang('de');
  GetLocaleFormatSettings($407, DefaultFormatSettings);
end;

Esittelyssä lisätään tilarivi projektiin ja näytetään päivämäärän, jolloin kuva luotiin:

procedure TMainForm.ShowPicDateTime;
var
  dt: TDateTime;
begin
  if LBFiles.ItemIndex = -1 then
    Statusbar.SimpleText := ''
  else begin
    dt := FileDateToDateTime(FileAge(LBFiles.Items[LBFiles.ItemIndex]));
    Statusbar.SimpleText := DateToStr(dt) + ' ' + TimeToStr(dt);
  end;
end;

Tätä toimenpidettä kutsutaan tiedostoluetteloruudun OnSelectionChange tapahtumakäsittelijältä:

procedure TMainForm.LBFilesSelectionChange(Sender: TObject; User: boolean);
begin
  ShowPicDateTime;
end;

Käännä ohjelma uudelleen ja lataa joitain kuvia. Niin nähdään että päivämäärämuoto muuttuu, kun kieltä vaihdetaan ja toinen kuva on valittu

Valitettavasti tämä ratkaisu on voimassa vain Windowsille.

Vaikka joitain lokalisointiin liittyviä kysymyksiä (esim. Oikealta vasemmalle -tilaan, lajittelujärjestystä) ei ole tässä käsitelty niin toivotaan, että tämä opetusohjelma kattoi tärkeimmät näkökohdat ja on ainakin hyvä aloittelijalle.

Loppujen lopuksi tässä on opetusnäytön lopullinen kuvakaappaus: se näyttää kuvankatselusovelluksen saksaksi.

imgviewer de.png.

Katso myös