Delphi 7 program más nyelven (pl. Német)

Delphi 7 program más nyelven (pl. Német)
2012-06-02T16:57:04+02:00
2012-06-14T14:52:27+02:00
2022-11-26T01:30:36+01:00
mandula
Sziasztok !

Milyen megoldás erre a legalkalmasabb, ha:
- szeretném, ha más is tudna segíteni a fordításban
- de a forráskódot nem akarom kiadni
- tehát kellene valami külső "editor" is hozzá
- nem nagyon szeretnék külső .dll-eket pakolgatni a program mellé
- nem szükséges, hogy runtime lehessen váltani a nyelvek között

Eddig ezt találtam, de még nem próbáltam:
GNU Gettext for Delphi and C++ Builder
Mutasd a teljes hozzászólást!
Egyszerű, gyors, hatékony és ingyenes:

"DeLoc" (Delphi localization compiler)
Mutasd a teljes hozzászólást!

  • Ha a pénz nem számít...
    TsiLang
    Mutasd a teljes hozzászólást!
  • Kb. hány sorrol lenne szó?
    Csak nagyságrendileg...
    Annak a fűggvényében nézünk megoldást
    Mutasd a teljes hozzászólást!
  • Ötletem van sok
    Mutasd a teljes hozzászólást!
  • ezini fájlba megcsinálja, a lelkes user pedig notepadal átírhatja az init. lehet kell rajta finomítani. nem mostanában írtam.


    procedure SaveLanguage(Form: Tform; IniFile: string); //nyelv mentése var ini: tinifile; i: integer; begin ini:=tinifile.create(IniFile); ini.writestring(Form.Name, Form.Name, Form.Caption); For i:=0 to Form.componentcount-1 do begin if IsPublishedProp(Form.Components[I], 'Caption') then if GetPropValue(Form.Components[I], 'Caption', true) <> '' then ini.writestring(Form.Name, Form.Components[I].Name, GetPropValue(Form.Components[I], 'Caption', true)); if IsPublishedProp(Form.Components[I], 'Hint') then if GetPropValue(Form.Components[I], 'Hint', true) <> '' then ini.writestring(Form.Name, Form.Components[I].Name, GetPropValue(Form.Components[I], 'Hint', true)); end; ini.destroy; end; procedure LoadLanguage(Form: Tform; IniFile: string); //nyelv betöltése var ini: tinifile; i: integer; begin ini:=tinifile.create(IniFile); ini.readstring(Form.Name, 'Caption', Form.Caption); For i:=0 to Form.componentcount-1 do begin if IsPublishedProp(Form.Components[I], 'Caption') then SetPropValue(Form.Components[I], 'Caption', ini.readstring(Form.Name, Form.Components[I].Name, GetPropValue(Form.Components[I], 'Caption', true))) ; if IsPublishedProp(Form.Components[I], 'Hint') then SetPropValue(Form.Components[I], 'Hint', ini.readstring(Form.Name, Form.Components[I].Name, GetPropValue(Form.Components[I], 'Hint', true))) ; end; ini.destroy; end; procedure Tlistform.ListClick(Sender: TObject); begin If (Sender as TFileListbox).ItemIndex>-1 then begin LoadLanguage(LForm, List.Directory + '' + List.items[List.ItemIndex]); WriteStringIni('Language', 'File', List.items[List.ItemIndex], ChangeFileExt(paramstr(0), '.ini')); end; end; procedure LanguageSelect(Form: TForm; LanguageMappa: string); //nyelv átváltása begin LForm := Form; ListForm := TListForm.CreateNew(ListForm); With Listform do begin position:=poScreenCenter; caption:='Language'; bordericons := bordericons - [biminimize]; end; List := Tfilelistbox.Create(ListForm); With List do begin parent := ListForm; Align := alclient; Directory := LanguageMappa; mask := '*.ini'; filetype:=filetype + [ftarchive,ftreadonly]; Font.Style:=Font.Style + [fsBold]; showglyphs:=true; OnClick := ListForm.ListClick; end; ListForm.ShowModal; end;
    Mutasd a teljes hozzászólást!
  • Kb. hány sorrol lenne szó?

    Passz... rengeteg.
    57 .dfm fájl (4.5Mega) + 67 .pas fájl (1.9Mega)
    + 20 riport

    Amennyit az ember 9 év alatt lekörmöl, ha napi átlag 5 órával számol...

    Egyenlőre azt számolgatom, érdemes-e egyáltalán nekiállnom, vagy 10 év alatt sem térülne meg
    Mutasd a teljes hozzászólást!
  • Ha van benne pénz akkor igen !
    Úgy gondolod, hogy az átírtakat külön-külön lefordítanád más-más nyelven és hoznád 'forgalomba'?
    Mutasd a teljes hozzászólást!
  • Egyszerű és nagyszerű kis kódnak tűnik így elsőre.
    Bár ha jól látom, ezzel nem megoldható a *.pas fájlok szövegeinek fordítása.
    Mutasd a teljes hozzászólást!
  • Arra nem gondoltál, hogy a szöveget külön fájlba tárolnád, program indításkor betöltenéd és abból írnád ki a szövegeket?

    Így a program újrafordítása nélkül csak az a fájlt kellene átírni, cserélni. Esetleg ezt a fájlt is "kódolhatod", hogy ne legyen úgy a programod mellett, hogy akárki átírhassa. Készítenél egy programot amivel szerkeszthető és akkor csak azok nyúlhatnak hozzá, akiknek ezt megengeded.
    Mutasd a teljes hozzászólást!
  • Egyszerű, gyors, hatékony és ingyenes:

    "DeLoc" (Delphi localization compiler)
    Mutasd a teljes hozzászólást!
  • tulajdonképpen mit akarsz fordítani?
    a kód amit adtam az összes caption és hint szöveget kimenti és beolvassa ini fájlból.
    mindegy hogy a forrásban mit adtál meg, ha a formcreate eseménynél meghívod a loadlanguage függvényt, akkor az betölti az adott nyelvet.
    a savelanguage függvényt csak egyszer kell futtatnod, hogy legyen egy kiinduló fájlod, amit lehet fordítani.
    a hibaüzeneteket külön fájlban kell tárolnod, vagy ennek az ininek a végén [error] fejléc alatt felsorolva. a nyelvválasztásnál az adott nyelvhez tartozó fájlt, vagy ini részt kell betöltened egy listába. az üzenetek megjelenítésénél, pedig csak a lista oda tartozó sorát kell megjelenítened.
    mindenképpen kódolnod kell valamennyit, kérdés, hogy mennyit.
    szerintem 1 átlagos programot pár óra alatt alkalmassá tudsz tenni nyelvváltásra, ha érted a logikáját.
    Mutasd a teljes hozzászólást!
  • Mindenkinek nagyon szépen köszönöm az információkat!
    Később visszatérek erre, most gyorsan elfogadtam valamit, hogy ne törlődjön a topik.
    (Egyenlőre a másik probléma nagyobb fejtörést okoz, de szerettem volna előre informálódni, hogy majd ha oda jutok, akkor merre keresgéljek, mire számítsak. Előbb-utóbb sor kerül erre is.)

    Mégegyszer KÖSZÖNÖM !
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd