@kamel-ahmed/proxy-claude 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +622 -0
- package/bin/cli.js +124 -0
- package/package.json +80 -0
- package/public/app.js +228 -0
- package/public/css/src/input.css +523 -0
- package/public/css/style.css +1 -0
- package/public/favicon.svg +10 -0
- package/public/index.html +381 -0
- package/public/js/components/account-manager.js +245 -0
- package/public/js/components/claude-config.js +420 -0
- package/public/js/components/dashboard/charts.js +589 -0
- package/public/js/components/dashboard/filters.js +362 -0
- package/public/js/components/dashboard/stats.js +110 -0
- package/public/js/components/dashboard.js +236 -0
- package/public/js/components/logs-viewer.js +100 -0
- package/public/js/components/models.js +36 -0
- package/public/js/components/server-config.js +349 -0
- package/public/js/config/constants.js +102 -0
- package/public/js/data-store.js +386 -0
- package/public/js/settings-store.js +58 -0
- package/public/js/store.js +78 -0
- package/public/js/translations/en.js +351 -0
- package/public/js/translations/id.js +396 -0
- package/public/js/translations/pt.js +287 -0
- package/public/js/translations/tr.js +342 -0
- package/public/js/translations/zh.js +357 -0
- package/public/js/utils/account-actions.js +189 -0
- package/public/js/utils/error-handler.js +96 -0
- package/public/js/utils/model-config.js +42 -0
- package/public/js/utils/validators.js +77 -0
- package/public/js/utils.js +69 -0
- package/public/views/accounts.html +329 -0
- package/public/views/dashboard.html +484 -0
- package/public/views/logs.html +97 -0
- package/public/views/models.html +331 -0
- package/public/views/settings.html +1329 -0
- package/src/account-manager/credentials.js +243 -0
- package/src/account-manager/index.js +380 -0
- package/src/account-manager/onboarding.js +117 -0
- package/src/account-manager/rate-limits.js +237 -0
- package/src/account-manager/storage.js +136 -0
- package/src/account-manager/strategies/base-strategy.js +104 -0
- package/src/account-manager/strategies/hybrid-strategy.js +195 -0
- package/src/account-manager/strategies/index.js +79 -0
- package/src/account-manager/strategies/round-robin-strategy.js +76 -0
- package/src/account-manager/strategies/sticky-strategy.js +138 -0
- package/src/account-manager/strategies/trackers/health-tracker.js +162 -0
- package/src/account-manager/strategies/trackers/index.js +8 -0
- package/src/account-manager/strategies/trackers/token-bucket-tracker.js +121 -0
- package/src/auth/database.js +169 -0
- package/src/auth/oauth.js +419 -0
- package/src/auth/token-extractor.js +117 -0
- package/src/cli/accounts.js +512 -0
- package/src/cli/refresh.js +201 -0
- package/src/cli/setup.js +338 -0
- package/src/cloudcode/index.js +29 -0
- package/src/cloudcode/message-handler.js +386 -0
- package/src/cloudcode/model-api.js +248 -0
- package/src/cloudcode/rate-limit-parser.js +181 -0
- package/src/cloudcode/request-builder.js +93 -0
- package/src/cloudcode/session-manager.js +47 -0
- package/src/cloudcode/sse-parser.js +121 -0
- package/src/cloudcode/sse-streamer.js +293 -0
- package/src/cloudcode/streaming-handler.js +492 -0
- package/src/config.js +107 -0
- package/src/constants.js +278 -0
- package/src/errors.js +238 -0
- package/src/fallback-config.js +29 -0
- package/src/format/content-converter.js +193 -0
- package/src/format/index.js +20 -0
- package/src/format/request-converter.js +248 -0
- package/src/format/response-converter.js +120 -0
- package/src/format/schema-sanitizer.js +673 -0
- package/src/format/signature-cache.js +88 -0
- package/src/format/thinking-utils.js +558 -0
- package/src/index.js +146 -0
- package/src/modules/usage-stats.js +205 -0
- package/src/server.js +861 -0
- package/src/utils/claude-config.js +245 -0
- package/src/utils/helpers.js +51 -0
- package/src/utils/logger.js +142 -0
- package/src/utils/native-module-helper.js +162 -0
- package/src/webui/index.js +707 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indonesian (Bahasa Indonesia) Translations
|
|
3
|
+
*
|
|
4
|
+
* Panduan Terminologi IT:
|
|
5
|
+
* - Istilah teknis umum tetap dalam bahasa Inggris (OAuth, API, token, proxy, debug, cache, dll.)
|
|
6
|
+
* - Istilah UI umum diterjemahkan (Simpan, Hapus, Batal, dll.)
|
|
7
|
+
* - Pesan error dan status menggunakan campuran yang konsisten
|
|
8
|
+
*/
|
|
9
|
+
window.translations = window.translations || {};
|
|
10
|
+
window.translations.id = {
|
|
11
|
+
// Navigation
|
|
12
|
+
dashboard: "Dashboard",
|
|
13
|
+
models: "Model",
|
|
14
|
+
accounts: "Akun",
|
|
15
|
+
logs: "Log",
|
|
16
|
+
settings: "Pengaturan",
|
|
17
|
+
|
|
18
|
+
// Status
|
|
19
|
+
online: "ONLINE",
|
|
20
|
+
offline: "OFFLINE",
|
|
21
|
+
totalAccounts: "TOTAL AKUN",
|
|
22
|
+
active: "AKTIF",
|
|
23
|
+
operational: "Berjalan Normal",
|
|
24
|
+
rateLimited: "DIBATASI",
|
|
25
|
+
quotasDepleted: "{count}/{total} Kuota Habis",
|
|
26
|
+
quotasDepletedTitle: "KUOTA HABIS",
|
|
27
|
+
outOfTracked: "Dari {total} Terpantau",
|
|
28
|
+
cooldown: "Cooldown",
|
|
29
|
+
|
|
30
|
+
// Search & Filters
|
|
31
|
+
searchPlaceholder: "Cari model...",
|
|
32
|
+
allAccounts: "Semua Akun",
|
|
33
|
+
stat: "STATUS",
|
|
34
|
+
modelIdentity: "IDENTITAS MODEL",
|
|
35
|
+
globalQuota: "KUOTA GLOBAL",
|
|
36
|
+
nextReset: "RESET BERIKUTNYA",
|
|
37
|
+
distribution: "DISTRIBUSI AKUN",
|
|
38
|
+
|
|
39
|
+
// System Configuration
|
|
40
|
+
systemConfig: "Konfigurasi Sistem",
|
|
41
|
+
language: "Bahasa",
|
|
42
|
+
pollingInterval: "Interval Polling",
|
|
43
|
+
maxDisplayLogs: "Maks. Log Ditampilkan",
|
|
44
|
+
showExhausted: "Tampilkan Model Habis",
|
|
45
|
+
showExhaustedDesc: "Tampilkan model meskipun kuotanya sudah 0%.",
|
|
46
|
+
compactMode: "Mode Ringkas",
|
|
47
|
+
compactModeDesc: "Tampilan tabel lebih padat untuk informasi lebih banyak.",
|
|
48
|
+
saveChanges: "Simpan Perubahan",
|
|
49
|
+
|
|
50
|
+
// Logs
|
|
51
|
+
autoScroll: "Auto-scroll",
|
|
52
|
+
clearLogs: "Hapus Log",
|
|
53
|
+
|
|
54
|
+
// Account Management
|
|
55
|
+
accountManagement: "Kelola Akun",
|
|
56
|
+
manageTokens: "Kelola token akun Google dan status otorisasi",
|
|
57
|
+
addAccount: "Tambah Akun",
|
|
58
|
+
status: "STATUS",
|
|
59
|
+
enabled: "AKTIF",
|
|
60
|
+
health: "STATUS",
|
|
61
|
+
accountEmail: "AKUN (EMAIL)",
|
|
62
|
+
source: "SUMBER",
|
|
63
|
+
projectId: "PROJECT ID",
|
|
64
|
+
sessionState: "STATUS SESI",
|
|
65
|
+
operations: "AKSI",
|
|
66
|
+
delete: "Hapus",
|
|
67
|
+
confirmDelete: "Yakin ingin menghapus akun ini?",
|
|
68
|
+
cannotDeleteDatabase: "Tidak bisa dihapus: Akun ini dari database Antigravity (read-only)",
|
|
69
|
+
connectGoogle: "Hubungkan Akun Google",
|
|
70
|
+
reauthenticated: "diautentikasi ulang",
|
|
71
|
+
added: "ditambahkan",
|
|
72
|
+
successfully: "berhasil",
|
|
73
|
+
accountAddedSuccess: "Akun berhasil ditambahkan",
|
|
74
|
+
accountReauthSuccess: "Akun berhasil diautentikasi ulang",
|
|
75
|
+
failedToGetAuthUrl: "Gagal mendapatkan URL autentikasi",
|
|
76
|
+
failedToStartOAuth: "Gagal memulai proses OAuth",
|
|
77
|
+
oauthInProgress: "Proses OAuth sedang berjalan. Silakan selesaikan autentikasi di jendela popup...",
|
|
78
|
+
family: "Jenis",
|
|
79
|
+
model: "Model",
|
|
80
|
+
activeSuffix: "Aktif",
|
|
81
|
+
manualReload: "Muat Ulang Konfigurasi",
|
|
82
|
+
|
|
83
|
+
// Tabs
|
|
84
|
+
tabInterface: "Tampilan",
|
|
85
|
+
tabClaude: "Claude CLI",
|
|
86
|
+
tabModels: "Model",
|
|
87
|
+
tabServer: "Server",
|
|
88
|
+
|
|
89
|
+
// Dashboard
|
|
90
|
+
linkedAccounts: "Akun Terhubung",
|
|
91
|
+
noSignal: "TIDAK ADA SINYAL",
|
|
92
|
+
establishingUplink: "MENGHUBUNGKAN...",
|
|
93
|
+
goToAccounts: "Lihat Akun",
|
|
94
|
+
|
|
95
|
+
// Settings - Models
|
|
96
|
+
modelsDesc: "Atur visibilitas model, pin, dan routing request.",
|
|
97
|
+
modelsPageDesc: "Kuota dan status real-time untuk semua model yang tersedia.",
|
|
98
|
+
showHidden: "Tampilkan Model Tersembunyi",
|
|
99
|
+
hideHidden: "Sembunyikan Model Tersembunyi",
|
|
100
|
+
hiddenOn: "Tersembunyi: YA",
|
|
101
|
+
hiddenOff: "Tersembunyi: TIDAK",
|
|
102
|
+
modelId: "ID Model",
|
|
103
|
+
actions: "Aksi",
|
|
104
|
+
pinToTop: "Pin ke atas",
|
|
105
|
+
toggleVisibility: "Tampilkan/Sembunyikan",
|
|
106
|
+
noModels: "MODEL TIDAK DITEMUKAN",
|
|
107
|
+
modelMappingHint: "Routing model di sisi server. Pengguna Claude Code: lihat tab 'Claude CLI' untuk pengaturan di sisi klien.",
|
|
108
|
+
modelMapping: "Mapping (Target Model ID)",
|
|
109
|
+
|
|
110
|
+
// Settings - Claude
|
|
111
|
+
proxyConnection: "Koneksi Proxy",
|
|
112
|
+
modelSelection: "Pilihan Model",
|
|
113
|
+
defaultModelAliases: "ALIAS MODEL DEFAULT",
|
|
114
|
+
opusAlias: "Alias Opus",
|
|
115
|
+
sonnetAlias: "Alias Sonnet",
|
|
116
|
+
haikuAlias: "Alias Haiku",
|
|
117
|
+
claudeSettingsAlertPrefix: "Pengaturan di bawah langsung mengubah",
|
|
118
|
+
claudeSettingsAlertSuffix: "Restart Claude CLI untuk menerapkan.",
|
|
119
|
+
applyToClaude: "Simpan ke Claude CLI",
|
|
120
|
+
|
|
121
|
+
// Presets
|
|
122
|
+
configPresets: "Preset Konfigurasi",
|
|
123
|
+
saveAsPreset: "Simpan sebagai Preset",
|
|
124
|
+
deletePreset: "Hapus Preset",
|
|
125
|
+
loadPreset: "Muat preset",
|
|
126
|
+
load: "Muat",
|
|
127
|
+
presetHint: "Pilih preset untuk dimuat. Klik \"Simpan ke Claude CLI\" untuk menyimpan.",
|
|
128
|
+
presetLoaded: "Preset dimuat. Klik \"Simpan ke Claude CLI\" untuk menyimpan.",
|
|
129
|
+
presetSaved: "Preset tersimpan",
|
|
130
|
+
presetDeleted: "Preset terhapus",
|
|
131
|
+
unsavedChangesTitle: "Ada Perubahan Belum Disimpan",
|
|
132
|
+
unsavedChangesMessage: "Konfigurasi saat ini tidak cocok dengan preset tersimpan. Jika beralih, perubahan akan hilang.",
|
|
133
|
+
loadAnyway: "Tetap Muat",
|
|
134
|
+
savePresetTitle: "Simpan Preset",
|
|
135
|
+
savePresetDesc: "Simpan konfigurasi saat ini sebagai preset.",
|
|
136
|
+
presetName: "Nama Preset",
|
|
137
|
+
presetNamePlaceholder: "contoh: Setup Kantor",
|
|
138
|
+
savePreset: "Simpan Preset",
|
|
139
|
+
|
|
140
|
+
// Settings - Server
|
|
141
|
+
port: "Port",
|
|
142
|
+
uiVersion: "Versi UI",
|
|
143
|
+
debugMode: "Mode Debug",
|
|
144
|
+
environment: "Environment",
|
|
145
|
+
serverReadOnly: "Pengaturan dikelola melalui config.json. Restart server untuk menerapkan.",
|
|
146
|
+
advancedSettings: "Pengaturan Lanjutan",
|
|
147
|
+
reloadConfigTitle: "Muat Ulang Konfigurasi Akun",
|
|
148
|
+
reloadConfigDesc: "Paksa muat ulang accounts.json dari disk",
|
|
149
|
+
reload: "Muat Ulang",
|
|
150
|
+
|
|
151
|
+
// Config Specific
|
|
152
|
+
primaryModel: "Model Utama",
|
|
153
|
+
subAgentModel: "Model Sub-agent",
|
|
154
|
+
advancedOverrides: "Timpa Model Default",
|
|
155
|
+
opusModel: "Model Opus",
|
|
156
|
+
sonnetModel: "Model Sonnet",
|
|
157
|
+
haikuModel: "Model Haiku",
|
|
158
|
+
authToken: "Token Auth",
|
|
159
|
+
saveConfig: "Simpan ke Claude CLI",
|
|
160
|
+
envVar: "Env",
|
|
161
|
+
|
|
162
|
+
// System
|
|
163
|
+
systemName: "ANTIGRAVITY",
|
|
164
|
+
systemDesc: "CLAUDE PROXY SYSTEM",
|
|
165
|
+
connectGoogleDesc: "Hubungkan akun Google Workspace untuk meningkatkan kuota API. Akun akan digunakan untuk meneruskan request Claude via Antigravity.",
|
|
166
|
+
useCliCommand: "Gunakan Perintah CLI",
|
|
167
|
+
close: "Tutup",
|
|
168
|
+
requestVolume: "Volume Request",
|
|
169
|
+
filter: "Filter",
|
|
170
|
+
all: "Semua",
|
|
171
|
+
none: "Tidak Ada",
|
|
172
|
+
noDataTracked: "Belum ada data tercatat",
|
|
173
|
+
selectFamilies: "Pilih jenis model untuk ditampilkan",
|
|
174
|
+
selectModels: "Pilih model untuk ditampilkan",
|
|
175
|
+
noLogsMatch: "Tidak ada log yang sesuai filter",
|
|
176
|
+
connecting: "MENGHUBUNGKAN",
|
|
177
|
+
main: "Utama",
|
|
178
|
+
system: "Sistem",
|
|
179
|
+
refreshData: "Refresh Data",
|
|
180
|
+
connectionLost: "Koneksi Terputus",
|
|
181
|
+
lastUpdated: "Terakhir Diperbarui",
|
|
182
|
+
grepLogs: "cari log...",
|
|
183
|
+
noMatchingModels: "Tidak ada model yang cocok",
|
|
184
|
+
typeToSearch: "Ketik untuk mencari...",
|
|
185
|
+
or: "ATAU",
|
|
186
|
+
|
|
187
|
+
// Account Operations
|
|
188
|
+
refreshingAccount: "Memperbarui {email}...",
|
|
189
|
+
refreshedAccount: "{email} berhasil diperbarui",
|
|
190
|
+
refreshFailed: "Gagal memperbarui",
|
|
191
|
+
accountToggled: "Akun {email} {status}",
|
|
192
|
+
toggleFailed: "Gagal mengubah status",
|
|
193
|
+
reauthenticating: "Autentikasi ulang {email}...",
|
|
194
|
+
authUrlFailed: "Gagal mendapatkan URL autentikasi",
|
|
195
|
+
deletedAccount: "{email} berhasil dihapus",
|
|
196
|
+
deleteFailed: "Gagal menghapus",
|
|
197
|
+
accountsReloaded: "Akun berhasil dimuat ulang",
|
|
198
|
+
reloadFailed: "Gagal memuat ulang",
|
|
199
|
+
|
|
200
|
+
// Claude Config
|
|
201
|
+
claudeConfigSaved: "Konfigurasi Claude tersimpan",
|
|
202
|
+
claudeConfigRestored: "Claude CLI dikembalikan ke default",
|
|
203
|
+
saveConfigFailed: "Gagal menyimpan konfigurasi",
|
|
204
|
+
restoreConfigFailed: "Gagal mengembalikan konfigurasi",
|
|
205
|
+
restoreDefault: "Reset ke Default",
|
|
206
|
+
confirmRestoreTitle: "Konfirmasi Reset",
|
|
207
|
+
confirmRestoreMessage: "Yakin ingin mengembalikan Claude CLI ke pengaturan default? Konfigurasi proxy akan dihapus.",
|
|
208
|
+
confirmRestore: "Ya, Reset",
|
|
209
|
+
|
|
210
|
+
// Status Labels
|
|
211
|
+
claudeActive: "Claude Aktif",
|
|
212
|
+
claudeEmpty: "Claude Kosong",
|
|
213
|
+
geminiActive: "Gemini Aktif",
|
|
214
|
+
geminiEmpty: "Gemini Kosong",
|
|
215
|
+
synced: "SINKRON",
|
|
216
|
+
syncing: "SINKRONISASI...",
|
|
217
|
+
|
|
218
|
+
// Time range labels
|
|
219
|
+
last1Hour: "1 Jam Terakhir",
|
|
220
|
+
last6Hours: "6 Jam Terakhir",
|
|
221
|
+
last24Hours: "24 Jam Terakhir",
|
|
222
|
+
last7Days: "7 Hari Terakhir",
|
|
223
|
+
allTime: "Semua Waktu",
|
|
224
|
+
groupBy: "Kelompokkan",
|
|
225
|
+
|
|
226
|
+
// Additional
|
|
227
|
+
reloading: "Memuat ulang...",
|
|
228
|
+
reloaded: "Dimuat ulang",
|
|
229
|
+
lines: "baris",
|
|
230
|
+
enabledSeeLogs: "Aktif (Lihat Log)",
|
|
231
|
+
production: "Produksi",
|
|
232
|
+
configSaved: "Konfigurasi Tersimpan",
|
|
233
|
+
enterPassword: "Masukkan Password Web UI:",
|
|
234
|
+
ready: "SIAP",
|
|
235
|
+
depleted: "Habis",
|
|
236
|
+
timeH: "j",
|
|
237
|
+
timeM: "m",
|
|
238
|
+
familyClaude: "Claude",
|
|
239
|
+
familyGemini: "Gemini",
|
|
240
|
+
familyOther: "Lainnya",
|
|
241
|
+
enabledStatus: "diaktifkan",
|
|
242
|
+
disabledStatus: "dinonaktifkan",
|
|
243
|
+
logLevelInfo: "INFO",
|
|
244
|
+
logLevelSuccess: "OK",
|
|
245
|
+
logLevelWarn: "WARN",
|
|
246
|
+
logLevelError: "ERROR",
|
|
247
|
+
totalColon: "Total:",
|
|
248
|
+
todayColon: "Hari Ini:",
|
|
249
|
+
hour1Colon: "1j:",
|
|
250
|
+
frequentModels: "Sering Dipakai",
|
|
251
|
+
smartTitle: "Otomatis pilih 5 model paling sering dipakai (24 jam)",
|
|
252
|
+
activeCount: "{count} Aktif",
|
|
253
|
+
allCaps: "SEMUA",
|
|
254
|
+
claudeCaps: "CLAUDE",
|
|
255
|
+
geminiCaps: "GEMINI",
|
|
256
|
+
|
|
257
|
+
// System Info
|
|
258
|
+
systemInfo: "Informasi Sistem",
|
|
259
|
+
refresh: "Refresh",
|
|
260
|
+
runtimeConfig: "Konfigurasi Runtime",
|
|
261
|
+
debugDesc: "Aktifkan log detail (Lihat tab Log)",
|
|
262
|
+
networkRetry: "Pengaturan Retry Jaringan",
|
|
263
|
+
maxRetries: "Maks. Retry",
|
|
264
|
+
retryBaseDelay: "Jeda Awal Retry (ms)",
|
|
265
|
+
retryMaxDelay: "Jeda Maks. Retry (ms)",
|
|
266
|
+
persistentSessions: "Sesi Persisten",
|
|
267
|
+
persistTokenDesc: "Simpan sesi OAuth ke disk agar startup lebih cepat",
|
|
268
|
+
rateLimiting: "Rate Limiting & Timeout Akun",
|
|
269
|
+
defaultCooldown: "Cooldown Default",
|
|
270
|
+
defaultCooldownDesc: "Cooldown bawaan jika API tidak memberikan waktu reset.",
|
|
271
|
+
maxWaitThreshold: "Batas Tunggu Maksimal",
|
|
272
|
+
maxWaitDesc: "Jika semua akun terkena rate limit lebih lama dari ini, langsung gagal.",
|
|
273
|
+
// Error Handling Tuning
|
|
274
|
+
errorHandlingTuning: "Penyetelan Penanganan Error",
|
|
275
|
+
rateLimitDedupWindow: "Jendela Deduplikasi Rate Limit",
|
|
276
|
+
rateLimitDedupWindowDesc: "Mencegah badai retry ketika beberapa permintaan terkena rate limit bersamaan.",
|
|
277
|
+
maxConsecutiveFailures: "Maks. Kegagalan Berturut-turut",
|
|
278
|
+
maxConsecutiveFailuresDesc: "Jumlah kegagalan berturut-turut sebelum menerapkan cooldown diperpanjang.",
|
|
279
|
+
extendedCooldown: "Cooldown Diperpanjang",
|
|
280
|
+
extendedCooldownDesc: "Durasi cooldown setelah mencapai maks. kegagalan berturut-turut.",
|
|
281
|
+
capacityRetryDelay: "Jeda Retry Kapasitas",
|
|
282
|
+
capacityRetryDelayDesc: "Jeda sebelum retry saat kapasitas model habis (bukan kuota).",
|
|
283
|
+
maxCapacityRetries: "Maks. Retry Kapasitas",
|
|
284
|
+
maxCapacityRetriesDesc: "Maksimum retry untuk kehabisan kapasitas sebelum ganti akun.",
|
|
285
|
+
saveConfigServer: "Simpan Konfigurasi",
|
|
286
|
+
serverRestartAlert: "Tersimpan ke {path}. Restart server untuk menerapkan.",
|
|
287
|
+
|
|
288
|
+
// Password
|
|
289
|
+
changePassword: "Ubah Password WebUI",
|
|
290
|
+
changePasswordDesc: "Ubah password untuk akses dashboard ini",
|
|
291
|
+
currentPassword: "Password Saat Ini",
|
|
292
|
+
newPassword: "Password Baru",
|
|
293
|
+
confirmNewPassword: "Konfirmasi Password Baru",
|
|
294
|
+
passwordEmptyDesc: "Kosongkan jika belum ada password",
|
|
295
|
+
passwordLengthDesc: "Minimal 6 karakter",
|
|
296
|
+
passwordConfirmDesc: "Masukkan ulang password baru",
|
|
297
|
+
cancel: "Batal",
|
|
298
|
+
passwordsNotMatch: "Password tidak cocok",
|
|
299
|
+
passwordTooShort: "Password minimal 6 karakter",
|
|
300
|
+
|
|
301
|
+
// Dashboard drill-down
|
|
302
|
+
clickToViewAllAccounts: "Klik untuk lihat semua akun",
|
|
303
|
+
clickToViewModels: "Klik untuk lihat halaman Model",
|
|
304
|
+
clickToViewLimitedAccounts: "Klik untuk lihat akun yang dibatasi",
|
|
305
|
+
clickToFilterClaude: "Klik untuk filter model Claude",
|
|
306
|
+
clickToFilterGemini: "Klik untuk filter model Gemini",
|
|
307
|
+
|
|
308
|
+
// Accounts page
|
|
309
|
+
searchAccounts: "Cari akun...",
|
|
310
|
+
noAccountsYet: "Belum Ada Akun",
|
|
311
|
+
noAccountsDesc: "Mulai dengan menambahkan akun Google via OAuth, atau gunakan perintah CLI untuk import kredensial.",
|
|
312
|
+
addFirstAccount: "Tambah Akun Pertama",
|
|
313
|
+
noSearchResults: "Tidak ada akun yang cocok",
|
|
314
|
+
clearSearch: "Reset Pencarian",
|
|
315
|
+
disabledAccountsNote: "<strong>Akun nonaktif</strong> tidak akan digunakan untuk routing tapi tetap tersimpan di konfigurasi. Statistik dashboard hanya mencakup akun aktif.",
|
|
316
|
+
dangerousOperation: "⚠️ Operasi Berbahaya",
|
|
317
|
+
confirmDeletePrompt: "Yakin ingin menghapus akun",
|
|
318
|
+
deleteWarning: "⚠️ Tindakan ini tidak bisa dibatalkan. Semua pengaturan dan riwayat akan dihapus permanen.",
|
|
319
|
+
|
|
320
|
+
// OAuth progress
|
|
321
|
+
oauthWaiting: "Menunggu otorisasi OAuth...",
|
|
322
|
+
oauthWaitingDesc: "Silakan selesaikan autentikasi di jendela popup. Proses ini bisa memakan waktu hingga 2 menit.",
|
|
323
|
+
oauthCancelled: "Otorisasi OAuth dibatalkan",
|
|
324
|
+
oauthTimeout: "⏱️ Waktu otorisasi OAuth habis. Silakan coba lagi.",
|
|
325
|
+
oauthWindowClosed: "Jendela OAuth ditutup. Otorisasi mungkin tidak lengkap.",
|
|
326
|
+
cancelOAuth: "Batal",
|
|
327
|
+
|
|
328
|
+
// MCP CLI & Gemini 1M
|
|
329
|
+
mcpCliExperimental: "MCP CLI (Eksperimental)",
|
|
330
|
+
mcpCliDesc: "Aktifkan integrasi MCP eksperimental untuk penggunaan tool yang lebih stabil dengan konsumsi konteks lebih rendah.",
|
|
331
|
+
gemini1mMode: "Mode Konteks Gemini 1M",
|
|
332
|
+
gemini1mDesc: "Tambahkan suffix [1m] ke model Gemini untuk context window 1M.",
|
|
333
|
+
gemini1mWarning: "⚠ Konteks besar dapat menurunkan performa Gemini-3-Pro.",
|
|
334
|
+
clickToSet: "Klik untuk atur...",
|
|
335
|
+
|
|
336
|
+
// Quota Distribution
|
|
337
|
+
quotaDistribution: "Distribusi Kuota",
|
|
338
|
+
resetsIn: "Reset dalam {time}",
|
|
339
|
+
noQuotaData: "Data kuota belum tersedia untuk akun ini.",
|
|
340
|
+
|
|
341
|
+
// Completed TODOs
|
|
342
|
+
pageTitle: "Antigravity Console",
|
|
343
|
+
live: "Live",
|
|
344
|
+
tier: "Tier",
|
|
345
|
+
quota: "Kuota",
|
|
346
|
+
tierUltra: "Ultra",
|
|
347
|
+
tierPro: "Pro",
|
|
348
|
+
tierFree: "Gratis",
|
|
349
|
+
menu: "Menu",
|
|
350
|
+
github: "GitHub",
|
|
351
|
+
noData: "Tidak ada data",
|
|
352
|
+
fix: "Perbaiki",
|
|
353
|
+
|
|
354
|
+
// Error Messages
|
|
355
|
+
operationFailed: "Operasi gagal",
|
|
356
|
+
unknownError: "Error tidak diketahui",
|
|
357
|
+
presetNameRequired: "Nama preset wajib diisi",
|
|
358
|
+
saveFailed: "Gagal menyimpan",
|
|
359
|
+
failedToSavePreset: "Gagal menyimpan preset",
|
|
360
|
+
noPresetSelected: "Tidak ada preset dipilih",
|
|
361
|
+
deletePresetConfirm: "Hapus preset \"{name}\"?",
|
|
362
|
+
deleteFailed: "Gagal menghapus",
|
|
363
|
+
failedToDeletePreset: "Gagal menghapus preset",
|
|
364
|
+
failedToChangePassword: "Gagal mengubah password",
|
|
365
|
+
passwordChangedSuccess: "Password berhasil diubah",
|
|
366
|
+
debugModeToggled: "Mode debug {status}",
|
|
367
|
+
tokenCacheToggled: "Cache token {status}",
|
|
368
|
+
failedToUpdateTokenCache: "Gagal memperbarui cache token",
|
|
369
|
+
failedToUpdateDebugMode: "Gagal memperbarui mode debug",
|
|
370
|
+
failedToRefreshAccount: "Gagal memperbarui akun",
|
|
371
|
+
failedToDeleteAccount: "Gagal menghapus akun",
|
|
372
|
+
failedToReloadAccounts: "Gagal memuat ulang akun",
|
|
373
|
+
failedToUpdateModelConfig: "Gagal memperbarui konfigurasi model",
|
|
374
|
+
fieldUpdated: "{displayName} diubah menjadi {value}",
|
|
375
|
+
failedToUpdateField: "Gagal memperbarui {displayName}",
|
|
376
|
+
|
|
377
|
+
// Validation
|
|
378
|
+
mustBeValidNumber: "{fieldName} harus berupa angka valid",
|
|
379
|
+
mustBeAtLeast: "{fieldName} minimal {min}",
|
|
380
|
+
mustBeAtMost: "{fieldName} maksimal {max}",
|
|
381
|
+
cannotBeEmpty: "{fieldName} tidak boleh kosong",
|
|
382
|
+
mustBeTrueOrFalse: "Nilai harus true atau false",
|
|
383
|
+
|
|
384
|
+
// Account Selection Strategy translations
|
|
385
|
+
accountSelectionStrategy: "Strategi Pemilihan Akun",
|
|
386
|
+
selectionStrategy: "Strategi Pemilihan",
|
|
387
|
+
strategyStickyLabel: "Tetap (Optimisasi Cache)",
|
|
388
|
+
strategyRoundRobinLabel: "Bergilir (Load Balanced)",
|
|
389
|
+
strategyHybridLabel: "Hibrida (Distribusi Cerdas)",
|
|
390
|
+
strategyStickyDesc: "Tetap di akun yang sama hingga terkena rate limit. Terbaik untuk cache prompt.",
|
|
391
|
+
strategyRoundRobinDesc: "Berputar ke akun berikutnya setiap permintaan. Throughput maksimum.",
|
|
392
|
+
strategyHybridDesc: "Pemilihan cerdas berdasarkan kesehatan, token, dan kesegaran.",
|
|
393
|
+
strategyUpdated: "Strategi diubah ke: {strategy}",
|
|
394
|
+
failedToUpdateStrategy: "Gagal memperbarui strategi",
|
|
395
|
+
invalidStrategy: "Strategi tidak valid dipilih",
|
|
396
|
+
};
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portuguese (PT-BR) Translations
|
|
3
|
+
* Based on contribution by Pedro Farias in PR #108
|
|
4
|
+
*/
|
|
5
|
+
window.translations = window.translations || {};
|
|
6
|
+
window.translations.pt = {
|
|
7
|
+
dashboard: "Painel",
|
|
8
|
+
models: "Modelos",
|
|
9
|
+
accounts: "Contas",
|
|
10
|
+
logs: "Logs",
|
|
11
|
+
settings: "Configurações",
|
|
12
|
+
online: "ONLINE",
|
|
13
|
+
offline: "OFFLINE",
|
|
14
|
+
totalAccounts: "TOTAL DE CONTAS",
|
|
15
|
+
active: "ATIVO",
|
|
16
|
+
operational: "Operacional",
|
|
17
|
+
rateLimited: "TAXA LIMITADA",
|
|
18
|
+
quotasDepleted: "{count}/{total} Cotas Esgotadas",
|
|
19
|
+
quotasDepletedTitle: "COTAS ESGOTADAS",
|
|
20
|
+
outOfTracked: "De {total} Rastreados",
|
|
21
|
+
cooldown: "Resfriamento",
|
|
22
|
+
searchPlaceholder: "Buscar modelos...",
|
|
23
|
+
allAccounts: "Todas as Contas",
|
|
24
|
+
stat: "ESTATÍSTICA",
|
|
25
|
+
modelIdentity: "IDENTIDADE DO MODELO",
|
|
26
|
+
globalQuota: "COTA GLOBAL",
|
|
27
|
+
nextReset: "PRÓXIMO RESET",
|
|
28
|
+
distribution: "DISTRIBUIÇÃO DE CONTAS",
|
|
29
|
+
systemConfig: "Configuração do Sistema",
|
|
30
|
+
language: "Idioma",
|
|
31
|
+
pollingInterval: "Intervalo de Atualização",
|
|
32
|
+
maxDisplayLogs: "Máximo de Logs Exibidos",
|
|
33
|
+
showExhausted: "Mostrar Modelos Esgotados",
|
|
34
|
+
showExhaustedDesc: "Exibir modelos mesmo se tiverem 0% de cota restante.",
|
|
35
|
+
compactMode: "Modo Compacto",
|
|
36
|
+
compactModeDesc: "Reduzir espaçamento nas tabelas para maior densidade de informação.",
|
|
37
|
+
saveChanges: "Salvar Alterações",
|
|
38
|
+
autoScroll: "Rolagem Automática",
|
|
39
|
+
clearLogs: "Limpar Logs",
|
|
40
|
+
accountManagement: "Gerenciamento de Contas",
|
|
41
|
+
manageTokens: "Gerenciar tokens e estados de autorização de Contas Google",
|
|
42
|
+
addAccount: "Adicionar Conta",
|
|
43
|
+
status: "STATUS",
|
|
44
|
+
enabled: "HABILITADO",
|
|
45
|
+
health: "SAÚDE",
|
|
46
|
+
accountEmail: "CONTA (EMAIL)",
|
|
47
|
+
source: "FONTE",
|
|
48
|
+
projectId: "ID DO PROJETO",
|
|
49
|
+
sessionState: "ESTADO DA SESSÃO",
|
|
50
|
+
operations: "OPERAÇÕES",
|
|
51
|
+
delete: "Excluir",
|
|
52
|
+
confirmDelete: "Tem certeza de que deseja remover esta conta?",
|
|
53
|
+
cannotDeleteDatabase: "Não é possível excluir: Esta conta é do banco de dados Antigravity (somente leitura)",
|
|
54
|
+
connectGoogle: "Conectar Conta Google",
|
|
55
|
+
reauthenticated: "reautenticado",
|
|
56
|
+
added: "adicionado",
|
|
57
|
+
successfully: "com sucesso",
|
|
58
|
+
accountAddedSuccess: "Conta adicionada com sucesso",
|
|
59
|
+
accountReauthSuccess: "Conta reautenticada com sucesso",
|
|
60
|
+
failedToGetAuthUrl: "Falha ao obter URL de autenticação",
|
|
61
|
+
failedToStartOAuth: "Falha ao iniciar fluxo OAuth",
|
|
62
|
+
oauthInProgress: "OAuth em andamento. Por favor, conclua a autenticação na janela popup...",
|
|
63
|
+
family: "Família",
|
|
64
|
+
model: "Modelo",
|
|
65
|
+
activeSuffix: "Ativo",
|
|
66
|
+
// Tabs
|
|
67
|
+
tabInterface: "Interface",
|
|
68
|
+
tabClaude: "Claude CLI",
|
|
69
|
+
tabModels: "Modelos",
|
|
70
|
+
tabServer: "Configurações do Servidor",
|
|
71
|
+
// Dashboard
|
|
72
|
+
linkedAccounts: "Contas Vinculadas",
|
|
73
|
+
noSignal: "SEM SINAL DETECTADO",
|
|
74
|
+
establishingUplink: "ESTABELECENDO LINK...",
|
|
75
|
+
goToAccounts: "Ir para Contas",
|
|
76
|
+
// Settings - Models
|
|
77
|
+
modelsDesc: "Configurar visibilidade, fixação e roteamento de requisições de modelos.",
|
|
78
|
+
modelsPageDesc: "Cota e status em tempo real para todos os modelos disponíveis.",
|
|
79
|
+
showHidden: "Mostrar Modelos Ocultos",
|
|
80
|
+
modelId: "ID do Modelo",
|
|
81
|
+
actions: "Ações",
|
|
82
|
+
pinToTop: "Fixar no topo",
|
|
83
|
+
toggleVisibility: "Alternar Visibilidade",
|
|
84
|
+
noModels: "NENHUM MODELO DETECTADO",
|
|
85
|
+
modelMappingHint: "Roteamento de modelo no servidor. Usuários do Claude Code: veja a aba 'Claude CLI' para configuração no cliente.",
|
|
86
|
+
modelMapping: "Mapeamento (ID do Modelo Alvo)",
|
|
87
|
+
// Settings - Claude
|
|
88
|
+
proxyConnection: "Conexão Proxy",
|
|
89
|
+
modelSelection: "Seleção de Modelo",
|
|
90
|
+
defaultModelAliases: "ALIASES DE MODELO PADRÃO",
|
|
91
|
+
opusAlias: "Alias Opus",
|
|
92
|
+
sonnetAlias: "Alias Sonnet",
|
|
93
|
+
haikuAlias: "Alias Haiku",
|
|
94
|
+
claudeSettingsAlertPrefix: "As configurações abaixo modificam diretamente",
|
|
95
|
+
claudeSettingsAlertSuffix: "Reinicie o Claude CLI para aplicar.",
|
|
96
|
+
applyToClaude: "Aplicar ao Claude CLI",
|
|
97
|
+
// Settings - Server
|
|
98
|
+
port: "Porta",
|
|
99
|
+
uiVersion: "Versão da UI",
|
|
100
|
+
debugMode: "Modo de Depuração",
|
|
101
|
+
environment: "Ambiente",
|
|
102
|
+
serverReadOnly: "Configurações gerenciadas via config.json. Reinicie o servidor para aplicar alterações.",
|
|
103
|
+
advancedSettings: "Configurações Avançadas",
|
|
104
|
+
reloadConfigTitle: "Recarregar Config de Contas",
|
|
105
|
+
reloadConfigDesc: "Forçar recarregamento de accounts.json do disco",
|
|
106
|
+
reload: "Recarregar",
|
|
107
|
+
// Config Specific
|
|
108
|
+
primaryModel: "Modelo Primário",
|
|
109
|
+
subAgentModel: "Modelo Sub-agente",
|
|
110
|
+
advancedOverrides: "Substituições de Modelo Padrão",
|
|
111
|
+
opusModel: "Modelo Opus",
|
|
112
|
+
sonnetModel: "Modelo Sonnet",
|
|
113
|
+
haikuModel: "Modelo Haiku",
|
|
114
|
+
authToken: "Token de Autenticação",
|
|
115
|
+
saveConfig: "Salvar nas configurações do Claude CLI",
|
|
116
|
+
envVar: "Env",
|
|
117
|
+
// New Keys
|
|
118
|
+
systemName: "ANTIGRAVITY",
|
|
119
|
+
systemDesc: "SISTEMA DE PROXY CLAUDE",
|
|
120
|
+
connectGoogleDesc: "Conecte uma conta Google Workspace para aumentar seu limite de cota da API. A conta será usada para fazer proxy das requisições Claude via Antigravity.",
|
|
121
|
+
useCliCommand: "Usar Comando CLI",
|
|
122
|
+
close: "Fechar",
|
|
123
|
+
requestVolume: "Volume de Requisições",
|
|
124
|
+
filter: "Filtrar",
|
|
125
|
+
all: "Todos",
|
|
126
|
+
none: "Nenhum",
|
|
127
|
+
noDataTracked: "Nenhum dado rastreado ainda",
|
|
128
|
+
selectFamilies: "Selecione famílias para exibir",
|
|
129
|
+
selectModels: "Selecione modelos para exibir",
|
|
130
|
+
noLogsMatch: "Nenhum log corresponde ao filtro",
|
|
131
|
+
connecting: "CONECTANDO",
|
|
132
|
+
main: "Principal",
|
|
133
|
+
system: "Sistema",
|
|
134
|
+
refreshData: "Atualizar Dados",
|
|
135
|
+
connectionLost: "Conexão Perdida",
|
|
136
|
+
lastUpdated: "Última Atualização",
|
|
137
|
+
grepLogs: "grep logs...",
|
|
138
|
+
noMatchingModels: "Nenhum modelo correspondente",
|
|
139
|
+
typeToSearch: "Digite para buscar ou selecione...",
|
|
140
|
+
or: "OU",
|
|
141
|
+
refreshingAccount: "Atualizando {email}...",
|
|
142
|
+
refreshedAccount: "Atualizado {email}",
|
|
143
|
+
refreshFailed: "Falha na atualização",
|
|
144
|
+
accountToggled: "Conta {email} {status}",
|
|
145
|
+
toggleFailed: "Falha ao alternar",
|
|
146
|
+
reauthenticating: "Reautenticando {email}...",
|
|
147
|
+
authUrlFailed: "Falha ao obter URL de autenticação",
|
|
148
|
+
deletedAccount: "Excluído {email}",
|
|
149
|
+
deleteFailed: "Falha ao excluir",
|
|
150
|
+
accountsReloaded: "Contas recarregadas",
|
|
151
|
+
reloadFailed: "Falha ao recarregar",
|
|
152
|
+
claudeConfigSaved: "Configuração do Claude salva",
|
|
153
|
+
claudeConfigRestored: "Claude CLI restaurado para o padrão",
|
|
154
|
+
saveConfigFailed: "Falha ao salvar configuração",
|
|
155
|
+
restoreConfigFailed: "Falha ao restaurar configuração",
|
|
156
|
+
restoreDefault: "Restaurar Padrão",
|
|
157
|
+
confirmRestoreTitle: "Confirmar Restauração",
|
|
158
|
+
confirmRestoreMessage: "Tem certeza de que deseja restaurar o Claude CLI para as configurações padrão? Isso removerá a configuração de proxy.",
|
|
159
|
+
confirmRestore: "Confirmar Restauração",
|
|
160
|
+
claudeActive: "Claude Ativo",
|
|
161
|
+
claudeEmpty: "Claude Vazio",
|
|
162
|
+
geminiActive: "Gemini Ativo",
|
|
163
|
+
geminiEmpty: "Gemini Vazio",
|
|
164
|
+
synced: "SINCRONIZADO",
|
|
165
|
+
syncing: "SINCRONIZANDO...",
|
|
166
|
+
// Time range labels
|
|
167
|
+
last1Hour: "Última 1H",
|
|
168
|
+
last6Hours: "Últimas 6H",
|
|
169
|
+
last24Hours: "Últimas 24H",
|
|
170
|
+
last7Days: "Últimos 7D",
|
|
171
|
+
allTime: "Todo o Período",
|
|
172
|
+
groupBy: "Agrupar Por",
|
|
173
|
+
// Additional
|
|
174
|
+
reloading: "Recarregando...",
|
|
175
|
+
reloaded: "Recarregado",
|
|
176
|
+
lines: "linhas",
|
|
177
|
+
enabledSeeLogs: "Habilitado (Ver Logs)",
|
|
178
|
+
production: "Produção",
|
|
179
|
+
configSaved: "Configuração Salva",
|
|
180
|
+
enterPassword: "Digite a Senha da Web UI:",
|
|
181
|
+
ready: "PRONTO",
|
|
182
|
+
depleted: "Esgotado",
|
|
183
|
+
timeH: "H",
|
|
184
|
+
timeM: "M",
|
|
185
|
+
familyClaude: "Claude",
|
|
186
|
+
familyGemini: "Gemini",
|
|
187
|
+
familyOther: "Outro",
|
|
188
|
+
enabledStatus: "habilitado",
|
|
189
|
+
disabledStatus: "desabilitado",
|
|
190
|
+
logLevelInfo: "INFO",
|
|
191
|
+
logLevelSuccess: "SUCESSO",
|
|
192
|
+
logLevelWarn: "AVISO",
|
|
193
|
+
logLevelError: "ERRO",
|
|
194
|
+
totalColon: "Total:",
|
|
195
|
+
todayColon: "Hoje:",
|
|
196
|
+
hour1Colon: "1H:",
|
|
197
|
+
frequentModels: "Frequentes",
|
|
198
|
+
smartTitle: "Auto-selecionar os 5 modelos mais usados (24h)",
|
|
199
|
+
activeCount: "{count} Ativos",
|
|
200
|
+
allCaps: "TODOS",
|
|
201
|
+
claudeCaps: "CLAUDE",
|
|
202
|
+
geminiCaps: "GEMINI",
|
|
203
|
+
systemInfo: "Informações do Sistema",
|
|
204
|
+
refresh: "Atualizar",
|
|
205
|
+
runtimeConfig: "Configuração em Tempo de Execução",
|
|
206
|
+
debugDesc: "Habilitar log detalhado (Ver aba Logs)",
|
|
207
|
+
networkRetry: "Configurações de Retentativa de Rede",
|
|
208
|
+
maxRetries: "Máximo de Retentativas",
|
|
209
|
+
retryBaseDelay: "Atraso Base de Retentativa (ms)",
|
|
210
|
+
retryMaxDelay: "Atraso Máximo de Retentativa (ms)",
|
|
211
|
+
persistentSessions: "Sessões Persistentes",
|
|
212
|
+
persistTokenDesc: "Salvar sessões OAuth no disco para reinicializações mais rápidas",
|
|
213
|
+
rateLimiting: "Limitação de Taxa de Conta & Timeouts",
|
|
214
|
+
defaultCooldown: "Tempo de Resfriamento Padrão",
|
|
215
|
+
defaultCooldownDesc: "Resfriamento de fallback quando a API não fornece tempo de reset.",
|
|
216
|
+
maxWaitThreshold: "Limiar Máximo de Espera (Sticky)",
|
|
217
|
+
maxWaitDesc: "Tempo máximo para aguardar uma conta sticky resetar antes de trocar.",
|
|
218
|
+
// Ajuste de Tratamento de Erros
|
|
219
|
+
errorHandlingTuning: "Ajuste de Tratamento de Erros",
|
|
220
|
+
rateLimitDedupWindow: "Janela de Deduplicação de Rate Limit",
|
|
221
|
+
rateLimitDedupWindowDesc: "Previne tempestades de retry quando múltiplas requisições atingem rate limits simultaneamente.",
|
|
222
|
+
maxConsecutiveFailures: "Máx. Falhas Consecutivas",
|
|
223
|
+
maxConsecutiveFailuresDesc: "Número de falhas consecutivas antes de aplicar resfriamento estendido.",
|
|
224
|
+
extendedCooldown: "Resfriamento Estendido",
|
|
225
|
+
extendedCooldownDesc: "Duração do resfriamento aplicado após atingir máx. de falhas consecutivas.",
|
|
226
|
+
capacityRetryDelay: "Atraso de Retry de Capacidade",
|
|
227
|
+
capacityRetryDelayDesc: "Atraso antes de tentar novamente quando capacidade do modelo está esgotada (não quota).",
|
|
228
|
+
maxCapacityRetries: "Máx. Retries de Capacidade",
|
|
229
|
+
maxCapacityRetriesDesc: "Máximo de retries para esgotamento de capacidade antes de trocar conta.",
|
|
230
|
+
saveConfigServer: "Salvar Configuração",
|
|
231
|
+
serverRestartAlert: "Alterações salvas em {path}. Reinicie o servidor para aplicar algumas configurações.",
|
|
232
|
+
changePassword: "Alterar Senha da WebUI",
|
|
233
|
+
changePasswordDesc: "Atualizar a senha para acessar este painel",
|
|
234
|
+
currentPassword: "Senha Atual",
|
|
235
|
+
newPassword: "Nova Senha",
|
|
236
|
+
confirmNewPassword: "Confirmar Nova Senha",
|
|
237
|
+
passwordEmptyDesc: "Deixe em branco se nenhuma senha estiver definida",
|
|
238
|
+
passwordLengthDesc: "Pelo menos 6 caracteres",
|
|
239
|
+
passwordConfirmDesc: "Redigite a nova senha",
|
|
240
|
+
cancel: "Cancelar",
|
|
241
|
+
passwordsNotMatch: "Senhas não coincidem",
|
|
242
|
+
passwordTooShort: "A senha deve ter pelo menos 6 caracteres",
|
|
243
|
+
// Dashboard drill-down
|
|
244
|
+
clickToViewAllAccounts: "Clique para ver todas as contas",
|
|
245
|
+
clickToViewModels: "Clique para ver a página de Modelos",
|
|
246
|
+
clickToViewLimitedAccounts: "Clique para ver contas limitadas",
|
|
247
|
+
clickToFilterClaude: "Clique para filtrar modelos Claude",
|
|
248
|
+
clickToFilterGemini: "Clique para filtrar modelos Gemini",
|
|
249
|
+
// Accounts page
|
|
250
|
+
searchAccounts: "Buscar contas...",
|
|
251
|
+
noAccountsYet: "Nenhuma Conta Ainda",
|
|
252
|
+
noAccountsDesc: "Comece adicionando uma conta Google via OAuth, ou use o comando CLI para importar credenciais.",
|
|
253
|
+
addFirstAccount: "Adicione Sua Primeira Conta",
|
|
254
|
+
noSearchResults: "Nenhuma conta corresponde à sua busca",
|
|
255
|
+
clearSearch: "Limpar Busca",
|
|
256
|
+
disabledAccountsNote: "<strong>Contas desabilitadas</strong> não serão usadas para roteamento de requisições, mas permanecem na configuração. As estatísticas do painel incluem apenas contas habilitadas.",
|
|
257
|
+
dangerousOperation: "⚠️ Operação Perigosa",
|
|
258
|
+
confirmDeletePrompt: "Tem certeza de que deseja excluir a conta",
|
|
259
|
+
deleteWarning: "⚠️ Esta ação não pode ser desfeita. Todas as configurações e registros históricos serão excluídos permanentemente.",
|
|
260
|
+
// OAuth progress
|
|
261
|
+
oauthWaiting: "Aguardando autorização OAuth...",
|
|
262
|
+
oauthWaitingDesc: "Por favor, complete a autenticação na janela popup. Isso pode levar até 2 minutos.",
|
|
263
|
+
oauthCancelled: "Autorização OAuth cancelada",
|
|
264
|
+
oauthTimeout: "⏱️ Autorização OAuth expirou. Por favor, tente novamente.",
|
|
265
|
+
oauthWindowClosed: "A janela OAuth foi fechada. A autorização pode estar incompleta.",
|
|
266
|
+
cancelOAuth: "Cancelar",
|
|
267
|
+
// MCP CLI & Gemini 1M
|
|
268
|
+
mcpCliExperimental: "CLI MCP Experimental",
|
|
269
|
+
mcpCliDesc: "Habilita integração MCP experimental para uso confiável de ferramentas com consumo reduzido de contexto.",
|
|
270
|
+
gemini1mMode: "Modo de Contexto Gemini 1M",
|
|
271
|
+
gemini1mDesc: "Adiciona sufixo [1m] aos modelos Gemini para suporte a janela de contexto de 1M.",
|
|
272
|
+
gemini1mWarning: "⚠ Contexto grande pode reduzir o desempenho do Gemini-3-Pro.",
|
|
273
|
+
clickToSet: "Clique para configurar...",
|
|
274
|
+
|
|
275
|
+
// Account Selection Strategy translations
|
|
276
|
+
accountSelectionStrategy: "Estratégia de Seleção de Conta",
|
|
277
|
+
selectionStrategy: "Estratégia de Seleção",
|
|
278
|
+
strategyStickyLabel: "Fixo (Otimizado para Cache)",
|
|
279
|
+
strategyRoundRobinLabel: "Rodízio (Balanceamento de Carga)",
|
|
280
|
+
strategyHybridLabel: "Híbrido (Distribuição Inteligente)",
|
|
281
|
+
strategyStickyDesc: "Permanece na mesma conta até atingir limite. Melhor para cache de prompts.",
|
|
282
|
+
strategyRoundRobinDesc: "Alterna para próxima conta a cada requisição. Máximo throughput.",
|
|
283
|
+
strategyHybridDesc: "Seleção inteligente baseada em saúde, tokens e frescor.",
|
|
284
|
+
strategyUpdated: "Estratégia atualizada para: {strategy}",
|
|
285
|
+
failedToUpdateStrategy: "Falha ao atualizar estratégia",
|
|
286
|
+
invalidStrategy: "Estratégia inválida selecionada",
|
|
287
|
+
};
|