mirror of
https://gh-proxy.org/https://github.com/klinsmaya/new-api.git
synced 2026-11-08 01:17:09 +08:00
* feat(i18n): translate web console messages in the frontend and AI-client errors in the backend
Chinese text was hard-coded in API messages, stored log content, emails and
server logs, so it reached users of every interface language.
Text is now translated where its reader is:
- Web console APIs return the English source text as message_key with
message_params, and the web console translates it in all seven languages.
message keeps the English text for other API callers.
- Errors returned to AI clients, emails and notifications are translated by
the backend (en, zh-CN, zh-TW) in the language saved on the account, then
the language of the request's Accept-Language header.
- A reader who states no language still gets the original Chinese text of the
messages that were Chinese before, word for word. Gateways that use another
new-api as their upstream match that text, for example to disable a channel
whose account ran out of quota.
- Usage, top-up and system log content is stored as content_parts (key and
params) and rendered in the viewer's language. Task fail reasons and refund
reasons written by the gateway are English keys. Rows written earlier are
shown as before.
- Server logs are English.
Also:
- The saved interface language zhTW, and zh-HK, zh-MO and zh-Hant, now select
Traditional Chinese in the backend instead of Simplified Chinese.
- The built-in group descriptions are translated; descriptions an
administrator saved are shown as written.
- .agents/rules/i18n.md records the conventions. Tests in i18n/ fail on a
non-English string literal, on a web console message without translations
and on a locale key without a constant.
* feat(i18n): print server logs in Chinese when LOG_LANGUAGE asks for it
Server log lines are English by default. With LOG_LANGUAGE=zh-CN, the lines
that were Chinese before print their original Chinese text.
common.LogText formats a log line from its English format, which is also the
key of its Chinese text in common/log_text.zh-CN.json. A line without an entry
prints in English. go vet checks the arguments of every call, and
TestServerLogTexts checks that each entry still matches a call and has the
same verbs as its key.
* docs: list LOG_LANGUAGE in the docker compose example
* feat(i18n): translate every server log line and add DEFAULT_LANGUAGE
Every line the gateway prints goes through common.LogText. With
DEFAULT_LANGUAGE=zh-CN, the lines that have a Chinese text in
common/log_text.zh-CN.json print it and the others print English.
DEFAULT_LANGUAGE replaces LOG_LANGUAGE. It also sets the language of
backend messages, emails and notifications for a reader who states no
language: en, zh-CN or zh-TW, English when unset. The list of messages
that stayed Chinese for such readers is removed.
Review fixes:
- Channel test logs store the token name "Model test"; the console shows
it in the interface language.
- Task fail reasons written by the gateway are fixed sentences the console
translates. The HTTP status and the upstream detail go to the server log
when a polled task is failed.
- The auto-disable reason of a slow channel is written in DEFAULT_LANGUAGE.
Also:
- Drop the repository-scanning lint tests, the i18n rules file and its
read gate. AGENTS.md keeps the conventions in four lines.
- Payment error toasts keep their previous text and only add the
translated message key.
- Remove guards and helpers that no caller needs.
* fix(i18n): address review on language lookup, notices and error responses
- Relay requests no longer load the user a second time to find the
language: the settings TokenAuth put into the request are used as they
are, also when they hold no language.
- Upstream model update notices are rendered in each recipient's saved
language, DEFAULT_LANGUAGE when none.
- /api/usage/token and /api/log/token answer with backend-translated
messages again, with the keys and status codes used before this PR.
Their callers are scripts, not the web console.
- Webhook notifications fill {{value}} placeholders like the other
senders. Running the rendered text through Sprintf appended
%!(EXTRA ...) and broke %2F in links.
- RootUserLanguage reads the setting of the root user it already loaded.
- zh_TW and zh_HK are read as Traditional Chinese.
- Add common.ApiErrorStatus for error responses under another HTTP status
and use it where those responses were built by hand.
- Remove middleware.GetLanguage, which had no callers.
142 lines
5.8 KiB
Bash
142 lines
5.8 KiB
Bash
# 端口号
|
|
# PORT=3000
|
|
# 前端基础URL
|
|
# FRONTEND_BASE_URL=https://your-frontend-url.com
|
|
|
|
|
|
# 调试相关配置
|
|
# 启用pprof
|
|
# ENABLE_PPROF=true
|
|
# 启用调试模式
|
|
# DEBUG=true
|
|
# 默认语言:日志输出,以及对方没有指定语言时返回的提示、邮件和通知。可选 en、zh-CN、zh-TW,不设置为 en
|
|
# DEFAULT_LANGUAGE=zh-CN
|
|
# Pyroscope 配置
|
|
# PYROSCOPE_URL=http://localhost:4040
|
|
# PYROSCOPE_APP_NAME=new-api
|
|
# PYROSCOPE_BASIC_AUTH_USER=your-user
|
|
# PYROSCOPE_BASIC_AUTH_PASSWORD=your-password
|
|
# PYROSCOPE_MUTEX_RATE=5
|
|
# PYROSCOPE_BLOCK_RATE=5
|
|
# HOSTNAME=your-hostname
|
|
|
|
# 数据库相关配置
|
|
# 启用错误日志记录
|
|
# ERROR_LOG_ENABLED=true
|
|
# 数据库连接字符串
|
|
# SQL_DSN=user:password@tcp(127.0.0.1:3306)/dbname?parseTime=true
|
|
# 日志数据库连接字符串
|
|
# LOG_SQL_DSN=user:password@tcp(127.0.0.1:3306)/logdb?parseTime=true
|
|
# SQLite数据库路径
|
|
# SQLITE_PATH=/path/to/sqlite.db
|
|
# 数据库最大空闲连接数
|
|
# SQL_MAX_IDLE_CONNS=100
|
|
# 数据库最大打开连接数
|
|
# SQL_MAX_OPEN_CONNS=1000
|
|
# 数据库连接最大生命周期(秒)
|
|
# SQL_MAX_LIFETIME=60
|
|
# 慢查询日志阈值(毫秒),0 表示关闭慢查询日志,超出 0-3600000 范围回退默认值 200
|
|
# SQL_SLOW_THRESHOLD_MS=200
|
|
# 跳过用户额度列 64 位 schema 检查(仅在已确认数据库列可容纳 64 位时启用)
|
|
# SKIP_64BIT_QUOTA_SCHEMA_CHECK=true
|
|
|
|
|
|
# 缓存相关配置
|
|
# Redis连接字符串
|
|
# REDIS_CONN_STRING=redis://user:password@localhost:6379/0
|
|
# 同步频率(单位:秒)
|
|
# SYNC_FREQUENCY=60
|
|
# 内存缓存启用
|
|
# MEMORY_CACHE_ENABLED=true
|
|
# 渠道更新频率(单位:秒)
|
|
# CHANNEL_UPDATE_FREQUENCY=30
|
|
# 批量更新启用
|
|
# BATCH_UPDATE_ENABLED=true
|
|
# 批量更新间隔(单位:秒)
|
|
# BATCH_UPDATE_INTERVAL=5
|
|
|
|
# 任务和功能配置
|
|
# 更新任务启用
|
|
# UPDATE_TASK=true
|
|
# 异步任务硬超时(分钟),按提交时间计算,超时未完成的任务标记失败并退款;0 表示禁用
|
|
# TASK_TIMEOUT_MINUTES=1440
|
|
# 异步任务连续轮询失败阈值(上游 429/5xx/401/403、网络错误、无法识别的响应),达到后任务标记失败并退款;正常轮询成功一次即归零
|
|
# TASK_POLL_MAX_FAILURES=20
|
|
|
|
# 对话超时设置
|
|
# 所有请求超时时间,单位秒,默认为0,表示不限制
|
|
# RELAY_TIMEOUT=0
|
|
# Relay HTTP 客户端空闲连接超时时间,单位秒,默认跟随 Go 标准库,设置为0表示不限制
|
|
# RELAY_IDLE_CONN_TIMEOUT=90
|
|
# 等待上游返回响应头的超时时间,单位秒,默认 1800,设置为 0 表示不限制。
|
|
# 仅约束「等待响应头」这一段;响应头返回之后的流式传输不受影响。
|
|
# 注意:非流式请求通常要等上游生成完毕才会返回响应头,因此该值需留足余量。
|
|
# RELAY_RESPONSE_HEADER_TIMEOUT=1800
|
|
# 流模式无响应超时时间,单位秒,如果出现空补全可以尝试改为更大值
|
|
# STREAMING_TIMEOUT=300
|
|
|
|
# TLS / HTTP 跳过验证设置
|
|
# TLS_INSECURE_SKIP_VERIFY=false
|
|
|
|
# Gin 可信反向代理(逗号分隔的 IP/CIDR)
|
|
# 未配置/留空:默认信任 127.0.0.0/8、::1、RFC1918 私网和 fc00::/7,并打印启动告警。
|
|
# none:严格模式,不信任任何代理且必须单独使用;显式列表完全替代默认值,应填写代理自身地址。
|
|
# TRUSTED_PROXIES=none
|
|
# TRUSTED_PROXIES=127.0.0.1,172.20.0.0/16
|
|
|
|
# Gemini 识别图片 最大图片数量
|
|
# GEMINI_VISION_MAX_IMAGE_NUM=16
|
|
|
|
# 会话密钥
|
|
# SESSION_SECRET=random_string
|
|
# 登录密码请求体 RSA-OAEP 加密;默认关闭,且不能替代 HTTPS
|
|
# PASSWORD_LOGIN_ENCRYPTION_ENABLED=true
|
|
|
|
# Account password storage. For a rolling upgrade, deploy every node with bcrypt
|
|
# first (dual-format verification), then switch all nodes to argon2id before
|
|
# enabling long passwords. A rollback must retain Argon2id verification and
|
|
# v2 login-password envelope support (when login encryption is enabled).
|
|
# Existing bcrypt hashes and MFA backup codes are not rewritten.
|
|
# ACCOUNT_PASSWORD_HASH_ALGORITHM=argon2id
|
|
# false/未配置:本地 HTTP 模式,关闭 refresh/logout OriginGuard,且不得设置 TRUSTED_URL;兼容本地开发代理。
|
|
# true:启用 Secure Refresh Cookie 和严格 OriginGuard,必须同时列出全部可信 HTTPS Origin。
|
|
# SESSION_COOKIE_TRUSTED_URL 多项用英文逗号分隔;不支持通配符、路径或域名后缀匹配。
|
|
# 这些设置不修改 relay CORS。
|
|
# SESSION_COOKIE_SECURE=false
|
|
# SESSION_COOKIE_TRUSTED_URL=https://example.com,https://admin.example.com
|
|
# 每用户最多保留的活跃登录 Session
|
|
# USER_SESSION_ACTIVE_LIMIT=50
|
|
# 单用户在签发窗口内允许创建的 Session 总数(包含已撤销)
|
|
# USER_SESSION_ISSUANCE_LIMIT=100
|
|
# Session 签发计数窗口(秒);不得大于 revoked 保留期,超出时会自动钳制
|
|
# USER_SESSION_ISSUANCE_WINDOW_SECONDS=86400
|
|
# revoked Session 审计保留天数
|
|
# USER_SESSION_REVOKED_RETENTION_DAYS=7
|
|
# 最近一小时全局 Session 签发量超过此值时记录告警,不会拒绝登录
|
|
# USER_SESSION_HOURLY_ALERT_THRESHOLD=5000
|
|
|
|
# 其他配置
|
|
# 生成默认token
|
|
# GENERATE_DEFAULT_TOKEN=false
|
|
# Cohere 安全设置
|
|
# COHERE_SAFETY_SETTING=NONE
|
|
# 是否统计图片token
|
|
# GET_MEDIA_TOKEN=true
|
|
# 是否在非流(stream=false)情况下统计图片token
|
|
# GET_MEDIA_TOKEN_NOT_STREAM=false
|
|
# 设置 Dify 渠道是否输出工作流和节点信息到客户端
|
|
# DIFY_DEBUG=true
|
|
|
|
# LinuxDo相关配置
|
|
LINUX_DO_TOKEN_ENDPOINT=https://connect.linux.do/oauth2/token
|
|
LINUX_DO_USER_ENDPOINT=https://connect.linux.do/api/user
|
|
|
|
# 节点类型
|
|
# 如果是主节点则为master
|
|
# NODE_TYPE=master
|
|
|
|
# 可信任重定向域名列表(逗号分隔,支持子域名匹配)
|
|
# 用于验证支付成功/取消回调URL的域名安全性
|
|
# 示例: example.com,myapp.io 将允许 example.com, sub.example.com, myapp.io 等
|
|
# TRUSTED_REDIRECT_DOMAINS=example.com,myapp.io
|