diff --git a/.gitignore b/.gitignore index 595a3290..e5f2d946 100644 --- a/.gitignore +++ b/.gitignore @@ -262,6 +262,7 @@ compile_commands.json tagstudio/tests/fixtures/library/* tagstudio/tests/fixtures/json_library/.TagStudio/*.sqlite TagStudio.ini +*.sqlite-journal .envrc .direnv diff --git a/docs/updates/roadmap.md b/docs/updates/roadmap.md index e204bc3b..7a8e2557 100644 --- a/docs/updates/roadmap.md +++ b/docs/updates/roadmap.md @@ -86,13 +86,13 @@ Features are broken up into the following priority levels, with nested prioritie - [ ] GPS Location [LOW] - [ ] Custom field names [HIGH] [#18](https://github.com/TagStudioDev/TagStudio/issues/18) - [ ] Search engine [HIGH] [#325](https://github.com/TagStudioDev/TagStudio/issues/325) - - [ ] Boolean operators [HIGH] [#225](https://github.com/TagStudioDev/TagStudio/issues/225), [#314](https://github.com/TagStudioDev/TagStudio/issues/314) + - [x] Boolean operators [HIGH] [#225](https://github.com/TagStudioDev/TagStudio/issues/225), [#314](https://github.com/TagStudioDev/TagStudio/issues/314) - [ ] Tag objects + autocomplete [HIGH] [#476 (Autocomplete)](https://github.com/TagStudioDev/TagStudio/issues/476) - - [ ] Filename search [HIGH] - - [ ] Filetype search [HIGH] - - [ ] Search by extension (e.g. ".jpg", ".png") [HIGH] - - [ ] Optional consolidation of extension synonyms (i.e. ".jpg" can equal ".jpeg") [LOW] - - [ ] Search by media type (e.g. "image", "video", "document") [MEDIUM] + - [x] Filename search [HIGH] + - [x] Filetype search [HIGH] + - [x] Search by extension (e.g. ".jpg", ".png") [HIGH] + - [x] Optional consolidation of extension synonyms (i.e. ".jpg" can equal ".jpeg") [LOW] + - [x] Search by media type (e.g. "image", "video", "document") [MEDIUM] - [ ] Field content search [HIGH] [#272](https://github.com/TagStudioDev/TagStudio/issues/272) - [ ] HAS operator for composition tags [HIGH] - [ ] OCR search [LOW] @@ -172,12 +172,12 @@ These version milestones are rough estimations for when the previous core featur - [ ] [Tag Categories](../library/tag_categories.md) [HIGH] - [ ] Property available for tags that allow the tag and any inheriting from it to be displayed separately in the preview panel under a title [HIGH] - [ ] Search engine [HIGH] - - [ ] Boolean operators [HIGH] + - [x] Boolean operators [HIGH] - [ ] Tag objects + autocomplete [HIGH] - [x] Filename search [HIGH] - [x] Filetype search [HIGH] - [x] Search by extension (e.g. ".jpg", ".png") [HIGH] - - [ ] Optional consolidation of extension synonyms (i.e. ".jpg" can equal ".jpeg") [LOW] + - [x] Optional consolidation of extension synonyms (i.e. ".jpg" can equal ".jpeg") [LOW] - [x] Search by media type (e.g. "image", "video", "document") [MEDIUM] - [ ] Field content search [HIGH] - [ ] Sortable results [HIGH] diff --git a/tagstudio/resources/translations/da.json b/tagstudio/resources/translations/da.json index fc59c8d6..0967ef42 100644 --- a/tagstudio/resources/translations/da.json +++ b/tagstudio/resources/translations/da.json @@ -1,6 +1 @@ -{ - "home.base_title": "TagStudio Alfa", - "home.include_all_tags": "Og (inkluderer alle tags)", - "home.include_any_tag": "Og (inkluderer envher tag)", - "home.main_window": "Hovedvindue" -} +{} diff --git a/tagstudio/resources/translations/de.json b/tagstudio/resources/translations/de.json index ed4c48a5..275f826c 100644 --- a/tagstudio/resources/translations/de.json +++ b/tagstudio/resources/translations/de.json @@ -1,125 +1,92 @@ { - "add_field.add": "Feld hinzufügen", - "build_tags.add_parent_tags": "Übergeordnete Tags hinzufügen", - "build_tags.parent_tags": "Übergeordnete Tags", - "delete_unlinked.confirm": "Sind Sie sicher, dass Sie die folgenden %{len(self.lib.missing_files)}-Einträge löschen wollen?", - "delete_unlinked.delete_entries": "Einträge am Löschen", - "delete_unlinked.delete_unlinked": "Unverknüpfte Einträge löschen", - "delete_unlinked.deleting_number_entries": "Löschen von %{x[0]+1}/{len(self.lib.missing_files)} Unverknüpften Einträgen", - "dialog.open_create_library": "Bibliothek öffnen/erstellen", - "dialog.refresh_directories": "Verzeichnisse werden aktualisiert", - "dialog.save_library": "Bibliothek speichern", - "dialog.scan_directories": "Überprüfe Verzeichnisse auf neue Dateien...\nBereite vor...", - "dialog.scan_directories.new_files": "Verzeichnisse nach neuen Dateien durchsuchen...\n%{x + 1} Datei%{„s“ if x + 1 != 1 else „“} Gesucht, %{len(self.lib.files_not_in_library)} Neue Dateien gefunden", - "file_extension.add_extension": "Erweiterung hinzufügen", - "file_opener.command_not_found": "Konnte %{command_name} nicht im System PATH finden", - "file_opener.not_found": "Datei nicht gefunden:", - "file_opener.open_file": "Datei öffnen:}", - "fix_dupes.advice_label": "Nach der Spiegelung können Sie DupeGuru verwenden, um die unerwünschten Dateien zu löschen. Verwenden Sie anschliessend die Funktion „Unverknüpfte Einträge reparieren“ im Menü „Extras“ von TagStudio, um die unverknüpften Einträge zu löschen.", - "fix_dupes.fix_dupes": "Doppelte Dateien korrigieren", - "fix_dupes.load_file": "DupeGuru-Datei laden", - "fix_dupes.mirror_description": "Spiegeln die Eingabedaten für jeden doppelten Abgleichsatz, indem Sie alle Daten kombinieren, ohne Felder zu entfernen oder zu duplizieren. Bei diesem Vorgang werden keine Dateien oder Daten gelöscht.", - "fix_dupes.mirror_entries": "Spiegelnde Einträge", - "fix_dupes.name_filter": "DupeGuru-Dateien (*.dupeguru)", - "fix_dupes.no_file_match": "Übereinstimmungen mit doppelten Dateien: N/A", - "fix_dupes.no_file_selected": "Keine DupeGuru-Datei ausgewählt", - "fix_dupes.number_file_match": "Übereinstimmungen mit doppelten Dateien: %{count}", - "fix_dupes.open_result_files": "DupeGuru Ergebnisdatei öffnen", - "fix_unlinked.delete_unlinked": "Nicht verknüpfte Einträge löschen", - "fix_unlinked.description": "Jeder Bibliothekseintrag ist mit einer Datei in einem Ihrer Verzeichnisse verknüpft. Wenn eine Datei, die mit einem Eintrag verknüpft ist, ausserhalb von TagStudio verschoben oder gelöscht wird, gilt sie als nicht verknüpft. Nicht verknüpfte Einträge können durch Durchsuchen Ihrer Verzeichnisse automatisch neu verknüpft, vom Benutzer manuell neu verknüpft oder auf Wunsch gelöscht werden.", - "fix_unlinked.duplicate_description": "Doppelte Einträge sind definiert als mehrere Einträge, die auf dieselbe Datei auf der Festplatte verweisen. Durch das Zusammenführen dieser Einträge werden die Tags und Metadaten aller Duplikate zu einem einzigen konsolidierten Eintrag zusammengefasst. Diese sind nicht zu verwechseln mit „doppelten Dateien“, die Duplikate Ihrer Dateien selbst außerhalb von TagStudio sind.", - "fix_unlinked.fix_unlinked": "Unverknüpfte Einträge reparieren", - "fix_unlinked.manual_relink": "Manuelle Neuverknüpfung", - "fix_unlinked.merge_dupes": "Doppelte Einträge zusammenführen", - "fix_unlinked.refresh_dupes": "Doppelte Einträge aktualisieren", - "fix_unlinked.scan_library.label": "Bibliothek nach nicht verknüpften Einträgen durchsuchen...", - "fix_unlinked.scan_library.title": "Bibliothek wird scannen", - "fix_unlinked.search_and_relink": "Suche && Neuverbindung", + "entries.duplicate.merge.label": "Zusammenführen von doppelten Einträgen", + "entries.duplicate.refresh": "Doppelte Einträge aktualisieren", + "entries.duplicates.description": "Doppelte Einträge sind definiert als mehrere Einträge, die auf dieselbe Datei auf der Festplatte verweisen. Durch das Zusammenführen dieser Einträge werden die Tags und Metadaten aller Duplikate zu einem einzigen konsolidierten Eintrag zusammengefasst. Diese sind nicht zu verwechseln mit „doppelten Dateien“, die Duplikate Ihrer Dateien selbst außerhalb von TagStudio sind.", + "entries.mirror": "Spiegel", + "entries.mirror.confirmation": "Sind Sie sich sicher, dass Sie die folgenden %{len(self.lib.dupe_files)} Einträge kopieren wollen?", + "entries.mirror.label": "Kopiere 1/%{count} Einträge...", + "entries.mirror.title": "Einträge werden kopiert", + "entries.tags": "Tags", + "entries.unlinked.delete": "Unverknüpfte Einträge löschen", + "entries.unlinked.delete.confirm": "Sind Sie sicher, dass Sie die folgenden %{len(self.lib.missing_files)}-Einträge löschen wollen?", + "entries.unlinked.delete.deleting": "Einträge am Löschen", + "entries.unlinked.delete.deleting_count": "Löschen von %{x[0]+1}/{len(self.lib.missing_files)} Unverknüpften Einträgen", + "entries.unlinked.description": "Jeder Bibliothekseintrag ist mit einer Datei in einem Ihrer Verzeichnisse verknüpft. Wenn eine Datei, die mit einem Eintrag verknüpft ist, ausserhalb von TagStudio verschoben oder gelöscht wird, gilt sie als nicht verknüpft. Nicht verknüpfte Einträge können durch Durchsuchen Ihrer Verzeichnisse automatisch neu verknüpft, vom Benutzer manuell neu verknüpft oder auf Wunsch gelöscht werden.", + "entries.unlinked.refresh_all": "Alle aktualisieren", + "entries.unlinked.relink.attempting": "Versuche %{x[0]+1}/%{len(self.lib.missing_files)} Einträge wieder zu verknüpfen - %{self.fixed} bereits erfolgreich wieder verknüpft", + "entries.unlinked.relink.manual": "Manuelle Neuverknüpfung", + "entries.unlinked.relink.title": "Einträge werden neuverknüpft", + "entries.unlinked.scanning": "Bibliothek nach nicht verknüpften Einträgen durchsuchen...", + "entries.unlinked.search_and_relink": "Suche && Neuverbindung", + "entries.unlinked.title": "Unverknüpfte Einträge reparieren", + "file.date_created": "Erstellungsdatum", + "file.date_modified": "Datum geändert", + "file.dimensions": "Abmessungen", + "file.duplicates.dupeguru.advice": "Nach dem Kopiervorgang kann DupeGuru benutzt werden und ungewollte Dateien zu löschen. Anschließend kann TagStudios \"Unverknüpfte Einträge reparieren\" Funktion im \"Werkzeuge\" Menü benutzt werden um die nicht verknüpften Einträge zu löschen.", + "file.duplicates.dupeguru.file_extension": "DupeGuru-Dateien (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "DupeGuru-Datei laden", + "file.duplicates.dupeguru.no_file": "Keine DupeGuru-Datei ausgewählt", + "file.duplicates.dupeguru.open_file": "DupeGuru Ergebnisdatei öffnen", + "file.duplicates.fix": "Duplizierte Dateien korrigieren", + "file.duplicates.matches": "Übereinstimmungen mit doppelten Dateien: %{count}", + "file.duplicates.matches_uninitialized": "Übereinstimmungen mit doppelten Dateien: N/A", + "file.duplicates.mirror.description": "Kopiert die Eintragsdaten in jeder Duplikatsmenge, wobei alle Daten kombiniert werden ohne Felder zu entfernen oder zu duplizieren. Diese Operation wird keine Dateien oder Daten löschen.", + "file.duplicates.mirror_entries": "Einträge kopieren", + "file.not_found": "Datei nicht gefunden:", + "file.open_file": "Datei öffnen", + "file.open_location.generic": "Datei im Explorer öffnen", + "folders_to_tags.converting": "Wandele Ordner zu Tags um", + "folders_to_tags.description": "Erstellt Tags basierend auf der Verzeichnisstruktur und wendet sie auf die Einträge an.\nDer folgende Verzeichnisbaum zeigt welche Tags erstellt werden würden und auf welche Einträge sie angewendet werden würden.", + "folders_to_tags.open_all": "Alle öffnen", + "folders_to_tags.title": "Aus Verzeichnissen Tags erstellen", "generic.add": "hinzufügen", - "generic.aliases": "Aliase", "generic.apply": "anwenden", "generic.cancel": "Abbrechen", - "generic.close_all": "Alle schliessen", - "generic.color": "Farbe", "generic.delete": "Löschen", "generic.done": "Fertig", - "generic.exclude": "ausschliessen", - "generic.file_extension": "Dateierweiterungen", - "generic.include": "einschliessen", - "generic.mirror": "Spiegel", - "generic.name": "Name", - "generic.open_all": "Alle öffnen", - "generic.open_file": "Datei öffnen", - "generic.open_file_explorer": "Datei im Explorer öffnen", - "generic.refresh_all": "Alle aktualisieren", - "generic.remove_field": "Feld entfernen", - "generic.search_tags": "Tags suchen", - "generic.shorthand": "Kürzel", - "home.base_title": "TagStudio Alpha", - "home.include_all_tags": "Und (enthält alle Tags)", - "home.include_any_tag": "Oder (enthält alle Tags)", - "home.main_window": "Hauptfenster", + "generic.edit": "Bearbeiten", + "generic.recent_libraries": "Aktuelle Bibliotheken", "home.search": "Suchen", "home.search_entries": "Nach Einträgen suchen", + "home.search_tags": "Tags suchen", "home.thumbnail_size": "Grösse des Vorschaubildes", - "library.Artist": "Künstler", - "library.anthology": "Anthologie", - "library.archived": "Archivierungsdatum", - "library.author": "Autor", - "library.book": "Buch", - "library.collation": "Zusammenstellung", - "library.comic": "Comicheft", - "library.comments": "Kommentare", - "library.composer": "Komponist", - "library.content_tags": "Inhalt Tags", - "library.date": "Datum", - "library.date_created": "Erstellungsdatum", - "library.date_modified": "Datum geändert", - "library.date_published": "Datum des Publizierten", - "library.date_released": "Veröffentlichungsdatum", - "library.date_taken": "Aufnahmedatum", - "library.date_uploaded": "Hochladedatum", - "library.description": "Beschreibung", - "library.favorite": "Favoriten", - "library.guest_artist": "Gastkünstler", - "library.magazine": "Zeitschrift", - "library.manga": "Manga", - "library.meta_tags": "Meta Tags", - "library.notes": "Notizen", - "library.publisher": "Herausgeber", - "library.series": "Serie", - "library.source": "Quelle", - "library.tags": "Tags", - "library.title": "Titel", - "library.url": "URL", - "library.volume": "Band", + "ignore_list.add_extension": "Erweiterung hinzufügen", + "ignore_list.mode.exclude": "ausschliessen", + "ignore_list.mode.include": "Inklusive", + "ignore_list.mode.label": "Listen Modus:", + "ignore_list.title": "Dateierweiterungen", + "library.field.add": "Feld hinzufügen", + "library.field.confirm_remove": "Wollen Sie dieses \"%{self.lib.get_field_attr(field, \"name\")}\" Feld wirklich entfernen?", + "library.field.mixed_data": "Gemischte Daten", + "library.field.remove": "Feld entfernen", + "library.missing": "Dateiort fehlt", + "library.name": "Bibliothek", + "library.refresh.scanning": "Durchsuche Verzeichnisse nach neuen Dateien...\n%{x + 1} Datei%{„en“ if x + 1 != 1 else „“} durchsucht, %{len(self.lib.files_not_in_library)} Neue Datei%{„en“ if len(self.lib.files_not_in_library) != 1 else „“} gefunden", + "library.refresh.scanning_preparing": "Überprüfe Verzeichnisse auf neue Dateien...\nBereite vor...", + "library.refresh.title": "Verzeichnisse werden aktualisiert", + "library.scan_library.title": "Bibliothek wird scannen", + "macros.running.dialog.new_entries": "Führe konfigurierte Makros für %{x + 1}/%{len(new_ids)} neue Einträge aus", + "macros.running.dialog.title": "Ausführen von Makros bei neuen Einträgen", "menu.edit": "Bearbeiten", "menu.file": "Datei", "menu.help": "Hilfe", "menu.macros": "Makros", "menu.tools": "Werkzeuge", "menu.window": "Fenster", - "merge.merge_dupe_entries": "Zusammenführen von doppelten Einträgen", - "merge.window_title": "Zusammenführen von doppelten Einträgen", - "open_library.library_creation_return_code": "Bibliothekserstellung Rückgabecode:", - "open_library.no_tagstudio_library_found": "Keine vorhandene TagStudio-Bibliothek unter '%{Pfad}' gefunden. Eine wird erstellt.", - "open_library.title": "Bibliothek", - "preview.dimensions": "Abmessungen", - "preview.recent": "Aktuelle Bibliotheken", - "progression.running_macros.new_entries": "Ausführen von Makros bei neuen Einträgen", - "progression.running_macros.one_new_entry": "Ausführen konfigurierter Makros für 1/%{len(new_ids)} neue Einträge", - "progression.running_macros.several_new_entry": "Ausführen konfigurierter Makros für %{x + 1}/%{len(new_ids)} neue Einträge", - "relink_unlinked.title": "Einträge werden neuverknüpft", - "splash.open_library": "Die Bibliothek wird geöffnet", - "status.backup_success": "Bibliotheks-Backup gespeichert unter:", - "status.enumerate_query": "Abfrage:%{Abfrage}, Rahmen: %{i}, Länge: %{len(f)}", - "status.number_results_found": "%{len(all_items)} Ergebnisse gefunden für „%{query}“ (%{format_timespan(end_time - start_time)})", - "status.results_found": "Ergebnisse", - "status.save_success": "Bibliothek gespeichert und geschlossen!", - "status.search_library_query": "Suche in der Bibliothek nach", + "preview.no_selection": "Keine Elemente ausgewählt", + "status.library_backup_success": "Bibliotheks-Backup gespeichert unter:", + "status.library_save_success": "Bibliothek gespeichert und geschlossen!", + "status.library_search_query": "Suche in der Bibliothek nach", + "status.results": "Ergebnisse", "tag.add": "Hinzufüge Tag", - "tag.library": "Bibliothek Tags", + "tag.add_to_search": "Zur Suche hinzufügen", + "tag.aliases": "Aliase", + "tag.color": "Farbe", + "tag.name": "Name", "tag.new": "Neuer Tag", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.parent_tags": "Übergeordnete Tags", + "tag.parent_tags.add": "Übergeordnete Tags hinzufügen", + "tag.search_for_tag": "Nach Tag suchen", + "tag.shorthand": "Kürzel", + "tag_manager.title": "Bibliothek Tags" } diff --git a/tagstudio/resources/translations/en.json b/tagstudio/resources/translations/en.json index 0f9b61e0..32cae501 100644 --- a/tagstudio/resources/translations/en.json +++ b/tagstudio/resources/translations/en.json @@ -1,144 +1,132 @@ { - "home.base_title": "TagStudio Alpha", - "home.main_window": "Main Window", - "home.include_all_tags": "And (Includes All Tags)", - "home.include_any_tag": "Or (Includes Any Tag)", - "home.thumbnail_size": "Thumbnail Size", - "home.search_entries": "Search Entries", - "home.search": "Search", - "menu.file": "File", - "menu.edit": "Edit", - "menu.tools": "Tools", - "menu.macros": "Macros", - "menu.window": "Window", - "menu.help": "Help", - "tag.new": "New Tag", - "tag.add": "Add Tag", - "tag.library": "Library Tags", - "merge.window_title": "Merging Duplicate Entries", - "merge.merge_dupe_entries": "Merging Duplicate Entries", - "preview.dimensions": "Dimensions", - "preview.recent": "Recent Libraries", - "library.title": "Title", - "library.author": "Author", - "library.Artist": "Artist", - "library.url": "URL", - "library.description": "Description", - "library.notes": "Notes", - "library.tags": "Tags", - "library.content_tags": "Content Tags", - "library.meta_tags": "Meta Tags", - "library.collation": "Collation", - "library.date": "Date", - "library.date_created": "Date Created", - "library.date_modified": "Date Modified", - "library.date_taken": "Date Taken", - "library.date_published": "Date Published", - "library.archived": "Date Archived", - "library.favorite": "Favorite", - "library.book": "Book", - "library.comic": "Comic", - "library.series": "Series", - "library.manga": "Manga", - "library.source": "Source", - "library.date_uploaded": "Date Uploaded", - "library.date_released": "Date Released", - "library.volume": "Volume", - "library.anthology": "Anthology", - "library.magazine": "Magazine", - "library.publisher": "Publisher", - "library.guest_artist": "Guest Artist", - "library.composer": "Composer", - "library.comments": "Comments", - "open_library.no_tagstudio_library_found": "No existing TagStudio library found at '%{path}'. Creating one.", - "open_library.library_creation_return_code": "Library Creation Return Code:", - "open_library.title": "Library", - "dialog.open_create_library": "Open/Create Library", - "splash.open_library": "Opening Library", - "status.save_success": "Library Saved and Closed!", - "status.backup_success": "Library Backup Saved at:", - "status.search_library_query": "Searching Library for", - "status.enumerate_query": "Query:%{query}, Frame: %{i}, Length: %{len(f)}", - "status.number_results_found": "%{len(all_items)} Results Found for \"%{query}\" (%{format_timespan(end_time - start_time)})", - "status.results_found": "Results", - "dialog.save_library": "Save Library", - "dialog.refresh_directories": "Refreshing Directories", - "dialog.scan_directories": "Scanning Directories for New Files...\nPreparing...", - "dialog.scan_directories.new_files": "Scanning Directories for New Files...\n%{x + 1} File%{\"s\" if x + 1 != 1 else \"\"} Searched, %{len(self.lib.files_not_in_library)} New Files Found", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S", - "progression.running_macros.new_entries": "Running Macros on New Entries", - "progression.running_macros.one_new_entry": "Running Configured Macros on 1/%{len(new_ids)} New Entries", - "progression.running_macros.several_new_entry": "Running Configured Macros on %{x + 1}/%{len(new_ids)} New Entries", - "file_opener.open_file": "Opening file:}", - "file_opener.not_found": "File not found:", - "file_opener.command_not_found": "Could not find %{command_name} on system PATH", - "add_field.add": "Add Field", - "generic.remove_field": "Remove Field", - "generic.file_extension": "File Extensions", - "generic.open_file": "Open file", - "generic.open_file_explorer": "Open file in explorer", - "generic.cancel": "Cancel", - "generic.add": "Add", - "generic.name": "Name", - "generic.shorthand": "Shorthand", - "generic.aliases": "Aliases", - "generic.color": "Color", - "generic.delete": "Delete", - "generic.exclude": "Exclude", - "generic.include": "Include", - "generic.done": "Done", - "generic.open_all": "Open All", - "generic.close_all": "Close All", - "generic.refresh_all": "Refresh All", - "generic.apply": "Apply", - "generic.mirror": "Mirror", - "generic.search_tags": "Search Tags", - "build_tags.parent_tags": "Parent Tags", - "build_tags.add_parent_tags": "Add Parent Tags", - "delete_unlinked.delete_unlinked": "Delete Unlinked Entries", - "delete_unlinked.confirm": "Are you sure you want to delete the following %{len(self.lib.missing_files)} entries?", - "delete_unlinked.delete_entries": "Deleting Entries", - "delete_unlinked.deleting_number_entries": "Deleting %{x[0]+1}/{len(self.lib.missing_files)} Unlinked Entries", - "file_extension.add_extension": "Add Extension", - "file_extension.list_mode": "List Mode:", - "fix_dupes.fix_dupes": "Fix Duplicate Files", - "fix_dupes.no_file_selected": "No DupeGuru File Selected", - "fix_dupes.load_file": "Load DupeGuru File", - "fix_dupes.mirror_entries": "Mirror Entries", - "fix_dupes.mirror_description": "Mirror the Entry data across each duplicate match set, combining all data while not removing or duplicating fields. This operation will not delete any files or data.", - "fix_dupes.advice_label": "After mirroring, you're free to use DupeGuru to delete the unwanted files. Afterwards, use TagStudio's \"Fix Unlinked Entries\" feature in the Tools menu in order to delete the unlinked Entries.", - "fix_dupes.open_result_files": "Open DupeGuru Results File", - "fix_dupes.name_filter": "DupeGuru Files (*.dupeguru)", - "fix_dupes.no_file_match": "Duplicate File Matches: N/A", - "fix_dupes.number_file_match": "Duplicate File Matches: %{count}", - "fix_unlinked.fix_unlinked": "Fix Unlinked Entries", - "fix_unlinked.description": "Each library entry is linked to a file in one of your directories. If a file linked to an entry is moved or deleted outside of TagStudio, it is then considered unlinked. Unlinked entries may be automatically relinked via searching your directories, manually relinked by the user, or deleted if desired.", - "fix_unlinked.duplicate_description": "Duplicate entries are defined as multiple entries which point to the same file on disk. Merging these will combine the tags and metadata from all duplicates into a single consolidated entry. These are not to be confused with \"duplicate files\", which are duplicates of your files themselves outside of TagStudio.", - "fix_unlinked.search_and_relink": "Search && Relink", - "fix_unlinked.refresh_dupes": "Refresh Duplicate Entries", - "fix_unlinked.merge_dupes": "Merge Duplicate Entries", - "fix_unlinked.manual_relink": "Manual Relink", - "fix_unlinked.delete_unlinked": "Delete Unlinked Entries", - "fix_unlinked.scan_library.title": "Scanning Library", - "fix_unlinked.scan_library.label": "Scanning Library for Unlinked Entries...", - "folders_to_tags.folders_to_tags": "Converting folders to Tags", - "folders_to_tags.title": "Create Tags From Folders", + "app.git": "Git Commit", + "app.pre_release": "Pre-Release", + "edit.tag_manager": "Manage Tags", + "entries.duplicate.merge.label": "Merging Duplicate Entries", + "entries.duplicate.merge": "Merge Duplicate Entries", + "entries.duplicate.refresh": "Refresh Duplicate Entries", + "entries.duplicates.description": "Duplicate entries are defined as multiple entries which point to the same file on disk. Merging these will combine the tags and metadata from all duplicates into a single consolidated entry. These are not to be confused with \"duplicate files\", which are duplicates of your files themselves outside of TagStudio.", + "entries.mirror.confirmation": "Are you sure you want to mirror the following %{len(self.lib.dupe_files)} Entries?", + "entries.mirror.label": "Mirroring 1/%{count} Entries...", + "entries.mirror.title": "Mirroring Entries", + "entries.mirror": "Mirror", + "entries.tags": "Tags", + "entries.unlinked.delete.confirm": "Are you sure you want to delete the following %{len(self.lib.missing_files)} entries?", + "entries.unlinked.delete.deleting_count": "Deleting %{x[0]+1}/{len(self.lib.missing_files)} Unlinked Entries", + "entries.unlinked.delete.deleting": "Deleting Entries", + "entries.unlinked.delete": "Delete Unlinked Entries", + "entries.unlinked.description": "Each library entry is linked to a file in one of your directories. If a file linked to an entry is moved or deleted outside of TagStudio, it is then considered unlinked. Unlinked entries may be automatically relinked via searching your directories or deleted if desired.", + "entries.unlinked.refresh_all": "Refresh All", + "entries.unlinked.relink.attempting": "Attempting to Relink %{x[0]+1}/%{len(self.lib.missing_files)} Entries, %{self.fixed} Successfully Relinked", + "entries.unlinked.relink.manual": "Manual Relink", + "entries.unlinked.relink.title": "Relinking Entries", + "entries.unlinked.scanning": "Scanning Library for Unlinked Entries...", + "entries.unlinked.search_and_relink": "Search && Relink", + "entries.unlinked.title": "Fix Unlinked Entries", + "field.copy": "Copy Field", + "field.edit": "Edit Field", + "field.paste": "Paste Field", + "file.date_added": "Date Added", + "file.date_created": "Date Created", + "file.date_modified": "Date Modified", + "file.dimensions": "Dimensions", + "file.duplicates.dupeguru.advice": "After mirroring, you're free to use DupeGuru to delete the unwanted files. Afterwards, use TagStudio's \"Fix Unlinked Entries\" feature in the Tools menu in order to delete the unlinked Entries.", + "file.duplicates.dupeguru.file_extension": "DupeGuru Files (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "Load DupeGuru File", + "file.duplicates.dupeguru.no_file": "No DupeGuru File Selected", + "file.duplicates.dupeguru.open_file": "Open DupeGuru Results File", + "file.duplicates.fix": "Fix Duplicate Files", + "file.duplicates.matches_uninitialized": "Duplicate File Matches: N/A", + "file.duplicates.matches": "Duplicate File Matches: %{count}", + "file.duplicates.mirror_entries": "Mirror Entries", + "file.duplicates.mirror.description": "Mirror the Entry data across each duplicate match set, combining all data while not removing or duplicating fields. This operation will not delete any files or data.", + "file.duration": "Length", + "file.not_found": "File Not Found", + "file.open_file_with": "Open file with", + "file.open_file": "Open file", + "file.open_location.generic": "Show file in explorer", + "file.open_location.mac": "Reveal in Finder", + "file.open_location.windows": "Show in File Explorer", + "folders_to_tags.close_all": "Close All", + "folders_to_tags.converting": "Converting folders to Tags", "folders_to_tags.description": "Creates tags based on your folder structure and applies them to your entries.\n The structure below shows all the tags that will be created and what entries they will be applied to.", - "mirror_entities.are_you_sure": "Are you sure you want to mirror the following %{len(self.lib.dupe_files)} Entries?", - "mirror_entities.title": "Mirroring Entries", - "mirror_entities.label": "Mirroring 1/%{count} Entries...", - "relink_unlinked.title": "Relinking Entries", - "relink_unlinked.attempt_relink": "Attempting to Relink %{x[0]+1}/%{len(self.lib.missing_files)} Entries, %{self.fixed} Successfully Relinked", - "landing.open_button": "Open/Create Library %{open_shortcut_text}", - "preview_panel.missing_location": "Location is missing", - "preview_panel.update_widgets": "[ENTRY PANEL] UPDATE WIDGETS (%{self.driver.selected})", - "preview_panel.no_items_selected": "No Items Selected", - "preview_panel.confirm_remove": "Are you sure you want to remove this \"%{self.lib.get_field_attr(field, \"name\")}\" field?", - "preview_panel.mixed_data": "Mixed Data", - "preview_panel.edit_name": "Edit", - "preview_panel.unknown_field_type": "Unknown Field Type", + "folders_to_tags.open_all": "Open All", + "folders_to_tags.title": "Create Tags From Folders", + "generic.add": "Add", + "generic.apply": "Apply", + "generic.cancel": "Cancel", + "generic.copy": "Copy", + "generic.cut": "Cut", + "generic.delete": "Delete", + "generic.done": "Done", + "generic.edit": "Edit", + "generic.navigation.back": "Back", + "generic.navigation.next": "Next", + "generic.paste": "Paste", + "generic.recent_libraries": "Recent Libraries", + "help.visit_github": "Visit GitHub Repository", + "home.search_entries": "Search Entries", + "home.search_library": "Search Library", + "home.search_tags": "Search Tags", + "home.search": "Search", + "home.thumbnail_size": "Thumbnail Size", + "ignore_list.add_extension": "Add Extension", + "ignore_list.mode.exclude": "Exclude", + "ignore_list.mode.include": "Include", + "ignore_list.mode.label": "List Mode", + "ignore_list.title": "File Extensions", + "library.field.add": "Add Field", + "library.field.confirm_remove": "Are you sure you want to remove this \"%{self.lib.get_field_attr(field, \"name\")}\" field?", + "library.field.mixed_data": "Mixed Data", + "library.field.remove": "Remove Field", + "library.missing": "Library Location is Missing", + "library.name": "Library", + "library.refresh.scanning_preparing": "Scanning Directories for New Files...\nPreparing...", + "library.refresh.scanning": "Scanning Directories for New Files...\n%{x + 1} File%{\"s\" if x + 1 != 1 else \"\"} Searched, %{len(self.lib.files_not_in_library)} New Files Found", + "library.refresh.title": "Refreshing Directories", + "library.scan_library.title": "Scanning Library", + "macros.running.dialog.new_entries": "Running Configured Macros on %{x + 1}/%{len(new_ids)} New Entries", + "macros.running.dialog.title": "Running Macros on New Entries", + "menu.edit.ignore_list": "Ignore Files and Folders", + "menu.edit": "Edit", + "menu.file.new_library": "New Library", + "menu.file.open_create_library": "Open/Create Library", + "menu.file.open_library": "Open Library", + "menu.file.save_library": "Save Library", + "menu.file": "File", + "menu.help": "Help", + "menu.macros": "Macros", + "menu.select": "Select", + "menu.tools": "Tools", + "menu.view": "View", + "menu.window": "Window", + "preview.no_selection": "No Items Selected", + "select.all": "Select All", + "select.clear": "Clear Selection", + "settings.open_library_on_start": "Open Library on Start", + "settings.show_filenames_in_grid": "Show Filenames in Grid", + "settings.show_recent_libraries": "Show Recent Libraries", + "splash.opening_library": "Opening Library", + "status.library_backup_success": "Library Backup Saved at:", + "status.library_save_success": "Library Saved and Closed!", + "status.library_search_query": "Searching Library for", + "status.results_found": "{results.total_count} Results Found", + "status.results": "Results", + "tag_manager.title": "Library Tags", + "tag.add_to_search": "Add to Search", + "tag.add": "Add Tag", + "tag.aliases": "Aliases", + "tag.color": "Color", + "tag.name": "Name", + "tag.new": "New Tag", + "tag.parent_tags.add": "Add Parent Tag(s)", + "tag.parent_tags.description": "This tag can be treated as a substitute for any of these Parent Tags in searches.", + "tag.parent_tags": "Parent Tags", "tag.search_for_tag": "Search for Tag", - "tag.add_search": "Add to Search", - "text_line_edit.unknown_event_type": "unknown event type: %{event}" + "tag.shorthand": "Shorthand", + "view.size.0": "Mini", + "view.size.1": "Small", + "view.size.2": "Medium", + "view.size.3": "Large", + "view.size.4": "Extra Large" } diff --git a/tagstudio/resources/translations/es.json b/tagstudio/resources/translations/es.json index f0b4a52e..c908121f 100644 --- a/tagstudio/resources/translations/es.json +++ b/tagstudio/resources/translations/es.json @@ -1,144 +1,92 @@ { - "add_field.add": "Añadir campo", - "build_tags.add_parent_tags": "Añadir etiquetas principales", - "build_tags.parent_tags": "Etiquetas principales", - "delete_unlinked.confirm": "¿Está seguro de que desea eliminar las siguientes %{len(self.lib.missing_files)} entradas?", - "delete_unlinked.delete_entries": "Eliminando entradas", - "delete_unlinked.delete_unlinked": "Eliminar entradas no vinculadas", - "delete_unlinked.deleting_number_entries": "Eliminando %{x[0]+1}/{len(self.lib.missing_files)} entradas no vinculadas", - "dialog.open_create_library": "Abrir/Crear biblioteca", - "dialog.refresh_directories": "Refrescar directorios", - "dialog.save_library": "Guardar la biblioteca", - "dialog.scan_directories": "Buscar archivos nuevos en los directorios...\nPreparando...", - "dialog.scan_directories.new_files": "Buscando archivos nuevos en los directorios...\n%{x + 1} Archivo%{\"s\" if x + 1 != 1 else \"\"} Buscado, %{len(self.lib.files_not_in_library)} Archivos nuevos encontrados", - "file_extension.add_extension": "Añadir extensión", - "file_extension.list_mode": "Modo de lista:", - "file_opener.command_not_found": "No se pudo encontrar %{command_name} en el PATH del sistema", - "file_opener.not_found": "Archivo no encontrado:", - "file_opener.open_file": "Abriendo archivo :}", - "fix_dupes.advice_label": "Después de la duplicación, puede utilizar DupeGuru para eliminar los archivos no deseados. Luego, utilice la función \"Reparar entradas no vinculadas\" de TagStudio en el menú Herramientas para eliminar las entradas no vinculadas.", - "fix_dupes.fix_dupes": "Reparar archivos duplicados", - "fix_dupes.load_file": "Cargar archivo DupeGuru", - "fix_dupes.mirror_description": "Reflejar los datos de entrada en cada conjunto de coincidencias duplicadas, combinando todos los datos sin eliminar ni duplicar campos. Esta operación no eliminará ningún archivos ni dato.", - "fix_dupes.mirror_entries": "Reflejar entradas", - "fix_dupes.name_filter": "Archivos DupeGuru (*.dupeguru)", - "fix_dupes.no_file_match": "Coincidencias de archivos duplicados: N/D", - "fix_dupes.no_file_selected": "No se ha seleccionado ningún archivo DupeGuru", - "fix_dupes.number_file_match": "Coincidencias de archivos duplicados: %{count}", - "fix_dupes.open_result_files": "Abrir el archivo de resultados de DupeGuru", - "fix_unlinked.delete_unlinked": "Borrar entradas no vinculadas", - "fix_unlinked.description": "Cada entrada de la biblioteca está vinculada a un archivo en uno de sus directorios. Si un archivo vinculado a una entrada se mueve o se elimina fuera de TagStudio, se considerará desvinculado. Las entradas no vinculadas se pueden volver a vincular automáticamente mediante una búsqueda en sus directorios, el usuario puede volver a vincularlas manualmente o eliminarlas si así lo desea.", - "fix_unlinked.duplicate_description": "Las entradas duplicadas se definen como múltiples entradas que apuntan al mismo archivo en el disco. Al fusionarlas, se combinarán las etiquetas y los metadatos de todos los duplicados en una única entrada consolidada. No deben confundirse con los \"archivos duplicados\", que son duplicados de sus archivos fuera de TagStudio.", - "fix_unlinked.fix_unlinked": "Corregir entradas no vinculadas", - "fix_unlinked.manual_relink": "Reenlace manual", - "fix_unlinked.merge_dupes": "Fusionar entradas duplicadas", - "fix_unlinked.refresh_dupes": "Recargar entradas duplicadas", - "fix_unlinked.scan_library.label": "Buscando entradas no enlazadas en la biblioteca...", - "fix_unlinked.scan_library.title": "Escaneando la biblioteca", - "fix_unlinked.search_and_relink": "Buscar y volver a vincular", + "entries.duplicate.merge.label": "Fusionando entradas duplicadas", + "entries.duplicate.refresh": "Recargar entradas duplicadas", + "entries.duplicates.description": "Las entradas duplicadas se definen como múltiples entradas que apuntan al mismo archivo en el disco. Al fusionarlas, se combinarán las etiquetas y los metadatos de todos los duplicados en una única entrada consolidada. No deben confundirse con los \"archivos duplicados\", que son duplicados de sus archivos fuera de TagStudio.", + "entries.mirror": "Espejo", + "entries.mirror.confirmation": "¿Estás seguro de que quieres reflejar las siguientes %{len(self.lib.dupe_files)} entradas?", + "entries.mirror.label": "Reflejando 1/%{count} Entradas...", + "entries.mirror.title": "Entradas reflejadas", + "entries.tags": "Etiquetas", + "entries.unlinked.delete": "Eliminar entradas no vinculadas", + "entries.unlinked.delete.confirm": "¿Está seguro de que desea eliminar las siguientes %{len(self.lib.missing_files)} entradas?", + "entries.unlinked.delete.deleting": "Eliminando entradas", + "entries.unlinked.delete.deleting_count": "Eliminando %{x[0]+1}/{len(self.lib.missing_files)} entradas no vinculadas", + "entries.unlinked.description": "Cada entrada de la biblioteca está vinculada a un archivo en uno de sus directorios. Si un archivo vinculado a una entrada se mueve o se elimina fuera de TagStudio, se considerará desvinculado. Las entradas no vinculadas se pueden volver a vincular automáticamente mediante una búsqueda en sus directorios, el usuario puede volver a vincularlas manualmente o eliminarlas si así lo desea.", + "entries.unlinked.refresh_all": "Recargar todo", + "entries.unlinked.relink.attempting": "Intentando volver a vincular %{x[0]+1}/%{len(self.lib.missing_files)} Entradas, %{self.fixed} Reenlazado correctamente", + "entries.unlinked.relink.manual": "Reenlace manual", + "entries.unlinked.relink.title": "Volver a vincular las entradas", + "entries.unlinked.scanning": "Buscando entradas no enlazadas en la biblioteca...", + "entries.unlinked.search_and_relink": "Buscar y volver a vincular", + "entries.unlinked.title": "Corregir entradas no vinculadas", + "file.date_created": "Fecha de creación", + "file.date_modified": "Fecha de modificación", + "file.dimensions": "Dimensiones", + "file.duplicates.dupeguru.advice": "Después de la duplicación, puede utilizar DupeGuru para eliminar los archivos no deseados. Luego, utilice la función \"Reparar entradas no vinculadas\" de TagStudio en el menú Herramientas para eliminar las entradas no vinculadas.", + "file.duplicates.dupeguru.file_extension": "Archivos DupeGuru (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "Cargar archivo DupeGuru", + "file.duplicates.dupeguru.no_file": "No se ha seleccionado ningún archivo DupeGuru", + "file.duplicates.dupeguru.open_file": "Abrir el archivo de resultados de DupeGuru", + "file.duplicates.fix": "Reparar archivos duplicados", + "file.duplicates.matches": "Coincidencias de archivos duplicados: %{count}", + "file.duplicates.matches_uninitialized": "Coincidencias de archivos duplicados: N/D", + "file.duplicates.mirror.description": "Reflejar los datos de entrada en cada conjunto de coincidencias duplicadas, combinando todos los datos sin eliminar ni duplicar campos. Esta operación no eliminará ningún archivos ni dato.", + "file.duplicates.mirror_entries": "Reflejar entradas", + "file.not_found": "Archivo no encontrado:", + "file.open_file": "Abrir archivo", + "file.open_location.generic": "Abrir archivo en el explorador", + "folders_to_tags.converting": "Convertir carpetas en etiquetas", "folders_to_tags.description": "Crea etiquetas basadas en su estructura de carpetas y las aplica a sus entradas.\n La siguiente estructura muestra todas las etiquetas que se crearán y a qué entradas se aplicarán.", - "folders_to_tags.folders_to_tags": "Convertir carpetas en etiquetas", + "folders_to_tags.open_all": "Abrir todo", "folders_to_tags.title": "Crear etiquetas a partir de carpetas", "generic.add": "Añadir", - "generic.aliases": "Alias", "generic.apply": "Aplicar", "generic.cancel": "Cancelar", - "generic.close_all": "Cerrar todo", - "generic.color": "Color", "generic.delete": "Borrar", "generic.done": "Donar", - "generic.exclude": "Excluir", - "generic.file_extension": "Extensiones del archivo", - "generic.include": "Incluir", - "generic.mirror": "Espejo", - "generic.name": "Nombre", - "generic.open_all": "Abrir todo", - "generic.open_file": "Abrir archivo", - "generic.open_file_explorer": "Abrir archivo en el explorador", - "generic.refresh_all": "Recargar todo", - "generic.remove_field": "Eliminar campo", - "generic.search_tags": "Buscar etiquetas", - "generic.shorthand": "Taquigrafía", - "home.base_title": "TagStudio Alfa", - "home.include_all_tags": "Y (Incluye todas las etiquetas)", - "home.include_any_tag": "O (Incluye cualquier etiqueta)", - "home.main_window": "Ventana principal", + "generic.edit": "Editar", + "generic.recent_libraries": "Bibliotecas recientes", "home.search": "Buscar", "home.search_entries": "Buscar entradas", + "home.search_tags": "Buscar etiquetas", "home.thumbnail_size": "Tamaño de la miniatura", - "landing.open_button": "Abrir/Crear biblioteca %{open_shortcut_text}", - "library.Artist": "Artista", - "library.anthology": "Antología", - "library.archived": "Fecha de archivo", - "library.author": "Autor", - "library.book": "Libro", - "library.collation": "Recopilación", - "library.comic": "Tebeo", - "library.comments": "Comentarios", - "library.composer": "Compositor", - "library.content_tags": "Etiquetas del contenido", - "library.date": "Fecha", - "library.date_created": "Fecha de creación", - "library.date_modified": "Fecha de modificación", - "library.date_published": "Fecha de publicación", - "library.date_released": "Fecha de lanzamiento", - "library.date_taken": "Fecha de realización", - "library.date_uploaded": "Fecha de carga", - "library.description": "Descripción", - "library.favorite": "Favorito", - "library.guest_artist": "Artista invitado", - "library.magazine": "Revista", - "library.manga": "Manga", - "library.meta_tags": "Etiquetas de metadatos", - "library.notes": "Notas", - "library.publisher": "Editor", - "library.series": "Series", - "library.source": "Fuente", - "library.tags": "Etiquetas", - "library.title": "Título", - "library.url": "URL", - "library.volume": "Volumen", + "ignore_list.add_extension": "Añadir extensión", + "ignore_list.mode.exclude": "Excluir", + "ignore_list.mode.include": "Incluir", + "ignore_list.mode.label": "Modo de lista:", + "ignore_list.title": "Extensiones del archivo", + "library.field.add": "Añadir campo", + "library.field.confirm_remove": "¿Está seguro de que desea eliminar este campo \"%{self.lib.get_field_attr(field, \"name\")}\"?", + "library.field.mixed_data": "Datos variados", + "library.field.remove": "Eliminar campo", + "library.missing": "Falta la ubicación", + "library.name": "Biblioteca", + "library.refresh.scanning": "Buscando archivos nuevos en los directorios...\n%{x + 1} Archivo%{\"s\" if x + 1 != 1 else \"\"} Buscado, %{len(self.lib.files_not_in_library)} Archivos nuevos encontrados", + "library.refresh.scanning_preparing": "Buscar archivos nuevos en los directorios...\nPreparando...", + "library.refresh.title": "Refrescar directorios", + "library.scan_library.title": "Escaneando la biblioteca", + "macros.running.dialog.new_entries": "Ejecución de macros configurados en %{x + 1}/%{len(new_ids)} entradas nuevas", + "macros.running.dialog.title": "Ejecución de macros en entradas nuevas", "menu.edit": "Editar", "menu.file": "Archivo", "menu.help": "Ayuda", "menu.macros": "Macro", "menu.tools": "Herramientas", "menu.window": "Ventana", - "merge.merge_dupe_entries": "Fusionando entradas duplicadas", - "merge.window_title": "Fusionando entradas duplicadas", - "mirror_entities.are_you_sure": "¿Estás seguro de que quieres reflejar las siguientes %{len(self.lib.dupe_files)} entradas?", - "mirror_entities.label": "Reflejando 1/%{count} Entradas...", - "mirror_entities.title": "Entradas reflejadas", - "open_library.library_creation_return_code": "Código de retorno de creación de biblioteca:", - "open_library.no_tagstudio_library_found": "No se encontró ninguna biblioteca TagStudio existente en '%{path}'. Se está creando una.", - "open_library.title": "Biblioteca", - "preview.dimensions": "Dimensiones", - "preview.recent": "Bibliotecas recientes", - "preview_panel.confirm_remove": "¿Está seguro de que desea eliminar este campo \"%{self.lib.get_field_attr(field, \"name\")}\"?", - "preview_panel.edit_name": "Editar", - "preview_panel.missing_location": "Falta la ubicación", - "preview_panel.mixed_data": "Datos variados", - "preview_panel.no_items_selected": "No hay elementos seleccionados", - "preview_panel.unknown_field_type": "Tipo de campo desconocido", - "preview_panel.update_widgets": "[PANEL DE ENTRADA] ACTUALIZAR WIDGETS (%{self.driver.selected})", - "progression.running_macros.new_entries": "Ejecución de macros en entradas nuevas", - "progression.running_macros.one_new_entry": "Ejecución de macros configurados en 1/%{len(new_ids)} entradas nuevas", - "progression.running_macros.several_new_entry": "Ejecución de macros configurados en %{x + 1}/%{len(new_ids)} entradas nuevas", - "relink_unlinked.attempt_relink": "Intentando volver a vincular %{x[0]+1}/%{len(self.lib.missing_files)} Entradas, %{self.fixed} Reenlazado correctamente", - "relink_unlinked.title": "Volver a vincular las entradas", - "splash.open_library": "Abriendo la biblioteca", - "status.backup_success": "Copia de seguridad de la biblioteca guardada en:", - "status.enumerate_query": "Consulta:%{query}, Cuadro: %{i}, Longitud: %{len(f)}", - "status.number_results_found": "%{len(all_items)} Resultados encontrados para \"%{query}\" (%{format_timespan(end_time - start_time)})", - "status.results_found": "Resultados", - "status.save_success": "¡Biblioteca guardada y cerrada!", - "status.search_library_query": "Buscando en la biblioteca", + "preview.no_selection": "No hay elementos seleccionados", + "status.library_backup_success": "Copia de seguridad de la biblioteca guardada en:", + "status.library_save_success": "¡Biblioteca guardada y cerrada!", + "status.library_search_query": "Buscando en la biblioteca", + "status.results": "Resultados", "tag.add": "Añadir etiqueta", - "tag.add_search": "Añadir a la búsqueda", - "tag.library": "Etiquetas de la biblioteca", + "tag.add_to_search": "Añadir a la búsqueda", + "tag.aliases": "Alias", + "tag.color": "Color", + "tag.name": "Nombre", "tag.new": "Nueva etiqueta", + "tag.parent_tags": "Etiquetas principales", + "tag.parent_tags.add": "Añadir etiquetas principales", "tag.search_for_tag": "Buscar por etiqueta", - "text_line_edit.unknown_event_type": "tipo de suceso desconocido: %{event}", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.shorthand": "Taquigrafía", + "tag_manager.title": "Etiquetas de la biblioteca" } diff --git a/tagstudio/resources/translations/fil.json b/tagstudio/resources/translations/fil.json index 4f129b95..1ca5e76e 100644 --- a/tagstudio/resources/translations/fil.json +++ b/tagstudio/resources/translations/fil.json @@ -1,110 +1,64 @@ { - "add_field.add": "Magdagdag ng Field", - "build_tags.add_parent_tags": "Magdagdag ng Mga Parent Tag", - "build_tags.parent_tags": "Mga Parent Tag", - "delete_unlinked.confirm": "Sigurado ka ba gusto mong burahin ang (mga) sumusunod na %{len(self.lib.missing_files)} entry?", - "delete_unlinked.delete_entries": "Binubura ang Mga Entry", - "delete_unlinked.delete_unlinked": "Burahin ang Mga Hindi Naka-link na Entry", - "delete_unlinked.deleting_number_entries": "Binubura ang %{x[0]+1}/{len(self.lib.missing_files)} (mga) Naka-unlink na Entry", - "dialog.open_create_library": "Magbukas/Gumawa ng Library", - "dialog.refresh_directories": "Nire-refresh ang Mga Direktoryo", - "dialog.save_library": "I-save ang Library", - "dialog.scan_directories": "Sina-scan ang Mga Direktoryo para sa Mga Bagong File...\nNaghahanda...", - "dialog.scan_directories.new_files": "Sina-scan ang Mga Direktoryo para sa Mga Bagong File...\n%{x + 1} %{\"mga\" if x + 1 != 1 else \"\"} File na nahanap, %{len(self.lib.files_not_in_library)} Mga Bagong File na Nahanap", - "file_extension.add_extension": "Magdagdag ng Extension", - "file_extension.list_mode": "Mode ng Pag-lista:", - "file_opener.command_not_found": "Hindi mahanap ang %{command_name} sa system PATH", - "file_opener.not_found": "Hindi nahanap ang file:", - "file_opener.open_file": "Binubuksan ang file:}", - "fix_dupes.fix_dupes": "Ayusin ang Mga Duplicate na File", - "fix_dupes.load_file": "Mag-load ng DupeGuru File", - "fix_dupes.mirror_description": "Mirror the Entry data across each duplicate match set, combining all data while not removing or duplicating fields. This operation will not delete any files or data.", - "fix_dupes.mirror_entries": "Mga Entry ng Salamin", - "fix_dupes.no_file_selected": "Walang DupeGuru na File na Napili", + "entries.duplicate.merge.label": "Sinasama ang mga Duplicate na Entry", + "entries.mirror": "Salamin", + "entries.tags": "Mga Tag", + "entries.unlinked.delete": "Burahin ang Mga Hindi Naka-link na Entry", + "entries.unlinked.delete.confirm": "Sigurado ka ba gusto mong burahin ang (mga) sumusunod na %{len(self.lib.missing_files)} entry?", + "entries.unlinked.delete.deleting": "Binubura ang Mga Entry", + "entries.unlinked.delete.deleting_count": "Binubura ang %{x[0]+1}/{len(self.lib.missing_files)} (mga) Naka-unlink na Entry", + "entries.unlinked.refresh_all": "I-refresh Lahat", + "file.date_created": "Petsa na Ginawa", + "file.date_modified": "Binago Noong", + "file.dimensions": "Laki", + "file.duplicates.dupeguru.load_file": "Mag-load ng DupeGuru File", + "file.duplicates.dupeguru.no_file": "Walang DupeGuru na File na Napili", + "file.duplicates.fix": "Ayusin ang Mga Duplicate na File", + "file.duplicates.mirror.description": "Mirror the Entry data across each duplicate match set, combining all data while not removing or duplicating fields. This operation will not delete any files or data.", + "file.duplicates.mirror_entries": "Mga Entry ng Salamin", + "file.not_found": "Hindi nahanap ang file:", + "file.open_file": "Buksan ang file", + "file.open_location.generic": "Buksan ang file sa explorer", + "folders_to_tags.open_all": "Buksan Lahat", "generic.add": "Magdagdag", - "generic.aliases": "Mga Alyas", "generic.apply": "I-apply", "generic.cancel": "Kanselahin", - "generic.close_all": "Isara Lahat", - "generic.color": "Kulay", "generic.delete": "Burahin", "generic.done": "Tapos na", - "generic.exclude": "Huwag isama", - "generic.file_extension": "Mga File Extension", - "generic.include": "Isama", - "generic.mirror": "Salamin", - "generic.name": "Pangalan", - "generic.open_all": "Buksan Lahat", - "generic.open_file": "Buksan ang file", - "generic.open_file_explorer": "Buksan ang file sa explorer", - "generic.refresh_all": "I-refresh Lahat", - "generic.remove_field": "Tanggalin ang Field", - "generic.search_tags": "Maghanap ng Mga Tag", - "generic.shorthand": "Shorthand", - "home.base_title": "TagStudio Alpha", - "home.include_all_tags": "And (sinasama ang Lahat ng Mga Tag)", - "home.include_any_tag": "Or (Sinasama ang Anumang Tag)", - "home.main_window": "Main na Window", + "generic.recent_libraries": "Mga Kamakailang Library", "home.search": "Maghanap", "home.search_entries": "Mga Entry sa Paghahanap", + "home.search_tags": "Maghanap ng Mga Tag", "home.thumbnail_size": "Laki ng Thumbnail", - "library.Artist": "Artista", - "library.anthology": "Antolohiya", - "library.archived": "Petsa na Na-archve", - "library.author": "Awtor", - "library.book": "Aklat", - "library.collation": "Collation", - "library.comic": "Komik", - "library.comments": "Mga Komento", - "library.composer": "Kompositor", - "library.content_tags": "Mga Tag ng Content", - "library.date": "Petsa", - "library.date_created": "Petsa na Ginawa", - "library.date_modified": "Binago Noong", - "library.date_published": "Petsa na Inilabas", - "library.date_released": "Petsa na na-release", - "library.date_taken": "Kinuha Noong", - "library.date_uploaded": "Petsa na Na-upload", - "library.description": "Paglalarawan", - "library.favorite": "Paborito", - "library.guest_artist": "Bisitang Artista", - "library.magazine": "Magasin", - "library.manga": "Manga", - "library.meta_tags": "Mga Meta Tag", - "library.notes": "Mga tala", - "library.publisher": "Tagapaglathala", - "library.series": "Serye", - "library.source": "Pinagmulan", - "library.tags": "Mga Tag", - "library.title": "Paksa", - "library.url": "URL", - "library.volume": "Volume", + "ignore_list.add_extension": "Magdagdag ng Extension", + "ignore_list.mode.exclude": "Huwag isama", + "ignore_list.mode.include": "Isama", + "ignore_list.mode.label": "Mode ng Pag-lista:", + "ignore_list.title": "Mga File Extension", + "library.field.add": "Magdagdag ng Field", + "library.field.remove": "Tanggalin ang Field", + "library.name": "Library", + "library.refresh.scanning": "Sina-scan ang Mga Direktoryo para sa Mga Bagong File...\n%{x + 1} %{\"mga\" if x + 1 != 1 else \"\"} File na nahanap, %{len(self.lib.files_not_in_library)} Mga Bagong File na Nahanap", + "library.refresh.scanning_preparing": "Sina-scan ang Mga Direktoryo para sa Mga Bagong File...\nNaghahanda...", + "library.refresh.title": "Nire-refresh ang Mga Direktoryo", + "macros.running.dialog.new_entries": "Tinatakbo ang Mga Naka-configure na Macro sa %{x + 1}/%{len(new_ids)} Mga Bagong Entry", + "macros.running.dialog.title": "Tumatakbo ng Mga Macro sa Mga Bagong Entry", "menu.edit": "I-edit", "menu.file": "File", "menu.help": "Tulong", "menu.macros": "Mga macro", "menu.tools": "Mga tool", "menu.window": "Window", - "merge.merge_dupe_entries": "Sinasama ang mga Duplicate na Entry", - "merge.window_title": "Sinasama ang mga Duplicate na Entry", - "open_library.library_creation_return_code": "Return Code ng Paggawa ng Library:", - "open_library.no_tagstudio_library_found": "Walang umiiral na TagStudio library na nahanap sa '%{path}'. Gumagawa ng isa.", - "open_library.title": "Library", - "preview.dimensions": "Laki", - "preview.recent": "Mga Kamakailang Library", - "progression.running_macros.new_entries": "Tumatakbo ng Mga Macro sa Mga Bagong Entry", - "progression.running_macros.one_new_entry": "Tinatakbo ang Mga Naka-configure na Macro sa 1/%{len(new_ids)} Mga Bagong Entry", - "progression.running_macros.several_new_entry": "Tinatakbo ang Mga Naka-configure na Macro sa %{x + 1}/%{len(new_ids)} Mga Bagong Entry", - "splash.open_library": "Binubuksan ang Library", - "status.backup_success": "Na-save ang Library Backup sa:", - "status.enumerate_query": "Query:%{query}, Frame: %{i}, Haba: %{len(f)}", - "status.number_results_found": "%{len(all_items)} Nakahanap ng Mga Resulta para sa \"%{query}\" (%{format_timespan(end_time - start_time)})", - "status.results_found": "Mga Resulta", - "status.save_success": "Sinave at Sinara ang Library!", - "status.search_library_query": "Hinahanap ang library para sa", + "status.library_backup_success": "Na-save ang Library Backup sa:", + "status.library_save_success": "Sinave at Sinara ang Library!", + "status.library_search_query": "Hinahanap ang library para sa", + "status.results": "Mga Resulta", "tag.add": "Magdagdag ng Tag", - "tag.library": "Mga Tag ng Library", + "tag.aliases": "Mga Alyas", + "tag.color": "Kulay", + "tag.name": "Pangalan", "tag.new": "Bagong Tag", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.parent_tags": "Mga Parent Tag", + "tag.parent_tags.add": "Magdagdag ng Mga Parent Tag", + "tag.shorthand": "Shorthand", + "tag_manager.title": "Mga Tag ng Library" } diff --git a/tagstudio/resources/translations/fr.json b/tagstudio/resources/translations/fr.json index 09b68742..4c878ea3 100644 --- a/tagstudio/resources/translations/fr.json +++ b/tagstudio/resources/translations/fr.json @@ -1,144 +1,92 @@ { - "add_field.add": "Ajouter un Champ", - "build_tags.add_parent_tags": "Ajouter des Labels Parents", - "build_tags.parent_tags": "Labels Parent", - "delete_unlinked.confirm": "Êtes-vous sûr de vouloir supprimer les %{len(self.lib.missing_files)} entrées suivantes  ?", - "delete_unlinked.delete_entries": "Suppression des Entrées", - "delete_unlinked.delete_unlinked": "Supprimer les Entrées non Liées", - "delete_unlinked.deleting_number_entries": "Suppression des Entrées non Liées %{x[0]+1}/{len(self.lib.missing_files)}", - "dialog.open_create_library": "Ouvrir/Créer une Bibliothèque", - "dialog.refresh_directories": "Rafraîchissement des Dossiers", - "dialog.save_library": "Sauvegarder la Bibliothèque", - "dialog.scan_directories": "Recherche de Nouveaux Fichiers dans les Dossiers...\nPréparation...", - "dialog.scan_directories.new_files": "Recherche de Nouveaux Fichiers dans les Dossiers...\n%{x + 1} Fichiers%{\"s\" if x + 1 != 1 else \"\"} Recherchés, %{len(self.lib.files_not_in_library)} Nouveaux Fichiers Trouvés", - "file_extension.add_extension": "Ajouter une Extension", - "file_extension.list_mode": "Mode Liste :", - "file_opener.command_not_found": "Impossible de trouver %{command_name} dans le CHEMIN système", - "file_opener.not_found": "Fichier non trouvé:", - "file_opener.open_file": "Ouverture du Fichier:}", - "fix_dupes.advice_label": "Après réplication, vous êtes libre d'utiliser DupeGuru pour supprimer des fichiers non désirés. Ensuite, utilisez la fonctionnalité \"Réparation des Entrées non Liées\" de TagStudio dans le menu Outils pour supprimer les Entrées non liées.", - "fix_dupes.fix_dupes": "Réparer les Fichiers en Double", - "fix_dupes.load_file": "Charger un Fichier DupeGuru", - "fix_dupes.mirror_description": "Repliquer les données d'entrée dans chaque jeu de correspondances en double, en combinant toutes les données sans supprimer ni dupliquer de champs. Cette opération ne supprime aucun fichier ni aucune donnée.", - "fix_dupes.mirror_entries": "Répliquer les Entrées", - "fix_dupes.name_filter": "Fichiers DupeGuru (*.dupeguru)", - "fix_dupes.no_file_match": "Dupliquer les Correspondances de Fichier : N/A", - "fix_dupes.no_file_selected": "Aucun Fichier DupeGuru Sélectionné", - "fix_dupes.number_file_match": "Dupliquer les Correspondances de Fichier : %{count}", - "fix_dupes.open_result_files": "Ouvrire les Fichiers de Résultats de DupeGuru", - "fix_unlinked.delete_unlinked": "Supprimer les Entrées non Liées", - "fix_unlinked.description": "Chaque entrée dans la bibliothèque est liée à un fichier dans l'un de vos dossiers. Si un fichier lié à une entrée est déplacé ou supprimé en dehors de TagStudio, il est alors considéré non lié. Les entrées non liées peuvent être automatiquement reliées via la recherche dans vos dossiers, reliées manuellement par l'utilisateur, ou supprimées si désiré.", - "fix_unlinked.duplicate_description": "Les entrées dupliquées sont définies comme des entrées multiple qui pointent vers le même fichier sur le disque. Les fusionner va combiner les labels et metadatas de tous les duplicatas vers une seule entrée consolidée. Elles ne doivent pas être confondues avec les \"fichiers en doublon\", qui sont des doublons de vos fichiers en dehors de TagStudio.", - "fix_unlinked.fix_unlinked": "Réparation des Entrées non Liées", - "fix_unlinked.manual_relink": "Reliage Manuel", - "fix_unlinked.merge_dupes": "Fusionner les Entrées en Doublon", - "fix_unlinked.refresh_dupes": "Rafraichir les Entrées en Doublon", - "fix_unlinked.scan_library.label": "Balayage de la Bibliothèque pour trouver des Entrées non Liées...", - "fix_unlinked.scan_library.title": "Balayage de la Bibliothèque", - "fix_unlinked.search_and_relink": "Rechercher && Relier", + "entries.duplicate.merge.label": "Fusionner les duplicatas", + "entries.duplicate.refresh": "Rafraichir les Entrées en Doublon", + "entries.duplicates.description": "Les entrées dupliquées sont définies comme des entrées multiple qui pointent vers le même fichier sur le disque. Les fusionner va combiner les labels et metadatas de tous les duplicatas vers une seule entrée consolidée. Elles ne doivent pas être confondues avec les \"fichiers en doublon\", qui sont des doublons de vos fichiers en dehors de TagStudio.", + "entries.mirror": "Refléter", + "entries.mirror.confirmation": "Êtes-vous sûr de vouloir répliquer les %{len(self.lib.dupe_files)} Entrées suivantes ?", + "entries.mirror.label": "Réplication de 1/%{count} Entrées...", + "entries.mirror.title": "Réplication des Entrées", + "entries.tags": "Labels", + "entries.unlinked.delete": "Supprimer les Entrées non Liées", + "entries.unlinked.delete.confirm": "Êtes-vous sûr de vouloir supprimer les %{len(self.lib.missing_files)} entrées suivantes  ?", + "entries.unlinked.delete.deleting": "Suppression des Entrées", + "entries.unlinked.delete.deleting_count": "Suppression des Entrées non Liées %{x[0]+1}/{len(self.lib.missing_files)}", + "entries.unlinked.description": "Chaque entrée dans la bibliothèque est liée à un fichier dans l'un de vos dossiers. Si un fichier lié à une entrée est déplacé ou supprimé en dehors de TagStudio, il est alors considéré non lié. Les entrées non liées peuvent être automatiquement reliées via la recherche dans vos dossiers, reliées manuellement par l'utilisateur, ou supprimées si désiré.", + "entries.unlinked.refresh_all": "Tout Rafraîchir", + "entries.unlinked.relink.attempting": "Tentative de Reliage de %{x[0]+1}/%{len(self.lib.missing_files)} Entrées, %{self.fixed} ont été Reliées avec Succès", + "entries.unlinked.relink.manual": "Reliage Manuel", + "entries.unlinked.relink.title": "Reliage des Entrées", + "entries.unlinked.scanning": "Balayage de la Bibliothèque pour trouver des Entrées non Liées...", + "entries.unlinked.search_and_relink": "Rechercher && Relier", + "entries.unlinked.title": "Réparation des Entrées non Liées", + "file.date_created": "Date de Création", + "file.date_modified": "Date de Modification", + "file.dimensions": "Dimensions", + "file.duplicates.dupeguru.advice": "Après réplication, vous êtes libre d'utiliser DupeGuru pour supprimer des fichiers non désirés. Ensuite, utilisez la fonctionnalité \"Réparation des Entrées non Liées\" de TagStudio dans le menu Outils pour supprimer les Entrées non liées.", + "file.duplicates.dupeguru.file_extension": "Fichiers DupeGuru (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "Charger un Fichier DupeGuru", + "file.duplicates.dupeguru.no_file": "Aucun Fichier DupeGuru Sélectionné", + "file.duplicates.dupeguru.open_file": "Ouvrire les Fichiers de Résultats de DupeGuru", + "file.duplicates.fix": "Réparer les Fichiers en Double", + "file.duplicates.matches": "Dupliquer les Correspondances de Fichier : %{count}", + "file.duplicates.matches_uninitialized": "Dupliquer les Correspondances de Fichier : N/A", + "file.duplicates.mirror.description": "Repliquer les données d'entrée dans chaque jeu de correspondances en double, en combinant toutes les données sans supprimer ni dupliquer de champs. Cette opération ne supprime aucun fichier ni aucune donnée.", + "file.duplicates.mirror_entries": "Répliquer les Entrées", + "file.not_found": "Fichier non trouvé:", + "file.open_file": "Ouvrir un Fichier", + "file.open_location.generic": "Ouvrir un Fichier dans l'Explorateur", + "folders_to_tags.converting": "Conversion des dossiers en Labels", "folders_to_tags.description": "Créé des labels basés sur votre arborescence de dossier et les applique à vos entrées.\nLa structure ci-dessous affiche tous les labels qui seront créés et à quelles entrées ils seront appliqués.", - "folders_to_tags.folders_to_tags": "Conversion des dossiers en Labels", + "folders_to_tags.open_all": "Tout Ouvrir", "folders_to_tags.title": "Créer un Label à partir d'un Dossier", "generic.add": "Ajouter", - "generic.aliases": "Alias", "generic.apply": "Appliquer", "generic.cancel": "Annuler", - "generic.close_all": "Tout Fermer", - "generic.color": "Couleur", "generic.delete": "Supprimer", "generic.done": "Terminé", - "generic.exclude": "Exclure", - "generic.file_extension": "Extensions de Fichiers", - "generic.include": "Inclure", - "generic.mirror": "Refléter", - "generic.name": "Nom", - "generic.open_all": "Tout Ouvrir", - "generic.open_file": "Ouvrir un Fichier", - "generic.open_file_explorer": "Ouvrir un Fichier dans l'Explorateur", - "generic.refresh_all": "Tout Rafraîchir", - "generic.remove_field": "Supprimer un Champ", - "generic.search_tags": "Recherche de Labels", - "generic.shorthand": "Abrégé", - "home.base_title": "TagStudio Alpha", - "home.include_all_tags": "Et (Inclus tous les Labels)", - "home.include_any_tag": "Ou (Inclus N'importe quel Label)", - "home.main_window": "Fenêtre Principale", + "generic.edit": "Éditer", + "generic.recent_libraries": "Bibliothèques Récentes", "home.search": "Rechercher", "home.search_entries": "Recherche", + "home.search_tags": "Recherche de Labels", "home.thumbnail_size": "Taille de la miniature", - "landing.open_button": "Ouvrir/Créer une Bibliothèque %{open_shortcut_text}", - "library.Artist": "Artiste", - "library.anthology": "Anthologie", - "library.archived": "Date d'Archivage", - "library.author": "Auteur", - "library.book": "Livre", - "library.collation": "Collage", - "library.comic": "Bande Dessinée", - "library.comments": "Commentaires", - "library.composer": "Compositeur", - "library.content_tags": "Labels de Contenu", - "library.date": "Date", - "library.date_created": "Date de Création", - "library.date_modified": "Date de Modification", - "library.date_published": "Date de Publication", - "library.date_released": "Date de Sortie", - "library.date_taken": "Date de Capture", - "library.date_uploaded": "Date de Mise en Ligne", - "library.description": "Description", - "library.favorite": "Favori", - "library.guest_artist": "Artiste Invité", - "library.magazine": "Magazine", - "library.manga": "Manga", - "library.meta_tags": "Label Meta", - "library.notes": "Notes", - "library.publisher": "Éditeur", - "library.series": "Séries", - "library.source": "Source", - "library.tags": "Labels", - "library.title": "Titre", - "library.url": "URL", - "library.volume": "Volume", + "ignore_list.add_extension": "Ajouter une Extension", + "ignore_list.mode.exclude": "Exclure", + "ignore_list.mode.include": "Inclure", + "ignore_list.mode.label": "Mode Liste :", + "ignore_list.title": "Extensions de Fichiers", + "library.field.add": "Ajouter un Champ", + "library.field.confirm_remove": "Êtes-vous sûr de vouloir supprimer le champ \"%{self.lib.get_field_attr(field, \"name\")}\" ?", + "library.field.mixed_data": "Données Mélangées", + "library.field.remove": "Supprimer un Champ", + "library.missing": "Emplacement Manquant", + "library.name": "Bibliothèque", + "library.refresh.scanning": "Recherche de Nouveaux Fichiers dans les Dossiers...\n%{x + 1} Fichiers%{\"s\" if x + 1 != 1 else \"\"} Recherchés, %{len(self.lib.files_not_in_library)} Nouveaux Fichiers Trouvés", + "library.refresh.scanning_preparing": "Recherche de Nouveaux Fichiers dans les Dossiers...\nPréparation...", + "library.refresh.title": "Rafraîchissement des Dossiers", + "library.scan_library.title": "Balayage de la Bibliothèque", + "macros.running.dialog.new_entries": "Éxectution des Macros Configurées sur %{x + 1}/%{len(new_ids)} Nouvelles Entrées", + "macros.running.dialog.title": "Exécution des Macros sur les Nouvelles Entrées", "menu.edit": "Édition", "menu.file": "Fichier", "menu.help": "Aide", "menu.macros": "Macros", "menu.tools": "Outils", "menu.window": "Fenêtre", - "merge.merge_dupe_entries": "Fusionner les duplicatas", - "merge.window_title": "Fusionner les duplicatas", - "mirror_entities.are_you_sure": "Êtes-vous sûr de vouloir répliquer les %{len(self.lib.dupe_files)} Entrées suivantes ?", - "mirror_entities.label": "Réplication de 1/%{count} Entrées...", - "mirror_entities.title": "Réplication des Entrées", - "open_library.library_creation_return_code": "Code de Retour de la Création de bibliothèque:", - "open_library.no_tagstudio_library_found": "Aucune bibliothèque TagStudio trouvé au chemin '%{path}'. Création d'une bibliothèque.", - "open_library.title": "Bibliothèque", - "preview.dimensions": "Dimensions", - "preview.recent": "Bibliothèques Récentes", - "preview_panel.confirm_remove": "Êtes-vous sûr de vouloir supprimer le champ \"%{self.lib.get_field_attr(field, \"name\")}\" ?", - "preview_panel.edit_name": "Éditer", - "preview_panel.missing_location": "Emplacement Manquant", - "preview_panel.mixed_data": "Données Mélangées", - "preview_panel.no_items_selected": "Pas d'Objet Selectionné", - "preview_panel.unknown_field_type": "Type de Champ Inconnu", - "preview_panel.update_widgets": "[PANEL D'ENTRÉE] MISE À JOUR DES WIDGETS (%{self.driver.selected})", - "progression.running_macros.new_entries": "Exécution des Macros sur les Nouvelles Entrées", - "progression.running_macros.one_new_entry": "Éxecution des Macros Configurées sur 1/%{len(new_ids)} Nouvelles Entrées", - "progression.running_macros.several_new_entry": "Éxectution des Macros Configurées sur %{x + 1}/%{len(new_ids)} Nouvelles Entrées", - "relink_unlinked.attempt_relink": "Tentative de Reliage de %{x[0]+1}/%{len(self.lib.missing_files)} Entrées, %{self.fixed} ont été Reliées avec Succès", - "relink_unlinked.title": "Reliage des Entrées", - "splash.open_library": "Ouverture de la Bilbliothèque", - "status.backup_success": "Bibliothèque sauvegardée au chemin  :", - "status.enumerate_query": "Requête:%{query}, Image: %{i}, Longueur: %{len(f)}", - "status.number_results_found": "%{len(all_items)} Résultats Trouvés pour \"%{query}\" (%{format_timespan(end_time - start_time)})", - "status.results_found": "Résultats", - "status.save_success": "Bibliothèque Sauvegardée et Fermée !", - "status.search_library_query": "Recherche dans la Bibliothèque pour", + "preview.no_selection": "Pas d'Objet Selectionné", + "status.library_backup_success": "Bibliothèque sauvegardée au chemin  :", + "status.library_save_success": "Bibliothèque Sauvegardée et Fermée !", + "status.library_search_query": "Recherche dans la Bibliothèque pour", + "status.results": "Résultats", "tag.add": "Ajouter un Label", - "tag.add_search": "Ajouter à la Recherche", - "tag.library": "Labels de la Bibliothèque", + "tag.add_to_search": "Ajouter à la Recherche", + "tag.aliases": "Alias", + "tag.color": "Couleur", + "tag.name": "Nom", "tag.new": "Nouveau Label", + "tag.parent_tags": "Labels Parent", + "tag.parent_tags.add": "Ajouter des Labels Parents", "tag.search_for_tag": "Recherche de Label", - "text_line_edit.unknown_event_type": "Type d'évenement inconnu : %{event}", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.shorthand": "Abrégé", + "tag_manager.title": "Labels de la Bibliothèque" } diff --git a/tagstudio/resources/translations/hu.json b/tagstudio/resources/translations/hu.json index 892ab95d..e4a62474 100644 --- a/tagstudio/resources/translations/hu.json +++ b/tagstudio/resources/translations/hu.json @@ -1,144 +1,92 @@ { - "add_field.add": "Új mező", - "build_tags.add_parent_tags": "Új szülőcímke", - "build_tags.parent_tags": "Szülőcímkék", - "delete_unlinked.confirm": "Biztosan törölni akarja az alábbi %{len(self.lib.missing_files)} elemet?", - "delete_unlinked.delete_entries": "Elemek törlése", - "delete_unlinked.delete_unlinked": "Kapcsolat nélküli elemek törlése", - "delete_unlinked.deleting_number_entries": "{len(self.lib.missing_files)}/%{x[0]+1}. kapcsolat nélküli elem törlése", - "dialog.open_create_library": "Könyvtár megnyitása/létrehozása", - "dialog.refresh_directories": "Mappák frissítése", - "dialog.save_library": "Könyvtár mentése", - "dialog.scan_directories": "Új fájlok keresése a mappákban…\nElőkészítés…", - "dialog.scan_directories.new_files": "Új fájlok keresése a mappákban…\n%{x + 1} fájl megvizsgálva; ebből %{len(self.lib.files_not_in_library)} új", - "file_extension.add_extension": "Kiterjesztés hozzáadása", - "file_extension.list_mode": "Listázott elemek módja:", - "file_opener.command_not_found": "A(z) „%{command_name}”-parancs nem szerepel a rendszer PATH-változójában.", - "file_opener.not_found": "Az alábbi fájl nem található:", - "file_opener.open_file": "Fájl megnyitása:", - "fix_dupes.advice_label": "A tükrözés befejezése után a DupeGuruval kitörölheti a nem kívánt fájlokat. Ezt követően, a TagStudio „Kapcsolat nélküli elemek javítása” funkciójával eltávolíthatja az árván maradt elemeket.", - "fix_dupes.fix_dupes": "Egyező fájlok egyesítése", - "fix_dupes.load_file": "DupeGuru fájl betöltése", - "fix_dupes.mirror_description": "Az összes adat átmásolása minden összetartozó fájl között, ezzel kiegészítve a hiányzó címkéket eltávolítás és duplikálás nélkül. Ez a folyamat nem fog adatokat vagy fájlokat törölni.", - "fix_dupes.mirror_entries": "Elemek tükrözése", - "fix_dupes.name_filter": "DupeGuru-fájlok (*.dupeguru)", - "fix_dupes.no_file_match": "Nincsenek egyező fájlok", - "fix_dupes.no_file_selected": "Nincs kiválasztott DupeGuru-fájl.", - "fix_dupes.number_file_match": "%{count} egyező fájl", - "fix_dupes.open_result_files": "DupeGuru-fájl megnyitása", - "fix_unlinked.delete_unlinked": "Kapcsolat nélküli elemek törlése", - "fix_unlinked.description": "A könyvtár minden eleme egy fájllal van összekapcsolva a számítógépen. Ha egy kapcsolt fájl a TagSudión kívül kerül áthelyezésre vagy törésre, akkor ez a kapcsolat megszakad. Ezeket a kapcsolat nélküli elemeket a program megpróbálhatja automatikusan megkeresni, de Ön is kézileg újra összekapcsolhatja vagy törölheti őket.", - "fix_unlinked.duplicate_description": "Ha több elem ugyanazzal a fájllal van összekapcsolva, akkor egyezőnek számítanak. Ha egyesíti őket, akkor egy olyan elem lesz létrehozva, ami az eredeti elemek összes adatát tartalmazza. Ezeket nem szabad összetéveszteni az „egyező fájlokkal”, amelyek a TagStudión kívüli azonos tartalmú fájlok.", - "fix_unlinked.fix_unlinked": "Kapcsolat nélküli elemek javítása", - "fix_unlinked.manual_relink": "Újra összekapcsolás kézileg", - "fix_unlinked.merge_dupes": "Egyező elemek egyesítése", - "fix_unlinked.refresh_dupes": "Egyező elemek frissítése", - "fix_unlinked.scan_library.label": "Kapcsolat nélküli elemek keresése a könyvtárban…", - "fix_unlinked.scan_library.title": "Könyvtár vizsgálata", - "fix_unlinked.search_and_relink": "Keresés és újra összekapcsolás", + "entries.duplicate.merge.label": "Egyező elemek egyesítése", + "entries.duplicate.refresh": "Egyező elemek frissítése", + "entries.duplicates.description": "Ha több elem ugyanazzal a fájllal van összekapcsolva, akkor egyezőnek számítanak. Ha egyesíti őket, akkor egy olyan elem lesz létrehozva, ami az eredeti elemek összes adatát tartalmazza. Ezeket nem szabad összetéveszteni az „egyező fájlokkal”, amelyek a TagStudión kívüli azonos tartalmú fájlok.", + "entries.mirror": "Tükrözés", + "entries.mirror.confirmation": "Biztosan tükrözni akarja az alábbi adatokat %{len(self.lib.dupe_files)} különböző elemre?", + "entries.mirror.label": "%{count}/1 elem tükrözése folyamatban…", + "entries.mirror.title": "Elemek tükrözése", + "entries.tags": "Címkék", + "entries.unlinked.delete": "Kapcsolat nélküli elemek törlése", + "entries.unlinked.delete.confirm": "Biztosan törölni akarja az alábbi %{len(self.lib.missing_files)} elemet?", + "entries.unlinked.delete.deleting": "Elemek törlése", + "entries.unlinked.delete.deleting_count": "{len(self.lib.missing_files)}/%{x[0]+1}. kapcsolat nélküli elem törlése", + "entries.unlinked.description": "A könyvtár minden eleme egy fájllal van összekapcsolva a számítógépen. Ha egy kapcsolt fájl a TagSudión kívül kerül áthelyezésre vagy törésre, akkor ez a kapcsolat megszakad. Ezeket a kapcsolat nélküli elemeket a program megpróbálhatja automatikusan megkeresni, de Ön is kézileg újra összekapcsolhatja vagy törölheti őket.", + "entries.unlinked.refresh_all": "Összes frissítése", + "entries.unlinked.relink.attempting": "%{len(self.lib.missing_files)}/%{x[0]+1} elem újra összekapcsolásának megkísérlése; %{self.fixed} elem sikeresen újra összekapcsolva", + "entries.unlinked.relink.manual": "Újra összekapcsolás kézileg", + "entries.unlinked.relink.title": "Elemek újra összekapcsolása", + "entries.unlinked.scanning": "Kapcsolat nélküli elemek keresése a könyvtárban…", + "entries.unlinked.search_and_relink": "Keresés és újra összekapcsolás", + "entries.unlinked.title": "Kapcsolat nélküli elemek javítása", + "file.date_created": "Létrehozás dátuma", + "file.date_modified": "Módosítás dátuma", + "file.dimensions": "Méret", + "file.duplicates.dupeguru.advice": "A tükrözés befejezése után a DupeGuruval kitörölheti a nem kívánt fájlokat. Ezt követően, a TagStudio „Kapcsolat nélküli elemek javítása” funkciójával eltávolíthatja az árván maradt elemeket.", + "file.duplicates.dupeguru.file_extension": "DupeGuru-fájlok (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "DupeGuru fájl betöltése", + "file.duplicates.dupeguru.no_file": "Nincs kiválasztott DupeGuru-fájl.", + "file.duplicates.dupeguru.open_file": "DupeGuru-fájl megnyitása", + "file.duplicates.fix": "Egyező fájlok egyesítése", + "file.duplicates.matches": "%{count} egyező fájl", + "file.duplicates.matches_uninitialized": "Nincsenek egyező fájlok", + "file.duplicates.mirror.description": "Az összes adat átmásolása minden összetartozó fájl között, ezzel kiegészítve a hiányzó címkéket eltávolítás és duplikálás nélkül. Ez a folyamat nem fog adatokat vagy fájlokat törölni.", + "file.duplicates.mirror_entries": "Elemek tükrözése", + "file.not_found": "Az alábbi fájl nem található:", + "file.open_file": "Fájl megnyitása", + "file.open_location.generic": "Fájl megnyitása Intézőben", + "folders_to_tags.converting": "Mappák címkékké alakítása", "folders_to_tags.description": "Címkék automatikus létrehozása a létező mappastruktúra alapján.\nAz alábbi mappafán megtekintheti a létrehozandó címkéket, és hogy mely elemekre lesznek alkalmazva.", - "folders_to_tags.folders_to_tags": "Mappák címkékké alakítása", + "folders_to_tags.open_all": "Összes megnyitása", "folders_to_tags.title": "Címkék létrehozása mappák alapján", "generic.add": "Hozzáadás", - "generic.aliases": "Áljelek", "generic.apply": "Alkalmaz", "generic.cancel": "Mégse", - "generic.close_all": "Összes bezárása", - "generic.color": "Szín", "generic.delete": "Törlés", "generic.done": "Kész", - "generic.exclude": "Elrejtés", - "generic.file_extension": "Kiterjesztések", - "generic.include": "Mutatás", - "generic.mirror": "Tükrözés", - "generic.name": "Név", - "generic.open_all": "Összes megnyitása", - "generic.open_file": "Fájl megnyitása", - "generic.open_file_explorer": "Fájl megnyitása Intézőben", - "generic.refresh_all": "Összes frissítése", - "generic.remove_field": "Mező eltávolítása", - "generic.search_tags": "Címkék keresése", - "generic.shorthand": "Rövidítés", - "home.base_title": "TagStudio Alfa", - "home.include_all_tags": "És (az összes keresett címkét tartalmazza)", - "home.include_any_tag": "Vagy (valamelyik keresett címkét tartalmazza)", - "home.main_window": "Fő ablak", + "generic.edit": "Szerkesztés", + "generic.recent_libraries": "Legutóbbi könytárak", "home.search": "Keresés", "home.search_entries": "Tételek keresése", + "home.search_tags": "Címkék keresése", "home.thumbnail_size": "Indexkép mérete", - "landing.open_button": "Könyvtár megnyitása/létrehozása %{open_shortcut_text}", - "library.Artist": "Előadó", - "library.anthology": "Gyűjtemény", - "library.archived": "Archiválás dátuma", - "library.author": "Szerző", - "library.book": "Könyv", - "library.collation": "Rendezés", - "library.comic": "Képregény", - "library.comments": "Megjegyzés", - "library.composer": "Zeneszerző", - "library.content_tags": "Tartalomcímkék", - "library.date": "Dátum", - "library.date_created": "Létrehozás dátuma", - "library.date_modified": "Módosítás dátuma", - "library.date_published": "Közzététel dátuma", - "library.date_released": "Kiadás dátuma", - "library.date_taken": "Készítés dátuma", - "library.date_uploaded": "Feltöltés dátuma", - "library.description": "Leírás", - "library.favorite": "Kedvenc", - "library.guest_artist": "Társelőadó", - "library.magazine": "Magazin", - "library.manga": "Manga", - "library.meta_tags": "Metacímkék", - "library.notes": "Jegyzetek", - "library.publisher": "Kiadó", - "library.series": "Sorozat", - "library.source": "Forrás", - "library.tags": "Címkék", - "library.title": "Cím", - "library.url": "Hivatkozás", - "library.volume": "Kötet", + "ignore_list.add_extension": "Kiterjesztés hozzáadása", + "ignore_list.mode.exclude": "Elrejtés", + "ignore_list.mode.include": "Mutatás", + "ignore_list.mode.label": "Listázott elemek módja:", + "ignore_list.title": "Kiterjesztések", + "library.field.add": "Új mező", + "library.field.confirm_remove": "Biztosan el akarja távolítani a(z) „%{self.lib.get_field_attr(field, \"name\")}”-mezőt?", + "library.field.mixed_data": "Kevert adatok", + "library.field.remove": "Mező eltávolítása", + "library.missing": "Hiányzó hely", + "library.name": "Könyvtár", + "library.refresh.scanning": "Új fájlok keresése a mappákban…\n%{x + 1} fájl megvizsgálva; ebből %{len(self.lib.files_not_in_library)} új", + "library.refresh.scanning_preparing": "Új fájlok keresése a mappákban…\nElőkészítés…", + "library.refresh.title": "Mappák frissítése", + "library.scan_library.title": "Könyvtár vizsgálata", + "macros.running.dialog.new_entries": "Korábban beállított makrók futtatása %{len(new_ids)}/%{x + 1} új elemen", + "macros.running.dialog.title": "Makrók futtatása az új elemeken", "menu.edit": "Szerkesztés", "menu.file": "Fájl", "menu.help": "Súgó", "menu.macros": "Makrók", "menu.tools": "Eszközök", "menu.window": "Ablak", - "merge.merge_dupe_entries": "Egyező elemek egyesítése", - "merge.window_title": "Egyező elemek egyesítése", - "mirror_entities.are_you_sure": "Biztosan tükrözni akarja az alábbi adatokat %{len(self.lib.dupe_files)} különböző elemre?", - "mirror_entities.label": "%{count}/1 elem tükrözése folyamatban…", - "mirror_entities.title": "Elemek tükrözése", - "open_library.library_creation_return_code": "A könyvtárlétrehozási folyamat visszatérési kódja:", - "open_library.no_tagstudio_library_found": "A program nem talált létező TagStudio-könyvtárat az alábbi elérési úton: „%{path}”. Ezen a helyen egy új könyvtár lesz létrehozva.", - "open_library.title": "Könyvtár", - "preview.dimensions": "Méret", - "preview.recent": "Legutóbbi könytárak", - "preview_panel.confirm_remove": "Biztosan el akarja távolítani a(z) „%{self.lib.get_field_attr(field, \"name\")}”-mezőt?", - "preview_panel.edit_name": "Szerkesztés", - "preview_panel.missing_location": "Hiányzó hely", - "preview_panel.mixed_data": "Kevert adatok", - "preview_panel.no_items_selected": "Nincs kijelölt elem", - "preview_panel.unknown_field_type": "Ismeretlen mezőtípus", - "preview_panel.update_widgets": "[ENTRY PANEL] UPDATE WIDGETS (%{self.driver.selected})", - "progression.running_macros.new_entries": "Makrók futtatása az új elemeken", - "progression.running_macros.one_new_entry": "Korábban beállított makrók futtatása %{len(new_ids)}/1 új elemen", - "progression.running_macros.several_new_entry": "Korábban beállított makrók futtatása %{len(new_ids)}/%{x + 1} új elemen", - "relink_unlinked.attempt_relink": "%{len(self.lib.missing_files)}/%{x[0]+1} elem újra összekapcsolásának megkísérlése; %{self.fixed} elem sikeresen újra összekapcsolva", - "relink_unlinked.title": "Elemek újra összekapcsolása", - "splash.open_library": "Könyvtár megnyitása", - "status.backup_success": "A biztonsági mentés létrehozása megtörtént az alábbi elérési úton:", - "status.enumerate_query": "Keresési kifejezés: %{query}; %{i}. képokcka; Hossz: %{len(f)}", - "status.number_results_found": "%{len(all_items)} találat az alábbi kifejezésre: „%{query}” (%{format_timespan(end_time - start_time)})", - "status.results_found": "találat", - "status.save_success": "A könyvtár mentése és bezárása sikeresen megtörtént.", - "status.search_library_query": "Az alábbi kifejezés keresése a könyvtárban:", + "preview.no_selection": "Nincs kijelölt elem", + "status.library_backup_success": "A biztonsági mentés létrehozása megtörtént az alábbi elérési úton:", + "status.library_save_success": "A könyvtár mentése és bezárása sikeresen megtörtént.", + "status.library_search_query": "Az alábbi kifejezés keresése a könyvtárban:", + "status.results": "találat", "tag.add": "Címke hozzáadása", - "tag.add_search": "Keresési kifejezés kiegészítése", - "tag.library": "Könyvtárcímkék", + "tag.add_to_search": "Keresési kifejezés kiegészítése", + "tag.aliases": "Áljelek", + "tag.color": "Szín", + "tag.name": "Név", "tag.new": "Új címke", + "tag.parent_tags": "Szülőcímkék", + "tag.parent_tags.add": "Új szülőcímke", "tag.search_for_tag": "Címke keresése", - "text_line_edit.unknown_event_type": "Ismeretlen eseménytípus: %{event}", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.shorthand": "Rövidítés", + "tag_manager.title": "Könyvtárcímkék" } diff --git a/tagstudio/resources/translations/it.json b/tagstudio/resources/translations/it.json index 94642e48..6ce64de2 100644 --- a/tagstudio/resources/translations/it.json +++ b/tagstudio/resources/translations/it.json @@ -1,19 +1,13 @@ { "generic.add": "Aggiungi", "generic.cancel": "Annulla", - "generic.color": "Colore", "generic.delete": "Elimina", - "generic.name": "Nome", - "home.base_title": "TagStudio Alfa", - "home.main_window": "Finestra principale", + "generic.recent_libraries": "Librerias Recenti", "home.search": "Cerca", - "library.Artist": "Artista", - "library.book": "Libro", - "library.description": "Descrizione", - "library.title": "Titolo", "menu.file": "File", "menu.window": "Finestra", - "preview.recent": "Librerias Recenti", "tag.add": "Aggiungi Tag", + "tag.color": "Colore", + "tag.name": "Nome", "tag.new": "Nuovo Tag" } diff --git a/tagstudio/resources/translations/nb_NO.json b/tagstudio/resources/translations/nb_NO.json index 1d7b93ac..294f9f74 100644 --- a/tagstudio/resources/translations/nb_NO.json +++ b/tagstudio/resources/translations/nb_NO.json @@ -1,102 +1,67 @@ { - "add_field.add": "Legg til felt", - "delete_unlinked.confirm": "Slett følgende %{len(self.lib.missing_files)} oppføringer?", - "delete_unlinked.delete_entries": "Sletting av oppføringer", - "delete_unlinked.deleting_number_entries": "Sletter %{x[0]+1}/{len(self.lib.missing_files)} ulenkede oppføringer", - "dialog.open_create_library": "Åpne/opprett bibliotek", - "dialog.save_library": "Lagre bibliotek", - "file_extension.add_extension": "Legg til utvidelse", - "file_extension.list_mode": "Listemodus:", - "file_opener.not_found": "Fant ikke filen:", - "file_opener.open_file": "Åpner fil :}", - "fix_dupes.fix_dupes": "Fiks duplikatfiler", - "fix_dupes.load_file": "Last inn DupeGuru-fil", - "fix_dupes.mirror_entries": "Speil oppføringer", - "fix_dupes.name_filter": "DupeGuru-filer (*.dupeguru)", - "fix_dupes.no_file_selected": "Ingen DupeGuru-fil valgt", - "fix_dupes.open_result_files": "Åpne DupeGuru-resultatfil", - "fix_unlinked.fix_unlinked": "Fiks ulenkede oppføringer", - "fix_unlinked.scan_library.label": "Skanner bibliotek for ulenkede oppføringer …", - "fix_unlinked.scan_library.title": "Skanning av bibliotek", - "folders_to_tags.folders_to_tags": "Konverterer mapper til etiketter", + "entries.duplicate.merge.label": "Fletter duplikatoppføringer …", + "entries.mirror": "Speil", + "entries.tags": "Etiketter", + "entries.unlinked.delete.confirm": "Slett følgende %{len(self.lib.missing_files)} oppføringer?", + "entries.unlinked.delete.deleting": "Sletting av oppføringer", + "entries.unlinked.delete.deleting_count": "Sletter %{x[0]+1}/{len(self.lib.missing_files)} ulenkede oppføringer", + "entries.unlinked.refresh_all": "Gjenoppfrisk alle", + "entries.unlinked.scanning": "Skanner bibliotek for ulenkede oppføringer …", + "entries.unlinked.title": "Fiks ulenkede oppføringer", + "file.date_created": "Dato opprettet", + "file.date_modified": "Endringsdato", + "file.dimensions": "Dimensjoner", + "file.duplicates.dupeguru.file_extension": "DupeGuru-filer (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "Last inn DupeGuru-fil", + "file.duplicates.dupeguru.no_file": "Ingen DupeGuru-fil valgt", + "file.duplicates.dupeguru.open_file": "Åpne DupeGuru-resultatfil", + "file.duplicates.fix": "Fiks duplikatfiler", + "file.duplicates.mirror_entries": "Speil oppføringer", + "file.not_found": "Fant ikke filen:", + "file.open_file": "Åpne fil", + "file.open_location.generic": "Åpne fil i utforsker", + "folders_to_tags.converting": "Konverterer mapper til etiketter", + "folders_to_tags.open_all": "Åpne alle", "folders_to_tags.title": "Opprett etiketter fra mapper", "generic.add": "Legg til", "generic.apply": "Bruk", "generic.cancel": "Avbryt", - "generic.close_all": "Lukk alle", - "generic.color": "Farge", "generic.delete": "Slett", "generic.done": "Ferdig", - "generic.exclude": "Utelat", - "generic.file_extension": "Filutvidelse", - "generic.include": "Inkluder", - "generic.mirror": "Speil", - "generic.name": "Navn", - "generic.open_all": "Åpne alle", - "generic.open_file": "Åpne fil", - "generic.open_file_explorer": "Åpne fil i utforsker", - "generic.refresh_all": "Gjenoppfrisk alle", - "generic.remove_field": "Fjern felt", - "generic.search_tags": "Søk etter etiketter", - "home.main_window": "Hovedvindu", + "generic.edit": "Rediger", + "generic.recent_libraries": "Nylige bibliotek", "home.search": "Søk", "home.search_entries": "Søk etter oppføringer", + "home.search_tags": "Søk etter etiketter", "home.thumbnail_size": "Miniatyrbildestørrelse", - "landing.open_button": "Åpne/opprett bibliotek %{open_shortcut_text}", - "library.Artist": "Artist", - "library.archived": "Arkiveringsdato", - "library.author": "Forfatter", - "library.book": "Bok", - "library.comic": "Tegneserie", - "library.comments": "Kommentarer", - "library.content_tags": "Innholdsetiketter", - "library.date": "Dato", - "library.date_created": "Dato opprettet", - "library.date_modified": "Endringsdato", - "library.date_published": "Publiseringsdato", - "library.date_released": "Slippdato", - "library.date_taken": "Dato knipset", - "library.date_uploaded": "Opplastingsdato", - "library.description": "Beskrivelse", - "library.favorite": "Favoritt", - "library.guest_artist": "Gjesteartist", - "library.magazine": "Magasin", - "library.manga": "Manga", - "library.meta_tags": "Metaetiketter", - "library.notes": "Notater", - "library.publisher": "Utgiver", - "library.series": "Serie", - "library.source": "Kilde", - "library.tags": "Etiketter", - "library.url": "Nettadresse", + "ignore_list.add_extension": "Legg til utvidelse", + "ignore_list.mode.exclude": "Utelat", + "ignore_list.mode.include": "Inkluder", + "ignore_list.mode.label": "Listemodus:", + "ignore_list.title": "Filutvidelse", + "library.field.add": "Legg til felt", + "library.field.confirm_remove": "Fjern dette «%{self.lib.get_field_attr(field, \"name\")}»-feltet?", + "library.field.mixed_data": "Blandet data", + "library.field.remove": "Fjern felt", + "library.missing": "Posisjon mangler", + "library.name": "Bibliotek", + "library.scan_library.title": "Skanning av bibliotek", "menu.edit": "Rediger", "menu.file": "Fil", "menu.help": "Hjelp", "menu.macros": "Makroer", "menu.tools": "Verktøy", "menu.window": "Vindu", - "merge.merge_dupe_entries": "Fletter duplikatoppføringer …", - "merge.window_title": "Fletter duplikatoppføringer …", - "open_library.title": "Bibliotek", - "preview.dimensions": "Dimensjoner", - "preview.recent": "Nylige bibliotek", - "preview_panel.confirm_remove": "Fjern dette «%{self.lib.get_field_attr(field, \"name\")}»-feltet?", - "preview_panel.edit_name": "Rediger", - "preview_panel.missing_location": "Posisjon mangler", - "preview_panel.mixed_data": "Blandet data", - "preview_panel.no_items_selected": "Ingen elementer valgt", - "preview_panel.unknown_field_type": "Ukjent felttype", - "splash.open_library": "Åpner bibliotek …", - "status.backup_success": "Kopi av bibliotek lagret i:", - "status.results_found": "Resultat", - "status.save_success": "Bibliotek lagret og lukket.", - "status.search_library_query": "Søker i biblioteket etter", + "preview.no_selection": "Ingen elementer valgt", + "status.library_backup_success": "Kopi av bibliotek lagret i:", + "status.library_save_success": "Bibliotek lagret og lukket.", + "status.library_search_query": "Søker i biblioteket etter", + "status.results": "Resultat", "tag.add": "Legg til etikett", - "tag.add_search": "Legg til søk", - "tag.library": "Biblioteksetiketter", + "tag.add_to_search": "Legg til søk", + "tag.color": "Farge", + "tag.name": "Navn", "tag.new": "Ny etikett", "tag.search_for_tag": "Søk etter etikett", - "text_line_edit.unknown_event_type": "ukjent begivenhetstype: %{event}", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag_manager.title": "Biblioteksetiketter" } diff --git a/tagstudio/resources/translations/pl.json b/tagstudio/resources/translations/pl.json new file mode 100644 index 00000000..c3ccdc07 --- /dev/null +++ b/tagstudio/resources/translations/pl.json @@ -0,0 +1,90 @@ +{ + "entries.duplicate.merge.label": "Łączenie zduplikowanych wpisów", + "entries.duplicate.refresh": "Odśwież zduplikowane wpisy", + "entries.duplicates.description": "Zduplikowane wpisy są zdefiniowane jako wielokrotne wpisy które wskazują na ten sam plik na dysku. Złączenie ich złączy tagi i metadane ze wszystkich duplikatów w jeden wpis. Nie mylić tego ze \"zduplikowanymi plikami\" które są duplikatami samych plików poza TagStudio.", + "entries.mirror": "Odzwierciedl", + "entries.mirror.confirmation": "Jesteś pewien że chcesz odzwierciedlić następujące %{len(self.lib.dupe_files)} wpisy?", + "entries.mirror.label": "Odzwierciedlanie 1/%{count} wpisów...", + "entries.mirror.title": "Odzwierciedlanie wpisów", + "entries.tags": "Tagi", + "entries.unlinked.delete": "Usuń odłączone wpisy", + "entries.unlinked.delete.confirm": "Jesteś pewien że chesz usunąć następujące %{len(self.lib.missing_files)} wpisy?", + "entries.unlinked.delete.deleting": "Usuwanie wpisów", + "entries.unlinked.delete.deleting_count": "Usuwanie %{x[0]+1}/{len(self.lib.missing_files)} odłączonych wpisów", + "entries.unlinked.description": "Każdy wpis w bibliotece jest połączony z plikiem w jednym z twoich katalogów. Jeśli połączony plik jest przeniesiony poza TagStudio albo usunięty to jest uważany za odłączony. Odłączone wpisy mogą być automatycznie połączone ponownie przez szukanie twoich katalogów, ręczne ponowne łączenie przez użytkownika lub usunięte jeśli zajdzie taka potrzeba.", + "entries.unlinked.refresh_all": "Odśwież wszystko", + "entries.unlinked.relink.attempting": "Próbowanie ponownego łączenia %{x[0]+1}/%{len(self.lib.missing_files)} wpisów, %{self.fixed} poprawnie połączono ponownie", + "entries.unlinked.relink.manual": "Ręczne ponowne łączenie", + "entries.unlinked.relink.title": "Ponowne łączenie wpisów", + "entries.unlinked.scanning": "Skanowanie biblioteki dla odłączonych wpisów...", + "entries.unlinked.title": "Napraw odłączone wpisy", + "file.date_created": "Data utworzenia", + "file.date_modified": "Data modyfikacji", + "file.dimensions": "Wymiary", + "file.duplicates.dupeguru.advice": "Po odzwierciedlaniu możesz użyć DupeGuru żeby usunąć niechciane pliki. Później użyj funkcji TagStudio \"Napraw odłączone wpisy\" w menu narzędzi w celu usunięcia odłączonych wpisów.", + "file.duplicates.dupeguru.file_extension": "Pliki DupeGuru (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "Wczytaj plik DupeGuru", + "file.duplicates.dupeguru.no_file": "Nie wybrano pliku DupeGuru", + "file.duplicates.dupeguru.open_file": "Otwórz plik wyników DupeGuru", + "file.duplicates.fix": "Napraw zduplikowane pliki", + "file.duplicates.matches": "Dopasowania zduplikowanych plików: %{count}", + "file.duplicates.matches_uninitialized": "Dopasowania zduplikowanych plików: Brak", + "file.duplicates.mirror.description": "Odzwierciedla dane wpisu w każdym zduplikowanym zestawie, łącząc wszystkie dane nie usuwając i nie duplikując pól. Ta operacja nie usunie żadnych plików ani danych.", + "file.duplicates.mirror_entries": "Odzwierciedl wpisy", + "file.not_found": "Nie znaleziono pliku:", + "file.open_file": "Otwórz plik", + "file.open_location.generic": "Otwórz plik w przeglądarce plików", + "folders_to_tags.converting": "Konwertowanie folderów na tagi", + "folders_to_tags.open_all": "Otwórz wszystkie", + "folders_to_tags.title": "Stwórz tagi z folderów", + "generic.add": "Dodaj", + "generic.apply": "Zastosuj", + "generic.cancel": "Anuluj", + "generic.delete": "Usuń", + "generic.done": "Zrobione", + "generic.edit": "Edytuj", + "generic.recent_libraries": "Ostatnie biblioteki", + "home.search": "Szukaj", + "home.search_entries": "Przeszukaj wpisy", + "home.search_tags": "Przeszukaj tagi", + "home.thumbnail_size": "Rozmiar miniaturek", + "ignore_list.add_extension": "Dodaj rozszerzenie", + "ignore_list.mode.exclude": "Wyklucz", + "ignore_list.mode.include": "Uwzględnij", + "ignore_list.mode.label": "Tryb listy:", + "ignore_list.title": "Rozszerzenia pliku", + "library.field.add": "Dodaj pole", + "library.field.confirm_remove": "Jesteś pewien że chcesz usunąć pole \"%{self.lib.get_field_attr(field, \"name\")}\" ?", + "library.field.mixed_data": "Mieszane dane", + "library.field.remove": "Usuń pole", + "library.missing": "Brak lokalizacji", + "library.name": "Biblioteka", + "library.refresh.scanning": "Skanowanie katalogów w celu znalezienia nowych plików...\n%{x + 1} File%{\"s\" if x + 1 != 1 else \"\"} Przeszukano, Znaleziono %{len(self.lib.files_not_in_library)} nowych plików", + "library.refresh.scanning_preparing": "Skanowanie katalogów w poszukiwaniu nowych plików\nPrzygotowywanie...", + "library.refresh.title": "Odświeżanie katalogów", + "library.scan_library.title": "Skanowanie biblioteki", + "macros.running.dialog.new_entries": "Stosowanie skonfigurowanych makr na 1/%{len(new_ids)} nowych wpisach", + "macros.running.dialog.title": "Stosowanie makr na nowych wpisach", + "menu.edit": "Edytuj", + "menu.file": "Plik", + "menu.help": "Pomoc", + "menu.macros": "Makra", + "menu.tools": "Narzędzia", + "menu.window": "Okno", + "preview.no_selection": "Nie wybrano żadnych pozycji", + "status.library_backup_success": "Kopia zapasowa biblioteki zapisana w:", + "status.library_save_success": "Biblioteka zapisana i zamknięta!", + "status.library_search_query": "Przeszukiwanie biblioteki dla", + "status.results": "Wyniki", + "tag.add": "Dodaj tag", + "tag.add_to_search": "Dodaj do wyszukiwania", + "tag.aliases": "Aliasy", + "tag.color": "Kolor", + "tag.name": "Nazwa", + "tag.new": "Nowy tag", + "tag.parent_tags": "Tagi nadrzędne", + "tag.parent_tags.add": "Dodaj tagi nadrzędne", + "tag.search_for_tag": "Szukaj dla tagu", + "tag.shorthand": "Skrót", + "tag_manager.title": "Biblioteka tagów" +} diff --git a/tagstudio/resources/translations/pt_BR.json b/tagstudio/resources/translations/pt_BR.json index 82482bc9..4055f4a9 100644 --- a/tagstudio/resources/translations/pt_BR.json +++ b/tagstudio/resources/translations/pt_BR.json @@ -1,144 +1,92 @@ { - "add_field.add": "Adicionar Campo", - "build_tags.add_parent_tags": "Adicionar Rótulo Pai", - "build_tags.parent_tags": "Rótulos Pai", - "delete_unlinked.confirm": "Tem certeza que deseja deletar as seguintes %{len(self.lib.missing_files)} entradas?", - "delete_unlinked.delete_entries": "Deletando Entradas", - "delete_unlinked.delete_unlinked": "Deletar Entradas Não Linkada", - "delete_unlinked.deleting_number_entries": "Deletando %{x[0]+1}/{len(self.lib.missing_files)} Entradas Não Linkadas", - "dialog.open_create_library": "Abrir/Criar Biblioteca", - "dialog.refresh_directories": "Atualizando Diretórios", - "dialog.save_library": "Salvar Biblioteca", - "dialog.scan_directories": "Escaneando Diretórios por Novos Arquivos...\nPreparando...", - "dialog.scan_directories.new_files": "Escaneando Diretórios por Novos Arquivos...\n%{x + 1} Arquivo%{\"s\" if x + 1 != 1 else \"\"} Pesquisado%{\"s\" if x + 1 != 1 else \"\"}, %{len(self.lib.files_not_in_library)} Novo(s) Arquivo(s) Encontrado(s)", - "file_extension.add_extension": "Adicionar Extensão", - "file_extension.list_mode": "Modo de Lista:", - "file_opener.command_not_found": "Não foi possível encontrar %{command_name} na PATH do sistema", - "file_opener.not_found": "Arquivo não encontrado:", - "file_opener.open_file": "Abrindo Arquivo:", - "fix_dupes.advice_label": "Após espelhagem, você estará livre para usar DupeGuru para deletar arquivos indesejados. Após, use a função \"Consertar Entradas Não Linkadas\" do TagStudio no menu de Ferramentas para deletar entradas não linkadas.", - "fix_dupes.fix_dupes": "Corrigir Arquivos Duplicados", - "fix_dupes.load_file": "Carregar Aquivo DupeGuru", - "fix_dupes.mirror_description": "Espelhe os ados de entrada em cada conjunto de correspondência duplicado, combinando todos os dados sem remover ou duplicar campos. Esta operação não excluirá nenhum arquivo ou dado.", - "fix_dupes.mirror_entries": "Entradas Espelhadas", - "fix_dupes.name_filter": "Arquivos DupeGuru (*.dupeguru)", - "fix_dupes.no_file_match": "Correspondências de Arquivos Duplicados: N/A", - "fix_dupes.no_file_selected": "Nenhum Arquivo DupeGuru Selecionado", - "fix_dupes.number_file_match": "Correspondências de Arquivos Duplicados: %{count}", - "fix_dupes.open_result_files": "Abrir Arquivo de Resultados do DupeGuru", - "fix_unlinked.delete_unlinked": "Escluir Entradas Não Linkadas", - "fix_unlinked.description": "Cada entrada na biblioteca está linkada a um arquivo em um dos seus diretórios. Se um arquivo linkado a uma entrada for movido ou deletado fora do TagStudio, ele é então considerado não linkado. Entradas não linkadas podem ser automaticamente re-linkadas por buscas nos seus diretórios, manualmente re-linkadas pelo usuário, ou deletada se for desejada.", - "fix_unlinked.duplicate_description": "Entradas duplicadas são definidas como multiplas entradas que levam ao mesmo arquivo no disco. Mergir essas entradas irá combinar as tags e metadados de todas as duplicatas em uma única entrada consolidada. Não confundir com \"Arquivos Duplicados\" que são duplicatas dos seus arquivos fora do TagStudio.", - "fix_unlinked.fix_unlinked": "Corrigir Entradas Não Linkadas", - "fix_unlinked.manual_relink": "Relink Manual", - "fix_unlinked.merge_dupes": "Mesclar Entradas Duplicadas", - "fix_unlinked.refresh_dupes": "Atualizar Entradas Duplicadas", - "fix_unlinked.scan_library.label": "Escaneando Bibliotecada para Entradas Não Linkadas...", - "fix_unlinked.scan_library.title": "Escaneando Biblioteca", - "fix_unlinked.search_and_relink": "Buscar && Relinkar", + "entries.duplicate.merge.label": "Mesclando Entradas Duplicadas", + "entries.duplicate.refresh": "Atualizar Entradas Duplicadas", + "entries.duplicates.description": "Entradas duplicadas são definidas como multiplas entradas que levam ao mesmo arquivo no disco. Mergir essas entradas irá combinar as tags e metadados de todas as duplicatas em uma única entrada consolidada. Não confundir com \"Arquivos Duplicados\" que são duplicatas dos seus arquivos fora do TagStudio.", + "entries.mirror": "Espelho", + "entries.mirror.confirmation": "Tem certeza que você deseja espelhar os seguintes %{len(self.lib.dupe_files)} entradas?", + "entries.mirror.label": "Espelhando 1/%{count} Entradas...", + "entries.mirror.title": "Espelhando Entradas", + "entries.tags": "Rótulos", + "entries.unlinked.delete": "Deletar Entradas Não Linkada", + "entries.unlinked.delete.confirm": "Tem certeza que deseja deletar as seguintes %{len(self.lib.missing_files)} entradas?", + "entries.unlinked.delete.deleting": "Deletando Entradas", + "entries.unlinked.delete.deleting_count": "Deletando %{x[0]+1}/{len(self.lib.missing_files)} Entradas Não Linkadas", + "entries.unlinked.description": "Cada entrada na biblioteca está linkada a um arquivo em um dos seus diretórios. Se um arquivo linkado a uma entrada for movido ou deletado fora do TagStudio, ele é então considerado não linkado. Entradas não linkadas podem ser automaticamente re-linkadas por buscas nos seus diretórios, manualmente re-linkadas pelo usuário, ou deletada se for desejada.", + "entries.unlinked.refresh_all": "Atualizar_Tudo", + "entries.unlinked.relink.attempting": "Tentando Relinkar %{x[0]+1}/%{len(self.lib.missing_files)} Entradas, %{self.fixed} Relinkadas com Sucesso", + "entries.unlinked.relink.manual": "Relink Manual", + "entries.unlinked.relink.title": "Relinkando Entradas", + "entries.unlinked.scanning": "Escaneando Bibliotecada para Entradas Não Linkadas...", + "entries.unlinked.search_and_relink": "Buscar && Relinkar", + "entries.unlinked.title": "Corrigir Entradas Não Linkadas", + "file.date_created": "Data de Criação", + "file.date_modified": "Dada de Modificação", + "file.dimensions": "Dimensões", + "file.duplicates.dupeguru.advice": "Após espelhagem, você estará livre para usar DupeGuru para deletar arquivos indesejados. Após, use a função \"Consertar Entradas Não Linkadas\" do TagStudio no menu de Ferramentas para deletar entradas não linkadas.", + "file.duplicates.dupeguru.file_extension": "Arquivos DupeGuru (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "Carregar Aquivo DupeGuru", + "file.duplicates.dupeguru.no_file": "Nenhum Arquivo DupeGuru Selecionado", + "file.duplicates.dupeguru.open_file": "Abrir Arquivo de Resultados do DupeGuru", + "file.duplicates.fix": "Corrigir Arquivos Duplicados", + "file.duplicates.matches": "Correspondências de Arquivos Duplicados: %{count}", + "file.duplicates.matches_uninitialized": "Correspondências de Arquivos Duplicados: N/A", + "file.duplicates.mirror.description": "Espelhe os ados de entrada em cada conjunto de correspondência duplicado, combinando todos os dados sem remover ou duplicar campos. Esta operação não excluirá nenhum arquivo ou dado.", + "file.duplicates.mirror_entries": "Entradas Espelhadas", + "file.not_found": "Arquivo não encontrado:", + "file.open_file": "Abrir arquivo", + "file.open_location.generic": "Abrir no explorador de arquivos", + "folders_to_tags.converting": "Convertendo pastas para Rótulos", "folders_to_tags.description": "Cria rótulos baseado na sua estrutura de arquivos e aplica elas nas suas entradas\nA estrutura abaixo mostra todos os rótulos que irão ser criados e a quais entradas eles serão aplicados.", - "folders_to_tags.folders_to_tags": "Convertendo pastas para Rótulos", + "folders_to_tags.open_all": "Abrir Tudo", "folders_to_tags.title": "Criar rótulos a partir das pastas", "generic.add": "Adicionar", - "generic.aliases": "Alias", "generic.apply": "Aplicar", "generic.cancel": "Cancelar", - "generic.close_all": "Fechar Tudo", - "generic.color": "Cor", "generic.delete": "Deletar", "generic.done": "Completo", - "generic.exclude": "Excluir", - "generic.file_extension": "Extensões de Arquivo", - "generic.include": "Incluir", - "generic.mirror": "Espelho", - "generic.name": "Nome", - "generic.open_all": "Abrir Tudo", - "generic.open_file": "Abrir arquivo", - "generic.open_file_explorer": "Abrir no explorador de arquivos", - "generic.refresh_all": "Atualizar_Tudo", - "generic.remove_field": "Remover Campo", - "generic.search_tags": "Buscar Rótulos", - "generic.shorthand": "Taquigrafia", - "home.base_title": "TagStudio Alfa", - "home.include_all_tags": "E (Inclui todos os rótulos)", - "home.include_any_tag": "Ou (Inclui qualquer rótulo)", - "home.main_window": "Janela Principal", + "generic.edit": "Editar", + "generic.recent_libraries": "Bibliotecas recentes", "home.search": "Buscar", "home.search_entries": "Buscar Entradas", + "home.search_tags": "Buscar Rótulos", "home.thumbnail_size": "Tamanho de miniatura", - "landing.open_button": "Abrir/Criar Bliblioteca %{open_shortcut_text}", - "library.Artist": "Artista", - "library.anthology": "Coletânea", - "library.archived": "Data de Arquivação", - "library.author": "Autor", - "library.book": "Livro", - "library.collation": "Colagem", - "library.comic": "Quadrinho", - "library.comments": "Comentários", - "library.composer": "Compositor", - "library.content_tags": "Rótulos de conteúdo", - "library.date": "Data", - "library.date_created": "Data de Criação", - "library.date_modified": "Dada de Modificação", - "library.date_published": "Data de Publicação", - "library.date_released": "Data de Lançamento", - "library.date_taken": "Data de Criação", - "library.date_uploaded": "Data de Envio", - "library.description": "Descrição", - "library.favorite": "Favorito", - "library.guest_artist": "Artista Convidado", - "library.magazine": "Revista", - "library.manga": "Manga", - "library.meta_tags": "Meta Rótulos", - "library.notes": "Notas", - "library.publisher": "Editora", - "library.series": "Séries", - "library.source": "Fonte", - "library.tags": "Rótulos", - "library.title": "Título", - "library.url": "URL", - "library.volume": "Volume", + "ignore_list.add_extension": "Adicionar Extensão", + "ignore_list.mode.exclude": "Excluir", + "ignore_list.mode.include": "Incluir", + "ignore_list.mode.label": "Modo de Lista:", + "ignore_list.title": "Extensões de Arquivo", + "library.field.add": "Adicionar Campo", + "library.field.confirm_remove": "Você tem certeza de que quer remover o campo \"%{self.lib.get_field_attr(field, \"name\")}\"?", + "library.field.mixed_data": "Dados Mistos", + "library.field.remove": "Remover Campo", + "library.missing": "Localização Ausente", + "library.name": "Biblioteca", + "library.refresh.scanning": "Escaneando Diretórios por Novos Arquivos...\n%{x + 1} Arquivo%{\"s\" if x + 1 != 1 else \"\"} Pesquisado%{\"s\" if x + 1 != 1 else \"\"}, %{len(self.lib.files_not_in_library)} Novo(s) Arquivo(s) Encontrado(s)", + "library.refresh.scanning_preparing": "Escaneando Diretórios por Novos Arquivos...\nPreparando...", + "library.refresh.title": "Atualizando Diretórios", + "library.scan_library.title": "Escaneando Biblioteca", + "macros.running.dialog.new_entries": "Executando Macros Configurados em %{x + 1}/%{len(new_ids)} Novas Entradas", + "macros.running.dialog.title": "Executando Macros nas Novas Entradas", "menu.edit": "Editar", "menu.file": "Arquivo", "menu.help": "Ajuda", "menu.macros": "Macros", "menu.tools": "Ferramentas", "menu.window": "Janela", - "merge.merge_dupe_entries": "Mesclando Entradas Duplicadas", - "merge.window_title": "Mesclando Entradas Duplicadas", - "mirror_entities.are_you_sure": "Tem certeza que você deseja espelhar os seguintes %{len(self.lib.dupe_files)} entradas?", - "mirror_entities.label": "Espelhando 1/%{count} Entradas...", - "mirror_entities.title": "Espelhando Entradas", - "open_library.library_creation_return_code": "Código de Retorno da Criação da Biblioteca:", - "open_library.no_tagstudio_library_found": "Nenhuma biblioteca do TagStudio existente foi encontrada em '%{path}'. Criando uma.", - "open_library.title": "Biblioteca", - "preview.dimensions": "Dimensões", - "preview.recent": "Bibliotecas recentes", - "preview_panel.confirm_remove": "Você tem certeza de que quer remover o campo \"%{self.lib.get_field_attr(field, \"name\")}\"?", - "preview_panel.edit_name": "Editar", - "preview_panel.missing_location": "Localização Ausente", - "preview_panel.mixed_data": "Dados Mistos", - "preview_panel.no_items_selected": "Nenhum Item Selecionado", - "preview_panel.unknown_field_type": "Tipo de Campo Desconhecido", - "preview_panel.update_widgets": "[ENTRY PANEL] ATULIZAR WIDGETS (%{self.driver.selected})", - "progression.running_macros.new_entries": "Executando Macros nas Novas Entradas", - "progression.running_macros.one_new_entry": "Executando Macros Configurados em 1/%{len(new_ids)} Novas Entradas", - "progression.running_macros.several_new_entry": "Executando Macros Configurados em %{x + 1}/%{len(new_ids)} Novas Entradas", - "relink_unlinked.attempt_relink": "Tentando Relinkar %{x[0]+1}/%{len(self.lib.missing_files)} Entradas, %{self.fixed} Relinkadas com Sucesso", - "relink_unlinked.title": "Relinkando Entradas", - "splash.open_library": "Abrindo Biblioteca", - "status.backup_success": "Backup da Biblioteca Salvo em:", - "status.enumerate_query": "Busca:%{query}, Quadro: %{i}, Tamanho: %{len(f)}", - "status.number_results_found": "%{len(all_items)} Resultados Encontrados para \"%{query}\" (%{format_timespan(end_time - start_time)})", - "status.results_found": "Resultados", - "status.save_success": "Biblioteca Salva e Fechada!", - "status.search_library_query": "Procurando na Biblioteca por", + "preview.no_selection": "Nenhum Item Selecionado", + "status.library_backup_success": "Backup da Biblioteca Salvo em:", + "status.library_save_success": "Biblioteca Salva e Fechada!", + "status.library_search_query": "Procurando na Biblioteca por", + "status.results": "Resultados", "tag.add": "Adicionar Rótulo", - "tag.add_search": "Adicionar a Pesquisa", - "tag.library": "Rótulos da biblioteca", + "tag.add_to_search": "Adicionar a Pesquisa", + "tag.aliases": "Alias", + "tag.color": "Cor", + "tag.name": "Nome", "tag.new": "Novo Rótulo", + "tag.parent_tags": "Rótulos Pai", + "tag.parent_tags.add": "Adicionar Rótulo Pai", "tag.search_for_tag": "Procurar por Rótulo", - "text_line_edit.unknown_event_type": "tipo de evento desconhecido: %{event}", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.shorthand": "Taquigrafia", + "tag_manager.title": "Rótulos da biblioteca" } diff --git a/tagstudio/resources/translations/ru.json b/tagstudio/resources/translations/ru.json index 25dc7c39..a0bbd4ff 100644 --- a/tagstudio/resources/translations/ru.json +++ b/tagstudio/resources/translations/ru.json @@ -1,144 +1,92 @@ { - "add_field.add": "Добавить Категорию", - "build_tags.add_parent_tags": "Добавить Теги-родители", - "build_tags.parent_tags": "Теги-родители", - "delete_unlinked.confirm": "Вы уверены в том, что желаете удалить %{len(self.lib.missing_files)} записи?", - "delete_unlinked.delete_entries": "Удаление записей", - "delete_unlinked.delete_unlinked": "Удалить откреплённые записи", - "delete_unlinked.deleting_number_entries": "Удалено %{x[0]+1}/{len(self.lib.missing_files)} откреплённых записей", - "dialog.open_create_library": "Открыть/Создать Библиотеку", - "dialog.refresh_directories": "Обновление Каталога", - "dialog.save_library": "Сохранить Библиотеку", - "dialog.scan_directories": "Сканирование каталога на наличие новых файлов...\nПодготовка...", - "dialog.scan_directories.new_files": "Сканирование на наличие новых файлов...\n%{x + 1} File%{\"s\" if x + 1 != 1 else \"\"} Searched, %{len(self.lib.files_not_in_library)} Найдены новые файлы", - "file_extension.add_extension": "Добавить расширение", - "file_extension.list_mode": "Список режимов:", - "file_opener.command_not_found": "Не смог найти %{command_name} в системе PATH", - "file_opener.not_found": "Файл не найден:", - "file_opener.open_file": "Открытие файла:}", - "fix_dupes.advice_label": "После отзеркаливания, вы можете использовать DupeGuru, чтобы удалить ненужные файлы. После этого, используйте функцию \"Исправить откреплённые записи\" внутри панели \"Инструменты\" TagStudio, чтобы удалить откреплённые записи.", - "fix_dupes.fix_dupes": "Исправить дубликаты", - "fix_dupes.load_file": "Загрузить файл DupeGuru", - "fix_dupes.mirror_description": "Отзеркалить данные записи внутри каждого указанного набора дубликатов, объединяя все данные внутри без удаления или дублирования категорий. Эта операция не удалит какие-либо файлы или данные.", - "fix_dupes.mirror_entries": "Отзеркалить записи", - "fix_dupes.name_filter": "Файлы DupeGuru (*.dupeguru)", - "fix_dupes.no_file_match": "Совпадение файлов дубликатов: N/A", - "fix_dupes.no_file_selected": "Файл DupeGuru не выбран", - "fix_dupes.number_file_match": "Совпадения файлов дубликатов: %{count}", - "fix_dupes.open_result_files": "Открыть файл результатов DupeGuru", - "fix_unlinked.delete_unlinked": "Удалить откреплённые записи", - "fix_unlinked.description": "Каждая запись в библиотеке привязана к файлу, находящегося внутри той или иной папки. Если файл, к которому была привязана запись, был удалён или перемещён без использования TagStudio, то запись становиться \"откреплённой\". Откреплённые записи могут быть прикреплены обратно через автоматический рескан, вручную прикреплены обратно пользователем, либо же удалены если в них нет надобности.", - "fix_unlinked.duplicate_description": "Записи-дубликаты это несколько записей, которые одновременно привязаны к одному файлу. Объединение таких дубликатов соединит все теги и мета данные из этих записей в одну. Записи-дубликаты не стоит путать с несколькими копиями самого файла, которые могут существовать вне TagStudio.", - "fix_unlinked.fix_unlinked": "Исправить откреплённые записи", - "fix_unlinked.manual_relink": "Ручная привязка", - "fix_unlinked.merge_dupes": "Объединить записи дубликаты", - "fix_unlinked.refresh_dupes": "Обновить записи дубликаты", - "fix_unlinked.scan_library.label": "Сканирование Библиотеки на наличие откреплённых записей...", - "fix_unlinked.scan_library.title": "Сканирование Библиотеки", - "fix_unlinked.search_and_relink": "Поиск и Привязка", + "entries.duplicate.merge.label": "Объединить повторяющиеся записи", + "entries.duplicate.refresh": "Обновить записи дубликаты", + "entries.duplicates.description": "Записи-дубликаты это несколько записей, которые одновременно привязаны к одному файлу. Объединение таких дубликатов соединит все теги и мета данные из этих записей в одну. Записи-дубликаты не стоит путать с несколькими копиями самого файла, которые могут существовать вне TagStudio.", + "entries.mirror": "Отзеркалить", + "entries.mirror.confirmation": "Вы уверенны, что хотите отзеркалить следующие %{len(self.lib.dupe_files)} записи?", + "entries.mirror.label": "Отзеркаливание 1/%{count} записей...", + "entries.mirror.title": "Отзеркаливание записей", + "entries.tags": "Теги", + "entries.unlinked.delete": "Удалить откреплённые записи", + "entries.unlinked.delete.confirm": "Вы уверены в том, что желаете удалить %{len(self.lib.missing_files)} записи?", + "entries.unlinked.delete.deleting": "Удаление записей", + "entries.unlinked.delete.deleting_count": "Удалено %{x[0]+1}/{len(self.lib.missing_files)} откреплённых записей", + "entries.unlinked.description": "Каждая запись в библиотеке привязана к файлу, находящегося внутри той или иной папки. Если файл, к которому была привязана запись, был удалён или перемещён без использования TagStudio, то запись становиться \"откреплённой\". Откреплённые записи могут быть прикреплены обратно через автоматический рескан, вручную прикреплены обратно пользователем, либо же удалены если в них нет надобности.", + "entries.unlinked.refresh_all": "Обновить Всё", + "entries.unlinked.relink.attempting": "Пытаемся вновь привязать %{x[0]+1}/%{len(self.lib.missing_files)} записей, %{self.fixed} Успешно привязано", + "entries.unlinked.relink.manual": "Ручная привязка", + "entries.unlinked.relink.title": "Привязка записей", + "entries.unlinked.scanning": "Сканирование Библиотеки на наличие откреплённых записей...", + "entries.unlinked.search_and_relink": "Поиск и Привязка", + "entries.unlinked.title": "Исправить откреплённые записи", + "file.date_created": "Дата создания", + "file.date_modified": "Дата изменения", + "file.dimensions": "Соотношения сторон", + "file.duplicates.dupeguru.advice": "После отзеркаливания, вы можете использовать DupeGuru, чтобы удалить ненужные файлы. После этого, используйте функцию \"Исправить откреплённые записи\" внутри панели \"Инструменты\" TagStudio, чтобы удалить откреплённые записи.", + "file.duplicates.dupeguru.file_extension": "Файлы DupeGuru (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "Загрузить файл DupeGuru", + "file.duplicates.dupeguru.no_file": "Файл DupeGuru не выбран", + "file.duplicates.dupeguru.open_file": "Открыть файл результатов DupeGuru", + "file.duplicates.fix": "Исправить дубликаты", + "file.duplicates.matches": "Совпадения файлов дубликатов: %{count}", + "file.duplicates.matches_uninitialized": "Совпадение файлов дубликатов: N/A", + "file.duplicates.mirror.description": "Отзеркалить данные записи внутри каждого указанного набора дубликатов, объединяя все данные внутри без удаления или дублирования категорий. Эта операция не удалит какие-либо файлы или данные.", + "file.duplicates.mirror_entries": "Отзеркалить записи", + "file.not_found": "Файл не найден:", + "file.open_file": "Открыть файл", + "file.open_location.generic": "Открыть файл в проводнике", + "folders_to_tags.converting": "Конвертировать папки в теги", "folders_to_tags.description": "Создаёт теги для записей согласно имеющейся иерархии папок.\nВнизу указаны все теги, которые будут созданы, а также записи к которым они будут применены.", - "folders_to_tags.folders_to_tags": "Конвертировать папки в теги", + "folders_to_tags.open_all": "Открыть Всё", "folders_to_tags.title": "Создать теги из папок", "generic.add": "Добавить", - "generic.aliases": "Псевдонимы", "generic.apply": "Применить", "generic.cancel": "Отмена", - "generic.close_all": "Закрыть Всё", - "generic.color": "Цвет", "generic.delete": "Удалить", "generic.done": "Завершено", - "generic.exclude": "Исключить", - "generic.file_extension": "Расширения Файлов", - "generic.include": "Включить", - "generic.mirror": "Отзеркалить", - "generic.name": "Имя", - "generic.open_all": "Открыть Всё", - "generic.open_file": "Открыть файл", - "generic.open_file_explorer": "Открыть файл в проводнике", - "generic.refresh_all": "Обновить Всё", - "generic.remove_field": "Удалить Категорию", - "generic.search_tags": "Поиск тегов", - "generic.shorthand": "Сокращённое название", - "home.base_title": "TagStudio Альфа Версия", - "home.include_all_tags": "И (Файл содержит все теги)", - "home.include_any_tag": "Или (Файл содержит любой из тегов)", - "home.main_window": "Основное Окно", + "generic.edit": "Редактировать", + "generic.recent_libraries": "Недавние библиотеки", "home.search": "Поиск", "home.search_entries": "Поисковые запросы", + "home.search_tags": "Поиск тегов", "home.thumbnail_size": "Размер иконок", - "landing.open_button": "Открыть/Создать Библиотеку %{open_shortcut_text}", - "library.Artist": "Художник", - "library.anthology": "Антология", - "library.archived": "Дата архивации", - "library.author": "Автор", - "library.book": "Книги", - "library.collation": "Сопоставление", - "library.comic": "Комиксы", - "library.comments": "Комментарии", - "library.composer": "Композитор", - "library.content_tags": "Теги содержимого", - "library.date": "Дата", - "library.date_created": "Дата создания", - "library.date_modified": "Дата изменения", - "library.date_published": "Дата публикации", - "library.date_released": "Дата выпуска", - "library.date_taken": "Дата съёмки", - "library.date_uploaded": "Дата загрузки", - "library.description": "Описание", - "library.favorite": "Избранное", - "library.guest_artist": "Соавтор", - "library.magazine": "Журнал", - "library.manga": "Манга", - "library.meta_tags": "Мета Теги", - "library.notes": "Заметки", - "library.publisher": "Издатель", - "library.series": "Серии", - "library.source": "Источники", - "library.tags": "Теги", - "library.title": "Название", - "library.url": "URL", - "library.volume": "Том", + "ignore_list.add_extension": "Добавить расширение", + "ignore_list.mode.exclude": "Исключить", + "ignore_list.mode.include": "Включить", + "ignore_list.mode.label": "Список режимов:", + "ignore_list.title": "Расширения Файлов", + "library.field.add": "Добавить Категорию", + "library.field.confirm_remove": "Вы уверенны, что хотите удалить эту категорию \"%{self.lib.get_field_attr(field, \"name\")}\"?", + "library.field.mixed_data": "Смешанные данные", + "library.field.remove": "Удалить Категорию", + "library.missing": "Путь не найден", + "library.name": "Библиотека", + "library.refresh.scanning": "Сканирование на наличие новых файлов...\n%{x + 1} File%{\"s\" if x + 1 != 1 else \"\"} Searched, %{len(self.lib.files_not_in_library)} Найдены новые файлы", + "library.refresh.scanning_preparing": "Сканирование каталога на наличие новых файлов...\nПодготовка...", + "library.refresh.title": "Обновление Каталога", + "library.scan_library.title": "Сканирование Библиотеки", + "macros.running.dialog.new_entries": "Запуск сконфигурированных макросов в %{x + 1}/%{len(new_ids)} Новые файлы", + "macros.running.dialog.title": "Использование макросов на новых файлах", "menu.edit": "Редактировать", "menu.file": "Файл", "menu.help": "Помощь", "menu.macros": "Макросы", "menu.tools": "Инструменты", "menu.window": "Окно", - "merge.merge_dupe_entries": "Объединить повторяющиеся записи", - "merge.window_title": "Объединить повторяющиеся записи", - "mirror_entities.are_you_sure": "Вы уверенны, что хотите отзеркалить следующие %{len(self.lib.dupe_files)} записи?", - "mirror_entities.label": "Отзеркаливание 1/%{count} записей...", - "mirror_entities.title": "Отзеркаливание записей", - "open_library.library_creation_return_code": "Возвратный код создания библиотеки:", - "open_library.no_tagstudio_library_found": "Существующая библиотека TagStudio не найдена внутри '%{path}'. Создаём новую.", - "open_library.title": "Библиотека", - "preview.dimensions": "Соотношения сторон", - "preview.recent": "Недавние библиотеки", - "preview_panel.confirm_remove": "Вы уверенны, что хотите удалить эту категорию \"%{self.lib.get_field_attr(field, \"name\")}\"?", - "preview_panel.edit_name": "Редактировать", - "preview_panel.missing_location": "Путь не найден", - "preview_panel.mixed_data": "Смешанные данные", - "preview_panel.no_items_selected": "Ничего не выбрано", - "preview_panel.unknown_field_type": "Неизвестный тип категории", - "preview_panel.update_widgets": "[ENTRY PANEL] ОБНОВИТЬ ВИДЖЕТЫ (%{self.driver.selected})", - "progression.running_macros.new_entries": "Использование макросов на новых файлах", - "progression.running_macros.one_new_entry": "Запуск сконфигурированных макросов в 1/%{len(new_ids)} Новые файлы", - "progression.running_macros.several_new_entry": "Запуск сконфигурированных макросов в %{x + 1}/%{len(new_ids)} Новые файлы", - "relink_unlinked.attempt_relink": "Пытаемся вновь привязать %{x[0]+1}/%{len(self.lib.missing_files)} записей, %{self.fixed} Успешно привязано", - "relink_unlinked.title": "Привязка записей", - "splash.open_library": "Открытие Библиотеки", - "status.backup_success": "Резервная копия библиотеки сохранена по адресу:", - "status.enumerate_query": "Query:%{query}, Frame: %{i}, Length: %{len(f)}", - "status.number_results_found": "%{len(all_items)} Было найдено \"%{query}\" (%{format_timespan(end_time - start_time)})", - "status.results_found": "Результаты", - "status.save_success": "Библиотека сохранена и закрыта!", - "status.search_library_query": "Поиск по библиотеке", + "preview.no_selection": "Ничего не выбрано", + "status.library_backup_success": "Резервная копия библиотеки сохранена по адресу:", + "status.library_save_success": "Библиотека сохранена и закрыта!", + "status.library_search_query": "Поиск по библиотеке", + "status.results": "Результаты", "tag.add": "Добавить тег", - "tag.add_search": "Добавить к поисковому запросу", - "tag.library": "Библиотека тегов", + "tag.add_to_search": "Добавить к поисковому запросу", + "tag.aliases": "Псевдонимы", + "tag.color": "Цвет", + "tag.name": "Имя", "tag.new": "Новый тег", + "tag.parent_tags": "Теги-родители", + "tag.parent_tags.add": "Добавить Теги-родители", "tag.search_for_tag": "Поиск тега", - "text_line_edit.unknown_event_type": "unknown event type: %{event}", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.shorthand": "Сокращённое название", + "tag_manager.title": "Библиотека тегов" } diff --git a/tagstudio/resources/translations/sv.json b/tagstudio/resources/translations/sv.json index 3f4457a6..9e3c292d 100644 --- a/tagstudio/resources/translations/sv.json +++ b/tagstudio/resources/translations/sv.json @@ -1,114 +1,73 @@ { - "add_field.add": "Lägg till fält", - "build_tags.add_parent_tags": "Lägg till förälderetikett", - "build_tags.parent_tags": "Förälderetiketter", - "delete_unlinked.delete_entries": "Tar bort poster", - "dialog.open_create_library": "Öppna/skapa bibliotek", - "dialog.refresh_directories": "Uppdaterar kataloger", - "dialog.save_library": "Spara bibliotek", - "dialog.scan_directories": "Skannar kataloger efter nya filer...\nFörbereder...", - "file_extension.add_extension": "Lägg till tillägg", - "file_opener.not_found": "Kunde inte hitta filen:", - "file_opener.open_file": "Öppnar fil:}", - "fix_dupes.fix_dupes": "Fixa dubbla filer", - "fix_dupes.mirror_entries": "Spegla poster", - "fix_unlinked.delete_unlinked": "Ta bort olänkade poster", - "fix_unlinked.description": "Varje post i biblioteket är länkad till en fil i en av dina kataloger. Om en fil länkad till en post är flyttad eller borttagen utanför TagStudio blir den olänkad. Olänkade poster kan automatiskt bli omlänkade genom att söka genom dina kataloger, manuellt omlänkade av användaren eller tas bort om så önskas.", - "fix_unlinked.duplicate_description": "Dubbla poster är definierade som flera poster som pekar på samma fil på datorn. Genom att slå ihop dessa poster kommer deras etiketter och metadata från dubbletterna att kombineras till en post. Dessa ska inte förväxlas med \"dubbla filer\", som är dubbletter av dina filer utanför TagStudio.", - "fix_unlinked.fix_unlinked": "Fixa olänkade poster", - "fix_unlinked.manual_relink": "Länka om manuellt", - "fix_unlinked.merge_dupes": "Slå ihop dubbla poster", - "fix_unlinked.refresh_dupes": "Uppdatera dubbla poster", - "fix_unlinked.scan_library.label": "Skannar bibliotek efter olänkade poster...", - "fix_unlinked.scan_library.title": "Skannar bibliotek", - "fix_unlinked.search_and_relink": "Sök && Länka om", + "entries.duplicate.merge.label": "Slår ihop dubbla poster", + "entries.duplicate.refresh": "Uppdatera dubbla poster", + "entries.duplicates.description": "Dubbla poster är definierade som flera poster som pekar på samma fil på datorn. Genom att slå ihop dessa poster kommer deras etiketter och metadata från dubbletterna att kombineras till en post. Dessa ska inte förväxlas med \"dubbla filer\", som är dubbletter av dina filer utanför TagStudio.", + "entries.mirror": "Spegla", + "entries.mirror.title": "Speglar poster", + "entries.tags": "Etiketter", + "entries.unlinked.delete.deleting": "Tar bort poster", + "entries.unlinked.description": "Varje post i biblioteket är länkad till en fil i en av dina kataloger. Om en fil länkad till en post är flyttad eller borttagen utanför TagStudio blir den olänkad. Olänkade poster kan automatiskt bli omlänkade genom att söka genom dina kataloger, manuellt omlänkade av användaren eller tas bort om så önskas.", + "entries.unlinked.refresh_all": "Uppdatera alla", + "entries.unlinked.relink.manual": "Länka om manuellt", + "entries.unlinked.relink.title": "Länkar om poster", + "entries.unlinked.scanning": "Skannar bibliotek efter olänkade poster...", + "entries.unlinked.search_and_relink": "Sök && Länka om", + "entries.unlinked.title": "Fixa olänkade poster", + "file.date_created": "Skapad den", + "file.date_modified": "Senast ändrad", + "file.dimensions": "Dimensioner", + "file.duplicates.fix": "Fixa dubbla filer", + "file.duplicates.mirror_entries": "Spegla poster", + "file.not_found": "Kunde inte hitta filen:", + "file.open_file": "Öppna fil", + "file.open_location.generic": "Öppna fil i utforskaren", + "folders_to_tags.converting": "Konverterar mappar till etiketter", "folders_to_tags.description": "Skapar etiketter baserat på din mappstruktur och tillämpar dem till dina poster.\nStrukturen nedan visar vilka etiketter som kommer skapas och vilka filer de kommer tillämpas på.", - "folders_to_tags.folders_to_tags": "Konverterar mappar till etiketter", + "folders_to_tags.open_all": "Öppna alla", "folders_to_tags.title": "Skapa etiketter från mappar", "generic.add": "Lägg till", - "generic.aliases": "Alias", "generic.apply": "Tillämpa", "generic.cancel": "Avbryt", - "generic.close_all": "Stäng alla", - "generic.color": "Färg", "generic.delete": "Ta bort", "generic.done": "Klar", - "generic.exclude": "Exkludera", - "generic.file_extension": "Filnamnstillägg", - "generic.include": "Inkludera", - "generic.mirror": "Spegla", - "generic.name": "Namn", - "generic.open_all": "Öppna alla", - "generic.open_file": "Öppna fil", - "generic.open_file_explorer": "Öppna fil i utforskaren", - "generic.refresh_all": "Uppdatera alla", - "generic.remove_field": "Ta bort fält", - "generic.search_tags": "Sök etikett", - "generic.shorthand": "Förkortning", - "home.base_title": "TagStudio Alfa", - "home.include_all_tags": "Och (Inkluderar alla etiketter)", - "home.include_any_tag": "Eller (Inkluderar alla etiketter)", - "home.main_window": "Huvudfönster", + "generic.edit": "Redigera", + "generic.recent_libraries": "Senaste biblioteken", "home.search": "Sök", "home.search_entries": "Sök poster", + "home.search_tags": "Sök etikett", "home.thumbnail_size": "Miniatyrbildsstorlek", - "library.Artist": "Artist", - "library.anthology": "Antologi", - "library.archived": "Arkiveringsdatum", - "library.author": "Författare", - "library.book": "Bok", - "library.collation": "Kollation", - "library.comic": "Serietidning", - "library.comments": "Kommentarer", - "library.composer": "Kompositör", - "library.content_tags": "Innehållsetiketter", - "library.date": "Datum", - "library.date_created": "Skapad den", - "library.date_modified": "Senast ändrad", - "library.date_published": "Publiceringsdatum", - "library.date_released": "Utgivningsdatum", - "library.date_uploaded": "Uppladdningsdatum", - "library.description": "Beskrivning", - "library.favorite": "Favorit", - "library.guest_artist": "Gästartist", - "library.magazine": "Magasin", - "library.manga": "Manga", - "library.meta_tags": "Meta-etiketter", - "library.notes": "Anteckningar", - "library.publisher": "Utgivare", - "library.series": "Serie", - "library.source": "Källa", - "library.tags": "Etiketter", - "library.title": "Titel", - "library.url": "URL", - "library.volume": "Volym", + "ignore_list.add_extension": "Lägg till tillägg", + "ignore_list.mode.exclude": "Exkludera", + "ignore_list.mode.include": "Inkludera", + "ignore_list.title": "Filnamnstillägg", + "library.field.add": "Lägg till fält", + "library.field.remove": "Ta bort fält", + "library.missing": "Platsen saknas", + "library.name": "Bibliotek", + "library.refresh.scanning_preparing": "Skannar kataloger efter nya filer...\nFörbereder...", + "library.refresh.title": "Uppdaterar kataloger", + "library.scan_library.title": "Skannar bibliotek", + "macros.running.dialog.title": "Kör makros på nya poster", "menu.edit": "Redigera", "menu.file": "Fil", "menu.help": "Hjälp", "menu.macros": "Makron", "menu.tools": "Verktyg", "menu.window": "Fönster", - "merge.merge_dupe_entries": "Slår ihop dubbla poster", - "merge.window_title": "Slår ihop dubbla poster", - "mirror_entities.title": "Speglar poster", - "open_library.title": "Bibliotek", - "preview.dimensions": "Dimensioner", - "preview.recent": "Senaste biblioteken", - "preview_panel.edit_name": "Redigera", - "preview_panel.missing_location": "Platsen saknas", - "preview_panel.no_items_selected": "Inga valda objekt", - "progression.running_macros.new_entries": "Kör makros på nya poster", - "relink_unlinked.title": "Länkar om poster", - "splash.open_library": "Öppnar bibliotek", - "status.backup_success": "Bibliotekets säkerhetskopia sparad i:", - "status.results_found": "Resultat", - "status.save_success": "Bibliotek sparat och stängt!", - "status.search_library_query": "Söker i biblioteket efter", + "preview.no_selection": "Inga valda objekt", + "status.library_backup_success": "Bibliotekets säkerhetskopia sparad i:", + "status.library_save_success": "Bibliotek sparat och stängt!", + "status.library_search_query": "Söker i biblioteket efter", + "status.results": "Resultat", "tag.add": "Lägg till etikett", - "tag.add_search": "Lägg till i Sök", - "tag.library": "Biblioteksetiketter", + "tag.add_to_search": "Lägg till i Sök", + "tag.aliases": "Alias", + "tag.color": "Färg", + "tag.name": "Namn", "tag.new": "Ny etikett", + "tag.parent_tags": "Förälderetiketter", + "tag.parent_tags.add": "Lägg till förälderetikett", "tag.search_for_tag": "Sök efter etikett", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.shorthand": "Förkortning", + "tag_manager.title": "Biblioteksetiketter" } diff --git a/tagstudio/resources/translations/ta.json b/tagstudio/resources/translations/ta.json index e1be874d..8a58a6de 100644 --- a/tagstudio/resources/translations/ta.json +++ b/tagstudio/resources/translations/ta.json @@ -1,144 +1,92 @@ { - "add_field.add": "புலத்தைச் சேர்க்க", - "build_tags.add_parent_tags": "பெற்றோர் குறிச்சொற்களைச் சேர்க்க", - "build_tags.parent_tags": "பெற்றோர் குறிச்சொற்கள்", - "delete_unlinked.confirm": "பின்வரும் உள்ளீடுகளை நிச்சயமாக நீக்க விரும்புகிறீர்களா %{len(self.lib.missing_files)}?", - "delete_unlinked.delete_entries": "உள்ளீடுகள் நீக்கப்படுகிறது", - "delete_unlinked.delete_unlinked": "இணைக்கப்படாத உள்ளீடுகளை நீக்கு", - "delete_unlinked.deleting_number_entries": "%{x[0]+1}/{len(self.lib.missing_files)} இணைக்கப்படாத உள்ளீடுகள் நீக்கப்படுகிறது", - "dialog.open_create_library": "நூலகத்தைத் திற/உருவாக்கு", - "dialog.refresh_directories": "கோப்பகங்கள் புதுப்பிக்கப்படுகின்றன", - "dialog.save_library": "நூலகத்தைச் சேமி", - "dialog.scan_directories": "புதிய கோப்புகளுக்கான அடைவுகள் சோதனை செய்யப்படுகின்றது...\nதயாராகிறது...", - "dialog.scan_directories.new_files": "புதிய கோப்புகளுக்கான அடைவுகள் சோதனை செய்யப்படுகின்றது...\n%{x + 1} கோப்பு%{\"s\" if x + 1 != 1 else \"\"} தேடப்பட்டது, %{len(self.lib.files_not_in_library)} புதிய கோப்புகள் கிடைத்தன", - "file_extension.add_extension": "நீட்டிப்பைச் சேர்க்க", - "file_extension.list_mode": "பட்டியல் முறை:", - "file_opener.command_not_found": "%{command_name} ஐ system PATH இல் கண்டுபிடிக்க முடியவில்லை", - "file_opener.not_found": "கோப்பு கிடைக்கவில்லை:", - "file_opener.open_file": "கோப்பைத் திறக்கிறது:}", - "fix_dupes.advice_label": "படிமம் முடிந்தவுடன், தேவையற்ற கோப்புகளை நீக்க DupeGuru ஐ பயன்படுத்தலாம். அதற்குப் பிறகு, இணைக்காத நுழைவுகளை நீக்க 'டாக் ஸ்டுடியோ' வின் 'இணைக்கப்படாத உள்ளீடுகளைச் சரிசெய்' அம்சத்தைக் கருவிகள் பட்டியில் பயன்படுத்தவும்.", - "fix_dupes.fix_dupes": "நகல் கோப்புகளைச் சரிசெய்", - "fix_dupes.load_file": "DupeGuru கோப்பை ஏற்றவும்", - "fix_dupes.mirror_description": "ஒவ்வொரு மறுநுழைவு பொருத்தத் தொகுப்பிலும் நுழைவு தரவுகளைப் பிரதிபலிக்கவும், அனைத்து தரவுகளையும் இணைக்கவும், எந்தத் தகவல்களையும் நீக்காமலும் மறு செய்யாமலும். இந்தச் செயலில் எந்தக் கோப்புகள் அல்லது தரவுகளும் நீக்கப்பட மாட்டாது.", - "fix_dupes.mirror_entries": "படிம நுழைவுகள்", - "fix_dupes.name_filter": "DupeGuru கோப்புகள் (*.dupeguru)", - "fix_dupes.no_file_match": "நகல் கோப்பு பொருத்தங்கள்: ஒன்றும் இல்லை", - "fix_dupes.no_file_selected": "DupeGuru கோப்பு எதுவும் தேர்ந்தெடுக்கப்படவில்லை", - "fix_dupes.number_file_match": "நகல் கோப்பு பொருத்தங்கள்: %{count}", - "fix_dupes.open_result_files": "DupeGuru முடிவுகள் கோப்பைத் திறக்க", - "fix_unlinked.delete_unlinked": "இணைக்கப்படாத உள்ளீடுகளை நீக்கு", - "fix_unlinked.description": "ஒவ்வொரு புத்தககல்லரி நுழைவும் உங்கள் அடைவுகளில் உள்ள ஒரு கோப்புடன் இணைக்கப்பட்டுள்ளது. டாக் ஸ்டுடியோ-வைத் தவிர கோப்புகள் நகர்த்தப்பட்டால் அல்லது நீக்கப்பட்டால், அவை இணைக்கப்படாதவையாகக் கருதப்படும். இணைக்கப்படாத நுழைவுகளை உங்கள் அடைவுகளில் தேடுவதன் மூலம் தானாகவே மீண்டும் இணைக்கலாம், பயனர் கைமுறையாக இணைக்கலாம் அல்லது விருப்பப்படி நீக்கலாம்.", - "fix_unlinked.duplicate_description": "மறுநுழைவுகள் என்பது, ஒரே கோப்பை குறிக்கும் பல நுழைவுகளை குறிக்கும். இவற்றை இணைப்பதால், அனைத்து மறுநுழைவுகளின் குறிச்சொற்களும் மெட்டாடேட்டாவும் ஒரே ஒட்டுமொத்த நுழைவாகச் சேர்க்கப்படும். இவற்றை 'மறுகோப்புகள்' என்பதுடன் குழப்பக் கூடாது, ஏனெனில் அவை டாக் ஸ்டுடியோவுக்கு வெளியேயுள்ள கோப்புகளின் நகல்களாகும்.", - "fix_unlinked.fix_unlinked": "இணைக்கப்படாத உள்ளீடுகளைச் சரிசெய்யவும்", - "fix_unlinked.manual_relink": "கைமுறை மறு இணைப்பு", - "fix_unlinked.merge_dupes": "நகல் உள்ளீடுகளை ஒன்றிணை", - "fix_unlinked.refresh_dupes": "நகல் உள்ளீடுகளைப் புதுப்பி", - "fix_unlinked.scan_library.label": "இணைக்கப்படாத நுழைவுகளை புத்தககல்லரியில் சோதனை செய்யப்படுகிறது...", - "fix_unlinked.scan_library.title": "புத்தககல்லரி சோதனை செய்யப்படுகிறது", - "fix_unlinked.search_and_relink": "தேடல் && மீண்டும் இணை", + "entries.duplicate.merge.label": "மறுநுழைவுகளை ஒன்றுசேர்த்தல்", + "entries.duplicate.refresh": "நகல் உள்ளீடுகளைப் புதுப்பி", + "entries.duplicates.description": "மறுநுழைவுகள் என்பது, ஒரே கோப்பை குறிக்கும் பல நுழைவுகளை குறிக்கும். இவற்றை இணைப்பதால், அனைத்து மறுநுழைவுகளின் குறிச்சொற்களும் மெட்டாடேட்டாவும் ஒரே ஒட்டுமொத்த நுழைவாகச் சேர்க்கப்படும். இவற்றை 'மறுகோப்புகள்' என்பதுடன் குழப்பக் கூடாது, ஏனெனில் அவை டாக் ஸ்டுடியோவுக்கு வெளியேயுள்ள கோப்புகளின் நகல்களாகும்.", + "entries.mirror": "படிமம்", + "entries.mirror.confirmation": "பின்வரும் உள்ளீடுகளைப் பிரதிபலிக்க விரும்புகிறீர்களா %{len(self.lib.dupe_files)}?", + "entries.mirror.label": "1/%{count} உள்ளீடுகளைப் பிரதிபலிக்கப்படுகின்றது...", + "entries.mirror.title": "உள்ளீடுகள் பிரதிபழிக்கப்படுகின்றது", + "entries.tags": "குறிச்சொற்கள்", + "entries.unlinked.delete": "இணைக்கப்படாத உள்ளீடுகளை நீக்கு", + "entries.unlinked.delete.confirm": "பின்வரும் உள்ளீடுகளை நிச்சயமாக நீக்க விரும்புகிறீர்களா %{len(self.lib.missing_files)}?", + "entries.unlinked.delete.deleting": "உள்ளீடுகள் நீக்கப்படுகிறது", + "entries.unlinked.delete.deleting_count": "%{x[0]+1}/{len(self.lib.missing_files)} இணைக்கப்படாத உள்ளீடுகள் நீக்கப்படுகிறது", + "entries.unlinked.description": "ஒவ்வொரு புத்தககல்லரி நுழைவும் உங்கள் அடைவுகளில் உள்ள ஒரு கோப்புடன் இணைக்கப்பட்டுள்ளது. டாக் ஸ்டுடியோ-வைத் தவிர கோப்புகள் நகர்த்தப்பட்டால் அல்லது நீக்கப்பட்டால், அவை இணைக்கப்படாதவையாகக் கருதப்படும். இணைக்கப்படாத நுழைவுகளை உங்கள் அடைவுகளில் தேடுவதன் மூலம் தானாகவே மீண்டும் இணைக்கலாம், பயனர் கைமுறையாக இணைக்கலாம் அல்லது விருப்பப்படி நீக்கலாம்.", + "entries.unlinked.refresh_all": "அனைத்தையும் புதுப்பி", + "entries.unlinked.relink.attempting": "%{x[0]+1}/%{len(self.lib.missing_files)} உள்ளீடுகளை மீண்டும் இணைக்க முயற்சிக்கிறது, %{self.fixed} மீண்டும் இணைக்கப்பட்டது", + "entries.unlinked.relink.manual": "கைமுறை மறு இணைப்பு", + "entries.unlinked.relink.title": "உள்ளீடுகள் மீண்டும் இணைக்கப்படுகின்றது", + "entries.unlinked.scanning": "இணைக்கப்படாத நுழைவுகளை புத்தககல்லரியில் சோதனை செய்யப்படுகிறது...", + "entries.unlinked.search_and_relink": "தேடல் && மீண்டும் இணை", + "entries.unlinked.title": "இணைக்கப்படாத உள்ளீடுகளைச் சரிசெய்யவும்", + "file.date_created": "உருவாக்கப்பட்ட தேதி", + "file.date_modified": "மாற்றப்பட்ட தேதி", + "file.dimensions": "பரிமாணங்கள்", + "file.duplicates.dupeguru.advice": "படிமம் முடிந்தவுடன், தேவையற்ற கோப்புகளை நீக்க DupeGuru ஐ பயன்படுத்தலாம். அதற்குப் பிறகு, இணைக்காத நுழைவுகளை நீக்க 'டாக் ஸ்டுடியோ' வின் 'இணைக்கப்படாத உள்ளீடுகளைச் சரிசெய்' அம்சத்தைக் கருவிகள் பட்டியில் பயன்படுத்தவும்.", + "file.duplicates.dupeguru.file_extension": "DupeGuru கோப்புகள் (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "DupeGuru கோப்பை ஏற்றவும்", + "file.duplicates.dupeguru.no_file": "DupeGuru கோப்பு எதுவும் தேர்ந்தெடுக்கப்படவில்லை", + "file.duplicates.dupeguru.open_file": "DupeGuru முடிவுகள் கோப்பைத் திறக்க", + "file.duplicates.fix": "நகல் கோப்புகளைச் சரிசெய்", + "file.duplicates.matches": "நகல் கோப்பு பொருத்தங்கள்: %{count}", + "file.duplicates.matches_uninitialized": "நகல் கோப்பு பொருத்தங்கள்: ஒன்றும் இல்லை", + "file.duplicates.mirror.description": "ஒவ்வொரு மறுநுழைவு பொருத்தத் தொகுப்பிலும் நுழைவு தரவுகளைப் பிரதிபலிக்கவும், அனைத்து தரவுகளையும் இணைக்கவும், எந்தத் தகவல்களையும் நீக்காமலும் மறு செய்யாமலும். இந்தச் செயலில் எந்தக் கோப்புகள் அல்லது தரவுகளும் நீக்கப்பட மாட்டாது.", + "file.duplicates.mirror_entries": "படிம நுழைவுகள்", + "file.not_found": "கோப்பு கிடைக்கவில்லை:", + "file.open_file": "கோப்பைத் திறக்கவும்", + "file.open_location.generic": "Explorer இல் கோப்பைத் திறக்கவும்", + "folders_to_tags.converting": "கோப்புறைகளை குறிச்சொற்களாக மாற்றப்படுகிறது", "folders_to_tags.description": "உங்கள் அடைவு கட்டமைப்பின் அடிப்படையில் குறிச்சொற்களை உருவாக்கி, அவற்றை உங்கள் நுழைவுகளில் பயன்படுத்துகிறது.\nகீழே காணப்படும் கட்டமைப்பானது உருவாக்கப்படும் அனைத்து குறிச்சொற்களையும், அவை எந்த நுழைவுகளில் பயன்படுத்தப்படும் என்பதையும் காட்டுகிறது.", - "folders_to_tags.folders_to_tags": "கோப்புறைகளை குறிச்சொற்களாக மாற்றப்படுகிறது", + "folders_to_tags.open_all": "அனைத்தையும் திற", "folders_to_tags.title": "கோப்புறைகளிலிருந்து குறிச்சொற்களை உருவாக்கு", "generic.add": "சேர்", - "generic.aliases": "மாற்றுப்பெயர்கள்", "generic.apply": "விண்ணப்பிக்க", "generic.cancel": "ரத்து செய்", - "generic.close_all": "அனைத்தையும் மூடு", - "generic.color": "நிறம்", "generic.delete": "நீக்கு", "generic.done": "முடிந்தது", - "generic.exclude": "தவிர்", - "generic.file_extension": "கோப்பு நீட்டிப்புகள்", - "generic.include": "உள்ளடக்கு", - "generic.mirror": "படிமம்", - "generic.name": "பெயர்", - "generic.open_all": "அனைத்தையும் திற", - "generic.open_file": "கோப்பைத் திறக்கவும்", - "generic.open_file_explorer": "Explorer இல் கோப்பைத் திறக்கவும்", - "generic.refresh_all": "அனைத்தையும் புதுப்பி", - "generic.remove_field": "புலத்தை அகற்று", - "generic.search_tags": "குறிச்சொற்களைத் தேடு", - "generic.shorthand": "சுருக்கெழுத்து", - "home.base_title": "TagStudio ஆல்பா", - "home.include_all_tags": "மற்றும் (அனைத்து குறிச்சொற்களையும் உள்ளடக்கியது)", - "home.include_any_tag": "அல்லது (எந்தக் குறிச்சொல்லையும் உள்ளடக்கியது)", - "home.main_window": "பிரதான சாளரம்", + "generic.edit": "திருத்து", + "generic.recent_libraries": "சமீபத்திய நூலகங்கள்", "home.search": "தேடு", "home.search_entries": "தேடல் உள்ளீடுகள்", + "home.search_tags": "குறிச்சொற்களைத் தேடு", "home.thumbnail_size": "சின்னப்பட அளவு", - "landing.open_button": "நூலகத்தைத் திற/உருவாக்கு %{open_shortcut_text}", - "library.Artist": "கலைஞர்", - "library.anthology": "தொகுப்பியல்", - "library.archived": "காப்பகப்படுத்தப்பட்ட தேதி", - "library.author": "ஆக்கியோன்", - "library.book": "புத்தகம்", - "library.collation": "தொகுத்தல்", - "library.comic": "நகைச்சுவை", - "library.comments": "கருத்துகள்", - "library.composer": "இசையமைப்பாளர்", - "library.content_tags": "உள்ளடக்கக் குறிச்சொற்கள்", - "library.date": "தேதி", - "library.date_created": "உருவாக்கப்பட்ட தேதி", - "library.date_modified": "மாற்றப்பட்ட தேதி", - "library.date_published": "வெளியிடப்பட்ட தேதி", - "library.date_released": "வெளியான தேதி", - "library.date_taken": "எடுக்கப்பட்ட தேதி", - "library.date_uploaded": "பதிவேற்றிய தேதி", - "library.description": "விளக்கம்", - "library.favorite": "பிடித்தது", - "library.guest_artist": "விருந்தினர் கலைஞர்", - "library.magazine": "இதழ்", - "library.manga": "மங்கா", - "library.meta_tags": "மெட்டா குறிச்சொற்கள்", - "library.notes": "குறிப்புகள்", - "library.publisher": "பதிப்பாளர்", - "library.series": "தொடர்", - "library.source": "ஆதாரம்", - "library.tags": "குறிச்சொற்கள்", - "library.title": "தலைப்பு", - "library.url": "இணைய முகவரி", - "library.volume": "தொகுப்பு", + "ignore_list.add_extension": "நீட்டிப்பைச் சேர்க்க", + "ignore_list.mode.exclude": "தவிர்", + "ignore_list.mode.include": "உள்ளடக்கு", + "ignore_list.mode.label": "பட்டியல் முறை:", + "ignore_list.title": "கோப்பு நீட்டிப்புகள்", + "library.field.add": "புலத்தைச் சேர்க்க", + "library.field.confirm_remove": "இந்த \"%{self.lib.get_field_attr(field, \"name\")}\" புலத்தை நிச்சயமாக அகற்ற விரும்புகிறீர்களா?", + "library.field.mixed_data": "கலப்பு தரவு", + "library.field.remove": "புலத்தை அகற்று", + "library.missing": "இடம் காணவில்லை", + "library.name": "நூலகம்", + "library.refresh.scanning": "புதிய கோப்புகளுக்கான அடைவுகள் சோதனை செய்யப்படுகின்றது...\n%{x + 1} கோப்பு%{\"s\" if x + 1 != 1 else \"\"} தேடப்பட்டது, %{len(self.lib.files_not_in_library)} புதிய கோப்புகள் கிடைத்தன", + "library.refresh.scanning_preparing": "புதிய கோப்புகளுக்கான அடைவுகள் சோதனை செய்யப்படுகின்றது...\nதயாராகிறது...", + "library.refresh.title": "கோப்பகங்கள் புதுப்பிக்கப்படுகின்றன", + "library.scan_library.title": "புத்தககல்லரி சோதனை செய்யப்படுகிறது", + "macros.running.dialog.new_entries": "%{x + 1} இல் கட்டமைக்கப்பட்ட செயல்முறைகளை இயக்கப்படுகிறது / %{len(new_ids)} புதிய பதிவுகள்", + "macros.running.dialog.title": "புதிய நுழைவுகளில் செயல்முறைகளை இயக்கப்படுகின்றது", "menu.edit": "திருத்து", "menu.file": "கோப்பு", "menu.help": "உதவி", "menu.macros": "செயல்முறை", "menu.tools": "கருவிகள்", "menu.window": "சாளரம்", - "merge.merge_dupe_entries": "மறுநுழைவுகளை ஒன்றுசேர்த்தல்", - "merge.window_title": "மறுநுழைவுகளை ஒன்றுசேர்த்தல்", - "mirror_entities.are_you_sure": "பின்வரும் உள்ளீடுகளைப் பிரதிபலிக்க விரும்புகிறீர்களா %{len(self.lib.dupe_files)}?", - "mirror_entities.label": "1/%{count} உள்ளீடுகளைப் பிரதிபலிக்கப்படுகின்றது...", - "mirror_entities.title": "உள்ளீடுகள் பிரதிபழிக்கப்படுகின்றது", - "open_library.library_creation_return_code": "நூலக உருவாக்கம் திரும்பக் குறியீடு:", - "open_library.no_tagstudio_library_found": "'%{path}' இல் ஏற்கனவே உள்ள டாக் ஸ்டுடியோ புத்தககல்லரி காணப்படவில்லை. ஒன்று உருவாக்கப்படுகிறது.", - "open_library.title": "நூலகம்", - "preview.dimensions": "பரிமாணங்கள்", - "preview.recent": "சமீபத்திய நூலகங்கள்", - "preview_panel.confirm_remove": "இந்த \"%{self.lib.get_field_attr(field, \"name\")}\" புலத்தை நிச்சயமாக அகற்ற விரும்புகிறீர்களா?", - "preview_panel.edit_name": "திருத்து", - "preview_panel.missing_location": "இடம் காணவில்லை", - "preview_panel.mixed_data": "கலப்பு தரவு", - "preview_panel.no_items_selected": "உருப்படிகள் எதுவும் தேர்ந்தெடுக்கப்படவில்லை", - "preview_panel.unknown_field_type": "அறியப்படாத புல வகை", - "preview_panel.update_widgets": "[நுழைவு குழு] விட்ஜெட்டுகளை புதுப்பிக்கவும் (%{self.driver.selected})", - "progression.running_macros.new_entries": "புதிய நுழைவுகளில் செயல்முறைகளை இயக்கப்படுகின்றது", - "progression.running_macros.one_new_entry": "1/ இல் கட்டமைக்கப்பட்ட செயல்முறைகளை இயக்கப்படுகிறது %{len(new_ids)} புதிய பதிவுகள்", - "progression.running_macros.several_new_entry": "%{x + 1} இல் கட்டமைக்கப்பட்ட செயல்முறைகளை இயக்கப்படுகிறது / %{len(new_ids)} புதிய பதிவுகள்", - "relink_unlinked.attempt_relink": "%{x[0]+1}/%{len(self.lib.missing_files)} உள்ளீடுகளை மீண்டும் இணைக்க முயற்சிக்கிறது, %{self.fixed} மீண்டும் இணைக்கப்பட்டது", - "relink_unlinked.title": "உள்ளீடுகள் மீண்டும் இணைக்கப்படுகின்றது", - "splash.open_library": "நூலகம் திறக்கப்படுகின்றது", - "status.backup_success": "நூலக காப்புப் பிரதி சேமிக்கப்பட்டது:", - "status.enumerate_query": "வினவு:%{query}, சட்டகம்: %{i}, நீளம்: %{len(f)}", - "status.number_results_found": "\"%{query}\" இல் %{len(all_items)} முடிவுகள் கிடைத்தன (%{format_timespan(end_time - start_time)})", - "status.results_found": "முடிவுகள்", - "status.save_success": "நூலகம் சேமிக்கப்பட்டு மூடப்பட்டது!", - "status.search_library_query": "நூலகத்தைத் தேடுகிறது", + "preview.no_selection": "உருப்படிகள் எதுவும் தேர்ந்தெடுக்கப்படவில்லை", + "status.library_backup_success": "நூலக காப்புப் பிரதி சேமிக்கப்பட்டது:", + "status.library_save_success": "நூலகம் சேமிக்கப்பட்டு மூடப்பட்டது!", + "status.library_search_query": "நூலகத்தைத் தேடுகிறது", + "status.results": "முடிவுகள்", "tag.add": "குறிச்சொல் சேர்க்க", - "tag.add_search": "தேடலில் சேர்", - "tag.library": "நூலக குறிச்சொற்கள்", + "tag.add_to_search": "தேடலில் சேர்", + "tag.aliases": "மாற்றுப்பெயர்கள்", + "tag.color": "நிறம்", + "tag.name": "பெயர்", "tag.new": "புதிய குறிச்சொல்", + "tag.parent_tags": "பெற்றோர் குறிச்சொற்கள்", + "tag.parent_tags.add": "பெற்றோர் குறிச்சொற்களைச் சேர்க்க", "tag.search_for_tag": "குறிச்சொல்லைத் தேடு", - "text_line_edit.unknown_event_type": "அறியப்படாத நிகழ்வு வகை: %{event}", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.shorthand": "சுருக்கெழுத்து", + "tag_manager.title": "நூலக குறிச்சொற்கள்" } diff --git a/tagstudio/resources/translations/tok.json b/tagstudio/resources/translations/tok.json index 3832c5a5..c0056156 100644 --- a/tagstudio/resources/translations/tok.json +++ b/tagstudio/resources/translations/tok.json @@ -1,144 +1,92 @@ { - "add_field.add": "pana e sona", - "build_tags.add_parent_tags": "o pana e poki mama", - "build_tags.parent_tags": "poki mama", - "delete_unlinked.confirm": "mi weka e ijo %{len(self.lib.missing_files)}. ni li pona anu seme?", - "delete_unlinked.delete_entries": "mi weka e ijo", - "delete_unlinked.delete_unlinked": "o weka e ijo pi ijo lon ala", - "delete_unlinked.deleting_number_entries": "mi weka e ijo %{x[0]+1}/{len(self.lib.missing_files)} pi ijo lon ala", - "dialog.open_create_library": "open/sin e tomo", - "dialog.refresh_directories": "mi kama jo e sin lon tomo", - "dialog.save_library": "awen e tomo", - "dialog.scan_directories": "mi alasa e ijo sin lon tomo...\nmi kama pona...", - "dialog.scan_directories.new_files": "mi alasa e ijo sin lon tomo...\nmi lukin e ijo %{x + 1}. ijo %{len(self.lib.files_not_in_library)} li sin", - "file_extension.add_extension": "o pana e nimi anpa", - "file_extension.list_mode": "nasin kulupu:", - "file_opener.command_not_found": "mi ken ala alasa e toki lawa '%{command_name}' lon PATH", - "file_opener.not_found": "mi ken ala alasa e ijo:", - "file_opener.open_file": "mi open e ijo:}", - "fix_dupes.advice_label": "jasima li pini la, sina ken kepeken ilo DupeGuru. ilo DupeGuru li ken weka e ijo ike. ni li pini la, o kepeken e nasin \"o pona e ijo pi ijo lon ala\" lon ilo TagStudio. ni li weka e ijo pi ijo lon ala.", - "fix_dupes.fix_dupes": "pona e ijo sama", - "fix_dupes.load_file": "o kama sona e ijo DupeGuru", - "fix_dupes.mirror_description": "o jasima e sona kama lon kulupu sama ale. sona ale li kama wan li weka ala li kama mute ala. ni li weka ala e sona e ijo.", - "fix_dupes.mirror_entries": "o jasima e ijo", - "fix_dupes.name_filter": "ijo DupeGuru (*.dupeguru)", - "fix_dupes.no_file_match": "ijo sama: ala", - "fix_dupes.no_file_selected": "sina o anu e ijo DupeGuru", - "fix_dupes.number_file_match": "ijo sama: %{count}", - "fix_dupes.open_result_files": "o open e sona pini tan ilo DupeGuru", - "fix_unlinked.delete_unlinked": "o weka e ijo pi ijo lon ala", - "fix_unlinked.description": "ijo ale li jo e ijo lon. ona li tawa anu weka, ona li jo ala e ijo lon. ijo pi ijo lon li ken alasa e tomo li ken kama jo e ijo lon. ante la sina ken pana ijo lon tawa ijo. ante la sina ken weka e ijo.", - "fix_unlinked.duplicate_description": "ken la, ijo mute li jo e ijo lon sama. ni li \"ijo sama\". sina wan e ona la, ijo sama li kama wan li jo e sona ale tan ijo sama ale.", - "fix_unlinked.fix_unlinked": "o pona e ijo pi ijo lon ala", - "fix_unlinked.manual_relink": "sina o pana e ijo lon tawa ijo", - "fix_unlinked.merge_dupes": "o kama wan e ijo sama", - "fix_unlinked.refresh_dupes": "o kama jo e sona tan ijo sama", - "fix_unlinked.scan_library.label": "mi o alasa e ijo pi ijo lon ala...", - "fix_unlinked.scan_library.title": "mi o lukin e tomo", - "fix_unlinked.search_and_relink": "o alasa o pana e ijo lon tawa ijo", + "entries.duplicate.merge.label": "ijo sama li kama wan", + "entries.duplicate.refresh": "o kama jo e sona tan ijo sama", + "entries.duplicates.description": "ken la, ijo mute li jo e ijo lon sama. ni li \"ijo sama\". sina wan e ona la, ijo sama li kama wan li jo e sona ale tan ijo sama ale.", + "entries.mirror": "jasima", + "entries.mirror.confirmation": "mi jasima e ijo %{len(self.lib.dupe_files)}. ni li pona anu seme?", + "entries.mirror.label": "mi jasima e ijo 1/%{count}...", + "entries.mirror.title": "mi jasima e ijo", + "entries.tags": "poki", + "entries.unlinked.delete": "o weka e ijo pi ijo lon ala", + "entries.unlinked.delete.confirm": "mi weka e ijo %{len(self.lib.missing_files)}. ni li pona anu seme?", + "entries.unlinked.delete.deleting": "mi weka e ijo", + "entries.unlinked.delete.deleting_count": "mi weka e ijo %{x[0]+1}/{len(self.lib.missing_files)} pi ijo lon ala", + "entries.unlinked.description": "ijo ale li jo e ijo lon. ona li tawa anu weka, ona li jo ala e ijo lon. ijo pi ijo lon li ken alasa e tomo li ken kama jo e ijo lon. ante la sina ken pana ijo lon tawa ijo. ante la sina ken weka e ijo.", + "entries.unlinked.refresh_all": "o kama jo sin tan ale", + "entries.unlinked.relink.attempting": "mi o pana e ijo lon tawa ijo %{x[0]+1}/%{len(self.lib.missing_files)}. mi pana e ijo lon tawa ijo %{self.fixed}", + "entries.unlinked.relink.manual": "sina o pana e ijo lon tawa ijo", + "entries.unlinked.relink.title": "mi pana e ijo lon tawa ijo", + "entries.unlinked.scanning": "mi o alasa e ijo pi ijo lon ala...", + "entries.unlinked.search_and_relink": "o alasa o pana e ijo lon tawa ijo", + "entries.unlinked.title": "o pona e ijo pi ijo lon ala", + "file.date_created": "tenpo pi kama sin", + "file.date_modified": "tenpo pi kama ante", + "file.dimensions": "suli", + "file.duplicates.dupeguru.advice": "jasima li pini la, sina ken kepeken ilo DupeGuru. ilo DupeGuru li ken weka e ijo ike. ni li pini la, o kepeken e nasin \"o pona e ijo pi ijo lon ala\" lon ilo TagStudio. ni li weka e ijo pi ijo lon ala.", + "file.duplicates.dupeguru.file_extension": "ijo DupeGuru (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "o kama sona e ijo DupeGuru", + "file.duplicates.dupeguru.no_file": "sina o anu e ijo DupeGuru", + "file.duplicates.dupeguru.open_file": "o open e sona pini tan ilo DupeGuru", + "file.duplicates.fix": "pona e ijo sama", + "file.duplicates.matches": "ijo sama: %{count}", + "file.duplicates.matches_uninitialized": "ijo sama: ala", + "file.duplicates.mirror.description": "o jasima e sona kama lon kulupu sama ale. sona ale li kama wan li weka ala li kama mute ala. ni li weka ala e sona e ijo.", + "file.duplicates.mirror_entries": "o jasima e ijo", + "file.not_found": "mi ken ala alasa e ijo:", + "file.open_file": "open e ijo", + "file.open_location.generic": "open e ijo lon ilo alasa", + "folders_to_tags.converting": "mi o pali e poki tan poki tomo", "folders_to_tags.description": "ni li pali e poki tan poki tona li pana e poki sin tawa ijo lon tomo.\n ilo ni li pali e anpa.", - "folders_to_tags.folders_to_tags": "mi o pali e poki tan poki tomo", + "folders_to_tags.open_all": "open e ale", "folders_to_tags.title": "o pali e poki tan poki tomo", "generic.add": "o pana", - "generic.aliases": "nimi ante", "generic.apply": "o pana", "generic.cancel": "o ala", - "generic.close_all": "weka e ale", - "generic.color": "kule", "generic.delete": "o weka", "generic.done": "pona", - "generic.exclude": "o kepeken ala", - "generic.file_extension": "nimi lon nimi ijo anpa", - "generic.include": "o kepeken", - "generic.mirror": "jasima", - "generic.name": "nimi", - "generic.open_all": "open e ale", - "generic.open_file": "open e ijo", - "generic.open_file_explorer": "open e ijo lon ilo alasa", - "generic.refresh_all": "o kama jo sin tan ale", - "generic.remove_field": "weka e sona", - "generic.search_tags": "o alasa e poki", - "generic.shorthand": "nimi lili", - "home.base_title": "ilo TagStudio pi pini ala", - "home.include_all_tags": "AND (kepeken poki ale)", - "home.include_any_tag": "OR (kepeken poki wan. poki ale li ken)", - "home.main_window": "lipu suli", + "generic.edit": "ante", + "generic.recent_libraries": "tomo pi tenpo poka", "home.search": "alasa", "home.search_entries": "ijo alasa", + "home.search_tags": "o alasa e poki", "home.thumbnail_size": "suli sitelen", - "landing.open_button": "open/sin e tomo %{open_shortcut_text}", - "library.Artist": "jan pali sitelen", - "library.anthology": "kulupu toki", - "library.archived": "tenpo pi kama awen", - "library.author": "jan pali toki", - "library.book": "lipu toki", - "library.collation": "poki ijo", - "library.comic": "lipu sitelen", - "library.comments": "toki isipin", - "library.composer": "jan pali pi kalama musi", - "library.content_tags": "poki pi jo ijo", - "library.date": "tenpo", - "library.date_created": "tenpo pi kama sin", - "library.date_modified": "tenpo pi kama ante", - "library.date_published": "tenpo pana", - "library.date_released": "tenpo pi kama open", - "library.date_taken": "tenpo lanpan", - "library.date_uploaded": "tenpo pi kama lon lipu", - "library.description": "toki ni", - "library.favorite": "pona mute", - "library.guest_artist": "jan pali namako", - "library.magazine": "lipu sitelen toki", - "library.manga": "kulupu pi lipu sitelen", - "library.meta_tags": "poki pi sona ijo", - "library.notes": "toki sina", - "library.publisher": "jan esun", - "library.series": "kulupu", - "library.source": "tan", - "library.tags": "poki", - "library.title": "nimi", - "library.url": "nimi linluwi", - "library.volume": "nanpa", + "ignore_list.add_extension": "o pana e nimi anpa", + "ignore_list.mode.exclude": "o kepeken ala", + "ignore_list.mode.include": "o kepeken", + "ignore_list.mode.label": "nasin kulupu:", + "ignore_list.title": "nimi lon nimi ijo anpa", + "library.field.add": "pana e sona", + "library.field.confirm_remove": "sina weka e sona poki \"%{self.lib.get_field_attr(field, \"name\")}\". ni li pona anu seme?", + "library.field.mixed_data": "sona ante", + "library.field.remove": "weka e sona", + "library.missing": "ma li lon ala", + "library.name": "tomo", + "library.refresh.scanning": "mi alasa e ijo sin lon tomo...\nmi lukin e ijo %{x + 1}. ijo %{len(self.lib.files_not_in_library)} li sin", + "library.refresh.scanning_preparing": "mi alasa e ijo sin lon tomo...\nmi kama pona...", + "library.refresh.title": "mi kama jo e sin lon tomo", + "library.scan_library.title": "mi o lukin e tomo", + "macros.running.dialog.new_entries": "mi pali lon ijo sin %{x + 1}/%{len(new_ids)}", + "macros.running.dialog.title": "mi pali lon ijo sin", "menu.edit": "ante", "menu.file": "ijo", "menu.help": "mi jo e toki seme", "menu.macros": "ilo pali", "menu.tools": "ilo", "menu.window": "lipu", - "merge.merge_dupe_entries": "ijo sama li kama wan", - "merge.window_title": "ijo sama li kama wan", - "mirror_entities.are_you_sure": "mi jasima e ijo %{len(self.lib.dupe_files)}. ni li pona anu seme?", - "mirror_entities.label": "mi jasima e ijo 1/%{count}...", - "mirror_entities.title": "mi jasima e ijo", - "open_library.library_creation_return_code": "tomo li open li toki e ni:", - "open_library.no_tagstudio_library_found": "tomo lon '%{path}' li lon ala. mi pali e tomo.", - "open_library.title": "tomo", - "preview.dimensions": "suli", - "preview.recent": "tomo pi tenpo poka", - "preview_panel.confirm_remove": "sina weka e sona poki \"%{self.lib.get_field_attr(field, \"name\")}\". ni li pona anu seme?", - "preview_panel.edit_name": "ante", - "preview_panel.missing_location": "ma li lon ala", - "preview_panel.mixed_data": "sona ante", - "preview_panel.no_items_selected": "ijo ala li anu", - "preview_panel.unknown_field_type": "mi sona ala e kule pi sona poki", - "preview_panel.update_widgets": "[LIPU OPEN] O SIN E LIPU LILI (%{self.driver.selected})", - "progression.running_macros.new_entries": "mi pali lon ijo sin", - "progression.running_macros.one_new_entry": "mi pali lon ijo sin 1/%{len(new_ids)}", - "progression.running_macros.several_new_entry": "mi pali lon ijo sin %{x + 1}/%{len(new_ids)}", - "relink_unlinked.attempt_relink": "mi o pana e ijo lon tawa ijo %{x[0]+1}/%{len(self.lib.missing_files)}. mi pana e ijo lon tawa ijo %{self.fixed}", - "relink_unlinked.title": "mi pana e ijo lon tawa ijo", - "splash.open_library": "mi open e tomo", - "status.backup_success": "tomo sama li lon:", - "status.enumerate_query": "seme: %{query}. sitelen: %{i}. nanpa: %{len(f)}", - "status.number_results_found": "%{len(all_items)} mi jo e ijo \"%{query}\" (%{format_timespan(end_time - start_time)})", - "status.results_found": "jo", - "status.save_success": "tomo li awen li weka!", - "status.search_library_query": "mi alasa e", + "preview.no_selection": "ijo ala li anu", + "status.library_backup_success": "tomo sama li lon:", + "status.library_save_success": "tomo li awen li weka!", + "status.library_search_query": "mi alasa e", + "status.results": "jo", "tag.add": "o pana e poki", - "tag.add_search": "pana tawa alasa", - "tag.library": "poki tomo", + "tag.add_to_search": "pana tawa alasa", + "tag.aliases": "nimi ante", + "tag.color": "kule", + "tag.name": "nimi", "tag.new": "poki sin", + "tag.parent_tags": "poki mama", + "tag.parent_tags.add": "o pana e poki mama", "tag.search_for_tag": "o alasa e poki", - "text_line_edit.unknown_event_type": "mi sona ala e ni: %{event}", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.shorthand": "nimi lili", + "tag_manager.title": "poki tomo" } diff --git a/tagstudio/resources/translations/tr.json b/tagstudio/resources/translations/tr.json index 92c149b7..e50fabd9 100644 --- a/tagstudio/resources/translations/tr.json +++ b/tagstudio/resources/translations/tr.json @@ -1,144 +1,92 @@ { - "add_field.add": "Alan Ekle", - "build_tags.add_parent_tags": "Üst Etiketler Ekle", - "build_tags.parent_tags": "Üst Etiketler", - "delete_unlinked.confirm": "%{len(self.lib.missing_files) tane kayıtları silmek istediğinden emin misin?", - "delete_unlinked.delete_entries": "Kayıtlar Siliniyor", - "delete_unlinked.delete_unlinked": "Kopuk Kayıtları Sil", - "delete_unlinked.deleting_number_entries": "%{x[0]+1}/{len(self.lib.missing_files)} Kopuk Kayıt Siliniyor", - "dialog.open_create_library": "Kütüphane Aç/Oluştur", - "dialog.refresh_directories": "Dizinler Yenileniyor", - "dialog.save_library": "Kütüphaneyi Kaydet", - "dialog.scan_directories": "Yeni Dosyalar için Dizinler Taranıyor...\nHazırlanıyor...", - "dialog.scan_directories.new_files": "Yeni Dosyalar için Dizinler Taranıyor...\n%{x + 1} File%{\"s\" if x + 1 != 1 else \"\"} Arandı, %{len(self.lib.files_not_in_library)} Yeni Dosya Bulundu", - "file_extension.add_extension": "Dosya Uzantısı Ekle", - "file_extension.list_mode": "Listeleme Modu:", - "file_opener.command_not_found": "Sistem PATH'inde %{command_name} komutu bulunamadı", - "file_opener.not_found": "Dosya bulunamadı:", - "file_opener.open_file": "Dosya açılıyor:}", - "fix_dupes.advice_label": "Yansıtma işleminden sonra, DupeGuru'yu kullanarak istenmeyen dosyaları silebilirsin. İşlem sonrasında, kopuk kayıtları silmek için TagStudio'nun Araçlar menüsünden \"Kopuk Kayıtları Düzelt\" özelliğini kullanabilirsin.", - "fix_dupes.fix_dupes": "Yinelenen Dosyaları Düzelt", - "fix_dupes.load_file": "DupeGuru Dosyasını Yükle", - "fix_dupes.mirror_description": "Kayıt verilerini bulunan her bir yinelemeye yansıtır, alanları kopyalamadan veya silmeden tüm verileri birleştirir. Bu operasyon herhangi bir dosya veya veri silmeyecek.", - "fix_dupes.mirror_entries": "Kayıtları Yansıt", - "fix_dupes.name_filter": "DupeGuru Dosyaları (*.dupeguru)", - "fix_dupes.no_file_match": "Bulunan Yinelenen Dosyalar: Yok", - "fix_dupes.no_file_selected": "Seçili DupeGuru Dosyası Yok", - "fix_dupes.number_file_match": "Bulunan Yinelenen Dosyalar: %{count}", - "fix_dupes.open_result_files": "DupeGuru Sonuçlar Dosyasını Aç", - "fix_unlinked.delete_unlinked": "Kopuk Kayıtları Sil", - "fix_unlinked.description": "Kütüphanenizdeki her bir kayıt, dizinlerinizden bir tane dosya ile eşleştirilmektedir. Eğer bir kayıta bağlı dosya TagStudio dışında taşınır veya silinirse, o dosya artık kopuk olarak sayılır. Kopuk kayıtlar dizinlerinizde arama yapılırken otomatik olarak tekrar eşleştirilebilir, manuel olarak sizin tarafınızdan eşleştirilebilir veya isteğiniz üzere silinebilir.", - "fix_unlinked.duplicate_description": "Yinelenen kayıtlar, diskinizde aynı dosyaya işaret eden birden fazla kayıt olarak tanımlanmaktadır. Bu kayıtları birleştirdiğinizde, yinelenen tüm kayıtların içerisindeki etiketler ve metadata bilgisi tek bir tane kayıt üzerinde birleştirilecektir. Bu, \"yinelenen dosyalar\" ile karıştırılmamalıdır. Yinelenen dosyalar, TagStudio'nun dışında birden fazla kere bulunan dosyalarınızdır.", - "fix_unlinked.fix_unlinked": "Kopuk Kayıtları Düzelt", - "fix_unlinked.manual_relink": "Manuel Yeniden Eşleştirme", - "fix_unlinked.merge_dupes": "Yinelenen Kayıtları Birleştir", - "fix_unlinked.refresh_dupes": "Yinelenen Kayıtları Yenile", - "fix_unlinked.scan_library.label": "Kütüphane Kopuk Kayıtlar için Taranıyor...", - "fix_unlinked.scan_library.title": "Kütüphane Taranıyor", - "fix_unlinked.search_and_relink": "Ara && Yeniden Eşleştir", + "entries.duplicate.merge.label": "Yinelenen Kayıtlar Birleştiriliyor", + "entries.duplicate.refresh": "Yinelenen Kayıtları Yenile", + "entries.duplicates.description": "Yinelenen kayıtlar, diskinizde aynı dosyaya işaret eden birden fazla kayıt olarak tanımlanmaktadır. Bu kayıtları birleştirdiğinizde, yinelenen tüm kayıtların içerisindeki etiketler ve metadata bilgisi tek bir tane kayıt üzerinde birleştirilecektir. Bu, \"yinelenen dosyalar\" ile karıştırılmamalıdır. Yinelenen dosyalar, TagStudio'nun dışında birden fazla kere bulunan dosyalarınızdır.", + "entries.mirror": "Yansıt", + "entries.mirror.confirmation": "%{len(self.lib.dupe_files)} kaydı yansıtmak istediğinden emin misin?", + "entries.mirror.label": "1/%{count} Kayıt Yansıtılıyor...", + "entries.mirror.title": "Kayıtlar Yansıtılıyor", + "entries.tags": "Etiketler", + "entries.unlinked.delete": "Kopuk Kayıtları Sil", + "entries.unlinked.delete.confirm": "%{len(self.lib.missing_files) tane kayıtları silmek istediğinden emin misin?", + "entries.unlinked.delete.deleting": "Kayıtlar Siliniyor", + "entries.unlinked.delete.deleting_count": "%{x[0]+1}/{len(self.lib.missing_files)} Kopuk Kayıt Siliniyor", + "entries.unlinked.description": "Kütüphanenizdeki her bir kayıt, dizinlerinizden bir tane dosya ile eşleştirilmektedir. Eğer bir kayıta bağlı dosya TagStudio dışında taşınır veya silinirse, o dosya artık kopuk olarak sayılır. Kopuk kayıtlar dizinlerinizde arama yapılırken otomatik olarak tekrar eşleştirilebilir, manuel olarak sizin tarafınızdan eşleştirilebilir veya isteğiniz üzere silinebilir.", + "entries.unlinked.refresh_all": "Tümünü Yenile", + "entries.unlinked.relink.attempting": "%{x[0]+1}/%{len(self.lib.missing_files)} Kayıt Yeniden Eşleştirilmeye Çalışılıyor, %{self.fixed} Başarıyla Yeniden Eşleştirildi", + "entries.unlinked.relink.manual": "Manuel Yeniden Eşleştirme", + "entries.unlinked.relink.title": "Kayıtlar Yeniden Eşleştiriliyor", + "entries.unlinked.scanning": "Kütüphane Kopuk Kayıtlar için Taranıyor...", + "entries.unlinked.search_and_relink": "Ara && Yeniden Eşleştir", + "entries.unlinked.title": "Kopuk Kayıtları Düzelt", + "file.date_created": "Oluşturulma Tarihi", + "file.date_modified": "Değiştirilme Tarihi", + "file.dimensions": "Ölçüler", + "file.duplicates.dupeguru.advice": "Yansıtma işleminden sonra, DupeGuru'yu kullanarak istenmeyen dosyaları silebilirsin. İşlem sonrasında, kopuk kayıtları silmek için TagStudio'nun Araçlar menüsünden \"Kopuk Kayıtları Düzelt\" özelliğini kullanabilirsin.", + "file.duplicates.dupeguru.file_extension": "DupeGuru Dosyaları (*.dupeguru)", + "file.duplicates.dupeguru.load_file": "DupeGuru Dosyasını Yükle", + "file.duplicates.dupeguru.no_file": "Seçili DupeGuru Dosyası Yok", + "file.duplicates.dupeguru.open_file": "DupeGuru Sonuçlar Dosyasını Aç", + "file.duplicates.fix": "Yinelenen Dosyaları Düzelt", + "file.duplicates.matches": "Bulunan Yinelenen Dosyalar: %{count}", + "file.duplicates.matches_uninitialized": "Bulunan Yinelenen Dosyalar: Yok", + "file.duplicates.mirror.description": "Kayıt verilerini bulunan her bir yinelemeye yansıtır, alanları kopyalamadan veya silmeden tüm verileri birleştirir. Bu operasyon herhangi bir dosya veya veri silmeyecek.", + "file.duplicates.mirror_entries": "Kayıtları Yansıt", + "file.not_found": "Dosya bulunamadı:", + "file.open_file": "Dosya aç", + "file.open_location.generic": "Dosyayı Dosya Gezgininde Aç", + "folders_to_tags.converting": "Klasörler Etiketlere Dönüştürülüyor", "folders_to_tags.description": "Klasörlerinin yapısına bakarak etiketler oluşturur ve bu etiketleri kayıtlarına uygular.\nAşağıdaki yapı, oluşturulacak tüm etiketleri ve o etiketlerin hangi kayıtlarına uygulanacağını göstermektedir.", - "folders_to_tags.folders_to_tags": "Klasörler Etiketlere Dönüştürülüyor", + "folders_to_tags.open_all": "Tümünü Aç", "folders_to_tags.title": "Klasörlerden Etiketler Oluştur", "generic.add": "Ekle", - "generic.aliases": "Takma Adlar", "generic.apply": "Uygula", "generic.cancel": "İptal", - "generic.close_all": "Tümünü Kapat", - "generic.color": "Renk", "generic.delete": "Sil", "generic.done": "Tamamlandı", - "generic.exclude": "Hariç Tut", - "generic.file_extension": "Dosya Uzantıları", - "generic.include": "Dahil Et", - "generic.mirror": "Yansıt", - "generic.name": "İsim", - "generic.open_all": "Tümünü Aç", - "generic.open_file": "Dosya aç", - "generic.open_file_explorer": "Dosyayı Dosya Gezgininde Aç", - "generic.refresh_all": "Tümünü Yenile", - "generic.remove_field": "Alan Kaldır", - "generic.search_tags": "Etiketleri Araştır", - "generic.shorthand": "Kısaltma", - "home.base_title": "TagStudio Alpha", - "home.include_all_tags": "Ve (Tüm Etiketleri Dikkate Alır)", - "home.include_any_tag": "Veya (Herhangi Bir Etiketi Dikkate Alır)", - "home.main_window": "Ana Pencere", + "generic.edit": "Düzenle", + "generic.recent_libraries": "Son Kütüphaneler", "home.search": "Ara", "home.search_entries": "library", + "home.search_tags": "Etiketleri Araştır", "home.thumbnail_size": "Küçük Resim Boyutu", - "landing.open_button": "Kütüphane Aç/Oluştur %{open_shortcut_text}", - "library.Artist": "Sanatçı", - "library.anthology": "Antoloji", - "library.archived": "Arşivlenme Tarihi", - "library.author": "Sahibi", - "library.book": "Kitap", - "library.collation": "Sıralama", - "library.comic": "Dergi", - "library.comments": "Yorumlar", - "library.composer": "Besteci", - "library.content_tags": "İçerik Etiketleri", - "library.date": "Tarih", - "library.date_created": "Oluşturulma Tarihi", - "library.date_modified": "Değiştirilme Tarihi", - "library.date_published": "Yayınlanma Tarihi", - "library.date_released": "Çıkış Tarihi", - "library.date_taken": "Alınma Tarihi", - "library.date_uploaded": "Yüklenme Tarihi", - "library.description": "Açıklama", - "library.favorite": "Favori", - "library.guest_artist": "Konuk Sanatçı", - "library.magazine": "Magazin", - "library.manga": "Manga", - "library.meta_tags": "Meta Etiketler", - "library.notes": "Notlar", - "library.publisher": "Yayımcı", - "library.series": "Dizi", - "library.source": "Kaynak", - "library.tags": "Etiketler", - "library.title": "Başlık", - "library.url": "URL", - "library.volume": "Ses Seviyesi", + "ignore_list.add_extension": "Dosya Uzantısı Ekle", + "ignore_list.mode.exclude": "Hariç Tut", + "ignore_list.mode.include": "Dahil Et", + "ignore_list.mode.label": "Listeleme Modu:", + "ignore_list.title": "Dosya Uzantıları", + "library.field.add": "Alan Ekle", + "library.field.confirm_remove": "Bu \"%{self.lib.get_field_attr(field, \"name\")}\" alanını silmek istediğinden emin misin?", + "library.field.mixed_data": "Karışık Veri", + "library.field.remove": "Alan Kaldır", + "library.missing": "Lokasyon bulunamadı", + "library.name": "Kütüphane", + "library.refresh.scanning": "Yeni Dosyalar için Dizinler Taranıyor...\n%{x + 1} File%{\"s\" if x + 1 != 1 else \"\"} Arandı, %{len(self.lib.files_not_in_library)} Yeni Dosya Bulundu", + "library.refresh.scanning_preparing": "Yeni Dosyalar için Dizinler Taranıyor...\nHazırlanıyor...", + "library.refresh.title": "Dizinler Yenileniyor", + "library.scan_library.title": "Kütüphane Taranıyor", + "macros.running.dialog.new_entries": "%{x + 1}/%{len(new_ids)} Tane Yeni Kayıt Üzerinde Yapılandırılmış Makrolar Çalıştırılıyor", + "macros.running.dialog.title": "Yeni Kayıtlar Üzerinde Makrolar Çalıştırılıyor", "menu.edit": "Düzenle", "menu.file": "Dosya", "menu.help": "Yardım", "menu.macros": "Makrolar", "menu.tools": "Araçlar", "menu.window": "Pencere", - "merge.merge_dupe_entries": "Yinelenen Kayıtlar Birleştiriliyor", - "merge.window_title": "Yinelenen Kayıtlar Birleştiriliyor", - "mirror_entities.are_you_sure": "%{len(self.lib.dupe_files)} kaydı yansıtmak istediğinden emin misin?", - "mirror_entities.label": "1/%{count} Kayıt Yansıtılıyor...", - "mirror_entities.title": "Kayıtlar Yansıtılıyor", - "open_library.library_creation_return_code": "Kütüphane Oluşturmaktan Dönen Kod:", - "open_library.no_tagstudio_library_found": "'%{path}' konumunda herhangi bir TagStudio kütüphanesi bulunamadı. Yeni bir tane oluşturuluyor.", - "open_library.title": "Kütüphane", - "preview.dimensions": "Ölçüler", - "preview.recent": "Son Kütüphaneler", - "preview_panel.confirm_remove": "Bu \"%{self.lib.get_field_attr(field, \"name\")}\" alanını silmek istediğinden emin misin?", - "preview_panel.edit_name": "Düzenle", - "preview_panel.missing_location": "Lokasyon bulunamadı", - "preview_panel.mixed_data": "Karışık Veri", - "preview_panel.no_items_selected": "Hiçbir Öğe Seçilmedi", - "preview_panel.unknown_field_type": "Bilinmeyen Alan Türü", - "preview_panel.update_widgets": "[KAYIT PANELİ] WIDGET'LARI GÜNCELLE (%{self.driver.selected})", - "progression.running_macros.new_entries": "Yeni Kayıtlar Üzerinde Makrolar Çalıştırılıyor", - "progression.running_macros.one_new_entry": "1/%{len(new_ids)} Tane Yeni Kayıtlarda Yapılandırılmış Makrolar Çalıştırılıyor", - "progression.running_macros.several_new_entry": "%{x + 1}/%{len(new_ids)} Tane Yeni Kayıt Üzerinde Yapılandırılmış Makrolar Çalıştırılıyor", - "relink_unlinked.attempt_relink": "%{x[0]+1}/%{len(self.lib.missing_files)} Kayıt Yeniden Eşleştirilmeye Çalışılıyor, %{self.fixed} Başarıyla Yeniden Eşleştirildi", - "relink_unlinked.title": "Kayıtlar Yeniden Eşleştiriliyor", - "splash.open_library": "Kütüphane Açılıyor", - "status.backup_success": "Kütüphane Yedeklemesi Şuraya Kaydedildi:", - "status.enumerate_query": "Sorgu:%{query}, Kare: %{i}, Uzunluk: %{len(f)}", - "status.number_results_found": "\"%{query}\" (%{format_timespan(end_time - start_time)}) Sorgusu için %{len(all_items)} Sonuç Bulundu", - "status.results_found": "Sonuçlar", - "status.save_success": "Kütüphane Kaydedildi ve Çıkış Yapıldı!", - "status.search_library_query": "Kütüphane Aranıyor", + "preview.no_selection": "Hiçbir Öğe Seçilmedi", + "status.library_backup_success": "Kütüphane Yedeklemesi Şuraya Kaydedildi:", + "status.library_save_success": "Kütüphane Kaydedildi ve Çıkış Yapıldı!", + "status.library_search_query": "Kütüphane Aranıyor", + "status.results": "Sonuçlar", "tag.add": "Etiket Ekle", - "tag.add_search": "Aramaya Ekle", - "tag.library": "Kütüphane Etiketleri", + "tag.add_to_search": "Aramaya Ekle", + "tag.aliases": "Takma Adlar", + "tag.color": "Renk", + "tag.name": "İsim", "tag.new": "Yeni Etiket", + "tag.parent_tags": "Üst Etiketler", + "tag.parent_tags.add": "Üst Etiketler Ekle", "tag.search_for_tag": "Etiket Ara", - "text_line_edit.unknown_event_type": "bilinmeyen event türü: %{event}", - "tooltip.open_library": "Ctrl+O", - "tooltip.save_library": "Ctrl+S" + "tag.shorthand": "Kısaltma", + "tag_manager.title": "Kütüphane Etiketleri" } diff --git a/tagstudio/src/core/library/alchemy/library.py b/tagstudio/src/core/library/alchemy/library.py index 043d9262..186cd797 100644 --- a/tagstudio/src/core/library/alchemy/library.py +++ b/tagstudio/src/core/library/alchemy/library.py @@ -619,6 +619,7 @@ class Library: ) session.expunge_all() + return res def get_all_child_tag_ids(self, tag_id: int) -> list[int]: @@ -901,9 +902,9 @@ class Library: def add_tag( self, tag: Tag, - subtag_ids: set[int] | None = None, - alias_names: set[str] | None = None, - alias_ids: set[int] | None = None, + subtag_ids: list[int] | set[int] | None = None, + alias_names: list[str] | set[str] | None = None, + alias_ids: list[int] | set[int] | None = None, ) -> Tag | None: with Session(self.engine, expire_on_commit=False) as session: try: @@ -1077,9 +1078,9 @@ class Library: def update_tag( self, tag: Tag, - subtag_ids: set[int] | None = None, - alias_names: set[str] | None = None, - alias_ids: set[int] | None = None, + subtag_ids: list[int] | set[int] | None = None, + alias_names: list[str] | set[str] | None = None, + alias_ids: list[int] | set[int] | None = None, ) -> None: """Edit a Tag in the Library.""" self.add_tag(tag, subtag_ids, alias_names, alias_ids) diff --git a/tagstudio/src/core/library/alchemy/visitors.py b/tagstudio/src/core/library/alchemy/visitors.py index 6f73a45a..1756bb08 100644 --- a/tagstudio/src/core/library/alchemy/visitors.py +++ b/tagstudio/src/core/library/alchemy/visitors.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING from sqlalchemy import and_, distinct, func, or_, select from sqlalchemy.orm import Session from sqlalchemy.sql.expression import BinaryExpression, ColumnExpressionArgument -from src.core.media_types import MediaCategories +from src.core.media_types import FILETYPE_EQUIVALENTS, MediaCategories from src.core.query_lang import BaseVisitor from src.core.query_lang.ast import AST, ANDList, Constraint, ConstraintType, Not, ORList, Property @@ -17,6 +17,13 @@ else: Library = None # don't import .library because of circular imports +def get_filetype_equivalency_list(item: str) -> list[str] | set[str]: + for s in FILETYPE_EQUIVALENTS: + if item in s: + return s + return [item] + + class SQLBoolExpressionBuilder(BaseVisitor[ColumnExpressionArgument]): def __init__(self, lib: Library) -> None: super().__init__() @@ -73,7 +80,9 @@ class SQLBoolExpressionBuilder(BaseVisitor[ColumnExpressionArgument]): break return Entry.suffix.in_(map(lambda x: x.replace(".", ""), extensions)) elif node.type == ConstraintType.FileType: - return Entry.suffix.ilike(node.value) + return or_( + *[Entry.suffix.ilike(ft) for ft in get_filetype_equivalency_list(node.value)] + ) elif node.type == ConstraintType.Special: # noqa: SIM102 unnecessary once there is a second special constraint if node.value.lower() == "untagged": return ~Entry.id.in_( diff --git a/tagstudio/src/core/media_types.py b/tagstudio/src/core/media_types.py index 78755aac..be9ebdbd 100644 --- a/tagstudio/src/core/media_types.py +++ b/tagstudio/src/core/media_types.py @@ -10,6 +10,8 @@ from pathlib import Path logging.basicConfig(format="%(message)s", level=logging.INFO) +FILETYPE_EQUIVALENTS = [set(["jpg", "jpeg"])] + class MediaType(str, Enum): """Names of media types.""" diff --git a/tagstudio/src/qt/modals/build_tag.py b/tagstudio/src/qt/modals/build_tag.py index 7e9b7fcd..25bec810 100644 --- a/tagstudio/src/qt/modals/build_tag.py +++ b/tagstudio/src/qt/modals/build_tag.py @@ -3,43 +3,58 @@ # Created for TagStudio: https://github.com/CyanVoxel/TagStudio -import math +import sys from typing import cast import structlog -from PySide6 import QtCore from PySide6.QtCore import Qt, Signal -from PySide6.QtGui import ( - QAction, -) from PySide6.QtWidgets import ( QApplication, QComboBox, + QFrame, QLabel, QLineEdit, QPushButton, + QScrollArea, + QTableWidget, QVBoxLayout, QWidget, ) from src.core.library import Library, Tag from src.core.library.alchemy.enums import TagColor from src.core.palette import ColorType, UiColor, get_tag_color, get_ui_color -from src.qt.flowlayout import FlowLayout from src.qt.modals.tag_search import TagSearchPanel from src.qt.widgets.panel import PanelModal, PanelWidget -from src.qt.widgets.tag import TagAliasWidget, TagWidget +from src.qt.widgets.tag import TagWidget logger = structlog.get_logger(__name__) +class CustomTableItem(QLineEdit): + def __init__(self, text, on_return, on_backspace, parent=None): + super().__init__(parent) + self.setText(text) + self.on_return = on_return + self.on_backspace = on_backspace + + def set_id(self, id): + self.id = id + + def keyPressEvent(self, event): # noqa: N802 + if event.key() == Qt.Key.Key_Return or event.key() == Qt.Key.Key_Enter: + self.on_return() + elif event.key() == Qt.Key.Key_Backspace and self.text().strip() == "": + self.on_backspace() + else: + super().keyPressEvent(event) + + class BuildTagPanel(PanelWidget): on_edit = Signal(Tag) def __init__(self, library: Library, tag: Tag | None = None): super().__init__() self.lib = library - # self.callback = callback - # self.tag_id = tag_id self.setMinimumSize(300, 400) self.root_layout = QVBoxLayout(self) @@ -86,43 +101,16 @@ class BuildTagPanel(PanelWidget): self.aliases_title.setText("Aliases") self.aliases_layout.addWidget(self.aliases_title) - self.aliases_flow_widget = QWidget() - self.aliases_flow_layout = FlowLayout(self.aliases_flow_widget) - self.aliases_flow_layout.setContentsMargins(0, 0, 0, 0) - self.aliases_flow_layout.enable_grid_optimizations(value=False) + self.aliases_table = QTableWidget(0, 2) + self.aliases_table.horizontalHeader().setVisible(False) + self.aliases_table.verticalHeader().setVisible(False) + self.aliases_table.horizontalHeader().setStretchLastSection(True) + self.aliases_table.setColumnWidth(0, 35) self.alias_add_button = QPushButton() - self.alias_add_button.setMinimumSize(23, 23) - self.alias_add_button.setMaximumSize(23, 23) self.alias_add_button.setText("+") - self.alias_add_button.setToolTip("CTRL + A") - self.alias_add_button.setShortcut( - QtCore.QKeyCombination( - QtCore.Qt.KeyboardModifier(QtCore.Qt.KeyboardModifier.ControlModifier), - QtCore.Qt.Key.Key_A, - ) - ) - self.alias_add_button.setStyleSheet( - f"QPushButton{{" - f"background: #1e1e1e;" - f"color: #FFFFFF;" - f"font-weight: bold;" - f"border-color: #333333;" - f"border-radius: 6px;" - f"border-style:solid;" - f"border-width:{math.ceil(self.devicePixelRatio())}px;" - f"padding-bottom: 5px;" - f"font-size: 20px;" - f"}}" - f"QPushButton::hover" - f"{{" - f"border-color: #CCCCCC;" - f"background: #555555;" - f"}}" - ) - self.alias_add_button.clicked.connect(lambda: self.add_alias_callback()) - self.aliases_flow_layout.addWidget(self.alias_add_button) + self.alias_add_button.clicked.connect(self.add_alias_callback) # Subtags ------------------------------------------------------------ @@ -137,42 +125,25 @@ class BuildTagPanel(PanelWidget): self.subtags_title.setText("Parent Tags") self.subtags_layout.addWidget(self.subtags_title) - self.subtag_flow_widget = QWidget() - self.subtag_flow_layout = FlowLayout(self.subtag_flow_widget) - self.subtag_flow_layout.setContentsMargins(0, 0, 0, 0) - self.subtag_flow_layout.enable_grid_optimizations(value=False) + self.scroll_contents = QWidget() + self.subtags_scroll_layout = QVBoxLayout(self.scroll_contents) + self.subtags_scroll_layout.setContentsMargins(6, 0, 6, 0) + self.subtags_scroll_layout.setAlignment(Qt.AlignmentFlag.AlignTop) + + self.scroll_area = QScrollArea() + # self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOn) + self.scroll_area.setWidgetResizable(True) + self.scroll_area.setFrameShadow(QFrame.Shadow.Plain) + self.scroll_area.setFrameShape(QFrame.Shape.NoFrame) + self.scroll_area.setWidget(self.scroll_contents) + # self.scroll_area.setMinimumHeight(60) + + self.subtags_layout.addWidget(self.scroll_area) self.subtags_add_button = QPushButton() self.subtags_add_button.setCursor(Qt.CursorShape.PointingHandCursor) self.subtags_add_button.setText("+") - self.subtags_add_button.setToolTip("CTRL + P") - self.subtags_add_button.setMinimumSize(23, 23) - self.subtags_add_button.setMaximumSize(23, 23) - self.subtags_add_button.setShortcut( - QtCore.QKeyCombination( - QtCore.Qt.KeyboardModifier(QtCore.Qt.KeyboardModifier.ControlModifier), - QtCore.Qt.Key.Key_P, - ) - ) - self.subtags_add_button.setStyleSheet( - f"QPushButton{{" - f"background: #1e1e1e;" - f"color: #FFFFFF;" - f"font-weight: bold;" - f"border-color: #333333;" - f"border-radius: 6px;" - f"border-style:solid;" - f"border-width:{math.ceil(self.devicePixelRatio())}px;" - f"padding-bottom: 5px;" - f"font-size: 20px;" - f"}}" - f"QPushButton::hover" - f"{{" - f"border-color: #CCCCCC;" - f"background: #555555;" - f"}}" - ) - self.subtag_flow_layout.addWidget(self.subtags_add_button) + self.subtags_layout.addWidget(self.subtags_add_button) exclude_ids: list[int] = list() if tag is not None: @@ -182,11 +153,6 @@ class BuildTagPanel(PanelWidget): tsp.tag_chosen.connect(lambda x: self.add_subtag_callback(x)) self.add_tag_modal = PanelModal(tsp, "Add Parent Tags", "Add Parent Tags") self.subtags_add_button.clicked.connect(self.add_tag_modal.show) - # self.subtags_layout.addWidget(self.subtags_add_button) - - # self.subtags_field = TagBoxWidget() - # self.subtags_field.setMinimumHeight(60) - # self.subtags_layout.addWidget(self.subtags_field) # Shorthand ------------------------------------------------------------ self.color_widget = QWidget() @@ -218,63 +184,57 @@ class BuildTagPanel(PanelWidget): ) ) self.color_layout.addWidget(self.color_field) - remove_selected_alias_action = QAction("remove selected alias", self) - remove_selected_alias_action.triggered.connect(self.remove_selected_alias) - remove_selected_alias_action.setShortcut( - QtCore.QKeyCombination( - QtCore.Qt.KeyboardModifier(QtCore.Qt.KeyboardModifier.ControlModifier), - QtCore.Qt.Key.Key_D, - ) - ) - self.addAction(remove_selected_alias_action) # Add Widgets to Layout ================================================ self.root_layout.addWidget(self.name_widget) self.root_layout.addWidget(self.shorthand_widget) self.root_layout.addWidget(self.aliases_widget) - self.root_layout.addWidget(self.aliases_flow_widget) + self.root_layout.addWidget(self.aliases_table) + self.root_layout.addWidget(self.alias_add_button) self.root_layout.addWidget(self.subtags_widget) - self.root_layout.addWidget(self.subtag_flow_widget) self.root_layout.addWidget(self.color_widget) - # self.parent().done.connect(self.update_tag) - self.subtag_ids: set[int] = set() - self.alias_ids: set[int] = set() - self.alias_names: set[str] = set() - self.new_alias_names: dict = dict() + self.subtag_ids: list[int] = [] + self.alias_ids: list[int] = [] + self.alias_names: list[str] = [] + self.new_alias_names: dict = {} + self.new_item_id = sys.maxsize self.set_tag(tag or Tag(name="New Tag")) - def keyPressEvent(self, event): # noqa: N802 - if event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter: # type: ignore - focused_widget = QApplication.focusWidget() - if isinstance(focused_widget.parent(), TagAliasWidget): - self.add_alias_callback() - - def remove_selected_alias(self): - count = self.aliases_flow_layout.count() - if count <= 0: - return - + def backspace(self): focused_widget = QApplication.focusWidget() + row = self.aliases_table.rowCount() - if focused_widget is None: + if isinstance(focused_widget, CustomTableItem) is False: + return + remove_row = 0 + for i in range(0, row): + item = self.aliases_table.cellWidget(i, 1) + if ( + isinstance(item, CustomTableItem) + and cast(CustomTableItem, item).id == cast(CustomTableItem, focused_widget).id + ): + cast(QPushButton, self.aliases_table.cellWidget(i, 0)).click() + remove_row = i + break + + if self.aliases_table.rowCount() <= 0: return - if isinstance(focused_widget.parent(), TagAliasWidget): - cast(TagAliasWidget, focused_widget.parent()).on_remove.emit() + if remove_row == 0: + remove_row = 1 - count = self.aliases_flow_layout.count() - if count > 1: - cast( - TagAliasWidget, self.aliases_flow_layout.itemAt(count - 2).widget() - ).text_field.setFocus() - else: - self.alias_add_button.setFocus() + self.aliases_table.cellWidget(remove_row - 1, 1).setFocus() + + def enter(self): + focused_widget = QApplication.focusWidget() + if isinstance(focused_widget, CustomTableItem): + self.add_alias_callback() def add_subtag_callback(self, tag_id: int): logger.info("add_subtag_callback", tag_id=tag_id) - self.subtag_ids.add(tag_id) + self.subtag_ids.append(tag_id) self.set_subtags() def remove_subtag_callback(self, tag_id: int): @@ -284,131 +244,122 @@ class BuildTagPanel(PanelWidget): def add_alias_callback(self): logger.info("add_alias_callback") - # bug passing in the text for a here means when the text changes - # the remove callback uses what a whas initialy assigned - new_field = TagAliasWidget() - id = new_field.__hash__() - new_field.id = id - new_field.on_remove.connect(lambda a="": self.remove_alias_callback(a, id)) - new_field.setMaximumHeight(25) - new_field.setMinimumHeight(25) + id = self.new_item_id - self.alias_ids.add(id) + self.alias_ids.append(id) self.new_alias_names[id] = "" - self.aliases_flow_layout.addWidget(new_field) - new_field.text_field.setFocus() - self.aliases_flow_layout.addWidget(self.alias_add_button) + + self.new_item_id -= 1 + + self._set_aliases() + + row = self.aliases_table.rowCount() - 1 + item = self.aliases_table.cellWidget(row, 1) + item.setFocus() def remove_alias_callback(self, alias_name: str, alias_id: int | None = None): logger.info("remove_alias_callback") + self.alias_ids.remove(alias_id) self._set_aliases() def set_subtags(self): - while self.subtag_flow_layout.itemAt(1): - self.subtag_flow_layout.takeAt(0).widget().deleteLater() + while self.subtags_scroll_layout.itemAt(0): + self.subtags_scroll_layout.takeAt(0).widget().deleteLater() last: QWidget = self.alias_add_button + c = QWidget() + layout = QVBoxLayout(c) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(3) for tag_id in self.subtag_ids: tag = self.lib.get_tag(tag_id) tw = TagWidget(tag, has_edit=False, has_remove=True) tw.on_remove.connect(lambda t=tag_id: self.remove_subtag_callback(t)) - self.subtag_flow_layout.addWidget(tw) + layout.addWidget(tw) self.setTabOrder(last, tw.bg_button) last = tw.bg_button - - self.subtag_flow_layout.addWidget(self.subtags_add_button) + self.subtags_scroll_layout.addWidget(c) self.setTabOrder(last, self.subtags_add_button) def add_aliases(self): - fields: set[TagAliasWidget] = set() - for i in range(0, self.aliases_flow_layout.count() - 1): - widget = self.aliases_flow_layout.itemAt(i).widget() + names: set[str] = set() + for i in range(0, self.aliases_table.rowCount()): + widget = self.aliases_table.cellWidget(i, 1) - if not isinstance(widget, TagAliasWidget): - return + names.add(cast(CustomTableItem, widget).text()) - field: TagAliasWidget = cast(TagAliasWidget, widget) - fields.add(field) + remove: set[str] = set(self.alias_names) - names - remove: set[str] = self.alias_names - set([a.text_field.text() for a in fields]) + self.alias_names = list(set(self.alias_names) - remove) - self.alias_names = self.alias_names - remove - - for field in fields: + for name in names: # add new aliases - if field.text_field.text() != "": - self.alias_names.add(field.text_field.text()) + if name.strip() != "" and name not in set(self.alias_names): + self.alias_names.append(name) + elif name.strip() == "" and name in set(self.alias_names): + self.alias_names.remove(name) def _update_new_alias_name_dict(self): - for i in range(0, self.aliases_flow_layout.count() - 1): - widget = self.aliases_flow_layout.itemAt(i).widget() - - if not isinstance(widget, TagAliasWidget): - return - - field: TagAliasWidget = cast(TagAliasWidget, widget) - text_field_text = field.text_field.text() - - self.new_alias_names[field.id] = text_field_text + row = self.aliases_table.rowCount() + logger.info(row) + for i in range(0, self.aliases_table.rowCount()): + widget = self.aliases_table.cellWidget(i, 1) + self.new_alias_names[widget.id] = widget.text() # type: ignore def _set_aliases(self): self._update_new_alias_name_dict() - while self.aliases_flow_layout.itemAt(1): - self.aliases_flow_layout.takeAt(0).widget().deleteLater() + while self.aliases_table.rowCount() > 0: + self.aliases_table.removeRow(0) self.alias_names.clear() - last: QWidget = self.shorthand_field for alias_id in self.alias_ids: alias = self.lib.get_alias(self.tag.id, alias_id) alias_name = alias.name if alias else self.new_alias_names[alias_id] - new_field = TagAliasWidget( - alias_id, - alias_name, - lambda a=alias_name, id=alias_id: self.remove_alias_callback(a, id), + # handel when an alias name changes + if alias_id in self.new_alias_names: + alias_name = self.new_alias_names[alias_id] + + self.alias_names.append(alias_name) + + remove_btn = QPushButton("-") + remove_btn.clicked.connect( + lambda a=alias_name, id=alias_id: self.remove_alias_callback(a, id) ) - new_field.setMaximumHeight(25) - new_field.setMinimumHeight(25) - self.aliases_flow_layout.addWidget(new_field) - self.alias_names.add(alias_name) - self.setTabOrder(last, new_field.text_field) - self.setTabOrder(new_field.text_field, new_field.remove_button) - last = new_field.remove_button + row = self.aliases_table.rowCount() + new_item = CustomTableItem(alias_name, self.enter, self.backspace) + new_item.set_id(alias_id) - self.aliases_flow_layout.addWidget(self.alias_add_button) - self.setTabOrder(last, self.alias_add_button) + new_item.editingFinished.connect(lambda item=new_item: self._alias_name_change(item)) + + self.aliases_table.insertRow(row) + self.aliases_table.setCellWidget(row, 1, new_item) + self.aliases_table.setCellWidget(row, 0, remove_btn) + + def _alias_name_change(self, item: CustomTableItem): + self.new_alias_names[item.id] = item.text() def set_tag(self, tag: Tag): self.tag = tag - self.tag = tag - logger.info("setting tag", tag=tag) self.name_field.setText(tag.name) self.shorthand_field.setText(tag.shorthand or "") for alias_id in tag.alias_ids: - self.alias_ids.add(alias_id) + self.alias_ids.append(alias_id) self._set_aliases() for subtag in tag.subtag_ids: - self.subtag_ids.add(subtag) - - for alias_id in tag.alias_ids: - self.alias_ids.add(alias_id) - - self._set_aliases() - - for subtag in tag.subtag_ids: - self.subtag_ids.add(subtag) + self.subtag_ids.append(subtag) self.set_subtags() diff --git a/tagstudio/src/qt/modals/fix_unlinked.py b/tagstudio/src/qt/modals/fix_unlinked.py index 3c4627df..7c580d3f 100644 --- a/tagstudio/src/qt/modals/fix_unlinked.py +++ b/tagstudio/src/qt/modals/fix_unlinked.py @@ -144,4 +144,4 @@ class FixUnlinkedEntriesModal(QWidget): # disable buttons if there are no files to fix self.search_button.setDisabled(self.missing_count == 0) self.delete_button.setDisabled(self.missing_count == 0) - self.missing_count_label.setText(f"Unlinked Entries: {count}") + self.missing_count_label.setText(f"Unlinked Entries: {self.missing_count}") diff --git a/tagstudio/src/qt/modals/tag_database.py b/tagstudio/src/qt/modals/tag_database.py index 168420d5..bc5cfce9 100644 --- a/tagstudio/src/qt/modals/tag_database.py +++ b/tagstudio/src/qt/modals/tag_database.py @@ -165,7 +165,9 @@ class TagDatabasePanel(PanelWidget): self.edit_modal.show() def edit_tag_callback(self, btp: BuildTagPanel): - self.lib.update_tag(btp.build_tag(), btp.subtag_ids, btp.alias_names, btp.alias_ids) + self.lib.update_tag( + btp.build_tag(), set(btp.subtag_ids), set(btp.alias_names), set(btp.alias_ids) + ) self.update_tags(self.search_field.text()) def showEvent(self, event: QShowEvent) -> None: # noqa N802 diff --git a/tagstudio/src/qt/ts_qt.py b/tagstudio/src/qt/ts_qt.py index 4a568b57..2c238807 100644 --- a/tagstudio/src/qt/ts_qt.py +++ b/tagstudio/src/qt/ts_qt.py @@ -635,7 +635,10 @@ class QtDriver(DriverMixin, QObject): self.modal.saved.connect( lambda: ( self.lib.add_tag( - panel.build_tag(), panel.subtag_ids, panel.alias_names, panel.alias_ids + panel.build_tag(), + set(panel.subtag_ids), + set(panel.alias_names), + set(panel.alias_ids), ), self.modal.hide(), ) diff --git a/tagstudio/tests/qt/test_build_tag_panel.py b/tagstudio/tests/qt/test_build_tag_panel.py index 9026b475..87971bcc 100644 --- a/tagstudio/tests/qt/test_build_tag_panel.py +++ b/tagstudio/tests/qt/test_build_tag_panel.py @@ -1,9 +1,5 @@ -from typing import cast - -from PySide6.QtWidgets import QApplication, QMainWindow from src.core.library.alchemy.models import Tag from src.qt.modals.build_tag import BuildTagPanel -from src.qt.widgets.tag import TagAliasWidget def test_build_tag_panel_add_sub_tag_callback(library, generate_tag): @@ -43,29 +39,6 @@ import os os.environ["QT_QPA_PLATFORM"] = "offscreen" -def test_build_tag_panel_remove_selected_alias(library, generate_tag): - app = QApplication.instance() or QApplication([]) - - window = QMainWindow() - parent_tag = library.add_tag(generate_tag("xxx", id=123)) - panel = BuildTagPanel(library, parent_tag) - panel.setParent(window) - - panel.add_alias_callback() - window.show() - - assert panel.aliases_flow_layout.count() == 2 - - alias_widget = panel.aliases_flow_layout.itemAt(0).widget() - alias_widget.text_field.setFocus() - - app.processEvents() - - panel.remove_selected_alias() - - assert panel.aliases_flow_layout.count() == 1 - - def test_build_tag_panel_add_alias_callback(library, generate_tag): tag = library.add_tag(generate_tag("xxx", id=123)) assert tag @@ -74,7 +47,7 @@ def test_build_tag_panel_add_alias_callback(library, generate_tag): panel.add_alias_callback() - assert panel.aliases_flow_layout.count() == 2 + assert panel.aliases_table.rowCount() == 1 def test_build_tag_panel_remove_alias_callback(library, generate_tag): @@ -112,7 +85,7 @@ def test_build_tag_panel_set_subtags(library, generate_tag): panel: BuildTagPanel = BuildTagPanel(library, child) assert len(panel.subtag_ids) == 1 - assert panel.subtag_flow_layout.count() == 2 + assert panel.subtags_scroll_layout.count() == 1 def test_build_tag_panel_add_aliases(library, generate_tag): @@ -128,19 +101,19 @@ def test_build_tag_panel_add_aliases(library, generate_tag): panel: BuildTagPanel = BuildTagPanel(library, tag) - widget = panel.aliases_flow_layout.itemAt(0).widget() + widget = panel.aliases_table.cellWidget(0, 1) alias_names: set[str] = set() - alias_names.add(cast(TagAliasWidget, widget).text_field.text()) + alias_names.add(widget.text()) - widget = panel.aliases_flow_layout.itemAt(1).widget() - alias_names.add(cast(TagAliasWidget, widget).text_field.text()) + widget = panel.aliases_table.cellWidget(1, 1) + alias_names.add(widget.text()) assert "alias" in alias_names assert "alias_2" in alias_names - old_text = cast(TagAliasWidget, widget).text_field.text() - cast(TagAliasWidget, widget).text_field.setText("alias_update") + old_text = widget.text() + widget.setText("alias_update") panel.add_aliases() @@ -161,7 +134,7 @@ def test_build_tag_panel_set_aliases(library, generate_tag): panel: BuildTagPanel = BuildTagPanel(library, tag) - assert panel.aliases_flow_layout.count() == 2 + assert panel.aliases_table.rowCount() == 1 assert len(panel.alias_names) == 1 assert len(panel.alias_ids) == 1