生产环境与开发环境

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

概述

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 key 可以是以 gtx-api- 开头的生产 API key,或以 gtx-dev- 开头的开发 API key。

如果在开发环境中提供了生产 API key,gt-next 将按生产环境运行。 这意味着会禁用翻译的热重载,且未提供翻译的组件将渲染原始内容。

翻译加载行为

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

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

  1. 如果检测到该内容存在有效且已存储的翻译,则直接渲染该翻译。
  2. 如果未找到翻译,则会尝试通过 General Translation API 动态翻译该内容。
  3. 翻译完成后,将渲染该翻译,并将其存入内存以供后续使用。
  4. 如果翻译超时,则会回退并渲染原始内容。

我们的 API 也会在内部对开发环境的翻译进行短期缓存,因此如果再次请求相同的翻译,将会直接从缓存返回。

这些翻译在项目级是隔离的,因此不会与其他项目的翻译混淆。 另外,该缓存仅在开发会话内生效,缓存的翻译不会用于生产环境。

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

生产与开发 API Keys

为区分 gt-next 在生产环境与开发环境中的行为,我们引入了“Production API Keys”和“Development API Keys”的概念。

生产环境 API 密钥

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

当提供了生产环境 API 密钥时,gt-next 将按生产环境行为部分所述运行。

这意味着,即使你在开发模式下运行 Next.js 应用,只要提供了生产环境 API 密钥,gt-next 也会按生产环境方式运行。 翻译的热重载将被禁用,且未提供翻译的组件将渲染原始内容。

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

CLI(命令行界面)工具会读取 GT_API_KEY 环境变量,并且只接受生产环境 API 密钥。

CLI 工具将按“production”类别应用计费和速率限制。

开发 API Keys

开发 API key 是以 gtx-dev- 开头的 API key。

当提供开发 API key 时,gt-next 将按开发行为部分的说明运行。

使用开发 API key 时,计费与限流将按“development”类别执行。

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

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

本指南如何?