diff --git a/tagstudio/resources/translations/en.json b/tagstudio/resources/translations/en.json
index 1d89b4f7..442bf045 100644
--- a/tagstudio/resources/translations/en.json
+++ b/tagstudio/resources/translations/en.json
@@ -18,7 +18,7 @@
"entries.unlinked.delete.deleting": "Deleting Entries",
"entries.unlinked.delete": "Delete Unlinked Entries",
"entries.unlinked.delete_alt": "De&lete 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.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 {idx}/{missing_count} Entries, {fixed_count} Successfully Relinked",
"entries.unlinked.relink.manual": "&Manual Relink",
diff --git a/tagstudio/src/qt/main_window.py b/tagstudio/src/qt/main_window.py
index 77bf338a..d1125ede 100644
--- a/tagstudio/src/qt/main_window.py
+++ b/tagstudio/src/qt/main_window.py
@@ -25,7 +25,7 @@ from PySide6.QtWidgets import (QComboBox, QFrame, QGridLayout,
from src.qt.pagination import Pagination
from src.qt.widgets.landing import LandingWidget
-from .translations import Translations
+from src.qt.translations import Translations
# Only import for type checking/autocompletion, will not be imported at runtime.
if typing.TYPE_CHECKING:
diff --git a/tagstudio/src/qt/modals/add_field.py b/tagstudio/src/qt/modals/add_field.py
index 3e2a94b8..e948e511 100644
--- a/tagstudio/src/qt/modals/add_field.py
+++ b/tagstudio/src/qt/modals/add_field.py
@@ -14,8 +14,7 @@ from PySide6.QtWidgets import (
QWidget,
)
from src.core.library import Library
-
-from ..translations import Translations
+from src.qt.translations import Translations
class AddFieldModal(QWidget):
diff --git a/tagstudio/src/qt/modals/build_tag.py b/tagstudio/src/qt/modals/build_tag.py
index 73687e38..5682c736 100644
--- a/tagstudio/src/qt/modals/build_tag.py
+++ b/tagstudio/src/qt/modals/build_tag.py
@@ -24,11 +24,10 @@ 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.modals.tag_search import TagSearchPanel
+from src.qt.translations import Translations
from src.qt.widgets.panel import PanelModal, PanelWidget
from src.qt.widgets.tag import TagWidget
-from ..translations import Translations
-
logger = structlog.get_logger(__name__)
diff --git a/tagstudio/src/qt/modals/delete_unlinked.py b/tagstudio/src/qt/modals/delete_unlinked.py
index 180c6e75..da229c99 100644
--- a/tagstudio/src/qt/modals/delete_unlinked.py
+++ b/tagstudio/src/qt/modals/delete_unlinked.py
@@ -15,10 +15,9 @@ from PySide6.QtWidgets import (
QWidget,
)
from src.core.utils.missing_files import MissingRegistry
+from src.qt.translations import Translations
from src.qt.widgets.progress import ProgressWidget
-from ..translations import Translations
-
# Only import for type checking/autocompletion, will not be imported at runtime.
if typing.TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/modals/drop_import.py b/tagstudio/src/qt/modals/drop_import.py
index 7811a46d..92b9f167 100644
--- a/tagstudio/src/qt/modals/drop_import.py
+++ b/tagstudio/src/qt/modals/drop_import.py
@@ -17,10 +17,9 @@ from PySide6.QtWidgets import (
QVBoxLayout,
QWidget,
)
+from src.qt.translations import Translations
from src.qt.widgets.progress import ProgressWidget
-from ..translations import Translations
-
if TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/modals/file_extension.py b/tagstudio/src/qt/modals/file_extension.py
index 45ea0199..49b5b147 100644
--- a/tagstudio/src/qt/modals/file_extension.py
+++ b/tagstudio/src/qt/modals/file_extension.py
@@ -18,10 +18,9 @@ from PySide6.QtWidgets import (
)
from src.core.enums import LibraryPrefs
from src.core.library import Library
+from src.qt.translations import Translations
from src.qt.widgets.panel import PanelWidget
-from ..translations import Translations
-
class FileExtensionItemDelegate(QStyledItemDelegate):
def setModelData(self, editor, model, index): # noqa: N802
@@ -72,7 +71,7 @@ class FileExtensionModal(PanelWidget):
lambda text: self.mode_combobox.setItemText(0, text), "ignore_list.mode.include"
)
Translations.translate_with_setter(
- lambda text: self.mode_combobox.setItemText(0, text), "ignore_list.mode.exclude"
+ lambda text: self.mode_combobox.setItemText(1, text), "ignore_list.mode.exclude"
)
is_exclude_list = int(bool(self.lib.prefs(LibraryPrefs.IS_EXCLUDE_LIST)))
diff --git a/tagstudio/src/qt/modals/fix_dupes.py b/tagstudio/src/qt/modals/fix_dupes.py
index 12095d9f..76261039 100644
--- a/tagstudio/src/qt/modals/fix_dupes.py
+++ b/tagstudio/src/qt/modals/fix_dupes.py
@@ -17,8 +17,7 @@ from PySide6.QtWidgets import (
from src.core.library import Library
from src.core.utils.dupe_files import DupeRegistry
from src.qt.modals.mirror_entities import MirrorEntriesModal
-
-from ..translations import Translations
+from src.qt.translations import Translations
# Only import for type checking/autocompletion, will not be imported at runtime.
if typing.TYPE_CHECKING:
diff --git a/tagstudio/src/qt/modals/fix_unlinked.py b/tagstudio/src/qt/modals/fix_unlinked.py
index 3226566f..eafe3297 100644
--- a/tagstudio/src/qt/modals/fix_unlinked.py
+++ b/tagstudio/src/qt/modals/fix_unlinked.py
@@ -12,10 +12,9 @@ from src.core.utils.missing_files import MissingRegistry
from src.qt.modals.delete_unlinked import DeleteUnlinkedEntriesModal
from src.qt.modals.merge_dupe_entries import MergeDuplicateEntries
from src.qt.modals.relink_unlinked import RelinkUnlinkedEntries
+from src.qt.translations import Translations
from src.qt.widgets.progress import ProgressWidget
-from ..translations import Translations
-
# Only import for type checking/autocompletion, will not be imported at runtime.
if typing.TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/modals/folders_to_tags.py b/tagstudio/src/qt/modals/folders_to_tags.py
index 60fcd318..f680fdc1 100644
--- a/tagstudio/src/qt/modals/folders_to_tags.py
+++ b/tagstudio/src/qt/modals/folders_to_tags.py
@@ -23,8 +23,7 @@ from src.core.library import Library, Tag
from src.core.library.alchemy.fields import _FieldID
from src.core.palette import ColorType, get_tag_color
from src.qt.flowlayout import FlowLayout
-
-from ..translations import Translations
+from src.qt.translations import Translations
if typing.TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/modals/merge_dupe_entries.py b/tagstudio/src/qt/modals/merge_dupe_entries.py
index 5d2d49af..35bdf7c1 100644
--- a/tagstudio/src/qt/modals/merge_dupe_entries.py
+++ b/tagstudio/src/qt/modals/merge_dupe_entries.py
@@ -7,10 +7,9 @@ import typing
from PySide6.QtCore import QObject, Signal
from src.core.library import Library
from src.core.utils.dupe_files import DupeRegistry
+from src.qt.translations import Translations
from src.qt.widgets.progress import ProgressWidget
-from ..translations import Translations
-
# Only import for type checking/autocompletion, will not be imported at runtime.
if typing.TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/modals/mirror_entities.py b/tagstudio/src/qt/modals/mirror_entities.py
index c872fa58..4cb37a1c 100644
--- a/tagstudio/src/qt/modals/mirror_entities.py
+++ b/tagstudio/src/qt/modals/mirror_entities.py
@@ -17,10 +17,9 @@ from PySide6.QtWidgets import (
QWidget,
)
from src.core.utils.dupe_files import DupeRegistry
+from src.qt.translations import Translations
from src.qt.widgets.progress import ProgressWidget
-from ..translations import Translations
-
# Only import for type checking/autocompletion, will not be imported at runtime.
if typing.TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/modals/relink_unlinked.py b/tagstudio/src/qt/modals/relink_unlinked.py
index 366930a7..0363c848 100644
--- a/tagstudio/src/qt/modals/relink_unlinked.py
+++ b/tagstudio/src/qt/modals/relink_unlinked.py
@@ -5,10 +5,9 @@
from PySide6.QtCore import QObject, Signal
from src.core.utils.missing_files import MissingRegistry
+from src.qt.translations import Translations
from src.qt.widgets.progress import ProgressWidget
-from ..translations import Translations
-
class RelinkUnlinkedEntries(QObject):
done = Signal()
diff --git a/tagstudio/src/qt/modals/tag_database.py b/tagstudio/src/qt/modals/tag_database.py
index b1fbde8e..560611d5 100644
--- a/tagstudio/src/qt/modals/tag_database.py
+++ b/tagstudio/src/qt/modals/tag_database.py
@@ -18,11 +18,10 @@ from PySide6.QtWidgets import (
from src.core.constants import RESERVED_TAG_END, RESERVED_TAG_START
from src.core.library import Library, Tag
from src.qt.modals.build_tag import BuildTagPanel
+from src.qt.translations import Translations
from src.qt.widgets.panel import PanelModal, PanelWidget
from src.qt.widgets.tag import TagWidget
-from ..translations import Translations
-
logger = structlog.get_logger(__name__)
# TODO: This class shares the majority of its code with tag_search.py.
diff --git a/tagstudio/src/qt/modals/tag_search.py b/tagstudio/src/qt/modals/tag_search.py
index 63cac736..90932b0d 100644
--- a/tagstudio/src/qt/modals/tag_search.py
+++ b/tagstudio/src/qt/modals/tag_search.py
@@ -19,11 +19,10 @@ from PySide6.QtWidgets import (
)
from src.core.library import Library
from src.core.palette import ColorType, get_tag_color
+from src.qt.translations import Translations
from src.qt.widgets.panel import PanelWidget
from src.qt.widgets.tag import TagWidget
-from ..translations import Translations
-
logger = structlog.get_logger(__name__)
diff --git a/tagstudio/src/qt/platform_strings.py b/tagstudio/src/qt/platform_strings.py
index 0c586cb4..23851dd4 100644
--- a/tagstudio/src/qt/platform_strings.py
+++ b/tagstudio/src/qt/platform_strings.py
@@ -6,7 +6,7 @@
import platform
-from .translations import Translations
+from src.qt.translations import Translations
class PlatformStrings:
diff --git a/tagstudio/src/qt/translations.py b/tagstudio/src/qt/translations.py
index c1fd5ad2..72e232b8 100644
--- a/tagstudio/src/qt/translations.py
+++ b/tagstudio/src/qt/translations.py
@@ -79,3 +79,4 @@ class Translator:
Translations = Translator()
+# Translations.change_language("de")
diff --git a/tagstudio/src/qt/ts_qt.py b/tagstudio/src/qt/ts_qt.py
index 880f9aaa..06c136dc 100644
--- a/tagstudio/src/qt/ts_qt.py
+++ b/tagstudio/src/qt/ts_qt.py
@@ -84,6 +84,7 @@ from src.qt.modals.fix_unlinked import FixUnlinkedEntriesModal
from src.qt.modals.folders_to_tags import FoldersToTagsModal
from src.qt.modals.tag_database import TagDatabasePanel
from src.qt.resource_manager import ResourceManager
+from src.qt.translations import Translations
from src.qt.widgets.item_thumb import BadgeType, ItemThumb
from src.qt.widgets.migration_modal import JsonMigrationModal
from src.qt.widgets.panel import PanelModal
@@ -91,8 +92,6 @@ from src.qt.widgets.preview_panel import PreviewPanel
from src.qt.widgets.progress import ProgressWidget
from src.qt.widgets.thumb_renderer import ThumbRenderer
-from .translations import Translations
-
# SIGQUIT is not defined on Windows
if sys.platform == "win32":
from signal import SIGINT, SIGTERM, signal
diff --git a/tagstudio/src/qt/widgets/item_thumb.py b/tagstudio/src/qt/widgets/item_thumb.py
index 78a644b9..f79708ad 100644
--- a/tagstudio/src/qt/widgets/item_thumb.py
+++ b/tagstudio/src/qt/widgets/item_thumb.py
@@ -30,11 +30,10 @@ from src.core.media_types import MediaCategories, MediaType
from src.qt.flowlayout import FlowWidget
from src.qt.helpers.file_opener import FileOpenerHelper
from src.qt.platform_strings import PlatformStrings
+from src.qt.translations import Translations
from src.qt.widgets.thumb_button import ThumbButton
from src.qt.widgets.thumb_renderer import ThumbRenderer
-from ..translations import Translations
-
if TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/widgets/landing.py b/tagstudio/src/qt/widgets/landing.py
index 6f3b6e43..3f6b1594 100644
--- a/tagstudio/src/qt/widgets/landing.py
+++ b/tagstudio/src/qt/widgets/landing.py
@@ -13,10 +13,9 @@ from PySide6.QtCore import QEasingCurve, QPoint, QPropertyAnimation, Qt
from PySide6.QtGui import QPixmap
from PySide6.QtWidgets import QLabel, QPushButton, QVBoxLayout, QWidget
from src.qt.helpers.color_overlay import gradient_overlay, theme_fg_overlay
+from src.qt.translations import Translations
from src.qt.widgets.clickable_label import ClickableLabel
-from ..translations import Translations
-
# Only import for type checking/autocompletion, will not be imported at runtime.
if typing.TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/widgets/migration_modal.py b/tagstudio/src/qt/widgets/migration_modal.py
index 58f60262..6e8aeb06 100644
--- a/tagstudio/src/qt/widgets/migration_modal.py
+++ b/tagstudio/src/qt/widgets/migration_modal.py
@@ -30,12 +30,11 @@ from src.core.library.json.library import Library as JsonLibrary # type: ignore
from src.qt.helpers.custom_runnable import CustomRunnable
from src.qt.helpers.function_iterator import FunctionIterator
from src.qt.helpers.qbutton_wrapper import QPushButtonWrapper
+from src.qt.translations import Translations
from src.qt.widgets.paged_panel.paged_body_wrapper import PagedBodyWrapper
from src.qt.widgets.paged_panel.paged_panel import PagedPanel
from src.qt.widgets.paged_panel.paged_panel_state import PagedPanelState
-from ..translations import Translations
-
logger = structlog.get_logger(__name__)
diff --git a/tagstudio/src/qt/widgets/panel.py b/tagstudio/src/qt/widgets/panel.py
index 8f11a5be..573f6f48 100755
--- a/tagstudio/src/qt/widgets/panel.py
+++ b/tagstudio/src/qt/widgets/panel.py
@@ -6,8 +6,7 @@ from typing import Callable
from PySide6.QtCore import Qt, Signal
from PySide6.QtWidgets import QHBoxLayout, QLabel, QPushButton, QVBoxLayout, QWidget
-
-from ..translations import Translations
+from src.qt.translations import Translations
class PanelModal(QWidget):
diff --git a/tagstudio/src/qt/widgets/preview_panel.py b/tagstudio/src/qt/widgets/preview_panel.py
index 051ed28e..0bb1c181 100644
--- a/tagstudio/src/qt/widgets/preview_panel.py
+++ b/tagstudio/src/qt/widgets/preview_panel.py
@@ -52,6 +52,7 @@ from src.qt.helpers.qbutton_wrapper import QPushButtonWrapper
from src.qt.helpers.rounded_pixmap_style import RoundedPixmapStyle
from src.qt.modals.add_field import AddFieldModal
from src.qt.platform_strings import PlatformStrings
+from src.qt.translations import Translations
from src.qt.widgets.fields import FieldContainer
from src.qt.widgets.media_player import MediaPlayer
from src.qt.widgets.panel import PanelModal
@@ -62,8 +63,6 @@ from src.qt.widgets.text_line_edit import EditTextLine
from src.qt.widgets.thumb_renderer import ThumbRenderer
from src.qt.widgets.video_player import VideoPlayer
-from ..translations import Translations
-
if typing.TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/widgets/tag.py b/tagstudio/src/qt/widgets/tag.py
index 7cd7f697..46f5fb9b 100644
--- a/tagstudio/src/qt/widgets/tag.py
+++ b/tagstudio/src/qt/widgets/tag.py
@@ -20,8 +20,7 @@ from PySide6.QtWidgets import (
from src.core.library import Tag
from src.core.library.alchemy.enums import TagColor
from src.core.palette import ColorType, get_tag_color
-
-from ..translations import Translations
+from src.qt.translations import Translations
class TagAliasWidget(QWidget):
diff --git a/tagstudio/src/qt/widgets/tag_box.py b/tagstudio/src/qt/widgets/tag_box.py
index 26f666a6..8e095d79 100755
--- a/tagstudio/src/qt/widgets/tag_box.py
+++ b/tagstudio/src/qt/widgets/tag_box.py
@@ -16,12 +16,11 @@ from src.core.library.alchemy.fields import TagBoxField
from src.qt.flowlayout import FlowLayout
from src.qt.modals.build_tag import BuildTagPanel
from src.qt.modals.tag_search import TagSearchPanel
+from src.qt.translations import Translations
from src.qt.widgets.fields import FieldWidget
from src.qt.widgets.panel import PanelModal
from src.qt.widgets.tag import TagWidget
-from ..translations import Translations
-
if typing.TYPE_CHECKING:
from src.qt.ts_qt import QtDriver
diff --git a/tagstudio/src/qt/widgets/video_player.py b/tagstudio/src/qt/widgets/video_player.py
index b1d4be34..7e5e6ba1 100644
--- a/tagstudio/src/qt/widgets/video_player.py
+++ b/tagstudio/src/qt/widgets/video_player.py
@@ -31,8 +31,7 @@ from PySide6.QtWidgets import QGraphicsScene, QGraphicsView
from src.core.enums import SettingItems
from src.qt.helpers.file_opener import FileOpenerHelper
from src.qt.platform_strings import PlatformStrings
-
-from ..translations import Translations
+from src.qt.translations import Translations
if typing.TYPE_CHECKING:
from src.qt.ts_qt import QtDriver