TsiLang Components Suite
Deutsche Version Englische Version Deutsche Version Russische Version
HauptseiteÜbersichtBesonderheitenHerunterladenBestellenKontaktieren Sie unsForen

TsiLang Components Suite Benutzer Fragen

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: 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.

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 downloaden: 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, siFindDialog hinzufü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:

  1. 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;
    
    
  2. 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
  siLangDispatcher1.FileName := "YourSILorSIBFileName.SIL";
  siLangDispatcher1.LoadAllFromFile(siLangDispatcher1.FileName);
end;

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;
Bestes Globalisierungswerkzeug für Delphi
  Testimonials
"TsiLang is absolutely the best solution I found..." Maik Kappeler, Switzerland.

"Worked seamlessly and the auto translation is a great feature! Congratulations for a great product!" Eric Deghaye, Belgium.

More testimonials...
 
  Benutzerhandbuch
Lesen Sie das Benutzerhandbuch online oder laden Sie die detallierte Fassung herunter.
 
  Häufig gestellte Fragen
Lesen Sie die Häufig gestellte Fragen, um Antworten auf mögliche Fragen zu finden.
 
  Benutzerforum
Diskutieren Sie TsiLang-Themen mit anderen Benutzern.
 
  Siehe auch
Resource Builder- leistungsfähiger Editor für Ressourcendateien.
 
Technology Partner © 1999-2017 SiComponents® http://www.sicomponents.com
Delphi™, C++Builder™ und Kylix™ sind geschützte Marken der Borland Software Corp.