LCL Button zur Laufzeit in deutsch

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
AlterPascaler
Beiträge: 82
Registriert: Mo 26. Jun 2023, 18:56
OS, Lazarus, FPC: Linux, Lazarus, Free Pascal
CPU-Target: xxBit
Wohnort: Deutschland, NRW

LCL Button zur Laufzeit in deutsch

Beitrag von AlterPascaler »

Vielleicht ist es euch auch schon mal aufgefallen, wenn ihr TBitBtn verwendet, dann ist der Text zur Entwicklungszeit in deutsch, wenn ihr das Programm startet, ist es in englisch.
Beim letzten Norddeuschen Lazarustreffen war das ein Thema. Grund für das Verhalten ist, das die lclstrconsts.de.po fehlt. Diese Datei muss man mitgeben und einmal beim Starten geladen werden. Ich glaube kralle wollte da noch was zu schreiben.

Ich persönlich bin freund davon, so viele wie möglich im Binary zu haben, dann wird es beim weitergeben nichts vergessen. Die Lösung findet ihr in zwei Units.
  • 1. src/tb_lclconsts_lclall_de.pas: Da sind alle Texte aus lclstrconsts.de.po drin, ca. 40kB
  • 2. src/tb_lclconsts_btntxt_de.pas: Da sind nur die Button Text enthalten, ca. 2kB

Ihr müsst nichts weiteres tun, als eine von beiden in eure DeinProjekt.lpr -> Uses Klausel zu schreiben und den Suchpfad für die Datei anpassen. Für mich ist das am einfachsten über Datei->Öffnen, und dann Projekt->Datei im Editor ins Projekt aufnehmen.

Unter example/LazaBtnTxt.lpi findet ihr ein beispiel Projekt.
Ich hoffe, ich kann den einen oder anderen damit eine Freude machen.
Dateianhänge
lazabtntxt.zip
(192.71 KiB) 65-mal heruntergeladen
Viele Grüße
AlterPascaler

Soner
Beiträge: 726
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: LCL Button zur Laufzeit in deutsch

Beitrag von Soner »

Wenn du die Sprachdateien in der Programmdatei eingebunden haben willst, dann kannst du auch als Resource einbinden. Ich das in diesem Beitrag gesehen, seitdem verwende ich es, schaue nach Ruewas Texte.

Man muss aus PO-Dateien mit dem Programm "lazarus\tools\glazres" Resourcendatei erstellen. Dann das in LPR machen:

Code: Alles auswählen

uses Translations, LResources;
//aus: http://www.lazarusforum.de/viewtopic.php?f=17&t=5787&start=15
type
  TTranslateFromResourceResult = (trSuccess, trResourceNotFound, trTranslationError);
function TranslateFromResource(AResourceName, ALanguage : String): TTranslateFromResourceResult;
var LRes : TLResource;
    POFile : TPOFile = nil;
    SStream : TStringStream = nil;
begin
  Result := trResourceNotFound;
  LRes := LazarusResources.Find(AResourceName + '.' + ALanguage, 'PO');
  if LRes <> nil then
  try
    SStream := TStringStream.Create(LRes.Value);
    POFile := TPoFile.Create(SStream, False);
    try
      if TranslateUnitResourceStrings(AResourceName, POFile) then Result := trSuccess
      else Result := trTranslationError;
    except
      Result := trTranslationError;
    end;
  finally
    if Assigned(SStream) then SStream.Free;
    if Assigned(POFile) then POFile.Free;
  end;
end;

begin
  {$I lclstrconsts.de.lrs}
  {$I lr_const.de.lrs}
  TranslateFromResource('lclstrconsts', 'de'); 
  TranslateFromResource('lr_const', 'de');

  //...
end.

Vorteil von externe Sprachdateien sind, dass irgendein Benutzer das Programm selber übersetzen kann.

Sieben
Beiträge: 289
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: LCL Button zur Laufzeit in deutsch

Beitrag von Sieben »

Oder alternativ siehe diesen Thread.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: LCL Button zur Laufzeit in deutsch

Beitrag von kralle »

Moin,
AlterPascaler hat geschrieben: Fr 12. Jul 2024, 17:50 Ich glaube kralle wollte da noch was zu schreiben.
Bin ab Mittwoch in Reha und hoffe, das ich dann Abends die Zeit und Muse habe, da entsprechend was zu zuschreiben.
Muss erstmal schauen, wie der Tagesablauf sein wird und wo ich meine Notizen vom Treffen gespeichert habe :)

Wir sehen uns in Wittenberg ...
Gruß Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
AlterPascaler
Beiträge: 82
Registriert: Mo 26. Jun 2023, 18:56
OS, Lazarus, FPC: Linux, Lazarus, Free Pascal
CPU-Target: xxBit
Wohnort: Deutschland, NRW

Re: LCL Button zur Laufzeit in deutsch

Beitrag von AlterPascaler »

@kralle
alles gute, und mach dir kein Stress. Wir sehen uns in Wittenberg.

@Soner, @Sieben
Danke für eure Hinweise. Beide habe ich ausprobiert und sie funktionieren.
Danke für das neue Problem. Erst habe keine Lösung und jetzt drei. :roll:

Immer wieder schön, eine Aufgabe n Lösungen. Danke an euch, wieder was gelernt.
Viele Grüße
AlterPascaler

Ich934
Lazarusforum e. V.
Beiträge: 366
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: LCL Button zur Laufzeit in deutsch

Beitrag von Ich934 »

Soner hat geschrieben: Fr 12. Jul 2024, 18:29 ...
Ich habe das von oben einmal versucht in mein Programm zu übernehmen. Erhalte da aber folgende Meldung:

Code: Alles auswählen

Error: Incompatible type for arg no. 2: Got "TPOFile", expected "AnsiString"
Interessant ist aber, das ich in der Translations folgendes finde:

Code: Alles auswählen

function TranslateUnitResourceStrings(const ResUnitName:string; po: TPOFile): boolean; overload;
Jemand eine Idee?
Tipp für PostgreSQL: www.pg-forum.de

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

Re: LCL Button zur Laufzeit in deutsch

Beitrag von theo »

Meine Glaskugel ist zwar wieder mal in Reparatur, aber eine Erklärung wäre, dass du die Funktion mit Lang und FallbackLang aufrufst.
Das gibt es in der Variante mit TPOFile nicht.

Sieben
Beiträge: 289
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: LCL Button zur Laufzeit in deutsch

Beitrag von Sieben »

Ich habe am Ende des bereits verlinkten Threads, nämlich hier, eine Kurzanleitung für das Einbinden der LCLStrConsts mit meinem Package eingestellt. Das aktuelle Package findest du zwei Beiträge weiter oben.

Ich934
Lazarusforum e. V.
Beiträge: 366
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: LCL Button zur Laufzeit in deutsch

Beitrag von Ich934 »

Meine Lösung war ganz einfach...

1. Eine Nacht drüber schlafen
2. Mache aus

Code: Alles auswählen

if TranslateUnitResourceStrings(AResourceName, POFile) then
ein

Code: Alles auswählen

if Translations.TranslateUnitResourceStrings(AResourceName, POFile) then
Schöne Grüße
Tipp für PostgreSQL: www.pg-forum.de

Antworten