如何(在GNU / Linux系统上)找到所有可用的语言环境与模块locale
一起使用?
我发现模块中唯一与之接近的是字典locale_alias
,带有区域设置的别名。
有时提到这是在哪里可以看到您所拥有的语言环境,但是它并不包含所有别名。在我的系统上,该程序
#! /usr/bin/python3
import locale
for k, v in sorted(locale.locale_alias.items()):
if k.startswith('fr_') or v.startswith('fr_'):
print('{:20}{}'.format(k, v))
打印
c-french fr_CA.ISO8859-1
fr fr_FR.ISO8859-1
fr_be fr_BE.ISO8859-1
fr_ca fr_CA.ISO8859-1
fr_ch fr_CH.ISO8859-1
fr_fr fr_FR.ISO8859-1
fr_lu fr_LU.ISO8859-1
français fr_FR.ISO8859-1
fre_fr fr_FR.ISO8859-1
french fr_FR.ISO8859-1
french.iso88591 fr_CH.ISO8859-1
french_france fr_FR.ISO8859-1
忽略所有utf-8语言环境,例如'fr_FR.utf8'
,这些语言环境实际上可以用作locale.setlocale
的参数。 locale -a | grep "^fr_.*utf8"
从外壳中给出
fr_BE.utf8
fr_CA.utf8
fr_CH.utf8
fr_FR.utf8
fr_LU.utf8
显示很多选项。 (当然,有一种方法可以从Python运行此Shell命令,但我认为有一种方法可以直接从Python执行此操作。)
答案 0 :(得分:0)
似乎没有直接从Python直接执行此操作的好方法,因此我将回答如何从Python运行此shell命令。
#! /usr/bin/python3
import subprocess
def find_locales():
out = subprocess.run(['locale', '-a'], stdout=subprocess.PIPE).stdout
try:
# Even though I use utf8 on my system output from "locale -a"
# included "bokmål" in Latin-1. Then this won't work, but the
# exception will.
res = out.decode('utf-8')
except:
res = out.decode('latin-1')
return res.rstrip('\n').splitlines()
if __name__ == "__main__":
for loc in find_locales():
print(loc)
请注意,subprocess.run
是Python 3.5中的新增功能。对于早期的Python版本,see this question介绍了运行Shell命令的替代方法。