diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml new file mode 100644 index 0000000..0a1cde1 --- /dev/null +++ b/.github/workflows/translations.yml @@ -0,0 +1,31 @@ +name: Check translations + +# Drop permissions to minimum for security +permissions: + contents: read + +on: + pull_request: + push: + workflow_dispatch: + +jobs: + check_translations: + name: Check translations + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Python 3.11 + uses: actions/setup-python@v4 + with: + python-version: 3.11 + + - name: Install runtime dependencies + run: | + python3 -m pip install --upgrade pip setuptools wheel + python3 -m pip install polib + + - name: Check translations + run: | + python3 validate_po.py diff --git a/validate_po.py b/validate_po.py index 7865a6d..f37150a 100644 --- a/validate_po.py +++ b/validate_po.py @@ -19,17 +19,24 @@ import os import polib +import sys -def validate_po(locale, path): +def validate_po(locale: str, path: str) -> bool: + success = True po = polib.pofile(path) for entry in po: if entry.msgstr and (entry.msgid.count("%") != entry.msgstr.count("%")): - print("Number of varialbes mismatched in " + locale) + print("Number of variables mismatched in " + locale) print(entry.msgid + " -> " + entry.msgstr) print() + success = False + return success +success = True locales = os.listdir('safeeyes/config/locale') -for locale in locales: +for locale in sorted(locales): path = os.path.join('safeeyes/config/locale', locale, "LC_MESSAGES/safeeyes.po") if os.path.isfile(path): - validate_po(locale, path) \ No newline at end of file + print('Validating translation %s...' % path) + success = validate_po(locale, path) and success +sys.exit(0 if success else 1)