ich möchte einer meiner eigenen Komponenten mittels i18n ein mehrsprachiges Popup Menü verpassen. Leider bekomme ich es nicht hin. Zum Testen habe ich mir eine Minimal- Komponente angelegt bei der durch anklicken ein Popup mit zwei Einträgen geöffnet wird.
In der Komponente habe ich i18n aktiviert.
Es wurde eine .po Datei erzeugt. Diese habe ich mit Poedit bearbeitet und eine .en.po abgespeichert. Wenn ich nun versuche mit setdefaultlang('en') diese Datei zu verwenden passiert leider nichts. Muss sich die Datei an einer bestimmten Stelle befinden? Bei Programmen musste ich sie in den gleichen Ordner wie die "exe" kopieren. Oder stimmt in meiner Herangehensweise sonst was nicht? Habe mittlerweile schon viel getestet und gelesen, komme aber leider nicht wirklich voran.
Hier der Code meiner Test-Komponente:
Code: Alles auswählen
unit TestKompo;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Menus, LCLTranslator;
type
{ TTestKompo }
TTestKompo = class(TCustomControl)
private
FMenu : TPopupMenu;
FItem0 : TMenuItem;
FItem1 : TMenuItem;
protected
procedure MouseDown(Button: TMouseButton;Shift: TShiftState; X, Y: Integer);override;
public
constructor Create(AOwner: TComponent); override;
procedure Paint; override;
published
end;
resourcestring
TransText0 = 'Auswahl 1';
TransText1 = 'Auswahl 2';
procedure Register;
implementation
procedure Register;
begin
{$I testkompo_icon.lrs}
RegisterComponents('Standard',[TTestKompo]);
end;
{ TTestKompo }
procedure TTestKompo.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited MouseDown(Button, Shift, X, Y);
FMenu.PopUp;
end;
constructor TTestKompo.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
setdefaultlang('en');
FMenu:=TPopupMenu.Create(Self);
FMenu.Parent := self;
FMenu.SetSubComponent(true);
//Auswahl 1
FItem0:=TMenuItem.Create(Self);
FItem0.Caption := TransText0;
FMenu.Items.Add(FItem0);
//Auswahl 2
FItem1:=TMenuItem.Create(Self);
FItem1.Caption := TransText1;
FMenu.Items.Add(FItem1);
end;
procedure TTestKompo.Paint;
begin
inherited Paint;
self.Canvas.Brush.Color:= clYellow;
self.Canvas.FillRect(0,0,width,height);
self.Canvas.TextOut(2,5,'Kompo PopUp');
end;
end.
Ich würde mich freuen wenn mir Jemand weiter helfen könnte.
Viele Grüße
Bernd