diff --git a/src/guiguts/application.py b/src/guiguts/application.py index 8e7f478a..422d8424 100644 --- a/src/guiguts/application.py +++ b/src/guiguts/application.py @@ -894,7 +894,9 @@ def selection_str() -> str: ) the_statusbar.add( - "languages label", tooltip="Click: Set language(s)", text="Lang: " + "languages label", + tooltip="Click: Set language(s), e.g. 'en' or 'de fr'", + text="Lang: ", ) the_statusbar.add_binding( "languages label", "ButtonRelease-1", self.file.set_languages diff --git a/src/guiguts/file.py b/src/guiguts/file.py index 9414ed86..076507e2 100644 --- a/src/guiguts/file.py +++ b/src/guiguts/file.py @@ -114,6 +114,7 @@ def __init__( self._filename_callback = filename_callback self._image_dir = "" self._project_id = "" + self._languages = "en" self._languages_callback = languages_callback self.page_details = PageDetails() self.project_dict = ProjectDict() @@ -178,13 +179,17 @@ def languages(self) -> Any: @languages.setter def languages(self, value: str) -> None: + value = value.strip() if not value: - value = "en" + value = self._languages if self._languages else "en" + if re.fullmatch(r"[a-z_]+(\+[a-z_]+)*", value) is None: + logger.error("Invalid language code(s): valid examples are 'en' or 'de fr'") + return self._languages = value self._languages_callback() - preferences.set(PrefKey.DEFAULT_LANGUAGES, value) + preferences.set(PrefKey.DEFAULT_LANGUAGES, self._languages) # Inform maintext, so text manipulation algorithms there can check languages - maintext().set_languages(value) + maintext().set_languages(self._languages) def reset(self) -> None: """Reset file internals to defaults, e.g. filename, page markers, etc. diff --git a/src/guiguts/maintext.py b/src/guiguts/maintext.py index 3b606e2d..60b802a9 100644 --- a/src/guiguts/maintext.py +++ b/src/guiguts/maintext.py @@ -1926,11 +1926,10 @@ def capitalize_first_letter(match: re.regex.Match[str]) -> str: def set_languages(self, languages: str) -> None: """Set languages used in text. - Multiple languages are separated by "+" + Args: + languages: Language, or list of languages separated by "+". Assumed valid. """ - if languages: - assert re.match(r"[a-z_]+(\+[a-z_]+)*", languages) - self.languages = languages + self.languages = languages def get_language_list(self) -> list[str]: """Get list of languages used in text.