Compare commits

...
6 Commits
Author SHA1 Message Date
Darragh Elliott 8f47165486 feat: only apply rtl directions
continuous-integration/drone/pr Build is passing
2026-05-02 14:45:07 +02:00
Darragh Elliott b9b7f55359 feat: better error reporting for missing lang codes 2026-05-02 14:45:07 +02:00
Darragh Elliott 7fc14b794b fix: add missing lang codes 2026-05-02 14:45:07 +02:00
Darragh Elliott 3449a7beeb fix: do not have a default direction, error to force additon to lang direction mappings 2026-05-02 14:45:07 +02:00
Darragh Elliott d98037450c fix: add en to lang mappings 2026-05-02 14:45:07 +02:00
Darragh Elliott d75112192d feat: set lang and direction on included elements
this should prevent weird rtl issues
2026-05-02 14:45:07 +02:00
2 changed files with 180 additions and 0 deletions
@@ -0,0 +1,160 @@
# SPDX-FileCopyrightText: Free Software Foundation Europe e.V. <https://fsfe.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
"""Giant dict of iso code and lang directions."""
LANG_CODE_DIRECTION_MAPPINGS = {
"aa": "ltr",
"ab": "ltr",
"af": "ltr",
"am": "ltr",
"an": "rtl",
"ar": "rtl",
"as": "ltr",
"av": "ltr",
"ca": "ltr",
"be": "ltr",
"bg": "ltr",
"bh": "ltr",
"bi": "ltr",
"bm": "ltr",
"bn": "ltr",
"bs": "ltr",
"ce": "ltr",
"co": "ltr",
"cr": "ltr",
"cs": "ltr",
"cu": "ltr",
"cv": "ltr",
"cy": "ltr",
"da": "ltr",
"de": "ltr",
"dv": "ltr",
"el": "ltr",
"en": "ltr",
"eo": "ltr",
"es": "ltr",
"et": "ltr",
"eu": "ltr",
"fa": "rtl",
"ff": "ltr",
"fi": "ltr",
"fj": "ltr",
"fo": "ltr",
"fr": "ltr",
"fy": "ltr",
"ga": "ltr",
"gd": "ltr",
"gl": "ltr",
"gn": "ltr",
"gu": "ltr",
"gv": "ltr",
"ha": "rtl",
"he": "ltr",
"ho": "ltr",
"hr": "ltr",
"hu": "ltr",
"hy": "ltr",
"ia": "ltr",
"id": "ltr",
"ie": "ltr",
"ig": "ltr",
"ii": "ltr",
"io": "ltr",
"is": "ltr",
"it": "ltr",
"iu": "ltr",
"ja": "ltr",
"jv": "ltr",
"ka": "ltr",
"kg": "ltr",
"ki": "ltr",
"kj": "ltr",
"kk": "ltr",
"kl": "ltr",
"km": "ltr",
"ko": "ltr",
"kr": "ltr",
"ks": "rtl",
"ku": "rtl",
"kv": "ltr",
"kw": "ltr",
"ky": "ltr",
"la": "ltr",
"lg": "ltr",
"li": "ltr",
"ln": "ltr",
"lo": "ltr",
"lu": "ltr",
"lv": "ltr",
"mg": "ltr",
"mh": "ltr",
"mi": "ltr",
"mk": "ltr",
"mn": "ltr",
"mr": "ltr",
"ms": "ltr",
"mt": "ltr",
"my": "ltr",
"nb": "ltr",
"nd": "ltr",
"ne": "ltr",
"ng": "ltr",
"nl": "ltr",
"nn": "ltr",
"nv": "ltr",
"ny": "ltr",
"oc": "ltr",
"oj": "ltr",
"om": "ltr",
"or": "ltr",
"os": "ltr",
"pa": "ltr",
"pi": "ltr",
"pl": "rtl",
"pt": "ltr",
"rm": "ltr",
"rn": "ltr",
"ro": "ltr",
"ru": "ltr",
"sa": "ltr",
"sc": "ltr",
"sd": "rtl",
"se": "ltr",
"sg": "ltr",
"si": "ltr",
"sk": "ltr",
"sl": "ltr",
"sn": "ltr",
"so": "ltr",
"sq": "ltr",
"sr": "ltr",
"st": "ltr",
"su": "ltr",
"sv": "ltr",
"ta": "ltr",
"te": "ltr",
"tg": "ltr",
"th": "ltr",
"tk": "ltr",
"tl": "ltr",
"tn": "ltr",
"to": "ltr",
"tr": "rtl",
"tt": "ltr",
"tw": "ltr",
"ty": "ltr",
"ug": "ltr",
"uk": "rtl",
"uz": "ltr",
"ve": "ltr",
"vi": "ltr",
"vo": "ltr",
"wa": "ltr",
"wo": "ltr",
"xh": "ltr",
"yi": "rtl",
"yo": "ltr",
"za": "ltr",
"zh": "ltr",
}
@@ -11,6 +11,7 @@ from typing import TYPE_CHECKING, Any
from lxml import etree
from fsfe_website_build.lib.lang_directions import LANG_CODE_DIRECTION_MAPPINGS
from fsfe_website_build.lib.misc import get_basename, get_version, lang_from_filename
if TYPE_CHECKING:
@@ -34,8 +35,27 @@ def _get_xmls(file: Path, parser: etree.XMLParser) -> list[etree.Element]:
# to this element instead of the actual content element.
for elem in root.xpath("version"):
root.remove(elem)
lang = lang_from_filename(file)
tmp_direction = LANG_CODE_DIRECTION_MAPPINGS.get(lang_from_filename(file))
if tmp_direction is None:
raise RuntimeError( # noqa: TRY003
f"Lang {lang_from_filename(file)}"
" missing from LANG_CODE_DIRECTION_MAPPINGS."
" Please add it in lang_directions.py"
)
direction: str = tmp_direction
for elem in root.xpath("*"):
elem.set("filename", get_basename(file))
# set the lang and direction on all elements
# this ensure no matter how we source an elem
# it has the right lang and direction
elem.set("lang", lang)
if direction != "ltr":
elem.set("dir", direction)
for subelem in elem.xpath("//*"):
subelem.set("lang", lang)
if direction != "ltr":
subelem.set("dir", direction)
elements.append(elem)
# and then we return the element
return elements