一般支持功能

巴别塔附带了一些不被巴别塔本身使用,但与它提供的功能相结合很有用的常规帮助器。

便利助手

class babel.support.Format(locale: Locale | str, tzinfo: datetime.tzinfo | None = None, *, numbering_system: Literal['default'] | str = 'latn')

包装类,提供绑定到特定区域和时区的各种日期和数字格式化函数。

>>> from babel.util import UTC
>>> from datetime import date
>>> fmt = Format('en_US', UTC)
>>> fmt.date(date(2007, 4, 1))
u'Apr 1, 2007'
>>> fmt.decimal(1.2345)
u'1.234'
compact_currency(number: float | decimal.Decimal | str, currency: str, format_type: Literal['short'] = 'short', fraction_digits: int = 0) str

使用紧凑数字格式返回按区域设置格式化的以给定货币表示的数字。

>>> Format('en_US').compact_currency(1234567, "USD", format_type='short', fraction_digits=2)
'$1.23M'
compact_decimal(number: float | decimal.Decimal | str, format_type: Literal['short', 'long'] = 'short', fraction_digits: int = 0) str

返回区域设置的紧凑格式的数字。

>>> fmt = Format('en_US')
>>> fmt.compact_decimal(123456789)
u'123M'
>>> fmt.compact_decimal(1234567, format_type='long', fraction_digits=2)
'1.23 million'
currency(number: float | Decimal | str, currency: str) str

返回针对区域设置格式化的给定货币的数字。

date(date: datetime.date | None = None, format: _PredefinedTimeFormat | str = 'medium') str

返回根据给定模式格式化的日期。

>>> from datetime import date
>>> fmt = Format('en_US')
>>> fmt.date(date(2007, 4, 1))
u'Apr 1, 2007'
datetime(datetime: datetime.date | None = None, format: _PredefinedTimeFormat | str = 'medium') str

返回根据给定模式格式化的日期和时间。

>>> from datetime import datetime
>>> from babel.dates import get_timezone
>>> fmt = Format('en_US', tzinfo=get_timezone('US/Eastern'))
>>> fmt.datetime(datetime(2007, 4, 1, 15, 30))
u'Apr 1, 2007, 11:30:00 AM'
decimal(number: float | Decimal | str, format: str | None = None) str

返回针对区域设置格式化的十进制数。

>>> fmt = Format('en_US')
>>> fmt.decimal(1.2345)
u'1.234'
number(number: float | Decimal | str) str

返回针对区域设置格式化的整数。

>>> fmt = Format('en_US')
>>> fmt.number(1099)
u'1,099'
percent(number: float | Decimal | str, format: str | None = None) str

返回区域设置格式为百分比的数字。

>>> fmt = Format('en_US')
>>> fmt.percent(0.34)
u'34%'
scientific(number: float | Decimal | str) str

返回区域设置的使用科学记数法格式化的数字。

time(time: datetime.time | datetime.datetime | None = None, format: _PredefinedTimeFormat | str = 'medium') str

返回根据给定模式格式化的时间。

>>> from datetime import datetime
>>> from babel.dates import get_timezone
>>> fmt = Format('en_US', tzinfo=get_timezone('US/Eastern'))
>>> fmt.time(datetime(2007, 4, 1, 15, 30))
u'11:30:00 AM'
timedelta(delta: datetime.timedelta | int, granularity: Literal['year', 'month', 'week', 'day', 'hour', 'minute', 'second'] = 'second', threshold: float = 0.85, format: Literal['narrow', 'short', 'medium', 'long'] = 'long', add_direction: bool = False) str

根据给定区域设置的规则返回时间增量。

>>> from datetime import timedelta
>>> fmt = Format('en_US')
>>> fmt.timedelta(timedelta(weeks=11))
u'3 months'
class babel.support.LazyProxy(func: Callable[[...], Any], *args: Any, enable_cache: bool = True, **kwargs: Any)

委托给指定函数以计算实际对象的代理对象的。

>>> def greeting(name='world'):
...     return 'Hello, %s!' % name
>>> lazy_greeting = LazyProxy(greeting, name='Joe')
>>> print(lazy_greeting)
Hello, Joe!
>>> u'  ' + lazy_greeting
u'  Hello, Joe!'
>>> u'(%s)' % lazy_greeting
u'(Hello, Joe!)'

例如,这可以用来实现延迟实际翻译直到字符串实际使用的延迟翻译功能。这种行为的基本原理是,用户的区域设置可能并不总是可用的。在Web应用程序中,只有在处理请求时才知道区域设置。

代理实现尝试尽可能完整,以便惰性对象应该基本上按预期工作,例如用于排序:

>>> greetings = [
...     LazyProxy(greeting, 'world'),
...     LazyProxy(greeting, 'Joe'),
...     LazyProxy(greeting, 'universe'),
... ]
>>> greetings.sort()
>>> for greeting in greetings:
...     print(greeting)
Hello, Joe!
Hello, universe!
Hello, world!

Gettext支持

class babel.support.Translations(fp: gettext._TranslationsReader | None = None, domain: str | None = None)

扩展翻译目录类。

add(translations: Translations, merge: bool = True)

将给定的翻译添加到目录中。

如果翻译的域与当前目录的域不同,则会将它们添加为只能由各种用户访问的目录 d*gettext 功能。

参数:
  • translations -- 这个 Translations 实例,其中包含要添加的消息。

  • merge -- 已添加的消息域的转换是否应与现有转换合并

classmethod load(dirname: str | PathLike[str] | None = None, locales: Iterable[str | Locale] | str | Locale | None = None, domain: str | None = None) NullTranslations

从给定目录加载翻译。

参数:
  • dirname -- 包含 MO 文件夹

  • locales -- 按首选顺序排列的区域设置列表(此列表中的项目可以是 Locale 对象或区域设置字符串)

  • domain -- 消息域(默认值:‘Messages’)

merge(translations: Translations)

将给定的翻译合并到目录中。

指定目录中的消息转换将覆盖现有目录中具有相同标识符的任何消息。

参数:

translations -- 这个 Translations 实例,其中包含要合并的消息。