Ich benutze ein gnugettext.pas welches bei den Tools von J.Rathlev dabei war. Der letzte Eintrag im Header:
Delphi-Quellcode:
// Changes J. Rathlev (kontakt(a)rathlev-home.de)
// see: JR - 2011-07-29 / 2012-09-10
// All Delphi version related compiler switches removed - needs at least Delphi XE2
// Information about this file:
// $LastChangedDate: 2010-08-25 15:40:17 +0200 (mer., 25 août 2010) $
// $LastChangedRevision: 220 $
// $HeadURL: http://svn.berlios.de/svnroot/repos/dxgettext/trunk/dxgettext/sample/gnugettext.pas $
Die Version ist uralt, aber an der prinzipiellen Verwendung hat sich nichts geändert.
Die aktuelle Version gibt's auf Sourceforge
https://svn.code.sf.net/p/dxgettext/...gnugettext.pas
und im Programm sieht es so aus
Delphi-Quellcode:
unit XXXX_Help; Das ist aber KEIN Formular!!!!!
procedure Do_TiPoolTimer(Sender: TObject; Ident: Word; Counter: Integer; projAktiv: Boolean);
begin
etwas code
txt:= FormatDateTime(_('
mm/dd/yyyy'),Now)+'
'+FormatDateTime(_('
hh:mm AM/PM'),Now);
end;
ich hoffe jetzt sind die Randbedinungen alle bekannt?
Und noch die grundsätzliche Frage zu meinem Problem:
Wenn ich dem System mehrere Domains bekannt mache, wird dann von _(xxx) automatisch in allen gesucht, oder sollte zumindest in allen gesucht werden?
Wenn JR da nichts grundlegendes geändert hat, wird für direkte gettext() bzw. _()-Aurufe nicht automatisch in allen Domains gesucht sondern nur in der jeweils aktiven (Standard: "default"). In allen Domains suchen passiert nur für RessourceStrings, und auch da nur in denen die mit RegisterDomainForRessourceString registriert wurden.
Man kann natürlich selbst eine _()-Funktion schreiben, die mittels DGetText alle Domains durchgeht, bis eine Übersetzung geliefert wird:
Delphi-Quellcode:
function _(const _s: string): string;
begin
Result := gettext(_s);
if Result = _s then begin
Result := dgettext(_s, domain1);
if Result = _s then begin
Result := dgettext(_s, domain2);
// usw. fuer weitere Domains.
end;
end;
end;
Diese muss man dann aber in eine
Unit packen, in der sie vor der Funktion in gnugetext.pas gefunden wird.
Am besten dupliziert man die Funktionen aus gnugetext, die man benutzt, (also in der Regel _() und TranslateComponent) in eine eigene
Unit mytranslation und bindet nur in dieser
Unit gnugettext ein, in allen anderen benutzt man mytranslation statt gnugettext, so dass man sicher ist, welche _()-Funktion aufgerufen wird.