eindeutschen Deutsche Bezeichnung

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

eindeutschen Deutsche Bezeichnung

Beitrag von hbr »

Hallo,
Wer kann mir helfen?
Komme einfach nicht weiter.

Ich habe mir die deutsche Datei als unit1.lrs umgewandelt und als unit1 in mein Uses eingebunden.
Der Aufruf 'TranslateUnitResourceStrings' ist in meinem Programm auch vorhanden.
Hier die Unit1 > unit1.lrs 1. Zeile = ' LazarusResources.Add('lclstrconsts.de','PO',[.......'

Code: Alles auswählen

 
unit unit1;
{$mode objfpc}{$H+}
interface
uses
   Classes, SysUtils;
   function TranslateUnitResourceStrings: boolean;
implementation
uses LResources, Translations;
resourcestring
  MyCaption = 'Caption';
 
function TranslateUnitResourceStrings: boolean;
var
  r: TLResource;
  POFile: TPOFile;
begin
  r:=LazarusResources.Find('lclstrconsts.de','PO');
  POFile:=TPOFile.Create;
  try
    POFile.ReadPOText(r.Value);
    Result:=Translations.TranslateUnitResourceStrings('unit1',POFile);
  finally
    POFile.Free;
  end;
end;
initialization
  {$I unit1.lrs}
end.
 
 
Leider bekomme ich die Umwandlung nicht ans laufen.
Was passt hier nicht?

Gruß
hbr
Zuletzt geändert von Lori am Mi 13. Mär 2013, 15:59, insgesamt 1-mal geändert.
Grund: richtiger Highlighter

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 170
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Lazarus 3.8 FPC 3.2.2 x86_64-win64-win32/win64 x86_64-linux-gtk2
CPU-Target: i386, win64, arm

Re: eindeutschen Deutsche Bezeichnung

Beitrag von willi4willi »

Hallo hbr

ich habe auch lange gefummelt, bevor ich das mit der Übersetzung hinbekommen habe. Irgendwo fand ich eine gute und einfache Anleitung. Vielleich versuchtst Du mal folgendes Beispiel:

- Erstelle ein neues Projekt (Anwendung) mit einem Button

- Speichere dieses in einem Ordner

- Nimm folgende Projekteinstellungen vor (Projekt --> Projekteinstellungen --> i18n):

i18n einschalten [x]
PO-Ausgabeverzeichnis "languages" (im Projektverzeichnis neu anlegen)
.po Datei beim Speichern einer lfm Datei erstellen/aktualisieren [x]

- füge in der Form Unit

uses defaulttranslator;

-und in dem Button-Click-Ereignis ein Meldungsfenster hinzu.

Code: Alles auswählen

 
unit Unit1;
{$mode objfpc}{$H+}
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
resourcestring
  MyCaption = 'A simple example!';
 
implementation
uses defaulttranslator;
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  MessageDlg(MyCaption, mtInformation, [mbYes, mbNo, mbOK, mbCancel, mbAbort,
    mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose],0);
end;
 
end.
 
- Übersetze und starte das Programm.

Nun hast Du deine Englische Version.

Im Verzeichnis languages gibt es eine Datei project1.po.

Benenne diese in project1.de.po um und ändere sie mit einem Text-Editor (der UTF-8 kann) wie folgt.

Code: Alles auswählen

 
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
 
#: tform1.button1.caption
msgid "Button1"
msgstr "Schalter1"
 
#: tform1.caption
msgid "Form1"
msgstr "Formular1"
 
#: unit1.mycaption
msgid "A simple example!"
msgstr "Ein einfaches Beispiel"
 
Wenn Du nun das Programm mit dem Kommandozeilen-Parameter "-l de" startest, hast Du die deutsche Version.

Code: Alles auswählen

 
project1.exe -l de
 
Damit auch die Schalter im Meldungsfenster übersetzt werden, musst Du die Datei lclstrconsts.de.po aus dem Verzeichnis .../lazarus/lcl/languages in Dein languages-Verzeichnis kopieren.
Du wirst dort auch die lcl-Sprachdateien für andere Sprachen finden.

Genauso kannst Du Dir auch für Dein Projekt eine project1.fr.po, project1.es.po usw. erstellen.

Übrigens, ohne Kommandozeilenparameter wird die Sprachversionsdatei verwendet, die zum Betriebssystem passt, wenn vorhanden.

Hilft Dir das weiter?

Viele Grüße

Willi4Willi
 

Viele Grüße

Willi4Willi

------------

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: eindeutschen Deutsche Bezeichnung

Beitrag von hbr »

Hallo Willi4Willi,
Danke für Deine Ausführungen.

Ich möchte keine Sprachdatei neu erstellen!
Lediglich die Deutsche Sprachdatei von Lazarus (lclstrconsts.de) in mein Projekt einbinden (mit linken),
damit alle Komponenten deutsche Spachausgabe haben und das ohne irgendwelche Parameter beim Programaufruf.

Ich möchte auch nicht die Sprachdatei in ein Verzeichniss ablegen,
denn dann könnte ich diese Funktion in der .lpr verwenden.

Code: Alles auswählen

 
uses gettext, translations ; 
 
{$R *.res}
 var PODirectory, Lang, FallbackLang: String; 
 
begin
   PODirectory := 'C:/Programme/lazarus/lcl/languages/'; //Pfad anpassen und Dateien mitliefern, oder einkompilieren.
   GetLanguageIDs(Lang, FallbackLang);
  TranslateUnitResourceStrings('LCLStrConsts', PODirectory + 'lclstrconsts.de.po', Lang, FallbackLang); 
Mir geht es um das einkompilieren.

gruß
hbr
Zuletzt geändert von Lori am Do 14. Mär 2013, 17:24, insgesamt 1-mal geändert.
Grund: Bitte den richtigen Highlighter nutzen!

Antworten