From 039672a7e1281c748c64306e01ce5ac83d1f369e Mon Sep 17 00:00:00 2001 From: Vadim Kazakov Date: Tue, 16 Jun 2026 18:13:32 +0300 Subject: [PATCH 1/3] feat: add translation file to web interface --- .../web/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 3640 bytes .../web/locale/ru/LC_MESSAGES/django.po | 176 ++++++++++++++++++ src/imgtests/web/tests/settings.py | 13 +- .../templates/tests_interface/base.html | 5 +- .../tests_interface/distro_page.html | 56 +++--- .../tests_interface/excel_reports.html | 19 +- .../templates/tests_interface/index.html | 11 +- .../tests_interface/reports_list.html | 31 +-- 8 files changed, 253 insertions(+), 58 deletions(-) create mode 100644 src/imgtests/web/locale/ru/LC_MESSAGES/django.mo create mode 100644 src/imgtests/web/locale/ru/LC_MESSAGES/django.po diff --git a/src/imgtests/web/locale/ru/LC_MESSAGES/django.mo b/src/imgtests/web/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a8d5735cf8488c7f88feea10c1412795a45f09b5 GIT binary patch literal 3640 zcmai#TWlQF8GuhAgZ00{{Rq)Pq%Gqbz4W5Z~7 zzd4ux{-3j-U%Tcd#j}C$t$ZK+g;Ja0*hT#C^j)mfHSl40IUIz)fnSHUCj_wWRi{cor93-H&BKZfG}7m$zojvtZx z0p1SRqFnsH3!Wi&z3>jkKVFJW*p8E;e+v}3Kf}ZDF?bLBcRGJ1&Wrt9;Z5-FlzX7$ z$${N)3~qtb@HY4*`~zIurqplXPN?A{@K5kBP~!a*u7j6R#JzAM{4K1dd;xA`JPjr9 zpTS=EHLStSBti1=7Q7370N2BBQ{G6ir4P2l4p@blR4+q`|5Q5vA>70G8%VlrFNxoh zE72#9#4EmOzAHVFM~Ouq>6NSbQV#n_4ma?Xn#e;LY`@$HanbdBcqDJ?zEVl|cu^dBgSFTTe05)?qWj&EAdDk* zzcci>jsxA}M280hCoC}&c|&Sf#bcrU0oQj!CwBFI_X)lG$dKERY!{)S(3Q2oce83& zEsBGx-WB-6Ub%*hSn3I$@GF5+Qj0|+Mk8+MRb4;U`Ne}S)v(umL1A^o3B4%rQ=eN) z%Y9ONf~u?b`Xz7FE7hEe9&n>L(jCEwIO9}03u=F`B#KBT(p2c)pyrokB203lol(cD zID-{eKk3F<-Cy%{gasX2wZva;WG9u#s{OUb5vS~G45)!1b}B6oqOpqWm*c~oQCgpls8bz`2s+8-GB?Qi zW8^Hex0E^Lh7t8IXs=q1ZRv8^TsGg9SkLT>%3djRf2|y427-ca>w75E?~ZyRlId|` zlF*gw+LFm_&g8e~{H8*_dt;8L?LjAsGXtUHM?@Ed1%1dVc~$*K=PBp$U{sIFh|i|n z)}7@ljg%b7`ClLHi?i7!|v>(GRjx?C{s; zbH!p_Z`h#aHMg#q&+B`2PP3iyj$&71X?w9-UadrKd%jDLjU^&G^4*l5{3@U$||*N>VRZRS}yVP^Q9ROatyN}Drg){4)u_oPlmr_3B`j@KuY`3G7ik(sMc zn)j@XdDom5Yv^k?r%*7%?in%2cOFls5>Mu2AX3Twk!cxk*Yy*~<9U4&lf0b8?^J9C zjq}R9&g^XcSyob&m|@KB_u2WJ2J<-eG~u1W^>HST~dPLQWh}<{k4s zdKMC=35Edb$GBHlS?Cg-tAr^_i`^%IxIz*nfuzXBU~{)9`9GmgBe+`HlzE|1ESrL* z#WGViRub7VI-|u0yKho=pm;%&B#FaE$u7pY;^_oh;({`XBTMtgews*x-?MfIY|#eU zuhI0kWD_d0+PuQ%1qwt@rcJZRC6vrcEzi}T(NrW&BnE6DUt?mHS7}%gKW*kU{gCRj z4RE>{VB+j4jWN2=_Jzo%9Vsfw%Xtn0i$|?GX>#eU^x&-APbX1`+4=-+A`MAfS@%w= z<&kmtT9N(SDos;=#&(MB6FIo6*q5U_$q`Qu7}dOBA}Po;8pq{0r3IJJNUU54l80t1 z+VHt4R#3Ab-Nk8nT2z_y^$9C1^+|GiRC2(&&8Y@6<}8VkQ+Z4Tt;q}QH?JI7zR+s& z=c&vaB=)SF#rk;bA8eKXP$QkO!r5OEyj&qtD|;GRD@$5Ju8SqRCTys3erFN1eb^G6 z!o72g`kib`YcvwRM6+ysGwEA7Bd2WI(rcA#w<%<+WKV&lhC5nrzg7ZP{0ld)vXQQ| ZC%Ab(O8?0z5hHS$j`N;e>Z`Wa{{c?Z=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " +"(n%100>=11 && n%100<=14)? 2 : 3);\n" +#: tests_interface/templates/tests_interface/base.html:7 +#: tests_interface/templates/tests_interface/index.html:4 +msgid "Test Dashboard" +msgstr "Панель тестирования" + +#: tests_interface/templates/tests_interface/distro_page.html:4 +msgid "Tests" +msgstr "Тесты" + +#: tests_interface/templates/tests_interface/distro_page.html:9 +#: tests_interface/templates/tests_interface/excel_reports.html:9 +#: tests_interface/templates/tests_interface/reports_list.html:9 +msgid "Back to Dashboard" +msgstr "На главную страницу" + +#: tests_interface/templates/tests_interface/distro_page.html:11 +msgid "Tests page for" +msgstr "Страница тестов для" + +#: tests_interface/templates/tests_interface/distro_page.html:24 +msgid "Test Configuration" +msgstr "Конфигурация тестов" + +#: tests_interface/templates/tests_interface/distro_page.html:28 +msgid "Select runner:" +msgstr "Выберите runner" + +#: tests_interface/templates/tests_interface/distro_page.html:30 +msgid "Basic" +msgstr "Обычный" + +#: tests_interface/templates/tests_interface/distro_page.html:31 +msgid "Profiled" +msgstr "С профилированием" + +#: tests_interface/templates/tests_interface/distro_page.html:40 +msgid "Use Default Configuration" +msgstr "Использовать стандартную конфигурацию" + +#: tests_interface/templates/tests_interface/distro_page.html:43 +msgid "Custom Configuration" +msgstr "Пользовательская конфигурация" + +#: tests_interface/templates/tests_interface/distro_page.html:49 +msgid "Number of test runs:" +msgstr "Количество запусков тестов" + +#: tests_interface/templates/tests_interface/distro_page.html:62 +msgid "Select Test Suites and Configure Duration:" +msgstr "Выберите наборы тестов и длительность" + +#: tests_interface/templates/tests_interface/distro_page.html:67 +msgid "Individual Tests (optional):" +msgstr "Отдельные тесты (опционально):" + +#: tests_interface/templates/tests_interface/distro_page.html:73 +msgid "Save Configuration" +msgstr "Сохранить конфигурацию" + +#: tests_interface/templates/tests_interface/distro_page.html:80 +#: tests_interface/templates/tests_interface/index.html:20 +msgid "Reset to Default" +msgstr "Восстановить конфигурацию по умолчанию" + +#: tests_interface/templates/tests_interface/distro_page.html:88 +msgid "Run tests" +msgstr "Запустить тесты" + +#: tests_interface/templates/tests_interface/excel_reports.html:4 +#: tests_interface/templates/tests_interface/excel_reports.html:11 +msgid "Excel Reports" +msgstr "Отчеты Excel" + +#: tests_interface/templates/tests_interface/excel_reports.html:17 +msgid "Generate New Excel Report" +msgstr "Сгенерировать новый Excel-отчет" + +#: tests_interface/templates/tests_interface/excel_reports.html:61 +#, python-format +msgid "Size: %(report.size|filesizeformat)s" +msgstr "Размер: %(report.size|filesizeformat)s" + +#: tests_interface/templates/tests_interface/excel_reports.html:65 +msgid "Download" +msgstr "Скачать" + +#: tests_interface/templates/tests_interface/excel_reports.html:81 +#: tests_interface/templates/tests_interface/reports_list.html:153 +#, python-format +msgid "Total: %(reports|length)s report(s)" +msgstr "Всего: %(reports|length)s report(s)" + +#: tests_interface/templates/tests_interface/excel_reports.html:95 +msgid "No Excel Reports" +msgstr "Нет Excel-отчетов" + +#: tests_interface/templates/tests_interface/excel_reports.html:98 +msgid "Click \"Generate New Excel Report\" to create one." +msgstr "Нажмите \"Сгенерировать новый Excel-отчет\" чтобы создать его" + +#: tests_interface/templates/tests_interface/index.html:4 +msgid "Home" +msgstr "Главная страница" + +#: tests_interface/templates/tests_interface/index.html:9 +msgid "Test Platform Dashboard" +msgstr "Панель управления тестами" + +#: tests_interface/templates/tests_interface/index.html:11 +msgid "Select a platform to view test results and reports" +msgstr "Выберите платформу для просмотров результатов тестов и отчетов" + +#: tests_interface/templates/tests_interface/index.html:17 +msgid "Add Distribution" +msgstr "Добавить дистрибутив" + +#: tests_interface/templates/tests_interface/reports_list.html:4 +msgid "All Reports" +msgstr "Все отчеты" + +#: tests_interface/templates/tests_interface/reports_list.html:11 +msgid "Test Reports" +msgstr "Отчеты о тестировании" + +#: tests_interface/templates/tests_interface/reports_list.html:26 +msgid "Generate Comparison Report" +msgstr "Создать сравнительный отчет" + +#: tests_interface/templates/tests_interface/reports_list.html:44 +msgid "Experiment 1" +msgstr "Эксперимент 1" + +#: tests_interface/templates/tests_interface/reports_list.html:55 +#: tests_interface/templates/tests_interface/reports_list.html:77 +msgid "Select" +msgstr "Выберите" + +#: tests_interface/templates/tests_interface/reports_list.html:66 +msgid "Experiment 2" +msgstr "Эксперимент 2" + +#: tests_interface/templates/tests_interface/reports_list.html:87 +#: tests_interface/templates/tests_interface/reports_list.html:258 +msgid "Generate" +msgstr "Сгенерировать" + +#: tests_interface/templates/tests_interface/reports_list.html:166 +msgid "No Reports Found" +msgstr "Отчеты не найдены" + +#: tests_interface/templates/tests_interface/reports_list.html:168 +msgid "No reports available yet. Run some tests to generate reports." +msgstr "Отчетов еще нет. Запустите тесты для их создания" + +#: tests_interface/templates/tests_interface/reports_list.html:174 +msgid "Run Tests" +msgstr "Запустить тесты" diff --git a/src/imgtests/web/tests/settings.py b/src/imgtests/web/tests/settings.py index c4362fee..15b36ef6 100644 --- a/src/imgtests/web/tests/settings.py +++ b/src/imgtests/web/tests/settings.py @@ -44,6 +44,7 @@ class DjangoSettings(BaseSettings): MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.locale.LocaleMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", @@ -59,6 +60,7 @@ class DjangoSettings(BaseSettings): "OPTIONS": { "context_processors": [ "django.template.context_processors.request", + "django.template.context_processors.i18n", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], @@ -95,7 +97,16 @@ class DjangoSettings(BaseSettings): ] -LANGUAGE_CODE = "en-us" +LANGUAGE_CODE = "ru" + +LANGUAGES = [ + ("en", "English"), + ("ru", "Русский"), +] + +LOCALE_PATHS = [ + BASE_DIR / "locale", +] TIME_ZONE = "UTC" diff --git a/src/imgtests/web/tests_interface/templates/tests_interface/base.html b/src/imgtests/web/tests_interface/templates/tests_interface/base.html index 9ee7887e..c84f529e 100644 --- a/src/imgtests/web/tests_interface/templates/tests_interface/base.html +++ b/src/imgtests/web/tests_interface/templates/tests_interface/base.html @@ -1,9 +1,10 @@ - +{% load i18n %} + - {% block title %}Test Dashboard{% endblock %} + {% block title %}{% trans "Test Dashboard" %}{% endblock %} {% load static %} diff --git a/src/imgtests/web/tests_interface/templates/tests_interface/distro_page.html b/src/imgtests/web/tests_interface/templates/tests_interface/distro_page.html index aab7b927..ba69206f 100644 --- a/src/imgtests/web/tests_interface/templates/tests_interface/distro_page.html +++ b/src/imgtests/web/tests_interface/templates/tests_interface/distro_page.html @@ -1,13 +1,14 @@ {% extends 'tests_interface/base.html' %} +{% load i18n %} -{% block title %}{{distro.display_name}} Tests{% endblock %} +{% block title %}{{distro.display_name}} {% trans "Tests" %}{% endblock %} {% block content %}
- Back to Dashboard + {% trans "Back to Dashboard" %}
-

Tests page for {{ distro.display_name }}

+

{% trans "Tests page for" %} {{ distro.display_name }}

@@ -20,64 +21,63 @@

Tests page for {{ distro.display_name }}

border-radius: 5px; " > -

Test Configuration

+

{% trans "Test Configuration" %}

-
-
- -
-
+
+ +
+
@@ -132,7 +132,7 @@

Subsystems

- +
- ← Back to Dashboard + ← {% trans "Back to Dashboard" %}
-

Excel Reports

+

{% trans "Excel Reports" %}

@@ -57,11 +58,11 @@

Excel Reports

margin-top: 5px; " > - Size: {{ report.size|filesizeformat }} + {% blocktranslate %}Size: {{ report.size|filesizeformat }}{% endblocktranslate %}
- Download + {% trans "Download" %}
@@ -77,7 +78,7 @@

Excel Reports

color: #8d6e63; " > - Total: {{ reports|length }} report(s) + {% blocktranslate %}Total: {{ reports|length }} report(s){% endblocktranslate %} {% else %}
Excel Reports >
📊

- No Excel Reports + {% trans "No Excel Reports" %}

- Click "Generate New Excel Report" to create one. + {% trans 'Click "Generate New Excel Report" to create one.' %}

{% endif %} diff --git a/src/imgtests/web/tests_interface/templates/tests_interface/index.html b/src/imgtests/web/tests_interface/templates/tests_interface/index.html index b8bc1166..a30ce111 100644 --- a/src/imgtests/web/tests_interface/templates/tests_interface/index.html +++ b/src/imgtests/web/tests_interface/templates/tests_interface/index.html @@ -1,22 +1,23 @@ {% extends 'tests_interface/base.html' %} +{% load i18n %} -{% block title %}Home - Test Dashboard{% endblock %} +{% block title %}{% trans "Home" %} - {% trans "Test Dashboard" %}{% endblock %} {% block content %}
-

Test Platform Dashboard

+

{% trans "Test Platform Dashboard" %}

- Select a platform to view test results and reports + {% trans "Select a platform to view test results and reports" %}

diff --git a/src/imgtests/web/tests_interface/templates/tests_interface/reports_list.html b/src/imgtests/web/tests_interface/templates/tests_interface/reports_list.html index c0e9c83c..1ec6e278 100644 --- a/src/imgtests/web/tests_interface/templates/tests_interface/reports_list.html +++ b/src/imgtests/web/tests_interface/templates/tests_interface/reports_list.html @@ -1,13 +1,16 @@ {% extends 'tests_interface/base.html' %} +{% load i18n %} -{% block title %}All Reports{%endblock%} +{% block title %}{% trans "All Reports" %}{%endblock%} {% block content %}
- ← Back to Dashboard + ← {% trans "Back to Dashboard" %}
-

Test Reports

+

{% trans "Test Reports" %}

@@ -22,7 +25,7 @@

Test Reports

" >

- Generate Comparison Report + {% trans "Generate Comparison Report" %}

font-size: 0.85rem; color: #795548; " - >Experiment 1{% trans "Experiment 1" %}
@@ -62,7 +65,7 @@

font-size: 0.85rem; color: #795548; " - >Experiment 2{% trans "Experiment 2" %}

@@ -83,7 +86,7 @@

style="padding: 8px 20px" disabled > - Generate + {% trans "Generate" %}

@@ -149,7 +152,7 @@

color: #8d6e63; " > - Total: {{ reports|length }} report(s) + {% blocktranslate %}Total: {{ reports|length }} report(s){% endblocktranslate %}

{% else %}
" >
📊
-

No Reports Found

+

+ {% trans "No Reports Found" %} +

- No reports available yet. Run some tests to generate reports. + {% trans "No reports available yet. Run some tests to generate reports." %}

Run Tests{% trans "Run Tests" %}
{% endif %} From b1c757a7b0fe8569566ff5726f965cbe110d8e8f Mon Sep 17 00:00:00 2001 From: Artanias <43622365+Artanias@users.noreply.github.com> Date: Wed, 1 Jul 2026 23:06:06 +0300 Subject: [PATCH 2/3] refactor: use translate keyword in the jinja2 templates instead of using trans keyword and also use en language code as a default. --- src/imgtests/web/tests/settings.py | 2 +- .../templates/tests_interface/base.html | 2 +- .../tests_interface/distro_page.html | 30 +++++++++---------- .../tests_interface/excel_reports.html | 14 ++++----- .../templates/tests_interface/index.html | 10 +++---- .../tests_interface/reports_list.html | 24 +++++++-------- 6 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/imgtests/web/tests/settings.py b/src/imgtests/web/tests/settings.py index 15b36ef6..02bc85b8 100644 --- a/src/imgtests/web/tests/settings.py +++ b/src/imgtests/web/tests/settings.py @@ -97,7 +97,7 @@ class DjangoSettings(BaseSettings): ] -LANGUAGE_CODE = "ru" +LANGUAGE_CODE = "en" LANGUAGES = [ ("en", "English"), diff --git a/src/imgtests/web/tests_interface/templates/tests_interface/base.html b/src/imgtests/web/tests_interface/templates/tests_interface/base.html index c84f529e..e31e4cf2 100644 --- a/src/imgtests/web/tests_interface/templates/tests_interface/base.html +++ b/src/imgtests/web/tests_interface/templates/tests_interface/base.html @@ -4,7 +4,7 @@ - {% block title %}{% trans "Test Dashboard" %}{% endblock %} + {% block title %}{% translate "Test Dashboard" %}{% endblock %} {% load static %} diff --git a/src/imgtests/web/tests_interface/templates/tests_interface/distro_page.html b/src/imgtests/web/tests_interface/templates/tests_interface/distro_page.html index ba69206f..c9ed3801 100644 --- a/src/imgtests/web/tests_interface/templates/tests_interface/distro_page.html +++ b/src/imgtests/web/tests_interface/templates/tests_interface/distro_page.html @@ -1,14 +1,14 @@ {% extends 'tests_interface/base.html' %} {% load i18n %} -{% block title %}{{distro.display_name}} {% trans "Tests" %}{% endblock %} +{% block title %}{{distro.display_name}} {% translate "Tests" %}{% endblock %} {% block content %}
- {% trans "Back to Dashboard" %} + {% translate "Back to Dashboard" %}
-

{% trans "Tests page for" %} {{ distro.display_name }}

+

{% translate "Tests page for" %} {{ distro.display_name }}

@@ -21,14 +21,14 @@

{% trans "Tests page for" %} {{ distro.display_name }}

border-radius: 5px; " > -

{% trans "Test Configuration" %}

+

{% translate "Test Configuration" %}

-
@@ -37,16 +37,16 @@

{% trans "Test Configuration" %}

- +
- ← {% trans "Back to Dashboard" %} + ← {% translate "Back to Dashboard" %}
-

{% trans "Excel Reports" %}

+

{% translate "Excel Reports" %}

@@ -62,7 +62,7 @@

{% trans "Excel Reports" %}

- {% trans "Download" %} + {% translate "Download" %}
@@ -92,10 +92,10 @@

{% trans "Excel Reports" %}

>
📊

- {% trans "No Excel Reports" %} + {% translate "No Excel Reports" %}

- {% trans 'Click "Generate New Excel Report" to create one.' %} + {% translate 'Click "Generate New Excel Report" to create one.' %}

{% endif %} diff --git a/src/imgtests/web/tests_interface/templates/tests_interface/index.html b/src/imgtests/web/tests_interface/templates/tests_interface/index.html index a30ce111..a161899c 100644 --- a/src/imgtests/web/tests_interface/templates/tests_interface/index.html +++ b/src/imgtests/web/tests_interface/templates/tests_interface/index.html @@ -1,23 +1,23 @@ {% extends 'tests_interface/base.html' %} {% load i18n %} -{% block title %}{% trans "Home" %} - {% trans "Test Dashboard" %}{% endblock %} +{% block title %}{% translate "Home" %} - {% translate "Test Dashboard" %}{% endblock %} {% block content %}
-

{% trans "Test Platform Dashboard" %}

+

{% translate "Test Platform Dashboard" %}

- {% trans "Select a platform to view test results and reports" %} + {% translate "Select a platform to view test results and reports" %}

diff --git a/src/imgtests/web/tests_interface/templates/tests_interface/reports_list.html b/src/imgtests/web/tests_interface/templates/tests_interface/reports_list.html index 1ec6e278..44d6f324 100644 --- a/src/imgtests/web/tests_interface/templates/tests_interface/reports_list.html +++ b/src/imgtests/web/tests_interface/templates/tests_interface/reports_list.html @@ -1,16 +1,16 @@ {% extends 'tests_interface/base.html' %} {% load i18n %} -{% block title %}{% trans "All Reports" %}{%endblock%} +{% block title %}{% translate "All Reports" %}{%endblock%} {% block content %}
← {% trans "Back to Dashboard" %}← {% translate "Back to Dashboard" %}
-

{% trans "Test Reports" %}

+

{% translate "Test Reports" %}

@@ -25,7 +25,7 @@

{% trans "Test Reports" %}

" >

- {% trans "Generate Comparison Report" %} + {% translate "Generate Comparison Report" %}

font-size: 0.85rem; color: #795548; " - >{% trans "Experiment 1" %}{% translate "Experiment 1" %}
@@ -65,7 +65,7 @@

font-size: 0.85rem; color: #795548; " - >{% trans "Experiment 2" %}{% translate "Experiment 2" %}

@@ -86,7 +86,7 @@

style="padding: 8px 20px" disabled > - {% trans "Generate" %} + {% translate "Generate" %}

@@ -166,16 +166,16 @@

>
📊

- {% trans "No Reports Found" %} + {% translate "No Reports Found" %}

- {% trans "No reports available yet. Run some tests to generate reports." %} + {% translate "No reports available yet. Run some tests to generate reports." %}

{% trans "Run Tests" %}{% translate "Run Tests" %}
{% endif %} From ac7277350118cf46ac77aeac914ab9774a11048c Mon Sep 17 00:00:00 2001 From: Artanias <43622365+Artanias@users.noreply.github.com> Date: Wed, 1 Jul 2026 23:34:12 +0300 Subject: [PATCH 3/3] build: include .mo files when installing imgtests library. --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 76ac7c87..3bf50d47 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,8 @@ tests = [ "imgtests.web" = [ "**/*.css", "**/*.js", - "**/*.html" + "**/*.html", + "**/*.mo", ] [tool.ruff]