生产环境与开发环境
生产环境与开发环境的区别
概述
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 密钥可以是以 gtx-api-
开头的生产 API 密钥,或者是以 gtx-dev-
开头的开发 API 密钥。
如果在开发环境中提供了生产 API 密钥,gt-next
将表现得就像您在生产环境中一样。
这意味着翻译热重载将被禁用,没有翻译的组件将渲染原始内容。
翻译加载行为
在开发环境中,gt-next
将首先尝试以与生产环境相同的方式加载翻译。
这些翻译被加载到内存中。
当渲染一个组件(使用 useGT()
、<T>
或 useTranslations()
)为非默认语言时,gt-next
将执行以下操作:
- 如果它检测到给定内容的有效存储翻译,它将渲染该翻译。
- 如果没有找到翻译,它将尝试通过 General Translation API 动态翻译内容。
- 翻译后,翻译将被渲染,并存储在内存中供将来使用。
- 如果翻译超时,它将回退并渲染原始内容。
我们的 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 密钥创建的翻译不会被存储,也无法在生产环境中使用。
开发环境翻译的目的是让你在发布到生产环境之前测试你的应用。
这份指南怎么样?