AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Übersetzung in andere Sprachen mit bestimmten Anforderungen
Thema durchsuchen
Ansicht
Themen-Optionen

Übersetzung in andere Sprachen mit bestimmten Anforderungen

Ein Thema von Dalai · begonnen am 26. Mär 2014 · letzter Beitrag vom 28. Mär 2014
Antwort Antwort
Seite 2 von 2     12   
Furtbichler
(Gast)

n/a Beiträge
 
#11

AW: Übersetzung in andere Sprachen mit bestimmten Anforderungen

  Alt 27. Mär 2014, 21:45
Leute bei einem Formular und vielleicht 20 Texten würde ich noch nicht einmal drüber nachdenken, irgend etwas anzupassen. Einfach die Texte, die man übersetzen will, nach meinem Vorschlag einlesen. Wer will, kann noch folgende Funktion verwenden:

Delphi-Quellcode:
Function Translate (string aKey, aDefault : String) : String;
begin
  Result := Translations.Values[aKey];
  if Result='then Result := aDefault;
End;
Dann schreibt man einfach:
Delphi-Quellcode:
...
  MyLabel.Caption := Translate('MyLabel',MayLabel.Caption);
...
D.h. man übergibt einfach der 'Translate'-Funktion einfach den aktuellen Wert. Wenn nun -aus welchem Grund auch immer- der übersetzte Text nicht vorhanden ist, wird wenigstens der Originaltext verwendet.

Klar, kann man alles verbessern, automatisieren, per RTTI automatisch erstellen, aber wie schon gesagt: Bei 1-2 Formularen absoluter Overkill. Oder Spielerei.

Geändert von Furtbichler (27. Mär 2014 um 21:56 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#12

AW: Übersetzung in andere Sprachen mit bestimmten Anforderungen

  Alt 27. Mär 2014, 22:29
Hier mal ein RTTI-Beispiel, basierend auf einem alten Testprojekt von mir von 2006. Sollte sich recht leicht für deine Zwecke anpassen lassen.

(Analog zu GetPropValue gibt es auch SetPropValue.)
Angehängte Dateien
Dateityp: zip RttiTest.zip (236,9 KB, 13x aufgerufen)

Geändert von Namenloser (27. Mär 2014 um 22:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#13

AW: Übersetzung in andere Sprachen mit bestimmten Anforderungen

  Alt 28. Mär 2014, 23:05
So, die Programmierung hat etwas länger gedauert, als ich gehofft hatte. Naja, wie immer eigentlich .

Ich hab mich für die einfache Methode von Furtbichler entschieden . Ich hab die Funktion ähnlich umgesetzt:
Delphi-Quellcode:
unit Translation;

interface

uses Classes, SysUtils, IniFiles;

const
    CRLF = #13#10;

procedure CreateLangFile(const AFileName: string);
procedure FreeLangFile;
procedure ReadLangFileSection(const ASection: string);
function Translate(const AName: string; const ADefault: string): string;

implementation

var hLangFile : TIniFile;
    sl: TStringList;

procedure CreateLangFile(const AFileName: string);
begin
    hLangFile:= TIniFile.Create(AFileName);
    sl:= TStringList.Create;
end;

procedure FreeLangFile;
begin
    if Assigned(hLangFile) then
        hLangFile.Free;
    if Assigned(sl) then
        sl.Free;
end;

procedure ReadLangFileSection(const ASection: string);
begin
    if Assigned(sl) then
        hLangFile.ReadSectionValues(ASection, sl);
end;

function GetLangString(const AName: string; const ADefault: string; const Asl: TStringList): string;
var idx: integer;
begin
    Result:= ADefault;
    idx:= Asl.IndexOfName(AName);
    if (idx <> -1) then
    begin
        Result:= Asl.Values[Asl.Names[idx]];
    end;
    Result:= StringReplace(Result, '\n', CRLF, [rfReplaceAll]);
end;

function Translate(const AName: string; const ADefault: string): string;
begin
    Result:= GetLangString(AName, ADefault, sl);
end;
Zum Abrufen der übersetzten Strings dann einfach:
Delphi-Quellcode:
Translation.CreateLangFile('C:\full\path\to\German.lng');
...
Translation.ReadLangFileSection(Self.Name);
Self.Caption:= Translate(Self.Name, 'Properties of %s');
btnOK.Caption:= Translate(btnOK.Name, btnOK.Caption);
...
Translation.FreeLangFile;
Genaugenommen müsste man das objektorientiert umsetzen, aber dazu fehlte mir gestern echt der Nerv. Mal sehen, vielleicht mach ich das noch, sofern es sich lohnt.

Danke auch an Namenloser für die Anregung mittels RTTI. Nette Methode, aber so kann ich nicht steuern, welche Strings nicht übersetzt werden dürfen. Oder man müsste dafür mehr Aufwand treiben, indem man sich genau überlegt, wann man die Übersetzung durchführt - was durchaus schwierig wird, wenn bestimmte Strings nur bei Bedarf genutzt werden.

MfG Dalai
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz