![]() |
Zwischen Sprachen umschalten?
Hallo,
hab mein Programm mit GNU Gettext übersetzt. Welche Übersetzung aber eingeschaltet wird richtet sich nach der Sprache des Windows. Möchte es aber so machen, dass der User zwischen den Sprachen im Programm selber wählen kann, wie funktioniert das? :gruebel: |
Re: Zwischen Sprachen umschalten?
Vor dem TranslateComponent(Self):
UseLanguage('<ISOCODE>'); also z.B: UseLanguage('de-DE'); Die zu der Sprache gehörenden PO (bzw. MO) Dateien müssen natürlich im jeweiligen Sprachverzeichnis vorhanden sein. |
Re: Zwischen Sprachen umschalten?
Für DXGettext gibt es da einige
![]() Hinweis: Die Links auf der Seite sind veraltet, aber das Projekt "cnxmanager" ist immer noch auf Sourceforge zu finden und das Sourcepackage dazu enthält die beschrieben Dateien auch. Und noch eine Warnung: Controls die dynamisch zur Laufzeit erstellt werden und auch wieder verschwinden können, bringen dxgettext in Schwierigkeiten. Der Grund: Der erste Aufruf zur Übersetzung (TranslateComponent()) legt eine Liste der Controls mit den ursprünglichen Texten an. Wenn man danach die Sprache ändert, muss man mittels Aufruf von RetranslateComponent() die neuen Texte abrufen. Dabei wird die zuvor angelegte Liste benutzt. Wenn also zwischen den Aufrufen Controls hinzukommen, werden die nicht übersetzt (es sei denn man ruft nach der Erzeugung explizit gleich TranslateComponent(MeinNeuesControl) auf), aber viel schwerwiegender: Wenn Controls zwischen den Aufrufen abgeräumt werden, gibts Access Violations (im besten Falle), im schlimmsten Falle wird irgendwo Speicher zerstört und man sucht sich einen Wolf nach ganz seltsamen Problemen im Programm. |
Re: Zwischen Sprachen umschalten?
Zitat:
Delphi-Quellcode:
procedure TForm1.Deutsch1Click(Sender: TObject);
begin UseLanguage('de-DE'); TranslateComponent(Self); end; procedure TForm1.Englisch1Click(Sender: TObject); begin UseLanguage('en-EN'); TranslateComponent(Self); end; |
Re: Zwischen Sprachen umschalten?
Zitat:
|
Re: Zwischen Sprachen umschalten?
Zitat:
Du musst dir merken ob das Formular schon mal übersetzt wurde. NUr beim ersten Mail verwendest du "TranslateComponent()". Bei allen folgenden Malen verwendest du "ReTranslateComponent()"! Ansonsten reicht auch ein "UseLanguage('de')" wenn ein Sprachverzeichnis "DE" vorhanden ist (der Parameter von "UseLanguage" gibt letztendlich an in welchen Verzeichnis sich die MO Datei befindet. Du musst als nicht füe Deutsch-Östereich, Deutsch-Schweiz, Deutsch-... alle MO Dateien mitliefern. Es reicht wen ein Verzeichnis für "DE" existiert (es sei denn du hast in den verschiedenen Sprachvarianten unterschiedliche Formulierungen) |
Re: Zwischen Sprachen umschalten?
Hab das jetzt so:
Delphi-Quellcode:
Und wie speichere ich ab welche Sprache gewählt wurde? :gruebel:
UseLanguage('ru-RU');
ReTranslateComponent(Self); |
Re: Zwischen Sprachen umschalten?
Die Einstellung speichern kannst du wo du willst:
Inifile, Registry, Textdatei, XML-File,... ,schreibs auf einen Zettel und häng ihn an die Wand :mrgreen: Das Speichern der Einstellung hat nichts mit dxGetText zu tun, du speicherst nur einen String irgendwo ab (oder vieleicht auch nur den Index einer Combobox aus der die Sprache gewählt wurde, kommt auf dein Programm an) |
Re: Zwischen Sprachen umschalten?
Zitat:
|
Re: Zwischen Sprachen umschalten?
Zitat:
|
Re: Zwischen Sprachen umschalten?
Jetzt stehe ich vor der Frage wie man auf die Ursprungssprache wechselt, also ich die Sprache in der das Prog. geschrieben wurde, es gibt ja für sie keine .po-Datei. :gruebel:
Einfach mit
Delphi-Quellcode:
Geht nicht, wie dann? :gruebel:
ReTranslateComponent(Self);
|
Re: Zwischen Sprachen umschalten?
Also ich entwickele Anwendungen immer in Englisch (englisches Delphi wegen der Systemmeldungen, eigene englische Originaltexte in den Formularen). Da dxGetText als "Indexsprache" Englisch benutzt gibt es dafür (normalerweise) auch keine PO Datei.
So reicht dann ein simples UseLanguage('EN'); RetranslateComponent(self); um wieder aufs Original umzuschalten. Generell gilt dabei, dass die Originale, also die Strings aus den Formularen, immer dann benutzt werden wenn eine PO Datei für die gewählte Sprache nicht gefunden werden kann! Ein "UseLanguage('WUPPDI')" würde also auch dazu führen, dass die Originale wieder angezeigt werden. |
Re: Zwischen Sprachen umschalten?
Ja das klappt, thx. :thumb:
|
Re: Zwischen Sprachen umschalten?
Komischerweise wird Itemindex der ComboBox immer auf 0 gesetzt :gruebel:
Ich denke weil TranslateComponent(Self); vor dem Auslesen der Daten in die ComboBox geschieht. Auslesen der Daten in die ComboBox geschieht bei mir aber in OnShow und wenn ich erst danach TranslateComponent(Self); ausführe ist ItemIndex 1 (wird auch so in der .ini abgespeichert), wie erwartet, aber wenn ich das Programm das zweite mal öffne (und immer wieder) ist es wieder 0 :gruebel: Voll komisch |
Re: Zwischen Sprachen umschalten?
TranslateComponent() setzt Comboboxen auf -1 bzw. 0 zurück (je nach Typ), da für die Übersetzung die alten Texte raus und die neuen rein müssen. Steht so auch in der Doku. Abhilfe: ItemIndex erst nach TranslateComponent setzen oder notfalls mit einer lokalen Variable merken.
|
Re: Zwischen Sprachen umschalten?
Ach so..... ok muss ich mal ändern. Thx :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 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