Meine Vermutung ist, dass der Patch "Strg+" nach "Ctrl+" konvertiert, und es dann dafür keine Übersetzung gibt. Könntest Du bitte testen, ob eine zusätzliche Pseudo-Übersetzung
"Ctrl+" -> "Ctrl+" das Problem behebt? Oder, wenn das nicht funktioniert "Ctrl+" -> "Control+" (damit die Übersetzung <> dem Original ist).
Also, noch mal zur Sicherheit ganz ausführlich:
Deutsches Delphi 2009, das heißt mit deutschsprachiger
IDE. Darin habe ich ein neues Projekt erstelt mit einem Hauptmenü mit zwei Menüpunkten, diese auch auf deutsch beschriftet. Dann habe ich für das Projekt eine normale default.po/mo erstellt mit Deutsch->Englisch-Übersetzungen. Im Ordner locale\en\LC_MESSAGES gibt es also die besagte system.mo und die projektspezfische default.mo.
Der einzige echte Code im Projekt ist das erwähnte:
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
AddDomainForResourceString('system');
UseLanguage('en');
TranslateComponent(Self);
end;
Mit der Zeile AddDomain... werden also zwei mo-Dateien benutzt: die default.mo für das normale Zeug auf dem Formular und die system.mo. In dem Fall funktioniert der Patch nicht. Kommentiere ich diese erste Zeile aus, so funktioniert der Patch.
Deine Lösungsvorschläge haben so nicht geholfen. In der system.po gibt es aber auch den Eintrag Strg+ -> Ctrl+. Entferne ich diesen Eintrag aus der system.po, so funktioniert der Patch auch bei aktivierter AddDomainForResourceString. Andererseits ist es auch so, dass auch mit aktivierter system.po und ohne Patch das Strg nicht korrekt nach Ctrl übersetzt wird, insofern bringt das ohne Patch eh nix.
Fazit also: Durch den Patch wird es nicht schlechter als vorher, weil der Eintrag Strg+->Ctrl+ aus der system.po ohnehin keine sichtbare Wirkung hat. Man kann den Eintrag in der system.po aber entfernen, dann funktioniert auch der Patch.