feat(env, config, i18n): 增强环境配置与多语言支持

更新 .env.example,提供更清晰的 API 配置说明与本地开发环境配置指引。
修改 next.config.ts:支持动态解析允许的开发环境来源(origins),提升配置灵活性。
重构 admin-language-switcher:优化语言切换同步机制,确保语言变更能够及时生效。
优化英文、尼泊尔语与中文语言包中的错误提示文案,进一步明确 API 配置要求。
精简 admin-http.ts:将 API Base URL 校验逻辑抽离至独立模块并统一导出,提升代码可维护性。
This commit is contained in:
2026-05-29 09:17:37 +08:00
parent 0bfcf6c59c
commit 27727f6371
10 changed files with 76 additions and 19 deletions

View File

@@ -9,9 +9,7 @@ import { withAdminLocaleHeaders } from "@/lib/admin-locale";
import { LotteryApiBizError, LotteryApiEnvelopeError } from "@/types/api/errors";
import { isApiEnvelope } from "@/types/api/envelope";
export function hasLotteryAdminApiBaseUrl(): boolean {
return true;
}
export { hasLotteryAdminApiBaseUrl } from "@/lib/lottery-api-env";
export const adminHttp = axios.create({
// API 路径统一由调用方传 `/api/v1/...`,避免与前缀重复拼接成 `/api/api/v1/...`。

View File

@@ -0,0 +1,19 @@
/**
* 管理端 API 连接方式:
* - 默认:浏览器请求同源 `/api/*`,由 next.config `rewrites` 转发到 Laravel需配置服务端 `API_BASE_URL`)。
* - 可选:设置 `NEXT_PUBLIC_LOTTERY_API_BASE_URL` 直连后端(不经 Next 反代)。
*/
export function hasLotteryAdminApiBaseUrl(): boolean {
const direct = process.env.NEXT_PUBLIC_LOTTERY_API_BASE_URL?.trim();
if (direct !== undefined && direct !== "") {
return true;
}
return process.env.NEXT_PUBLIC_LOTTERY_API_PROXY_DISABLED !== "true";
}
/** 直连模式下的 Laravel API 根(含 `/api` 前缀由调用方 path 决定) */
export function lotteryAdminApiDirectOrigin(): string | null {
const direct = process.env.NEXT_PUBLIC_LOTTERY_API_BASE_URL?.trim();
return direct !== undefined && direct !== "" ? direct.replace(/\/$/, "") : null;
}

View File

@@ -0,0 +1,11 @@
/** 解析 `ALLOWED_DEV_ORIGINS`(逗号分隔),供 next.config `allowedDevOrigins` 使用 */
export function parseAllowedDevOrigins(envValue: string | undefined): string[] {
if (envValue === undefined || envValue.trim() === "") {
return [];
}
return envValue
.split(",")
.map((origin) => origin.trim())
.filter((origin) => origin !== "");
}