Umgebungssprache ermitteln
Umgebungssprache ermitteln
am 05.12.2006 15:50:52 von Volker Pohlers
Hallo,
ich muss in einem (Windows- und Linux-) Perlskript für die
Namenskonvertierung auf die jeweilige Systemsprache reagieren können
(Russisch und Deutsch). Wie ermittle ich mit Perl, welche Sprache im
System eingestellt ist?
Volker
Re: Umgebungssprache ermitteln
am 05.12.2006 16:14:35 von Stephan Grein
Volker Pohlers wrote:
> Hallo,
>
> ich muss in einem (Windows- und Linux-) Perlskript für die
> Namenskonvertierung auf die jeweilige Systemsprache reagieren können
> (Russisch und Deutsch). Wie ermittle ich mit Perl, welche Sprache im
> System eingestellt ist?
Eventuell kann man das über das Hash %ENV machen. (Unter Linux sollte
das klappen, nach LC_* suchen)
>
> Volker
HTH,
--
Stephan Grein,
https://stephan-rockt.de
GnuPG-Key-ID: 0xF8C275D4
FingerPrint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Re: Umgebungssprache ermitteln
am 05.12.2006 16:39:33 von Wolf Behrenhoff
Volker Pohlers schrieb:
> Hallo,
>
> ich muss in einem (Windows- und Linux-) Perlskript für die
> Namenskonvertierung auf die jeweilige Systemsprache reagieren können
> (Russisch und Deutsch). Wie ermittle ich mit Perl, welche Sprache im
> System eingestellt ist?
Für Windows kannst du es wie folgt machen:
use Win32::API;
my $GetLang = Win32::API->new(
"kernel32", "DWORD GetUserDefaultLangID()"
);
$l = $GetLang->Call();
my $lang;
if ($l == 0x407) {
$lang = 'Deutsch';
} elsif ($l == 0x419) {
$lang = 'Russisch';
} else {
$lang = 'andere Sprache';
}
print $lang;
Statt GetUserDefaultLangID kannst du auch GetSystemDefaultLangID
verwenden - je nach dem, was du haben willst (oder auch die jeweiligen
Get(User/System)DefaultLCID-Funktionen). Ich habe allerdings noch nie
mehrsprachig programmiert und kenne daher die Unterschiede dieser
Funktionen nicht.
Wolf
PS: Ich weiß nicht, ob es Standard ist - ich habe jedenfalls auch unter
Windows eine "lang"-Umgebungsvariable. Kann aber auch sein, dass ich die
für irgendwelche cygwin-Programme gesetzt habe und sie nicht
standardmäßig gesetzt ist.
Re: Umgebungssprache ermitteln
am 06.12.2006 11:07:06 von Ingo Menger
Wolf Behrenhoff schrieb:
> Volker Pohlers schrieb:
> > Hallo,
> >
> > ich muss in einem (Windows- und Linux-) Perlskript für die
> > Namenskonvertierung auf die jeweilige Systemsprache reagieren können
> > (Russisch und Deutsch). Wie ermittle ich mit Perl, welche Sprache im
> > System eingestellt ist?
>
> Für Windows kannst du es wie folgt machen:
[code]
> PS: Ich weiß nicht, ob es Standard ist - ich habe jedenfalls auch unter
> Windows eine "lang"-Umgebungsvariable. Kann aber auch sein, dass ich die
> für irgendwelche cygwin-Programme gesetzt habe und sie nicht
> standardmäßig gesetzt ist.
Keine Ahnung, ich könnte mir aber vorstellen, daß eine Heuristik hier
hilfreich sein kann, wie z.B.
if ($ENV{"USERPROFILE"} =3D~ m/Documents/) { $lang =3D "englisch"; }
elsif ($ENV{"USERPROFILE"} =3D~ m/Einstellungen/) { $lang =3D "deutsch";
}
elsif ($ENV{"USERPROFILE"} =3D~ m/ne mogu pisatch po russkij/) { $lang
=3D "putinesisch"; }
usw.
Re: Umgebungssprache ermitteln
am 06.12.2006 13:44:14 von Wolf Behrenhoff
Ingo Menger schrieb:
>> PS: Ich weiß nicht, ob es Standard ist - ich habe jedenfalls auch unter
>> Windows eine "lang"-Umgebungsvariable. Kann aber auch sein, dass ich die
>> für irgendwelche cygwin-Programme gesetzt habe und sie nicht
>> standardmäßig gesetzt ist.
>
> Keine Ahnung, ich könnte mir aber vorstellen, daß eine Heuristik hier
> hilfreich sein kann, wie z.B.
> if ($ENV{"USERPROFILE"} =~ m/Documents/) { $lang = "englisch"; }
> elsif ($ENV{"USERPROFILE"} =~ m/Einstellungen/) { $lang = "deutsch";
> }
> elsif ($ENV{"USERPROFILE"} =~ m/ne mogu pisatch po russkij/) { $lang
> = "putinesisch"; }
Naja, das mag unter Windows 2000 und XP funktionieren. Was ist mit
Windows 9x (ok, das setzt zum Glück kaum noch jemand ein) und mit Vista?
Wenn ich mich recht entsinne, sollte "Dokumente und Einstellungen" in
C:\Users\$UserName liegen. Somit geht dein Code nicht mehr mit Vista.
GetUserDefaultLangID wird es aber sicher noch weiter geben!
Wolf
Re: Umgebungssprache ermitteln
am 06.12.2006 17:13:49 von Ingo Menger
Wolf Behrenhoff schrieb:
> Ingo Menger schrieb:
> >> PS: Ich weiß nicht, ob es Standard ist - ich habe jedenfalls auch un=
ter
> >> Windows eine "lang"-Umgebungsvariable. Kann aber auch sein, dass ich d=
ie
> >> für irgendwelche cygwin-Programme gesetzt habe und sie nicht
> >> standardmäßig gesetzt ist.
> >
> > Keine Ahnung, ich könnte mir aber vorstellen, daß eine Heuristik hi=
er
> > hilfreich sein kann, wie z.B.
> > if ($ENV{"USERPROFILE"} =3D~ m/Documents/) { $lang =3D "englisch"=
; }
> > elsif ($ENV{"USERPROFILE"} =3D~ m/Einstellungen/) { $lang =3D "deutsc=
h";
> > }
> > elsif ($ENV{"USERPROFILE"} =3D~ m/ne mogu pisatch po russkij/) { $lang
> > =3D "putinesisch"; }
>
> Naja, das mag unter Windows 2000 und XP funktionieren. Was ist mit
> Windows 9x (ok, das setzt zum Glück kaum noch jemand ein) und mit Vista?
Keine Ahnung. Dafür ist es eine Heuristik. Eine andere wäre, zu
schauen ob im HOME-Verzeichnis Files mit kyrillischen Namen rumstehen.
> Wenn ich mich recht entsinne, sollte "Dokumente und Einstellungen" in
> C:\Users\$UserName liegen. Somit geht dein Code nicht mehr mit Vista.
> GetUserDefaultLangID wird es aber sicher noch weiter geben!
Da hst Du sicher recht, aber dafür mußt Du dieses ganze Win32-Zeug
halt auch einbinden. Das stört dann wieder im UNIX, bzw. man muß
wieder Umstände machen um es dort nicht zu laden, usw.
Vielleicht ist es doch besser, die LANG-Variable anzuschauen, die es
anscheinend doch standardmäßig unter Win-XP gibt. Und für den Fall,
daß sie doch nicht gesetzt ist, schreibt man in die Doku: "Wenn LANG
nicht gesetzt ist, werden die Nachrichten in deutsch ausgegeben."
Re: Umgebungssprache ermitteln
am 08.12.2006 12:00:51 von Volker Pohlers
vielen Dank für die Tipps.
Ich habe mich entschieden, eine Umgebungsvariable LANG zu nutzen - fehlt
sie unter Windows (da kein Standard) muss sie halt vom Nutzer gesetzt
werden.
Volker