Das viel genutzte
dxGetText. Ich finde, da ist ein Fehler. Aber der kann doch noch nicht noch niemandem aufgefallen sein. Wo stehe ich auf dem Schlauch?
Folgender Testcode:
Delphi-Quellcode:
unit __langTest;
interface uses gnuGetText;
procedure justLanguageThings();
implementation
procedure justLanguageThings();
resourcestring
sMessage = '
Hello';
var
italian, spanish: TGnuGettextInstance;
begin
italian :=
nil; spanish :=
nil;
try
italian := TGnuGettextInstance.Create();
italian.UseLanguage('
IT');
spanish := TGnuGettextInstance.Create();
spanish.UseLanguage('
ES');
Write('
Italian: ');
WriteLn( italian.LoadResString(@sMessage) );
Write('
Spanish: ');
WriteLn( spanish.LoadResString(@sMessage) );
readln;
finally
italian.Free(); spanish.Free();
end;
end;
end.
Das Ergebnis ist leider
Code:
Italian: Hello
Spanish: Hello
Der Fehler liegt in der gnugettext.pas. Und zwar die letzte Zeile von
Delphi-Quellcode:
function TGnuGettextInstance.LoadResString(
ResStringRec: PResStringRec): UnicodeString;
Warum steht da
Result:=ResourceStringGettext(Result);
?
ResourceStringGettext
ist eine global herumschlabbernde Routine welche immer auf die globale
DefaultInstance
eines
TGnuGettextInstance
geht, sich also nicht darum kümmert, welche Sprache ich vorgegeben habe. Ich hätte mir meine Instanzen
italian
und
spanish
also gleich sparen könnnen.
Damit es so funktioniert wie es soll müsste die obige Zeile so ersetzt werden:
Delphi-Quellcode:
Result:= //ResourceStringGettext(Result);
gettext(Result);
Wer kann mir das ausreden?
Die aktuelle Version ist hier, richtig?
https://svn.code.sf.net/p/dxgettext/...gnugettext.pas