""" 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": "Native" } # --- 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 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") # 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_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"), "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"), } 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), "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), } # --- 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_OBJECT_TITLE": "Add Object", "ADD_LANDMARK_TITLE": "Add Landmark", "ADD_FACE_LABEL": "Name:", "ADD_PET_LABEL": "Name:", "ADD_OBJECT_LABEL": "Name:", "ADD_LANDMARK_LABEL": "Name:", "DELETE_FACE": "Delete Face or 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_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_FACE_TITLE": "Rename Face or area", "SHOW_FACES": "Show Faces && other areas", "DETECT_FACES": "Detect Face", "DETECT_PETS": "Detect Pets", "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": "{0} v{1}

A simple image viewer and manager " "for KDE with Baloo support.

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_FACES": "Faces && 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_OBJECT": "Object", "TYPE_LANDMARK": "Landmark", "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_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. " "'Native' uses BagheeraSearch library. 'baloosearch' uses KDE Baloo 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": "Native", "SEARCH_ENGINE_BALOO": "baloosearch", "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", "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_OBJECT_TITLE": "Añadir Objeto", "ADD_LANDMARK_TITLE": "Añadir Lugar", "ADD_FACE_LABEL": "Nombre:", "ADD_PET_LABEL": "Nombre:", "ADD_OBJECT_LABEL": "Nombre:", "ADD_LANDMARK_LABEL": "Nombre:", "DELETE_FACE": "Eliminar Rostro o á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_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_FACE_TITLE": "Renombrar Rostro o área", "SHOW_FACES": "Mostrar Rostros y otras áreas", "DETECT_FACES": "Detectar Rostros", "DETECT_PETS": "Detectar Mascotas", "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": "{0} v{1}

Un visor y gestor de imágenes " "simple para KDE con soporte para Baloo.

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_FACES": "Rostros y á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_OBJECT": "Objeto", "TYPE_LANDMARK": "Lugar", "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. " "'Nativo' usa la librería de BagheeraSearch. 'baloosearch' usa el commando de" "KDE Baloo.", "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...", "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_OBJECT_TITLE": "Engadir Obxecto", "ADD_LANDMARK_TITLE": "Engadir Lugar", "ADD_FACE_LABEL": "Nome:", "ADD_PET_LABEL": "Nome:", "ADD_OBJECT_LABEL": "Nome:", "ADD_LANDMARK_LABEL": "Nome:", "DELETE_FACE": "Eliminar Rostro ou á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_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_FACE_TITLE": "Renomear Rostro ou área", "SHOW_FACES": "Amosar Rostros e outras áreas", "DETECT_FACES": "Detectar Rostros", "DETECT_PETS": "Detectar Mascotas", "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": "{0} v{1}

Un visor e xestor de imaxes " "sinxelo para KDE con soporte para Baloo.

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_FACES": "Rostros e á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_OBJECT": "Obxecto", "TYPE_LANDMARK": "Lugar", "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. " "'Nativo' usa la librería de BagheeraSearch. 'baloosearch' usa o comando de " "KDE Baloo.", "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": "Nativo", "SEARCH_ENGINE_BALOO": "baloosearch", "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...", "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()