Lazarus 2.0.8 (2020.04.16.)
Letöltés

file Lokalizáció és MessageDlg()

  • mode
  • mode profilkép
  • Moderátor
  • Moderátor
  • Hozzászólások: 7
  • Karma: 1
  • Köszönetek: 0

mode válaszolt a témára: Válasz: Lokalizáció és MessageDlg()

É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!!
#1843

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Válasz: Lokalizáció és MessageDlg()

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');
#1842
Megköszönték: mode

  • mode
  • mode profilkép
  • Moderátor
  • Moderátor
  • Hozzászólások: 7
  • Karma: 1
  • Köszönetek: 0

mode válaszolt a témára: Válasz: Lokalizáció és MessageDlg()

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?
#1841

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Válasz: Lokalizáció és MessageDlg()

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.
#1838
Megköszönték: mode

  • mode
  • mode profilkép
  • Moderátor
  • Moderátor
  • Hozzászólások: 7
  • Karma: 1
  • Köszönetek: 0

mode válaszolt a témára: Válasz: Lokalizáció és MessageDlg()

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ó...
#1836

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Válasz: Lokalizáció és MessageDlg()

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...
#1507

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: Válasz: Lokalizáció és MessageDlg()

Linux alatt (Fedora 21 x64 Lazarus 1.2.0) szépen magyarítja a Yes/No-t. De pl. Win7 alatt nem.
#1505

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: Válasz: Lokalizáció és MessageDlg()

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.
#1492

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Válasz: Lokalizáció és MessageDlg()

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...
#1490

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab létrehozta a témát: Lokalizáció és MessageDlg()

Ü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 };
...
#1488