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