add(ui/ux): german and english ui with a toggle in the navbar

This commit is contained in:
Steppenstreuner
2026-09-01 17:50:26 +02:00
parent 169e84901c
commit d9b4c95ca6
5 changed files with 865 additions and 335 deletions
+30 -1
View File
@@ -57,12 +57,14 @@ def server(tmp_path_factory):
@pytest.fixture
def page(server):
"""A German browser, so the UI language is the same everywhere."""
with sync_api.sync_playwright() as pw:
try:
browser = pw.chromium.launch()
except Exception as exc: # browsers not downloaded
pytest.skip(f"no chromium: {exc}")
page = browser.new_page(viewport={"width": 1200, "height": 900})
page = browser.new_page(viewport={"width": 1200, "height": 900},
locale="de-DE")
errors = []
page.on("pageerror", lambda e: errors.append(str(e)))
page.goto(server, wait_until="networkidle")
@@ -124,3 +126,30 @@ def test_format_tags_and_the_format_filter(page):
rows = page.locator("#import-table tbody tr")
assert rows.count() == 1
assert "epub" in rows.first.locator(".tag.fmt").text_content()
def test_the_browser_language_decides_and_the_toggle_switches(page, server):
assert page.locator("nav button[data-view=search]").text_content() == "Suche"
assert page.locator("#lang-toggle").text_content() == "EN"
page.click("#lang-toggle")
assert page.locator("nav button[data-view=search]").text_content() == "Search"
assert page.locator("#lang-toggle").text_content() == "DE"
assert page.get_attribute("html", "lang") == "en"
assert page.get_attribute("#search-q", "placeholder") == "Title, author or ISBN…"
page.reload(wait_until="networkidle") # the choice outlives the reload
assert page.locator("nav button[data-view=search]").text_content() == "Search"
def test_english_reaches_the_rendered_rows(page):
page.click("#lang-toggle")
page.click("nav button[data-view=import]")
page.click("#scan-btn")
page.wait_for_selector("[data-quick]")
assert "— skip —" in page.locator("#import-table tbody select").first.text_content()
assert "2.0 KB" in " ".join(page.locator("#import-table .tag.fmt").all_text_contents())
# switching back re-renders the table that is already on screen
page.click("#lang-toggle")
assert "— überspringen —" in page.locator("#import-table tbody select").first.text_content()
assert "2,0 KB" in " ".join(page.locator("#import-table .tag.fmt").all_text_contents())