Răsfoiți Sursa

* Do not eat exceptions. Allow to handle errors in translation. Fixes issue #40430

Michaël Van Canneyt 1 an în urmă
părinte
comite
3fbf05ec89
1 a modificat fișierele cu 33 adăugiri și 6 ștergeri
  1. 33 6
      packages/fcl-base/src/gettext.pp

+ 33 - 6
packages/fcl-base/src/gettext.pp

@@ -81,6 +81,11 @@ type
   procedure TranslateResourceStrings(const AFilename: AnsiString);
   procedure TranslateUnitResourceStrings(const AUnitName:AnsiString; const AFilename: AnsiString);
 
+Type
+  TTranslationErrorHandler = Procedure (const aFileName, aUnitName : String; aError : Exception; Out ReRaise : Boolean);
+
+Var
+  OnTranslationError : TTranslationErrorHandler = Nil;
 
 implementation
 
@@ -350,7 +355,17 @@ begin
 end;
 {$endif}
 
+Function DoReRaise(const aFileName, aUnitName : String; E : Exception) : boolean;
+
+begin
+  Result:=False;
+  if Assigned(OnTranslationError) then
+    OnTranslationError(aFileName,aUnitName,E,Result);
+end;
+
 procedure TranslateResourceStrings(const AFilename: AnsiString);
+
+  
 var
   mo: TMOFile;
   lang, FallbackLang: AnsiString;
@@ -369,7 +384,9 @@ begin
           mo.Free;
         end;
       except
-        on e: Exception do;
+        on e: Exception do 
+          if DoReRaise(FN,'',E) then
+            Raise ;
       end;
     end;
   lang := Copy(lang, 1, 5);
@@ -384,7 +401,9 @@ begin
           mo.Free;
         end;
       except
-        on e: Exception do;
+        on e: Exception do
+          if DoReRaise(FN,'',E) then
+            Raise ;
       end;
     end;
 end;
@@ -393,30 +412,38 @@ end;
 procedure TranslateUnitResourceStrings(const AUnitName:AnsiString; const AFilename: AnsiString);
 var
   mo: TMOFile;
+  FN : String;
   lang, FallbackLang: AnsiString;
 begin
   GetLanguageIDs(Lang, FallbackLang);
   try
-    mo := TMOFile.Create(Format(AFilename, [FallbackLang]));
+    FN := Format(AFilename, [FallbackLang]);
+    mo := TMOFile.Create(FN);
     try
       TranslateUnitResourceStrings(AUnitName,mo);
     finally
       mo.Free;
     end;
   except
-    on e: Exception do;
+    on e: Exception do
+      if DoReRaise(FN,aUnitName,E) then
+        Raise ;
   end;
 
   lang := Copy(lang, 1, 5);
   try
-    mo := TMOFile.Create(Format(AFilename, [lang]));
+    FN := Format(AFilename, [FallbackLang]);
+    mo := TMOFile.Create(FN);
     try
       TranslateUnitResourceStrings(AUnitName,mo);
     finally
       mo.Free;
     end;
   except
-    on e: Exception do;
+    on e: Exception do
+      if DoReRaise(FN,aUnitName,E) then
+        Raise ;
+
   end;
 end;