Spaces:
Runtime error
Runtime error
File size: 32,412 Bytes
772b344 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 |
# Dil seçeneğini ConfigManager'dan (circular import olmaması için) veya direkt dosyadan okuyabiliriz.
# En sağlıklısı: Bir "current_language" global değişkeni tutmak ve bunu main.py veya config_manager update ettiğinde değiştirmek.
# Ancak basit olması açısından burada dosyayı okuyalım (cache ile).
import json
import os
_CACHED_LANG = None
def get_db_lang():
global _CACHED_LANG
# Her çağrıda dosya okumak performansı düşürebilir, bu yüzden basit bir cache mekanizması ekleyelim.
# Ancak dil değiştiğinde uygulamanın yeniden başlatılması gerektiği için bu güvenlidir.
if _CACHED_LANG: return _CACHED_LANG
config_path = "data/configs/config.json"
if os.path.exists(config_path):
try:
with open(config_path, "r", encoding="utf-8") as f:
data = json.load(f)
_CACHED_LANG = data.get("general_settings", {}).get("language", "tr")
return _CACHED_LANG
except: pass
return "tr"
def get_str(key):
lang = get_db_lang()
# 1. Hedef dil sözlüğünü al
target_dict = STRINGS.get(lang, STRINGS["tr"])
# 2. Key varsa döndür
if key in target_dict:
return target_dict[key]
# 3. Yedeğe (İngilizce'ye) bak (Eğer hedef dilde yoksa)
if lang != "en" and "en" in STRINGS and key in STRINGS["en"]:
return STRINGS["en"][key]
# 4. Hiçbir yerde yoksa key'i olduğu gibi döndür
return key
STRINGS = {
"tr": {
# Settings Tab
"tab_settings_title": "⚙️ Ayarlar",
"settings_header": "<h2 style='color:#2c3e50;'>Genel Yapılandırma ve Model Ayarları</h2>",
"save_settings_btn": "💾 Tüm Ayarları Kaydet",
"status_label": "Durum",
"device_section": "### 🖥️ Cihaz, Dil & Kural Dosyaları",
"device_label": "Çalıştırma Cihazı",
"device_info": "Modellerin hangi işlemcide çalışacağını belirler.",
"language_label": "Dil / Language",
"language_info": "Uygulama dilini değiştirir (Yeniden başlatma gerekir).",
"theme_label": "Arayüz Teması / UI Theme",
"theme_info": "Uygulama temasını değiştirir (Yeniden başlatma gerekir).",
"replacement_file_label": "Değiştirme Dosyası (Regex)",
"synonym_file_label": "Birleştirme Dosyası (Eşanlamlı)",
"addition_file_label": "Ekleme Dosyası (Sona Eklenecekler)",
"sort_order_label": "Etiket Sıralama Yöntemi",
"sort_alpha": "Alfabetik",
"sort_len": "Uzunluğa Göre",
"sort_random": "Rastgele",
"sort_orig": "Orijinal",
"model_mobilenet": "MobileNet V4 (Hızlı)",
"model_convnext": "ConvNeXt V2 Huge (Pro)",
"model_caformer": "Caformer B36 (Yeni)",
"categorization_section": "### 🗂️ Mod Bazlı Kategorizasyon Ayarları",
"categorization_desc": "Aşağıdaki sekmelerden her bir mod için ayrı kategorizasyon ayarı yapabilirsiniz.",
"tab_single": "Tekil Mod",
"tab_batch": "Toplu Mod",
"tab_dual_left": "Dual Mod (Sol)",
"tab_dual_right": "Dual Mod (Sağ)",
"enable_cat_single": "Tekil Modda Kategorizasyonu Etkinleştir",
"cat_single_label": "Tekil Mod Kategorileri",
"enable_cat_batch": "Toplu Modda Kategorizasyonu Etkinleştir",
"cat_batch_label": "Toplu Mod Kategorileri",
"enable_cat_dual1": "Dual Mod Resim 1 (Sol) Kategorizasyon",
"cat_dual1_label": "Dual Resim 1 Kategorileri",
"enable_cat_dual2": "Dual Mod Resim 2 (Sağ) Kategorizasyon",
"cat_dual2_label": "Dual Resim 2 Kategorileri",
"model_sensitivity_section": "### 🤖 Model Hassasiyet Ayarları",
"context_weight_label": "Bağlam Ağırlığı (Context Weight)",
"context_weight_info": "Etiketleri rafine ederken veritabanında olmayan 'Unknown' etiketleri temizleme şiddeti.",
"joint_settings": "Joint Tagger Ayarları",
"use_joint": "Joint Etiketleyiciyi Kullan",
"joint_thresh": "Joint Eşiği",
"cl_settings": "CL Tagger Ayarları",
"use_cl": "CL Tagger'ı Kullan",
"cl_gen_thresh": "CL General/Meta/Model Eşiği",
"cl_char_thresh": "CL Character/Copyright/Artist Eşiği",
"pixai_settings": "PixAI Tagger Ayarları",
"use_pixai": "PixAI Tagger'ı Kullan",
"pixai_gen_thresh": "PixAI General Eşiği",
"pixai_char_thresh": "PixAI Character Eşiği",
"anime_settings": "Anime Tagger (MobileNet/ConvNeXt/Caformer)",
"use_anime": "Anime Tagger'ı Kullan",
"anime_model_label": "Model Seçimi",
"anime_thresh": "Etiket Eşiği",
"gemini_settings": "✨ Gemini Caption (Doğal Dil)",
"gemini_desc": "Görselleri etiket listesi yerine **doğal cümlelerle** betimler.",
"use_gemini": "Gemini Caption Kullan",
"gemini_api_key": "Google Gemini API Key",
"gemini_model": "Gemini Modeli",
"gemini_model_info": "Kullanılacak Gemini model versiyonunu seçin.",
"gemini_mode_label": "Gemini Modu",
"gemini_mode_info": "Vision: Sadece resme bakar. Tags: Sadece etiketleri kullanır. Vision + Tags: İkisini birleştirir.",
"gemini_system_instr": "Sistem Talimatı (System Instruction)",
"gemini_system_info": "Modelin genel davranışını ve kimliğini belirleyen ana talimat.",
"gemini_prompt_settings": "#### 📝 Mod Bazlı Prompt Ayarları",
"prompt_vision": "Vision Modu Prompt",
"prompt_tags": "Tags Modu Prompt",
"prompt_hybrid": "Vision + Tags Modu Prompt",
"save_success": "✅ Tüm genel ve özelleştirilmiş kategorizasyon ayarları kaydedildi. Dil değişikliğinin etkili olması için uygulamayı yeniden başlatın.",
# App Title
"app_title": "Ultra Pro Tagger V1",
"app_subtitle": "Yapay Zeka Destekli Otomatik Etiketleme ve Düzenleme Suiti",
# Main UI
"btn_close_app": "Uygulamayı Kapat",
"btn_restart_app": "Uygulamayı Yeniden Başlat",
# Single Tab
"tab_single_title": "✨ Tekil Etiketleme",
"btn_process_single": "Görseli Etiketle (Genel Ayarlar ile)",
"label_image_upload": "Görsel Yükle",
"tab_raw_tags": "Has Etiketler",
"label_unique_tags": "Birleşik Benzersiz Etiketler",
"btn_send_to_cat": "Bu Etiketleri Kategorizasyona Gönder ➡️",
"tab_refined_tags": "Rafine Edilmiş",
"label_refined_tags": "Rafine Edilmiş (Temizlenmiş) Etiketler",
"tab_categorized_tags": "Kategorize Edilmiş",
"label_categorized_tags": "Kategorize Edilmiş Etiketler",
"header_wildcard": "### 📂 Wildcard Paketine Ekle",
"tab_gemini_caption": "Cümlelendirilmiş (GeminiCaption)",
"label_gemini_caption": "Gemini Betimlemesi",
"tab_combined_caption": "Kategorize + Cümlelendirilmiş (GeminiCaption)",
"label_combined_caption": "Kategorize ve Gemini Birleşimi",
# Batch Tab
"tab_batch_title": "📚 Toplu Etiketleme",
"btn_process_batch": "Resimleri İşle (Genel Ayarlar ile)",
"label_batch_input": "Resimleri Yükleyin (Çoklu Seçim)",
"tab_batch_original": "Orijinal Etiketler (Birleşik)",
"label_batch_original": "Tüm Resimlerden Orijinal Etiketler",
"tab_batch_refined": "Rafine Edilmiş (Birleşik)",
"label_batch_refined": "Tüm Resimlerden Rafine Edilmiş Etiketler",
"tab_batch_cat": "Kategorize Edilmiş (Satır Satır)",
"tab_batch_gemini": "Gemini Caption (Tümü)",
"label_batch_gemini": "Tüm Görsellerin Betimlemeleri",
"tab_batch_html": "Detaylı HTML Raporu",
"label_batch_html": "Detaylı Sonuçlar",
"btn_batch_download": "Tüm Sonuç Etiketleri İndir (.txt)",
# Dual Tab
"tab_dual_title": "↔️ Dual Etiketleme",
"dual_note": "<p style='color:#666; font-size:0.9em;'>Not: Dual modda her iki resim için 'Ayarlar' sekmesindeki ayrı kategorizasyon ayarları kullanılır.</p>",
"btn_process_dual": "Görselleri Karşılaştır ve Etiketle",
"label_img1": "Görsel 1",
"label_img2": "Görsel 2",
"tab_dual_combined": "Birleştirilmiş",
"label_dual_combined": "İki Resmin Birleşimi (Benzersiz)",
"label_dual_refined": "İki Resmin Birleşimi (Rafine)",
"label_dual_cat": "Birleşik Kategorize Edilmiş",
"label_gemini_img1": "Görsel 1 Gemini",
"label_gemini_img2": "Görsel 2 Gemini",
# Tools Tab
"tab_prompt_gen": "📝 Prompt Oluşturucu",
"tab_category_tools": "🏷️ Kategori Araçları",
"tab_rule_management": "🔁 Kural Yönetimi",
"tab_text_tools": "📝 Metin Araçları",
"tab_image_tools": "🖼️ Resim Araçları",
"tab_video_creator": "🎬 Video Oluşturucu",
"tab_art_studio": "🎨 Sanat Stüdyosu",
"label_tags_input": "Etiketleri girin (virgülle ayırın)",
"placeholder_tags_input": "örnek: 1kız, mavi saç, uzun saç, kedi kulakları...",
# Category Tools
"cat_live_tab_title": "Canlı Kategorizasyon",
"cat_live_header": "<h2 style='color:#2563eb'>Etiketleri Kategorilere Ayırın</h2>",
"cat_live_main_tab": "Ana Kategorizasyon",
"cat_live_main_select": "Gösterilecek Ana Kategorileri Seç",
"cat_live_main_btn": "Ana Kategorilere Ayır",
"cat_live_unmatched_btn": "⚠️ Eşleşmeyenleri Düzenleyiciye Aktar ve Düzenle ➡️",
"cat_live_main_output": "Ana Kategorize Edilmiş Etiketler",
"cat_manage_tab_title": "Kategori/Etiket Düzenleme",
"cat_manage_header": "<h3 style='color:#007bff;'>Kategori ve Etiket Dosyalarını Yönetin</h3>",
"cat_manage_main_accordion": "Ana Kategori Yönetimi",
"cat_manage_main_grid": "Tüm Kategoriler",
"cat_manage_main_refresh": "↻ Ana Kategorileri Yenile",
"cat_manage_main_select": "Kategori Seç",
"cat_manage_tags_input": "Etiketler (virgülle ayırın)",
"btn_add": "Ekle",
"btn_delete": "Sil",
# Category Redesign
"cat_redesign_live_tab": "Kategorilere Ayır",
"cat_redesign_main_tab": "📂 Kategori Yönetimi",
# Image Tools
"img_tools_header": "<h3 style='color:#0077b6;'>Toplu Resim İşleme</h3>",
"img_tools_paths_input": "Klasör Yolları (Her satıra bir yol)",
"img_tools_select_folder_btn": "📁 Klasör Seç",
"img_tools_clear_btn": "🗑️ Temizle",
"img_tools_save_settings_btn": "Yolu ve Araç Ayarlarını Kaydet",
"img_tools_res_accordion": "1. 📐 Çözünürlük",
"img_tools_scale_label": "Oran",
"btn_apply": "Uygula",
"img_tools_rename_accordion": "2. 📝 İsimlendirme (Şablonlu)",
"img_tools_rename_desc": "Dosyaları sırasıyla yeniden adlandırır. Şablonun içinde mutlaka **`{Number}`** olmalıdır.",
"img_tools_template_select": "Hazır Şablonlar",
"img_tools_delete_template_btn": "🗑️ Şablonu Sil",
"img_tools_new_template_input": "Yeni Şablon Ekle",
"img_tools_new_template_placeholder": "Örn: Adoptable {Number} (Elf)",
"img_tools_add_template_btn": "➕ Listeye Ekle",
"img_tools_start_num": "Başlangıç Numarası (Start)",
"img_tools_digit_count": "Basamak Sayısı (001 için 3)",
"img_tools_rename_btn": "Dosyaları Yeniden Adlandır",
"img_tools_watermark_accordion": "3. 🖋️ Filigran",
"img_tools_watermark_default": "Örnek Filigran",
"img_tools_watermark_text": "Metin",
"img_tools_watermark_opacity": "Opaklık",
"img_tools_watermark_size": "Font Boyutu",
"img_tools_watermark_angle": "Açı",
"img_tools_format_accordion": "4. 🖼️ Format",
"img_tools_format_label": "Format",
"btn_convert": "Dönüştür",
"img_tools_bc_accordion": "5. 🔅 Parlaklık/Kontrast",
"img_tools_brightness": "Parlaklık",
"img_tools_contrast": "Kontrast",
"img_tools_ds_accordion": "6. 🧼 Gürültü/Netlik",
"img_tools_denoise": "Gürültü Azaltma",
"img_tools_sharpen": "Netleştirme",
# Text Tools
"txt_tools_header": "<h3 style='color:#28a745;'>Manuel Metin Araçları</h3>",
"txt_tools_input": "İşlenecek Metin",
"txt_tools_tab_clean": "Temizleme",
"txt_tools_clean_btn": "Temizle ve Tekilleştir",
"label_result": "Sonuç",
"txt_tools_tab_format": "Format Değiştirme",
"txt_tools_lines_to_comma": "Satır -> Virgül",
"txt_tools_comma_to_lines": "Virgül -> Satır",
"txt_tools_tab_random": "Rastgele Seç",
"txt_tools_line_count": "Satır Sayısı",
"btn_select": "Seç",
"btn_filter": "Filtrele",
# Rule Tools
"rule_tools_intro": "Bu alanda etiketlerin nasıl değiştirileceğini, birleştirileceğini ve sonuçlara hangi etiketlerin ekleneceğini yönetebilirsiniz.",
"rule_rep_desc": "Etiketleri otomatik olarak başka etiketlerle değiştirir.",
"rule_rep_accordion": "Değiştirme Kuralları (Regex Destekli)",
"rule_active_file": "Aktif Dosya",
"rule_new_file_name": "Yeni Dosya Adı",
"rule_create_file_btn": "Yeni Dosya Oluştur",
"rule_tab_quick_add": "Hızlı Kural Ekle",
"rule_rep_old": "Eski Etiket (veya Regex)",
"rule_rep_new": "Yeni Etiket",
"rule_add_to_file_btn": "Kuralı Dosyaya Ekle",
"rule_tab_edit_file": "Dosyayı Düzenle",
"rule_file_content_manual": "Dosya İçeriği (Manuel Düzenleme)",
"rule_save_all_btn": "Tüm İçeriği Kaydet",
"rule_syn_accordion": "Birleştirme Kuralları (Eşanlamlı)",
"rule_syn_intro": "Birden fazla etiketi tek bir ana etikette birleştirir (Diğerlerini siler).",
"rule_syn_main": "Ana Etiket (Kalan)",
"rule_syn_remove": "Silinecek Eşanlamlılar (Virgülle ayırın)",
"rule_add_accordion": "Ekleme Kuralları (Sonuçlara Otomatik Eklenecekler)",
"rule_add_intro": "Bu bölümdeki etiketler, işlem bittikten sonra sonuç listesinin sonuna otomatik olarak eklenir.",
"rule_add_content_input": "Eklenecek Etiketler (Her satıra veya virgülle)",
"rule_add_save_btn": "Ekleme Kuralını Kaydet",
# Art Tools
"art_header": "### 🎨 Furry & Adoptable Araçları",
"art_desc": "Satış için grid oluşturma araçları.",
"art_tab_grid": "田 Adoptable Grid Oluşturucu",
"art_file_input": "Görselleri Seç (Çoklu)",
"art_grid_settings": "Grid Ayarları",
"art_cols": "Sütun Sayısı (Yan Yana Kaç Resim?)",
"art_bg_color": "Arkaplan Rengi",
"art_label_settings": "Etiket Ayarları",
"art_add_labels_check": "Resim Altına Yazı Ekle",
"art_label_type": "Yazı Tipi",
"art_start_num": "Başlangıç Numarası / Fiyatı",
"art_create_btn": "Grid Oluştur",
"art_output": "Grid Sonucu",
# Prompt Generator
"prompt_template_mgmt_header": "### 📝 Şablon Yönetimi",
"prompt_select_template": "Şablon Seçiniz",
"prompt_new_template_name": "Yeni Şablon Adı",
"prompt_template_content": "Şablon İçeriği",
"btn_update": "💾 Güncelle",
"btn_add_new": "➕ Yeni Ekle",
"prompt_generation_header": "### 🚀 Üretim",
"prompt_gen_btn": "SEÇİLİ ŞABLONU OLUŞTUR",
"prompt_gen_all_btn": "TÜM ŞABLONLARI OLUŞTUR",
"prompt_var_settings_accordion": "🛠️ Değişken Ayarları (Seçenek Ekle/Düzenle)",
"prompt_select_var": "Düzenlenecek Değişkeni Seç",
"prompt_var_label": "Etiket Adı",
"prompt_var_default": "Varsayılan Değer",
"prompt_var_options": "Seçenekler (Her satıra bir seçenek yazın)",
"prompt_update_var_btn": "Değişkeni Güncelle",
# Video Creator
"vid_header": "### 🎬 Pro Video Stüdyosu",
"vid_desc": "Görselleri ve müzikleri birleştirin, format seçin ve efekt ekleyin.",
"vid_img_input": "1. Görselleri Seçin (Slayt için çoklu)",
"vid_audio_input": "2. Müzikleri Seçin (Çoklu)",
"vid_resolution": "Video Formatı (Çözünürlük)",
"vid_speed": "İşleme Hızı",
"vid_text_overlay": "Video Üzerine Yazı Ekle (Opsiyonel)",
"vid_spectrum_check": "Ses Dalgası (Spectrum) Ekle (DİKKAT: Render süresini çok uzatır)",
"vid_create_btn": "VİDEOYU OLUŞTUR",
"vid_preview": "Önizleme",
"vid_status": "İşlem Durumu",
},
"en": {
# Settings Tab
"tab_settings_title": "⚙️ Tagger & Model Settings",
"settings_header": "<h2 style='color:#2c3e50;'>General Configuration and Model Settings</h2><p style='color:#666;'>Manage tagging modes, sensitivity, and language options here.</p>",
"save_settings_btn": "💾 Save All Settings",
"status_label": "Status",
"device_section": "### 🖥️ Device, Language & Rule Files",
"device_label": "Execution Device",
"device_info": "Determines which processor the models will run on.",
"language_label": "Dil / Language",
"language_info": "Changes application language (Requires restart).",
"theme_label": "UI Theme",
"theme_info": "Changes the application theme (Requires restart).",
"replacement_file_label": "Replacement File (Regex)",
"synonym_file_label": "Synonym File",
"addition_file_label": "Addition File (Append to End)",
"sort_order_label": "Tag Sorting Method",
"sort_alpha": "Alphabetical",
"sort_len": "By Length",
"sort_random": "Random",
"sort_orig": "Original",
"model_mobilenet": "MobileNet V4 (Fast)",
"model_convnext": "ConvNeXt V2 Huge (Pro)",
"model_caformer": "Caformer B36 (New)",
"categorization_section": "### 🗂️ Mode-Based Categorization Settings",
"categorization_desc": "Configure separate categorization settings for each mode below.",
"tab_single": "Single Mode",
"tab_batch": "Batch Mode",
"tab_dual_left": "Dual Mode (Left)",
"tab_dual_right": "Dual Mode (Right)",
"enable_cat_single": "Enable Categorization in Single Mode",
"cat_single_label": "Single Mode Categories",
"enable_cat_batch": "Enable Categorization in Batch Mode",
"cat_batch_label": "Batch Mode Categories",
"enable_cat_dual1": "Dual Mode Image 1 (Left) Categorization",
"cat_dual1_label": "Dual Image 1 Categories",
"enable_cat_dual2": "Dual Mode Image 2 (Right) Categorization",
"cat_dual2_label": "Dual Image 2 Categories",
"model_sensitivity_section": "### 🤖 Model Sensitivity Settings",
"context_weight_label": "Context Weight",
"context_weight_info": "Intensity of removing 'Unknown' tags not in database during refinement.",
"joint_settings": "Joint Tagger Settings",
"use_joint": "Use Joint Tagger",
"joint_thresh": "Joint Threshold",
"cl_settings": "CL Tagger Settings",
"use_cl": "Use CL Tagger",
"cl_gen_thresh": "CL General/Meta/Model Threshold",
"cl_char_thresh": "CL Character/Copyright/Artist Threshold",
"pixai_settings": "PixAI Tagger Settings",
"use_pixai": "Use PixAI Tagger",
"pixai_gen_thresh": "PixAI General Threshold",
"pixai_char_thresh": "PixAI Character Threshold",
"anime_settings": "Anime Tagger (MobileNet/ConvNeXt/Caformer)",
"use_anime": "Use Anime Tagger",
"anime_model_label": "Model Selection",
"anime_thresh": "Tag Threshold",
"gemini_settings": "✨ Gemini Caption (Natural Language)",
"gemini_desc": "Describes images with **natural sentences** instead of just tag lists.",
"use_gemini": "Use Gemini Caption",
"gemini_api_key": "Google Gemini API Key",
"gemini_model": "Gemini Model",
"gemini_model_info": "Select the Gemini model version to use.",
"gemini_mode_label": "Gemini Mode",
"gemini_mode_info": "Vision: Only looks at image. Tags: Only uses tags. Vision + Tags: Combines both.",
"gemini_system_instr": "System Instruction",
"gemini_system_info": "Main instruction defining the model's behavior and identity.",
"gemini_prompt_settings": "#### 📝 Mode-Based Prompt Settings",
"prompt_vision": "Vision Mode Prompt",
"prompt_tags": "Tags Mode Prompt",
"prompt_hybrid": "Vision + Tags Mode Prompt",
"save_success": "✅ All general and categorization settings saved. Please restart to apply language changes.",
# App Title
"app_title": "Ultra Pro Tagger V1",
"app_subtitle": "AI-Powered Automatic Tagging and Editing Suite",
# Main UI
"btn_close_app": "Close Application",
"btn_restart_app": "Restart Application",
# Single Tab
"tab_single_title": "✨ Single Tagging",
"btn_process_single": "Tag Image (With General Settings)",
"label_image_upload": "Upload Image",
"tab_raw_tags": "Raw Tags",
"label_unique_tags": "Merged Unique Tags",
"btn_send_to_cat": "Send These Tags to Categorization ➡️",
"tab_refined_tags": "Refined",
"label_refined_tags": "Refined (Cleaned) Tags",
"tab_categorized_tags": "Categorized",
"label_categorized_tags": "Categorized Tags",
"header_wildcard": "### 📂 Add to Wildcard Pack",
"tab_gemini_caption": "Captioned (GeminiCaption)",
"label_gemini_caption": "Gemini Caption",
"tab_combined_caption": "Categorized + Captioned (GeminiCaption)",
"label_combined_caption": "Categorized and Gemini Combination",
# Batch Tab
"tab_batch_title": "📚 Batch Tagging",
"btn_process_batch": "Process Images (With General Settings)",
"label_batch_input": "Upload Images (Multiple Selection)",
"tab_batch_original": "Original Tags (Combined)",
"label_batch_original": "Original Tags from All Images",
"tab_batch_refined": "Refined (Combined)",
"label_batch_refined": "Refined Tags from All Images",
"tab_batch_cat": "Categorized (Line by Line)",
"tab_batch_gemini": "Gemini Caption (All)",
"label_batch_gemini": "Captions for All Images",
"tab_batch_html": "Detailed HTML Report",
"label_batch_html": "Detailed Results",
"btn_batch_download": "Download All Result Tags (.txt)",
# Dual Tab
"tab_dual_title": "↔️ Dual Tagging",
"dual_note": "<p style='color:#666; font-size:0.9em;'>Note: Dual mode uses separate categorization settings for each image from the 'Settings' tab.</p>",
"btn_process_dual": "Compare and Tag Images",
"label_img1": "Image 1",
"label_img2": "Image 2",
"tab_dual_combined": "Combined",
"label_dual_combined": "Combined Unique Tags",
"label_dual_refined": "Combined Refined Tags",
"label_dual_cat": "Combined Categorized",
"label_gemini_img1": "Image 1 Gemini",
"label_gemini_img2": "Image 2 Gemini",
# Tools Tab
"tab_prompt_gen": "📝 Prompt Generator",
"tab_category_tools": "🏷️ Category Tools",
"tab_rule_management": "🔁 Rule Management",
"tab_text_tools": "📝 Text Tools",
"tab_image_tools": "🖼️ Image Tools",
"tab_video_creator": "🎬 Video Creator",
"tab_art_studio": "🎨 Art Studio",
"label_tags_input": "Enter Tags (comma separated)",
"placeholder_tags_input": "example: 1girl, blue hair, long hair, cat ears...",
# Category Tools
"cat_live_tab_title": "Live Categorization",
"cat_live_header": "<h2 style='color:#2563eb'>Categorize Tags</h2>",
"cat_live_main_tab": "Main Categorization",
"cat_live_main_select": "Select Main Categories to Show",
"cat_live_main_btn": "Categorize by Main",
"cat_live_unmatched_btn": "⚠️ Transfer Unmatched to Editor and Edit ➡️",
"cat_live_main_output": "Main Categorized Tags",
"cat_live_sub_tab": "Sub Categorization",
"cat_live_sub_select": "Select Sub Categories to Show",
"cat_live_sub_btn": "Categorize by Sub",
"cat_live_sub_output": "Sub Categorized Tags",
"cat_manage_tab_title": "Category/Tag Editing",
"cat_manage_header": "<h3 style='color:#007bff;'>Manage Category and Tag Files</h3>",
"cat_manage_main_accordion": "Main Category Management",
"cat_manage_main_grid": "All Categories",
"cat_manage_main_refresh": "↻ Refresh Main Categories",
"cat_manage_main_select": "Select Category",
"cat_manage_tags_input": "Tags (comma separated)",
"btn_add": "Add",
"btn_delete": "Delete",
"cat_manage_sub_accordion": "Sub Category Management",
"cat_manage_sub_grid": "All Sub Categories",
"cat_manage_sub_refresh": "↻ Refresh Sub Categories",
# Category Redesign
"cat_redesign_live_tab": "⚡ Live Test",
"cat_redesign_main_tab": "📂 Main Category Management",
"cat_redesign_sub_tab": "📁 Sub Category Management",
"cat_manage_sub_select": "Select Sub Category",
# Image Tools
"img_tools_header": "<h3 style='color:#0077b6;'>Batch Image Processing</h3>",
"img_tools_paths_input": "Folder Paths (One per line)",
"img_tools_select_folder_btn": "📁 Select Folder",
"img_tools_clear_btn": "🗑️ Clear",
"img_tools_save_settings_btn": "Save Path and Tool Settings",
"img_tools_res_accordion": "1. 📐 Resolution",
"img_tools_scale_label": "Scale",
"btn_apply": "Apply",
"img_tools_rename_accordion": "2. 📝 Renaming (Templated)",
"img_tools_rename_desc": "Renames files sequentially. Template must include **`{Number}`**.",
"img_tools_template_select": "Ready Templates",
"img_tools_delete_template_btn": "🗑️ Delete Template",
"img_tools_new_template_input": "Add New Template",
"img_tools_new_template_placeholder": "Ex: Adoptable {Number} (Elf)",
"img_tools_add_template_btn": "➕ Add to List",
"img_tools_start_num": "Start Number",
"img_tools_digit_count": "Digits (e.g. 3 for 001)",
"img_tools_rename_btn": "Rename Files",
"img_tools_watermark_accordion": "3. 🖋️ Watermark",
"img_tools_watermark_default": "Sample Watermark",
"img_tools_watermark_text": "Text",
"img_tools_watermark_opacity": "Opacity",
"img_tools_watermark_size": "Font Size",
"img_tools_watermark_angle": "Angle",
"img_tools_format_accordion": "4. 🖼️ Format",
"img_tools_format_label": "Format",
"btn_convert": "Convert",
"img_tools_bc_accordion": "5. 🔅 Brightness/Contrast",
"img_tools_brightness": "Brightness",
"img_tools_contrast": "Contrast",
"img_tools_ds_accordion": "6. 🧼 Denoise/Sharpen",
"img_tools_denoise": "Denoise",
"img_tools_sharpen": "Sharpen",
# Text Tools
"txt_tools_header": "<h3 style='color:#28a745;'>Manual Text Tools</h3>",
"txt_tools_input": "Text to Process",
"txt_tools_tab_clean": "Cleaning",
"txt_tools_clean_btn": "Clean and Uniquify",
"label_result": "Result",
"txt_tools_tab_format": "Change Format",
"txt_tools_lines_to_comma": "Lines -> Comma",
"txt_tools_comma_to_lines": "Comma -> Lines",
"txt_tools_tab_random": "Select Random",
"txt_tools_line_count": "Line Count",
"btn_select": "Select",
"txt_tools_tab_refine": "Refine",
"txt_tools_refine_desc": "Words to remove are read from **`{filename}`**.",
"btn_filter": "Filter",
# Rule Tools
"rule_tools_intro": "Manage how tags are replaced, merged, and appended to results in this area.",
"rule_rep_desc": "Automatically replaces tags with other tags.",
"rule_rep_accordion": "Replacement Rules (Regex Supported)",
"rule_active_file": "Active File",
"rule_new_file_name": "New File Name",
"rule_create_file_btn": "Create New File",
"rule_tab_quick_add": "Quick Add Rule",
"rule_rep_old": "Old Tag (or Regex)",
"rule_rep_new": "New Tag",
"rule_add_to_file_btn": "Add Rule to File",
"rule_tab_edit_file": "Edit File",
"rule_file_content_manual": "File Content (Manual Edit)",
"rule_save_all_btn": "Save All Content",
"rule_syn_accordion": "Merging Rules (Synonyms)",
"rule_syn_intro": "Merges multiple tags into one main tag (Deletes others).",
"rule_syn_main": "Main Tag (Kept)",
"rule_syn_remove": "Synonyms to Delete (Comma separated)",
"rule_add_accordion": "Addition Rules (Auto Append)",
"rule_add_intro": "Tags in this section are automatically appended to the end of the result list.",
"rule_add_content_input": "Tags to Add (Line by line or comma)",
"rule_add_save_btn": "Save Addition Rules",
# Art Tools
"art_header": "### 🎨 Furry & Adoptable Tools",
"art_desc": "Grid creation tools for sales.",
"art_tab_grid": "田 Adoptable Grid Creator",
"art_file_input": "Select Images (Multiple)",
"art_grid_settings": "Grid Settings",
"art_cols": "Columns (How many images side-by-side?)",
"art_bg_color": "Background Color",
"art_label_settings": "Label Settings",
"art_add_labels_check": "Add Text Below Image",
"art_label_type": "Label Type",
"art_start_num": "Start Number / Price",
"art_create_btn": "Create Grid",
"art_output": "Grid Result",
# Prompt Generator
"prompt_template_mgmt_header": "### 📝 Template Management",
"prompt_select_template": "Select Template",
"prompt_new_template_name": "New Template Name",
"prompt_template_content": "Template Content",
"btn_update": "💾 Update",
"btn_add_new": "➕ Add New",
"prompt_generation_header": "### 🚀 Generation",
"prompt_gen_btn": "GENERATE SELECTED TEMPLATE",
"prompt_gen_all_btn": "GENERATE ALL TEMPLATES",
"prompt_var_settings_accordion": "🛠️ Variable Settings (Add/Edit Options)",
"prompt_select_var": "Select Variable to Edit",
"prompt_var_label": "Label Name",
"prompt_var_default": "Default Value",
"prompt_var_options": "Options (One per line)",
"prompt_update_var_btn": "Update Variable",
# Video Creator
"vid_header": "### 🎬 Pro Video Studio",
"vid_desc": "Combine images and music, select format and add effects.",
"vid_img_input": "1. Select Images (Multiple for Slideshow)",
"vid_audio_input": "2. Select Music (Multiple)",
"vid_resolution": "Video Format (Resolution)",
"vid_speed": "Processing Speed",
"vid_text_overlay": "Add Text Over Video (Optional)",
"vid_spectrum_check": "Add Audio Spectrum (WARNING: Increases render time significantly)",
"vid_create_btn": "CREATE VIDEO",
"vid_preview": "Preview",
"vid_status": "Process Status",
},
}
|