# gt-next: General Translation Next.js SDK: 生产环境与开发环境 URL: https://generaltranslation.com/zh/docs/next/concepts/environments.mdx --- title: 生产环境与开发环境 description: 生产环境与开发环境的区别 --- ## 概述 `gt-next` 的行为会因你的 Next.js 应用所处的运行环境而有所不同。 它通过检查 `NODE_ENV` 环境变量来判断当前环境。 ## 生产环境行为 ### 环境变量 在生产环境中,`gt-next` 只会读取 `GT_PROJECT_ID` 和 `GT_API_KEY` 这两个环境变量。 API 密钥 必须是生产环境 API 密钥,且以 `gtx-api-` 开头。 如果你使用的是开发环境 API 密钥,`gt-next` 会报错。 ### 翻译加载行为 在生产环境中,`gt-next` 默认会尝试从 General Translation CDN 加载翻译。 如果你已通过 `loadTranslations` 函数配置了自定义的翻译加载方式 (例如加载本地翻译) ,`gt-next` 则会改用该配置。 由于当前处于生产环境,翻译热重载已禁用。 使用 `` 组件或 `tx` 函数为动态内容进行按需翻译的功能已启用,但仅在服务器组件中可用。 ## 开发环境行为 ### 环境变量 `gt-next` 支持 `GT_PROJECT_ID` 和 `GT_API_KEY` 环境变量。 API 密钥既可以是生产环境 API 密钥 (以 `gtx-api-` 开头) ,也可以是开发环境 API 密钥 (以 `gtx-dev-` 开头) 。 如果在开发环境中提供了生产环境 API 密钥,`gt-next` 将按生产环境模式运行。 这意味着翻译热重载会被禁用,未提供翻译的组件将渲染原始内容。 ### 翻译加载行为 在开发环境中,`gt-next` 会先按照与生产环境相同的方式尝试加载翻译。 这些翻译会加载到内存中。 当以非默认语言渲染组件 (使用 `useGT`、`` 或 `useTranslations`) 时,`gt-next` 会执行以下操作: 1. 如果检测到给定内容已有有效且已存储的翻译,则会渲染该翻译。 2. 如果未找到翻译,则会尝试通过 General Translation API 动态翻译该内容。 3. 翻译完成后,会渲染该翻译,并将其存储在内存中供后续使用。 4. 如果翻译超时,则会回退并渲染原始内容。 我们的 API 还会在内部对开发环境中的翻译进行短时间缓存,因此如果再次请求相同的翻译,将直接从缓存中返回。 这些翻译在项目级别是隔离的,因此不会与其他项目的翻译混淆。 此外,该缓存仅在开发会话内有效,因此缓存的翻译不会用于生产环境。 `gt-next` 会检测使用 `useGT`、`` 或 `useTranslations` 的组件变更,并通过我们的 API 动态翻译修改后的内容。 ## 生产环境 API 密钥与开发环境 API 密钥 [#api-keys] 为便于区分 `gt-next` 在生产环境和开发环境下的行为,我们引入了“生产环境 API 密钥”和“开发环境 API 密钥”这两个概念。 ### 生产环境 API 密钥 生产环境 API 密钥是指以 `gtx-api-` 开头的 API 密钥。 提供生产环境 API 密钥后,`gt-next` 会按[生产环境行为](#production-behavior)一节中所述的方式运行。 这意味着,如果你以开发模式运行 Next.js 应用,并提供了生产环境 API 密钥,`gt-next` 会像处于生产环境一样运行。 翻译热重载将被禁用,未提供翻译的组件将渲染原始内容。 除了这一行为外,`gt-next` 不会以任何方式使用生产环境 API 密钥。 CLI 工具会读取 `GT_API_KEY` 环境变量,并且只接受生产环境 API 密钥。 CLI 工具会按“production”类别进行计费和速率限制。 ### 开发 API 密钥 开发 API 密钥是指以 `gtx-dev-` 开头的 API 密钥。 提供开发 API 密钥后,`gt-next` 会按[开发环境行为](#development-behavior)部分中的说明运行。 使用开发 API 密钥时,计费和速率限制会按“开发”类别执行。 使用开发 API 密钥创建的翻译不会被存储,也不能在生产环境中使用。 开发环境翻译的目的是让你在发布到生产环境之前先测试应用程序。