# 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": "

Genel Yapılandırma ve Model Ayarları

", "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": "

Not: Dual modda her iki resim için 'Ayarlar' sekmesindeki ayrı kategorizasyon ayarları kullanılır.

", "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": "

Etiketleri Kategorilere Ayırın

", "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": "

Kategori ve Etiket Dosyalarını Yönetin

", "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": "

Toplu Resim İşleme

", "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": "

Manuel Metin Araçları

", "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": "

General Configuration and Model Settings

Manage tagging modes, sensitivity, and language options here.

", "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": "

Note: Dual mode uses separate categorization settings for each image from the 'Settings' tab.

", "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": "

Categorize Tags

", "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": "

Manage Category and Tag Files

", "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": "

Batch Image Processing

", "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": "

Manual Text Tools

", "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", }, }