ShortCut-Text für TMenuItem ändern

Rund um die LCL und andere Komponenten
Antworten
Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

ShortCut-Text für TMenuItem ändern

Beitrag von Kay »

Hallo zusammen,

angenommen ich lege ShortCuts für MenuItems fest, dann wird beispielsweise für "Datei öffnen" der Text Ctrl+O angezeigt.
Gibt es eine Möglichkeit, dass statt Ctrl+O dann Strg+O angezeigt wird?
Gleiches gilt auch für den MessageDlg. Bei Angabe des Typs mtError lautet die Überschrift der Box dann "Error" und nicht "Fehler". Natürlich könnte man das hier auch durch einen zusätzlichen Parameter für Caption anpassen, aber müsste das nicht automatisch anhand der Locale erfolgen oder muss man dazu irgendwas in den Einstellungen der Lazarus-IDE umstellen?

Vielen Dank und viele Grüße
Kay

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: ShortCut-Text für TMenuItem ändern

Beitrag von theo »

Kann man so machen. Der Pfad muss nat. angepasst werden auf dein Verz. mit den *.po Dateien.

Code: Alles auswählen

var PODirectory, Lang, FallbackLang: String;
 
implementation
uses gettext, Translations;
 
{$R *.lfm}
 
initialization
 
PODirectory := '/home/theo/lazarus/svn/lazarus/lcl/languages/';
GetLanguageIDs(Lang, FallbackLang); // in unit gettext
TranslateUnitResourceStrings('LCLStrConsts', PODirectory + 'lclstrconsts.%s.po', Lang, FallbackLang);
 
end.

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: ShortCut-Text für TMenuItem ändern

Beitrag von Kay »

Hallo theo,

erstmal vielen Dank für den Codeschnipsel - muss man ja erstmal drauf kommen.
Das klappt auch alles soweit ganz gut, allerdings muss ich jetzt die .po-Datei immer beilegen oder? Gibt es auch eine Möglichkeit, die Datei gleich mit ins Projekt zu linken?

Viele Grüße
Kay

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: ShortCut-Text für TMenuItem ändern

Beitrag von shokwave »

Wenn ich mich recht entsinne, gibt es eine Quick&Dirty-Methode.
1. In lcl/languages die lclstrconst.po durch lclstrconst.de.po ersetzen
2. lcl neu kompilieren (Werkzeuge/>>lazarus kompilieren<< einstellen)
3. Projekt neu kompilieren

Hab ich jetzt aber nicht ausprobiert.
mfg Ingo

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: ShortCut-Text für TMenuItem ändern

Beitrag von theo »

Kay hat geschrieben: Das klappt auch alles soweit ganz gut, allerdings muss ich jetzt die .po-Datei immer beilegen oder? Gibt es auch eine Möglichkeit, die Datei gleich mit ins Projekt zu linken?
http://wiki.lazarus.freepascal.org/Tran ... ompilieren" onclick="window.open(this.href);return false;

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: ShortCut-Text für TMenuItem ändern

Beitrag von Kay »

Hallo theo,

vielen Dank für den Link. Ich hab allerdings noch ein kleines Problemchen:
Ich hab die Hinweise wie auf der Seite angegeben befolgt und habe also die lclstrconsts.de.po in eine Ressourcendatei gepackt. Dann habe ich eine neue Unit erstellt, die Befehle reinkopiert und die Unit in mein Projekt eingebunden. Die Unit wird fehlerfrei kompiliert und die .rst-Datei wird auch erstellt.
Wenn ich jetzt mein fertiges Programm starte, funktioniert das Ganze für die MessageBoxen einwandfrei, die Menü-ShortCuts werden allerdings nicht übersetzt, d. h. Ctrl statt Strg oder Del statt Entf bleiben unverändert.
Hier meine Unit:

Code: Alles auswählen

unit Translator;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  LResources, Translations;
 
implementation
 
function TranslateUnitResourceStrings: Boolean;
var
  PORes: TLResource;
  POFile: TPOFile;
begin
  PORes := LazarusResources.Find('lclstrconsts.de', 'PO');
  POFile := TPOFile.Create;
  try
    POFile.ReadPOText(PORes.Value);
    Result := Translations.TranslateUnitResourceStrings('LCLStrConsts', POFile);
  finally
    POFile.Free;
  end;
end;
 
initialization
  {$I German.lrs}
  TranslateUnitResourceStrings;
 
end.
Viele Grüße
Kay

Antworten