生产环境与开发环境
生产环境与开发环境的区别
概述
gt-next 会根据你的 Next.js 应用所运行的环境而表现出不同的行为。
它通过检查 NODE_ENV 环境变量来判断当前环境。
生产环境行为
环境变量
在生产环境中,gt-next 只会读取 GT_PROJECT_ID 和 GT_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_ID 和 GT_API_KEY 环境变量。
API key 可以是以 gtx-api- 开头的生产 API key,或以 gtx-dev- 开头的开发 API key。
如果在开发环境中提供了生产 API key,gt-next 将按生产环境运行。
这意味着会禁用翻译的热重载,且未提供翻译的组件将渲染原始内容。
翻译加载行为
在开发环境中,gt-next 会先按与生产环境相同的方式尝试加载翻译。
这些翻译会被加载到内存中。
当以非默认语言渲染使用 useGT、<T> 或 useTranslations 的组件时,gt-next 将执行以下操作:
- 如果检测到该内容存在有效且已存储的翻译,则直接渲染该翻译。
- 如果未找到翻译,则会尝试通过 General Translation API 动态翻译该内容。
- 翻译完成后,将渲染该翻译,并将其存入内存以供后续使用。
- 如果翻译超时,则会回退并渲染原始内容。
我们的 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 创建的翻译不会被存储,且无法在生产环境中使用。
开发翻译的目的在于让你在发布到生产环境之前测试应用。
本指南如何?