From e7a1e638c876d4b38c061341ca9191a8a7d92bb0 Mon Sep 17 00:00:00 2001 From: Bamowen <12665915+Bamowen@users.noreply.github.com> Date: Mon, 16 Sep 2024 22:50:43 +0200 Subject: [PATCH 1/2] Add en.json with strings found in code --- tagstudio/resources/translations/en.json | 187 +++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 tagstudio/resources/translations/en.json diff --git a/tagstudio/resources/translations/en.json b/tagstudio/resources/translations/en.json new file mode 100644 index 000000000..a9356fd77 --- /dev/null +++ b/tagstudio/resources/translations/en.json @@ -0,0 +1,187 @@ +{ + "home.base_title": "TagStudio Alpha %{VERSION}%{self.branch}", + "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", + "logging.no_config_file": "[QT DRIVER] Config File does not exist creating %{str(path)}", + "logging.using_config_file": "[QT DRIVER] Using Config File %{str(path)}", + "logging.default_config_file": "[QT DRIVER] Config File not specified, defaulting to %{self.settings.fileName()}", + "logging.folder_missing": "[QT DRIVER] %{TS_FOLDER_NAME} folder in %{lib} does not exist.", + "logging.emitted": "emitted %{i}", + "logging.saving": "Saving Library...", + "logging.closing": "Closing Library...", + "logging.backup": "Backing Up Library...", + "logging.parent_dir_not_found": "Library parent directory not found, prompting user to select the directory", + "logging.library_not_found": "Library Location not found, please select location to save Library", + "logging.library_saved": "Library Saved! (%{format_timespan(end_time - start_time)})", + "logging.call_navforward": "Calling NavForward with Content:%{False if not frame_content else frame_content[0]}, Index:%{page_index}, PageCount:%{page_count}", + "logging.remove_id_nav_stack_frame": "Removing %{id} from nav stack frame %{i}", + "logging.remove_id_frame_dict_item": "Removing {id} from frame dict item %{i}", + "logging.remove_id_frame_selected": "Removing %{id} from frame selected", + "logging.last_selected": "Last Selected: %{self.selected[-1]}", + "open_library.no_tagstudio_library_found": "%{ERROR} No existing TagStudio library found at '%{path}'. Creating one.", + "open_library.library_creation_return_code": "Library Creation Return Code: %{self.lib.create_library(path)}", + "open_library.title": "%{self.base_title} - Library '%{self.lib.library_dir}'", + "create_collage.create": "Creating collage for %{len(self.lib.entries)} Entries.\nGrid Size: %{grid_size} (%{grid_len}x%{grid_len})\nIndividual Picture Size: (%{thumb_size}x%{thumb_size})", + "create_collage.keep_ratio": "Keeping original aspect ratios.", + "create_collage.visualize_entry_data": "Visualizing Entry Data", + "save_collage.saved": "'Collage Saved at \"%{filename}\" (%{format_timespan(end_time - self.collage_start_time)})'", + "collage_icon.too_big": "[ERROR] One of the images was too big (%{e})", + "collage.cancelled": "{INFO} Collage operation cancelled.", + "collage.continuing": "Continuing...", + "thread.thumbnail_renderer": "ThumbRenderer_%{i}", + "thread.end_thumbnail": "[SHUTDOWN] Ending Thumbnail Threads...", + "dialog.open_create_library": "Open/Create Library", + "splash.open_library": "Opening Library %{lib}...", + "status.save_success": "Library Saved and Closed! (%{format_timespan(end_time - start_time)})", + "status.backup_success": "Library Backup Saved at: \"%{ self.lib.library_dir / TS_FOLDER_NAME / BACKUP_FOLDER_NAME / fn}\" (%{format_timespan(end_time - start_time)})", + "status.search_library_query": "Searching Library for \"%{query}\"...", + "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": "%{len(all_items)} Results (%{format_timespan(end_time - start_time)})", + "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: %{path}", + "file_opener.not_found": "File not found: %{_path}", + "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.error": "[ERROR]", + "generic.warning": "[WARNING]", + "generic.info": "[INFO]", + "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", + "build_tags.removing_id": "removing %{tag_id}", + "build_tags.set_subtag_id": "Setting %{self.tag.subtag_ids}", + "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_unliked.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", + "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}", + "panel.callback_not_implemented": "add_callback not implemented for %{self.__class__.__name__}", + "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.invalid_file": "File is invalid or has 0 frames", + "preview_panel.render_thumbnail_impossible": "[PreviewPanel][ERROR] Couldn't Render thumbnail for %{filepath} (because of %{e})", + "preview_panel.update_container": "[UPDATE CONTAINER] Setting tags updated slot", + "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.wacky_tag_box": "%{self.lib.get_field_attr(field, 'name')} (Wacky Tag Box)", + "preview_panel.edit_name": "Edit %{self.lib.get_field_attr(field, \"name\")}", + "preview_panel.unknown_field_type": "%{self.lib.get_field_attr(field, 'name')} (Unknown Field Type)", + "preview_panel.error_remove_field": "[PREVIEW PANEL][ERROR?] Tried to remove field from Entry (%{entry.id}) that never had it", + "preview_panel.error_update_field": "[PREVIEW PANEL][ERROR] Tried to update field from Entry (%{entry.id}) that never had it", + "tag_box.set_tags": "[TAG BOX WIDGET] SET TAGS: T:%{tags} for E:%{self.item.id}", + "tag_box.add_tag_callback": "[TAG BOX WIDGET] ADD TAG CALLBACK: T:%{tag_id} to E:%{self.item.id}", + "tag_box.selected": "[TAG BOX WIDGET] SELECTED T:%{self.driver.selected}", + "tag.search_for_tag": "Search for Tag", + "tag.add_search": "Add to Search", + "text_line_edit.unknown_event_type": "unknown event type: %{event}", + "thumb_renderer.impossible": "[ThumbRenderer]{WARNING} Couldn't Render thumbnail for %{_filepath.name} (%{type(e).__name__})", + "thumb_rendered.impossible_raw": "[ThumbRenderer]{ERROR} Couldn't Render thumbnail for raw image %{_filepath.name} (%{type(e).__name__})", + "conftest.tag_name": "Tag Name" +} \ No newline at end of file From 4c9647dd41e439c598b2f08fc599916993e2d7f7 Mon Sep 17 00:00:00 2001 From: Travis Abendshien Date: Sun, 22 Sep 2024 20:16:49 -0700 Subject: [PATCH 2/2] remove unused, internal, and logging strings This removes any string tokens for unused/unfinished features, internally facing code, and log outputs. --- tagstudio/resources/translations/en.json | 327 ++++++++++------------- 1 file changed, 142 insertions(+), 185 deletions(-) diff --git a/tagstudio/resources/translations/en.json b/tagstudio/resources/translations/en.json index a9356fd77..016aa323b 100644 --- a/tagstudio/resources/translations/en.json +++ b/tagstudio/resources/translations/en.json @@ -1,187 +1,144 @@ { - "home.base_title": "TagStudio Alpha %{VERSION}%{self.branch}", - "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", - "logging.no_config_file": "[QT DRIVER] Config File does not exist creating %{str(path)}", - "logging.using_config_file": "[QT DRIVER] Using Config File %{str(path)}", - "logging.default_config_file": "[QT DRIVER] Config File not specified, defaulting to %{self.settings.fileName()}", - "logging.folder_missing": "[QT DRIVER] %{TS_FOLDER_NAME} folder in %{lib} does not exist.", - "logging.emitted": "emitted %{i}", - "logging.saving": "Saving Library...", - "logging.closing": "Closing Library...", - "logging.backup": "Backing Up Library...", - "logging.parent_dir_not_found": "Library parent directory not found, prompting user to select the directory", - "logging.library_not_found": "Library Location not found, please select location to save Library", - "logging.library_saved": "Library Saved! (%{format_timespan(end_time - start_time)})", - "logging.call_navforward": "Calling NavForward with Content:%{False if not frame_content else frame_content[0]}, Index:%{page_index}, PageCount:%{page_count}", - "logging.remove_id_nav_stack_frame": "Removing %{id} from nav stack frame %{i}", - "logging.remove_id_frame_dict_item": "Removing {id} from frame dict item %{i}", - "logging.remove_id_frame_selected": "Removing %{id} from frame selected", - "logging.last_selected": "Last Selected: %{self.selected[-1]}", - "open_library.no_tagstudio_library_found": "%{ERROR} No existing TagStudio library found at '%{path}'. Creating one.", - "open_library.library_creation_return_code": "Library Creation Return Code: %{self.lib.create_library(path)}", - "open_library.title": "%{self.base_title} - Library '%{self.lib.library_dir}'", - "create_collage.create": "Creating collage for %{len(self.lib.entries)} Entries.\nGrid Size: %{grid_size} (%{grid_len}x%{grid_len})\nIndividual Picture Size: (%{thumb_size}x%{thumb_size})", - "create_collage.keep_ratio": "Keeping original aspect ratios.", - "create_collage.visualize_entry_data": "Visualizing Entry Data", - "save_collage.saved": "'Collage Saved at \"%{filename}\" (%{format_timespan(end_time - self.collage_start_time)})'", - "collage_icon.too_big": "[ERROR] One of the images was too big (%{e})", - "collage.cancelled": "{INFO} Collage operation cancelled.", - "collage.continuing": "Continuing...", - "thread.thumbnail_renderer": "ThumbRenderer_%{i}", - "thread.end_thumbnail": "[SHUTDOWN] Ending Thumbnail Threads...", - "dialog.open_create_library": "Open/Create Library", - "splash.open_library": "Opening Library %{lib}...", - "status.save_success": "Library Saved and Closed! (%{format_timespan(end_time - start_time)})", - "status.backup_success": "Library Backup Saved at: \"%{ self.lib.library_dir / TS_FOLDER_NAME / BACKUP_FOLDER_NAME / fn}\" (%{format_timespan(end_time - start_time)})", - "status.search_library_query": "Searching Library for \"%{query}\"...", - "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": "%{len(all_items)} Results (%{format_timespan(end_time - start_time)})", - "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: %{path}", - "file_opener.not_found": "File not found: %{_path}", - "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.error": "[ERROR]", - "generic.warning": "[WARNING]", - "generic.info": "[INFO]", - "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", - "build_tags.removing_id": "removing %{tag_id}", - "build_tags.set_subtag_id": "Setting %{self.tag.subtag_ids}", - "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_unliked.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", - "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}", - "panel.callback_not_implemented": "add_callback not implemented for %{self.__class__.__name__}", - "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.invalid_file": "File is invalid or has 0 frames", - "preview_panel.render_thumbnail_impossible": "[PreviewPanel][ERROR] Couldn't Render thumbnail for %{filepath} (because of %{e})", - "preview_panel.update_container": "[UPDATE CONTAINER] Setting tags updated slot", - "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.wacky_tag_box": "%{self.lib.get_field_attr(field, 'name')} (Wacky Tag Box)", - "preview_panel.edit_name": "Edit %{self.lib.get_field_attr(field, \"name\")}", - "preview_panel.unknown_field_type": "%{self.lib.get_field_attr(field, 'name')} (Unknown Field Type)", - "preview_panel.error_remove_field": "[PREVIEW PANEL][ERROR?] Tried to remove field from Entry (%{entry.id}) that never had it", - "preview_panel.error_update_field": "[PREVIEW PANEL][ERROR] Tried to update field from Entry (%{entry.id}) that never had it", - "tag_box.set_tags": "[TAG BOX WIDGET] SET TAGS: T:%{tags} for E:%{self.item.id}", - "tag_box.add_tag_callback": "[TAG BOX WIDGET] ADD TAG CALLBACK: T:%{tag_id} to E:%{self.item.id}", - "tag_box.selected": "[TAG BOX WIDGET] SELECTED T:%{self.driver.selected}", - "tag.search_for_tag": "Search for Tag", - "tag.add_search": "Add to Search", - "text_line_edit.unknown_event_type": "unknown event type: %{event}", - "thumb_renderer.impossible": "[ThumbRenderer]{WARNING} Couldn't Render thumbnail for %{_filepath.name} (%{type(e).__name__})", - "thumb_rendered.impossible_raw": "[ThumbRenderer]{ERROR} Couldn't Render thumbnail for raw image %{_filepath.name} (%{type(e).__name__})", - "conftest.tag_name": "Tag Name" + "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", + "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", + "tag.search_for_tag": "Search for Tag", + "tag.add_search": "Add to Search", + "text_line_edit.unknown_event_type": "unknown event type: %{event}" } \ No newline at end of file