Whyx-PROmpTea / src /i18n.py
ArtShumov's picture
fix(i18n): qwen_desc parity keys; test_identifiers cleanup; tagger_mode_vit removed from drop-down (--mouseover duplication bug)
a8875a5
Raw
History Blame
54.6 kB
L10N = {
"en": {
"app_title": "Whyx-PROmpTea",
"input_label": "Your Prompt",
"input_placeholder": "Paste your prompt here...\nExample: masterpiece, best quality, 1girl, hatsune miku, vocaloid, smile, blue hair, twintails",
"input_desc": "Enter any text prompt. Include a subject (1girl, 1boy) for best results. Artist tags like artist:hews are supported.",
"model_label": "Model",
"model_desc": "Anima: anime-style SD model. Illustrious XL: high-quality versatile SDXL model.",
"anima": "Anima",
"illustrious": "Illustrious XL",
"rating_label": "Rating",
"rating_desc": "Content safety level. PG-PG13 is SFW. R-R+ allows suggestive/NSFW content.",
"rating_pg": "PG (SFW)",
"rating_pg13": "PG-13",
"rating_pg16": "PG-16+",
"rating_r": "R",
"rating_rplus": "R+",
"variations_label": "Variations",
"variations_desc": "Number of prompt variations to generate (1-10). More = more diverse outputs.",
"creativity_label": "Creativity",
"creativity_desc": "6 levels: Very Low (1 tag/cat, 10% replacement of your tags, no shuffle) → Extreme (5-10 tags/cat, 60% replacement, cross-category injection via rewrite_map, up to 3 wildcard categories, 30% synonym substitution, full shuffle, low diversity threshold). Controls how many new tags are added and how aggressively existing ones are replaced or substituted.",
"creativity_very_low": "Very Low",
"creativity_low": "Low",
"creativity_medium": "Medium",
"creativity_high": "High",
"creativity_very_high": "Very High",
"creativity_extreme": "Extreme",
"weight_label": "Tag Weights",
"weight_desc": "Off: plain tags. Light: quality tags (masterpiece, best quality), artists (1.2-1.4x) and impactful effects (bloom, depth of field, dramatic lighting, etc.) get boosted. On: all tags get random weights (0.9-1.1x).",
"weight_off": "Off",
"weight_light": "Light",
"weight_on": "On",
"categories_label": "Enhancement Categories",
"categories_desc": "Select which tag categories to enhance your prompt with. Each category injects context-aware tags that are automatically filtered for conflicts, deduplicated (exact + synonym + fuzzy), and optionally enriched via web search (Danbooru). Creativity level controls how many tags per category and how aggressively existing tags are replaced.",
"enable_cat": "Enable {}",
"quality": "Quality",
"quality_desc": "Quality & rating: masterpiece, best quality, score_9",
"lighting": "Lighting",
"lighting_desc": "Lighting styles: sunlight, neon glow, god rays",
"composition": "Composition",
"composition_desc": "Shot framing: dutch angle, aerial shot",
"effects": "Visual Effects",
"effects_desc": "Post-processing FX: bloom, depth of field, glitch",
"atmosphere": "Atmosphere",
"atmosphere_desc": "Mood & tone: dreamy, foreboding, nostalgic",
"framing": "Framing",
"framing_desc": "Camera angles: from above, rule of thirds",
"style": "Style",
"style_desc": "Art genres: ukiyo-e, ghibli, oil painting",
"colors": "Colors",
"colors_desc": "Color grading: teal & orange, sepia, duotone",
"background": "Background",
"background_desc": "Locations: city street, castle ruins, shrine",
"pose": "Pose",
"pose_desc": "Character poses: fighting stance, mid-air, meditating",
"expression": "Expression",
"expression_desc": "Expressions & archetypes: blush, smug, tsundere",
"clothing": "Clothing",
"clothing_desc": "Outfits: hoodie, kimono, armor",
"special_fx": "Special FX",
"special_fx_desc": "Magic & elemental FX: magic circle, portal, lightning aura",
"nsfw": "NSFW",
"nsfw_desc": "Adult tags: ahegao, nude, bondage",
"year_meta": "Year / Meta",
"year_meta_desc": "Temporal & technical: year 2025, highres, absurdres",
"animal": "Animals",
"animal_desc": "Creature features: cat ears, wings, dragon",
"furry": "Furry",
"furry_desc": "Furry & anthro: nekomimi, fluffy tail, paw pads",
"object": "Objects",
"object_desc": "Props & weapons: sword, glasses, umbrella",
"food": "Food",
"food_desc": "Food & drinks: sushi, ramen, cake",
"vehicle": "Vehicles",
"vehicle_desc": "Cars, ships, mecha & transport",
"weapon": "Weapons",
"weapon_desc": "Swords, bows, guns & armaments",
"architecture": "Architecture",
"architecture_desc": "Castles, towers, ruins & buildings",
"demon": "Demon",
"demon_desc": "Demonic auras, hellfire, dark magic & infernal themes",
"angelic": "Angelic",
"angelic_desc": "Holy auras, divine light, angel wings & sacred themes",
"hair": "Hair",
"hair_desc": "Hair colors, styles & accessories: twintails, ahoge, kanzashi",
"body": "Body",
"body_desc": "Body parts & details: collarbone, navel, freckles, abs",
"accessory": "Accessory",
"accessory_desc": "Jewelry & wearables: earrings, choker, goggles, sash",
"season": "Season",
"season_desc": "Seasons, holidays & weather: cherry blossoms, snow, christmas",
"artist_section": "Artist Style",
"artist_label": "Artist",
"artist_style_placeholder": "Filter by style...",
"artist_style_desc": "Filter artists by their art style: vibrant, dark, cute, elegant, etc.",
"artist_all": "All",
"artist_select": "Select Artists",
"artist_search_label": "Search Artists",
"artist_search_placeholder": "Type artist name, style or tag...",
"artist_search_desc": "Search by artist name, style or signature tags. Top 50 popular artists shown by default.",
"artist_preview_title": "Artist Preview",
"artist_preview_empty": "Select an artist to see description, similar artists and Danbooru preview link.",
"artist_select_desc": "Pick specific Danbooru artists. Their signature style tags will be injected. Up to 3 recommended.",
"artist_placeholder": "Pick artists...",
"tandem_section": "Artist Tandems",
"tandem_label": "Tandems",
"tandem_random": "Random Tandem",
"tandem_random_desc": "Enable to randomly pick a compatible artist pair each generation.",
"tandem_select": "Select Tandem",
"tandem_select_desc": "Choose a pre-matched artist pair with compatible styles.",
"tandem_placeholder": "Pick a tandem...",
"tandem_blend": "Style Blend",
"presets_label": "Quick Presets",
"presets_desc": "One-click preset combinations for common styles.",
"preset_cinematic": "Cinematic",
"preset_cinematic_desc": "Film-like quality with dramatic lighting and atmosphere.",
"preset_dreamy": "Dreamy",
"preset_dreamy_desc": "Soft, ethereal, pastel colors with dreamy atmosphere.",
"preset_vibrant": "Vibrant",
"preset_vibrant_desc": "Bold colors, flat color, thick outlines for pop art style.",
"preset_natural": "Natural",
"preset_natural_desc": "Realistic lighting, natural colors, minimal effects.",
"preset_dramatic": "Dramatic",
"preset_dramatic_desc": "High contrast, dramatic lighting, bold compositions.",
"preset_kawaii": "Kawaii",
"preset_kawaii_desc": "Cute, soft, pastel colors with kawaii style tags.",
"preset_gothic": "Gothic",
"preset_gothic_desc": "Dark, moody atmosphere with gothic style elements.",
"preset_cyberpunk": "Cyberpunk",
"preset_cyberpunk_desc": "Neon, futuristic, tech-noir atmosphere.",
"preset_watercolor": "Watercolor",
"preset_watercolor_desc": "Soft, painterly watercolor aesthetic.",
"preset_portrait": "Portrait",
"preset_portrait_desc": "Portrait framing with detailed face and soft lighting.",
"preset_landscape": "Landscape",
"preset_landscape_desc": "Wide shot, detailed background, nature or cityscape.",
"preset_mecha": "Mecha",
"preset_mecha_desc": "Mechanical elements, detailed robots, sci-fi style.",
"preset_fantasy": "Fantasy",
"preset_fantasy_desc": "Magical effects, fantasy atmosphere, mythical creatures.",
"preset_noir": "Noir",
"preset_noir_desc": "Dark noir aesthetic with dramatic shadows.",
"preset_sakura": "Sakura",
"preset_sakura_desc": "Japanese aesthetic with cherry blossoms, traditional elements.",
"preset_underwater": "Underwater",
"preset_underwater_desc": "Underwater effects, aquatic atmosphere, blue tones.",
"preset_space": "Space",
"preset_space_desc": "Cosmic background, stars, planets, sci-fi atmosphere.",
"preset_detailed_art": "Detailed Art",
"preset_detailed_art_desc": "High detail tags: highres, absurdres, incredibly absurdres.",
"preset_moe_blobs": "Moe Blobs",
"preset_moe_blobs_desc": "Chibi, cute, soft Moe aesthetic with big eyes.",
"preset_warrior": "Warrior",
"preset_warrior_desc": "Action poses, armor, weapons, dynamic combat style.",
"preset_retro": "Retro",
"preset_retro_desc": "Vintage retro style with film grain and warm nostalgic colors.",
"preset_steampunk": "Steampunk",
"preset_steampunk_desc": "Brass gears, steam tech and Victorian sci-fi atmosphere.",
"preset_magical_girl": "Magical Girl",
"preset_magical_girl_desc": "Sparkles, magical outfits, transformation effects and cute expressions.",
"preset_horror": "Horror",
"preset_horror_desc": "Dark scary atmosphere, harsh lighting and frightening expressions.",
"preset_winter": "Winter",
"preset_winter_desc": "Snowy landscapes, cold colors and warm winter clothing.",
"preset_summer": "Summer",
"preset_summer_desc": "Bright sunny scenes, beach or meadow backgrounds and vibrant colors.",
"preset_angelic": "Angelic",
"preset_angelic_desc": "Holy ethereal glow, soft divine lighting and pure atmosphere.",
"preset_slice_of_life": "Slice of Life",
"preset_slice_of_life_desc": "Casual everyday scenes with natural poses and warm mood.",
"preset_action": "Action",
"preset_action_desc": "Dynamic movement, speed lines, impact sparks and energetic poses.",
"preset_romantic": "Romantic",
"preset_romantic_desc": "Soft romantic lighting, tender expressions and warm colors.",
"preset_demon": "Demon",
"preset_demon_desc": "Dark infernal aura, fiery effects and menacing expressions.",
"preset_fantasy_creature": "Fantasy Creature",
"preset_fantasy_creature_desc": "Mythical beasts, magical habitats and creature effects.",
"preset_pirate": "Pirate / Nautical",
"preset_pirate_desc": "Swashbuckling adventure, naval gear, ocean backgrounds.",
"preset_sci_fi": "Sci-Fi Commander",
"preset_sci_fi_desc": "Futuristic gear, energy weapons, neon and hologram effects.",
"preset_medieval": "Medieval / Renaissance",
"preset_medieval_desc": "Castles, knights, royal attire and torchlit atmosphere.",
"preset_mecha_pilot": "Mecha Pilot",
"preset_mecha_pilot_desc": "Cockpit view, pilot suits, giant robot controls.",
"preset_maid_cafe": "Maid Cafe",
"preset_maid_cafe_desc": "Maid outfits, cafe setting, sweet treats and warm colors.",
"preset_holiday": "Holiday / Christmas",
"preset_holiday_desc": "Festive decorations, holiday outfits, seasonal atmosphere.",
"preset_furry_anthro": "Furry / Anthro",
"preset_furry_anthro_desc": "Anthro characters, animal ears, fluffy tails, feral expressions.",
"preset_school": "School / Uniform",
"preset_school_desc": "School uniforms, classroom settings, youthful expressions.",
"generate_btn": "✨ Generate",
"generate_btn_loading": "⏳ Generating...",
"mode_label": "Mode",
"mode_desc": "Standard Vary: add category tags to your prompt. Full Rewrite: rebuild prompt from scratch using your concepts.",
"mode_standard": "Standard Vary",
"mode_rewrite": "Full Rewrite",
"fx_label": "Effects Layer",
"fx_desc": "Add an effects/lighting layer on top of the variations (off / light / rich).",
"fx_off": "Off",
"fx_light": "Light",
"fx_rich": "Rich",
"results_label": "Generated Prompts",
"results_desc": "Enhanced prompt variations. Click 📋 to copy.",
"copy_btn": "Copy",
"copied_btn": "Copied!",
"hotkeys_hint": "Hotkeys: Ctrl+Shift+Enter = Generate, Ctrl+Shift+X = Clear prompt",
"seed_label": "Seed",
"seed_info": "Leave empty for random",
"reload_btn": "🔄 Reload Data",
"result_placeholder": "Click '✨ Generate' to create variations",
"neg_placeholder": "Negative prompt (auto-generated)",
"no_results": "Click '✨ Generate' to create prompt variations",
"error_parse": "Could not parse prompt. Include a subject (e.g. 1girl, 1boy).",
"language_label": "Language",
"lang_en": "EN",
"lang_ru": "RU",
"similar_artists": "Similar artists",
"top_artists_in_style": "Top artists in this style",
"danbooru_link": "\U0001f5bc\ufe0f Danbooru \u2197",
"generation_error": "Generation error: {exc}",
"analyzer_section": "Prompt Analysis",
"analyzer_desc": "Live analysis of your prompt structure and recommendations.",
"history_section": "History & Favorites",
"history_desc": "Recent generations and your liked prompts.",
"history_empty": "No generations yet. Generate some prompts first!",
"history_prompt": "Prompt",
"history_restore": "Restore",
"history_liked": "Liked prompts",
"history_no_likes": "No liked prompts yet. Click ♥ on a result to favorite it.",
"like_btn": "♥",
"liked_btn": "♥",
"favorites_label": "Favorites",
"web_search_label": "🌐 Web Tag Search",
"web_search_desc": "Search Danbooru for related tags, or browse local tags by keyword.",
"web_search_placeholder": "Search tags (e.g. 1girl, sunset, blue_hair)...",
"web_search_btn": "Search",
"web_search_offline": "Local results (offline)",
"web_search_online": "Danbooru results",
"web_search_error": "Search error: {exc}",
"web_search_empty": "Enter a keyword to search tags.",
"web_enrich_label": "🌐 Web Enrich",
"web_enrich_desc": "Auto-enrich prompt with tags fetched from Danbooru. Falls back to offline co-occurrence data.",
"web_enrich_on": "On",
"web_enrich_off": "Off",
"web_enrich_no_results": "No enrichment tags found.",
"web_enrich_applied": "+{n} enrichment tags applied",
"analyzer_parse_error": "Could not parse prompt.",
"analyzer_subject": "Subject",
"analyzer_character": "Character",
"analyzer_series": "Series",
"analyzer_artists": "Artists",
"analyzer_tags": "Tags",
"analyzer_quality": "Quality",
"analyzer_meta": "Meta",
"analyzer_general": "General",
"analyzer_tokens": "Tokens",
"analyzer_natural_lang": "\U0001f310 Natural Language",
"analyzer_status_good": "\u2705 Good",
"analyzer_status_missing": "\u274c Missing",
"analyzer_status_conflict": "\u26a0\ufe0f Conflict",
"analyzer_status_low": "\u26a0\ufe0f Low",
"analyzer_conflict": "(conflict)",
"analyzer_duplicate": "(duplicate)",
"rec_missing_subject": "Add a subject tag (1girl, 1boy, etc.)",
"rec_unrecognized": "Could not recognize prompt structure",
"rec_nl_only": "Natural language detected — consider adding comma-separated tags for better results",
"rec_quality_missing": "No quality tags — add masterpiece, best quality",
"rec_quality_conflict": "Mixed positive & negative quality tags",
"rec_quality_low": "Consider adding masterpiece / best quality",
"rec_safety_missing": "No safety tag (safe/sensitive/nsfw/explicit)",
"rec_artist_missing": "Consider adding an artist tag (artist:name)",
"rec_token_clip": "Prompt exceeds ~{n} CLIP tokens — may be truncated",
"rec_token_t5": "Prompt exceeds ~{n} T5 tokens",
"rec_tag_conflicts": "Conflicting tags detected",
"rec_duplicate_tags": "Duplicate tags detected",
"rec_too_many_tags": "Too many general tags — consider being more selective",
"rec_character_series_missing": "Consider adding a character and series name",
"rec_too_many_artists": "More than 3 artists may confuse the model",
"analyzer_category_overload": "(category overload)",
"analyzer_theme_overload": "(theme overload)",
"analyzer_intent_mismatch": "(intent mismatch)",
"rec_theme_overload": "Too many tags from one theme group — consider diversifying",
"rec_intent_mismatches": "Some tags conflict with detected intent",
"rec_low_core_ratio": "Too few core tags (subject, character, body) — add fundamental descriptors first",
"rec_high_core_ratio": "Mostly core tags — add decorative elements for richness",
"tagger_section": "Image Tagger",
"tagger_desc": "Upload an image to automatically recognize Danbooru-style tags using WD EVA02-Large model.",
"tagger_image": "Upload Image",
"tagger_gen_threshold": "General Threshold",
"tagger_gen_threshold_desc": "Tags below this confidence are skipped (default: 0.35)",
"tagger_char_threshold": "Character Threshold",
"tagger_char_threshold_desc": "Higher threshold for character tags (default: 0.75)",
"tagger_btn": "Tag Image",
"tagger_no_image": "Please upload an image first.",
"tagger_unavailable": "Image tagger is unavailable. Install the optional dependencies (torch, timm) and set WHYX_ENABLE_TAGGER=1 to enable it.",
"tagger_error": "Tagging error: {exc}",
"tagger_processing": "Analyzing image…",
"tagger_results": "Recognized Tags",
"tagger_ratings": "Ratings",
"tagger_characters": "Characters",
"tagger_apply_btn": "Apply Tags to Prompt",
"tagger_ratings_label": "Classifying…",
"tagger_confidence": "Conf.",
"tagger_top_general": "Top General Tags",
"tagger_no_tags": "No tags above threshold. Try lowering the confidence threshold.",
"output_format_label": "Tag output format",
"output_format_desc": "Prompt: spaces, e.g. 'animal ears' (Anima/Illustrious ready). Booru: underscores, e.g. 'animal_ears'. score_N always keeps its underscore.",
"advanced_desc": "Optional hygiene layer applied to every generation: strip quality/artist/LoRA/metadata tags, blacklist unwanted tags (mirrored to negatives), and top up short prompts. Expand to configure.",
"app_subtitle": "Prompt Enhancement Studio — Anima & Illustrious XL",
"theme_label": "Theme",
"theme_dark": "Dark",
"theme_light": "Light",
"output_format_prompt": "Prompt (spaces)",
"output_format_booru": "Booru (underscores)",
"tagger_format_label": "Tag format",
"tagger_format_desc": "Prompt-ready escapes parentheses; Raw keeps booru underscores.",
"tagger_format_prompt": "Prompt-ready",
"tagger_format_raw": "Raw (booru)",
"tagger_model_label": "Model",
"tagger_mode_label": "Ensemble mode",
"tagger_pose_toggle_label": "Pose analysis",
"tagger_pose_toggle_info": "Enable YOLO pose detection (adds people/pose metadata)",
"tagger_mode_info": "Combine multiple WD14 taggers for broader coverage",
"tagger_mode_ensemble": "Ensemble (best)",
"tagger_mode_eva": "WD14 EVA02",
"tagger_mode_swinv2": "WD14 SwinV2",
# --- tagger / ensemble ---
# --- tagger / ensemble ---
"tagger_mode_vit": "WD14 ViT",
"tagger_mode_qwen": "Qwen3-VL (NL caption)",
"tagger_mode_qwen_desc": "Qwen3-VL (Natural-language caption)",
"tagger_pose_label": "Pose",
"tagger_pose_single": "{n} person detected",
"tagger_pose_many": "{n} people detected",
"tagger_caption_label": "Natural-language caption",
"tagger_chips_label": "Detected tags (click to toggle)",
"tagger_chars_label": "Detected characters",
"tagger_tags_label": "Tags to use",
"tagger_tags_desc": "Edit the list, then Apply or Copy. Built from the toggled tags above.",
"tagger_tags_ph": "Recognized tags will appear here…",
"tagger_copy": "Copy",
"tab_generate": "Generate",
"tab_tagger": "Tagger",
"tab_tools": "Tools",
"tab_history": "History",
"advanced_label": "Advanced & Cleanup",
"cleanup_label": "Cleanup & Blacklist",
"blacklist_label": "Tags to remove (blacklist)",
"blacklist_desc": "Comma- or newline-separated tags excluded from every variation (mirrors Booru Prompt Gallery' Tags to remove').",
"blacklist_ph": "e.g. simple background, watermark, patreon logo",
"blacklist_mirror": "Also add blacklisted tags to the negative prompt",
"strip_quality": "Strip quality tags",
"strip_artist": "Strip artist tags",
"strip_lora": "Strip LoRA / embedding triggers",
"strip_meta": "Strip meta tags",
"min_tags_label": "Minimum tag count",
"min_tags_desc": "Top up each variation to at least this many general tags by pulling safe pool tags.",
"user_presets_label": "My Presets",
"user_preset_name": "Preset name",
"user_preset_name_ph": "e.g. my_style",
"user_preset_tags": "Preset tags",
"user_preset_tags_ph": "comma-separated tags to store, e.g. neon glow, lens flare, cyberpunk",
"user_preset_save": "Save preset",
"user_preset_delete": "Delete preset",
"user_preset_select": "Saved presets",
"user_preset_apply": "Apply to generation",
"user_preset_need_name": "Enter a preset name first.",
"user_preset_saved": "Preset '{name}' saved.",
"user_preset_pick": "Pick a saved preset first.",
"user_preset_applied": "Preset '{name}' added to generation.",
"user_preset_deleted": "Preset '{name}' deleted.",
},
"ru": {
"app_title": "Whyx-PROmpTea",
"app_subtitle": "Студия улучшения промптов — Anima & Illustrious XL",
"input_label": "Ваш промпт",
"input_placeholder": "Вставьте промпт сюда...\nПример: masterpiece, best quality, 1girl, hatsune miku, vocaloid, smile, blue hair, twintails",
"input_desc": "Введите текстовый промпт. Для лучшего результата укажите subject (1girl, 1boy). Поддерживаются теги художников: artist:hews.",
"model_label": "Модель",
"model_desc": "Anima: SD модель для аниме-стиля. Illustrious XL: универсальная SDXL модель высокого качества.",
"anima": "Anima",
"illustrious": "Illustrious XL",
"rating_label": "Рейтинг",
"rating_desc": "Уровень безопасности контента. PG-PG13 — безобидный. R-R+ допускает откровенный контент.",
"rating_pg": "PG (SFW)",
"rating_pg13": "PG-13",
"rating_pg16": "PG-16+",
"rating_r": "R",
"rating_rplus": "R+",
"variations_label": "Вариации",
"variations_desc": "Количество вариаций промпта (1-10). Больше = разнообразнее результаты.",
"creativity_label": "Креативность",
"creativity_desc": "6 уровней: Very Low (1 тег/кат, 10% замены ваших тегов, без перемешивания) → Extreme (5-10 тегов/кат, 60% замены, межкатегор. инъекция через rewrite_map, до 3 случайных категорий, 30% замена синонимов, полное перемешивание, низкий порог разнообразия). Влияет на количество новых тегов и агрессивность замены существующих.",
"creativity_very_low": "Очень низкая",
"creativity_low": "Низкая",
"creativity_medium": "Средняя",
"creativity_high": "Высокая",
"creativity_very_high": "Очень высокая",
"creativity_extreme": "Экстрим",
"weight_label": "Веса тегов",
"weight_desc": "Выкл: обычные теги. Легкие: качественные теги (masterpiece, best quality), художники (1.2-1.4x) и значимые эффекты (bloom, depth of field, dramatic lighting и др.) получают усиление. Вкл: все теги получают случайные веса (0.9-1.1x).",
"weight_off": "Выкл",
"weight_light": "Легкие",
"weight_on": "Вкл",
"categories_label": "Категории улучшения",
"categories_desc": "Выберите категории тегов для улучшения промпта. Каждая категория добавляет контекстно-зависимые теги с авто-фильтрацией конфликтов, дедупликацией (точная + синонимы + нечёткая) и опциональным обогащением через Danbooru. Уровень креативности определяет количество тегов на категорию и агрессивность замены существующих тегов.",
"enable_cat": "Включить {}",
"quality": "Качество",
"quality_desc": "Качество и рейтинг: masterpiece, best quality, score_9",
"lighting": "Освещение",
"lighting_desc": "Типы освещения: sunlight, neon glow, god rays",
"composition": "Композиция",
"composition_desc": "Типы кадров: dutch angle, aerial shot",
"effects": "Визуальные эффекты",
"effects_desc": "Пост-обработка FX: bloom, depth of field, glitch",
"atmosphere": "Атмосфера",
"atmosphere_desc": "Настроение: dreamy, foreboding, nostalgic",
"framing": "Кадр",
"framing_desc": "Ракурсы: from above, rule of thirds",
"style": "Стиль",
"style_desc": "Жанры: ukiyo-e, ghibli, oil painting",
"colors": "Цвета",
"colors_desc": "Цветокоррекция: teal & orange, sepia, duotone",
"background": "Фон",
"background_desc": "Локации: city street, castle ruins, shrine",
"pose": "Поза",
"pose_desc": "Позы: fighting stance, mid-air, meditating",
"expression": "Выражение",
"expression_desc": "Выражения: blush, smug, tsundere",
"clothing": "Одежда",
"clothing_desc": "Одежда: hoodie, kimono, armor",
"special_fx": "Спецэффекты",
"special_fx_desc": "Магия и FX: magic circle, portal, lightning aura",
"nsfw": "NSFW",
"nsfw_desc": "Взрослые теги: ahegao, nude, bondage",
"year_meta": "Год / Мета",
"year_meta_desc": "Год и мета: year 2025, highres, absurdres",
"animal": "Животные",
"animal_desc": "Черты: cat ears, wings, dragon",
"furry": "Фурри",
"furry_desc": "Фурри: nekomimi, fluffy tail, paw pads",
"object": "Предметы",
"object_desc": "Предметы: sword, glasses, umbrella",
"food": "Еда",
"food_desc": "Еда: sushi, ramen, cake",
"vehicle": "Транспорт",
"vehicle_desc": "Машины, корабли, меха и транспорт",
"weapon": "Оружие",
"weapon_desc": "Мечи, луки, пушки и вооружение",
"architecture": "Архитектура",
"architecture_desc": "Замки, башни, руины и строения",
"demon": "Демон",
"demon_desc": "Демонические ауры, адский огонь, тёмная магия и темы преисподней",
"angelic": "Ангельское",
"angelic_desc": "Священные ауры, божественный свет, крылья ангелов и святые темы",
"hair": "Волосы",
"hair_desc": "Цвета, стили и аксессуары: twintails, ahoge, kanzashi",
"body": "Тело",
"body_desc": "Части тела: collarbone, navel, freckles, abs",
"accessory": "Аксессуары",
"accessory_desc": "Украшения: earrings, choker, goggles, sash",
"season": "Сезон",
"season_desc": "Сезоны, праздники, погода: cherry blossoms, snow, christmas",
"artist_section": "Стиль художника",
"artist_label": "Художник",
"artist_style_placeholder": "Фильтр по стилю...",
"artist_style_desc": "Фильтр художников по стилю: vibrant, dark, cute, elegant и др.",
"artist_all": "Все",
"artist_select": "Выбрать художников",
"artist_search_label": "Поиск художников",
"artist_search_placeholder": "Введите имя, стиль или тег...",
"artist_search_desc": "Поиск по имени, стилю или signature-тегам. По умолчанию показаны топ-50 популярных.",
"artist_preview_title": "Превью художника",
"artist_preview_empty": "Выберите художника, чтобы увидеть описание, похожих авторов и ссылку на Danbooru.",
"artist_select_desc": "Выберите конкретных художников Danbooru. Их signature style теги будут добавлены. Рекомендуется до 3.",
"artist_placeholder": "Выберите...",
"tandem_section": "Тандемы художников",
"tandem_label": "Тандемы",
"tandem_random": "Случайный тандем",
"tandem_random_desc": "Включите для случайного выбора совместимой пары художников при каждой генерации.",
"tandem_select": "Выбрать тандем",
"tandem_select_desc": "Выберите готовую пару художников с совместимыми стилями.",
"tandem_placeholder": "Выбрать...",
"tandem_blend": "Смешение стилей",
"presets_label": "Быстрые пресеты",
"presets_desc": "Готовые комбинации для популярных стилей одним нажатием.",
"preset_cinematic": "Кино",
"preset_cinematic_desc": "Кинематографическое качество с драматичным освещением и атмосферой.",
"preset_dreamy": "Мечта",
"preset_dreamy_desc": "Мягкая, эфирная, пастельная атмосфера с мечтательным настроением.",
"preset_vibrant": "Яркий",
"preset_vibrant_desc": "Яркие цвета, flat color, толстые контуры в стиле поп-арт.",
"preset_natural": "Натурал",
"preset_natural_desc": "Реалистичное освещение, натуральные цвета, минимум эффектов.",
"preset_dramatic": "Драма",
"preset_dramatic_desc": "Высокий контраст, драматичное освещение, смелые композиции.",
"preset_kawaii": "Кавай",
"preset_kawaii_desc": "Милый, мягкий, пастельные цвета в кавай-стиле.",
"preset_gothic": "Готика",
"preset_gothic_desc": "Тёмная, мрачная атмосфера с готическими элементами.",
"preset_cyberpunk": "Киберпанк",
"preset_cyberpunk_desc": "Неон, футуризм, техно-нуар атмосфера.",
"preset_watercolor": "Акварель",
"preset_watercolor_desc": "Мягкая художественная акварельная эстетика.",
"preset_portrait": "Портрет",
"preset_portrait_desc": "Портретный кадр с детализированным лицом и мягким освещением.",
"preset_landscape": "Пейзаж",
"preset_landscape_desc": "Широкий кадр, детализированный фон, природа или городской пейзаж.",
"preset_mecha": "Меха",
"preset_mecha_desc": "Механические элементы, детализированные роботы, sci-fi стиль.",
"preset_fantasy": "Фэнтези",
"preset_fantasy_desc": "Магические эффекты, фэнтези-атмосфера, мифические существа.",
"preset_noir": "Нуар",
"preset_noir_desc": "Тёмная нуарная эстетика с драматичными тенями.",
"preset_sakura": "Сакура",
"preset_sakura_desc": "Японская эстетика с сакурой, традиционные элементы.",
"preset_underwater": "Подводный",
"preset_underwater_desc": "Подводные эффекты, водная атмосфера, синие тона.",
"preset_space": "Космос",
"preset_space_desc": "Космический фон, звёзды, планеты, sci-fi атмосфера.",
"preset_detailed_art": "Детализированное",
"preset_detailed_art_desc": "Теги высокой детализации: highres, absurdres, incredibly absurdres.",
"preset_moe_blobs": "Моэ",
"preset_moe_blobs_desc": "Чиби, милое, мягкое моэ-эстетика с большими глазами.",
"preset_warrior": "Воин",
"preset_warrior_desc": "Динамичные позы, броня, оружие, боевой стиль.",
"preset_retro": "Ретро",
"preset_retro_desc": "Винтажный ретро-стиль с фильм-грейном и тёплыми ностальгическими цветами.",
"preset_steampunk": "Стимпанк",
"preset_steampunk_desc": "Латунные шестерёнки, паровые технологии и викторианская sci-fi атмосфера.",
"preset_magical_girl": "Девочка-волшебница",
"preset_magical_girl_desc": "Блёстки, волшебные наряды, эффекты трансформации и милые выражения.",
"preset_horror": "Хоррор",
"preset_horror_desc": "Тёмная страшная атмосфера, жёсткое освещение и пугающие выражения.",
"preset_winter": "Зима",
"preset_winter_desc": "Снежные пейзажи, холодные цвета и тёплая зимняя одежда.",
"preset_summer": "Лето",
"preset_summer_desc": "Яркие солнечные сцены, пляж или луг на фоне и насыщенные цвета.",
"preset_angelic": "Ангельский",
"preset_angelic_desc": "Священное эфирное сияние, мягкое божественное освещение и чистая атмосфера.",
"preset_slice_of_life": "Повседневность",
"preset_slice_of_life_desc": "Повседневные сцены с естественными позами и тёплым настроением.",
"preset_action": "Экшн",
"preset_action_desc": "Динамичное движение, линии скорости, искры удара и энергичные позы.",
"preset_romantic": "Романтика",
"preset_romantic_desc": "Мягкое романтическое освещение, нежные выражения и тёплые цвета.",
"preset_demon": "Демон",
"preset_demon_desc": "Тёмная преисподняя аура, огненные эффекты и угрожающие выражения.",
"preset_fantasy_creature": "Фэнтези-создание",
"preset_fantasy_creature_desc": "Мифические звери, волшебные места обитания и эффекты существ.",
"preset_pirate": "Пират / Море",
"preset_pirate_desc": "Приключения, морская амуниция, океанские фоны.",
"preset_sci_fi": "Научная фантастика",
"preset_sci_fi_desc": "Футуристическая экипировка, энергетическое оружие, неон и голограммы.",
"preset_medieval": "Средневековье",
"preset_medieval_desc": "Замки, рыцари, королевские одежды и атмосфера факелов.",
"preset_mecha_pilot": "Пилот меха",
"preset_mecha_pilot_desc": "Вид из кабины, костюмы пилота, управление гигантскими роботами.",
"preset_maid_cafe": "Мейд-кафе",
"preset_maid_cafe_desc": "Формы горничных, кафе, десерты и тёплые цвета.",
"preset_holiday": "Праздник",
"preset_holiday_desc": "Праздничные украшения, наряды, сезонная атмосфера.",
"preset_furry_anthro": "Фурри",
"preset_furry_anthro_desc": "Антропоморфные персонажи, уши, хвосты, звериные выражения.",
"preset_school": "Школа",
"preset_school_desc": "Школьная форма, классы, юные выражения.",
"generate_btn": "✨ Создать",
"generate_btn_loading": "⏳ Создание...",
"mode_label": "Режим",
"mode_desc": "Стандартная вариация: добавляет теги категорий к вашему промпту. Полная пересборка: перестраивает промпт с нуля, используя ваши концепты.",
"mode_standard": "Стандартная вариация",
"mode_rewrite": "Полная пересборка",
"fx_label": "Слой эффектов",
"fx_desc": "Добавить слой эффектов/освещения поверх вариаций (выкл / легко / насыщенно).",
"fx_off": "Выкл",
"fx_light": "Легко",
"fx_rich": "Насыщенно",
"results_label": "Готовые промпты",
"results_desc": "Улучшенные вариации промпта. Нажмите 📋 для копирования.",
"copy_btn": "Копировать",
"copied_btn": "Скопировано!",
"hotkeys_hint": "Горячие клавиши: Ctrl+Shift+Enter — Создать, Ctrl+Shift+X — Очистить промпт",
"seed_label": "Зерно (Seed)",
"seed_info": "Оставьте пустым для случайного значения",
"reload_btn": "🔄 Обновить данные",
"result_placeholder": "Нажмите «✨ Создать» для генерации",
"neg_placeholder": "Негативный промпт (авто-генерация)",
"no_results": "Нажмите «✨ Создать» для генерации вариаций",
"error_parse": "Ошибка разбора. Укажите тему (1girl, 1boy и т.д.).",
"language_label": "Язык",
"lang_en": "EN",
"lang_ru": "RU",
"similar_artists": "Похожие художники",
"top_artists_in_style": "Топ художников в этом стиле",
"danbooru_link": "\U0001f5bc\ufe0f Danbooru \u2197",
"generation_error": "Ошибка генерации: {exc}",
"analyzer_section": "Анализ промпта",
"analyzer_desc": "Анализ структуры промпта в реальном времени и рекомендации.",
"history_section": "История и избранное",
"history_desc": "Последние генерации и отмеченные промпты.",
"history_empty": "История пуста. Сначала сгенерируйте промпты!",
"history_prompt": "Промпт",
"history_restore": "Восстановить",
"history_liked": "Понравившиеся промпты",
"history_no_likes": "Пока нет понравившихся промптов. Нажмите ♥ на результате, чтобы добавить в избранное.",
"like_btn": "♥",
"liked_btn": "♥",
"favorites_label": "Избранное",
"web_search_label": "🌐 Поиск тегов",
"web_search_desc": "Поиск тегов на Danbooru или в локальном пуле по ключевым словам.",
"web_search_placeholder": "Поиск тегов (например: 1girl, sunset, blue_hair)...",
"web_search_btn": "Искать",
"web_search_offline": "Локальные результаты",
"web_search_online": "Результаты Danbooru",
"web_search_error": "Ошибка поиска: {exc}",
"web_search_empty": "Введите ключевое слово для поиска тегов.",
"web_enrich_label": "🌐 Веб-обогащение",
"web_enrich_desc": "Автоматическое обогащение промпта тегами с Danbooru. При ошибке сети — локальная база co-occurrence.",
"web_enrich_on": "Вкл",
"web_enrich_off": "Выкл",
"web_enrich_no_results": "Теги для обогащения не найдены.",
"web_enrich_applied": "+{n} тегов обогащения добавлено",
"analyzer_parse_error": "Не удалось разобрать промпт.",
"analyzer_subject": "Субъект",
"analyzer_character": "Персонаж",
"analyzer_series": "Серия",
"analyzer_artists": "Художники",
"analyzer_tags": "Теги",
"analyzer_quality": "Качество",
"analyzer_meta": "Мета",
"analyzer_general": "Общие",
"analyzer_tokens": "Токены",
"analyzer_natural_lang": "\U0001f310 Естественный язык",
"analyzer_status_good": "\u2705 Хорошо",
"analyzer_status_missing": "\u274c Отсутствуют",
"analyzer_status_conflict": "\u26a0\ufe0f Конфликт",
"analyzer_status_low": "\u26a0\ufe0f Низкое",
"analyzer_conflict": "(конфликт)",
"analyzer_duplicate": "(дубликат)",
"rec_missing_subject": "Добавьте тег субъекта (1girl, 1boy и т.д.)",
"rec_unrecognized": "Не удалось распознать структуру промпта",
"rec_nl_only": "Обнаружен естественный язык — добавьте теги через запятую для лучшего результата",
"rec_quality_missing": "Нет тегов качества — добавьте masterpiece, best quality",
"rec_quality_conflict": "Смешаны положительные и отрицательные теги качества",
"rec_quality_low": "Рекомендуется добавить masterpiece / best quality",
"rec_safety_missing": "Нет тега безопасности (safe/sensitive/nsfw/explicit)",
"rec_artist_missing": "Рекомендуется добавить тег художника (artist:name)",
"rec_token_clip": "Промпт превышает ~{n} токенов CLIP — может быть обрезан",
"rec_token_t5": "Промпт превышает ~{n} токенов T5",
"rec_tag_conflicts": "Обнаружены конфликтующие теги",
"rec_duplicate_tags": "Обнаружены дублирующиеся теги",
"rec_too_many_tags": "Слишком много общих тегов — будьте избирательнее",
"rec_character_series_missing": "Рекомендуется добавить персонажа и название серии",
"rec_too_many_artists": "Более 3 художников могут запутать модель",
"analyzer_category_overload": "(перегрузка категории)",
"analyzer_theme_overload": "(перегрузка темы)",
"analyzer_intent_mismatch": "(несоответствие интенту)",
"rec_theme_overload": "Слишком много тегов из одной темы — добавьте разнообразие",
"rec_intent_mismatches": "Некоторые теги противоречат определённому интенту сцены",
"rec_low_core_ratio": "Слишком мало основных тегов (subject, character, body) — сначала добавьте базовые дескрипторы",
"rec_high_core_ratio": "Преимущественно базовые теги — добавьте декоративные элементы для насыщенности",
"tagger_section": "Теги изображения",
"tagger_desc": "Загрузите изображение для автоматического распознавания тегов в стиле Danbooru с помощью модели WD EVA02-Large.",
"tagger_image": "Загрузить изображение",
"tagger_gen_threshold": "Общий порог",
"tagger_gen_threshold_desc": "Теги ниже этого порога пропускаются (по умолчанию: 0.35)",
"tagger_char_threshold": "Порог персонажей",
"tagger_char_threshold_desc": "Более высокий порог для тегов персонажей (по умолчанию: 0.75)",
"tagger_btn": "Распознать теги",
"tagger_no_image": "Сначала загрузите изображение.",
"tagger_unavailable": "Имидж-теггер недоступен. Установите опциональные зависимости (torch, timm) и задайте WHYX_ENABLE_TAGGER=1, чтобы включить его.",
"tagger_error": "Ошибка распознавания: {exc}",
"tagger_processing": "Анализ изображения…",
"tagger_results": "Распознанные теги",
"tagger_ratings": "Рейтинги",
"tagger_characters": "Персонажи",
"tagger_apply_btn": "Применить теги в промпт",
"tagger_ratings_label": "Классификация…",
"tagger_confidence": "Увер.",
"tagger_top_general": "Основные теги",
"tagger_no_tags": "Нет тегов выше порога. Попробуйте снизить порог уверенности.",
"output_format_label": "Формат вывода тегов",
"output_format_desc": "Промпт: пробелы, напр. «animal ears» (для Anima/Illustrious). Booru: подчёркивания, напр. «animal_ears». score_N всегда сохраняет подчёркивание.",
"output_format_prompt": "Промпт (пробелы)",
"output_format_booru": "Booru (подчёркивания)",
"tagger_format_label": "Формат тегов",
"tagger_format_desc": "Prompt-ready экранирует скобки; Raw сохраняет booru-подчёркивания.",
"tagger_format_prompt": "Для промпта",
"tagger_format_raw": "Исходный (booru)",
"tagger_model_label": "Модель",
"tagger_mode_label": "Режим ансамбля",
"tagger_pose_toggle_label": "Определение позы",
"tagger_pose_toggle_info": "Включает YOLO-распознавание поз (добавляет метаданные людей/поз)",
"tagger_mode_info": "Комбинируйте несколько WD14-теггеров для большего покрытия",
"tagger_mode_ensemble": "Ансамбль (лучший)",
"tagger_mode_eva": "WD14 EVA02",
"tagger_mode_swinv2": "WD14 SwinV2",
"tagger_mode_vit": "WD14 ViT",
"tagger_mode_qwen": "Qwen3-VL (NL описание)",
"tagger_mode_qwen_desc": "Qwen3-VL (Подробное описание изображения)",
"tagger_pose_label": "Поза",
"tagger_pose_single": "Обнаружен {n} человек",
"tagger_pose_many": "Обнаружено {n} человек",
"tagger_caption_label": "Языковое описание сцены",
"tagger_chips_label": "Распознанные теги (клик — вкл/выкл)",
"tagger_chars_label": "Распознанные персонажи",
"tagger_tags_label": "Теги для использования",
"tagger_tags_desc": "Отредактируйте список, затем «Применить» или «Копировать». Собран из отмеченных выше тегов.",
"tagger_tags_ph": "Здесь появятся распознанные теги…",
"tagger_copy": "Копировать",
"tab_generate": "Генерация",
"tab_tagger": "Теггер",
"tab_tools": "Инструменты",
"tab_history": "История",
"advanced_desc": "Необязательный слой гигиены, применяемый к каждой генерации: убрать теги качества/художника/LoRA/метаданных, чёрный список ненужных тегов (зеркалится в негатив) и добор коротких промптов. Раскройте для настройки.",
"theme_label": "Тема",
"theme_dark": "Тёмная",
"theme_light": "Светлая",
"advanced_label": "Дополнительно и очистка",
"cleanup_label": "Очистка и чёрный список",
"blacklist_label": "Теги для удаления (чёрный список)",
"blacklist_desc": "Теги через запятую или с новой строки, исключаемые из каждой вариации (как «Tags to remove» в Booru Prompt Gallery).",
"blacklist_ph": "напр. simple background, watermark, patreon logo",
"blacklist_mirror": "Также добавить удаляемые теги в негативный промпт",
"strip_quality": "Убрать теги качества",
"strip_artist": "Убрать теги художников",
"strip_lora": "Убрать триггеры LoRA / эмбеддингов",
"strip_meta": "Убрать мета-теги",
"min_tags_label": "Минимальное число тегов",
"min_tags_desc": "Дополнить каждую вариацию до как минимум такого числа общих тегов из пулов.",
"user_presets_label": "Мои пресеты",
"user_preset_name": "Название пресета",
"user_preset_name_ph": "напр. my_style",
"user_preset_tags": "Теги пресета",
"user_preset_tags_ph": "теги через запятую, напр. neon glow, lens flare, cyberpunk",
"user_preset_save": "Сохранить пресет",
"user_preset_delete": "Удалить пресет",
"user_preset_select": "Сохранённые пресеты",
"user_preset_apply": "Применить к генерации",
"user_preset_need_name": "Сначала введите название пресета.",
"user_preset_saved": "Пресет «{name}» сохранён.",
"user_preset_pick": "Сначала выберите сохранённый пресет.",
"user_preset_applied": "Пресет «{name}» добавлен к генерации.",
"user_preset_deleted": "Пресет «{name}» удалён.",
},
}
def t(key: str, lang: str = "en") -> str:
return L10N.get(lang, L10N["en"]).get(key, key)