gpt4 book ai didi

python - 设置 Python 语言环境不起作用

转载 作者:太空狗 更新时间:2023-10-29 21:45:47 25 4
gpt4 key购买 nike

所以我一直在尝试设置 Python 语言环境。我想这样做是因为我想使用本地语言的工作日名称(使用 strftime('%A'))。但是目前工作日是用英文打印的,尽管我尝试了几种设置语言环境的方法。我在带有 Ubuntu Mate 的 RPi2 上运行它。

我已经尝试过本主题中的解决方案 What is the correct way to set Python's locale on Windows?

我尝试将语言环境显式设置为 nl_NL.utf8:

$> locale -a
$> python3
>>> import locale
>>> locale.setlocale(locale.LC_ALL,'nl_NL.utf-8')

我还尝试设置一个空字符串,这是最后一个答案中的建议:

>>> locale.setlocale(locale.LC_ALL, '')

在我尝试的两种情况下

>>> locale.getlocale()

我看到 nl_NL.utf8

但我仍然得到英文的工作日!除了上述主题外,在 internetz 上找不到太多关于此的信息,我无法解决此问题。


编辑:

我已经尝试了所有 3 个选项。第一个返回奇怪的结果:

~/Documenten$ python3
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getlocale(locale.LC_TIME)
(None, None)
>>> locale.setlocale(locale.LC_TIME, 'nl_NL.utf-8')
'nl_NL.utf-8'
>>> locale.getlocale(locale.LC_TIME)
('nl_NL', 'UTF-8')
>>> exit()
jeffrey@jeffrey-desktop:~/Documenten$ python3
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getlocale(locale.LC_TIME)
(None, None)

好像什么都没有保存。假设您设置一次语言环境然后系统会记住它,我错了吗?第二个选项:

~/Documenten$ python3
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import calendar
>>> calendar.day_name[2]
'Wednesday'
>>> import locale
>>> locale.nl_langinfo(locale.DAY_2)
'Monday'

尽管我试图获得一个荷兰语工作日名称,但我仍然得到一个英文名称作为返回。除此之外,此方法从星期日而不是星期一开始计数。我做错了什么吗?第三个建议让我得到了我的工作日名称,谢谢!但我仍然想知道为什么第一个不起作用?我在自己的设备上使用此脚本,并希望使用正确的全局语言环境。


编辑2:

yes, calling locale.setlocale() in Python does not affect future python processes. Configure environment variables instead, see How to set all locale settings in Ubuntu.

好的!所以这就是它不起作用的原因。我假设我已经设置了语言环境以供将来在 Python 中使用,例如环境变量,但仅适用于 Python。

我有一个创建文件的 bash 脚本,这个 Python 脚本应该会在一段时间后删除它(学习编码,我在编写 Bash 脚本时不知道 Python)。 Bash 的“日期”方法似乎以某种方式选择语言环境。我会继续看看我可以为 Python 修复什么。这是我在键入 $ locale 时看到的内容:

LANG=nl_NL.UTF-8
LANGUAGE=nl:en
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"
LC_ALL=

最佳答案

It seems like nothing is saved. Am I wrong in assuming you set your locale once and then the system will remember this

是的,在 Python 中调用 locale.setlocale() 不会影响 future 的 python 进程。请改为配置环境变量,请参阅 How to set all locale settings in Ubuntu .

Bash's "date" method seems to pick up the locale some way or the other.

date 在开始时调用 setlocale(LC_ALL, "") 即,您需要 call setlocale() at least once per process to enable $LANG locale instead of C locale .


setlocale(LC_ALL, '') 首先根据 $LANG 变量设置语言环境,而不是 $LANGUAGE (它是相关但不同的: "The GNU gettext search path contains 'LC_ALL', 'LC_CTYPE', 'LANG' and 'LANGUAGE', in that order." ).

设置 LC_TIME 类别就足够了(在 Ubuntu 上):

>>> import locale
>>> import time
>>> time.strftime('%A')
'Tuesday'
>>> locale.getlocale(locale.LC_TIME)
('en_US', 'UTF-8')
>>> locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')
'ru_RU.UTF-8'
>>> time.strftime('%A')
'Вторник'
>>> locale.getlocale(locale.LC_TIME)
('ru_RU', 'UTF-8')

如果 setlocale() 没有引发 locale.Error: unsupported locale setting 则相应的区域设置类别设置成功。

您还可以在知道其位置的情况下获取工作日名称(在更改语言环境的同一 python session 中):

>>> import calendar
>>> calendar.day_name[1]
'Вторник'
>>> locale.nl_langinfo(locale.DAY_3)
'Вторник'

在不修改全局状态的情况下在给定语言环境中打印工作日的可移植方式是 use babel module :

>>> from datetime import date
>>> from babel.dates import format_date # $ pip install babel
>>> format_date(date.today(), format='EEEE', locale='en')
'Tuesday'
>>> format_date(date.today(), format='EEEE', locale='ru')
'вторник'
>>> format_date(date.today(), format='EEEE', locale='nl')
'dinsdag'

关于python - 设置 Python 语言环境不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34598597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com