Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Umlaute im nicht deutschen Windows umwandeln? (https://www.delphipraxis.net/122166-umlaute-im-nicht-deutschen-windows-umwandeln.html)

AlexII 10. Okt 2008 16:11


Umlaute im nicht deutschen Windows umwandeln?
 
Hallo,

hab ein Programm, dass auch im Ausland benutzt wird, da hab ich allerdings Probleme mit Umlauten. Die werd ich wahrscheinlich mit "StringReplace" umwandeln, oder was meint ihr.

Wie erkenne ich aber, ob das Programm im nicht deutschen Windows gestartet wurde, um die Umlaute umzuwandeln?

Bernhard Geyer 10. Okt 2008 16:24

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Welche Probleme hast Du denn und wie wirkt sich das aus? Am besten wäre es alles auf Unicode umzustellen (ElPack, TNTWare) oder D2009 zu nehme das von haus aus Full-Unicode-Enabled ist und das Umlautproblem damit einfach nicht mehr vorhanden ist.

Klaus01 10. Okt 2008 16:40

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Vielleicht solltest Du aber auch mal darüber nachdenken
Dein Programm mehrsprachig anzubieten.
Wie kannst Du sicher sein, dass die deutschen Texte im Ausland verstanden werden.

Ein Stichwort dazu wäre: GNU gettext

Grüße
Klaus

Larsi 10. Okt 2008 16:43

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Du könntest ja die Sprache der Windows Version ermitteln, und wenn da nicht "Deutsch" rauskommt dann machst du halt die Umlaute anders.

AlexII 10. Okt 2008 16:44

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von Larsi
Du könntest ja die Sprache der Windows Version ermitteln, und wenn da nicht "Deutsch" rauskommt dann machst du halt die Umlaute anders.

Ja das will ich ja grade, aber die Frage war wie mache ich das? Was für ein Befehl?

AlexII 10. Okt 2008 16:46

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von Bernhard Geyer
Am besten wäre es alles auf Unicode umzustellen (ElPack, TNTWare) oder D2009 zu nehme das von haus aus Full-Unicode-Enabled ist und das Umlautproblem damit einfach nicht mehr vorhanden ist.

Und wie geht das? :gruebel: Ich hab nur Delphi 7 Personal.

Bernhard Geyer 10. Okt 2008 16:50

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von AlexII
Und wie geht das? :gruebel: Ich hab nur Delphi 7 Personal.

D7 Personal? Willst du den überhaupt Geld investieren (ElPack bzw. neuere TNTWare-Versionen)?

Larsi 10. Okt 2008 16:54

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Delphi-Quellcode:
function GetOSLanguage: string;
var
  LanguageID:LangID;
  Len: Integer;
begin
  SetLength(Result, 255);
  LanguageID:=GetSystemDefaultLangID;
  Len:=VerLanguageName(LanguageID,PChar(Result), Length(Result));
  SetLength(Result, Len);
end;
Hiermit kannst du die Sprache von Windows auslesen.

Klaus01 10. Okt 2008 16:55

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von AlexII
Zitat:

Zitat von Larsi
Du könntest ja die Sprache der Windows Version ermitteln, und wenn da nicht "Deutsch" rauskommt dann machst du halt die Umlaute anders.

Ja das will ich ja grade, aber die Frage war wie mache ich das? Was für ein Befehl?

Tante Google befragen, und das hier finden.

Grüße
Klaus

AlexII 10. Okt 2008 16:56

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Na es kommt drauf an was es kostet. Ich will nicht für paar kleine Freeware viel Geld ausgeben, max. 15€ vielleicht.

AlexII 10. Okt 2008 17:02

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Und ist dann die Abfrage richtig so?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Ident: Integer;
  MyLang: PChar;
const
  Size: Integer = 250;
begin
  GetMem(MyLang, Size);
  Ident:=GetSystemDefaultLangID;
  VerLanguageName(Ident, MyLang, Size);
  Label1.Caption:=StrPas(MyLang);
  FreeMem(MyLang);

  if Label1.Caption='Deutsch (Deutschland)' then
  begin
  nicht umwandeln...
  end else umwandeln..;

end;

Larsi 10. Okt 2008 17:26

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Ich würde eher die Funkion so lassen und im Button einfach nur aufurfen. Also

Delphi-Quellcode:
function GetOSLanguage: string;
var
  LanguageID:LangID;
  Len: Integer;
begin
  SetLength(Result, 255);
  LanguageID:=GetSystemDefaultLangID;
  Len:=VerLanguageName(LanguageID,PChar(Result), Length(Result));
  SetLength(Result, Len);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := GetOSLanguage;
end;
Zitat:

Zitat von AlexII
Und ist dann die Abfrage richtig so?

Ich kann dir nicht sagen ob Deutsch (Deutschland) richtig ist. Kannst das ja so wie ich geschrieben habe erstmal ausführen dann weißt du was du drinnen steht wenn es sich um Deutsch hält.

AlexII 10. Okt 2008 17:43

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Ja Label1.Caption ist dann "Deutsch (Deutschland)" aber soll ich wirklich dann so abfragen?

Delphi-Quellcode:
if Label1.Caption='Deutsch (Deutschland)' then
  begin
  nicht umwandeln...
  end else umwandeln..;
Gibt's da nicht eine Nummer oder so für die deutsche Sprache?

DeddyH 10. Okt 2008 17:47

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Siehe MSDN-Library durchsuchenGetSystemDefaultLangID

Klaus01 10. Okt 2008 17:47

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von AlexII
Ja Label1.Caption ist dann "Deutsch (Deutschland)" aber soll ich wirklich dann so abfragen?

Delphi-Quellcode:
if Label1.Caption='Deutsch (Deutschland)' then
  begin
  nicht umwandeln...
  end else umwandeln..;
Gibt's da nicht eine Nummer oder so für die deutsche Sprache?

Dann schau Dir mal genau an was der Code macht.

Delphi-Quellcode:
LanguageID:=GetSystemDefaultLangID;
Len:=VerLanguageName(LanguageID,PChar(Result), Length(Result));
Grüße
Klaus

AlexII 10. Okt 2008 17:53

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Wie kann man die Funktion jetzt so umbauen, dass sie nicht den Name der OS anzeigt, sondern die Nummer?

DeddyH 10. Okt 2008 17:54

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Hast Du meinen Link verfolgt?

Klaus01 10. Okt 2008 18:00

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von AlexII
Wie kann man die Funktion jetzt so umbauen, dass sie nicht den Name der OS anzeigt, sondern die Nummer?

Sorry, aber Du schreibst Software die auch im Ausland eingesetzt wird
und kannst die simple Funktion nicht umbauen?

Delphi-Quellcode:
function GetOSLanguage: Integer;
begin
  result:=GetSystemDefaultLangID;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := IntToStr(GetOSLanguage);
end;
Nachdenkliche Grüße
Klaus

AlexII 10. Okt 2008 18:00

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von DeddyH
Hast Du meinen Link verfolgt?

Ja aber ich weiß nicht was ich damit anfangen soll, verzeih. :(

AlexII 10. Okt 2008 18:04

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von Klaus01
Sorry, aber Du schreibst Software die auch im Ausland eingesetzt wird und kannst die simple Funktion nicht umbauen?

Ja so ist das manchmal, Bill wurde ja auch aus der Schule geschmissen.

Ich hab erst vor kurzen angefangen Proceduren durchzunehmen, die Funktionen kommen später dran. Ich weiß sie sind fast gleich, aber mir fällt alles so schwer.

DeddyH 10. Okt 2008 18:07

Re: Umlaute im nicht deutschen Windows umwandeln?
 
In den Bits 0 bis 9 steht die primäre SprachID, in den Bits 10 bis 15 die Sublanguage ID. Also z.B. "Deutsch" als Primary Language und "(Schweiz)" als Sublanguage. Die Konstanten sind hier beschrieben:
Zitat:

Table of Language Identifiers
The following are language identifiers. They are composed of a primary language identifier and a sublanguage identifier.

The following identifiers were composed using the MAKELANGID macro.

Identifier Language
0x0000 Language Neutral
0x007f The language for the invariant locale (LOCALE_INVARIANT). See MAKELCID.
0x0400 Process or User Default Language
0x0800 System Default Language
0x0436 Afrikaans
0x041c Albanian
0x0401 Arabic (Saudi Arabia)
0x0801 Arabic (Iraq)
0x0c01 Arabic (Egypt)
0x1001 Arabic (Libya)
0x1401 Arabic (Algeria)
0x1801 Arabic (Morocco)
0x1c01 Arabic (Tunisia)
0x2001 Arabic (Oman)
0x2401 Arabic (Yemen)
0x2801 Arabic (Syria)
0x2c01 Arabic (Jordan)
0x3001 Arabic (Lebanon)
0x3401 Arabic (Kuwait)
0x3801 Arabic (U.A.E.)
0x3c01 Arabic (Bahrain)
0x4001 Arabic (Qatar)
0x042b Windows 2000/XP: Armenian. This is Unicode only.
0x042c Azeri (Latin)
0x082c Azeri (Cyrillic)
0x042d Basque
0x0423 Belarusian
0x0402 Bulgarian
0x0455 Burmese
0x0403 Catalan
0x0404 Chinese (Taiwan)
0x0804 Chinese (PRC)
0x0c04 Chinese (Hong Kong SAR, PRC)
0x1004 Chinese (Singapore)
0x1404 Windows 98/Me, Windows 2000/XP: Chinese (Macao SAR)
0x041a Croatian
0x0405 Czech
0x0406 Danish
0x0465 Windows XP: Divehi. This is Unicode only.
0x0413 Dutch (Netherlands)
0x0813 Dutch (Belgium)
0x0409 English (United States)
0x0809 English (United Kingdom)
0x0c09 English (Australian)
0x1009 English (Canadian)
0x1409 English (New Zealand)
0x1809 English (Ireland)
0x1c09 English (South Africa)
0x2009 English (Jamaica)
0x2409 English (Caribbean)
0x2809 English (Belize)
0x2c09 English (Trinidad)
0x3009 Windows 98/Me, Windows 2000/XP: English (Zimbabwe)
0x3409 Windows 98/Me, Windows 2000/XP: English (Philippines)
0x0425 Estonian
0x0438 Faeroese
0x0429 Farsi
0x040b Finnish
0x040c French (Standard)
0x080c French (Belgian)
0x0c0c French (Canadian)
0x100c French (Switzerland)
0x140c French (Luxembourg)
0x180c Windows 98/Me, Windows 2000/XP: French (Monaco)
0x0456 Windows XP: Galician
0x0437 Windows 2000/XP: Georgian. This is Unicode only.
0x0407 German (Standard)
0x0807 German (Switzerland)
0x0c07 German (Austria)
0x1007 German (Luxembourg)
0x1407 German (Liechtenstein)
0x0408 Greek
0x0447 Windows XP: Gujarati. This is Unicode only.
0x040d Hebrew
0x0439 Windows 2000/XP: Hindi. This is Unicode only.
0x040e Hungarian
0x040f Icelandic
0x0421 Indonesian
0x0410 Italian (Standard)
0x0810 Italian (Switzerland)
0x0411 Japanese
0x044b Windows XP: Kannada. This is Unicode only.
0x0457 Windows 2000/XP: Konkani. This is Unicode only.
0x0412 Korean
0x0812 Windows 95, Windows NT 4.0 only: Korean (Johab)
0x0440 Windows XP: Kyrgyz.
0x0426 Latvian
0x0427 Lithuanian
0x0827 Windows 98 only: Lithuanian (Classic)
0x042f FYRO Macedonian
0x043e Malay (Malaysian)
0x083e Malay (Brunei Darussalam)
0x044e Windows 2000/XP: Marathi. This is Unicode only.
0x0450 Windows XP: Mongolian
0x0414 Norwegian (Bokmal)
0x0814 Norwegian (Nynorsk)
0x0415 Polish
0x0416 Portuguese (Brazil)
0x0816 Portuguese (Portugal)
0x0446 Windows XP: Punjabi. This is Unicode only.
0x0418 Romanian
0x0419 Russian
0x044f Windows 2000/XP: Sanskrit. This is Unicode only.
0x0c1a Serbian (Cyrillic)
0x081a Serbian (Latin)
0x041b Slovak
0x0424 Slovenian
0x040a Spanish (Spain, Traditional Sort)
0x080a Spanish (Mexican)
0x0c0a Spanish (Spain, Modern Sort)
0x100a Spanish (Guatemala)
0x140a Spanish (Costa Rica)
0x180a Spanish (Panama)
0x1c0a Spanish (Dominican Republic)
0x200a Spanish (Venezuela)
0x240a Spanish (Colombia)
0x280a Spanish (Peru)
0x2c0a Spanish (Argentina)
0x300a Spanish (Ecuador)
0x340a Spanish (Chile)
0x380a Spanish (Uruguay)
0x3c0a Spanish (Paraguay)
0x400a Spanish (Bolivia)
0x440a Spanish (El Salvador)
0x480a Spanish (Honduras)
0x4c0a Spanish (Nicaragua)
0x500a Spanish (Puerto Rico)
0x0430 Sutu
0x0441 Swahili (Kenya)
0x041d Swedish
0x081d Swedish (Finland)
0x045a Windows XP: Syriac. This is Unicode only.
0x0449 Windows 2000/XP: Tamil. This is Unicode only.
0x0444 Tatar (Tatarstan)
0x044a Windows XP: Telugu. This is Unicode only.
0x041e Thai
0x041f Turkish
0x0422 Ukrainian
0x0420 Windows 98/Me, Windows 2000/XP: Urdu (Pakistan)
0x0820 Urdu (India)
0x0443 Uzbek (Latin)
0x0843 Uzbek (Cyrillic)
0x042a Windows 98/Me, Windows NT 4.0 and later: Vietnamese


The following three combinations of usPrimaryLanguage and usSubLanguage have special meaning.

Primary language identifier Sublanguage identifier Meaning
LANG_NEUTRAL SUBLANG_NEUTRAL Language neutral
LANG_NEUTRAL SUBLANG_DEFAULT User default language
LANG_NEUTRAL SUBLANG_SYS_DEFAULT System default language


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

© 2002 Microsoft Corporation. All rights reserved.

AlexII 10. Okt 2008 18:14

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Aber laut Post #18 ist die Nummer 1031 :gruebel: für Deutsch (Deutschland)

DeddyH 10. Okt 2008 18:18

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Ist ja auch richtig. Die zitierten Konstanten sind im Hexadezimalformat. Wenn Du dort das "0x" durch ein "$" ersetzt, kannst Du die Konstanten direkt abfragen.
Delphi-Quellcode:
if GetSystemDefaultLangID = $0407 then
  ShowMessage('Du Deutsch');

AlexII 10. Okt 2008 18:23

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Ah ja, na endlich :gruebel: mir kommt schon Dampf aus den Ohren...

Klaus01 10. Okt 2008 18:25

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von DeddyH
Ist ja auch richtig. Die zitierten Konstanten sind im Hexadezimalformat. Wenn Du dort das "0x" durch ein "$" ersetzt, kannst Du die Konstanten direkt abfragen.
Delphi-Quellcode:
if GetSystemDefaultLangID = $0407 then
  ShowMessage('Du Deutsch');

Delphi-Quellcode:
if (GetSytemDefaultLangID and $03FF) = $07 then
 ShowMessage('irgendwo im deutschsprachigem Raum');

DeddyH 10. Okt 2008 18:29

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Lass ihn das erstmal verdauen ;)

AlexII 10. Okt 2008 18:33

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Ja jetzt brauche ich noch eine Funktion die im ganzem Programm Umlaute ersetzt. Im Labels, Memos usw...

Kann man eine für alle Komponenten schreiben oder für alles einzeln?

jaenicke 10. Okt 2008 18:48

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Warum machst du nicht gleich deine Anwendung mehrsprachig, wie auch bereits vorgeschlagen wurde? Dafür gibt es entsprechende Komponenten, zum Beispiel diese:
http://sourceforge.net/projects/tpsrmgr/

AlexII 10. Okt 2008 18:52

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Ne das Programm bleibt in Deutsch, ist halt für Deutsche im Ausland. Aber da sie Windowse in der Sprache ihrer Wahlheimat haben müssen die Umlaute richtig dargestellt werden. :-D

BUG 10. Okt 2008 21:39

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von AlexII
Kann man eine für alle Komponenten schreiben

Kann man ... und da ich das schon immer mal Schreiben wollte, hab ich mal ne kleine Unit und eine kleine Demo dazu geschrieben. Sollt vllt. auch für Übersetzung nützlich sein.

MfG,
Bug

AlexII 10. Okt 2008 22:17

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Was ist das? Hab ausgeführt :gruebel:

jaenicke 10. Okt 2008 22:26

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Nach einem kurzen Blick würde ich sagen, du musst damit nur noch die Ereignisfunktionen zum Ersetzen der Caption / Text / etc. Eigenschaften machen, und die Klasse sucht für dich die Komponenten.

Bernhard Geyer 10. Okt 2008 22:36

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von AlexII
Ne das Programm bleibt in Deutsch, ist halt für Deutsche im Ausland. Aber da sie Windowse in der Sprache ihrer Wahlheimat haben müssen die Umlaute richtig dargestellt werden. :-D

Da du nicht viel Geld ausgeben willst würde ich sagen such mal ob du die TNTWare-Kompos noch in der letzten freien Version findest. Wenn du diese einsetzt wird ab NT auch im Ausland der User die Sonderzeichen korrekt dargestellt bekommen. Dann brauchst du den ganzen Sch... mit irgendwelchen Codepagewandlungen/Charactersets nicht.

BUG 11. Okt 2008 00:31

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von jaenicke
Nach einem kurzen Blick würde ich sagen, du musst damit nur noch die Ereignisfunktionen zum Ersetzen der Caption / Text / etc. Eigenschaften machen, und die Klasse sucht für dich die Komponenten.

Genau. Hätt ich wohl noch erläutern müssen :stupid: Das Programm soll nur zeigen wie man die Klasse benutzt.
Delphi-Quellcode:
function test(x: String): String;
begin
     if copy(x, 1, 3) = 'foo' then result := 'bar'+x else result := 'foo'+x; // <- Unsinn ;)
     //Das wäre eine Stelle, wo du was sinnvolles machen könntest, z.B. die Umlaute ersetzen.
end;

procedure TForm1.Button2Click(Sender: TObject);
var x: TControlChanger;
begin
     x := TControlChanger.create;
     x.CaptionFunc := test; { <- hier wird die Ereignisfunktion für die zugewiesen;
       CaptionFunc ersetzt, o Wunder, die Caption (oder bei Memos und Listboxes die Zeilen)}

     { Es gibt noch TControlChanger.TagFunc (ähnlich TControlChanger.CaptionFunc)
       (bekommt TComponent.Tag übergeben und muss einen passenden String zurückliefern)
       und TControlChanger.ComponentChangeProc (Prozedur, bekommt nur die Komponente übergeben) }

     x.ChangeableComponents := x.ChangeableComponents + [ccTCustomListBox, ccTEdit];
     x.changeComponentsRecursive(application);
     x.Free;
end;
MfG,
Bug

AlexII 11. Okt 2008 12:47

Re: Umlaute im nicht deutschen Windows umwandeln?
 
Zitat:

Zitat von Bernhard Geyer
...such mal ob du die TNTWare-Kompos noch in der letzten freien Version findest. Wenn du diese einsetzt wird ab NT auch im Ausland der User die Sonderzeichen korrekt dargestellt bekommen. Dann brauchst du den ganzen Sch... mit irgendwelchen Codepagewandlungen/Charactersets nicht.

Ist das hier nicht das gleiche und noch kostenlos? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 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