1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 11:16:47 +00:00

feat(locale): the panel offers only the languages it is translated into

The language choice on the Settings page listed every language Django
knows, 99 of them. Six catalogs (Czech under the wrong code, German,
Spanish, French, Russian, Ukrainian) translated none of the panel's
messages, so choosing one of them, like most of the others, showed
English. The Turkish catalog lacked the four newest messages.

The panel now offers English and Turkish (LANGUAGES). The empty
catalogs and the English one, which has nothing to translate, are
removed. Turkish translates every message again. CI checks that the
offered catalogs translate every message and that their compiled
files are up to date; the README says how to update them.
This commit is contained in:
catborise 2026-11-02 22:51:11 +03:00
parent 2d47f87dcb
commit 9f2cd664e6
20 changed files with 791 additions and 28791 deletions

View file

@ -71,7 +71,8 @@ jobs:
libldap2-dev \
libsasl2-dev \
pkg-config \
gcc
gcc \
gettext
- name: Install Python Dependencies
run: |
@ -90,6 +91,19 @@ jobs:
- name: Run Django Migrations
run: python manage.py migrate --noinput
# Each catalog of LANGUAGES translates every message, and its compiled
# .mo is the .po's: a changed text needs its translations
- name: Check Translation Catalogs
if: matrix.python-version == '3.12' && matrix.database == 'sqlite'
run: |
python manage.py makemessages -l tr --no-obsolete --ignore=staticfiles -v0
for dir in locale/tr/LC_MESSAGES; do
msgfmt --check -o /tmp/django.mo "$dir/django.po"
missing=$(msgattrib --untranslated "$dir/django.po"; msgattrib --only-fuzzy "$dir/django.po")
if [ -n "$missing" ]; then echo "$missing"; echo "::error file=$dir/django.po::untranslated or fuzzy messages"; exit 1; fi
cmp <(msgunfmt "$dir/django.mo") <(msgunfmt /tmp/django.mo) || { echo "::error file=$dir/django.mo::not compiled from django.po (compilemessages)"; exit 1; }
done
# Includes the vrtManager tests; fails below the coverage floor in pyproject.toml
- name: Run Test Suite
run: |

View file

@ -736,6 +736,16 @@ python3 dev/console_layout.py us "English (US)" --model pc104 # a keyboard with
It lists the dead keys it leaves out: a character only a dead key types cannot be typed. Type a sample with every character group of the layout into a VM set to that layout before committing the file.
### Translations
The panel is translated into the languages of `LANGUAGES` in `settings.py`, each with a full catalog in `locale/`. A new or changed text needs its translation in each before CI passes (needs `gettext`):
```bash
python manage.py makemessages -l tr --no-obsolete --ignore=staticfiles --ignore=.venv
# translate the new and fuzzy entries of locale/tr/LC_MESSAGES/django.po
python manage.py compilemessages -l tr
```
### Running tests
```bash

View file

@ -1,3 +1,5 @@
import re
from django.contrib.messages import get_messages
from django.test import RequestFactory, TestCase
from django.urls import reverse
@ -22,6 +24,12 @@ class AppSettingsTestCase(TestCase):
response = self.client.get(reverse("appsettings"))
self.assertEqual(response.status_code, 200)
def test_the_language_choice_offers_the_translated_languages(self):
page = self.client.get(reverse("appsettings")).content.decode()
choice = page[page.index('<select id="language"'):]
choice = choice[:choice.index("</select>")]
self.assertEqual(re.findall(r'<option value="([^"]+)"', choice), ["en", "tr"])
def test_appsettings_update_setting(self):
setting = AppSettings.objects.get(key="SHOW_ACCESS_ROOT_PASSWORD")
original_value = setting.value

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -201,6 +201,11 @@ LOGOUT_REDIRECT_URL = "/accounts/login/"
LOGIN_REDIRECT_URL="/instances/"
LANGUAGE_CODE = "en-us"
# the languages the panel is translated into, each with a full catalog in locale/
LANGUAGES = [
("en", "English"),
("tr", "Türkçe"),
]
TIME_ZONE = "UTC"