Skip to content

Commit

Permalink
Add workflow to check for translation issues
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander01998 committed Dec 23, 2024
1 parent 3a06d01 commit 6666d08
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 1 deletion.
30 changes: 30 additions & 0 deletions .github/workflows/check_translations.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Check Translations

on:
push:
branches-ignore:
- "dependabot/**"
tags-ignore:
- "**"
paths:
- "src/main/resources/assets/wurst/translations/**.json"
pull_request:
paths:
- "src/main/resources/assets/wurst/translations/**.json"
workflow_dispatch:

jobs:
check_translations:
runs-on: ubuntu-latest
steps:

- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Run check_translations.py
run: python scripts/check_translations.py
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,7 @@ remappedSrc/
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

desktop.ini
# python
*.pyc

desktop.ini
47 changes: 47 additions & 0 deletions scripts/check_translations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import util
from pathlib import Path

translations_dir = Path("src") / "main" / "resources" / "assets" / "wurst" / "translations"


def show_translation_stats(en_us: dict, translations: dict):
"""Render a table of the current translation progress for each language."""
util.add_github_summary("| Language | Translated | % |")
util.add_github_summary("| --- | --- | --- |")
util.add_github_summary(f"| en_us | {len(en_us)} | 100.00% |")
for lang, data in translations.items():
util.add_github_summary(f"| {lang} | {len(data)} | {len(data) / len(en_us) * 100:.2f}% |")
util.add_github_summary("")


def check_extra_keys(en_us: dict, translations: dict):
"""Check if any translation files contain keys that don't exist in the original."""
extra_keys_found = False
for lang, data in translations.items():
extra_keys = set(data.keys()) - set(en_us.keys())
if extra_keys:
extra_keys_found = True
util.add_github_summary(
f"⚠ {lang}.json contains translations that don't exist in en_us.json ({len(extra_keys)} found):"
)
for key in extra_keys:
util.add_github_summary(f"- {key}")
if extra_keys_found:
raise Exception("Found extra keys in one or more translation files, see summary")


def main():
en_us = util.read_json_file(translations_dir / "en_us.json")
translations = {}
for path in translations_dir.rglob("*.json"):
if path.is_file() and path.name != "en_us.json":
lang = path.name.removesuffix(".json")
data = util.read_json_file(path)
translations[lang] = data

show_translation_stats(en_us, translations)
check_extra_keys(en_us, translations)


if __name__ == "__main__":
main()
17 changes: 17 additions & 0 deletions scripts/util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import json
import os
from pathlib import Path


def read_json_file(path: Path) -> dict:
"""Read a JSON data file."""
return json.loads(path.read_text(encoding="utf-8"))


def add_github_summary(summary: str):
"""Add a line to the GitHub Actions summary for the current step."""
if "GITHUB_STEP_SUMMARY" not in os.environ:
print(f"Not running on GHA, would have set summary: {summary}")
return
with open(os.environ["GITHUB_STEP_SUMMARY"], "a") as summary_file:
print(summary, file=summary_file)

0 comments on commit 6666d08

Please sign in to comment.