非常教程

Python参考手册

国际化 | Internationalization

locale

locale模块打开对POSIX语言环境数据库和功能的访问。POSIX语言环境机制允许程序员处理应用程序中的某些文化问题,而不需要程序员知道执行该软件的每个国家的所有具体情况。

locale模块在_locale模块的顶部实现,如果可用,该模块又使用ANSI C语言环境实现。

locale模块定义了以下异常和功能:

exception locale.Error

当传递的区域设置setlocale()无法识别时引发异常。

locale.setlocale(category[, locale])

如果区域设置是给定的而不是None,则setlocale()修改该类别的区域设置。可用的类别在下面的数据描述中列出。语言环境可以是字符串,也可以是两个字符串(语言代码和编码)的迭代。如果它是可迭代的,则使用区域别名引擎将其转换为区域设置名称。一个空字符串指定用户的默认设置。如果区域设置的修改失败,Error则会引发异常。如果成功,则返回新的区域设置。

如果区域设置被省略None,则返回类别的当前设置。

setlocale()在大多数系统上不是线程安全的。应用程序通常以呼叫开始

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

这将所有类别的区域设置设置为用户的默认设置(通常在LANG环境变量中指定)。如果此后区域设置未更改,则使用多线程不应导致问题。

版本2.0中更改:增加了对区域设置参数的可迭代值的支持。

locale.localeconv()

以字典形式返回本地约定的数据库。该字典具有以下字符串作为键:

类别

含义

LC_NUMERIC

'小数点'

小数点字符。

“分组”

数字序列指定'thousand_sep'预期的相对位置。如果序列以CHAR_MAX结束,则不会执行进一步的分组。如果序列以0结尾,则重复使用最后一个组的大小。

'thousands_sep'

组间使用的字符。

LC_MONETARY

'int_curr_symbol的'

国际货币符号。

'CURRENCY_SYMBOL'

当地的货币符号。

'p_cs_precedes / n_cs_precedes'

货币符号是否在价值之前(对于正值和负值)。

'p_sep_by_space / n_sep_by_space'

货币符号是否与空格分开(对于正值和负值)。

'mon_decimal_point'

用于货币价值的小数点。

'frac_digits'

货币值局部格式化中使用的小数位数。

'int_frac_digits'

货币价值的国际格式化中使用的小数位数。

'mon_thousands_sep'

用于货币值的组分隔符。

'mon_grouping'

相当于“分组”,用于货币价值。

'positive_sign'

用于注释正货币价值的符号。

'negative_sign'

用于注释负面货币价值的符号。

'p_sign_posn / n_sign_posn'

符号的位置(对于正值和负值),见下文。

可以将所有数值设置为CHAR_MAX指示在此语言环境中没有指定值。

对于可能的值'p_sign_posn',并'n_sign_posn'在下面给出。

说明

0

货币和价值被圆括号包围。

1

该符号应该在值和货币符号之前。

2

标志应该遵循价值和货币符号。

3

该符号应该立即在值的前面。

4

该标志应该立即跟随该值。

CHAR_MAX

此区域设置中未指定任何内容。

locale.nl_langinfo(option)

以字符串形式返回一些特定于区域的信息。此功能在所有系统上都不可用,并且可能的选项集也可能因平台而异。可能的参数值是数字,区域设置模块中的符号常量可用。

nl_langinfo()功能接受下列其中一个键。大多数描述取自GNU C库中的相应描述。

locale.CODESET

获取具有所选语言环境中使用的字符编码名称的字符串。

locale.D_T_FMT

获取可用作格式字符串的字符串,以便time.strftime()以特定于语言环境的方式表示日期和时间。

locale.D_FMT

获取可用作格式字符串的字符串,以便time.strftime()以特定于语言环境的方式表示日期。

locale.T_FMT

获取可用作格式字符串的字符串,以便time.strftime()以特定于语言环境的方式表示时间。

locale.T_FMT_AMPM

获取格式字符串time.strftime()以表示am / pm格式的时间。

DAY_1 ... DAY_7

获取一周中第n天的名称。

Note

这遵循美国的DAY_1星期日惯例,而不是国际惯例(ISO 8601),星期一是本周的第一天。

ABDAY_1 ... ABDAY_7

获取一周中第n天的缩写名称。

MON_1 ... MON_12

获取第n个月的名称。

ABMON_1 ... ABMON_12

获取第n个月的缩写名称。

locale.RADIXCHAR

获取基数字符(小数点,小数点逗号等)。

locale.THOUSEP

获取数千个分隔符(三位数组)。

locale.YESEXPR

获取可用于正则表达式的正则表达式,以识别对是/否问题的肯定回答。

注意

该表达式的语法适合regex()C库中的函数,这可能与使用的语法不同re

locale.NOEXPR

获取可用于正则表达式(3)的正则表达式来识别对“是/否”问题的否定响应。

locale.CRNCYSTR

获取货币符号,前面加上“ - ”(如果符号应该出现在值前面),“+”如果符号出现在值后面,或者“。”如果符号应该代替基数字符。

locale.ERA

获取表示当前语言环境中使用的时代的字符串。

大多数语言环境不定义此值。确定这个值的区域设置的一个例子是日本的。在日本,日期的传统表示包括与当时的皇帝统治相对应的时代的名称。

通常不需要直接使用该值。E在其格式字符串中指定修饰符会导致time.strftime()函数使用此信息。没有指定返回字符串的格式,因此您不应该在不同系统上假设它的知识。

locale.ERA_D_T_FMT

获取格式字符串,以便time.strftime()以特定于语言环境的基于时代的方式表示日期和时间。

locale.ERA_D_FMT

获取一个格式字符串,以便time.strftime()以特定于语言环境的基于时代的方式表示日期。

locale.ERA_T_FMT

获取一个格式字符串,以便time.strftime()以特定于语言环境的时代为基础表示时间。

locale.ALT_DIGITS

获取最多100个用于表示值0到99的值的表示。

locale.getdefaultlocale([envvars])

尝试确定默认的区域设置并将它们作为表单的元组返回(language code, encoding)

根据POSIX,一个未setlocale(LC_ALL, '')使用便携式'C'语言环境调用运行的程序。调用setlocale(LC_ALL, '')让它使用由LANG变量定义的默认语言环境。由于我们不想干扰当前的区域设置,因此我们以上述方式模拟了行为。

为了保持与其他平台的兼容性,不仅LANG变量被测试,而且变量列表作为envvars参数给出。第一个被定义的将被使用。envvars默认使用GNU gettext中使用的搜索路径; 它必须始终包含变量名称LANG。GNU的gettext的搜索路径包括'LANGUAGE''LC_ALL''LC_CTYPE',和'LANG',在这个顺序。

除代码外'C',语言代码对应于RFC 1766语言代码编码可能是None如果他们的值不能确定。

2.0版本中的新功能。

locale.getlocale([category])

将给定语言环境类别的当前设置作为包含语言代码编码)的序列返回。类别可能是其中的一个LC_*LC_ALL。它默认为LC_CTYPE

除代码外'C',语言代码对应于RFC 1766语言代码编码可能是None如果他们的值不能确定。

2.0版本中的新功能。

locale.getpreferredencoding([do_setlocale])

根据用户首选项返回用于文本数据的编码。用户首选项在不同的系统上表达方式不同,并且可能在某些系统上以编程方式不可用,所以此函数仅返回猜测。

在某些系统上,需要调用setlocale()以获取用户首选项,所以此函数不是线程安全的。如果调用setlocale不是必需或不需要的,应该将do_setlocale设置为False

2.3版本的新功能。

locale.normalize(localename)

返回给定语言环境名称的规范化语言环境代码。返回的区域设置代码被格式化以供使用setlocale()。如果规范化失败,则原始名称将保持不变。

如果给定的编码未知,则该函数默认为区域设置代码的默认编码setlocale()

2.0版本中的新功能。

locale.resetlocale([category])

类别的区域设置设置为默认设置。

默认设置由调用确定getdefaultlocale()类别默认为LC_ALL

2.0版本中的新功能。

locale.strcoll(string1, string2)

根据当前LC_COLLATE设置比较两个字符串。与其他任何比较函数一样,返回一个负值或一个正值,或者0根据string1string2之前或之后进行整理还是等于它。

locale.strxfrm(string)

将字符串转换为可用于内置函数的字符串cmp(),并且仍返回可识别语言环境的结果。当重复比较相同的字符串时可以使用此函数,例如,在整理一系列字符串时。

locale.format(format, val[, grouping[, monetary]])

格式化的数VAL根据当前LC_NUMERIC设置。格式遵循%运营商的惯例。对于浮点值,小数点在适当的情况下被修改。如果分组是真的,也将分组考虑在内。

如果货币为真,则转换使用货币千位分隔符和分组字符串。

请注意,该函数仅适用于一个%char说明符。对于整个格式字符串,请使用format_string()

版本2.5中更改:添加货币参数。

locale.format_string(format, val[, grouping])

如过程中那样处理格式化说明符format % val,但会考虑当前的语言环境设置。

2.5版本中的新功能。

locale.currency(val[, symbol[, grouping[, international]]])

将数字格式VAL根据当前LC_MONETARY设置。

如果符号为true,则返回的字符串包含货币符号,这是默认值。如果分组为真(这不是默认值),则使用该值完成分组。如果国际是真的(这不是默认),则使用国际货币符号。

请注意,此功能不适用于'C'语言环境,因此您必须首先设置语言环境setlocale()

2.5版本中的新功能。

locale.str(float)

使用与内置函数相同的格式格式化浮点数str(float),但考虑小数点。

locale.atof(string)

按照LC_NUMERIC设置将字符串转换为浮点数。

locale.atoi(string)

按照LC_NUMERIC约定将字符串转换为整数。

locale.LC_CTYPE

用于字符类型函数的语言环境类别。根据这个类别的设置,模块string处理大小写的功能会改变它们的行为。

locale.LC_COLLATE

语言环境类别用于排序字符串。功能strcoll()strxfrm()对的locale模块受到影响。

locale.LC_TIME

区域设置类别用于格式化时间。该功能time.strftime()遵循这些惯例。

locale.LC_MONETARY

用于格式化货币值的区域设置类别。可用的选项可从该localeconv()功能获得。

locale.LC_MESSAGES

用于消息显示的区域设置类别。Python目前不支持应用程序特定的区域识别消息。操作系统显示的消息(如返回的消息)os.strerror()可能会受此类别的影响。

locale.LC_NUMERIC

用于格式化数字的区域设置类别。功能format()atoi()atof()str()的的locale模块是由类的影响。所有其他数字格式化操作不受影响。

locale.LC_ALL

所有区域设置的组合。如果在区域设置更改时使用此标志,则尝试设置所有类别的区域设置。如果任何类别都失败,则根本不会更改类别。使用此标志检索区域设置时,会返回指示所有类别设置的字符串。该字符串可以稍后用于恢复设置。

locale.CHAR_MAX

这是一个用于返回的不同值的符号常量localeconv()

例:

>>> import locale
>>> loc = locale.getlocale()  # get current locale
# use German locale; name might vary with platform
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
>>> locale.strcoll('f\xe4n', 'foo')  # compare a string containing an umlaut
>>> locale.setlocale(locale.LC_ALL, '')   # use user's preferred locale
>>> locale.setlocale(locale.LC_ALL, 'C')  # use default (C) locale
>>> locale.setlocale(locale.LC_ALL, loc)  # restore saved locale

1.背景,细节,提示,提示和警告

C标准将语言环境定义为程序范围的属性,可能相对较昂贵地进行更改。最重要的是,一些实现被破坏,频繁的区域设置更改可能会导致核心转储。这使得语言环境使用起来有点痛苦。

最初,当程序启动时,语言环境是C语言环境,而不管用户的首选语言环境是什么。该程序必须明确表示它希望通过调用用户的首选区域设置setlocale(LC_ALL, '')

调用setlocale()一些库函数通常是一个坏主意,因为它会影响整个程序的副作用。保存和恢复它几乎同样糟糕:它是昂贵的并且会影响在设置恢复之前碰巧运行的其他线程。

如果在为一般用途编码模块时,您需要受区域设置影响的区域设置独立版本(例如string.lower(),或与其一起使用的特定格式time.strftime()),您必须找到一种方法来执行此操作,而不使用标准库例程。更好的是让自己确信使用区域设置是可以的。只有作为最后的手段,你应该证明你的模块与非C本地设置不兼容。

string模块中的大小写转换功能受到语言环境设置的影响。当在一个呼叫setlocale()功能改变LC_CTYPE设置,变量string.lowercasestring.uppercasestring.letters重新计算。请注意,通过' from... import...' 使用这些变量的代码from string import letters不受后续setlocale()调用的影响。

只有这样,才能根据现场执行数字运算是使用由该模块定义的特殊功能:atof()atoi()format()str()

2.对于嵌入Python的扩展编写器和程序

扩展模块不应该调用setlocale(),除非找出当前语言环境。但是由于返回值只能用于便携式恢复它,这不是非常有用(除了可能找出区域是否是C)。

当Python代码使用locale模块更改语言环境时,这也会影响嵌入应用程序。如果嵌入式应用程序不希望发生这种情况,它应该_localeconfig.c文件中的内置模块表中删除扩展模块(完成所有工作),并确保该_locale模块不能作为共享库访问。

3.访问消息目录

locale模块在提供此接口的系统上公开C库的gettext接口。它包括的功能gettext()dgettext()dcgettext()textdomain()bindtextdomain(),和bind_textdomain_codeset()。它们与gettext模块中的相同功能类似,但使用C库的二进制格式用于消息目录,以及C库的搜索算法用于查找消息目录。

Python应用程序通常不需要调用这些函数,而应该使用它gettext。一种已知的例外是用另外的C库在内部调用链接的应用程序gettext()dcgettext()。对于这些应用程序,可能需要绑定文本域,以便这些库可以正确定位其消息目录。

国际化 | Internationalization相关

Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法