Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.091 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Ist das ein Fehler in dxGetText?

  Alt 22. Mär 2016, 19:59
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
  Mit Zitat antworten Zitat