Ländereinstellungen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
be_veronic
User
Beiträge: 16
Registriert: Mittwoch 19. Januar 2005, 23:30

Hallo,

Weisst jemand wie ich Ländereinstellungen mit Python ändern kann?
Danke im voraus.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Schau dir mal das Module locale an: http://www.python.org/doc/current/lib/m ... ocale.html

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
be_veronic
User
Beiträge: 16
Registriert: Mittwoch 19. Januar 2005, 23:30

Danke jens, ich hab die locale Module angeschaut aber ist nur fuer Unix gedacht, oder?
BlackJack

be_veronic hat geschrieben:Danke jens, ich hab die locale Module angeschaut aber ist nur fuer Unix gedacht, oder?
Nein, das sollte auf jedem System funktionieren das die `locale` Funktionen der ANSI C Standardbibliothek unterstützt.

Am einfachsten und am portababelsten kann man übrigens mit ``locale.setlocale(locale.LC_ALL, '')`` (der zweite Parameter ist eine leere Zeichenkette) auf die Sprache umstellen, die der Anwender bzw. das Betriebssystem benutzt. Ansonsten sind die Namen für `locale` Einstellungen leider nicht besonders genormt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab gerade noch ein bischen mit local gespielt:

Code: Alles auswählen

import time, locale

locale.setlocale(locale.LC_ALL, '')
print locale.getlocale()
print locale.getdefaultlocale()
print locale.getpreferredencoding()
print locale.format("%.2f",1200000.575,1)
for k,v in locale.localeconv().iteritems():
    print "%20s: %s" % (k,v)
Ergibt bei mir das:

Code: Alles auswählen

('de_DE', '1252')
('de_DE', 'cp1252')
cp1252
1.200.000,58
   mon_decimal_point: ,
     int_frac_digits: 2
      p_sep_by_space: 1
         frac_digits: 2
       thousands_sep: .
         n_sign_posn: 1
       decimal_point: ,
     int_curr_symbol: EUR
       n_cs_precedes: 0
         p_sign_posn: 1
   mon_thousands_sep: .
       negative_sign: -
     currency_symbol: €
      n_sep_by_space: 1
        mon_grouping: [3, 0]
       p_cs_precedes: 0
       positive_sign: 
            grouping: [3, 0]

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
be_veronic
User
Beiträge: 16
Registriert: Mittwoch 19. Januar 2005, 23:30

Danke für Ihre Antworten. Das Problem ist dass ich folgende Skript an einem deutsch sprachige OS ausführen möchte:

Code: Alles auswählen

import win32pdh
   object = 'Process'
   items, instances = win32pdh.EnumObjectItems(None, None, object, 
                                               win32pdh.PERF_DETAIL_WIZARD)
   instance_dict = {}
   for instance in instances:
      try:
         instance_dict[instance] = instance_dict[instance] + 1
      except KeyError:
         instance_dict[instance] = 0
   for instance, max_instances in instance_dict.items():
      for inum in xrange(max_instances+1):
         hq = win32pdh.OpenQuery()
         hcs = []
         for item in ['ID Process', 'Creating Process ID']:
            path = win32pdh.MakeCounterPath((None,object,instance,
                                             None,inum,item))
            hcs.append(win32pdh.AddCounter(hq,path))
         win32pdh.CollectQueryData(hq)
         print "%-15s\t" % (instance[:15]),
         for hc in hcs:
            type,val=win32pdh.GetFormattedCounterValue(hc,win32pdh.PDH_FMT_LONG)
            print "%5d" % (val),
            win32pdh.RemoveCounter(hc)
         print
         win32pdh.CloseQuery(hq)
Wenn ich statt "Process" , "Prozess" eingebe dann läuft es bis AddCounter. Es funktioniert nur wenn ich Systemsteuerung->Ländereinstellungen auf English setze. Aber dass möchte ich nicht manuell sondern in dem Python skript machen.
Danke im voraus.

Edit (Leonidas): Code in Python-Tags gesetzt, aber einrücken werde ich nicht.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

be_veronic hat geschrieben:Es funktioniert nur wenn ich Systemsteuerung->Ländereinstellungen auf English setze. Aber dass möchte ich nicht manuell sondern in dem Python skript machen.
Ich denke nicht, das es aus Python einfach geht. Und macht es überhaupt Sinn?

Was sagt denn locale.getdefaultlocale() ??? Kannst du da nicht sowas machen wie:

Code: Alles auswählen

if locale.getdefaultlocale()[0] == "de_DE":
    object = 'Prozess'
else:
    object = 'Process'
Besser vielleicht du probierst es einfach mit 'Prozess' und wenn das nicht klappt probierst du 'Process'...

Natürlich funktionieren beide Geschichten nur auf einem deutschen und englischen Windows...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
be_veronic
User
Beiträge: 16
Registriert: Mittwoch 19. Januar 2005, 23:30

Hi jens,

Obwohl ich statt Process Prozess eingebe, ich bekomme noch folgende Fehlermeldung. Es läuft alles nur wenn ich als Ländereinstellung English wähle, locale.setlocale(locale.LC_ALL,'en') reichts leider nicht.

Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "C:\Python24\lib\site-packages\enum.py", line 25, in ?
hcs.append(win32pdh.AddCounter(hq , path))
error: (-1073738823, 'AddCounter', 'No error message is available')
BlackJack

Wenn ich das jetzt richtig verstehe willst Du nicht die Einstellung des/Deines Python Programms ändern sondern die eines anderen bzw. des Betriebssystems. Dann ist das `locale` Modul die falsche Baustelle.
be_veronic
User
Beiträge: 16
Registriert: Mittwoch 19. Januar 2005, 23:30

Hi BlackJack,

Die Einstellungen des Betriebsystems will ich ändern, geht dass mit Python, und weisst du wie?
Danke.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Nur, ich möchte nur nochmal zu bedenken geben, das es IMHO nicht der richtig Weg ist, die Betriebssystem locales zu verstellen, nur damit du an die Daten rankommst :roll:

Das muß irgendwie auch anders gehen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten