AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ini als Sprachdatei nutzen ?

Ein Thema von Blamaster · begonnen am 22. Jun 2011 · letzter Beitrag vom 24. Jun 2011
Antwort Antwort
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#1

AW: Ini als Sprachdatei nutzen ?

  Alt 23. Jun 2011, 03:53
Hi

ich benutze XML für die Sprach und Programm Einstellungen
dabei kannst du all sprachen in die selbe Datei stecken wen du willst.

Delphi-Quellcode:
unit Language_Classe;

interface
 uses SysUtils, NativeXml;


Function Language_Load_File(const FileName : String) : Boolean;
Function Language_UnLoad_File() : Boolean;
Function Language_Loaded(): boolean;
Function Language_Get_Text(LangID : UTF8String; LangName : UnicodeString) : Widestring;



implementation

var LanguageFile : TNativeXml;
    Loaded : boolean = false;

(***************************** Load Language File *****************************)

Function Language_Load_File(const FileName : String) : Boolean;
begin
  Result:= false;

 if not FileExists(FileName) then
  exit;

 if Loaded then
  begin
   if (Assigned(LanguageFile)) then
    begin
     FreeAndNil(LanguageFile);
     Loaded:= false;
    end;
  end;


 try
   LanguageFile:= TNativeXml.CreateName('Language');
   LanguageFile.LoadFromFile(Filename);
  if (Assigned(LanguageFile)) then
   begin
    Loaded:= true;
    Result:= true;
   end;
 except // Could not load the language file'
   on E: Exception do
    begin
     if (Assigned(LanguageFile)) then
      FreeAndNil(LanguageFile);
      Loaded:= false;
      Result:= false;
      Exit;
    end;
 end;
end;

(**************************** UnLoad Language File ****************************)

Function Language_UnLoad_File() : Boolean;
begin
  Result:= false;

 if Loaded then
  begin
  if (Assigned(LanguageFile)) then
   begin
    FreeAndNil(LanguageFile);
    Result:= true;
    Loaded:= false;
   end;
  end;
end;

(*************************** IsLoadded Language File **************************)

Function Language_Loaded(): boolean;
begin
  Result:= Loaded;
end;

(***************************** Load Language File *****************************)
(*
  NodeByName('LangID').ReadString('ID_INF_0001=');
  NodeByName('LangID').ReadString('ID_OBJ_0001=');
*)


Function Language_Get_Text(LangID : UTF8String; LangName : UnicodeString) : Widestring;
var Str : Widestring;
begin
   Result:= '';

 if Loaded then
  begin
   With LanguageFile.Root do
    begin
      Str:= NodeByName(LangID).ReadUnicodeString(LangName);
     if (Trim(Str) = '') or (Length(Str) = 0) then
      Result:= ''
     else
      Result:= Str;
    end;
  end;
end;


end.
Code:
<?xml version="1.0" encoding="UTF-16"?>
<Language>
  <Info>
    <ID_INF_0001=>Wishmaster</ID_INF_0001=>
    <ID_INF_0002=>1.0</ID_INF_0002=>
    <ID_INF_0003=>support@blabla.com</ID_INF_0003=>
    <ID_INF_0004=>User</ID_INF_0004=>
    <ID_INF_0005=>User</ID_INF_0005=>
  </Info>
  <LangID>
   <!-- Mein Form -->
    <ID_OBJ_0001=>Drive</ID_OBJ_0001=>
    <ID_OBJ_0002=>Drive Action</ID_OBJ_0002=>
    <ID_OBJ_0003=>Close</ID_OBJ_0003=>
    <ID_OBJ_0004=>Eject</ID_OBJ_0004=>
    <ID_OBJ_0005=>Lock</ID_OBJ_0005=>
    <ID_OBJ_0006=>Unlock</ID_OBJ_0006=>
    <ID_OBJ_0007=>CDDB</ID_OBJ_0007=>   
    <ID_OBJ_0008=>Read CD-Text</ID_OBJ_0008=>   
    <ID_OBJ_0009=>Read Remote freedb</ID_OBJ_0009=>
    <ID_OBJ_0010=>Read From CD Player.ini</ID_OBJ_0010=>


     blablabla
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Ini als Sprachdatei nutzen ?

  Alt 23. Jun 2011, 09:54
Also ich nutze Ini-Dateien zum Speichern.
Und zwar im sinne von
Code:
[Lang]
Hallo=Hello
Öffnen=Open
Die Datei heißt dann en.lang.
Geladen wird nach <sprache>.lang

Mehrere Dateien sind es um möglichst schnell die Sprachen laden zu können.
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von Daniela.S
Daniela.S

Registriert seit: 1. Mär 2008
Ort: Niederösterreich
226 Beiträge
 
Delphi XE4 Enterprise
 
#3

AW: Ini als Sprachdatei nutzen ?

  Alt 23. Jun 2011, 10:22
Ich verwende eine kleine Datenbank, die die Sprachübersetzungen beinhaltet. In der werden auch sonstige Sprachrelevanten Dinge gespeichert. Eventuell gibt es auch Bilder, die Sprachabhängig sind, oder je nach Land (Flaggen, Fotos oder Maps von Niederlassungen usw.) müssen bestimmte Daten aufgenommen werden.

Du kannst eine Tabelle für jedes Formular erstellen. Hier reichen zwei Felder, eines mit dem Schlüssel, das andere mit dem Wert. zB. "btnOK", "OK". Ich würde unbedingt den Namen des Objektes nehmen, anstatt den Text.

Und die Texte der Dialoge nicht vergessen...
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#4

AW: Ini als Sprachdatei nutzen ?

  Alt 23. Jun 2011, 21:38
Hi,

ich nutze jetzt GNU GetText.

Die Frage mit dem Sprache laden konnte ich mir nun selber beantworten (UseLanguage('en'))

Nun sind mir aber ein paar Sachen noch nicht ganz klar.

Ich weiß zwar das man bei der Übersetzung Objekte ignorieren kann, aber gibt es auch eine Möglichkeit, dass man auch manche Forms davon ausschließt variablen in die Übersetzungsdatei abzugeben ?

Wenn ich die Übersetzungsdatei erstellen lasse werden wirklich alle Strings in die Datei aufgenommen. Einige Buttons möchte ich beispielsweise garnicht übersetzen lassen, dennoch tauchen sie in der Übersetzungsdatei aus was wirklich nervt (Das gleiche gilt auch für Filemasken usw.)

Und schließlich noch ein Problem. Wenn ich im Code einer String variable einen zusammengesetzen String habe wie:

variable := 'Sie haben Datei: ' + Dateiname + ' gewählt. Die Datei ist: ' Size + ' MB groß'; Nun kann ich die einzelnen Teilstrings als Resorcen strings anlegen sprich:

variable := _('Sie haben Datei: ') + Dateiname + _(' gewählt. Die Datei ist: ') Size + _(' MB groß'); Nun wir logischerweise in der Übersetzungsdatei folgendes aufgenommen:
Sie haben Datei:
gewählt. Die Datei ist:
MB groß

Durch diese Teilstrings lässt sich eventuell kein sinvoll übersetzter Satz mehr aufbauen. Wie kann man das lösen ?

Gruß Yannic
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Ini als Sprachdatei nutzen ?

  Alt 23. Jun 2011, 21:53
zumindest für das zweite Problem gibt es einen Weg
variable := 'Sie haben Datei: ' + Dateiname + ' gewählt. Die Datei ist: ' Size + ' MB groß';
wenn es noch nicht zu viel von den Konstrukten gibt, dann umschreiben in

variable := Format('Sie haben Datei: %s gewählt. Die Datei ist: %d MB groß', [Dateiname, Size]);
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#6

AW: Ini als Sprachdatei nutzen ?

  Alt 24. Jun 2011, 11:10
Hi,

super damit ist das zweit problem schonmal gelöst

Gruß Yannic

Edit.

und nochmal eine Frage. Wenn sich nun im Programm sachen ändern und manche Übersetzungstexte daher nicht mehr nötig sind, gibt es dann eine Möglichkeit Einträge aus der po wieder zu löschen ? Beim mergen werden nur neue aufgenommen aber veraltete nicht gelöscht.

Geändert von Blamaster (24. Jun 2011 um 11:23 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz