# General Translation Python SDKs: I18nManager
URL: https://generaltranslation.com/zh/docs/python/reference/classes/i18n-manager.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: General Translation Python 中负责管理区域设置、翻译加载和缓存的核心协调器。I18nManager 的 API 参考。

该核心对象负责保存区域设置配置、加载并缓存翻译，以及跟踪当前请求的区域设置。[`initialize_gt`](/docs/python/reference/functions/initialize-gt) 会为你创建一个；在核心 `gt-i18n` 库 中，你可以直接构造它，并使用 [`set_i18n_manager`](/docs/python/reference/functions/set-i18n-manager) 注册。

## 概览 [#overview]

使用仅限关键字参数来构造 `I18nManager`，然后将其注册为当前活动的管理器。所有翻译函数都会从该已注册的管理器中读取。

```python
from gt_i18n import I18nManager, set_i18n_manager

manager = I18nManager(default_locale="en", locales=["es", "fr"])
set_i18n_manager(manager)
```

签名：

```python
I18nManager(
    *,
    default_locale: str = "en",
    locales: list[str] | None = None,
    project_id: str | None = None,
    cache_url: str | None = None,
    custom_mapping: CustomMapping | None = None,
    store_adapter: StorageAdapter | None = None,
    load_translations: TranslationsLoader | None = None,
    cache_expiry_time: int = 60_000,
    version_id: str | None = None,
)
```

从 `gt_i18n` 导入 `I18nManager`。框架包不会再次导出它。

## 工作原理 [#how-it-works]

* **区域设置集合。** 默认区域设置始终会合并到 `locales` 中，因此管理器的区域设置集合始终会包含它。
* **加载器选择。** 如果提供了 `load_translations`，则使用它；否则，如果设置了 `project_id`，则会为 `{cache_url}/{project_id}/{locale}` 创建一个 CDN 加载器；再否则，则使用一个不执行任何操作并返回空 dict 的加载器。
* **缓存。** 已加载的翻译会按区域设置缓存 `cache_expiry_time` 毫秒。`get_translations` 会按需加载 (异步) ；`get_translations_sync` 只读取缓存，且绝不会阻塞。
* **区域设置存储。** 当前区域设置通过 `store_adapter` 存储 (默认为 [`ContextVarStorageAdapter`](/docs/python/reference/classes/context-var-storage-adapter)) ，它会在线程和异步上下文中按请求隔离该值。

## 构造函数参数 [#parameters]

| 参数                                        | 描述                    | 类型                                                                         | 可选 | 默认值                                                                                      |
| ----------------------------------------- | --------------------- | -------------------------------------------------------------------------- | -- | ---------------------------------------------------------------------------------------- |
| [`default_locale`](#default-locale)       | 源区域设置和后备区域设置。         | `str`                                                                      | 是  | `"en"`                                                                                   |
| [`locales`](#locales)                     | 应用支持的目标区域设置。          | `list[str]`                                                                | 是  | `None`                                                                                   |
| [`project_id`](#project-id)               | 项目 ID；设置后会启用 CDN 加载器。 | `str`                                                                      | 是  | `None`                                                                                   |
| [`cache_url`](#cache-url)                 | CDN 基础 URL。           | `str`                                                                      | 是  | `None`                                                                                   |
| [`custom_mapping`](#custom-mapping)       | 自定义区域设置代码和属性覆盖项。      | [`CustomMapping`](/docs/platform/core/reference/types/custom-mapping)      | 是  | `None`                                                                                   |
| [`store_adapter`](#store-adapter)         | 用于请求区域设置的自定义存储适配器。    | [`StorageAdapter`](/docs/python/reference/classes/storage-adapter)         | 是  | [`ContextVarStorageAdapter`](/docs/python/reference/classes/context-var-storage-adapter) |
| [`load_translations`](#load-translations) | 自定义加载器；会覆盖 CDN 加载器。   | [`TranslationsLoader`](/docs/python/reference/classes/translations-loader) | 是  | `None`                                                                                   |
| [`cache_expiry_time`](#cache-expiry)      | 缓存有效期 (以毫秒为单位) 。      | `int`                                                                      | 是  | `60000`                                                                                  |
| [`version_id`](#version-id)               | 已固定的翻译版本。             | `str`                                                                      | 是  | `None`                                                                                   |

### `default_locale` [#default-locale]

**类型** `str` · **可选** · **默认值** `"en"`

源区域设置和后备区域设置。默认使用库的默认值 `"en"` (`LIBRARY_DEFAULT_LOCALE`) 。

### `locales` [#locales]

**类型** `list[str]` · **可选** · **默认值** `None`

应用程序支持的目标区域设置。默认区域设置始终会添加到其中。

### `project_id` [#project-id]

**类型** `str` · **可选** · **默认值** `None`

General Translation 的项目 ID。设置后，如果未提供 `load_translations`，管理器会创建一个 CDN 加载器。

### `cache_url` [#cache-url]

**Type** `str` · **可选** · **默认值** `None`

远程加载器使用的 CDN 基础 URL。General Translation 的 CDN 为 `https://cdn.gtx.dev`。

### `custom_mapping` [#custom-mapping]

**类型** [`CustomMapping`](/docs/platform/core/reference/types/custom-mapping) · **可选** · **默认值** `None`

自定义区域设置代码和属性覆盖项，并会传递给底层的 [`GT`](/docs/platform/core/reference/gt-class/constructor) 实例。

### `store_adapter` [#store-adapter]

**类型** [`StorageAdapter`](/docs/python/reference/classes/storage-adapter) · **可选** · **默认值** [`ContextVarStorageAdapter`](/docs/python/reference/classes/context-var-storage-adapter)

用于存储请求级区域设置状态的适配器。默认为 [`ContextVarStorageAdapter`](/docs/python/reference/classes/context-var-storage-adapter)。

### `load_translations` [#load-translations]

**类型** [`TranslationsLoader`](/docs/python/reference/classes/translations-loader) · **可选** · **默认值** `None`

用于返回某个区域设置翻译内容的自定义加载器。提供后将覆盖 CDN 加载器。

### `cache_expiry_time` [#cache-expiry]

**类型** `int` · **可选** · **默认值** `60000`

缓存有效期，以毫秒为单位 (默认值为 60000，即 60 秒) 。一旦某个条目超过这个时长，就会被视为已过期：异步 `get_translations` 会在下一次调用时重新加载它，但 `get_translations_sync`——即 [`t`](/docs/python/reference/functions/t) 使用的方法——对于已过期的条目会返回空 `dict`，并且**不会**触发重新加载。由于请求路径会同步读取翻译，而应用启动后也不会再次运行异步加载器，因此过期的翻译不会自动重新加载，[`t`](/docs/python/reference/functions/t) 会回退到源 strings，直到 `load_all_translations` (或 `get_translations`) 再次运行。[`initialize_gt`](/docs/python/reference/functions/initialize-gt) 不提供这个参数，因此框架应用无法修改这个 60 秒的时间窗口。

### `version_id` [#version-id]

**类型** `str` · **可选** · **默认值** `None`

已固定的翻译版本，由 [`get_version_id`](/docs/python/reference/functions/get-version-id) 返回。

## 属性和方法 [#members]

| 成员                                             | 说明                      | 返回值              |
| ---------------------------------------------- | ----------------------- | ---------------- |
| [`default_locale`](#member-default-locale)     | 源/默认区域设置 (属性) 。         | `str`            |
| [`get_locale`](#member-get-locale)             | 当前请求的区域设置，如果没有则返回默认值。   | `str`            |
| [`set_locale`](#member-set-locale)             | 设置当前请求的区域设置。            | `None`           |
| [`get_locales`](#member-get-locales)           | 支持的区域设置列表。              | `list[str]`      |
| [`get_version_id`](#member-version-id)         | 已配置的版本 ID，或 `None`。     | `str \| None`    |
| [`requires_translation`](#member-requires)     | 某个区域设置是否需要从默认区域设置翻译而来。  | `bool`           |
| [`get_translations`](#member-get-translations) | 加载 (异步) 并缓存某个区域设置的翻译内容。 | `dict[str, str]` |
| [`get_translations_sync`](#member-get-sync)    | 在不阻塞的情况下读取缓存的翻译内容。      | `dict[str, str]` |
| [`load_all_translations`](#member-load-all)    | 预先加载所有已配置的区域设置 (异步) 。   | `None`           |
| [`get_gt_instance`](#member-gt-instance)       | 为当前请求构建一个 `GT` 实例。      | `GT`             |

### `default_locale` [#member-default-locale]

一个只读属性，返回源/默认区域设置。

### `get_locale()` [#member-get-locale]

返回存储适配器中的当前请求区域设置；如果无法获取，则回退到默认区域设置。

### `set_locale(locale)` [#member-set-locale]

将当前请求的区域设置写入存储适配器中。

### `get_locales()` [#member-get-locales]

返回支持的区域设置列表副本 (始终包含默认区域设置) 。

### `get_version_id()` [#member-version-id]

返回已配置的版本 id，或 `None`。

### `requires_translation(locale=None)` [#member-requires]

返回 `locale` (或当前区域设置) 相对于默认值是否需要翻译，并根据已配置的 locales 进行判断。

### `get_translations(locale=None)` [#member-get-translations]

一个异步方法，用于加载并缓存 `locale` (或当前区域设置) 的翻译内容，会去重并发加载请求，并在出错时返回空 dict。

### `get_translations_sync(locale=None)` [#member-get-sync]

以非阻塞方式返回 `locale` (或当前区域设置) 的缓存翻译；如果没有任何缓存内容 (或缓存已过期) ，则返回空的 dict。[`t`](/docs/python/reference/functions/t) 读取的就是这些内容。

### `load_all_translations()` [#member-load-all]

一种异步方法，会预先加载所有已配置区域设置的翻译。

### `get_gt_instance()` [#member-gt-instance]

返回一个 `GT` 实例，其配置包含管理器的项目 ID、源区域设置、当前目标区域设置、locales 以及自定义映射。

## 示例 [#example]

```python
import asyncio
from gt_i18n import I18nManager, set_i18n_manager, t

def load_translations(locale: str) -> dict[str, str]:
    return {}  # 从您自己的数据源加载

manager = I18nManager(default_locale="en", locales=["es"], load_translations=load_translations)
set_i18n_manager(manager)

asyncio.run(manager.load_all_translations())  # 预加载
manager.set_locale("es")
t("Hello, world!")
```

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
