From 58dbdf6f0eed5af9337aeda500a18e4378f217bc Mon Sep 17 00:00:00 2001 From: Kiril Kovachev Date: Tue, 15 Oct 2024 19:17:21 +0100 Subject: [PATCH] Use JSON files from file system to specify the translation strings --- kanken_online/__init__.py | 2 + kanken_online/lang.py | 108 +++++++------------------------------- 2 files changed, 20 insertions(+), 90 deletions(-) diff --git a/kanken_online/__init__.py b/kanken_online/__init__.py index 5c3c160..b95881e 100644 --- a/kanken_online/__init__.py +++ b/kanken_online/__init__.py @@ -105,6 +105,8 @@ def create_app(test_config=None): } with open(Path(app.root_path, "static", "lang", f"{language}.json"), mode="w") as f: json.dump(strings[language], f, ensure_ascii=False, indent=0) + + lang.update_languages() return redirect("/translations") # def use_english(text_id: str): diff --git a/kanken_online/lang.py b/kanken_online/lang.py index a9a6e9a..370b05f 100644 --- a/kanken_online/lang.py +++ b/kanken_online/lang.py @@ -1,98 +1,26 @@ +import json +from pathlib import Path from flask import session -EXISTING_STRINGS = { - "kanken_online", - "options", - "log_in", - "register", - "log_out", - "kanji", - "forum", - "main_page", - "username", - "password", - "search", - "search_placeholder", - "include_kanji", - "include_kotoba", - "username_required", - "password_required", - "incorrect_username", - "incorrect_password" - "about", - "about-para", - "indices", - "translations" -} +LanguageMapping = dict[str, str] -ENGLISH = { - "kanken_online": "KankenOnline", - "options": "Options", - "log_in": "Log in", - "register": "Register", - "log_out": "Log out", - "kanji": "Kanji", - "forum": "Forum", - "main_page": "Main Page", - "username": "Username", - "password": "Password", - "search": "Search", - "search_placeholder": "Enter kanji or word", - "include_kanji": "Include kanji", - "include_kotoba": "Include kotoba", - "username_required": "Username required.", - "password_required": "Password required.", - "incorrect_username": "Incorrect username.", - "incorrect_password": "Incorrect password.", - "about": "About KankenOnline", - "about-para": "KankenOnline is a website seeking to provide resources to pass the Kanji Kentei level 1 exam. You can search through the approximately 6,300 characters included in Kanken, as well as generate a number of study materials automatically. For example, you can generate a PDF-format exam resembling the Kanken level 1 exam, which has the goal of mirroring the real thing as closely as possible for your preparation. Additionally, a variety of information about kanji is provided, among which phonetic series, rimes/kanji phonology, radicals, inseparable kanji, character origins and etymologies.", - "indices": "Indices", - "radical_index": "Radical index", - "indivisible_index": "Indivisible kanji index", - "phonetic_series": "Phonetic series", - "dark_theme": "Dark theme", - "light_theme": "Light theme", - "language": "Language", - "theme": "Color settings", - "translations": "Translations", -} +def load_language(lang_code: str) -> LanguageMapping: + with open(Path("kanken_online/static/lang", f"{lang_code}.json")) as f: + return json.load(f) -JAPANESE = { - "kanken_online": "漢検オンライン", - "options": "設定", - "log_in": "ログイン", - "register": "登録", - "log_out": "ログアウト", - "kanji": "漢字", - "forum": "掲示板", - "main_page": "ホームページ", - "username": "ユーザー名", - "password": "パスワード", - "search": "検索", - "search_placeholder": "漢字・言葉を入力", - "include_kanji": "漢字を含む", - "include_kotoba": "言葉を含む", - "username_required": "ユーザー名が必要です", - "password_required": "パスワードが必要です", - "incorrect_username": "ユーザー名が違います", - "incorrect_password": "パスワードが違います", - "about": "漢検オンラインとは", - "about-para": "漢検オンラインとは、漢検一級合格を目当てにした資料を供用しているサイトです。ここで漢検のやく6300字を検索でき、いろんな勉強材を自動的に作ることができます。たとえば、漢検一級模様の試験PDFを作ることができて、本物の漢検試験に大抵該当することが目的です。さらに、色々漢字についての情報を取り集めております。諧声域(かいせいいき)・音韻学・部首・不可分漢字・字源・語源などがその内です。", - "indices": "索引", - "radical_index": "部首索引", - "indivisible_index": "不可分漢字索引", - "phonetic_series": "諧声域索引", - "dark_theme": "ダークモード", - "light_theme": "ライトモード", - "language": "言語", - "theme": "色設定", - "translations": "翻訳", -} +LANGUAGES = {} -LANGUAGES = { - "en": ENGLISH, - "ja": JAPANESE -} +def update_languages(): + ENGLISH = load_language("en") + JAPANESE = load_language("ja") + + global LANGUAGES + LANGUAGES = { + "en": ENGLISH, + "ja": JAPANESE + } + +update_languages() # assert all(all(key in lang for key in EXISTING_STRINGS) for lang in LANGUAGES) # Ensure all strings are mapped for all existing languages # assert not [key for lang in LANGUAGES for key in lang if ((key in lang) and (key not in EXISTING_STRINGS))]