F: Wie übersetzt man die Spaltentitel von TDBGrid?

F: Wie übersetzt man Zeilen aus der Sektion RESOURCESTRING?

F: Warum erscheinen bei Übersetzung einige Stringkonstanten nicht in der Form für gefundene Strings?

F: Wie übersetzt man DBGrid Komponenten von InfoPower?

F: Wie übersetzt man solche Nested Properties, wie wwIntl1.SearchDialog.SearchByHint von InfoPower und ppReport1.PrinterSetup.DocumnetName von Report Builder?

F: Wie kann man einige festkodierte Quellcodeformen unübersetzt lassen?

F: Wie kann man Dialogfelder internationalisieren?

F: Warum bekomme ich beim Wechsel der Sprache auf Japanisch oder Chinesisch nur Müll zu sehen?

F: Ich benutze C++Builder. Wie übersetze ich in .rc- und .rh-Dateien kodierte Stringtabellen?

F: Wie übersetzt man die Titel in TActionMainMenuBar und TActionToolBar?

F: Wie übersetzt man Stringsarrays?

F: Wie weitet man die Schaltflächen in den Standarddialogen aus?

F: Sind die TsiLang Komponente mit IntraWeb kompatibel?

F: Lassen sich die Menüverknüpfungen übersetzen?

F: Wie übersetzt man Formen aus Drittherstellerkomponenten?

F: Warum werden TDBNavigator-Hints nicht übersetzt?

F: Warum werden Übersetzungen der Developer Express Komponenten in den XP-Themen nicht richtig angezeigt?

F: Wie erkennt man die BS-Standardsprache, um sie einzuschalten?

F: Wie lädt man Datei zur Startzeit?

F: Der Hintergrund im Hauptmenü wird nach dem Wechseln der Sprache weiß.

F: “Unit siComp was compiled with a different version of System.RTLVersion”

F: Nach dem Upgrade auf Version 6.3 und höher werden Escape-Sequenzen unter C ++ nicht mehr verarbeitet.

F: Das Projekt kann nicht für die IOS-Zielplattform erstellt werden.

F: Mit TsiLang-Komponenten kann kein FireMonkey-Projekt erstellt werden.

F: Wie übersetzt man die Spaltentitel von TDBGrid?

A: Um Datenbankspalten zu übersetzten, fügen Sie alle Felder dem entsprechenden Datensatz hinzu und benutzen Sie TsiLang “DisplayLabels”, um Werte für jedes Feld zu übersetzen. Geben Sie nicht die Subeigenschaft “Titel” für Tabelleneigenschaft “Spalten” an, sonst wird sie von der Feldeigenschaft “DisplayLabel” überschrieben.

F: Wie übersetzt man Zeilen aus der Sektion RESOURCESTRING?

A: Benutzen Sie dieselbe Methode wie in der Sektion CONST und ersetzen Sie den Steuerbegriff RESOURCESTRING durch CONST.

F: Warum erscheinen bei Übersetzung einige Stringkonstanten nicht in der Form für gefundene Strings?

A: Die folgende Deklaration der Stringkonstante:

const
  constname =
  'stringvariable';

soll so beschrieben werden:

const
  constname = 'stringvariable';

F: Wie übersetzt man DBGrid Komponenten von InfoPower?

A: Zum Übersetzen der DBGrid Komponenten von InfoPower benutzen Sie TsiLang “Multilines” und übersetzen Sie die “ausgewählten” Tabellenattribute. Hinweis: Seien Sie dabei vorsichtig, achten Sie darauf, dass Format und TAB-Reihenfolge erhalten bleiben.

F: Wie übersetzt man solche Nested Properties, wie wwIntl1.SearchDialog.SearchByHint von InfoPower und ppReport1.PrinterSetup.DocumnetName von Report Builder?

A: Sie Sie müssen TsiLangs Attribut ExtendedTranslations benutzen.

F: Wie kann man einige festkodierte Quellcodeformen unübersetzt lassen?

A: In TsiLang Components Suite v4.9.6 wurden dafür spezielle Tags eingeführt: {TSI:IGNORE}, {TSI:IGNORE ON} und {TSI:IGNORE OFF}, so “versteht” TsiLang Expert, dass diese Zeilen ohne Übersetzung bleiben sollen.

F: Wie kann man Dialogfelder internationalisieren?

A: Sie müssen die entsprechende Methode der TsiLang-Komponente benutzen. TsiLang hat als Internationalisierungsunterstützung alle Standarddialogfunktionen, wie MessageDlg(), ShowMessage(), InputBox(), eingebaut.

F: Warum bekomme ich beim Wechsel der Sprache auf Japanisch oder Chinesisch nur Müll zu sehen?

A: Sie müssen die Unterstützung für japanische oder andere nicht-westliche Sprache installieren und/oder die BS-Standardsprache auf Japanisch umstellen. Um es zu machen, wählen Sie Systemsteuerung|Ländereinstellungen|Allgemein. Achten Sie darauf, dass das entsprechende Locale markiert ist, dann klicken Sie auf Standard setzen und setzen Sie das nötige Locale als Standard. Bedenken Sie aber, dass es nur auf einer NT-Plattform möglich ist. Dies gilt für ALTE OS- und IDE-Versionen!

F: Ich benutze C++Builder. Wie übersetze ich in .rc- und .rh-Dateien kodierte Stringtabellen?

A: Wir empfehlen Ihnen folgendes zu machen:

1. Melden Sie eine neue Funktion, die Strings aus Ressourcen lädt, an, z.B.:

AnsiString LoadStr2(int Ident);

2. Der Körper der Funktion soll ungefähr so aussehen:

extern PACKAGE AnsiString __fastcall LoadStr2(int Ident)
{
  TResStringRec ResRec;
  ResRec.module = (long *) &HInstance;
  ResRec.ident = Ident;
  return (LoadResString(&ResRec));
}

3. Ersetzen Sie in allen Ihren Komponenten LoadtStr() durch LoadStr2().

4. Kompilieren Sie Ihre Applikation.

5. Starten Sie den TsiLang Resource Strings Importer Assistenten (befindet sich im TsiLang Expert Menü: Tools|Assistenten) und importieren Sie alle Strings aus Ihrer ausführenden Datei, die übersetzt sein sollen.

6. Alle diese Strings (ausgewählt in dem Assistenten) werden in TsiLang importiert und stehen zum Übersetzen bereit.

7. Geben Sie die Übersetzung für diese Strings an und builden Sie Ihr Projekt erneut

F: Wie übersetzt man die Titel in TActionMainMenuBar und TActionToolBar?

A: Gewöhnlich ist TActionClientItem mit der entsprechenden TAction verknüpft, die Stringdaten ihrem Klienten liefern. Die TsiLang Komponenten haben Actionstringeigenschaften, wie Caption oder Hint, so werden beim Umschalten der aktiven Sprache alle visuellen Kontrollelemente, die mit der Action verknüpft sind, aktualisiert.

TActionClientItems, die nicht mit einer Action verknüpft sind, z.B. TActionMainMenuBar Elemente der höchsten Ebene, die keine publizierte Stringattribute haben, werden nicht verarbeitet. Um solche TActionClientItems zu übersetzen, raten wir Ihnen folgendes:

  1. Für jede TActionClientItem ohne TAction können Sie eine “Scheinaktion” ausdenken, um es mit ihr zu verknüpfen. Wenn z.B. Ihre TActionMainMenuBar ein Menü höchsten Ebene ‘File’ hat, können Sie eine neue Action FileFile1 mit dem Titelattribut ‘File’ hinzufügen und eine Verknüpfung erstellen.
  2. Geben Sie eine Übersetzung für diese Action im Übersetzungseditor an.
  3. Wenn eine Action nicht gesteuert wird sie arbeitsunfähig, Sie können aber ein OnUpdate-Script für alle “Scheinaktionen” verwenden:
...

procedure TForm1.FakeActionUpdate(Sender: TObject);
begin
  TAction(Sender).Enabled := True;
end;

...

Ein Demonstrationsprojekt können Sie hier downoaden: http://www.sicomponents.com/soft/ActionManager.zip

F: Wie übersetzt man Stringsarrays?

A: Wenn Sie solche Datenstrukturen verwenden:

const
  str1 = 'My String constant 1';
  str2 = 'My String constant 2';
  str3 = 'My String constant 3';
  StrArr: array[0..2] of string = (str1, str2, str3);

Sollten Sie StrArr Beschreibung durch folgende ersetzen:

StrArr: array[0..2] of PString = (@str1, @str2, @str3);

Also alle Verweise auf Arrayelemente in dem Code, wie

...StrArr[Index]...

sollten durch diese ersetzt werden:

...StrArr[Index]^...

F: Wie weitet man die Schaltflächen in den Standarddialogen aus?

A: Leider gibt es keine einfache Lösung für dieses Problem. Aber vielleicht können Sie sich einhacken, indem Sie etwas ähnliches in OnShow von, sagen wir, siFindDialoghinzufügen:

procedure TForm1.siFindDialog1Show(Sender: TObject);
var
  hnd: THandle;
  R: TRect;
begin
  with siFindDialog1 do
  begin
    if (siLang = nil) or (siLang.Language <> 'Dutch') then 
      Exit;
    GetWindowRect(Handle, R);
    SetWindowPos(Handle, 0, 0, 0, 
R.Right - R.Left + 26, R.Bottom - R.Top, 
SWP_NOMOVE or SWP_NOZORDER);
    hnd := GetDlgItem(Handle, 1);
    SetWindowPos(hnd, 0, 0, 0, 100, 23, 
SWP_NOMOVE or SWP_NOZORDER);
    hnd := GetDlgItem(Handle, IDCANCEL);
    SetWindowPos(hnd, 0, 0, 0, 100, 23, 
SWP_NOMOVE or SWP_NOZORDER);
  end;
end;

F: Sind die TsiLang Komponente mit IntraWeb kompatibel?

A: Ja. Sie können die TsiLang Komponente in IntraWeb Applikationen eben so wie in gewöhnlichen VCL/CLX Applikationen benutzen. Ein Demonstrationsprojekt können Sie hier downoaden: http://www.sicomponents.com/soft/IW_SiLang.zip

F: Lassen sich die Menüverknüpfungen übersetzen?

A: Ja. Obwohl Sie dazu ein paar Tricks brauchen werden. Details finden Sie in unserem Forum…

F: Wie übersetzt man Formen aus Drittherstellerkomponenten?

A: Es gibt zwei Möglichkeiten:

  • In dem Formen der Dritten werden für sichtbare Interfaceelemente Ressourcestrings gebraucht:

Sie müssen den Ressourcestrings-Importassistenten benutzen, um die Ressourcestrings in Ihre TsiLang Komponente zu importieren. Wenn Sie Fonts und Zeichensätze, die beim Anzeigen jeder Sprache in solchen Formen verwendet werden, kontrollieren möchten, können Sie TScreen.OnActiveFormChange benutzen. Zum Beispiel:

TForm1 = class(TForm) 
{…}
   procedure FormCreate(Sender: TObject); 
private
   { Private declarations }
   procedure OnFormChange(Sender: TObject); 
{…} 
end; 
{…} 
procedure TForm1.FormCreate(Sender: TObject); 
begin
   Screen.OnActiveFormChange := OnFormChange; 
end; 
procedure TForm1.OnFormChange(Sender: TObject); 
begin
   if (Screen.ActiveForm <> nil) and   (Screen.ActiveForm <> Self) then
     Screen.ActiveForm.Font.Assign(Self.Font); 
end;  
  • In dem Formen der Dritthersteller werden für Interfaceelemente fest kodierte Strings gebraucht:

Sie müssen dann TsiLang bei allen Formen der Dritten einsetzen: Diese Formen in Ihr Projekt hinzufügen und sie übersetzen, als wären es Formen aus Ihrem Projekt.

F: Warum werden TDBNavigator-Hints nicht übersetzt?

A: Es können Programmfehler (wenn es nicht so gedacht war) in der TDBNavigator Komponente sein. Benutzen Sie diesen Mustercode, um es zu korrigieren:

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBNavigator1.Hints.CommaText := 
  siLang1.GetStringValue(@siLang1.MultiLines,
  'DBNavigator1.Hints', siLang1.ActiveLanguage);
end;

F: Warum werden Übersetzungen der Developer Express Komponenten in den XP-Themen nicht richtig angezeigt?

A: Wenn XP-Themen aktiviert sind, konvertiert Developer Express AnsiString in WideString und benutzt dabei den Standardschriftsatz der Applikation. Sie können es ändern, indem Sie neben der Sprache auch das Applikationslocale ändern. Zum Beispiel:

procedure TForm1.siLang1ChangeLanguage(Sender: TObject);
begin
  if siLang1.ActiveLanguage = 1 then
    SetThreadLocale(LANG_ENGLISH)
  else
    SetThreadLocale(LANG_JAPANESE);
end;

F: Wie erkennt man die BS-Standardsprache, um sie einzuschalten?

A: In neueren Delphi und C++Builder Versionen kann dazu die globale Variable von SysLocale benutzt werden:

procedure TForm1.FormCreate(Sender: TObject);
begin
  if SysLocale.PriLangID = LANG_ENGLISH then
    siLangDispatcher1.ActiveLanguage := 1
  else if SysLocale.PriLangID = LANG_GERMAN then
    siLangDispatcher1.ActiveLanguage := 2
  else if SysLocale.PriLangID = LANG_FRENCH then
    siLangDispatcher1.ActiveLanguage := 3
  else
    siLangDispatcher1.ActiveLanguage := 1;
end;

Außerdem können Sie zum Erkennen der BS-Standardsprache WinAPI benutzen:

procedure TForm1.FormCreate(Sender: TObject);
var
  LangID: DWORD; 
begin
  LangID := GetUserDefaultLangID; 
  case Byte(LangID and $03FF) of 
    LANG_ENGLISH: siLangDispatcher1.ActiveLanguage := 1; 
    LANG_GERMAN: siLangDispatcher1.ActiveLanguage := 2; 
    LANG_FRENCH: siLangDispatcher1.ActiveLanguage := 3; 
  else
    siLangDispatcher1.ActiveLanguage := 1;
end;

F: Wie lädt man die Datei zur Startzeit?

A: Sie müssen nun FileName Attribut der Dispatcherkomponente bestimmen und LoadAllFromFile() Methode aufrufen:

procedure TForm1.FormCreate(Sender: TObject);
begin
// Setting FileName property ensures that forms created later 
// will load this file as well
  siLangDispatcher1.FileName := "YourSILorSIBFileName.SIL";
// Calling LoadAllFromFile() ensures that all 
// already created forms load this file 
  siLangDispatcher1.LoadAllFromFile(siLangDispatcher1.FileName);
end;

Lesen Sie auch den nützlichen Artikel “Erstellen mehrsprachiger Anwendungen, die von Benutzern übersetzt wurden“.

F: Der Hintergrund im Hauptmenü wird nach dem Wechseln der Sprache weiß.

A: Manchmal, wenn die Windows XP Themen aktiviert sind, kann der Hintergrund im Hauptmenü nach dem Wechseln der Sprache weiß werden. Das ist ein bekannter XP-Fehler und, um ihn zu beseitigen, können Sie folgendes unternehmen:

  1. Vor dem Umschalten der Sprache ändern den Wert von Images Attribut auf nil
  2. Schalten Sie die aktive Sprache um
  3. Setzen Sie den Wert von Images Attribut zurück

Der folgende Delphicode demonstriert es:

  MainMenu1.Images := nil; 
  siLangDispatcher.ActiveLanguage := (computed value); 
  MainMenu1.Images := ImageList1; 

Q: “Unit siComp was compiled with a different version of System.RTLVersion”

A: Offenbar sind nicht alle Update- und Service Packs in Delphi 6 installiert. Bitte installieren Sie alle verfügbaren Service- und Update Packs (einschließlich RTLUpdate 3), da das TsiLang-Paket mit allen aktuell installierten Paketen kompiliert wurde.

F: Nach dem Upgrade auf Version 6.3 und höher werden Escape-Sequenzen unter C ++ nicht mehr verarbeitet.

A: Dies war der Preis für einzelne Pakete für Delphi und C ++ Builder. Wenn Sie nur C ++ Builder verwenden, können Sie dies beheben, indem Sie in der ersten Zeile der SI.INC-Datei {$DEFINE BCB} hinzufügen und TsiLang-Pakete neu erstellen. Wenn Sie Delphi und C ++ Builder verwenden müssen oder keine Full Source Edition haben oder keine TsiLang-Pakete neu erstellen möchten, müssen Sie die in siComp.hpp deklarierte globale Variable siLang_Def_UsedInCpp auf true setzen in Ihren C ++ – Projekten direkt nach Application-> Initialize (); Anruf.

F: Das Projekt kann nicht für die IOS-Zielplattform erstellt werden.

A: Kompilierte Einheiten (DCU) werden NUR für Win32-, Win64-, Android- und OSX32-Plattformen bereitgestellt. iOS-DCUs werden für das iOSSimulator-Ziel generiert. Wenn Sie also Ihre Projekte für andere Zielplattformen erstellen müssen, müssen Sie Ihr Projekt unter Verwendung der Quellen von TsiLang Components Suite-Einheiten neu erstellen.

F: Mit TsiLang-Komponenten kann kein FireMonkey-Projekt erstellt werden.

A: Die globale bedingte FMX-Definition ist erforderlich, um TsiLang-Einheiten unter FireMonkey-Projekten zu erstellen. Wenn Sie nur vorkompilierte TsiLang-Einheiten mit Ihrem FireMonkey-Projekt verknüpfen, ist diese Definition nicht erforderlich.

Add FMX define in Project's Options