@app.command()
def translate_page(
*,
- lang: Annotated[str, typer.Option(envvar="LANG")],
+ language: Annotated[str, typer.Option(envvar="LANGUAGE")],
en_path: Annotated[Path, typer.Option(envvar="EN_PATH")],
) -> None:
langs = get_langs()
- language = langs[lang]
- lang_path = Path(f"docs/{lang}")
+ language_name = langs[language]
+ lang_path = Path(f"docs/{language}")
lang_path.mkdir(exist_ok=True)
lang_prompt_path = lang_path / "llm-prompt.md"
assert lang_prompt_path.exists(), f"Prompt file not found: {lang_prompt_path}"
assert str(en_path).startswith(str(en_docs_path)), (
f"Path must be inside {en_docs_path}"
)
- out_path = generate_lang_path(lang=lang, path=en_path)
+ out_path = generate_lang_path(lang=language, path=en_path)
out_path.parent.mkdir(parents=True, exist_ok=True)
original_content = en_path.read_text()
old_translation: str | None = None
if out_path.exists():
print(f"Found existing translation: {out_path}")
old_translation = out_path.read_text()
- print(f"Translating {en_path} to {lang} ({language})")
+ print(f"Translating {en_path} to {language} ({language_name})")
agent = Agent("openai:gpt-4o")
prompt_segments = [
)
prompt_segments.extend(
[
- f"Translate to {language} ({lang}).",
+ f"Translate to {language} ({language_name}).",
"Original content:",
f"%%%\n{original_content}%%%",
]
@app.command()
-def translate_lang(lang: Annotated[str, typer.Option(envvar="LANG")]) -> None:
+def translate_lang(language: Annotated[str, typer.Option(envvar="LANGUAGE")]) -> None:
paths_to_process = list(iter_en_paths_to_translate())
print("Original paths:")
for p in paths_to_process:
missing_paths: list[Path] = []
skipped_paths: list[Path] = []
for p in paths_to_process:
- lang_path = generate_lang_path(lang=lang, path=p)
+ lang_path = generate_lang_path(lang=language, path=p)
if lang_path.exists():
skipped_paths.append(p)
continue
print(f"Total paths to process: {len(missing_paths)}")
for p in missing_paths:
print(f"Translating: {p}")
- translate_page(lang="es", en_path=p)
+ translate_page(language="es", en_path=p)
print(f"Done translating: {p}")
@app.command()
-def list_removable(lang: str) -> list[Path]:
+def list_removable(language: str) -> list[Path]:
removable_paths: list[Path] = []
- lang_paths = Path(f"docs/{lang}").rglob("*.md")
+ lang_paths = Path(f"docs/{language}").rglob("*.md")
for path in lang_paths:
- en_path = generate_en_path(lang=lang, path=path)
+ en_path = generate_en_path(lang=language, path=path)
if not en_path.exists():
removable_paths.append(path)
print(removable_paths)
@app.command()
-def remove_removable(lang: str) -> None:
- removable_paths = list_removable(lang)
+def remove_removable(language: str) -> None:
+ removable_paths = list_removable(language)
for path in removable_paths:
path.unlink()
print(f"Removed: {path}")
@app.command()
-def list_missing(lang: str) -> list[Path]:
+def list_missing(language: str) -> list[Path]:
missing_paths: list[Path] = []
en_lang_paths = list(iter_en_paths_to_translate())
for path in en_lang_paths:
- lang_path = generate_lang_path(lang=lang, path=path)
+ lang_path = generate_lang_path(lang=language, path=path)
if not lang_path.exists():
missing_paths.append(path)
print(missing_paths)
@app.command()
-def list_outdated(lang: str) -> list[Path]:
+def list_outdated(language: str) -> list[Path]:
dir_path = Path(__file__).absolute().parent.parent
repo = git.Repo(dir_path)
outdated_paths: list[Path] = []
en_lang_paths = list(iter_en_paths_to_translate())
for path in en_lang_paths:
- lang_path = generate_lang_path(lang=lang, path=path)
+ lang_path = generate_lang_path(lang=language, path=path)
if not lang_path.exists():
continue
en_commit_datetime = list(repo.iter_commits(paths=path, max_count=1))[
@app.command()
-def update_outdated(lang: Annotated[str, typer.Option(envvar="LANG")]) -> None:
- outdated_paths = list_outdated(lang)
+def update_outdated(language: Annotated[str, typer.Option(envvar="LANGUAGE")]) -> None:
+ outdated_paths = list_outdated(language)
for path in outdated_paths:
- print(f"Updating lang: {lang} path: {path}")
- translate_page(lang=lang, en_path=path)
+ print(f"Updating lang: {language} path: {path}")
+ translate_page(language=language, en_path=path)
print(f"Done updating: {path}")
print("Done updating all outdated paths")
@app.command()
-def add_missing(lang: Annotated[str, typer.Option(envvar="LANG")]) -> None:
- missing_paths = list_missing(lang)
+def add_missing(language: Annotated[str, typer.Option(envvar="LANGUAGE")]) -> None:
+ missing_paths = list_missing(language)
for path in missing_paths:
- print(f"Adding lang: {lang} path: {path}")
- translate_page(lang=lang, en_path=path)
+ print(f"Adding lang: {language} path: {path}")
+ translate_page(language=language, en_path=path)
print(f"Done adding: {path}")
print("Done adding all missing paths")
@app.command()
-def update_and_add(lang: Annotated[str, typer.Option(envvar="LANG")]) -> None:
- print(f"Updating outdated translations for {lang}")
- update_outdated(lang=lang)
- print(f"Adding missing translations for {lang}")
- add_missing(lang=lang)
- print(f"Done updating and adding for {lang}")
+def update_and_add(language: Annotated[str, typer.Option(envvar="LANGUAGE")]) -> None:
+ print(f"Updating outdated translations for {language}")
+ update_outdated(language=language)
+ print(f"Adding missing translations for {language}")
+ add_missing(language=language)
+ print(f"Done updating and adding for {language}")
@app.command()
def make_pr(
*,
- lang: Annotated[str, typer.Option(envvar="LANG")],
+ language: Annotated[str | None, typer.Option(envvar="LANGUAGE")] = None,
github_token: Annotated[str, typer.Option(envvar="GITHUB_TOKEN")],
github_repository: Annotated[str, typer.Option(envvar="GITHUB_REPOSITORY")],
) -> None:
subprocess.run(
["git", "config", "user.email", "github-actions@github.com"], check=True
)
- branch_name = f"translate-{lang}-{secrets.token_hex(4)}"
+ branch_name = "translate"
+ if language:
+ branch_name += f"-{language}"
+ branch_name += f"-{secrets.token_hex(4)}"
print(f"Creating a new branch {branch_name}")
subprocess.run(["git", "checkout", "-b", branch_name], check=True)
print("Adding updated files")
- lang_path = Path(f"docs/{lang}")
- subprocess.run(["git", "add", str(lang_path)], check=True)
+ git_path = Path("docs")
+ subprocess.run(["git", "add", str(git_path)], check=True)
print("Committing updated file")
- message = f"🌐 Update translations - {lang}"
+ message = "🌐 Update translations"
+ if language:
+ message += f" for {language}"
subprocess.run(["git", "commit", "-m", message], check=True)
print("Pushing branch")
subprocess.run(["git", "push", "origin", branch_name], check=True)