AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zwischen Sprachen umschalten?

Ein Thema von AlexII · begonnen am 25. Aug 2009 · letzter Beitrag vom 29. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Zwischen Sprachen umschalten?

  Alt 25. Aug 2009, 20:26
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?
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Zwischen Sprachen umschalten?

  Alt 25. Aug 2009, 20:54
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.
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Zwischen Sprachen umschalten?

  Alt 25. Aug 2009, 20:59
Für DXGettext gibt es da einige Helferchen, wie das mit der GNU-Variante funktioniert, kann ich Dir nicht sagen

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.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Zwischen Sprachen umschalten?

  Alt 25. Aug 2009, 21:12
Zitat von Alfi001:
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.
So etwa?

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;
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Zwischen Sprachen umschalten?

  Alt 25. Aug 2009, 21:13
Zitat von OldGrumpy:
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.
Was was ... bitte in Deutsch
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Zwischen Sprachen umschalten?

  Alt 25. Aug 2009, 21:26
Zitat von AlexII:
So etwa?

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;
Fast.

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)
Ralf Kaiser
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Zwischen Sprachen umschalten?

  Alt 25. Aug 2009, 21:40
Hab das jetzt so:

Delphi-Quellcode:
UseLanguage('ru-RU');
ReTranslateComponent(Self);
Und wie speichere ich ab welche Sprache gewählt wurde?
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Zwischen Sprachen umschalten?

  Alt 25. Aug 2009, 21:57
Die Einstellung speichern kannst du wo du willst:

Inifile, Registry, Textdatei, XML-File,... ,schreibs auf einen Zettel und häng ihn an die Wand

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)
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Zwischen Sprachen umschalten?

  Alt 26. Aug 2009, 09:07
Zitat von AlexII:
Zitat von OldGrumpy:
Und noch eine Warnung: [...]
Was was ... bitte in Deutsch
Was genau verstehst Du denn nicht?
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Zwischen Sprachen umschalten?

  Alt 26. Aug 2009, 17:49
Zitat von Alfi001:
Die Einstellung speichern kannst du wo du willst:

Inifile, Registry, Textdatei, XML-File,... ,schreibs auf einen Zettel und häng ihn an die Wand
Ja das war meine erste Idee, aber ich dachte vllt gibt es von dxGetText nen extra Befehl oder so... na gut, ich mache es mit .ini
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz