Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz: Lokalizáció és MessageDlg() 2016 febr. 13 17:52 #1843

  • mode
  • mode profilkép
  • Moderátor
  • Moderátor
  • Hozzászólások: 7
  • Köszönetek: 0
És... összejött! :P
Igazából ott rontottam el, hogy a TranslateResourceStrings-ban az alap nyelvi fájl állítottam be, gondolva, hogy ebből tudja, keresnie kell magyar esetén a "hu" utótagos fájlt, de rosszul gondolkodtam.
Hatalmas köszönet, nagyon sokat segítettél!!

Válasz: Lokalizáció és MessageDlg() 2016 febr. 13 17:39 #1842

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Zárójeles kérdésedre a válasz a következő:
  • A fordításokat kezelő rendszer a nyelvi fájlokat a nevük alapján azonosítja egy nyelvel. Normál esetben a rendszer nyelvével (pl. project1.hu.po)
  • A nyelv azonosítását nem tartalmazó nevű fájlok (például project1.po vagy lclstrconsts.po) lényegében csak sablonok, nincs különösebb szerepük, mivel az angol(vagy más nyelvű eredeti) szövegek nyelvi fájl nélkül is jelen vannak az alkalmazás kódjában. Ebből következik hogy a keveredés elkerülése érdekében a forráskódokban lehetőleg angol szövegeket illik használni.

Sajnos vannak esetek (LazReport, AnchorDocking és talán mások) amikor a fordítás nem töltődik be vagy legalábbis nem érvényesül (lásd: #28858 ). Ilyenkor kerülőmegoldásként, az alkalmazás forráskódjában (project1.lpr) ki kell erőszakolni a fordítások betöltését:
  • A uses szakaszhoz hozzá kell fűzni a Translations unit-ot
  • A program kódjában az Application.Initialize után be kell írni betöltendő .po fájl nevét, például:
    TranslateResourceStrings('languages/lr_const.hu.po');
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: mode

Válasz: Lokalizáció és MessageDlg() 2016 febr. 12 09:41 #1841

  • mode
  • mode profilkép
  • Moderátor
  • Moderátor
  • Hozzászólások: 7
  • Köszönetek: 0
Szia!
Igen, tudom hogy ott kell lenni a nyelvi fájloknak és minden beállításom oké. Tüzetesebben megnézve a példaprogit, némi próbálkozást követően rájöttem az egyik hibára:
A futtatáskor a project számára létrehozott project1.po fájl létrejön ugyan, DE MELLÉ KELL TENNEM kézzel a project1.hu.po fájlt (aminek tartalma nyilván azonos is lehet), mert így érdekes módon az LCL fordítását se tölti be. (Kérdés: ha nincs más nyelvi fájl, miért nem használja az alapértelmezettet a lazarus, hiszen azt ő maga hozta létre :angry: ?)
Ettől függetlenül a LazReport továbbra is angol. Ha a példaprogramodban hozok létre egy Lazreport komponenst, ott is angol.
Nekem ez van most a languages könyvtárban:
lclstrconsts.po, lclstrconsts.hu.po, project1.po, project1.hu.po, lr_const.po, lr_const.hu.po
Valamit még mindig rosszul csinálok?

Válasz: Lokalizáció és MessageDlg() 2016 febr. 12 08:43 #1838

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
A projektedben használt csomagok nyelvi fájljait a projekted csak akkor tudja használni ha az a projekted által futás közben is elérhető (ismert) helyen van. A Letöltőközpontban található egy példaprogram, mely megmutatja hogy a Projekt és LCL nyelvi fájlok együttes használata miként oldható meg. Ugyanígy lehet használni a többi GUI csomag (pl. LazReport) nyelvi fájljait is.
Lásd még a DBNavigator magyar hints témát, melyhez a példaprogram készült.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: mode

Válasz: Lokalizáció és MessageDlg() 2016 febr. 12 08:08 #1836

  • mode
  • mode profilkép
  • Moderátor
  • Moderátor
  • Hozzászólások: 7
  • Köszönetek: 0
Nekem az a problémám a lokalizációval, hogy még sosem sikerült az LCL magyar fordítását betöltetni, így az elvileg magyar nyelvre fordított futási idejű hibaüzenetek (de pl. a LazReport preview előnézete is) mindig angol nyelvű. Már a többedik új Lazarus verziót telepítem (jelenleg 1.4.4), a nyelvi fájlok a helyükön vannak (látom Gábor szép fordításait ;) ). Hol lehet a probléma?
i18n támogatás és a .po fájlok frissítését engedélyezve, a projektfájlban "DefaultTranslator" unit hozzáadva és semmi... Különösen a Lazreport magyar nyelvi hiánya fájó...

Válasz: Lokalizáció és MessageDlg() 2015 márc. 14 06:13 #1507

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Sajnos én már olyan WinNT-t is láttam (ipari gépen), ami 3 nyelven "beszélt" egyszerre egy egyszerű MessageDlg() típusú ablakban: angol cím, német üzenet, olasz gombok. Csak magyarul nem volt semmi...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Válasz: Lokalizáció és MessageDlg() 2015 márc. 14 06:03 #1505

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Linux alatt (Fedora 21 x64 Lazarus 1.2.0) szépen magyarítja a Yes/No-t. De pl. Win7 alatt nem.

Válasz: Lokalizáció és MessageDlg() 2015 márc. 13 15:38 #1492

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1

A MessageDlg() a operációsrendszer alapértelmezett/beépített üzenetablakát jeleníti meg, tehát azt látod benne amit a operációsrendszer ad.


Én egy magyar Win7 Prof-on (x64) próbáltam, de nem magyarul jelent meg a Yes/No. Ezért volt furcsa!
Akkor ezzel nem sok mindent tudok kezdeni? Leszámítva, hogy készítek a saját dlg ablakot.

Válasz: Lokalizáció és MessageDlg() 2015 márc. 13 13:28 #1490

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86

A lokalizációt hogyan érdemes megvalósítani Lazarus-ban? Hogyan célszerű ezt a .po fájl kezelést megoldani?

A legegyszerűbb megoldás a következő:
  1. Kapcsold be az i18n támogatást és a .po fájlok frissítését is a projekt beállításai között! A menüben "Projekt/Projekt beállításai"-t választva érhető el.
  2. Az alkalmazásod főablakához tartozó unit-ban vagy a projektfájlban (*.lpr) add a uses részhez a "DefaultTranslator" unit-ot! Ez automatkusan betölti az operációsrendszer nyelvi beállításainak megfelelő fordításokat.
A nyelvi fájlok tárolására a legtisztább megoldás a programod könyvtárában egy alkönyvtár "languages" néven. Ide kell másolni az LCL általad választott nyelvű fordításait is! (például: lclstrconsts.hu.po)
Az LCL szövegeinek fordításait tartalmazó .po fájlokat az LCL forráskódjának könyvtárában, a "languages" alkönyvtárban találhatod.

A MessageDlg()-ben sima magyar nyelvű alkalmazásnál az "Ok", "Cancel" gomb nem magyar (nem többnyelvű alkalmazásról lenne szó) és nem szép így. Ezt hogyan érdemes magyarítani?

A MessageDlg() a operációsrendszer alapértelmezett/beépített üzenetablakát jeleníti meg, tehát azt látod benne amit a operációsrendszer ad.
Az LCL az adott operációsrendszer beépített elemeit használva jeleníti meg az alkalmazások ablakait. A egy TLabel vagy TButton esetén paraméterként megadható a felírat szövege, de az üzenetablakban a gombsor egyes gombjait csak számok jelképezik.

Ha nagyon nem tetszik az alkalmazáson belüli kétnyelvűség, akkor talán érdemes lenne írnod egy saját üzenetablakot...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Lokalizáció és MessageDlg() 2015 márc. 13 06:41 #1488

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Üdv!

Két kérdésem lenne, ami kapcsolódik is egymáshoz.
* A lokalizációt hogyan érdemes megvalósítani Lazarus-ban? .po fájlokkal célszerű többnyelvűsíteni? Hogyan célszerű ezt a .po fájl kezelést megoldani?
Itt találtam egy leírást: wiki.freepascal.org/Translations_/_i18n_/_localizations_for_programs
Ezt a megoldást használjátok?

* A MessageDlg()-ben sima magyar nyelvű alkalmazásnál az "Ok", "Cancel" gomb nem magyar (nem többnyelvű alkalmazásról lenne szó) és nem szép így. :) Ezt hogyan érdemes magyarítani?
...
if MessageDlg('Question', 'Do you wish to Execute?', mtConfirmation, 
   [mbYes, mbNo, mbIgnore],0) = mrYes
  then { Execute someone };
...

  • Oldal:
  • 1