![]() |
INI Russisch
Hallo,
die Übersetzung meiner Anwendung (Windows) liegt in INI Dateien. Klingt komisch, is' aber so :) Nun muss ich eine russische Übersetzung reinladen und irgendwie sehe ich den Wald vor lauter Bäumen nicht mehr. Wenn ich die Quelldatei als UTF8 speichere, sieht sie zwar im TotalCommander gut aus, dafür kommen im Delphi nur ???? an. FIniFile := TMemIniFile.Create(Filename, TEncoding.UTF8); FIniFile.Encoding := TEncoding.UTF8; oder FIniFile := TMemIniFile.Create(Filename, TEncoding.Unicode); FIniFile.Encoding := TEncoding.Unicode; Funktionieren nicht. Normalerweise bin ich mit ANSI recht gut gefahren, jetzt peile ich es aber irgendwie nicht. Geht das nicht automatisch? Quasi: Lies ein was da ist und stell es automatisch ein? Ist das .Encoding notwendig? Und was für einen String Typ muss ich nehmen? Einfach nur String? Oder irgendwas besonderes? |
AW: INI Russisch
Ich meine hier im Forum mal gelesen zu haben, dass das grundsätzlich ein Problem mit Ini-Dateien ist.
Du hast eine sehr schlechte Wahl getroffen, deine Sprachtexte im Ini-Format zu speichern :P |
AW: INI Russisch
Wenn die INI mit einer russischen Codepage codiert ist, dann mußt du auch ein russisches Encoding verwenden. :roll:
Grundsätzlich kann die Windows-INI-API aber nicht nur ANSI, sondern auch Unicode (UTF-16). |
AW: INI Russisch
Wenn ich eine TMemIni verwende, dann muss ich die Kodierung ja mitgeben. Gibt es da nicht die möglichkeit eines AutoDetect's? Außer mit TryExcept alles durchprobieren?
|
AW: INI Russisch
Das im Create übergebene Encoding wirkt lediglich auf eine neu geschriebene Datei. Damit eine UTF8-Datei als solche lesend erkannt werden kann, muss sie ein entsprechendes BOM an Anfang haben. Wie hast du die Datei denn als UTF8 abgespeichert?
|
AW: INI Russisch
Die Windows API unterstützt ANSI und UTF-16, aber NICHT UTF-8, wenn es um die Funktionen GetPrivateProfileString/WritePrivateProfileString geht. TIniFile greift auf eben diese Funktionen zurück. Im Total Commander Forum wurde das übrigens auch schon mehrfach diskutiert.
TL;DR: Benutze entweder ANSI oder UTF-16, aber kein UTF-8 (sofern du Klassen verwendest, die auf TIniFile aufbauen). EDIT: Merke grade, dass es ja um TMemIniFile geht. Egal, ich lass den Kommentar trotzdem mal stehen. Grüße Dalai |
AW: INI Russisch
Ich verstehe das Problem nicht ganz - Sind das immer wieder neue Dateien die von jemand anderem erstellt werden oder hast du das in der Hand? Wenn ja, dann öffne die Datei doch einmal z.B. in Notepad++ und stelle die Kodierung fest auf z.B. "UTF-8 mit BOM".
Dann kann man z.B. Zitat:
Delphi-Quellcode:
lesen.
var
iniFile: TMemIniFile; greeting: String; begin iniFile := TMemIniFile.Create('y:\someIniFile.ini'); greeting := iniFile.ReadString('someValues', 'greetingMessage', ''); ShowMessage(greeting); end; |
AW: INI Russisch
Auf solche Spielereien würde ich mich nicht verlassen.
Es braucht dann nur jemand mit dem Windows Editor die Datei zu bearbeiten und zu speichern und schon zeigt das Programm falsche Texte an. Ini schön und gut, aber für Sprachen zu speichern ist es keine gute Wahl. |
AW: INI Russisch
Zitat:
|
AW: INI Russisch
Ich stand mal vor demselben Problem und sobald man die Ini geändert hat und andere Zeichen als A-Z, 0-9 drin waren, wurde es falsch angezeigt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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 by Thomas Breitkreuz