> ## Documentation Index
> Fetch the complete documentation index at: https://hyperlocalise.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 提供者凭据

> 为 OpenAI、Azure OpenAI、Anthropic、Gemini、Bedrock、LM Studio、Ollama、Groq 和远程 TMS 适配器设置凭据。

`hyperlocalise` 从以下位置读取提供程序凭据：

* 在当前的 shell 会话中导出变量。
* `.env` 和 `.env.local` 文件位于你当前的项目目录中。

优先级：

* 已导出的 shell 变量保持原样。
* 对于尚未导出的变量，`.env.local` 会覆盖 `.env`。

示例：

<CodeGroup>
  ```bash Export theme={null}
  export OPENAI_API_KEY="your-openai-api-key"
  export AZURE_OPENAI_BASE_URL="https://<resource>.openai.azure.com/openai/v1"
  export AZURE_OPENAI_API_KEY="your-azure-openai-api-key"
  ```

  ```bash .env.local theme={null}
  OPENAI_API_KEY="your-openai-api-key"
  AZURE_OPENAI_BASE_URL="https://<resource>.openai.azure.com/openai/v1"
  AZURE_OPENAI_API_KEY="your-azure-openai-api-key"
  ```
</CodeGroup>

## LLM 提供商

### OpenAI

<CodeGroup>
  ```bash Export theme={null}
  export OPENAI_API_KEY="your-openai-api-key"
  ```

  ```bash .env.local theme={null}
  OPENAI_API_KEY="your-openai-api-key"
  ```
</CodeGroup>

### Azure OpenAI

<CodeGroup>
  ```bash Export theme={null}
  # Example: https://<resource>.openai.azure.com/openai/v1
  export AZURE_OPENAI_BASE_URL="https://<resource>.openai.azure.com/openai/v1"
  export AZURE_OPENAI_API_KEY="your-azure-openai-api-key"
  ```

  ```bash .env.local theme={null}
  # Example: https://<resource>.openai.azure.com/openai/v1
  AZURE_OPENAI_BASE_URL="https://<resource>.openai.azure.com/openai/v1"
  AZURE_OPENAI_API_KEY="your-azure-openai-api-key"
  ```
</CodeGroup>

### 双子座

<CodeGroup>
  ```bash Export theme={null}
  export GEMINI_BASE_URL="https://generativelanguage.googleapis.com/v1beta/openai"
  export GEMINI_API_KEY="your-gemini-api-key"
  ```

  ```bash .env.local theme={null}
  GEMINI_BASE_URL="https://generativelanguage.googleapis.com/v1beta/openai"
  GEMINI_API_KEY="your-gemini-api-key"
  ```
</CodeGroup>

### Anthropic

<CodeGroup>
  ```bash Export theme={null}
  export ANTHROPIC_BASE_URL="https://api.anthropic.com/v1"
  export ANTHROPIC_API_KEY="your-anthropic-api-key"
  ```

  ```bash .env.local theme={null}
  ANTHROPIC_BASE_URL="https://api.anthropic.com/v1"
  ANTHROPIC_API_KEY="your-anthropic-api-key"
  ```
</CodeGroup>

### AWS Bedrock

<CodeGroup>
  ```bash Export theme={null}
  export AWS_REGION="us-east-1"
  export AWS_ACCESS_KEY_ID="your-access-key-id"
  export AWS_SECRET_ACCESS_KEY="your-secret-access-key"
  # Optional when using temporary credentials:
  export AWS_SESSION_TOKEN="your-session-token"
  ```

  ```bash .env.local theme={null}
  AWS_REGION="us-east-1"
  AWS_ACCESS_KEY_ID="your-access-key-id"
  AWS_SECRET_ACCESS_KEY="your-secret-access-key"
  # Optional when using temporary credentials:
  AWS_SESSION_TOKEN="your-session-token"
  ```
</CodeGroup>

### LM Studio

<CodeGroup>
  ```bash Export theme={null}
  export LM_STUDIO_BASE_URL="http://127.0.0.1:1234/v1"
  export LM_STUDIO_API_KEY="lm-studio"
  ```

  ```bash .env.local theme={null}
  LM_STUDIO_BASE_URL="http://127.0.0.1:1234/v1"
  LM_STUDIO_API_KEY="lm-studio"
  ```
</CodeGroup>

### Ollama

<CodeGroup>
  ```bash Export theme={null}
  export OLLAMA_BASE_URL="http://127.0.0.1:11434/v1"
  export OLLAMA_API_KEY="ollama"
  ```

  ```bash .env.local theme={null}
  OLLAMA_BASE_URL="http://127.0.0.1:11434/v1"
  OLLAMA_API_KEY="ollama"
  ```
</CodeGroup>

### Groq

<CodeGroup>
  ```bash Export theme={null}
  export GROQ_BASE_URL="https://api.groq.com/openai/v1"
  export GROQ_API_KEY="your-groq-api-key"
  ```

  ```bash .env.local theme={null}
  GROQ_BASE_URL="https://api.groq.com/openai/v1"
  GROQ_API_KEY="your-groq-api-key"
  ```
</CodeGroup>

## 存储适配器

### POEditor

<CodeGroup>
  ```bash Export theme={null}
  export POEDITOR_API_TOKEN="your-poeditor-token"
  ```

  ```bash .env.local theme={null}
  POEDITOR_API_TOKEN="your-poeditor-token"
  ```
</CodeGroup>

### LILT AI

<CodeGroup>
  ```bash Export theme={null}
  export LILT_API_TOKEN="your-lilt-token"
  ```

  ```bash .env.local theme={null}
  LILT_API_TOKEN="your-lilt-token"
  ```
</CodeGroup>

### Lokalise

<CodeGroup>
  ```bash Export theme={null}
  export LOKALISE_API_TOKEN="your-lokalise-token"
  ```

  ```bash .env.local theme={null}
  LOKALISE_API_TOKEN="your-lokalise-token"
  ```
</CodeGroup>

### Crowdin

<CodeGroup>
  ```bash Export theme={null}
  export CROWDIN_API_TOKEN="your-crowdin-token"
  ```

  ```bash .env.local theme={null}
  CROWDIN_API_TOKEN="your-crowdin-token"
  ```
</CodeGroup>

如果你使用 Crowdin Enterprise，还请将 `storage.config.apiBaseURL` 中的 `i18n.yml` 设置为你的 Enterprise API 主机。例如：`https://example.api.crowdin.com`。

### Smartling

<CodeGroup>
  ```bash Export theme={null}
  export SMARTLING_USER_SECRET="your-smartling-user-secret"
  ```

  ```bash .env.local theme={null}
  SMARTLING_USER_SECRET="your-smartling-user-secret"
  ```
</CodeGroup>

Smartling 还需要 `storage.config.userIdentifier` 在 `i18n.yml` 中。

## 安全指南

* 优先使用环境变量，而不是硬编码的令牌。
* 请将 `.env` 和 `.env.local` 排除在版本控制之外。
* 定期轮换令牌，并将其权限范围限制为最小权限。

## 本地和 CI 的凭据管理标准

对所有远程存储适配器使用此操作模型，包括 Smartling、Lokalise 和内部自定义适配器。

### 本地开发

1. 仅将非机密配置（`*Env` 变量名）提交到 `i18n.yml`。
2. 仅在开发者机器上将真实 token 存储在 `.env.local` 中。
3. 将 `.env` 和 `.env.local` 添加到 `.gitignore`。
4. 使用单独的开发和生产 TMS 凭据。

### CI 环境

1. 将密钥存储在你的 CI 密钥管理器中（例如，GitHub Actions Secrets）。
2. 仅将密钥注入需要它们的同步作业。
3. 将 CI 密钥映射为适配器配置所期望的环境变量。
4. 对生产同步使用环境范围的密钥和分支保护。

### 轮换和最小权限

* 按固定计划（例如每 90 天）以及在团队成员离职时轮换令牌。
* 为每个 TMS 工作区或项目创建专用的 CI 服务用户。
* 将每个令牌限制为拉取/推送所需的最小 API 范围。
* 在删除之前的凭据之前，先运行一次试运行同步以验证轮换。

### 适合审计的日志策略

* 切勿将原始密钥打印到日志、调试输出、截图或问题评论中。
* 仅记录凭据来源名称（`SMARTLING_USER_SECRET`、`LOKALISE_API_TOKEN`），不要记录值。
* 将 CLI 输出保持为机器可读格式（`--output json` 或 `--output csv`），以便用于审计日志。
* 根据您的保留策略存储 CI 日志并同步制品。

## TMS 适配器安全检查清单

在启用可写入的 CI 作业之前，请使用此清单。

* [ ] 所有适配器密钥均通过环境变量提供，而不是在配置中内联。
* [ ] CI 使用专用服务凭据（不使用个人访问令牌）。
* [ ] 凭证范围仅限于所需的项目和操作。
* [ ] 轮换计划已记录，并由一个团队负责。
* [ ] 管道日志不会泄露令牌值。
* [ ] 已成功运行计划的试运行 `sync pull` 和 `sync push` 任务。
* [ ] 如有需要，在生产写入同步之前需要手动审批。

同样的检查清单也适用于 Smartling、Lokalise 以及基于存储适配器接口构建的自定义适配器。
