@@ -85,6 +85,7 @@ Do NOT directly import or call `encoding/json` in business code. `json.RawMessag
...
@@ -85,6 +85,7 @@ Do NOT directly import or call `encoding/json` in business code. `json.RawMessag
- Use `common.UsingPostgreSQL`, `common.UsingSQLite`, and `common.UsingMySQL` flags for DB-specific branches.
- Use `common.UsingPostgreSQL`, `common.UsingSQLite`, and `common.UsingMySQL` flags for DB-specific branches.
- Do not use database-specific features without cross-DB fallback, including MySQL-only functions, PostgreSQL-only operators, SQLite-unsupported `ALTER COLUMN`, or database-specific JSON column types without a `TEXT` fallback.
- Do not use database-specific features without cross-DB fallback, including MySQL-only functions, PostgreSQL-only operators, SQLite-unsupported `ALTER COLUMN`, or database-specific JSON column types without a `TEXT` fallback.
- Migrations must work on all three databases. For SQLite, use `ALTER TABLE ... ADD COLUMN` instead of `ALTER COLUMN` (see `model/main.go` for patterns).
- Migrations must work on all three databases. For SQLite, use `ALTER TABLE ... ADD COLUMN` instead of `ALTER COLUMN` (see `model/main.go` for patterns).
- Avoid GORM boolean default tags such as `gorm:"default:true"` when the default is a business rule already enforced by code. MySQL and PostgreSQL can normalize boolean defaults differently, causing GORM `AutoMigrate` to repeatedly issue `ALTER TABLE` on restart. Prefer setting these defaults in request/model normalization, hooks, constructors, or service logic; do not replace `default:true` with `default:1` unless the behavior is verified across SQLite, MySQL, and PostgreSQL.
@@ -85,6 +85,7 @@ Do NOT directly import or call `encoding/json` in business code. `json.RawMessag
...
@@ -85,6 +85,7 @@ Do NOT directly import or call `encoding/json` in business code. `json.RawMessag
- Use `common.UsingPostgreSQL`, `common.UsingSQLite`, and `common.UsingMySQL` flags for DB-specific branches.
- Use `common.UsingPostgreSQL`, `common.UsingSQLite`, and `common.UsingMySQL` flags for DB-specific branches.
- Do not use database-specific features without cross-DB fallback, including MySQL-only functions, PostgreSQL-only operators, SQLite-unsupported `ALTER COLUMN`, or database-specific JSON column types without a `TEXT` fallback.
- Do not use database-specific features without cross-DB fallback, including MySQL-only functions, PostgreSQL-only operators, SQLite-unsupported `ALTER COLUMN`, or database-specific JSON column types without a `TEXT` fallback.
- Migrations must work on all three databases. For SQLite, use `ALTER TABLE ... ADD COLUMN` instead of `ALTER COLUMN` (see `model/main.go` for patterns).
- Migrations must work on all three databases. For SQLite, use `ALTER TABLE ... ADD COLUMN` instead of `ALTER COLUMN` (see `model/main.go` for patterns).
- Avoid GORM boolean default tags such as `gorm:"default:true"` when the default is a business rule already enforced by code. MySQL and PostgreSQL can normalize boolean defaults differently, causing GORM `AutoMigrate` to repeatedly issue `ALTER TABLE` on restart. Prefer setting these defaults in request/model normalization, hooks, constructors, or service logic; do not replace `default:true` with `default:1` unless the behavior is verified across SQLite, MySQL, and PostgreSQL.
"Auto-disable status codes":"Auto-disable status codes",
"Auto-disable status codes":"Auto-disable status codes",
"Auto-discover":"Auto-discover",
"Auto-discover":"Auto-discover",
"Auto-discovers endpoints from the provider":"Auto-discovers endpoints from the provider",
"Auto-discovers endpoints from the provider":"Auto-discovers endpoints from the provider",
...
@@ -683,6 +684,7 @@
...
@@ -683,6 +684,7 @@
"Channel Affinity":"Channel Affinity",
"Channel Affinity":"Channel Affinity",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.",
"Max requests per period":"Max requests per period",
"Max requests per period":"Max requests per period",
...
@@ -3541,11 +3544,13 @@
...
@@ -3541,11 +3544,13 @@
"Restore defaults":"Restore defaults",
"Restore defaults":"Restore defaults",
"Restrict user model request frequency (may impact high concurrency performance)":"Restrict user model request frequency (may impact high concurrency performance)",
"Restrict user model request frequency (may impact high concurrency performance)":"Restrict user model request frequency (may impact high concurrency performance)",
"Result":"Result",
"Result":"Result",
"Request retry":"Request retry",
"Retain last N days":"Retain last N days",
"Retain last N days":"Retain last N days",
"Retain last N files":"Retain last N files",
"Retain last N files":"Retain last N files",
"Retention days":"Retention days",
"Retention days":"Retention days",
"Retry":"Retry",
"Retry":"Retry",
"Retry Chain":"Retry Chain",
"Retry Chain":"Retry Chain",
"Retry Settings":"Retry Settings",
"Retry Suggestion":"Retry Suggestion",
"Retry Suggestion":"Retry Suggestion",
"Retry Times":"Retry Times",
"Retry Times":"Retry Times",
"Return a custom error immediately":"Return a custom error immediately",
"Return a custom error immediately":"Return a custom error immediately",
...
@@ -3576,6 +3581,7 @@
...
@@ -3576,6 +3581,7 @@
"Route, auth, and balance check in one place":"Route, auth, and balance check in one place",
"Route, auth, and balance check in one place":"Route, auth, and balance check in one place",
"Auto Group Chain":"Chaîne de groupes automatique",
"Auto Group Chain":"Chaîne de groupes automatique",
"Auto refresh":"Actualisation automatique",
"Auto refresh":"Actualisation automatique",
"Auto Sync Upstream Models":"Synchronisation automatique des modèles en amont",
"Auto Sync Upstream Models":"Synchronisation automatique des modèles en amont",
"Auto-disable rules":"Règles de désactivation automatique",
"Auto-disable status codes":"Codes de statut de désactivation auto",
"Auto-disable status codes":"Codes de statut de désactivation auto",
"Auto-discover":"Découverte automatique",
"Auto-discover":"Découverte automatique",
"Auto-discovers endpoints from the provider":"Découvre automatiquement les points de terminaison du fournisseur",
"Auto-discovers endpoints from the provider":"Découvre automatiquement les points de terminaison du fournisseur",
...
@@ -683,6 +684,7 @@
...
@@ -683,6 +684,7 @@
"Channel Affinity":"Affinité de canal",
"Channel Affinity":"Affinité de canal",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"L'affinité de canal réutilise le dernier canal ayant réussi, en se basant sur les clés extraites du contexte de la requête ou du corps JSON.",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"L'affinité de canal réutilise le dernier canal ayant réussi, en se basant sur les clés extraites du contexte de la requête ou du corps JSON.",
"Channel Affinity: Upstream Cache Hit":"Affinité de canal : hit de cache en amont",
"Channel Affinity: Upstream Cache Hit":"Affinité de canal : hit de cache en amont",
"Channel health checks":"Contrôles de santé des canaux",
"Channel copied successfully":"Canal copié avec succès",
"Channel copied successfully":"Canal copié avec succès",
"Channel created successfully":"Canal créé avec succès",
"Channel created successfully":"Canal créé avec succès",
"Channel deleted successfully":"Canal supprimé avec succès",
"Channel deleted successfully":"Canal supprimé avec succès",
...
@@ -2391,6 +2393,7 @@
...
@@ -2391,6 +2393,7 @@
"Max Disk Cache Size (MB)":"Taille max du cache disque (Mo)",
"Max Disk Cache Size (MB)":"Taille max du cache disque (Mo)",
"Max Requests (including failures)":"Max Requêtes (incluant les échecs)",
"Max Requests (including failures)":"Max Requêtes (incluant les échecs)",
"Max requests per period":"Nombre max de requêtes par période",
"Max requests per period":"Nombre max de requêtes par période",
...
@@ -3541,11 +3544,13 @@
...
@@ -3541,11 +3544,13 @@
"Restore defaults":"Restaurer les paramètres par défaut",
"Restore defaults":"Restaurer les paramètres par défaut",
"Restrict user model request frequency (may impact high concurrency performance)":"Restreindre la fréquence des requêtes du modèle utilisateur (peut impacter les performances en cas de forte concurrence)",
"Restrict user model request frequency (may impact high concurrency performance)":"Restreindre la fréquence des requêtes du modèle utilisateur (peut impacter les performances en cas de forte concurrence)",
"Result":"Résultat",
"Result":"Résultat",
"Request retry":"Relance des requêtes",
"Retain last N days":"Conserver les N derniers jours",
"Retain last N days":"Conserver les N derniers jours",
"Retain last N files":"Conserver les N derniers fichiers",
"Retain last N files":"Conserver les N derniers fichiers",
"Retention days":"Jours de rétention",
"Retention days":"Jours de rétention",
"Retry":"Réessayer",
"Retry":"Réessayer",
"Retry Chain":"Chaîne de tentatives",
"Retry Chain":"Chaîne de tentatives",
"Retry Settings":"Paramètres de relance",
"Retry Suggestion":"Suggestion de relance",
"Retry Suggestion":"Suggestion de relance",
"Retry Times":"Nombre de tentatives",
"Retry Times":"Nombre de tentatives",
"Return a custom error immediately":"Retourner immédiatement une erreur personnalisée",
"Return a custom error immediately":"Retourner immédiatement une erreur personnalisée",
...
@@ -3576,6 +3581,7 @@
...
@@ -3576,6 +3581,7 @@
"Route, auth, and balance check in one place":"Routage, authentification et solde au même endroit",
"Route, auth, and balance check in one place":"Routage, authentification et solde au même endroit",
"Auto-discovers endpoints from the provider":"プロバイダーからエンドポイントを自動検出します",
"Auto-discovers endpoints from the provider":"プロバイダーからエンドポイントを自動検出します",
...
@@ -683,6 +684,7 @@
...
@@ -683,6 +684,7 @@
"Channel Affinity":"チャネルアフィニティ",
"Channel Affinity":"チャネルアフィニティ",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"チャネルアフィニティは、リクエストコンテキストまたは JSON Body から抽出したキーに基づいて、前回成功したチャネルを優先的に再利用します。",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"チャネルアフィニティは、リクエストコンテキストまたは JSON Body から抽出したキーに基づいて、前回成功したチャネルを優先的に再利用します。",
"Auto Group Chain":"Автоматическая цепочка групп",
"Auto Group Chain":"Автоматическая цепочка групп",
"Auto refresh":"Автообновление",
"Auto refresh":"Автообновление",
"Auto Sync Upstream Models":"Автоматическая синхронизация моделей провайдера",
"Auto Sync Upstream Models":"Автоматическая синхронизация моделей провайдера",
"Auto-disable rules":"Правила автоотключения",
"Auto-disable status codes":"Коды автоотключения",
"Auto-disable status codes":"Коды автоотключения",
"Auto-discover":"Автообнаружение",
"Auto-discover":"Автообнаружение",
"Auto-discovers endpoints from the provider":"Автоматически обнаруживает конечные точки от провайдера",
"Auto-discovers endpoints from the provider":"Автоматически обнаруживает конечные точки от провайдера",
...
@@ -683,6 +684,7 @@
...
@@ -683,6 +684,7 @@
"Channel Affinity":"Привязка к каналу",
"Channel Affinity":"Привязка к каналу",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Привязка к каналу повторно использует последний успешный канал на основе ключей, извлечённых из контекста запроса или тела JSON.",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Привязка к каналу повторно использует последний успешный канал на основе ключей, извлечённых из контекста запроса или тела JSON.",
"Channel Affinity: Upstream Cache Hit":"Привязка к каналу: попадание в кэш upstream",
"Channel Affinity: Upstream Cache Hit":"Привязка к каналу: попадание в кэш upstream",
"Channel health checks":"Проверки состояния каналов",
"Channel copied successfully":"Канал успешно скопирован",
"Channel copied successfully":"Канал успешно скопирован",
"Channel created successfully":"Канал успешно создан",
"Channel created successfully":"Канал успешно создан",
"Channel deleted successfully":"Канал успешно удалён",
"Channel deleted successfully":"Канал успешно удалён",
...
@@ -2391,6 +2393,7 @@
...
@@ -2391,6 +2393,7 @@
"Max Disk Cache Size (MB)":"Макс. размер дискового кэша (МБ)",
"Max Disk Cache Size (MB)":"Макс. размер дискового кэша (МБ)",
"Max Requests (including failures)":"Макс. запросов (включая сбои)",
"Max Requests (including failures)":"Макс. запросов (включая сбои)",
"Max requests per period":"Макс. запросов за период",
"Max requests per period":"Макс. запросов за период",
...
@@ -3541,11 +3544,13 @@
...
@@ -3541,11 +3544,13 @@
"Restore defaults":"Сбросить к значениям по умолчанию",
"Restore defaults":"Сбросить к значениям по умолчанию",
"Restrict user model request frequency (may impact high concurrency performance)":"Ограничить частоту запросов пользовательских моделей (может повлиять на производительность при высокой конкуренции)",
"Restrict user model request frequency (may impact high concurrency performance)":"Ограничить частоту запросов пользовательских моделей (может повлиять на производительность при высокой конкуренции)",
"Result":"Результат",
"Result":"Результат",
"Request retry":"Повтор запросов",
"Retain last N days":"Хранить последние N дней",
"Retain last N days":"Хранить последние N дней",
"Retain last N files":"Хранить последние N файлов",
"Retain last N files":"Хранить последние N файлов",
"Retention days":"Дней хранения",
"Retention days":"Дней хранения",
"Retry":"Повторить попытку",
"Retry":"Повторить попытку",
"Retry Chain":"Цепочка повторов",
"Retry Chain":"Цепочка повторов",
"Retry Settings":"Настройки повторов",
"Retry Suggestion":"Рекомендация по повтору",
"Retry Suggestion":"Рекомендация по повтору",
"Retry Times":"Количество повторных попыток",
"Retry Times":"Количество повторных попыток",
"Return a custom error immediately":"Немедленно вернуть пользовательскую ошибку",
"Return a custom error immediately":"Немедленно вернуть пользовательскую ошибку",
...
@@ -3576,6 +3581,7 @@
...
@@ -3576,6 +3581,7 @@
"Route, auth, and balance check in one place":"Маршрут, аутентификация и баланс в одном месте",
"Route, auth, and balance check in one place":"Маршрут, аутентификация и баланс в одном месте",
"Routes":"Маршруты",
"Routes":"Маршруты",
"Routing & Overrides":"Маршрутизация и переопределения",
"Routing & Overrides":"Маршрутизация и переопределения",
"Auto Sync Upstream Models":"Tự động đồng bộ mô hình nguồn",
"Auto Sync Upstream Models":"Tự động đồng bộ mô hình nguồn",
"Auto-disable rules":"Quy tắc tự động tắt",
"Auto-disable status codes":"Mã trạng thái tự tắt",
"Auto-disable status codes":"Mã trạng thái tự tắt",
"Auto-discover":"Tự động khám phá",
"Auto-discover":"Tự động khám phá",
"Auto-discovers endpoints from the provider":"Tự động khám phá các điểm cuối từ nhà cung cấp",
"Auto-discovers endpoints from the provider":"Tự động khám phá các điểm cuối từ nhà cung cấp",
...
@@ -683,6 +684,7 @@
...
@@ -683,6 +684,7 @@
"Channel Affinity":"Ưu tiên kênh",
"Channel Affinity":"Ưu tiên kênh",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Ưu tiên kênh sẽ sử dụng lại kênh thành công gần nhất dựa trên các khóa được trích xuất từ ngữ cảnh yêu cầu hoặc JSON body.",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Ưu tiên kênh sẽ sử dụng lại kênh thành công gần nhất dựa trên các khóa được trích xuất từ ngữ cảnh yêu cầu hoặc JSON body.",
"Channel Affinity: Upstream Cache Hit":"Ưu tiên kênh: Cache hit từ upstream",
"Channel Affinity: Upstream Cache Hit":"Ưu tiên kênh: Cache hit từ upstream",
"Channel health checks":"Kiểm tra tình trạng kênh",
"Channel copied successfully":"Sao chép kênh thành công",
"Channel copied successfully":"Sao chép kênh thành công",
"Channel created successfully":"Tạo kênh thành công",
"Channel created successfully":"Tạo kênh thành công",
"Channel deleted successfully":"Xóa kênh thành công",
"Channel deleted successfully":"Xóa kênh thành công",
...
@@ -2391,6 +2393,7 @@
...
@@ -2391,6 +2393,7 @@
"Max Disk Cache Size (MB)":"Dung lượng tối đa bộ nhớ đệm đĩa (MB)",
"Max Disk Cache Size (MB)":"Dung lượng tối đa bộ nhớ đệm đĩa (MB)",
"Max Entries":"Số mục tối đa",
"Max Entries":"Số mục tối đa",
"Max output":"Đầu ra tối đa",
"Max output":"Đầu ra tối đa",
"Max Retries":"Số lần thử lại tối đa",
"Max Requests (incl. failures)":"Maximum number of requests (including errors)",
"Max Requests (incl. failures)":"Maximum number of requests (including errors)",
"Max Requests (including failures)":"Số yêu cầu tối đa (bao gồm cả các lỗi)",
"Max Requests (including failures)":"Số yêu cầu tối đa (bao gồm cả các lỗi)",
"Max requests per period":"Yêu cầu tối đa mỗi khoảng thời gian",
"Max requests per period":"Yêu cầu tối đa mỗi khoảng thời gian",
...
@@ -3541,11 +3544,13 @@
...
@@ -3541,11 +3544,13 @@
"Restore defaults":"Khôi phục mặc định",
"Restore defaults":"Khôi phục mặc định",
"Restrict user model request frequency (may impact high concurrency performance)":"Hạn chế tần suất yêu cầu mô hình người dùng (có thể ảnh hưởng đến hiệu suất khi có độ đồng thời cao)",
"Restrict user model request frequency (may impact high concurrency performance)":"Hạn chế tần suất yêu cầu mô hình người dùng (có thể ảnh hưởng đến hiệu suất khi có độ đồng thời cao)",
"Result":"Kết quả",
"Result":"Kết quả",
"Request retry":"Thử lại yêu cầu",
"Retain last N days":"Giữ lại N ngày gần nhất",
"Retain last N days":"Giữ lại N ngày gần nhất",
"Retain last N files":"Giữ lại N tệp gần nhất",
"Retain last N files":"Giữ lại N tệp gần nhất",
"Retention days":"Số ngày lưu giữ",
"Retention days":"Số ngày lưu giữ",
"Retry":"Thử lại",
"Retry":"Thử lại",
"Retry Chain":"Chuỗi thử lại",
"Retry Chain":"Chuỗi thử lại",
"Retry Settings":"Cài đặt thử lại",
"Retry Suggestion":"Gợi ý thử lại",
"Retry Suggestion":"Gợi ý thử lại",
"Retry Times":"Số lần thử lại",
"Retry Times":"Số lần thử lại",
"Return a custom error immediately":"Trả về lỗi tùy chỉnh ngay lập tức",
"Return a custom error immediately":"Trả về lỗi tùy chỉnh ngay lập tức",
...
@@ -3576,6 +3581,7 @@
...
@@ -3576,6 +3581,7 @@
"Route, auth, and balance check in one place":"Kiểm tra tuyến, xác thực và số dư ở cùng một nơi",
"Route, auth, and balance check in one place":"Kiểm tra tuyến, xác thực và số dư ở cùng một nơi",
"Auto-discovers endpoints from the provider":"自动从提供商发现端点",
"Auto-discovers endpoints from the provider":"自动从提供商发现端点",
...
@@ -683,6 +684,7 @@
...
@@ -683,6 +684,7 @@
"Channel Affinity":"渠道亲和性",
"Channel Affinity":"渠道亲和性",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"渠道亲和性会基于从请求上下文或 JSON Body 提取的 Key,优先复用上一次成功的渠道。",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"渠道亲和性会基于从请求上下文或 JSON Body 提取的 Key,优先复用上一次成功的渠道。",