I have a python program (jrnl) that should print the day of the week as text in German. However, it always prints the English name.
Here is the output of locale
:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
You can see that LC_TIME
is set to de_DE.UTF-8
. But when I start python this locale is not set:
>>> import locale
>>> locale.getlocale(locale.LC_TIME)
(None, None)
So my week day is shown in English:
>>> from time import gmtime, strftime
>>> strftime("%A, %d %b %Y %H:%M:%S +0000", gmtime())
'Monday, 15 Jan 2018 20:22:30 +0000'
What do I have to do for python to use the system locale?
From the locale
module background documentation:
Initially, when a program is started, the locale is the
C
locale, no matter what the user’s preferred locale is.
You need to explicitly set the locale using locale.setlocale()
; use the empty string to indicate that the user configuration needs to be used:
locale.setlocale(locale.LC_TIME, '')
This is standard behaviour; the underlying C-level locale system explicitly starts in the C
locale regardless of environment variables, as you can't assume that the current program actually wants or needs to honour user settings.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With