![]() |
nonVCL Anwendung lokalisieren
Hi ihr,
es geht um ![]() Leider habe ich mich zu früh gefreut. DXGetText nutzt exzessiv SysUtils und Classes, bekanntlich Gift für jede nonVCL-Anwendung. Hat jemand eine Idee (gerade die, die sonst mit nonVCL arbeiten), wie man sonst einfach eine Übersetzung hin bekommt, bei der man auch noch zur Laufzeit die Sprache ändern kann und trotzdem die RES-Strings noch nutzen kann? |
Re: nonVCL Anwendung lokalisieren
Wenn du die Stringresourcen selber anlegst, dann kannst du dir aussuchen, von wo du sie lädst
z.B. von einer DLLs mit den übersetzen Resourcen und da Resourcen auch mit eine LangID versehen sind, könnte man auch mehrere Versionen in einer EXE/DLL ablegen und müßte dann nur noch die passende Sprach-Version laden. kannst ja gern mal in meinem alten ![]() |
Re: nonVCL Anwendung lokalisieren
Ich überlege die ganze Zeit, ob ich die dxgettext nicht so zerpflücken kann, dass ich die mo/po-Dateien doch noch nutzen kann... :gruebel:
@himi: Danke, werde mal gucken... :) |
Re: nonVCL Anwendung lokalisieren
Das dort ist aber ein eigenentwickeltes System
und die ganzen Texte/Resourcen sind manuell übersetzt (k.A. ob man das auf die mo/po-Datei erweitern kann ... weiß garnicht, wie es mit diesen genau funktioniert) Im Prinzip hab ich mir LoadString und die anderen Resourcen-Funktionen so erweitert, daß sie entpsrechend der Spracheinstellung die passenden Resourcen laden. Es wurden auch die Fenster ala ![]() Hier bin ich in etwa den Weg von Delphi gegangen: ![]() Dort liegen alle Texte in einer Unit, wo dann vor dem Kompilieren die Unit getauscht würde. |
Re: nonVCL Anwendung lokalisieren
Hm, ok, dann muss ich nochmal nachhaken und ausholen:
Ich möchte, dass der Benutzer selbst eigene Übersetzungen erstellen kann. Dafür bekommt er die englische Originalübersetzung in welcher Weise auch immer mitgeliefert. Es wäre also sinnig, wenn die Strings aus einer Datei ausgelesen werden könnten. Und wenn der Benutzer dann zur Laufzeit die Sprache ändert, müsste ich nur den Inhalt der Resourcestrings austauschen, oder?* Wobei ich dann aber das Gefühl habe, wieder bei einem eigenen System zu landen... :? Zumal ich dann auch allen Fenstern (Buttons, Labels, etc.) manuell denn neuen Inhalt zuweisen müsste, wenn ich einen Neustart der Anwendung verhindern will, oder? //Edit: *Is natürlich Schwachsinn, ich kann ja schlecht eine laufende Exe ändern... :wall: |
Re: nonVCL Anwendung lokalisieren
Du könntest aber beim Laden der Texte entscheiden
- Texte aus Resourcen - oder Texte externer Datei |
Re: nonVCL Anwendung lokalisieren
Zitat:
:P Zitat:
Die Übersetzungen kommen in eine oder mehrere Ini.-Dateien. Man kann natürlich auch die Hauptsprachen (zB.: en & de) in die Exe mit aufnehmen. Der Rest kommt dann ebend in dem entsprechende Inifiles mit meinetwegen ländersp. Extensionen oder der gleichen. Man kann nun mit Hilfe von, wie hiess das :gruebel: , GetSysLanguageName die Systemsprache ausspionieren und diese, falls vorhanden laden. |
Re: nonVCL Anwendung lokalisieren
Japp, so dachte ich mir das jetzt auch. Und der Übung wegen schreibe ich mir dafür einen kleinen Parser, der das Format liest, was ich mir da zusammengefrickelt habe:
Delphi-Quellcode:
Gewinnt vielleicht keinen Design-Award, aber funktioniert (hoffentlich). :)
// Translation File for SmallTune
// Language: German // Author: Daniel Gilbert // Mail: [email]xxx@yyyyyyyy.zzz[/email] // Must match Application Minor Version // e.g. "0.3" will work for SmallTune 0.3.0, SmallTune 0.3.1, SmallTune 0.3.2 and so on, but not SmallTune 0.4.0... TRANS_FILE_VERSION=0.3; //Short Description: // //The default Format is: // //index:'Text'; // //In case you need a ' in your text (e.g.: isn't), you can write it like this: // //0:'This isn''t a problem'; // //In case you need a linebreak, this can be done this way: // //0:'This is the first line' + #13#10 + 'this is the next line'; // // NEVER EVER change the index and the line order. Doing so will result in an error and the language won't be loaded //Windows XP or NT 4.0 needed! 0:'Windows XP or NT 4.0 needed!'; //[Playing] 1:'[Playing]'; //[Pause] 2:'[Pause]'; //[Stop] 3:'[Stop]'; //Adding files... please wait... 4:'Adding files... please wait...'; //Previous track 5:'Previous track'; |
Re: nonVCL Anwendung lokalisieren
Warum nimmst du nicht einfach (Windows.)GetPrivateProfileString ? :gruebel:
|
Re: nonVCL Anwendung lokalisieren
Zitat:
Wie gesagt, hab schon lange keinen richtigen Parser mehr geschrieben. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz