Merge pull request #107 from YasinKose/main
Feat(ui): add Turkish language support and UI enhancements Introduces Turkish language support and several UI/UX improvements to the web management interface.
This commit is contained in:
@@ -11,6 +11,8 @@ window.Components.accountManager = () => ({
|
||||
toggling: false,
|
||||
deleting: false,
|
||||
reloading: false,
|
||||
selectedAccountEmail: '',
|
||||
selectedAccountLimits: {},
|
||||
|
||||
get filteredAccounts() {
|
||||
const accounts = Alpine.store('data').accounts || [];
|
||||
@@ -174,6 +176,12 @@ window.Components.accountManager = () => ({
|
||||
}, this, 'reloading', { errorMessage: 'Failed to reload accounts' });
|
||||
},
|
||||
|
||||
openQuotaModal(account) {
|
||||
this.selectedAccountEmail = account.email;
|
||||
this.selectedAccountLimits = account.limits || {};
|
||||
document.getElementById('quota_modal').showModal();
|
||||
},
|
||||
|
||||
/**
|
||||
* Get main model quota for display
|
||||
* Prioritizes flagship models (Opus > Sonnet > Flash)
|
||||
|
||||
@@ -235,8 +235,9 @@ document.addEventListener('alpine:init', () => {
|
||||
isHidden = (family === 'other' || family === 'unknown');
|
||||
}
|
||||
|
||||
// Models Page: ALWAYS hide hidden models (use Settings to restore)
|
||||
if (isHidden) return;
|
||||
// Models Page: Check settings for visibility
|
||||
const showHidden = Alpine.store('settings')?.showHiddenModels ?? false;
|
||||
if (isHidden && !showHidden) return;
|
||||
|
||||
// Filters
|
||||
if (this.filters.family !== 'all' && this.filters.family !== family) return;
|
||||
|
||||
@@ -114,6 +114,9 @@ document.addEventListener('alpine:init', () => {
|
||||
modelsDesc: "Configure model visibility, pinning, and request routing.",
|
||||
modelsPageDesc: "Real-time quota and status for all available models.",
|
||||
showHidden: "Show Hidden Models",
|
||||
hideHidden: "Hide Hidden Models",
|
||||
hiddenOn: "Hidden: ON",
|
||||
hiddenOff: "Hidden: OFF",
|
||||
modelId: "Model ID",
|
||||
actions: "Actions",
|
||||
pinToTop: "Pin to top",
|
||||
@@ -315,6 +318,11 @@ document.addEventListener('alpine:init', () => {
|
||||
gemini1mDesc: "Appends [1m] suffix to Gemini models for 1M context window support.",
|
||||
gemini1mWarning: "⚠ Large context may reduce Gemini-3-Pro performance.",
|
||||
clickToSet: "Click to configure...",
|
||||
none: "None",
|
||||
// Quota Distribution
|
||||
quotaDistribution: "Quota Distribution",
|
||||
resetsIn: "Resets in {time}",
|
||||
noQuotaData: "No quota data available for this account yet.",
|
||||
},
|
||||
zh: {
|
||||
dashboard: "仪表盘",
|
||||
@@ -391,6 +399,9 @@ document.addEventListener('alpine:init', () => {
|
||||
modelsDesc: "配置模型的可见性、置顶和请求路由。",
|
||||
modelsPageDesc: "所有可用模型的实时配额和状态。",
|
||||
showHidden: "显示隐藏模型",
|
||||
hideHidden: "隐藏被屏蔽模型",
|
||||
hiddenOn: "隐藏模型: 显示",
|
||||
hiddenOff: "隐藏模型: 隐藏",
|
||||
modelId: "模型 ID",
|
||||
actions: "操作",
|
||||
pinToTop: "置顶",
|
||||
@@ -592,7 +603,278 @@ document.addEventListener('alpine:init', () => {
|
||||
gemini1mDesc: "为 Gemini 模型添加 [1m] 后缀以支持 1M 上下文窗口。",
|
||||
gemini1mWarning: "⚠ 大上下文可能降低 Gemini-3-Pro 性能。",
|
||||
clickToSet: "点击进行配置...",
|
||||
}
|
||||
none: "无",
|
||||
// Quota Distribution
|
||||
quotaDistribution: "配额分布",
|
||||
resetsIn: "{time} 后重置",
|
||||
noQuotaData: "暂无此账号的配额数据。",
|
||||
},
|
||||
tr: {
|
||||
dashboard: "Panel",
|
||||
models: "Modeller",
|
||||
accounts: "Hesaplar",
|
||||
logs: "Günlükler",
|
||||
settings: "Ayarlar",
|
||||
online: "ÇEVRİMİÇİ",
|
||||
offline: "ÇEVRİMDIŞI",
|
||||
totalAccounts: "TOPLAM HESAP",
|
||||
active: "AKTİF",
|
||||
operational: "Çalışıyor",
|
||||
rateLimited: "HIZ SINIRLANDI",
|
||||
quotasDepleted: "{count}/{total} Kota Tükendi",
|
||||
quotasDepletedTitle: "KOTA TÜKENDİ",
|
||||
outOfTracked: "{total} Takip Edilen İçinden",
|
||||
cooldown: "Soğuma",
|
||||
searchPlaceholder: "Modelleri ara...",
|
||||
allAccounts: "Tüm Hesaplar",
|
||||
stat: "DURUM",
|
||||
modelIdentity: "MODEL KİMLİĞİ",
|
||||
globalQuota: "GENEL KOTA",
|
||||
nextReset: "SONRAKİ SIFIRLAMA",
|
||||
distribution: "HESAP DAĞILIMI",
|
||||
systemConfig: "Sistem Yapılandırması",
|
||||
language: "Dil",
|
||||
pollingInterval: "Veri Güncelleme Aralığı",
|
||||
maxDisplayLogs: "Maksimum Görüntülenen Günlük",
|
||||
showExhausted: "Tükenmiş Modelleri Göster",
|
||||
showExhaustedDesc: "%0 kotası kalan modelleri de göster.",
|
||||
compactMode: "Kompakt Mod",
|
||||
compactModeDesc: "Daha fazla bilgi göstermek için tablo boşluklarını azalt.",
|
||||
saveChanges: "Değişiklikleri Kaydet",
|
||||
autoScroll: "Otomatik Kaydır",
|
||||
clearLogs: "Günlükleri Temizle",
|
||||
accountManagement: "Hesap Yönetimi",
|
||||
manageTokens: "Google Hesap jetonlarını ve yetkilendirme durumlarını yönet",
|
||||
addAccount: "Hesap Ekle",
|
||||
status: "DURUM",
|
||||
enabled: "ETKİN",
|
||||
health: "SAĞLIK",
|
||||
accountEmail: "HESAP (E-POSTA)",
|
||||
source: "KAYNAK",
|
||||
projectId: "PROJE ID",
|
||||
sessionState: "OTURUM DURUMU",
|
||||
operations: "İŞLEMLER",
|
||||
delete: "Sil",
|
||||
confirmDelete: "Bu hesabı kaldırmak istediğinizden emin misiniz?",
|
||||
cannotDeleteDatabase: "Silinemez: Bu hesap Antigravity veritabanından (salt okunur)",
|
||||
connectGoogle: "Google Hesabı Bağla",
|
||||
reauthenticated: "yeniden doğrulandı",
|
||||
added: "eklendi",
|
||||
successfully: "başarıyla",
|
||||
accountAddedSuccess: "Hesap başarıyla eklendi",
|
||||
accountReauthSuccess: "Hesap başarıyla yeniden doğrulandı",
|
||||
failedToGetAuthUrl: "Yetkilendirme URL'si alınamadı",
|
||||
failedToStartOAuth: "OAuth akışı başlatılamadı",
|
||||
oauthInProgress: "OAuth devam ediyor. Lütfen açılır pencerede kimlik doğrulamayı tamamlayın...",
|
||||
family: "Aile",
|
||||
model: "Model",
|
||||
activeSuffix: "Aktif",
|
||||
manualReload: "Yapılandırmayı Yeniden Yükle",
|
||||
// Tabs
|
||||
tabInterface: "Arayüz",
|
||||
tabClaude: "Claude CLI",
|
||||
tabModels: "Modeller",
|
||||
tabServer: "Sunucu Ayarları",
|
||||
// Dashboard
|
||||
linkedAccounts: "Bağlı Hesaplar",
|
||||
noSignal: "SİNYAL YOK",
|
||||
establishingUplink: "BAĞLANTI KURULUYOR...",
|
||||
goToAccounts: "Hesaplara Git",
|
||||
// Settings - Models
|
||||
modelsDesc: "Model görünürlüğünü, sabitlemeyi ve istek yönlendirmeyi yapılandırın.",
|
||||
modelsPageDesc: "Tüm mevcut modeller için gerçek zamanlı kota ve durum.",
|
||||
showHidden: "Gizli Modelleri Göster",
|
||||
hideHidden: "Gizli Modelleri Gizle",
|
||||
hiddenOn: "Gizli: AÇIK",
|
||||
hiddenOff: "Gizli: KAPALI",
|
||||
modelId: "Model ID",
|
||||
actions: "İşlemler",
|
||||
pinToTop: "En Üste Sabitle",
|
||||
toggleVisibility: "Görünürlüğü Değiştir",
|
||||
noModels: "MODEL ALGILANMADI",
|
||||
modelMappingHint: "Sunucu tarafı model yönlendirme. Claude Code kullanıcıları: istemci tarafı kurulumu için 'Claude CLI' sekmesine bakın.",
|
||||
modelMapping: "Eşleştirme (Hedef Model ID)",
|
||||
// Settings - Claude
|
||||
proxyConnection: "Proxy Bağlantısı",
|
||||
modelSelection: "Model Seçimi",
|
||||
defaultModelAliases: "VARSAYILAN MODEL TAKMA ADLARI",
|
||||
opusAlias: "Opus Takma Adı",
|
||||
sonnetAlias: "Sonnet Takma Adı",
|
||||
haikuAlias: "Haiku Takma Adı",
|
||||
claudeSettingsAlertPrefix: "Aşağıdaki ayarlar doğrudan değiştirir",
|
||||
claudeSettingsAlertSuffix: "Uygulamak için Claude CLI'yı yeniden başlatın.",
|
||||
applyToClaude: "Claude CLI'ya Uygula",
|
||||
// Settings - Server
|
||||
port: "Port",
|
||||
uiVersion: "Arayüz Sürümü",
|
||||
debugMode: "Hata Ayıklama Modu",
|
||||
environment: "Ortam",
|
||||
serverReadOnly: "Ayarlar config.json üzerinden yönetilir. Değişiklikleri uygulamak için sunucuyu yeniden başlatın.",
|
||||
advancedSettings: "Gelişmiş Ayarlar",
|
||||
reloadConfigTitle: "Hesap Yapılandırmasını Yeniden Yükle",
|
||||
reloadConfigDesc: "accounts.json dosyasını diskten yeniden yüklemeye zorla",
|
||||
reload: "Yeniden Yükle",
|
||||
// Config Specific
|
||||
primaryModel: "Birincil Model",
|
||||
subAgentModel: "Alt Ajan Modeli",
|
||||
advancedOverrides: "Varsayılan Model Geçersiz Kılmaları",
|
||||
opusModel: "Opus Modeli",
|
||||
sonnetModel: "Sonnet Modeli",
|
||||
haikuModel: "Haiku Modeli",
|
||||
authToken: "Yetkilendirme Jetonu",
|
||||
saveConfig: "Claude CLI ayarlarına kaydet",
|
||||
envVar: "Ortam Değişkeni",
|
||||
// New Keys
|
||||
systemName: "ANTIGRAVITY",
|
||||
systemDesc: "CLAUDE PROXY SİSTEMİ",
|
||||
connectGoogleDesc: "API kota limitinizi artırmak için bir Google Workspace hesabı bağlayın. Bu hesap, Claude isteklerini Antigravity üzerinden vekil sunucu olarak kullanmak için kullanılacaktır.",
|
||||
useCliCommand: "CLI Komutunu Kullan",
|
||||
close: "Kapat",
|
||||
requestVolume: "İstek Hacmi",
|
||||
filter: "Filtrele",
|
||||
all: "Tümü",
|
||||
none: "Hiçbiri",
|
||||
noDataTracked: "Henüz veri izlenmedi",
|
||||
selectFamilies: "Görüntülenecek aileleri seçin",
|
||||
selectModels: "Görüntülenecek modelleri seçin",
|
||||
noLogsMatch: "Filtreyle eşleşen günlük yok",
|
||||
connecting: "BAĞLANILIYOR",
|
||||
main: "Ana",
|
||||
system: "Sistem",
|
||||
refreshData: "Verileri Yenile",
|
||||
connectionLost: "Bağlantı Kaybedildi",
|
||||
lastUpdated: "Son Güncelleme",
|
||||
grepLogs: "günlükleri ara...",
|
||||
noMatchingModels: "Eşleşen model yok",
|
||||
typeToSearch: "Aramak veya seçmek için yazın...",
|
||||
or: "VEYA",
|
||||
refreshingAccount: "{email} yenileniyor...",
|
||||
refreshedAccount: "{email} yenilendi",
|
||||
refreshFailed: "Yenileme başarısız",
|
||||
accountToggled: "Hesap {email} {status}",
|
||||
toggleFailed: "Değiştirme başarısız",
|
||||
reauthenticating: "{email} yeniden doğrulanıyor...",
|
||||
authUrlFailed: "Yetkilendirme URL'si alınamadı",
|
||||
deletedAccount: "{email} silindi",
|
||||
deleteFailed: "Silme başarısız",
|
||||
accountsReloaded: "Hesaplar yeniden yüklendi",
|
||||
reloadFailed: "Yeniden yükleme başarısız",
|
||||
claudeConfigSaved: "Claude yapılandırması kaydedildi",
|
||||
claudeConfigRestored: "Claude CLI varsayılanlara geri yüklendi",
|
||||
saveConfigFailed: "Yapılandırma kaydedilemedi",
|
||||
restoreConfigFailed: "Yapılandırma geri yüklenemedi",
|
||||
restoreDefault: "Varsayılana Dön",
|
||||
confirmRestoreTitle: "Geri Yüklemeyi Onayla",
|
||||
confirmRestoreMessage: "Claude CLI'yı varsayılan ayarlara geri yüklemek istediğinizden emin misiniz? Bu işlem proxy yapılandırmasını kaldıracaktır.",
|
||||
confirmRestore: "Geri Yüklemeyi Onayla",
|
||||
claudeActive: "Claude Aktif",
|
||||
claudeEmpty: "Claude Boş",
|
||||
geminiActive: "Gemini Aktif",
|
||||
geminiEmpty: "Gemini Boş",
|
||||
synced: "EŞİTLENDİ",
|
||||
syncing: "EŞİTLENİYOR...",
|
||||
// Time range labels
|
||||
last1Hour: "Son 1S",
|
||||
last6Hours: "Son 6S",
|
||||
last24Hours: "Son 24S",
|
||||
last7Days: "Son 7G",
|
||||
allTime: "Tüm Zamanlar",
|
||||
groupBy: "Gruplama Ölçütü",
|
||||
// Additional
|
||||
reloading: "Yeniden yükleniyor...",
|
||||
reloaded: "Yeniden yüklendi",
|
||||
lines: "satır",
|
||||
enabledSeeLogs: "Etkin (Günlüklere Bak)",
|
||||
production: "Üretim",
|
||||
configSaved: "Yapılandırma Kaydedildi",
|
||||
enterPassword: "Web UI Parolasını Girin:",
|
||||
ready: "HAZIR",
|
||||
depleted: "Tükendi",
|
||||
timeH: "S",
|
||||
timeM: "D",
|
||||
familyClaude: "Claude",
|
||||
familyGemini: "Gemini",
|
||||
familyOther: "Diğer",
|
||||
enabledStatus: "etkin",
|
||||
disabledStatus: "devre dışı",
|
||||
logLevelInfo: "BİLGİ",
|
||||
logLevelSuccess: "BAŞARILI",
|
||||
logLevelWarn: "UYARI",
|
||||
logLevelError: "HATA",
|
||||
totalColon: "Toplam:",
|
||||
todayColon: "Bugün:",
|
||||
hour1Colon: "1S:",
|
||||
frequentModels: "Sık Kullanılan",
|
||||
smartTitle: "En çok kullanılan 5 modeli otomatik seç (24s)",
|
||||
activeCount: "{count} Aktif",
|
||||
allCaps: "TÜMÜ",
|
||||
claudeCaps: "CLAUDE",
|
||||
geminiCaps: "GEMINI",
|
||||
modelMapping: "Eşleştirme (Hedef Model ID)",
|
||||
systemInfo: "Sistem Bilgisi",
|
||||
refresh: "Yenile",
|
||||
runtimeConfig: "Çalışma Zamanı Yapılandırması",
|
||||
debugDesc: "Ayrıntılı günlük kaydını etkinleştir (Günlükler sekmesine bakın)",
|
||||
networkRetry: "Ağ Yeniden Deneme Ayarları",
|
||||
maxRetries: "Maksimum Deneme",
|
||||
retryBaseDelay: "Yeniden Deneme Temel Gecikmesi (ms)",
|
||||
retryMaxDelay: "Yeniden Deneme Maksimum Gecikmesi (ms)",
|
||||
persistentSessions: "Kalıcı Oturumlar",
|
||||
persistTokenDesc: "Daha hızlı yeniden başlatmalar için OAuth oturumlarını diske kaydet",
|
||||
rateLimiting: "Hesap Hız Sınırlama ve Zaman Aşımları",
|
||||
defaultCooldown: "Varsayılan Soğuma Süresi",
|
||||
maxWaitThreshold: "Maksimum Bekleme Eşiği (Yapışkan)",
|
||||
maxWaitDesc: "Yapışkan bir hesabın değiştirmeden önce sıfırlanması için beklenecek maksimum süre.",
|
||||
saveConfigServer: "Yapılandırmayı Kaydet",
|
||||
serverRestartAlert: "Değişiklikler {path} konumuna kaydedildi. Bazı ayarları uygulamak için sunucuyu yeniden başlatın.",
|
||||
changePassword: "WebUI Parolasını Değiştir",
|
||||
changePasswordDesc: "Bu panoya erişim parolasını güncelle",
|
||||
currentPassword: "Mevcut Parola",
|
||||
newPassword: "Yeni Parola",
|
||||
confirmNewPassword: "Yeni Parolayı Onayla",
|
||||
passwordEmptyDesc: "Parola ayarlanmamışsa boş bırakın",
|
||||
passwordLengthDesc: "En az 6 karakter",
|
||||
passwordConfirmDesc: "Yeni parolayı tekrar girin",
|
||||
cancel: "İptal",
|
||||
passwordsNotMatch: "Parolalar eşleşmiyor",
|
||||
passwordTooShort: "Parola en az 6 karakter olmalıdır",
|
||||
// Dashboard drill-down
|
||||
clickToViewAllAccounts: "Tüm hesapları görüntülemek için tıklayın",
|
||||
clickToViewModels: "Modeller sayfasını görüntülemek için tıklayın",
|
||||
clickToViewLimitedAccounts: "Hız sınırı olan hesapları görüntülemek için tıklayın",
|
||||
clickToFilterClaude: "Claude modellerini filtrelemek için tıklayın",
|
||||
clickToFilterGemini: "Gemini modellerini filtrelemek için tıklayın",
|
||||
// Accounts page
|
||||
searchAccounts: "Hesap ara...",
|
||||
noAccountsYet: "Henüz Hesap Yok",
|
||||
noAccountsDesc: "OAuth üzerinden bir Google hesabı ekleyerek veya kimlik bilgilerini içe aktarmak için CLI komutunu kullanarak başlayın.",
|
||||
addFirstAccount: "İlk Hesabınızı Ekleyin",
|
||||
noSearchResults: "Aramanızla eşleşen hesap yok",
|
||||
clearSearch: "Aramayı Temizle",
|
||||
disabledAccountsNote: "<strong>Devre dışı bırakılan hesaplar</strong> istek yönlendirmesi için kullanılmayacak ancak yapılandırmada kalacaktır. Pano istatistikleri yalnızca etkin hesapları içerir.",
|
||||
dangerousOperation: "⚠️ Tehlikeli İşlem",
|
||||
confirmDeletePrompt: "Hesabı silmek istediğinizden emin misiniz",
|
||||
deleteWarning: "⚠️ Bu işlem geri alınamaz. Tüm yapılandırma ve geçmiş kayıtları kalıcı olarak silinecektir.",
|
||||
// OAuth progress
|
||||
oauthWaiting: "OAuth yetkilendirmesi bekleniyor...",
|
||||
oauthWaitingDesc: "Lütfen açılır pencerede kimlik doğrulamasını tamamlayın. Bu işlem 2 dakikaya kadar sürebilir.",
|
||||
oauthCancelled: "OAuth yetkilendirmesi iptal edildi",
|
||||
oauthTimeout: "⏱️ OAuth yetkilendirmesi zaman aşımına uğradı. Lütfen tekrar deneyin.",
|
||||
oauthWindowClosed: "OAuth penceresi kapatıldı. Yetkilendirme tamamlanmamış olabilir.",
|
||||
cancelOAuth: "İptal",
|
||||
// MCP CLI & Gemini 1M
|
||||
mcpCliExperimental: "Deneysel MCP CLI",
|
||||
mcpCliDesc: "Daha az bağlam tüketimi ile güvenilir araç kullanımı için deneysel MCP entegrasyonunu etkinleştirir.",
|
||||
gemini1mMode: "Gemini 1M Bağlam Modu",
|
||||
gemini1mDesc: "1M bağlam penceresi desteği için Gemini modellerine [1m] son eki ekler.",
|
||||
gemini1mWarning: "⚠ Büyük bağlam, Gemini-3-Pro performansını düşürebilir.",
|
||||
clickToSet: "Yapılandırmak için tıklayın...",
|
||||
none: "Hiçbiri",
|
||||
// Quota Distribution
|
||||
quotaDistribution: "Kota Dağılımı",
|
||||
resetsIn: "{time} içinde sıfırlanır",
|
||||
noQuotaData: "Bu hesap için henüz kota verisi yok.",
|
||||
},
|
||||
},
|
||||
|
||||
// Toast Messages
|
||||
|
||||
Reference in New Issue
Block a user