Files
BagheeraView/constants.py
Ignacio Serantes 20e5318a53 A bunch of changes
2026-03-24 09:06:37 +01:00

1686 lines
84 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Constants Module for Bagheera Image Viewer.
This file centralizes all application-wide constants, settings, and static text.
It is organized into several sections:
- General application information (name, version).
- Configuration paths for settings and cache files.
- Default values for application behavior (e.g., cache sizes, scanner limits).
- UI-related constants (e.g., icon themes, default sizes).
- A `UITexts` class that provides internationalized strings for the UI based
on the current language configuration.
"""
import importlib.util
import json
import os
import shutil
import sys
from PySide6.QtCore import Qt
# --- PLATFORM WORKAROUNDS ---
# Wayland does not reliably support moving/positioning windows programmatically,
# which is used for layout restoration. Forcing X11 via xcb is a workaround.
FORCE_X11 = "--x11" in sys.argv
if FORCE_X11:
os.environ["QT_QPA_PLATFORM"] = "xcb"
# --- CONFIGURATION ---
PROG_NAME = "Bagheera Image Viewer"
PROG_ID = "bagheeraview"
PROG_VERSION = "0.9.11-dev"
PROG_AUTHOR = "Ignacio Serantes"
# --- CACHE SETTINGS ---
# Maximum number of thumbnails to keep in the in-memory cache.
CACHE_MAX_SIZE = 20000
# Maximum size of the persistent disk cache file.
# 10 GB limit for persistent cache file
DISK_CACHE_MAX_BYTES = 10 * 1024 * 1024 * 1024
# --- PATHS ---
CONFIG_FILE = f"{PROG_ID}rc"
CONFIG_LOCATION = '.config/iserantes'
CONFIG_DIR = os.path.join(os.path.expanduser("~"), CONFIG_LOCATION, PROG_ID)
CONFIG_PATH = os.path.join(CONFIG_DIR, CONFIG_FILE)
CACHE_PATH = os.path.join(CONFIG_DIR, "thumbnails_lmdb")
HISTORY_FILE = "history.json"
HISTORY_PATH = os.path.join(CONFIG_DIR, HISTORY_FILE)
LAYOUTS_DIR = os.path.join(CONFIG_DIR, "layouts") # Layouts saving directory
def save_app_config():
"""Saves the main application configuration to the JSON file."""
try:
os.makedirs(CONFIG_DIR, exist_ok=True)
with open(CONFIG_PATH, 'w', encoding='utf-8') as f:
# Use APP_CONFIG global
json.dump(APP_CONFIG, f, indent=4)
except OSError:
# Silently fail for now, but could log this
pass
# --- CONFIGURATION LOADING ---
def load_app_config():
"""Loads the main application configuration from the JSON file."""
if not os.path.exists(CONFIG_PATH):
return {}
try:
with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
return json.load(f)
except (json.JSONDecodeError, OSError):
# In case of error, return empty config to avoid crash
return {}
APP_CONFIG = load_app_config()
# --- UI: ICONS & THEMES ---
ICON_THEME = "bagheeraview"
ICON_THEME_FALLBACK = "org.kde.dolphin"
ICON_THEME_VIEWER = "bagheeraview"
ICON_THEME_VIEWER_FALLBACK = "image"
# --- FILE HANDLING ---
IMAGE_EXTENSIONS = {'.bmp', '.gif', '.jpeg', '.jpg', '.png', '.tiff', '.webp'}
IMAGE_MIME_TYPES = "Image files (*" + ' *'.join(IMAGE_EXTENSIONS) + ")"
# Path to KDE's screen configuration file. Used for more accurate screen geometry.
# Maybe needed, maybe not, for calculating screen geometry
KSCREEN_DOCTOR_MARGIN = 0
KWINOUTPUTCONFIG_PATH = os.path.join(os.path.expanduser("~"),
".config/kwinoutputconfig.json")
# --- EXTERNAL TOOLS ---
# Command definitions for external search tools.
BALOOSEARCH_EXEC = shutil.which("baloosearch") or shutil.which("baloosearch6")
SEARCH_CMD = [BALOOSEARCH_EXEC, "--type", "image"] if BALOOSEARCH_EXEC else None
# --- TAGS ---
TAGS_MENU_MAX_ITEMS_DEFAULT = 25
# --- SCANNER SETTINGS ---
SCANNER_SETTINGS_DEFAULTS = {
"scan_max_level": 2,
"scan_batch_size": 64,
"scan_full_on_start": True,
"person_tags": "",
"generation_threads": 4,
"search_engine": ""
}
# --- IMAGE VIEWER DEFAULTS ---
VIEWER_LABEL = "BagheeraView"
VIEWER_FORM_MARGIN = 10
# --- THUMBNAIL GRID DEFAULTS ---
# Default size of the thumbnail widget in the grid view.
THUMBNAILS_DEFAULT_SIZE = 128
# The different size tiers for thumbnails that can be cached.
THUMBNAIL_SIZES = [128, 256, 512]
# The sizes that the initial scanner will generate. A smaller one for the initial
# grid view, and a larger one to have ready for zooming.
SCANNER_GENERATE_SIZES = [128]
THUMBNAILS_MARGIN = 10
THUMBNAILS_REFRESH_INTERVAL_DEFAULT = 200
THUMBNAILS_BG_COLOR_DEFAULT = "#191919"
THUMBNAILS_FILENAME_COLOR_DEFAULT = "#DDDDDD"
THUMBNAILS_TAGS_COLOR_DEFAULT = "#3498db"
THUMBNAILS_RATING_COLOR_DEFAULT = "#f1c40f"
THUMBNAILS_FILENAME_FONT_SIZE_DEFAULT = 8
THUMBNAILS_TOOLTIP_FG_COLOR_DEFAULT = "#DDDDDD"
THUMBNAILS_TOOLTIP_BG_COLOR_DEFAULT = "#333333"
THUMBNAILS_TAGS_FONT_SIZE_DEFAULT = 7
THUMBNAILS_FILENAME_LINES_DEFAULT = 1
THUMBNAILS_TAGS_LINES_DEFAULT = 2
VIEWER_WHEEL_SPEED_DEFAULT = 5
VIEWER_AUTO_RESIZE_WINDOW_DEFAULT = True
# --- METADATA ---
# The extended attribute name used for storing tags, following the freedesktop.org spec.
XATTR_NAME = "user.xdg.tags"
RATING_XATTR_NAME = "user.baloo.rating"
XATTR_COMMENT_NAME = "user.xdg.comment"
# --- BEHAVIOR ---
# The initial zoom ratio to use when opening an image, relative to screen size.
ZOOM_DESKTOP_RATIO = 0.93
# --- FACES ---
FACES_MENU_MAX_ITEMS_DEFAULT = 25
FACES_MENU_MAX_ITEMS = APP_CONFIG.get("faces_menu_max_items",
FACES_MENU_MAX_ITEMS_DEFAULT)
# --- FACE DETECTION ---
HAVE_MEDIAPIPE = False
if importlib.util.find_spec("mediapipe") is not None:
try:
import mediapipe
# Verify that the tasks module (new API) is available
if hasattr(mediapipe, "tasks"):
HAVE_MEDIAPIPE = True
except Exception:
pass
HAVE_FACE_RECOGNITION = importlib.util.find_spec("face_recognition") is not None
HAVE_BAGHEERASEARCH_LIB = True
MEDIAPIPE_FACE_MODEL_PATH = os.path.join(CONFIG_DIR,
"blaze_face_short_range.tflite")
MEDIAPIPE_FACE_MODEL_URL = (
"https://storage.googleapis.com/mediapipe-models/face_detector/"
"blaze_face_short_range/float16/1/blaze_face_short_range.tflite"
)
MEDIAPIPE_OBJECT_MODEL_PATH = os.path.join(CONFIG_DIR,
"efficientdet_lite0.tflite")
MEDIAPIPE_OBJECT_MODEL_URL = (
"https://storage.googleapis.com/mediapipe-models/object_detector/"
"efficientdet_lite0/float16/1/efficientdet_lite0.tflite"
)
# Ordered list of available detection engines. The first one found will be the default.
# MediaPipe is generally preferred for its performance.
AVAILABLE_FACE_ENGINES = []
if HAVE_FACE_RECOGNITION:
AVAILABLE_FACE_ENGINES.append("face_recognition")
if HAVE_MEDIAPIPE:
AVAILABLE_FACE_ENGINES.append("mediapipe")
AVAILABLE_PET_ENGINES = []
if HAVE_MEDIAPIPE:
AVAILABLE_PET_ENGINES.append("mediapipe")
AVAILABLE_BODY_ENGINES = []
if HAVE_MEDIAPIPE:
AVAILABLE_BODY_ENGINES.append("mediapipe")
# Determine the default engine. This can be overridden by user config.
DEFAULT_FACE_ENGINE = AVAILABLE_FACE_ENGINES[0] if AVAILABLE_FACE_ENGINES else None
DEFAULT_PET_ENGINE = AVAILABLE_PET_ENGINES[0] if AVAILABLE_PET_ENGINES else None
DEFAULT_FACE_BOX_COLOR = "#FFFFFF"
# Load preferred engine from config, or use the default.
FACE_DETECTION_ENGINE = APP_CONFIG.get("face_detection_engine",
DEFAULT_FACE_ENGINE)
PET_DETECTION_ENGINE = APP_CONFIG.get("pet_detection_engine",
DEFAULT_PET_ENGINE)
DEFAULT_PET_BOX_COLOR = "#98FB98" # PaleGreen
DEFAULT_BODY_BOX_COLOR = "#FF4500" # OrangeRed
DEFAULT_OBJECT_BOX_COLOR = "#FFD700" # Gold
DEFAULT_LANDMARK_BOX_COLOR = "#00BFFF" # DeepSkyBlue
# --- SHORTCUTS ---
GLOBAL_ACTIONS = {
"quit_app": ("Quit Application", "Global"),
"toggle_visibility": ("Toggle Visibility", "Global"),
"close_all_viewers": ("Close All Viewers", "Global"),
"load_more_images": ("Load More Images", "File"),
"load_all_images": ("Load All Images", "File"),
"save_layout": ("Save Layout", "File"),
"load_layout": ("Load Layout", "File"),
"open_folder": ("Open Folder", "File"),
"move_to_trash": ("Move to Trash", "File"),
"delete_permanently": ("Delete Permanently", "File"),
"rename_image": ("Rename Image", "Actions"),
"refresh_content": ("Refresh Content", "Actions"),
"first_image": ("First Image", "Navigation"),
"last_image": ("Last Image", "Navigation"),
"prev_page": ("Previous Page", "Navigation"),
"next_page": ("Next Page", "Navigation"),
"zoom_in": ("Zoom In", "Navigation"),
"zoom_out": ("Zoom Out", "Navigation"),
"toggle_faces": ("Show Faces", "View"),
"select_all": ("Select All", "Selection"),
"select_none": ("Select None", "Selection"),
"invert_selection": ("Invert Selection", "Selection"),
}
DEFAULT_GLOBAL_SHORTCUTS = {
# action_name: (key, mods, ignore_if_typing)
"quit_app": (Qt.Key_Q, Qt.ControlModifier, False),
"toggle_visibility": (Qt.Key_H, Qt.ControlModifier, False),
"close_all_viewers": (Qt.Key_Q, Qt.ShiftModifier, False),
"load_more_images": (Qt.Key_D, Qt.ControlModifier, True),
"load_all_images": (Qt.Key_D, Qt.ControlModifier | Qt.ShiftModifier, True),
"save_layout": (Qt.Key_S, Qt.NoModifier, True),
"load_layout": (Qt.Key_L, Qt.NoModifier, True),
"open_folder": (Qt.Key_F, Qt.ControlModifier, True),
"move_to_trash": (Qt.Key_Delete, Qt.NoModifier, True),
"delete_permanently": (Qt.Key_Delete, Qt.ShiftModifier, True),
"rename_image": (Qt.Key_F2, Qt.NoModifier, True),
"refresh_content": (Qt.Key_F5, Qt.NoModifier, True),
"first_image": (Qt.Key_Home, Qt.NoModifier, True),
"last_image": (Qt.Key_End, Qt.NoModifier, True),
"prev_page": (Qt.Key_PageUp, Qt.NoModifier, True),
"next_page": (Qt.Key_PageDown, Qt.NoModifier, True),
"zoom_in": (Qt.Key_Plus, Qt.NoModifier, True),
"zoom_out": (Qt.Key_Minus, Qt.NoModifier, True),
"toggle_faces": (Qt.Key_F7, Qt.NoModifier, True),
"select_all": (Qt.Key_A, Qt.ControlModifier, True),
"select_none": (Qt.Key_A, Qt.ControlModifier | Qt.ShiftModifier, True),
"invert_selection": (Qt.Key_I, Qt.ControlModifier, True),
}
VIEWER_ACTIONS = {
"close": ("Close Viewer / Exit Fullscreen", "Window"),
"next": ("Next Image", "Navigation"),
"prev": ("Previous Image", "Navigation"),
"rename": ("Rename Image", "File"),
"toggle_statusbar": ("Toggle Status Bar", "View"),
"toggle_filmstrip": ("Toggle Filmstrip", "View"),
"slideshow": ("Toggle Slideshow", "View"),
"slideshow_reverse": ("Toggle Reverse Slideshow", "View"),
"toggle_faces": ("Show Faces", "View"),
"fullscreen": ("Toggle Fullscreen", "Window"),
"detect_faces": ("Detect Faces", "Actions"),
"detect_pets": ("Detect Pets", "Actions"),
"fast_tag": ("Quick Tags", "Actions"),
"detect_bodies": ("Detect Bodies", "Actions"),
"rotate_right": ("Rotate Right", "Transform"),
"rotate_left": ("Rotate Left", "Transform"),
"zoom_in": ("Zoom In", "Transform"),
"zoom_out": ("Zoom Out", "Transform"),
"reset_zoom": ("Reset Zoom (100%)", "Transform"),
"toggle_animation": ("Pause/Resume Animation", "Playback"),
"properties": ("Properties", "File"),
"toggle_visibility": ("Show/Hide Main Window", "Window"),
"toggle_crop": ("Toggle Crop Mode", "Edit"),
"save_crop": ("Save Cropped Image", "File"),
"compare_1": ("Single View", "View"),
"compare_2": ("Compare 2 Images", "View"),
"compare_4": ("Compare 4 Images", "View"),
"link_panes": ("Link Panes", "View"),
}
DEFAULT_VIEWER_SHORTCUTS = {
# action_name: (key, mods)
"close": (Qt.Key_Escape, Qt.NoModifier),
"next": (Qt.Key_Space, Qt.NoModifier),
"prev": (Qt.Key_Backspace, Qt.NoModifier),
"rename": (Qt.Key_F2, Qt.NoModifier),
"toggle_statusbar": (Qt.Key_F3, Qt.NoModifier),
"toggle_filmstrip": (Qt.Key_F4, Qt.NoModifier),
"slideshow": (Qt.Key_F6, Qt.NoModifier),
"slideshow_reverse": (Qt.Key_F6, Qt.ShiftModifier),
"toggle_faces": (Qt.Key_F8, Qt.NoModifier),
"fullscreen": (Qt.Key_F11, Qt.NoModifier),
"detect_faces": (Qt.Key_F, Qt.NoModifier),
"detect_pets": (Qt.Key_P, Qt.NoModifier),
"detect_bodies": (Qt.Key_B, Qt.NoModifier),
"fast_tag": (Qt.Key_T, Qt.NoModifier),
"rotate_right": (Qt.Key_Plus, Qt.ControlModifier),
"rotate_left": (Qt.Key_Minus, Qt.ControlModifier),
"zoom_in": (Qt.Key_Plus, Qt.NoModifier),
"zoom_out": (Qt.Key_Minus, Qt.NoModifier),
"reset_zoom": (Qt.Key_Z, Qt.NoModifier),
"toggle_animation": (Qt.Key_P, Qt.ShiftModifier),
"properties": (Qt.Key_Return, Qt.AltModifier),
"toggle_visibility": (Qt.Key_H, Qt.ControlModifier),
"toggle_crop": (Qt.Key_C, Qt.NoModifier),
"save_crop": (Qt.Key_S, Qt.ControlModifier),
"compare_1": (Qt.Key_1, Qt.AltModifier),
"compare_2": (Qt.Key_2, Qt.AltModifier),
"compare_4": (Qt.Key_4, Qt.AltModifier),
"link_panes": (Qt.Key_L, Qt.AltModifier),
}
# --- TEXT CONSTANTS ---
# Supported languages
SUPPORTED_LANGUAGES = {
"en": "English",
"es": "Español",
"gl": "Galego"
}
# Default language
DEFAULT_LANGUAGE = "en"
# Determine current language:
# 1. Environment variable (for debugging/override)
# 2. Saved configuration
# 3. Default
CURRENT_LANGUAGE = os.getenv("BAGHEERA_LANG") or \
APP_CONFIG.get("language", DEFAULT_LANGUAGE)
# Ensure the loaded language is supported, otherwise fallback to default
if CURRENT_LANGUAGE not in SUPPORTED_LANGUAGES:
CURRENT_LANGUAGE = DEFAULT_LANGUAGE
_UI_TEXTS = {
"en": {
"READY": "Ready",
"SEARCH": "Search",
"SELECT": "Select",
"ERROR": "Error",
"WARNING": "Warning",
"INFO": "Info",
"LOAD": "Load",
"SAVE": "Save",
"CREATE": "Create",
"RENAME": "Rename",
"COPY": "Copy",
"DELETE": "Delete",
"UNKNOWN": "Unknown",
"MENU_LANGUAGE": "Language",
"RESTART_REQUIRED_TITLE": "Restart Required",
"RESTART_REQUIRED_TEXT": "The language has been changed to {language}.\nPlease "
"restart the application for the changes to take full effect.",
"SORT_NAME_ASC": "Name ↑",
"SORT_NAME_DESC": "Name ↓",
"SORT_DATE_ASC": "Date ↑",
"SORT_DATE_DESC": "Date ↓",
"VIEW_MODE_FLAT": "Flat",
"MENU_VIEW_MODE": "View Mode",
"FILTERED_COUNT": "Filtered: {}",
"VIEW_MODE_DAY": "Separate by Day",
"VIEW_MODE_WEEK": "Separate by Week",
"VIEW_MODE_MONTH": "Separate by Month",
"VIEW_MODE_YEAR": "Separate by Year",
"VIEW_MODE_RATING": "Separate by Rating",
"FILTERED_ZERO": "Filtered: 0",
"VIEW_MODE_FOLDER": "Separate by Folder",
"LOAD_MORE_TOOLTIP": f"Load {APP_CONFIG.get('scan_batch_size', 64)} images "
"more (Ctrl+D)",
"LOAD_ALL_TOOLTIP": "Load all images (Ctrl+Shift+D)",
"LOAD_ALL_TOOLTIP_ALT": "Cancel loading all images (Ctrl+Shift+D)",
"CONFIRM_LOAD_ALL_TITLE": "Confirm load",
"CONFIRM_LOAD_ALL_TEXT": "Are you sure you want to load {} images left?",
"DONE_SCAN": "Done: {} images",
"GROUP_BY_WEEK_FORMAT": "{year} - Week {week}",
"GROUP_HEADER_FORMAT": "{group_name} - {count} images",
"GROUP_HEADER_FORMAT_SINGULAR": "{group_name} - 1 image",
"GROUP_BY_RATING_FORMAT": "{stars} Stars",
"LOADING_SCAN": "Loading... {} / {}",
"SHUTTING_DOWN": "Shutting down...",
"LOADED_PARTIAL": "Loaded {} / {}",
"HIGH_RES_GENERATED": "High-res thumbnails generated.",
"SCANNING_DIRS": "Scanning directories...",
"SELECT_IMAGE_TITLE": "Select Image",
"VIEWER_TITLE_PAUSED": " [Paused]",
"IMAGE_NOT_IN_VIEW": "Image '{}' not in current view.",
"VIEWER_TITLE_SLIDESHOW": " [Slideshow]",
"RENAME_VIEWER_TITLE": "Rename File",
"RENAME_VIEWER_TEXT": "New name for '{}':",
"RENAME_VIEWER_ERROR_EXISTS": "File '{}' already exists.",
"RENAME_VIEWER_ERROR_SYSTEM": "System Error",
"RENAME_VIEWER_ERROR_TEXT": "Could not rename file: {}",
"ADD_FACE_TITLE": "Add Face",
"ADD_PET_TITLE": "Add Pet",
"ADD_BODY_TITLE": "Add Body",
"ADD_OBJECT_TITLE": "Add Object",
"ADD_LANDMARK_TITLE": "Add Landmark",
"ADD_FACE_LABEL": "Name:",
"ADD_PET_LABEL": "Name:",
"ADD_BODY_LABEL": "Name:",
"ADD_OBJECT_LABEL": "Name:",
"ADD_LANDMARK_LABEL": "Name:",
"DELETE_AREA_TITLE": "Delete area",
"CREATE_TAG_TITLE": "Create Tag",
"CREATE_TAG_TEXT": "The tag for '{}' does not exist. Do you want to create a "
"new one?",
"NEW_PERSON_TAG_TITLE": "New Person Tag",
"NEW_PERSON_TAG_TEXT": "Enter the full path for the tag:",
"NEW_PET_TAG_TITLE": "New Pet Tag",
"NEW_PET_TAG_TEXT": "Enter the full path for the tag:",
"NEW_BODY_TAG_TITLE": "New Body Tag",
"NEW_BODY_TAG_TEXT": "Enter the full path for the tag:",
"NEW_OBJECT_TAG_TITLE": "New Object Tag",
"NEW_OBJECT_TAG_TEXT": "Enter the full path for the tag:",
"NEW_LANDMARK_TAG_TITLE": "New Landmark Tag",
"NEW_LANDMARK_TAG_TEXT": "Enter the full path for the tag:",
"SELECT_TAG_TITLE": "Select Tag",
"SELECT_TAG_TEXT": "Multiple tags found for '{}'. Please select the correct "
"one:",
"FACE_NAME_TOOLTIP": "Type a name or select from history.",
"CLEAR_TEXT_TOOLTIP": "Clear text field",
"RENAME_AREA_TITLE": "Rename area",
"SHOW_FACES": "Show Faces && other areas",
"DETECT_FACES": "Detect Face",
"DETECT_PETS": "Detect Pets",
"DETECT_BODIES": "Detect Bodies",
"NO_FACE_LIBS": "No face detection libraries found. Install 'mediapipe' or "
"'face_recognition'.",
"THUMBNAIL_NO_NAME": "No name",
"THUMBNAIL_NO_TAGS": "No tags",
"MENU_ABOUT": "About",
"MENU_ABOUT_TITLE": "About {}",
"MENU_ABOUT_TEXT": "<b>{0}</b> v{1}<br><br>A simple image viewer and manager "
"for KDE with Baloo support.<br><br>Created by {2} with the help of AI, and "
"mostly the good people at KDE and Qt.",
"MENU_CACHE": "Cache",
"MENU_CLEAR_CACHE": "Clear cache ({} items, {:.1f} MB, {:.1f} MB on disk)",
"MENU_CLEAN_CACHE": "Clean up invalid cache entries",
"MENU_SHOW_TAGS": "Show Tags",
"MENU_SHOW_INFO": "Show Information",
"MENU_SHOW_FILTER": "Show Filter",
"MENU_SHOW_LAYOUTS": "Show Layouts",
"MENU_SHOW_HISTORY": "Show History",
"MENU_SETTINGS": "Settings",
"SETTINGS_GROUP_SCANNER": "Scanner",
"SETTINGS_GROUP_AREAS": "Areas",
"SETTINGS_GROUP_THUMBNAILS": "Thumbnails",
"SETTINGS_GROUP_VIEWER": "Image Viewer",
"SETTINGS_PERSON_TAGS_LABEL": "Person tags:",
"SETTINGS_FACE_ENGINE_LABEL": "Face Detection Engine:",
"SETTINGS_FACE_COLOR_LABEL": "Face box color:",
"SETTINGS_MRU_TAGS_COUNT_LABEL": "Max MRU tags:",
"SETTINGS_PET_TAGS_LABEL": "Pet tags:",
"SETTINGS_PET_ENGINE_LABEL": "Pet Detection Engine:",
"SETTINGS_PET_COLOR_LABEL": "Pet box color:",
"SETTINGS_PET_HISTORY_COUNT_LABEL": "Max pet history:",
"SETTINGS_PET_TAGS_TOOLTIP": "Default tags for pets, separated by commas.",
"SETTINGS_PET_ENGINE_TOOLTIP": "Library used for pet detection.",
"SETTINGS_PET_COLOR_TOOLTIP": "Color of the bounding box drawn around "
"detected pets.",
"SETTINGS_PET_HISTORY_TOOLTIP": "Maximum number of recently used pet names "
"to remember.",
"TYPE_FACE": "Face",
"TYPE_PET": "Pet",
"TYPE_BODY": "Body",
"TYPE_OBJECT": "Object",
"TYPE_LANDMARK": "Landmark",
"SETTINGS_BODY_TAGS_LABEL": "Body tags:",
"SETTINGS_BODY_ENGINE_LABEL": "Body Detection Engine:",
"SETTINGS_BODY_COLOR_LABEL": "Body box color:",
"SETTINGS_BODY_HISTORY_COUNT_LABEL": "Max body history:",
"SETTINGS_BODY_TAGS_TOOLTIP": "Default tags for bodies, separated by commas.",
"SETTINGS_BODY_ENGINE_TOOLTIP": "Library used for body detection.",
"SETTINGS_BODY_COLOR_TOOLTIP": "Color of the bounding box drawn around "
"detected bodies.",
"SETTINGS_BODY_HISTORY_TOOLTIP": "Maximum number of recently used body names "
"to remember.",
"SETTINGS_OBJECT_TAGS_LABEL": "Object tags:",
"SETTINGS_OBJECT_ENGINE_LABEL": "Object Detection Engine:",
"SETTINGS_OBJECT_COLOR_LABEL": "Object box color:",
"SETTINGS_OBJECT_HISTORY_COUNT_LABEL": "Max object history:",
"SETTINGS_OBJECT_TAGS_TOOLTIP": "Default tags for objects, separated by "
"commas.",
"SETTINGS_OBJECT_ENGINE_TOOLTIP": "Library used for object detection.",
"SETTINGS_OBJECT_COLOR_TOOLTIP": "Color of the bounding box drawn around "
"objects.",
"SETTINGS_OBJECT_HISTORY_TOOLTIP": "Maximum number of recently used object "
"names to remember.",
"SETTINGS_LANDMARK_TAGS_LABEL": "Landmark tags:",
"SETTINGS_LANDMARK_ENGINE_LABEL": "Landmark Detection Engine:",
"SETTINGS_LANDMARK_COLOR_LABEL": "Landmark box color:",
"SETTINGS_LANDMARK_HISTORY_COUNT_LABEL": "Max landmark history:",
"SETTINGS_LANDMARK_TAGS_TOOLTIP": "Default tags for landmarks, separated "
"by commas.",
"SETTINGS_LANDMARK_ENGINE_TOOLTIP": "Library used for landmark detection.",
"SETTINGS_LANDMARK_COLOR_TOOLTIP": "Color of the bounding box drawn around "
"landmarks.",
"SETTINGS_LANDMARK_HISTORY_TOOLTIP": "Maximum number of recently used "
"landmark names to remember.",
"SETTINGS_FACE_HISTORY_COUNT_LABEL": "Max face history:",
"SETTINGS_THUMBS_REFRESH_LABEL": "Thumbs refresh interval (ms):",
"MENU_VIEWER_SETTINGS": "Viewer Settings",
"SETTINGS_THUMBS_BG_COLOR_LABEL": "Thumbnails background color:",
"SETTINGS_THUMBS_FILENAME_COLOR_LABEL": "Thumbnails filename color:",
"SETTINGS_THUMBS_TAGS_COLOR_LABEL": "Thumbnails tags color:",
"SETTINGS_THUMBS_RATING_COLOR_LABEL": "Thumbnails rating color:",
"SETTINGS_THUMBS_FILENAME_FONT_SIZE_LABEL": "Thumbnails filename font size:",
"SETTINGS_THUMBS_TAGS_FONT_SIZE_LABEL": "Thumbnails tags font size:",
"SETTINGS_SCAN_THREADS_LABEL": "Generation threads:",
"SETTINGS_SCAN_THREADS_TOOLTIP": "Maximum number of simultaneous threads to"
"generate thumbnails.",
"SETTINGS_SCAN_MAX_LEVEL_LABEL": "Scan Max Level:",
"SETTINGS_SCAN_BATCH_SIZE_LABEL": "Scan Batch Size:",
"SETTINGS_SCAN_FULL_ON_START_LABEL": "Scan Full On Start:",
"SETTINGS_SCANNER_SEARCH_ENGINE_LABEL": "File search engine:",
"SETTINGS_SCANNER_SEARCH_ENGINE_TOOLTIP": "Engine to use for finding files. "
"'Bagheera' uses BagheeraSearch library. 'Baloo' uses 'baloosearch' command.",
"SETTINGS_SCAN_MAX_LEVEL_TOOLTIP": "Maximum directory depth to scan "
"recursively.",
"SETTINGS_SCAN_BATCH_SIZE_TOOLTIP": "Number of images to load in each batch.",
"SETTINGS_SCAN_FULL_ON_START_TOOLTIP": "Automatically scan all images in the "
"folder on startup.",
"SETTINGS_PERSON_TAGS_TOOLTIP": "Default tags for people, separated by commas.",
"SETTINGS_FACE_ENGINE_TOOLTIP": "Library used for face detection (MediaPipe "
"recommended).",
"SETTINGS_FACE_COLOR_TOOLTIP": "Color of the bounding box drawn around "
"detected faces.",
"SETTINGS_MRU_TAGS_TOOLTIP": "Maximum number of recently used tags to "
"remember.",
"SETTINGS_FACE_HISTORY_TOOLTIP": "Maximum number of recently used face names "
"to remember.",
"SETTINGS_THUMBS_REFRESH_TOOLTIP": "Delay in milliseconds before refreshing "
"thumbnails after resizing.",
"SETTINGS_THUMBS_BG_COLOR_TOOLTIP": "Background color of the thumbnail grid "
"view.",
"SETTINGS_THUMBS_FILENAME_COLOR_TOOLTIP": "Font color for filenames in "
"thumbnails.",
"SETTINGS_THUMBS_TAGS_COLOR_TOOLTIP": "Font color for tags in thumbnails.",
"SETTINGS_THUMBS_RATING_COLOR_TOOLTIP": "Color for rating stars in thumbnails.",
"SETTINGS_THUMBS_FILENAME_FONT_SIZE_TOOLTIP": "Font size for filenames in "
"thumbnails.",
"SETTINGS_THUMBS_TAGS_FONT_SIZE_TOOLTIP": "Font size for tags in thumbnails.",
"SEARCH_ENGINE_NATIVE": "Bagheera",
"SEARCH_ENGINE_BALOO": "Baloo",
"SETTINGS_VIEWER_WHEEL_SPEED_LABEL": "Viewer mouse wheel speed:",
"SETTINGS_THUMBS_FILENAME_LINES_LABEL": "Filename lines:",
"SETTINGS_THUMBS_FILENAME_LINES_TOOLTIP": "Number of lines for the filename "
"text under the thumbnail.",
"SETTINGS_THUMBS_TAGS_LINES_LABEL": "Tag lines:",
"SETTINGS_THUMBS_TOOLTIP_BG_COLOR_LABEL": "Tooltip background color:",
"SETTINGS_THUMBS_TOOLTIP_FG_COLOR_LABEL": "Tooltip text color:",
"SETTINGS_THUMBS_TOOLTIP_FG_COLOR_TOOLTIP": "Text color for tooltips on "
"thumbnails.",
"SETTINGS_THUMBS_TOOLTIP_BG_COLOR_TOOLTIP": "Background color for tooltips on "
"thumbnails.",
"SETTINGS_THUMBS_TAGS_LINES_TOOLTIP": "Number of lines for the tags text under "
"the thumbnail.",
"SETTINGS_THUMBS_SHOW_FILENAME_LABEL": "Show filename",
"SETTINGS_THUMBS_SHOW_RATING_LABEL": "Show rating",
"SETTINGS_THUMBS_SHOW_TAGS_LABEL": "Show tags",
"SETTINGS_THUMBS_SHOW_FILENAME_TOOLTIP": "Show or hide the filename under the "
"thumbnail.",
"SETTINGS_THUMBS_SHOW_RATING_TOOLTIP": "Show or hide the rating stars under "
"the thumbnail.",
"SETTINGS_THUMBS_SHOW_TAGS_TOOLTIP": "Show or hide the tags under the "
"thumbnail.",
"SETTINGS_VIEWER_WHEEL_SPEED_TOOLTIP": "Adjusts how fast scrolling the mouse "
"wheel changes images in the viewer.",
"SETTINGS_VIEWER_AUTO_RESIZE_LABEL": "Auto resize window on zoom",
"SETTINGS_VIEWER_AUTO_RESIZE_TOOLTIP": "Automatically resize the window when "
"zooming or changing images, fitting to the content.",
"SETTINGS_DOWNLOAD_MEDIAPIPE_MODEL": "Download Model",
"SETTINGS_DOWNLOAD_MEDIAPIPE_MODEL_TOOLTIP": "Download the required model file "
"for MediaPipe face detection.",
"MEDIAPIPE_DOWNLOADING_TITLE": "Downloading Model",
"MEDIAPIPE_DOWNLOADING_TEXT": "Downloading MediaPipe face detection model...",
"MEDIAPIPE_DOWNLOAD_SUCCESS_TITLE": "Download Complete",
"MEDIAPIPE_DOWNLOAD_SUCCESS_TEXT": "The MediaPipe model has been downloaded "
"successfully.",
"MEDIAPIPE_DOWNLOAD_ERROR_TITLE": "Download Error",
"MEDIAPIPE_DOWNLOAD_ERROR_TEXT": "Failed to download the MediaPipe model: {}",
"MENU_FILMSTRIP_POSITION": "Filmstrip Position",
"FILMSTRIP_BOTTOM": "Bottom",
"FILMSTRIP_LEFT": "Left",
"FILMSTRIP_TOP": "Top",
"FILMSTRIP_RIGHT": "Right",
"FILMSTRIP_POS_CHANGED_INFO": "The new filmstrip position will be applied to "
"newly opened viewers.",
"MENU_SHOW_SHORTCUTS": "Configure Keyboard Shortcuts...",
"SHORTCUTS_TITLE": "Keyboard Shortcuts",
"SHORTCUTS_ACTION": "Action",
"SHORTCUTS_KEY": "Shortcut",
"CLOSE": "Close",
"SHORTCUT_EDIT_TITLE": "Change Shortcut",
"SHORTCUT_EDIT_LABEL": "Enter new shortcut for '{}'",
"SHORTCUT_CONFLICT_TITLE": "Shortcut Conflict",
"SHORTCUT_CONFLICT_TEXT": "The shortcut '{}' is already assigned to '{}'.",
"SHORTCUT_SEARCH_PLACEHOLDER": "Search shortcuts...",
"CACHE_CLEANING": "Cleaning cache...",
"CACHE_CLEANED": "Cache cleaned. Removed {} invalid entries.",
"CACHE_CLEARED": "Thumbnail cache cleared.",
"ERROR_DELETING_FILE": "Error trying to delete file:\n{}",
"RENAME_FILE_TITLE": "Rename File",
"RENAME_FILE_TEXT": "New name for '{}':",
"RENAME_ERROR_TITLE": "Rename Error",
"RENAME_ERROR_EXISTS": "File '{}' already exists.",
"FILE_RENAMED": "File renamed to {}",
"CONFIRM_CLEAR_CACHE_TITLE": "Confirm Clear Cache",
"CONFIRM_CLEAR_CACHE_TEXT": "Are you sure you want to permanently delete the "
"entire thumbnail cache?",
"CONFIRM_CLEAR_CACHE_INFO": "This will remove all cached thumbnails from "
"memory and disk. They will be regenerated as you browse, which may be slow. "
"This action cannot be undone.",
"CONFIRM_DELETE_TITLE": "Confirm Permanent Deletion",
"CONFIRM_DELETE_TEXT": "Do you want to permanently delete this image?",
"CONFIRM_DELETE_INFO": "File: {}\n\nThis action CANNOT be undone.",
"SYSTEM_ERROR": "System Error",
"ERROR_DELETING_FILE": "Error trying to delete file:\n{}",
"RENAME_FILE_TITLE": "Rename File",
"RENAME_FILE_TEXT": "New name for '{}':",
"RENAME_ERROR_TITLE": "Rename Error",
"RENAME_ERROR_EXISTS": "File '{}' already exists.",
"FILE_RENAMED": "File renamed to {}",
"ERROR_RENAME": "Could not rename file: {}",
"MAIN_DOCK_TITLE": "Main dock",
"LAYOUTS_TAB": "Layouts",
"LAYOUTS_TABLE_HEADER": ["Name", "Last Modified"],
"SAVE_LAYOUT_TITLE": "Save Layout",
"SAVE_LAYOUT_TEXT": "Enter name for layout:",
"LAYOUT_EXISTS_TITLE": "Layout already exists",
"LAYOUT_EXISTS_TEXT": "Do you want to overwrite layout \"{}\"?",
"LAYOUT_EXISTS_INFO": "This action CANNOT be undone.",
"LAYOUT_SAVED": "Layout '{0}' saved.",
"ERROR_SAVING_LAYOUT": "Could not save layout: {}",
"LOAD_LAYOUT_TITLE": "Load Layout",
"NO_LAYOUTS_FOUND": "No saved layouts found.",
"SELECT_LAYOUT": "Select layout:",
"LAYOUT_RESTORED": "Layout restored.",
"ERROR_LOADING_LAYOUT_TITLE": "{}: Error",
"ERROR_LOADING_LAYOUT_TEXT": "Failed to load layout file:\n\"{}\"",
"RENAME_LAYOUT_TITLE": "Rename Layout",
"RENAME_LAYOUT_TEXT": "New Name:",
"COPY_LAYOUT_TITLE": "Copy Layout",
"COPY_LAYOUT_TEXT": "New Name:",
"LAYOUT_ALREADY_EXISTS": "Layout already exists.",
"CONFIRM_DELETE_LAYOUT_TITLE": "Confirm Delete",
"CONFIRM_DELETE_LAYOUT_TEXT": "Delete layout '{}'?",
"INFO_TAB": "Information",
"INFO_RATING_LABEL": "Rating:",
"INFO_COMMENT_LABEL": "Comment:",
"COMMENT_APPLY_CHANGES": "Apply Changes",
"ENTER_COMMENT": "Enter comment...",
"TAGS_TAB": "Tags",
"TAG_FILTER_TAB": "Filter",
"TAG_SEARCH_PLACEHOLDER": "Search tags...",
"TAG_APPLY_CHANGES": "Apply Changes",
"TAG_USED_TAGS": "⭐ USED TAGS",
"TAG_ALL_TAGS": "📂 ALL TAGS",
"TAG_NEW_TAG_TITLE": "New Tag",
"SEARCH_BY_TAG": "Search by this tag",
"TAG_NEW_TAG_TEXT": "Enter tag name (use / for hierarchy):",
"SEARCH_ADD_AND": "Add AND this tag to search",
"SEARCH_ADD_OR": "Add OR this tag to search",
"FILTER_AND": "AND",
"FILTER_OR": "OR",
"FILTER_INVERT": "Invert",
"FILTER_TAG_COLUMN": "Tag",
"FILTER_NOT_COLUMN": "NOT",
"FILTER_STATS_HIDDEN": "{} items hidden",
"FILTER_NAME_PLACEHOLDER": "Filter by filename...",
"HISTORY_TAB": "History",
"HISTORY_TABLE_HEADER": ["Name", "Date"],
"HISTORY_BTN_CLEAR_ALL_TOOLTIP": "Clear All",
"HISTORY_BTN_DELETE_SELECTED_TOOLTIP": "Delete Selected",
"HISTORY_BTN_DELETE_OLDER_TOOLTIP": "Delete Older",
"HISTORY_CLEAR_ALL_TITLE": "Confirm",
"HISTORY_CLEAR_ALL_TEXT": "Clear entire history?",
"PROPERTIES_TITLE": "Properties",
"PROPERTIES_GENERAL_TAB": "General",
"PROPERTIES_METADATA_TAB": "Metadata",
"PROPERTIES_EXIF_TAB": "EXIF",
"PROPERTIES_FILENAME": "File Name:",
"PROPERTIES_LOCATION": "Location:",
"PROPERTIES_SIZE": "Size:",
"PROPERTIES_CREATED": "Created:",
"PROPERTIES_MODIFIED": "Modified:",
"PROPERTIES_DIMENSIONS": "Dimensions:",
"PROPERTIES_FORMAT": "Format:",
"PROPERTIES_MEGAPIXELS": "Megapixels:",
"PROPERTIES_COLOR_DEPTH": "Color Depth:",
"BITS": "bits",
"PROPERTIES_TABLE_HEADER": ["Property", "Value"],
"PROPERTIES_ADD_ATTR": "Add Attribute",
"PROPERTIES_ADD_ATTR_NAME": "Attribute Name (e.g. user.comment):",
"PROPERTIES_ADD_ATTR_VALUE": "Value for {}:",
"PROPERTIES_ERROR_SET_ATTR": "Failed to set xattr: {}",
"PROPERTIES_ERROR_ADD_ATTR": "Failed to add xattr: {}",
"PROPERTIES_DELETE_ATTR": "Delete Attribute",
"PROPERTIES_ERROR_DELETE_ATTR": "Failed to remove xattr: {}",
"EXIV2_NOT_INSTALLED": "exiv2 library not installed. Install python exiv2.",
"NO_METADATA_FOUND": "No metadata found (EXIF/XMP/IPTC).",
"VIEWER_MENU_SLIDESHOW": "Slideshow",
"VIEWER_MENU_STOP_SLIDESHOW": "Stop Slideshow",
"VIEWER_MENU_START_SLIDESHOW": "Start Slideshow",
"VIEWER_MENU_START_REVERSE_SLIDESHOW": "Start Reverse Slideshow",
"VIEWER_MENU_STOP_REVERSE_SLIDESHOW": "Stop Reverse Slideshow",
"VIEWER_MENU_SET_INTERVAL": "Set Interval...",
"VIEWER_MENU_ROTATE": "Rotate",
"VIEWER_MENU_ROTATE_LEFT": "Left",
"VIEWER_MENU_ROTATE_RIGHT": "Right",
"VIEWER_MENU_EXIT_FULLSCREEN": "Exit Fullscreen ",
"VIEWER_MENU_ENTER_FULLSCREEN": "Fullscreen",
"VIEWER_MENU_RENAME": "Rename",
"VIEWER_MENU_FIT_SCREEN": "Fit to Screen / Actual Size",
"VIEWER_MENU_SHOW_FILMSTRIP": "Show Filmstrip",
"VIEWER_MENU_FLIP": "Flip",
"VIEWER_MENU_FLIP_H": "Horizontal",
"VIEWER_MENU_PAUSE_ANIMATION": "Pause Animation",
"VIEWER_MENU_RESUME_ANIMATION": "Resume Animation",
"VIEWER_MENU_FLIP_V": "Vertical",
"VIEWER_MENU_SHOW_STATUSBAR": "Show Status Bar",
"VIEWER_MENU_TAGS": "Quick tags",
"VIEWER_MENU_CROP": "Crop Mode",
"VIEWER_MENU_SAVE_CROP": "Save Selection...",
"SAVE_CROP_TITLE": "Save Cropped Image",
"VIEWER_MENU_COMPARE": "Comparison Mode",
"VIEWER_MENU_COMPARE_1": "Single View",
"VIEWER_MENU_COMPARE_2": "2 Images",
"VIEWER_MENU_COMPARE_4": "4 Images",
"VIEWER_MENU_LINK_PANES": "Link Panes",
"SAVE_CROP_FILTER": "Images (*.jpg *.jpeg *.png *.bmp *.webp)",
"SLIDESHOW_INTERVAL_TITLE": "Slideshow Interval",
"SLIDESHOW_INTERVAL_TEXT": "Seconds:",
"CONTEXT_MENU_VIEW": "View",
"CONTEXT_MENU_OPEN": "Open",
"CONTEXT_MENU_OPEN_SEARCH_LOCATION": "Open and search location",
"CONTEXT_MENU_OPEN_DEFAULT_APP": "Open location with default application",
"CONTEXT_MENU_MOVE_TO": "Move to...",
"CONTEXT_MENU_COPY_TO": "Copy to...",
"CONTEXT_MENU_ROTATE": "Rotate",
"CONTEXT_MENU_ROTATE_LEFT": "Left",
"CONTEXT_MENU_ROTATE_RIGHT": "Right",
"CONTEXT_MENU_TRASH": "Move to Trash",
"CONTEXT_MENU_CLIPBOARD": "Clipboard",
"CONTEXT_MENU_COPY_URL": "Copy File URL",
"CONTEXT_MENU_COPY_DIR": "Copy Directory Path",
"CONTEXT_MENU_PROPERTIES": "Properties",
"CONTEXT_MENU_NO_APPS_FOUND": "No apps found",
"CONTEXT_MENU_REGENERATE": "Regenerate Thumbnail",
"CONTEXT_MENU_ERROR_LISTING_APPS": "Error listing apps",
"CONTEXT_MENU_RENAME": "Rename...",
"CONTEXT_MENU_DELETE": "Delete",
"CONTEXT_MENU_SELECT_ALL": "Select All",
"CONTEXT_MENU_SELECT_NONE": "Select None",
"CONTEXT_MENU_INVERT_SELECTION": "Invert Selection",
"CONFIRM_OVERWRITE_TITLE": "Confirm Overwrite",
"CONFIRM_OVERWRITE_TEXT": "File already exists in destination:\n{}\n\nDo "
"you want to overwrite it?",
"ERROR_MOVE_FILE": "Could not move file: {}",
"ERROR_COPY_FILE": "Could not copy file: {}",
"MOVED_TO": "Moved to {}",
"COPIED_TO": "Copied to {}",
"ERROR_ROTATE_IMAGE": "Could not rotate image: {}",
},
"es": {
"READY": "Listo",
"SEARCH": "Buscar",
"SELECT": "Seleccionar",
"ERROR": "Error",
"WARNING": "Advertencia",
"INFO": "Información",
"LOAD": "Cargar",
"SAVE": "Guardar",
"CREATE": "Crear",
"RENAME": "Renombrar",
"COPY": "Copiar",
"DELETE": "Eliminar",
"UNKNOWN": "Desconocido",
"MENU_LANGUAGE": "Idioma",
"RESTART_REQUIRED_TITLE": "Reinicio Requerido",
"RESTART_REQUIRED_TEXT": "El idioma se ha cambiado a {language}.\nPor favor, "
"reinicie la aplicación para que los cambios surtan efecto.",
"SORT_NAME_ASC": "Nombre ↑",
"SORT_NAME_DESC": "Nombre ↓",
"SORT_DATE_ASC": "Fecha ↑",
"SORT_DATE_DESC": "Fecha ↓",
"VIEW_MODE_FLAT": "Plano",
"MENU_VIEW_MODE": "Modo de Vista",
"FILTERED_COUNT": "Filtrados: {}",
"VIEW_MODE_DAY": "Separar por Día",
"VIEW_MODE_WEEK": "Separar por Semana",
"VIEW_MODE_MONTH": "Separar por Mes",
"VIEW_MODE_YEAR": "Separar por Año",
"VIEW_MODE_RATING": "Separar por Valoración",
"FILTERED_ZERO": "Filtrados: 0",
"VIEW_MODE_FOLDER": "Separar por Carpeta",
"LOAD_MORE_TOOLTIP": f"Cargar {APP_CONFIG.get('scan_batch_size', 64)} imágenes "
"más (Ctrl+D)",
"LOAD_ALL_TOOLTIP": "Cargar todas las imágenes (Ctrl+Shift+D)",
"LOAD_ALL_TOOLTIP_ALT": "Cancelar cargar todas las images (Ctrl+Shift+D)",
"CONFIRM_LOAD_ALL_TITLE": "Confirmar carga",
"CONFIRM_LOAD_ALL_TEXT": "¿Seguro que quieres cargar las {} imágenes "
"restantes?",
"DONE_SCAN": "Hecho: {} imágenes",
"LOADING_SCAN": "Cargando... {} / {}",
"GROUP_HEADER_FORMAT": "{group_name} - {count} fotos",
"GROUP_HEADER_FORMAT_SINGULAR": "{group_name} - 1 foto",
"GROUP_BY_WEEK_FORMAT": "{year} - Semana {week}",
"GROUP_BY_RATING_FORMAT": "{stars} Estrellas",
"SHUTTING_DOWN": "Cerrando...",
"LOADED_PARTIAL": "Cargadas {} / {}",
"HIGH_RES_GENERATED": "Miniaturas de alta resolución generadas.",
"SCANNING_DIRS": "Escaneando directorios...",
"SELECT_IMAGE_TITLE": "Seleccionar Imagen",
"VIEWER_TITLE_PAUSED": " [Pausado]",
"IMAGE_NOT_IN_VIEW": "La imagen '{}' no está en la vista actual.",
"VIEWER_TITLE_SLIDESHOW": " [Presentación]",
"RENAME_VIEWER_TITLE": "Renombrar Archivo",
"RENAME_VIEWER_TEXT": "Nuevo nombre para '{}':",
"RENAME_VIEWER_ERROR_EXISTS": "El archivo '{}' ya existe.",
"RENAME_VIEWER_ERROR_SYSTEM": "Error de Sistema",
"RENAME_VIEWER_ERROR_TEXT": "No se pudo renombrar el archivo: {}",
"ADD_FACE_TITLE": "Añadir Rostro",
"ADD_PET_TITLE": "Añadir Mascota",
"ADD_BODY_TITLE": "Añadir Cuerpo",
"ADD_OBJECT_TITLE": "Añadir Objeto",
"ADD_LANDMARK_TITLE": "Añadir Lugar",
"ADD_FACE_LABEL": "Nombre:",
"ADD_PET_LABEL": "Nombre:",
"ADD_BODY_LABEL": "Nombre:",
"ADD_OBJECT_LABEL": "Nombre:",
"ADD_LANDMARK_LABEL": "Nombre:",
"DELETE_AREA_TITLE": "Eliminar área",
"CREATE_TAG_TITLE": "Crear Etiqueta",
"CREATE_TAG_TEXT": "La etiqueta para '{}' no existe. ¿Deseas crear una nueva?",
"NEW_PERSON_TAG_TITLE": "Nueva Etiqueta de Persona",
"NEW_PERSON_TAG_TEXT": "Introduce la ruta completa de la etiqueta:",
"NEW_PET_TAG_TITLE": "Nueva Etiqueta de Mascota",
"NEW_PET_TAG_TEXT": "Introduce la ruta completa de la etiqueta:",
"NEW_BODY_TAG_TITLE": "Nueva Etiqueta de Cuerpo",
"NEW_BODY_TAG_TEXT": "Introduce la ruta completa de la etiqueta:",
"NEW_OBJECT_TAG_TITLE": "Nueva Etiqueta de Objeto",
"NEW_OBJECT_TAG_TEXT": "Introduce la ruta completa de la etiqueta:",
"NEW_LANDMARK_TAG_TITLE": "Nueva Etiqueta de Lugar",
"NEW_LANDMARK_TAG_TEXT": "Introduce la ruta completa de la etiqueta:",
"SELECT_TAG_TITLE": "Seleccionar Etiqueta",
"SELECT_TAG_TEXT": "Se encontraron múltiples etiquetas para '{}'. Por favor, "
"selecciona la correcta:",
"FACE_NAME_TOOLTIP": "Escribe un nombre o selecciónalo del historial.",
"CLEAR_TEXT_TOOLTIP": "Limpiar el campo de texto",
"RENAME_AREA_TITLE": "Renombrar área",
"SHOW_FACES": "Mostrar Rostros y otras áreas",
"DETECT_FACES": "Detectar Rostros",
"DETECT_PETS": "Detectar Mascotas",
"DETECT_BODIES": "Detectar Cuerpos",
"NO_FACE_LIBS": "No se encontraron librerías de detección de rostros. Instale "
"'mediapipe' o 'face_recognition'.",
"THUMBNAIL_NO_NAME": "Sin nombre",
"THUMBNAIL_NO_TAGS": "Sin etiquetas",
"MENU_ABOUT": "Acerca de",
"MENU_ABOUT_TITLE": "Acerca de {}",
"MENU_ABOUT_TEXT": "<b>{0}</b> v{1}<br><br>Un visor y gestor de imágenes "
"simple para KDE con soporte para Baloo.<br><br>Creado por {2} con la ayuda de "
"la IA, y mayormente la buena gente de KDE y Qt.",
"MENU_CACHE": "Caché",
"MENU_CLEAR_CACHE": "Limpiar caché ({} ítems, {:.1f} MB, {:.1f} MB en disco)",
"MENU_CLEAN_CACHE": "Limpiar entradas de caché inválidas",
"MENU_SHOW_TAGS": "Mostrar Etiquetas",
"MENU_SHOW_INFO": "Mostrar Información",
"MENU_SHOW_FILTER": "Mostrar Filtro",
"MENU_SHOW_LAYOUTS": "Mostrar Diseños",
"MENU_SHOW_HISTORY": "Mostrar Historial",
"MENU_SETTINGS": "Opciones",
"SETTINGS_GROUP_SCANNER": "Escáner",
"SETTINGS_GROUP_AREAS": "Áreas",
"SETTINGS_GROUP_THUMBNAILS": "Miniaturas",
"SETTINGS_GROUP_VIEWER": "Visor de Imágenes",
"SETTINGS_PERSON_TAGS_LABEL": "Etiquetas de persona:",
"SETTINGS_FACE_ENGINE_LABEL": "Motor de detección de caras:",
"SETTINGS_FACE_COLOR_LABEL": "Color del recuadro de cara:",
"SETTINGS_MRU_TAGS_COUNT_LABEL": "Máx etiquetas recientes:",
"SETTINGS_PET_TAGS_LABEL": "Etiquetas de mascota:",
"SETTINGS_PET_ENGINE_LABEL": "Motor de detección de mascotas:",
"SETTINGS_PET_COLOR_LABEL": "Color del recuadro de mascota:",
"SETTINGS_PET_HISTORY_COUNT_LABEL": "Máx historial mascotas:",
"SETTINGS_PET_TAGS_TOOLTIP": "Etiquetas predeterminadas para mascotas, "
"separadas por comas.",
"SETTINGS_PET_ENGINE_TOOLTIP": "Librería utilizada para la detección de "
"mascotas.",
"SETTINGS_PET_COLOR_TOOLTIP": "Color del cuadro delimitador dibujado "
"alrededor de las mascotas detectadas.",
"SETTINGS_PET_HISTORY_TOOLTIP": "Número máximo de nombres de mascotas "
"usados recientemente para recordar.",
"TYPE_FACE": "Cara",
"TYPE_PET": "Mascota",
"TYPE_BODY": "Cuerpo",
"TYPE_OBJECT": "Objeto",
"TYPE_LANDMARK": "Lugar",
"SETTINGS_BODY_TAGS_LABEL": "Etiquetas de cuerpo:",
"SETTINGS_BODY_ENGINE_LABEL": "Motor de detección de cuerpos:",
"SETTINGS_BODY_COLOR_LABEL": "Color del recuadro de cuerpo:",
"SETTINGS_BODY_HISTORY_COUNT_LABEL": "Máx historial cuerpos:",
"SETTINGS_BODY_TAGS_TOOLTIP": "Etiquetas predeterminadas para cuerpos, "
"separadas por comas.",
"SETTINGS_BODY_ENGINE_TOOLTIP": "Librería utilizada para la detección de "
"cuerpos.",
"SETTINGS_BODY_COLOR_TOOLTIP": "Color del cuadro delimitador dibujado "
"alrededor de los cuerpos detectados.",
"SETTINGS_BODY_HISTORY_TOOLTIP": "Número máximo de nombres de cuerpos "
"usados recientemente para recordar.",
"SETTINGS_OBJECT_TAGS_LABEL": "Etiquetas de objeto:",
"SETTINGS_OBJECT_ENGINE_LABEL": "Motor de detección de objetos:",
"SETTINGS_OBJECT_COLOR_LABEL": "Color del recuadro de objeto:",
"SETTINGS_OBJECT_HISTORY_COUNT_LABEL": "Máx historial objetos:",
"SETTINGS_OBJECT_TAGS_TOOLTIP": "Etiquetas predeterminadas para objetos, "
"separadas por comas.",
"SETTINGS_OBJECT_ENGINE_TOOLTIP": "Librería utilizada para la detección "
"de objetos.",
"SETTINGS_OBJECT_COLOR_TOOLTIP": "Color del cuadro delimitador dibujado "
"alrededor de los objetos.",
"SETTINGS_OBJECT_HISTORY_TOOLTIP": "Número máximo de nombres de objetos "
"usados recientemente para recordar.",
"SETTINGS_LANDMARK_TAGS_LABEL": "Etiquetas de lugar:",
"SETTINGS_LANDMARK_ENGINE_LABEL": "Motor de detección de lugares:",
"SETTINGS_LANDMARK_COLOR_LABEL": "Color del recuadro de lugar:",
"SETTINGS_LANDMARK_HISTORY_COUNT_LABEL": "Máx historial lugares:",
"SETTINGS_LANDMARK_TAGS_TOOLTIP": "Etiquetas predeterminadas para "
"lugares/monumentos, separadas por comas.",
"SETTINGS_LANDMARK_ENGINE_TOOLTIP": "Librería utilizada para la detección "
"de lugares.",
"SETTINGS_LANDMARK_COLOR_TOOLTIP": "Color del cuadro delimitador dibujado "
"alrededor de los lugares.",
"SETTINGS_LANDMARK_HISTORY_TOOLTIP": "Número máximo de nombres de lugares "
"usados recientemente para recordar.",
"SETTINGS_FACE_HISTORY_COUNT_LABEL": "Máx historial caras:",
"SETTINGS_THUMBS_REFRESH_LABEL": "Intervalo refresco miniaturas (ms):",
"SETTINGS_THUMBS_BG_COLOR_LABEL": "Color de fondo de miniaturas:",
"SETTINGS_THUMBS_FILENAME_COLOR_LABEL": "Color del nombre de fichero:",
"SETTINGS_THUMBS_TAGS_COLOR_LABEL": "Color de etiquetas de miniaturas:",
"SETTINGS_THUMBS_RATING_COLOR_LABEL": "Color de valoración de miniaturas:",
"SETTINGS_THUMBS_FILENAME_FONT_SIZE_LABEL": "Tamaño de fuente del nombre de "
"fichero:",
"SETTINGS_THUMBS_TAGS_FONT_SIZE_LABEL": "Tamaño de fuente de las etiquetas:",
"SETTINGS_SCAN_MAX_LEVEL_LABEL": "Nivel Máximo de Escaneo:",
"SETTINGS_SCAN_BATCH_SIZE_LABEL": "Tamaño de Lote de Escaneo:",
"SETTINGS_SCANNER_SEARCH_ENGINE_LABEL": "Motor de búsqueda de archivos:",
"SETTINGS_SCANNER_SEARCH_ENGINE_TOOLTIP": "Motor a usar para buscar archivos. "
"'Bagheera' usa la librería de BagheeraSearch. 'Baloo0 usa el commando "
"'baloosearch'",
"SETTINGS_SCAN_FULL_ON_START_LABEL": "Escanear Todo al Inicio:",
"SETTINGS_SCAN_MAX_LEVEL_TOOLTIP": "Profundidad máxima de directorio para "
"escanear recursivamente.",
"SETTINGS_SCAN_BATCH_SIZE_TOOLTIP": "Número de imágenes a cargar en cada lote.",
"SETTINGS_SCAN_FULL_ON_START_TOOLTIP": "Escanear automáticamente todas las "
"imágenes de la carpeta al inicio.",
"SETTINGS_PERSON_TAGS_TOOLTIP": "Etiquetas predeterminadas para personas, "
"separadas por comas.",
"SETTINGS_FACE_ENGINE_TOOLTIP": "Librería utilizada para la detección de "
"rostros (se recomienda MediaPipe).",
"SETTINGS_FACE_COLOR_TOOLTIP": "Color del cuadro delimitador dibujado "
"alrededor de los rostros detectados.",
"SETTINGS_MRU_TAGS_TOOLTIP": "Número máximo de etiquetas usadas recientemente "
"para recordar.",
"SETTINGS_FACE_HISTORY_TOOLTIP": "Número máximo de nombres de rostros usados "
"recientemente para recordar.",
"SETTINGS_THUMBS_REFRESH_TOOLTIP": "Retraso en milisegundos antes de "
"actualizar las miniaturas tras redimensionar.",
"SETTINGS_THUMBS_BG_COLOR_TOOLTIP": "Color de fondo de la vista de cuadrícula "
"de miniaturas.",
"SETTINGS_THUMBS_FILENAME_COLOR_TOOLTIP": "Color de fuente para nombres de "
"archivo en miniaturas.",
"SETTINGS_THUMBS_TAGS_COLOR_TOOLTIP": "Color de fuente para etiquetas en "
"miniaturas.",
"SETTINGS_THUMBS_RATING_COLOR_TOOLTIP": "Color para las estrellas de "
"valoración en miniaturas.",
"SETTINGS_THUMBS_FILENAME_FONT_SIZE_TOOLTIP": "Tamaño de fuente para nombres "
"de archivo en miniaturas.",
"SETTINGS_THUMBS_TAGS_FONT_SIZE_TOOLTIP": "Tamaño de fuente para etiquetas en "
"miniaturas.",
"SETTINGS_THUMBS_FILENAME_LINES_LABEL": "Líneas para nombre de archivo:",
"SETTINGS_THUMBS_FILENAME_LINES_TOOLTIP": "Número de líneas para el nombre del "
"archivo debajo de la miniatura.",
"SETTINGS_THUMBS_TAGS_LINES_LABEL": "Líneas para etiquetas:",
"SETTINGS_THUMBS_TOOLTIP_BG_COLOR_LABEL": "Color de fondo del tooltip:",
"SETTINGS_THUMBS_TOOLTIP_FG_COLOR_LABEL": "Color de texto del tooltip:",
"SETTINGS_THUMBS_TOOLTIP_FG_COLOR_TOOLTIP": "Color del texto para los tooltips "
"en las miniaturas.",
"SETTINGS_THUMBS_TOOLTIP_BG_COLOR_TOOLTIP": "Color de fondo para los tooltips "
"en las miniaturas.",
"SETTINGS_THUMBS_TAGS_LINES_TOOLTIP": "Número de líneas para el texto de las "
"etiquetas debajo de la miniatura.",
"SETTINGS_THUMBS_SHOW_FILENAME_LABEL": "Mostrar nombre de archivo",
"SETTINGS_THUMBS_SHOW_RATING_LABEL": "Mostrar valoración",
"SETTINGS_THUMBS_SHOW_TAGS_LABEL": "Mostrar etiquetas",
"SETTINGS_THUMBS_SHOW_FILENAME_TOOLTIP": "Mostrar u ocultar el nombre del "
"archivo debajo de la miniatura.",
"SETTINGS_THUMBS_SHOW_RATING_TOOLTIP": "Mostrar u ocultar las estrellas de "
"valoración debajo de la miniatura.",
"SETTINGS_THUMBS_SHOW_TAGS_TOOLTIP": "Mostrar u ocultar las etiquetas debajo "
"de la miniatura.",
"SETTINGS_VIEWER_WHEEL_SPEED_LABEL": "Velocidad de la rueda del ratón en el "
"visor:",
"SETTINGS_VIEWER_AUTO_RESIZE_LABEL": "Redimensionar ventana automáticamente",
"SETTINGS_VIEWER_AUTO_RESIZE_TOOLTIP": "Redimensiona la ventana "
"automáticamente "
"al hacer zoom o cambiar de imagen para ajustarse al contenido.",
"SETTINGS_VIEWER_WHEEL_SPEED_TOOLTIP": "Ajusta la velocidad con la que la "
"rueda del ratón cambia de imagen en el visor.",
"SETTINGS_DOWNLOAD_MEDIAPIPE_MODEL": "Descargar Modelo",
"SETTINGS_DOWNLOAD_MEDIAPIPE_MODEL_TOOLTIP": "Descarga el archivo de modelo "
"necesario para la detección de caras con MediaPipe.",
"MEDIAPIPE_DOWNLOADING_TITLE": "Descargando Modelo",
"MEDIAPIPE_DOWNLOADING_TEXT": "Descargando el modelo de detección de caras de "
"MediaPipe...",
"MEDIAPIPE_DOWNLOAD_SUCCESS_TITLE": "Descarga Completa",
"MEDIAPIPE_DOWNLOAD_SUCCESS_TEXT": "El modelo de MediaPipe se ha descargado "
"correctamente.",
"MEDIAPIPE_DOWNLOAD_ERROR_TITLE": "Error de Descarga",
"MEDIAPIPE_DOWNLOAD_ERROR_TEXT": "Fallo al descargar el modelo de MediaPipe: "
"{}",
"MENU_VIEWER_SETTINGS": "Opciones del Visor",
"MENU_FILMSTRIP_POSITION": "Posición de la Tira de Imágenes",
"FILMSTRIP_BOTTOM": "Abajo",
"FILMSTRIP_LEFT": "Izquierda",
"FILMSTRIP_TOP": "Arriba",
"FILMSTRIP_RIGHT": "Derecha",
"FILMSTRIP_POS_CHANGED_INFO": "La nueva posición de la tira de imágenes se "
"aplicará a los nuevos visores que se abran.",
"MENU_SHOW_SHORTCUTS": "Configurar Atajos de Teclado...",
"SHORTCUTS_TITLE": "Atajos de Teclado",
"SHORTCUTS_ACTION": "Acción",
"SHORTCUTS_KEY": "Atajo",
"CLOSE": "Cerrar",
"SHORTCUT_EDIT_TITLE": "Cambiar Atajo",
"SHORTCUT_EDIT_LABEL": "Nuevo atajo para '{}'",
"SHORTCUT_CONFLICT_TITLE": "Conflicto de Atajos",
"SHORTCUT_CONFLICT_TEXT": "El atajo '{}' ya está asignado a '{}'.",
"SHORTCUT_SEARCH_PLACEHOLDER": "Buscar atajos...",
"CACHE_CLEANING": "Limpiando caché...",
"CACHE_CLEANED": "Caché limpiada. Se eliminaron {} entradas inválidas.",
"CACHE_CLEARED": "Caché de miniaturas limpiada.",
"CONFIRM_CLEAR_CACHE_TITLE": "Confirmar Limpieza de Caché",
"CONFIRM_CLEAR_CACHE_TEXT": "¿Seguro que quieres eliminar permanentemente toda "
"la caché de miniaturas?",
"CONFIRM_CLEAR_CACHE_INFO": "Esto eliminará todas las miniaturas cacheadas de "
"la memoria y el disco. Se regenerarán mientras navegas, lo que puede ser "
"lento. Esta acción no se puede deshacer.",
"CONFIRM_DELETE_TITLE": "Confirmar Borrado Permanente",
"CONFIRM_DELETE_TEXT": "¿Deseas eliminar permanentemente esta imagen?",
"CONFIRM_DELETE_INFO": "Archivo: {}\n\nEsta acción NO se puede deshacer.",
"SYSTEM_ERROR": "Error de Sistema",
"ERROR_DELETING_FILE": "Error al intentar borrar el archivo:\n{}",
"RENAME_FILE_TITLE": "Renombrar Archivo",
"RENAME_FILE_TEXT": "Nuevo nombre para '{}':",
"RENAME_ERROR_TITLE": "Error al Renombrar",
"RENAME_ERROR_EXISTS": "El archivo '{}' ya existe.",
"FILE_RENAMED": "Archivo renombrado a {}",
"ERROR_RENAME": "No se pudo renombrar el archivo: {}",
"MAIN_DOCK_TITLE": "Panel principal",
"LAYOUTS_TAB": "Diseños",
"LAYOUTS_TABLE_HEADER": ["Nombre", "Última Modificación"],
"SAVE_LAYOUT_TITLE": "Guardar Diseño",
"SAVE_LAYOUT_TEXT": "Introduce un nombre para el diseño:",
"LAYOUT_EXISTS_TITLE": "El diseño ya existe",
"LAYOUT_EXISTS_TEXT": "¿Deseas sobreescribir el diseño \"{}\"?",
"LAYOUT_EXISTS_INFO": "Esta acción NO se puede deshacer.",
"LAYOUT_SAVED": "Diseño '{0}' guardado.",
"ERROR_SAVING_LAYOUT": "No se pudo guardar el diseño: {}",
"LOAD_LAYOUT_TITLE": "Cargar Diseño",
"NO_LAYOUTS_FOUND": "No se encontraron diseños guardados.",
"SELECT_LAYOUT": "Seleccionar diseño:",
"LAYOUT_RESTORED": "Diseño restaurado.",
"ERROR_LOADING_LAYOUT_TITLE": "{}: Error",
"ERROR_LOADING_LAYOUT_TEXT": "Fallo al cargar el archivo de diseño:\n\"{}\"",
"RENAME_LAYOUT_TITLE": "Renombrar Diseño",
"RENAME_LAYOUT_TEXT": "Nuevo Nombre:",
"COPY_LAYOUT_TITLE": "Copiar Diseño",
"COPY_LAYOUT_TEXT": "Nuevo Nombre:",
"LAYOUT_ALREADY_EXISTS": "El diseño ya existe.",
"CONFIRM_DELETE_LAYOUT_TITLE": "Confirmar Eliminación",
"CONFIRM_DELETE_LAYOUT_TEXT": "¿Eliminar el diseño '{}'?",
"INFO_TAB": "Información",
"INFO_RATING_LABEL": "Puntuación:",
"INFO_COMMENT_LABEL": "Comentario:",
"COMMENT_APPLY_CHANGES": "Aplicar Cambios",
"ENTER_COMMENT": "Escribe un comentario...",
"TAGS_TAB": "Etiquetas",
"TAG_FILTER_TAB": "Filtro",
"TAG_SEARCH_PLACEHOLDER": "Buscar etiquetas...",
"TAG_APPLY_CHANGES": "Aplicar Cambios",
"TAG_USED_TAGS": "⭐ ETIQUETAS USADAS",
"TAG_ALL_TAGS": "📂 TODAS LAS ETIQUETAS",
"TAG_NEW_TAG_TITLE": "Nueva Etiqueta",
"SEARCH_BY_TAG": "Buscar por esta etiqueta",
"TAG_NEW_TAG_TEXT": "Introduce el nombre de la etiqueta (usa / para "
"jerarquía):",
"SEARCH_ADD_AND": "Añadir AND esta etiqueta a la búsqueda",
"SEARCH_ADD_OR": "Añadir OR esta etiqueta a la búsqueda",
"FILTER_AND": "Y",
"FILTER_OR": "O",
"FILTER_INVERT": "Invertir",
"FILTER_TAG_COLUMN": "Etiqueta",
"FILTER_NOT_COLUMN": "NO",
"FILTER_STATS_HIDDEN": "{} ítems ocultos",
"FILTER_NAME_PLACEHOLDER": "Filtrar por nombre de archivo...",
"HISTORY_TAB": "Historial",
"HISTORY_TABLE_HEADER": ["Nombre", "Fecha"],
"HISTORY_BTN_CLEAR_ALL_TOOLTIP": "Limpiar Todo",
"HISTORY_BTN_DELETE_SELECTED_TOOLTIP": "Eliminar Seleccionados",
"HISTORY_BTN_DELETE_OLDER_TOOLTIP": "Eliminar Antiguos",
"HISTORY_CLEAR_ALL_TITLE": "Confirmar",
"HISTORY_CLEAR_ALL_TEXT": "¿Limpiar todo el historial?",
"PROPERTIES_TITLE": "Propiedades",
"PROPERTIES_GENERAL_TAB": "General",
"PROPERTIES_METADATA_TAB": "Metadatos",
"PROPERTIES_EXIF_TAB": "EXIF",
"PROPERTIES_FILENAME": "Nombre de Archivo:",
"PROPERTIES_LOCATION": "Ubicación:",
"PROPERTIES_SIZE": "Tamaño:",
"PROPERTIES_CREATED": "Creado:",
"PROPERTIES_MODIFIED": "Modificado:",
"PROPERTIES_DIMENSIONS": "Dimensiones:",
"PROPERTIES_FORMAT": "Formato:",
"PROPERTIES_MEGAPIXELS": "Megapíxeles:",
"PROPERTIES_COLOR_DEPTH": "Profundidad de color:",
"BITS": "bits",
"PROPERTIES_TABLE_HEADER": ["Propiedad", "Valor"],
"PROPERTIES_ADD_ATTR": "Añadir Atributo",
"PROPERTIES_ADD_ATTR_NAME": "Nombre del Atributo (ej. user.comment):",
"PROPERTIES_ADD_ATTR_VALUE": "Valor para {}:",
"PROPERTIES_ERROR_SET_ATTR": "Fallo al establecer xattr: {}",
"PROPERTIES_ERROR_ADD_ATTR": "Fallo al añadir xattr: {}",
"PROPERTIES_DELETE_ATTR": "Eliminar Atributo",
"PROPERTIES_ERROR_DELETE_ATTR": "Fallo al eliminar xattr: {}",
"EXIV2_NOT_INSTALLED": "Librería exiv2 no instalada. Instale python exiv2.",
"NO_METADATA_FOUND": "No se encontraron metadatos (EXIF/XMP/IPTC).",
"VIEWER_MENU_SLIDESHOW": "Presentación",
"VIEWER_MENU_STOP_SLIDESHOW": "Detener Presentación",
"VIEWER_MENU_START_SLIDESHOW": "Iniciar Presentación",
"VIEWER_MENU_START_REVERSE_SLIDESHOW": "Iniciar Presentación Inversa",
"VIEWER_MENU_STOP_REVERSE_SLIDESHOW": "Detener Presentación Inversa",
"VIEWER_MENU_SET_INTERVAL": "Establecer Intervalo...",
"VIEWER_MENU_ROTATE": "Rotar",
"VIEWER_MENU_ROTATE_LEFT": "Izquierda",
"VIEWER_MENU_ROTATE_RIGHT": "Derecha",
"VIEWER_MENU_EXIT_FULLSCREEN": "Salir de Pantalla Completa",
"VIEWER_MENU_ENTER_FULLSCREEN": "Pantalla Completa",
"VIEWER_MENU_RENAME": "Renombrar",
"VIEWER_MENU_FIT_SCREEN": "Ajustar a Pantalla / Tamaño Real",
"VIEWER_MENU_SHOW_FILMSTRIP": "Mostrar Tira de Imágenes",
"VIEWER_MENU_FLIP": "Voltear",
"VIEWER_MENU_FLIP_H": "Horizontal",
"VIEWER_MENU_PAUSE_ANIMATION": "Pausar Animación",
"VIEWER_MENU_RESUME_ANIMATION": "Reanudar Animación",
"VIEWER_MENU_FLIP_V": "Vertical",
"VIEWER_MENU_SHOW_STATUSBAR": "Mostrar Barra de Estado",
"VIEWER_MENU_TAGS": "Etiquetas rápidas",
"VIEWER_MENU_CROP": "Modo Recorte",
"VIEWER_MENU_SAVE_CROP": "Guardar Selección...",
"VIEWER_MENU_COMPARE": "Modo Comparación",
"VIEWER_MENU_COMPARE_1": "Vista Única",
"VIEWER_MENU_COMPARE_2": "2 Imágenes",
"VIEWER_MENU_COMPARE_4": "4 Imágenes",
"VIEWER_MENU_LINK_PANES": "Vincular Paneles",
"SAVE_CROP_TITLE": "Guardar Imagen Recortada",
"SAVE_CROP_FILTER": "Imágenes (*.jpg *.jpeg *.png *.bmp *.webp)",
"SLIDESHOW_INTERVAL_TITLE": "Intervalo de Presentación",
"SLIDESHOW_INTERVAL_TEXT": "Segundos:",
"CONTEXT_MENU_VIEW": "Ver",
"CONTEXT_MENU_OPEN": "Abrir",
"CONTEXT_MENU_OPEN_SEARCH_LOCATION": "Abrir y buscar en ubicación",
"CONTEXT_MENU_OPEN_DEFAULT_APP": "Abrir ubicación con aplicación por defecto",
"CONTEXT_MENU_MOVE_TO": "Mover a...",
"CONTEXT_MENU_COPY_TO": "Copiar a...",
"CONTEXT_MENU_ROTATE": "Girar",
"CONTEXT_MENU_ROTATE_LEFT": "Izquierda",
"CONTEXT_MENU_ROTATE_RIGHT": "Derecha",
"CONTEXT_MENU_TRASH": "Mover a la Papelera",
"CONTEXT_MENU_CLIPBOARD": "Portapapeles",
"CONTEXT_MENU_COPY_URL": "Copiar URL del Archivo",
"CONTEXT_MENU_COPY_DIR": "Copiar Ruta del Directorio",
"CONTEXT_MENU_PROPERTIES": "Propiedades",
"CONTEXT_MENU_NO_APPS_FOUND": "No se encontraron aplicaciones",
"CONTEXT_MENU_REGENERATE": "Regenerar Miniatura",
"CONTEXT_MENU_ERROR_LISTING_APPS": "Error listando aplicaciones",
"CONTEXT_MENU_RENAME": "Renombrar...",
"CONTEXT_MENU_DELETE": "Borrar",
"CONTEXT_MENU_SELECT_ALL": "Seleccionar Todo",
"CONTEXT_MENU_SELECT_NONE": "No Seleccionar Nada",
"CONTEXT_MENU_INVERT_SELECTION": "Invertir Selección",
"CONFIRM_OVERWRITE_TITLE": "Confirmar Sobrescritura",
"CONFIRM_OVERWRITE_TEXT": "El archivo ya existe en el destino:\n{}\n\n¿Deseas "
"sobrescribirlo?",
"ERROR_MOVE_FILE": "No se pudo mover el archivo: {}",
"ERROR_COPY_FILE": "No se pudo copiar el archivo: {}",
"MOVED_TO": "Movido a {}",
"COPIED_TO": "Copiado a {}",
"ERROR_ROTATE_IMAGE": "No se pudo girar la imagen: {}",
},
"gl": {
"READY": "Listo",
"SEARCH": "Buscar",
"SELECT": "Seleccionar",
"ERROR": "Erro",
"WARNING": "Advertencia",
"INFO": "Información",
"LOAD": "Cargar",
"SAVE": "Gardar",
"CREATE": "Crear",
"RENAME": "Renomear",
"COPY": "Copiar",
"DELETE": "Eliminar",
"UNKNOWN": "Descoñecido",
"MENU_LANGUAGE": "Idioma",
"RESTART_REQUIRED_TITLE": "Requírese Reinicio",
"RESTART_REQUIRED_TEXT": "O idioma cambiouse a {language}.\nPor favor, "
"reinicie a aplicación para que os cambios teñan efecto.",
"SORT_NAME_ASC": "Nome ↑",
"SORT_NAME_DESC": "Nome ↓",
"SORT_DATE_ASC": "Data ↑",
"SORT_DATE_DESC": "Data ↓",
"VIEW_MODE_FLAT": "Plano",
"MENU_VIEW_MODE": "Modo de Vista",
"FILTERED_COUNT": "Filtrados: {}",
"VIEW_MODE_DAY": "Separar por Día",
"VIEW_MODE_WEEK": "Separar por Semana",
"VIEW_MODE_MONTH": "Separar por Mes",
"VIEW_MODE_YEAR": "Separar por Ano",
"VIEW_MODE_RATING": "Separar por Valoración",
"FILTERED_ZERO": "Filtrados: 0",
"VIEW_MODE_FOLDER": "Separar por Cartafol",
"LOAD_MORE_TOOLTIP": f"Cargar {APP_CONFIG.get('scan_batch_size', 64)} imaxes "
"máis (Ctrl+D)",
"LOAD_ALL_TOOLTIP": "Cargar tódalas imaxes (Ctrl+Shift+D)",
"LOAD_ALL_TOOLTIP_ALT": "Cancelar carga de tódalas imaxes (Ctrl+Shift+D)",
"CONFIRM_LOAD_ALL_TITLE": "Confirmar carga",
"CONFIRM_LOAD_ALL_TEXT": "Seguro que queres cargar as {} imaxes "
"restantes?",
"DONE_SCAN": "Feito: {} imaxes",
"LOADING_SCAN": "Cargando... {} / {}",
"GROUP_HEADER_FORMAT": "{group_name} - {count} imaxes",
"GROUP_HEADER_FORMAT_SINGULAR": "{group_name} - 1 imaxe",
"GROUP_BY_WEEK_FORMAT": "{year} - Semana {week}",
"GROUP_BY_RATING_FORMAT": "{stars} Estrelas",
"SHUTTING_DOWN": "Pechando...",
"LOADED_PARTIAL": "Cargadas {} / {}",
"HIGH_RES_GENERATED": "Miniaturas de alta resolución xeradas.",
"SCANNING_DIRS": "Escaneando directorios...",
"SELECT_IMAGE_TITLE": "Seleccionar Imaxe",
"VIEWER_TITLE_PAUSED": " [Pausado]",
"IMAGE_NOT_IN_VIEW": "A imaxe '{}' non está na vista actual.",
"VIEWER_TITLE_SLIDESHOW": " [Presentación]",
"RENAME_VIEWER_TITLE": "Renomear Arquivo",
"RENAME_VIEWER_TEXT": "Novo nome para '{}':",
"RENAME_VIEWER_ERROR_EXISTS": "O ficheiro '{}' xa existe.",
"RENAME_VIEWER_ERROR_SYSTEM": "Erro do Sistema",
"RENAME_VIEWER_ERROR_TEXT": "Non se puido renomear o ficheiro: {}",
"ADD_FACE_TITLE": "Engadir Rostro",
"ADD_PET_TITLE": "Engadir Mascota",
"ADD_BODY_TITLE": "Engadir Corpo",
"ADD_OBJECT_TITLE": "Engadir Obxecto",
"ADD_LANDMARK_TITLE": "Engadir Lugar",
"ADD_FACE_LABEL": "Nome:",
"ADD_PET_LABEL": "Nome:",
"ADD_BODY_LABEL": "Nome:",
"ADD_OBJECT_LABEL": "Nome:",
"ADD_LANDMARK_LABEL": "Nome:",
"DELETE_AREA_TITLE": "Eliminar área",
"CREATE_TAG_TITLE": "Crear Etiqueta",
"CREATE_TAG_TEXT": "A etiqueta para '{}' non existe. Desexas crear unha nova?",
"NEW_PERSON_TAG_TITLE": "Nova Etiqueta de Persoa",
"NEW_PERSON_TAG_TEXT": "Introduce a ruta completa da etiqueta:",
"NEW_PET_TAG_TITLE": "Nova Etiqueta de Mascota",
"NEW_PET_TAG_TEXT": "Introduce a ruta completa da etiqueta:",
"NEW_BODY_TAG_TITLE": "Nova Etiqueta de Corpo",
"NEW_BODY_TAG_TEXT": "Introduce a ruta completa da etiqueta:",
"NEW_OBJECT_TAG_TITLE": "Nova Etiqueta de Obxecto",
"NEW_OBJECT_TAG_TEXT": "Introduce a ruta completa da etiqueta:",
"NEW_LANDMARK_TAG_TITLE": "Nova Etiqueta de Lugar",
"NEW_LANDMARK_TAG_TEXT": "Introduce a ruta completa da etiqueta:",
"SELECT_TAG_TITLE": "Seleccionar Etiqueta",
"SELECT_TAG_TEXT": "Atopáronse varias etiquetas para '{}'. Por favor, "
"selecciona a correcta:",
"FACE_NAME_TOOLTIP": "Escribe un nome ou selecciónao do historial.",
"CLEAR_TEXT_TOOLTIP": "Limpar o campo de texto",
"RENAME_AREA_TITLE": "Renomear área",
"SHOW_FACES": "Amosar Rostros e outras áreas",
"DETECT_FACES": "Detectar Rostros",
"DETECT_PETS": "Detectar Mascotas",
"DETECT_BODIES": "Detectar Corpos",
"NO_FACE_LIBS": "Non se atoparon librarías de detección de rostros. Instale "
"'mediapipe' ou 'face_recognition'.",
"THUMBNAIL_NO_NAME": "Sen nome",
"THUMBNAIL_NO_TAGS": "Sen etiquetas",
"MENU_ABOUT": "Acerca de",
"MENU_ABOUT_TITLE": "Acerca de {}",
"MENU_ABOUT_TEXT": "<b>{0}</b> v{1}<br><br>Un visor e xestor de imaxes "
"sinxelo para KDE con soporte para Baloo.<br><br>Creado por {2} coa axuda da "
" IA, e maiormente a boa xente de KDE e Qt.",
"MENU_CACHE": "Caché",
"MENU_CLEAR_CACHE": "Limpar caché ({} elementos, {:.1f} MB, {:.1f} MB en "
"disco)",
"MENU_CLEAN_CACHE": "Limpar entradas de caché inválidas",
"MENU_SHOW_TAGS": "Amosar Etiquetas",
"MENU_SHOW_INFO": "Amosar Información",
"MENU_SHOW_FILTER": "Amosar Filtro",
"MENU_SHOW_LAYOUTS": "Amosar Deseños",
"MENU_SHOW_HISTORY": "Amosar Historial",
"MENU_SETTINGS": "Opcións",
"SETTINGS_GROUP_SCANNER": "Escáner",
"SETTINGS_GROUP_AREAS": "´áreas",
"SETTINGS_GROUP_THUMBNAILS": "Miniaturas",
"SETTINGS_GROUP_VIEWER": "Visor de Imaxes",
"SETTINGS_PERSON_TAGS_LABEL": "Etiquetas de persoa:",
"SETTINGS_FACE_ENGINE_LABEL": "Motor de detección de caras:",
"SETTINGS_FACE_COLOR_LABEL": "Cor do cadro de cara:",
"SETTINGS_MRU_TAGS_COUNT_LABEL": "Máx etiquetas recentes:",
"SETTINGS_PET_TAGS_LABEL": "Etiquetas de mascota:",
"SETTINGS_PET_ENGINE_LABEL": "Motor de detección de mascotas:",
"SETTINGS_PET_COLOR_LABEL": "Cor do cadro de mascota:",
"SETTINGS_PET_HISTORY_COUNT_LABEL": "Máx historial mascotas:",
"SETTINGS_PET_TAGS_TOOLTIP": "Etiquetas predeterminadas para mascotas, "
"separadas por comas.",
"SETTINGS_PET_ENGINE_TOOLTIP": "Libraría utilizada para a detección de "
"mascotas.",
"SETTINGS_PET_COLOR_TOOLTIP": "Cor do cadro delimitador debuxado arredor "
"das mascotas detectadas.",
"SETTINGS_PET_HISTORY_TOOLTIP": "Número máximo de nomes de mascotas usados "
"recentemente para lembrar.",
"TYPE_FACE": "Cara",
"TYPE_PET": "Mascota",
"TYPE_BODY": "Corpo",
"TYPE_OBJECT": "Obxecto",
"TYPE_LANDMARK": "Lugar",
"SETTINGS_BODY_TAGS_LABEL": "Etiquetas de corpo:",
"SETTINGS_BODY_ENGINE_LABEL": "Motor de detección de corpos:",
"SETTINGS_BODY_COLOR_LABEL": "Cor do cadro de corpo:",
"SETTINGS_BODY_HISTORY_COUNT_LABEL": "Máx historial corpos:",
"SETTINGS_BODY_TAGS_TOOLTIP": "Etiquetas predeterminadas para corpos, "
"separadas por comas.",
"SETTINGS_BODY_ENGINE_TOOLTIP": "Libraría utilizada para a detección de "
"corpos.",
"SETTINGS_BODY_COLOR_TOOLTIP": "Cor do cadro delimitador debuxado arredor "
"dos corpos detectados.",
"SETTINGS_BODY_HISTORY_TOOLTIP": "Número máximo de nomes de corpos usados "
"recentemente para lembrar.",
"SETTINGS_OBJECT_TAGS_LABEL": "Etiquetas de obxecto:",
"SETTINGS_OBJECT_ENGINE_LABEL": "Motor de detección de obxectos:",
"SETTINGS_OBJECT_COLOR_LABEL": "Cor do cadro de obxecto:",
"SETTINGS_OBJECT_HISTORY_COUNT_LABEL": "Máx historial obxectos:",
"SETTINGS_OBJECT_TAGS_TOOLTIP": "Etiquetas predeterminadas para obxectos, "
"separadas por comas.",
"SETTINGS_OBJECT_ENGINE_TOOLTIP": "Libraría utilizada para a detección de "
"obxectos.",
"SETTINGS_OBJECT_COLOR_TOOLTIP": "Cor do cadro delimitador debuxado arredor "
"dos obxectos.",
"SETTINGS_OBJECT_HISTORY_TOOLTIP": "Número máximo de nomes de obxectos "
"usados recentemente para lembrar.",
"SETTINGS_LANDMARK_TAGS_LABEL": "Etiquetas de lugar:",
"SETTINGS_LANDMARK_ENGINE_LABEL": "Motor de detección de lugares:",
"SETTINGS_LANDMARK_COLOR_LABEL": "Cor do cadro de lugar:",
"SETTINGS_LANDMARK_HISTORY_COUNT_LABEL": "Máx historial lugares:",
"SETTINGS_LANDMARK_TAGS_TOOLTIP": "Etiquetas predeterminadas para "
"lugares/monumentos, separadas por comas.",
"SETTINGS_LANDMARK_ENGINE_TOOLTIP": "Libraría utilizada para a detección "
"de lugares.",
"SETTINGS_LANDMARK_COLOR_TOOLTIP": "Cor do cadro delimitador debuxado "
"arredor dos lugares.",
"SETTINGS_LANDMARK_HISTORY_TOOLTIP": "Número máximo de nomes de lugares "
"usados recentemente para lembrar.",
"SETTINGS_FACE_HISTORY_COUNT_LABEL": "Máx historial caras:",
"SETTINGS_THUMBS_REFRESH_LABEL": "Intervalo refresco miniaturas (ms):",
"SETTINGS_THUMBS_BG_COLOR_LABEL": "Cor de fondo de miniaturas:",
"SETTINGS_THUMBS_FILENAME_COLOR_LABEL": "Cor do nome de ficheiro:",
"SETTINGS_THUMBS_TAGS_COLOR_LABEL": "Cor das etiquetas das miniaturas:",
"SETTINGS_THUMBS_RATING_COLOR_LABEL": "Cor da valoración das miniaturas:",
"SETTINGS_THUMBS_FILENAME_FONT_SIZE_LABEL": "Tamaño da fonte do nome de "
"ficheiro:",
"SETTINGS_THUMBS_TAGS_FONT_SIZE_LABEL": "Tamaño da fonte das etiquetas:",
"SETTINGS_SCAN_THREADS_LABEL": "Hilos de generación:",
"SETTINGS_SCAN_THREADS_TOOLTIP": "Número máximo de hilos simultáneos para "
"generar miniaturas.",
"SETTINGS_SCAN_MAX_LEVEL_LABEL": "Nivel Máximo de Escaneo:",
"SETTINGS_SCAN_BATCH_SIZE_LABEL": "Tamaño do Lote de Escaneo:",
"SETTINGS_SCANNER_SEARCH_ENGINE_LABEL": "Motor de busca de ficheiros:",
"SETTINGS_SCANNER_SEARCH_ENGINE_TOOLTIP": "Motor a usar para buscar ficheiros. "
"'Bagheera' usa a libraría de BagheeraSearch. 'Baloo' usa o comando de "
"'baloosearch'.",
"SETTINGS_SCAN_FULL_ON_START_LABEL": "Escanear Todo ao Inicio:",
"SETTINGS_SCAN_MAX_LEVEL_TOOLTIP": "Profundidade máxima de directorio para "
"escanear recursivamente.",
"SETTINGS_SCAN_BATCH_SIZE_TOOLTIP": "Número de imaxes a cargar en cada lote.",
"SETTINGS_SCAN_FULL_ON_START_TOOLTIP": "Escanear automaticamente todas as "
"imaxes do cartafol ao inicio.",
"SETTINGS_PERSON_TAGS_TOOLTIP": "Etiquetas predeterminadas para persoas, "
"separadas por comas.",
"SETTINGS_FACE_ENGINE_TOOLTIP": "Libraría utilizada para a detección de "
"rostros (recoméndase MediaPipe).",
"SETTINGS_FACE_COLOR_TOOLTIP": "Cor do cadro delimitador debuxado arredor dos "
"rostros detectados.",
"SETTINGS_MRU_TAGS_TOOLTIP": "Número máximo de etiquetas usadas recentemente "
"para lembrar.",
"SETTINGS_FACE_HISTORY_TOOLTIP": "Número máximo de nomes de rostros usados "
"recentemente para lembrar.",
"SETTINGS_THUMBS_REFRESH_TOOLTIP": "Atraso en milisegundos antes de actualizar "
"as miniaturas tras redimensionar.",
"SETTINGS_THUMBS_BG_COLOR_TOOLTIP": "Cor de fondo da vista de grade de "
"miniaturas.",
"SETTINGS_THUMBS_FILENAME_COLOR_TOOLTIP": "Cor de fonte para nomes de ficheiro "
"en miniaturas.",
"SETTINGS_THUMBS_TAGS_COLOR_TOOLTIP": "Cor de fonte para etiquetas en "
"miniaturas.",
"SETTINGS_THUMBS_RATING_COLOR_TOOLTIP": "Cor para as estrelas de valoración en "
"miniaturas.",
"SETTINGS_THUMBS_FILENAME_FONT_SIZE_TOOLTIP": "Tamaño de fonte para nomes de "
"ficheiro en miniaturas.",
"SETTINGS_THUMBS_TAGS_FONT_SIZE_TOOLTIP": "Tamaño de fonte para etiquetas en "
"miniaturas.",
"SEARCH_ENGINE_NATIVE": "Bagheera",
"SEARCH_ENGINE_BALOO": "Baloo",
"SETTINGS_THUMBS_FILENAME_LINES_LABEL": "Liñas para nome de ficheiro:",
"SETTINGS_THUMBS_FILENAME_LINES_TOOLTIP": "Número de liñas para o nome do "
"ficheiro debaixo da miniatura.",
"SETTINGS_THUMBS_TAGS_LINES_LABEL": "Liñas para etiquetas:",
"SETTINGS_THUMBS_TOOLTIP_BG_COLOR_LABEL": "Cor de fondo do tooltip:",
"SETTINGS_THUMBS_TOOLTIP_FG_COLOR_LABEL": "Cor do texto do tooltip:",
"SETTINGS_THUMBS_TOOLTIP_FG_COLOR_TOOLTIP": "Cor do texto para os tooltips "
"nas miniaturas.",
"SETTINGS_THUMBS_TOOLTIP_BG_COLOR_TOOLTIP": "Cor de fondo para os tooltips "
"nas miniaturas.",
"SETTINGS_THUMBS_TAGS_LINES_TOOLTIP": "Número de liñas para o texto das "
"etiquetas debaixo da miniatura.",
"SETTINGS_THUMBS_SHOW_FILENAME_LABEL": "Amosar nome de ficheiro",
"SETTINGS_THUMBS_SHOW_RATING_LABEL": "Amosar valoración",
"SETTINGS_THUMBS_SHOW_TAGS_LABEL": "Amosar etiquetas",
"SETTINGS_THUMBS_SHOW_FILENAME_TOOLTIP": "Amosar ou ocultar o nome do ficheiro "
"debaixo da miniatura.",
"SETTINGS_THUMBS_SHOW_RATING_TOOLTIP": "Amosar ou ocultar as estrelas de "
"valoración debaixo da miniatura.",
"SETTINGS_THUMBS_SHOW_TAGS_TOOLTIP": "Amosar ou ocultar as etiquetas debaixo "
"da miniatura.",
"SETTINGS_VIEWER_WHEEL_SPEED_LABEL": "Velocidade da roda do rato no visor:",
"SETTINGS_VIEWER_AUTO_RESIZE_LABEL": "Redimensionar xanela automaticamente",
"SETTINGS_VIEWER_AUTO_RESIZE_TOOLTIP": "Redimensiona a xanela automaticamente "
"ao facer zoom ou cambiar de imaxe para axustarse ao contido.",
"SETTINGS_VIEWER_WHEEL_SPEED_TOOLTIP": "Axusta a velocidade coa que a roda do "
"rato cambia de imaxe no visor.",
"SETTINGS_DOWNLOAD_MEDIAPIPE_MODEL": "Descargar Modelo",
"SETTINGS_DOWNLOAD_MEDIAPIPE_MODEL_TOOLTIP": "Descarga o ficheiro de modelo "
"necesario para a detección de caras con MediaPipe.",
"MEDIAPIPE_DOWNLOADING_TITLE": "Descargando Modelo",
"MEDIAPIPE_DOWNLOADING_TEXT": "Descargando o modelo de detección de caras de "
"MediaPipe...",
"MEDIAPIPE_DOWNLOAD_SUCCESS_TITLE": "Descarga Completa",
"MEDIAPIPE_DOWNLOAD_SUCCESS_TEXT": "O modelo de MediaPipe descargouse "
"correctamente.",
"MEDIAPIPE_DOWNLOAD_ERROR_TITLE": "Erro de Descarga",
"MEDIAPIPE_DOWNLOAD_ERROR_TEXT": "Fallo ao descargar o modelo de MediaPipe: {}",
"MENU_VIEWER_SETTINGS": "Opcións do Visor",
"MENU_FILMSTRIP_POSITION": "Posición da Tira de Imaxes",
"FILMSTRIP_BOTTOM": "Abaixo",
"FILMSTRIP_LEFT": "Esquerda",
"FILMSTRIP_TOP": "Arriba",
"FILMSTRIP_RIGHT": "Dereita",
"FILMSTRIP_POS_CHANGED_INFO": "A nova posición da tira de imaxes aplicarase "
"aos novos visores que se abran.",
"MENU_SHOW_SHORTCUTS": "Configurar Atallos de Teclado...",
"SHORTCUTS_TITLE": "Atallos de Teclado",
"SHORTCUTS_ACTION": "Acción",
"SHORTCUTS_KEY": "Atallo",
"CLOSE": "Pechar",
"SHORTCUT_EDIT_TITLE": "Cambiar Atallo",
"SHORTCUT_EDIT_LABEL": "Novo Atallo para '{}'",
"SHORTCUT_CONFLICT_TITLE": "Conflito de Atallos",
"SHORTCUT_CONFLICT_TEXT": "O atallo '{}' xa está asignado a '{}'.",
"SHORTCUT_SEARCH_PLACEHOLDER": "Buscar atallos...",
"CACHE_CLEANING": "Limpando caché...",
"CACHE_CLEANED": "Caché limpada. Elimináronse {} entradas inválidas.",
"CACHE_CLEARED": "Caché de miniaturas limpada.",
"CONFIRM_CLEAR_CACHE_TITLE": "Confirmar Limpeza de Caché",
"CONFIRM_CLEAR_CACHE_TEXT": "Seguro que queres eliminar permanentemente toda "
"a caché de miniaturas?",
"CONFIRM_CLEAR_CACHE_INFO": "Isto eliminará todas as miniaturas da caché da "
"memoria e do disco. Rexeneraranse mentres navegas, o que pode ser "
"lento. Esta acción non se pode desfacer.",
"CONFIRM_DELETE_TITLE": "Confirmar Borrado Permanente",
"CONFIRM_DELETE_TEXT": "Desexas eliminar permanentemente esta imaxe?",
"CONFIRM_DELETE_INFO": "Ficheiro: {}\n\nEsta acción NON se pode desfacer.",
"SYSTEM_ERROR": "Erro do Sistema",
"ERROR_DELETING_FILE": "Erro ao intentar borrar o ficheiro:\n{}",
"RENAME_FILE_TITLE": "Renomear Ficheiro",
"RENAME_FILE_TEXT": "Novo nome para '{}':",
"RENAME_ERROR_TITLE": "Erro ao renomear",
"RENAME_ERROR_EXISTS": "O ficheiro '{}' xa existe.",
"FILE_RENAMED": "Ficheiro renomeado a {}",
"ERROR_RENAME": "Non se puido renomear o ficheiro: {}",
"MAIN_DOCK_TITLE": "Panel principal",
"LAYOUTS_TAB": "Deseños",
"LAYOUTS_TABLE_HEADER": ["Nome", "Última Modificación"],
"SAVE_LAYOUT_TITLE": "Gardar Deseño",
"SAVE_LAYOUT_TEXT": "Introduce un nome para o deseño:",
"LAYOUT_EXISTS_TITLE": "O deseño xa existe",
"LAYOUT_EXISTS_TEXT": "Desexas sobrescribir o deseño \"{}\"?",
"LAYOUT_EXISTS_INFO": "Esta acción NON se pode desfacer.",
"LAYOUT_SAVED": "Deseño '{0}' gardado.",
"ERROR_SAVING_LAYOUT": "Non se puido gardar o deseño: {}",
"LOAD_LAYOUT_TITLE": "Cargar Deseño",
"NO_LAYOUTS_FOUND": "Non se atoparon deseños gardados.",
"SELECT_LAYOUT": "Seleccionar deseño:",
"LAYOUT_RESTORED": "Deseño restaurado.",
"ERROR_LOADING_LAYOUT_TITLE": "{}: Erro",
"ERROR_LOADING_LAYOUT_TEXT": "Fallo ao cargar o ficheiro de deseño:\n\"{}\"",
"RENAME_LAYOUT_TITLE": "Renomear Deseño",
"RENAME_LAYOUT_TEXT": "Novo Nome:",
"COPY_LAYOUT_TITLE": "Copiar Deseño",
"COPY_LAYOUT_TEXT": "Novo Nome:",
"LAYOUT_ALREADY_EXISTS": "O deseño xa existe.",
"CONFIRM_DELETE_LAYOUT_TITLE": "Confirmar Eliminación",
"CONFIRM_DELETE_LAYOUT_TEXT": "Eliminar o deseño '{}'?",
"INFO_TAB": "Información",
"INFO_RATING_LABEL": "Puntuación:",
"INFO_COMMENT_LABEL": "Comentario:",
"COMMENT_APPLY_CHANGES": "Aplicar Cambios",
"ENTER_COMMENT": "Escribe un comentario...",
"TAGS_TAB": "Etiquetas",
"TAG_FILTER_TAB": "Filtro",
"TAG_SEARCH_PLACEHOLDER": "Buscar etiquetas...",
"TAG_APPLY_CHANGES": "Aplicar Cambios",
"TAG_USED_TAGS": "⭐ ETIQUETAS USADAS",
"TAG_ALL_TAGS": "📂 TÓDALAS ETIQUETAS",
"TAG_NEW_TAG_TITLE": "Nova Etiqueta",
"SEARCH_BY_TAG": "Buscar por esta etiqueta",
"TAG_NEW_TAG_TEXT": "Introduce o nome da etiqueta (usa / para "
"xerarquía):",
"SEARCH_ADD_AND": "Engadir AND esta etiqueta á busca",
"SEARCH_ADD_OR": "Engadir OR esta etiqueta á busca",
"FILTER_AND": "E",
"FILTER_OR": "OU",
"FILTER_INVERT": "Inverter",
"FILTER_TAG_COLUMN": "Etiqueta",
"FILTER_NOT_COLUMN": "NON",
"FILTER_STATS_HIDDEN": "{} elementos ocultos",
"FILTER_NAME_PLACEHOLDER": "Filtrar por nome de ficheiro...",
"HISTORY_TAB": "Historial",
"HISTORY_TABLE_HEADER": ["Nome", "Data"],
"HISTORY_BTN_CLEAR_ALL_TOOLTIP": "Limpiar Todo",
"HISTORY_BTN_DELETE_SELECTED_TOOLTIP": "Eliminar Seleccionados",
"HISTORY_BTN_DELETE_OLDER_TOOLTIP": "Eliminar Antiguos",
"HISTORY_CLEAR_ALL_TITLE": "Confirmar",
"HISTORY_CLEAR_ALL_TEXT": "Limpar todo o historial?",
"PROPERTIES_TITLE": "Propiedades",
"PROPERTIES_GENERAL_TAB": "Xeral",
"PROPERTIES_METADATA_TAB": "Metadatos",
"PROPERTIES_EXIF_TAB": "EXIF",
"PROPERTIES_FILENAME": "Nome do Ficheiro:",
"PROPERTIES_LOCATION": "Localización:",
"PROPERTIES_SIZE": "Tamaño:",
"PROPERTIES_CREATED": "Creado:",
"PROPERTIES_MODIFIED": "Modificado:",
"PROPERTIES_DIMENSIONS": "Dimensións:",
"PROPERTIES_FORMAT": "Formato:",
"PROPERTIES_MEGAPIXELS": "Megapíxeles:",
"PROPERTIES_COLOR_DEPTH": "Profundidade da cor:",
"BITS": "bits",
"PROPERTIES_TABLE_HEADER": ["Propiedade", "Valor"],
"PROPERTIES_ADD_ATTR": "Engadir Atributo",
"PROPERTIES_ADD_ATTR_NAME": "Nome do Atributo (ex. user.comment):",
"PROPERTIES_ADD_ATTR_VALUE": "Valor para {}:",
"PROPERTIES_ERROR_SET_ATTR": "Fallo ao establecer xattr: {}",
"PROPERTIES_ERROR_ADD_ATTR": "Fallo ao engadir xattr: {}",
"PROPERTIES_DELETE_ATTR": "Eliminar Atributo",
"PROPERTIES_ERROR_DELETE_ATTR": "Fallo ao eliminar xattr: {}",
"EXIV2_NOT_INSTALLED": "Libraría exiv2 non instalada. Instale python-exiv2.",
"NO_METADATA_FOUND": "Non se atoparon metadatos (EXIF/XMP/IPTC).",
"VIEWER_MENU_SLIDESHOW": "Presentación",
"VIEWER_MENU_STOP_SLIDESHOW": "Deter Presentación",
"VIEWER_MENU_START_SLIDESHOW": "Iniciar Presentación",
"VIEWER_MENU_START_REVERSE_SLIDESHOW": "Iniciar Presentación Inversa",
"VIEWER_MENU_STOP_REVERSE_SLIDESHOW": "Deter Presentación Inversa",
"VIEWER_MENU_SET_INTERVAL": "Establecer Intervalo...",
"VIEWER_MENU_ROTATE": "Xirar",
"VIEWER_MENU_ROTATE_LEFT": "Esquerda",
"VIEWER_MENU_ROTATE_RIGHT": "Dereita",
"VIEWER_MENU_EXIT_FULLSCREEN": "Saír de Pantalla Completa",
"VIEWER_MENU_ENTER_FULLSCREEN": "Pantalla Completa",
"VIEWER_MENU_RENAME": "Renomear",
"VIEWER_MENU_FIT_SCREEN": "Axustar á Pantalla / Tamaño Real",
"VIEWER_MENU_SHOW_FILMSTRIP": "Amosar Tira de Imaxes",
"VIEWER_MENU_FLIP": "Voltear",
"VIEWER_MENU_FLIP_H": "Horizontal",
"VIEWER_MENU_PAUSE_ANIMATION": "Pausar Animación",
"VIEWER_MENU_RESUME_ANIMATION": "Reanudar Animación",
"VIEWER_MENU_FLIP_V": "Vertical",
"VIEWER_MENU_SHOW_STATUSBAR": "Amosar Barra de Estado",
"VIEWER_MENU_TAGS": "Etiquetas rápidas",
"VIEWER_MENU_CROP": "Modo Recorte",
"VIEWER_MENU_SAVE_CROP": "Gardar Selección...",
"VIEWER_MENU_COMPARE": "Modo Comparación",
"VIEWER_MENU_COMPARE_1": "Vista Única",
"VIEWER_MENU_COMPARE_2": "2 Imaxes",
"VIEWER_MENU_COMPARE_4": "4 Imaxes",
"VIEWER_MENU_LINK_PANES": "Vincular Paneis",
"SAVE_CROP_TITLE": "Gardar Imaxe Recortada",
"SAVE_CROP_FILTER": "Imaxes (*.jpg *.jpeg *.png *.bmp *.webp)",
"SLIDESHOW_INTERVAL_TITLE": "Intervalo da Presentación",
"SLIDESHOW_INTERVAL_TEXT": "Segundos:",
"CONTEXT_MENU_VIEW": "Ver",
"CONTEXT_MENU_OPEN": "Abrir",
"CONTEXT_MENU_OPEN_SEARCH_LOCATION": "Abrir e buscar na localización",
"CONTEXT_MENU_OPEN_DEFAULT_APP": "Abrir localización coa aplicación por "
"defecto",
"CONTEXT_MENU_MOVE_TO": "Mover a...",
"CONTEXT_MENU_COPY_TO": "Copiar a...",
"CONTEXT_MENU_ROTATE": "Xirar",
"CONTEXT_MENU_ROTATE_LEFT": "Esquerda",
"CONTEXT_MENU_ROTATE_RIGHT": "Dereita",
"CONTEXT_MENU_TRASH": "Mover á Papeleira",
"CONTEXT_MENU_CLIPBOARD": "Portapapeis",
"CONTEXT_MENU_COPY_URL": "Copiar URL do Ficheiro",
"CONTEXT_MENU_COPY_DIR": "Copiar Ruta do Directorio",
"CONTEXT_MENU_PROPERTIES": "Propiedades",
"CONTEXT_MENU_NO_APPS_FOUND": "Non se atoparon aplicacións",
"CONTEXT_MENU_REGENERATE": "Rexenerar Miniatura",
"CONTEXT_MENU_ERROR_LISTING_APPS": "Erro listando aplicacións",
"CONTEXT_MENU_RENAME": "Renomear...",
"CONTEXT_MENU_DELETE": "Borrar",
"CONTEXT_MENU_SELECT_ALL": "Seleccionar Todo",
"CONTEXT_MENU_SELECT_NONE": "Non Seleccionar Nada",
"CONTEXT_MENU_INVERT_SELECTION": "Inverter Selección",
"CONFIRM_OVERWRITE_TITLE": "Confirmar Sobrescritura",
"CONFIRM_OVERWRITE_TEXT": "O ficheiro xa existe no destino:\n{}\n\nDesexas "
"sobrescribilo?",
"ERROR_MOVE_FILE": "Non se puido mover o ficheiro: {}",
"ERROR_COPY_FILE": "Non se puido copiar o ficheiro: {}",
"MOVED_TO": "Movido a {}",
"COPIED_TO": "Copiado a {}",
"ERROR_ROTATE_IMAGE": "Non se puido xirar a imaxe: {}",
}
}
class _UITextsProxy:
"""
A proxy class to access UI strings from the _UI_TEXTS dictionary.
This allows using `UITexts.SOME_STRING` syntax, which dynamically fetches
the string for the CURRENT_LANGUAGE, with a fallback to the DEFAULT_LANGUAGE.
This makes the rest of the application code independent of the language management
logic.
"""
def __getattr__(self, name):
# Get the dictionary for the current language, or fallback to the default.
lang_texts = _UI_TEXTS.get(CURRENT_LANGUAGE, _UI_TEXTS[DEFAULT_LANGUAGE])
# Get the specific string. If not found in the current language,
# try the default language.
text = lang_texts.get(name)
if text is None:
default_texts = _UI_TEXTS[DEFAULT_LANGUAGE]
# Return a placeholder if not found anywhere
text = default_texts.get(name, f"_{name}_")
return text
# Create a single instance to be used throughout the application.
UITexts = _UITextsProxy()