生产环境与开发环境

生产环境与开发环境的区别

概述

gt-next 会根据你的 Next.js 应用运行的环境表现出不同的行为。

它通过检查 NODE_ENV 环境变量来检测当前环境。

生产环境行为

环境变量

在生产环境中,gt-next 只会读取 GT_PROJECT_IDGT_API_KEY 环境变量。

API Key 必须是生产环境的 API Key,并且以 gtx-api- 开头。

如果你使用的是开发环境的 API Key,gt-next 会抛出错误。

翻译加载行为

在生产环境中,gt-next 默认会尝试从 General Translation CDN 加载翻译内容。

如果你通过 loadTranslations 函数配置了自定义的翻译加载行为(如本地翻译),gt-next 会优先使用你的配置。

由于处于生产环境,翻译热重载已被禁用。

对于动态内容,使用 <Tx> 组件或 tx() 函数的按需翻译功能已启用,但仅限于服务端组件中使用。

开发行为

环境变量

gt-next 将接受 GT_PROJECT_IDGT_API_KEY 环境变量。

API 密钥可以是以 gtx-api- 开头的生产 API 密钥,或者是以 gtx-dev- 开头的开发 API 密钥。

如果在开发环境中提供了生产 API 密钥,gt-next 将表现得就像您在生产环境中一样。 这意味着翻译热重载将被禁用,没有翻译的组件将渲染原始内容。

翻译加载行为

在开发环境中,gt-next 将首先尝试以与生产环境相同的方式加载翻译。 这些翻译被加载到内存中。

当渲染一个组件(使用 useGT()<T>useTranslations())为非默认语言时,gt-next 将执行以下操作:

  1. 如果它检测到给定内容的有效存储翻译,它将渲染该翻译。
  2. 如果没有找到翻译,它将尝试通过 General Translation API 动态翻译内容。
  3. 翻译后,翻译将被渲染,并存储在内存中供将来使用。
  4. 如果翻译超时,它将回退并渲染原始内容。

我们的 API 还会在内部缓存开发翻译一段时间,因此如果再次请求相同的翻译,它将从缓存中提供。

这些翻译在项目级别是隔离的,因此不会与其他项目的翻译混淆。 此外,缓存对开发会话是唯一的,因此缓存的翻译不会在生产环境中使用。

gt-next 将检测使用 useGT()<T>useTranslations() 的组件的更改,并将通过我们的 API 动态翻译修改的内容。

生产环境与开发环境 API 密钥

为了帮助区分 gt-next 在生产环境和开发环境下的行为,我们引入了“生产环境 API 密钥”和“开发环境 API 密钥”的概念。

生产环境 API 密钥

生产环境 API 密钥是以 gtx-api- 开头的 API 密钥。

当提供生产环境 API 密钥时,gt-next 会按照生产环境行为部分所述进行操作。

这意味着,如果你在开发模式下运行 Next.js 应用,并且提供了生产环境 API 密钥,gt-next 会像在生产环境下一样运行。 翻译的热重载将被禁用,没有翻译的组件会渲染原始内容。

除此之外,gt-next 不会以其他方式使用生产环境 API 密钥。

CLI 工具会读取 GT_API_KEY 环境变量,并且只接受生产环境 API 密钥。

CLI 工具会使用“production”类别来应用计费和速率限制。

开发环境 API 密钥

开发环境 API 密钥是以 gtx-dev- 开头的 API 密钥。

当提供开发环境 API 密钥时,gt-next 会按照开发环境行为部分所述进行操作。

使用开发环境 API 密钥时,计费和速率限制将按照“development”类别进行。

使用开发环境 API 密钥创建的翻译不会被存储,也无法在生产环境中使用。

开发环境翻译的目的是让你在发布到生产环境之前测试你的应用。

这份指南怎么样?