feat: load localized content

This commit is contained in:
Corentin 2024-05-21 12:24:51 +02:00
parent b2748a6cf3
commit e6363bea4e
3 changed files with 28 additions and 1 deletions

View File

@ -1,4 +1,5 @@
from functools import cache
from gettext import textdomain
from pathlib import Path
from typing import Any, Iterable, Iterator
@ -33,13 +34,14 @@ class ContentDirectory(Content):
@cache # noqa: B019
def __load_children(self, name: str) -> Content:
child_path = self.path / name
child_path = self.__get_localized_path(self.path / name)
if not child_path.exists():
raise FileNotFoundError(child_path)
if child_path.is_dir():
return ContentDirectory(child_path)
if child_path.is_file():
if child_path.suffix in [".yml", ".yaml", ".json"]:
return DataFile(child_path)
@ -48,6 +50,15 @@ class ContentDirectory(Content):
raise NotImplementedError()
@staticmethod
def __get_localized_path(path: Path) -> Path:
domain = textdomain()
localized_path = path.with_name(f"{path.stem}-{domain}{path.suffix}")
if not localized_path.exists():
return path
return localized_path
class DataField:
def __init__(self, file_path: Path, value: Any) -> None:

View File

@ -1,3 +1,4 @@
from gettext import textdomain
from pathlib import Path
from pytest import raises
@ -45,3 +46,12 @@ def test_load_markdown(datadir: Path) -> None:
assert page.html == "<p>Content</p>"
assert str(page.meta["title"]) == "Title"
def test_localized_content(datadir: Path) -> None:
content = ContentDirectory(datadir)
textdomain("fr")
page = content.load(Path("page.md"))
assert page.html == "<p>Contenu</p>"
assert str(page.meta["title"]) == "Titre"

View File

@ -0,0 +1,6 @@
---
title: Titre
---
Contenu