From 8de1ffaa34274380a9df53d89cf7da79323dfc5e Mon Sep 17 00:00:00 2001 From: lokses Date: Tue, 28 Jul 2026 22:00:35 +0300 Subject: [PATCH] =?UTF-8?q?i18n:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B=20?= =?UTF-8?q?=D1=87=D0=B0=D1=82=D0=B0=20(ru=20=D0=B1=D0=B0=D0=B7=D0=B0,=20uk?= =?UTF-8?q?/en)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Шаблон chat.html → русская база с {% trans %}/{% blocktrans %} - JS-строки chat.js → gettext() + JavaScriptCatalog (/jsi18n/), подключён в index.html; защитный fallback если каталог не загрузился - Переводы uk/en для обоих доменов (django + djangojs), скомпилированы - makemessages заодно извлёк непереведённые строки прошлых фич (2FA, nextcloud, документы) — оставлены пустыми (рендерятся на базовом ru) Co-Authored-By: Claude Opus 4.8 --- acore/urls.py | 2 + locale/en/LC_MESSAGES/django.mo | Bin 35045 -> 37500 bytes locale/en/LC_MESSAGES/django.po | 867 ++++++++++++++++++++--------- locale/en/LC_MESSAGES/djangojs.mo | Bin 0 -> 1622 bytes locale/en/LC_MESSAGES/djangojs.po | 97 ++++ locale/uk/LC_MESSAGES/django.mo | Bin 43088 -> 46103 bytes locale/uk/LC_MESSAGES/django.po | 872 +++++++++++++++++++++--------- locale/uk/LC_MESSAGES/djangojs.mo | Bin 0 -> 2235 bytes locale/uk/LC_MESSAGES/djangojs.po | 100 ++++ static/assets/js/chat.js | 46 +- templates/index.html | 1 + templates/pages/chat.html | 65 +-- 12 files changed, 1477 insertions(+), 573 deletions(-) create mode 100644 locale/en/LC_MESSAGES/djangojs.mo create mode 100644 locale/en/LC_MESSAGES/djangojs.po create mode 100644 locale/uk/LC_MESSAGES/djangojs.mo create mode 100644 locale/uk/LC_MESSAGES/djangojs.po diff --git a/acore/urls.py b/acore/urls.py index d7b8ab0..8971b6c 100644 --- a/acore/urls.py +++ b/acore/urls.py @@ -19,11 +19,13 @@ from django.urls import path, include from django.conf import settings from django.conf.urls.static import static from django.contrib.staticfiles.urls import staticfiles_urlpatterns +from django.views.i18n import JavaScriptCatalog from core import views urlpatterns = [ path('admin/', admin.site.urls), path('i18n/', include('django.conf.urls.i18n')), # set_language для переключателя мов + path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'), # переводы для JS path('api/attendance/', include('apps.visit_manager.api.urls')), path('', include('apps.employees.urls')), path('', include('apps.ad_connector.urls')), diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo index 1584ccea3abec8c3d3fabc9a77c588e84ab5b3db..d5f4736a699f71bf847772aa4d755a79a464ef7b 100644 GIT binary patch delta 13784 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 MbNfD95LxJd0RS<9BLDyZ delta 11569 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\n" "Language-Team: LANGUAGE \n" @@ -17,21 +17,29 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps/ad_connector/models.py:10 apps/employees/models/base.py:186 -#: apps/employees/models/permissions.py:47 templates/pages/employees.html:103 -#: templates/pages/hr-portal.html:215 templates/pages/timetrack.html:58 +#: apps/ad_connector/models.py:10 apps/employees/models/base.py:198 +#: apps/employees/models/permissions.py:47 osc/apps/ad_connector/models.py:10 +#: osc/apps/employees/models.py:130 osc/apps/mattermost_connector/models.py:10 +#: templates/pages/employees.html:103 templates/pages/hr-portal.html:215 +#: templates/pages/timetrack.html:58 msgid "Сотрудник" msgstr "Employee" #: apps/ad_connector/models.py:13 apps/mail_connector/models.py:15 +#: apps/nextcloud_connector/models.py:34 osc/apps/ad_connector/models.py:13 +#: osc/apps/mattermost_connector/models.py:13 msgid "Действие" msgstr "" #: apps/ad_connector/models.py:15 apps/mail_connector/models.py:17 +#: osc/apps/ad_connector/models.py:14 +#: osc/apps/mattermost_connector/models.py:14 msgid "Создание" msgstr "" #: apps/ad_connector/models.py:16 apps/mail_connector/models.py:18 +#: osc/apps/ad_connector/models.py:14 +#: osc/apps/mattermost_connector/models.py:14 msgid "Обновление" msgstr "" @@ -47,43 +55,54 @@ msgstr "" #: apps/it_manager/admin.py:168 apps/it_manager/admin.py:263 #: apps/it_manager/admin.py:352 apps/it_manager/admin.py:498 #: apps/locations/models/pharmacies.py:128 apps/mail_connector/models.py:24 -#: apps/tasks/models.py:40 apps/visit_manager/admin.py:199 core/admin.py:32 +#: apps/nextcloud_connector/models.py:35 apps/tasks/models.py:40 +#: apps/visit_manager/admin.py:199 core/admin.py:32 +#: osc/apps/ad_connector/models.py:17 +#: osc/apps/mattermost_connector/models.py:17 #: templates/pages/dislocation.html:122 templates/pages/employees.html:107 #: templates/pages/hr-portal.html:535 templates/pages/it-manager.html:237 #: templates/pages/it-manager.html:273 templates/pages/it-manager.html:350 #: templates/pages/it-manager.html:403 templates/pages/it-manager.html:696 #: templates/pages/it-manager.html:724 templates/pages/it-manager.html:973 #: templates/pages/it-manager.html:1002 templates/pages/pharmacies.html:119 -#: templates/pages/pharmacy-detail.html:195 -#: templates/pages/pharmacy-detail.html:245 templates/pages/structure.html:63 +#: templates/pages/pharmacy-detail.html:197 +#: templates/pages/pharmacy-detail.html:247 templates/pages/structure.html:63 msgid "Статус" msgstr "Status" #: apps/ad_connector/models.py:23 apps/mail_connector/models.py:25 +#: apps/nextcloud_connector/models.py:25 osc/apps/ad_connector/models.py:18 +#: osc/apps/mattermost_connector/models.py:18 msgid "Успех" msgstr "" -#: apps/ad_connector/models.py:23 apps/employees/models/base.py:144 -#: apps/employees/models/base.py:159 apps/locations/models/pharmacies.py:152 -#: apps/mail_connector/models.py:25 templates/pages/employee-detail.html:146 +#: apps/ad_connector/models.py:23 apps/employees/models/base.py:145 +#: apps/employees/models/base.py:160 apps/locations/models/pharmacies.py:152 +#: apps/mail_connector/models.py:25 apps/nextcloud_connector/models.py:26 +#: osc/apps/ad_connector/models.py:18 osc/apps/employees/models.py:97 +#: osc/apps/employees/models.py:115 osc/apps/mattermost_connector/models.py:18 #: templates/pages/employee-detail.html:153 +#: templates/pages/employee-detail.html:160 msgid "Ошибка" msgstr "Error" #: apps/ad_connector/models.py:25 apps/mail_connector/models.py:27 +#: apps/nextcloud_connector/models.py:36 osc/apps/ad_connector/models.py:20 +#: osc/apps/mattermost_connector/models.py:20 msgid "Сообщение" msgstr "" -#: apps/ad_connector/models.py:28 +#: apps/ad_connector/models.py:28 osc/apps/ad_connector/models.py:23 msgid "Запись синхронизации AD" msgstr "" -#: apps/ad_connector/models.py:29 +#: apps/ad_connector/models.py:29 osc/apps/ad_connector/models.py:24 msgid "Журнал синхронизации AD" msgstr "" -#: apps/employees/admin.py:37 apps/employees/admin.py:244 -#: apps/employees/models/base.py:112 templates/pages/hr-portal.html:446 +#: apps/employees/admin.py:37 apps/employees/admin.py:259 +#: apps/employees/models/base.py:113 apps/nextcloud_connector/models.py:16 +#: osc/apps/employees/models.py:72 templates/pages/hr-portal.html:446 #: templates/pages/structure.html:59 msgid "Отдел" msgstr "Department" @@ -100,319 +119,351 @@ msgstr "" msgid "— Выберите офис или склад —" msgstr "" -#: apps/employees/admin.py:50 apps/employees/models/base.py:106 +#: apps/employees/admin.py:50 apps/employees/models/base.py:107 msgid "Локация (офис/склад)" msgstr "" -#: apps/employees/admin.py:51 apps/employees/models/base.py:107 +#: apps/employees/admin.py:51 apps/employees/models/base.py:108 msgid "Заполняется для location_type=office или warehouse" msgstr "" -#: apps/employees/admin.py:118 core/admin.py:259 +#: apps/employees/admin.py:133 core/admin.py:259 msgid "Аутентификация" msgstr "" -#: apps/employees/admin.py:122 +#: apps/employees/admin.py:137 msgid "ФИО" msgstr "" -#: apps/employees/admin.py:126 +#: apps/employees/admin.py:141 msgid "Рабочая информация" msgstr "" -#: apps/employees/admin.py:134 apps/it_manager/admin.py:307 +#: apps/employees/admin.py:149 apps/it_manager/admin.py:307 msgid "Даты" msgstr "" -#: apps/employees/admin.py:138 templates/pages/employee-detail.html:119 +#: apps/employees/admin.py:153 templates/pages/employee-detail.html:126 msgid "Личные данные" msgstr "Personal data" -#: apps/employees/admin.py:142 apps/it_manager/admin.py:421 -#: apps/locations/admin.py:291 templates/pages/employee-detail.html:60 -#: templates/pages/pharmacy-detail.html:104 +#: apps/employees/admin.py:157 apps/it_manager/admin.py:421 +#: apps/locations/admin.py:291 templates/pages/employee-detail.html:67 +#: templates/pages/pharmacy-detail.html:106 msgid "Контакты" msgstr "Contacts" -#: apps/employees/admin.py:158 +#: apps/employees/admin.py:173 msgid "Графік та відвідуваність" msgstr "" -#: apps/employees/admin.py:161 +#: apps/employees/admin.py:176 msgid "Графіки роботи та записи відвідуваності відображаються нижче." msgstr "" -#: apps/employees/admin.py:169 +#: apps/employees/admin.py:184 msgid "Системный доступ" msgstr "" -#: apps/employees/admin.py:173 +#: apps/employees/admin.py:188 msgid "Только для IT-администраторов. is_staff — вход в Django admin." msgstr "" -#: apps/employees/admin.py:217 +#: apps/employees/admin.py:232 msgid "Предпросмотр" msgstr "" -#: apps/employees/admin.py:224 +#: apps/employees/admin.py:239 msgid "Группы" msgstr "" -#: apps/employees/models/base.py:33 core/models/connector_config.py:28 +#: apps/employees/models/base.py:34 core/models/connector_config.py:29 +#: osc/apps/employees/models.py:33 msgid "Логин" msgstr "" -#: apps/employees/models/base.py:34 +#: apps/employees/models/base.py:35 msgid "Уникальный логин для входа в систему" msgstr "" -#: apps/employees/models/base.py:37 +#: apps/employees/models/base.py:38 osc/apps/employees/models.py:37 msgid "Email адрес" msgstr "" -#: apps/employees/models/base.py:38 +#: apps/employees/models/base.py:39 osc/apps/employees/models.py:38 msgid "Рабочий email. Если не указан — генерируется из username@local.domain" msgstr "" -#: apps/employees/models/base.py:41 +#: apps/employees/models/base.py:42 osc/apps/employees/models.py:41 msgid "Фамилия" msgstr "" -#: apps/employees/models/base.py:42 templates/pages/profile.html:76 +#: apps/employees/models/base.py:43 osc/apps/employees/models.py:42 +#: templates/pages/profile.html:76 msgid "Имя" msgstr "First name" -#: apps/employees/models/base.py:43 templates/pages/hr-portal.html:430 +#: apps/employees/models/base.py:44 osc/apps/employees/models.py:43 +#: templates/pages/hr-portal.html:430 msgid "Отчество" msgstr "Patronymic" -#: apps/employees/models/base.py:45 +#: apps/employees/models/base.py:46 osc/apps/employees/models.py:46 msgid "Доступ к панели администратора" msgstr "" -#: apps/employees/models/base.py:46 +#: apps/employees/models/base.py:47 osc/apps/employees/models.py:47 msgid "Разрешает вход в Django admin. Только для IT-администраторов системы." msgstr "" -#: apps/employees/models/base.py:47 core/models/directories.py:29 -#: core/models/directories.py:121 templates/pages/employee-detail.html:38 +#: apps/employees/models/base.py:48 core/models/directories.py:29 +#: core/models/directories.py:121 templates/pages/employee-detail.html:45 #: templates/pages/employees.html:148 templates/pages/hr-portal.html:174 #: templates/pages/structure.html:89 msgid "Активный" msgstr "Active" -#: apps/employees/models/base.py:48 +#: apps/employees/models/base.py:49 osc/apps/employees/models.py:49 msgid "Работает ли сотрудник сейчас" msgstr "" -#: apps/employees/models/base.py:49 +#: apps/employees/models/base.py:50 osc/apps/employees/models.py:50 msgid "Дата создания аккаунта" msgstr "" -#: apps/employees/models/base.py:52 templates/pages/employee-detail.html:122 +#: apps/employees/models/base.py:53 osc/apps/employees/models.py:52 +#: templates/pages/employee-detail.html:129 msgid "Дата рождения" msgstr "Date of birth" -#: apps/employees/models/base.py:56 templates/pages/employee-detail.html:126 +#: apps/employees/models/base.py:57 osc/apps/employees/models.py:54 +#: templates/pages/employee-detail.html:133 msgid "ИНН" msgstr "Tax ID" -#: apps/employees/models/base.py:57 +#: apps/employees/models/base.py:58 osc/apps/employees/models.py:55 msgid "Идентификационный номер налогоплательщика" msgstr "" -#: apps/employees/models/base.py:62 templates/pages/employee-detail.html:67 -#: templates/pages/profile.html:57 +#: apps/employees/models/base.py:63 osc/apps/employees/models.py:59 +#: templates/pages/employee-detail.html:74 templates/pages/profile.html:57 msgid "Рабочий телефон" msgstr "Work phone" -#: apps/employees/models/base.py:66 +#: apps/employees/models/base.py:67 msgid "Внутрішній номер" msgstr "" -#: apps/employees/models/base.py:67 +#: apps/employees/models/base.py:68 msgid "Короткий внутрішній (додатковий) номер АТС" msgstr "" -#: apps/employees/models/base.py:70 templates/pages/employee-detail.html:76 -#: templates/pages/profile.html:61 +#: apps/employees/models/base.py:71 osc/apps/employees/models.py:60 +#: templates/pages/employee-detail.html:83 templates/pages/profile.html:61 msgid "Личный телефон" msgstr "Personal phone" -#: apps/employees/models/base.py:73 templates/pages/employee-detail.html:80 -#: templates/pages/profile.html:65 +#: apps/employees/models/base.py:74 osc/apps/employees/models.py:61 +#: templates/pages/employee-detail.html:87 templates/pages/profile.html:65 msgid "Личный email" msgstr "Personal email" -#: apps/employees/models/base.py:75 +#: apps/employees/models/base.py:76 osc/apps/employees/models.py:63 msgid "Контакт в экстренных случаях" msgstr "" -#: apps/employees/models/base.py:76 +#: apps/employees/models/base.py:77 osc/apps/employees/models.py:65 msgid "Телефон экстренного контакта" msgstr "" -#: apps/employees/models/base.py:78 templates/pages/profile.html:84 +#: apps/employees/models/base.py:79 osc/apps/employees/models.py:67 +#: templates/pages/profile.html:84 msgid "Степень родства" msgstr "Relationship" -#: apps/employees/models/base.py:81 apps/employees/models/base.py:100 +#: apps/employees/models/base.py:82 apps/employees/models/base.py:101 #: apps/hiring/models.py:34 apps/hiring/models.py:50 #: apps/locations/admin.py:347 apps/locations/models/base.py:29 #: apps/locations/models/pharmacies.py:210 #: apps/locations/models/pharmacies.py:349 apps/mail_connector/models.py:12 -#: apps/utilities/models.py:17 templates/pages/dislocation.html:116 -#: templates/pages/employees.html:64 templates/pages/employees.html:90 -#: templates/pages/hr-portal.html:126 templates/pages/hr-portal.html:441 -#: templates/pages/hr-portal.html:455 templates/pages/hr-portal.html:459 +#: apps/nextcloud_connector/models.py:17 apps/utilities/models.py:17 +#: templates/pages/dislocation.html:116 templates/pages/employees.html:64 +#: templates/pages/employees.html:90 templates/pages/hr-portal.html:126 +#: templates/pages/hr-portal.html:441 templates/pages/hr-portal.html:455 +#: templates/pages/hr-portal.html:459 msgid "Аптека" msgstr "Pharmacy" -#: apps/employees/models/base.py:82 apps/hiring/models.py:35 +#: apps/employees/models/base.py:83 apps/hiring/models.py:35 #: apps/locations/models/base.py:30 templates/pages/hr-portal.html:128 #: templates/pages/hr-portal.html:442 msgid "Склад" msgstr "Warehouse" -#: apps/employees/models/base.py:83 apps/locations/models/base.py:31 +#: apps/employees/models/base.py:84 apps/locations/models/base.py:31 #: templates/pages/employees.html:56 templates/pages/hr-portal.html:124 #: templates/pages/hr-portal.html:440 templates/pages/timetrack.html:47 msgid "Офис" msgstr "Office" -#: apps/employees/models/base.py:86 apps/locations/models/base.py:28 +#: apps/employees/models/base.py:87 apps/locations/models/base.py:28 msgid "Тип локации" msgstr "" -#: apps/employees/models/base.py:87 +#: apps/employees/models/base.py:88 msgid "Где работает: аптека / склад / офис" msgstr "" -#: apps/employees/models/base.py:94 apps/locations/models/pharmacies.py:88 +#: apps/employees/models/base.py:95 apps/locations/models/pharmacies.py:88 #: templates/pages/dislocation.html:117 templates/pages/pharmacies.html:113 -#: templates/pages/pharmacy-detail.html:85 +#: templates/pages/pharmacy-detail.html:87 msgid "Организация" msgstr "Organization" -#: apps/employees/models/base.py:95 apps/locations/models/pharmacies.py:89 +#: apps/employees/models/base.py:96 apps/locations/models/pharmacies.py:89 msgid "Юрлицо: АКС, АКС Одесса, Тира, Пентальфа..." msgstr "" -#: apps/employees/models/base.py:101 +#: apps/employees/models/base.py:102 msgid "Заполняется только для location_type=pharmacy" msgstr "" -#: apps/employees/models/base.py:114 +#: apps/employees/models/base.py:115 msgid "Заполняется для office / warehouse" msgstr "" -#: apps/employees/models/base.py:119 templates/pages/dislocation.html:297 -#: templates/pages/employees.html:104 templates/pages/hr-portal.html:216 -#: templates/pages/hr-portal.html:467 +#: apps/employees/models/base.py:120 osc/apps/employees/models.py:77 +#: templates/pages/dislocation.html:297 templates/pages/employees.html:104 +#: templates/pages/hr-portal.html:216 templates/pages/hr-portal.html:467 msgid "Должность" msgstr "Position" -#: apps/employees/models/base.py:125 templates/pages/employee-detail.html:92 -#: templates/pages/structure.html:60 +#: apps/employees/models/base.py:126 osc/apps/employees/models.py:81 +#: templates/pages/employee-detail.html:99 templates/pages/structure.html:60 msgid "Руководитель" msgstr "Manager" -#: apps/employees/models/base.py:128 +#: apps/employees/models/base.py:129 osc/apps/employees/models.py:84 msgid "Дата приёма на работу" msgstr "" -#: apps/employees/models/base.py:129 templates/pages/employee-detail.html:109 +#: apps/employees/models/base.py:130 osc/apps/employees/models.py:85 +#: templates/pages/employee-detail.html:116 msgid "Дата увольнения" msgstr "Termination date" -#: apps/employees/models/base.py:130 +#: apps/employees/models/base.py:131 osc/apps/employees/models.py:86 msgid "Конец испытательного срока" msgstr "" -#: apps/employees/models/base.py:133 apps/visit_manager/admin.py:262 -#: apps/visit_manager/admin.py:289 templates/pages/hr-portal.html:165 -#: templates/pages/hr-portal.html:234 +#: apps/employees/models/base.py:134 apps/visit_manager/admin.py:262 +#: apps/visit_manager/admin.py:289 osc/apps/employees/models.py:88 +#: templates/pages/hr-portal.html:165 templates/pages/hr-portal.html:234 msgid "Фото" msgstr "Photo" -#: apps/employees/models/base.py:137 +#: apps/employees/models/base.py:138 osc/apps/employees/models.py:90 msgid "ID Mattermost" msgstr "" -#: apps/employees/models/base.py:138 +#: apps/employees/models/base.py:139 osc/apps/employees/models.py:91 msgid "Логин Mattermost" msgstr "" -#: apps/employees/models/base.py:140 +#: apps/employees/models/base.py:141 osc/apps/employees/models.py:93 msgid "Статус синхронизации Mattermost" msgstr "" -#: apps/employees/models/base.py:142 apps/tasks/models.py:24 -#: templates/pages/employee-detail.html:148 templates/pages/task-detail.html:25 -#: templates/pages/tasks.html:64 templates/pages/tasks.html:116 +#: apps/employees/models/base.py:143 apps/tasks/models.py:24 +#: osc/apps/employees/models.py:95 templates/pages/employee-detail.html:155 +#: templates/pages/task-detail.html:25 templates/pages/tasks.html:64 +#: templates/pages/tasks.html:116 msgid "Ожидает" msgstr "Pending" -#: apps/employees/models/base.py:143 apps/employees/models/base.py:158 -#: apps/locations/models/pharmacies.py:151 +#: apps/employees/models/base.py:144 apps/employees/models/base.py:159 +#: apps/locations/models/pharmacies.py:151 osc/apps/employees/models.py:96 +#: osc/apps/employees/models.py:114 msgid "Синхронизирован" msgstr "" -#: apps/employees/models/base.py:145 apps/employees/models/base.py:160 +#: apps/employees/models/base.py:146 apps/employees/models/base.py:161 +#: osc/apps/employees/models.py:98 osc/apps/employees/models.py:116 msgid "Отключена" msgstr "" -#: apps/employees/models/base.py:149 +#: apps/employees/models/base.py:150 osc/apps/employees/models.py:102 msgid "Последняя синхронизация Mattermost" msgstr "" -#: apps/employees/models/base.py:150 +#: apps/employees/models/base.py:151 osc/apps/employees/models.py:103 msgid "Синхронизация Mattermost" msgstr "" -#: apps/employees/models/base.py:155 +#: apps/employees/models/base.py:156 osc/apps/employees/models.py:111 msgid "Статус синхронизации AD" msgstr "" -#: apps/employees/models/base.py:157 +#: apps/employees/models/base.py:158 osc/apps/employees/models.py:113 msgid "Не синхронизирован" msgstr "" -#: apps/employees/models/base.py:164 +#: apps/employees/models/base.py:165 osc/apps/employees/models.py:120 msgid "Ошибка синхронизации AD" msgstr "" -#: apps/employees/models/base.py:165 +#: apps/employees/models/base.py:166 osc/apps/employees/models.py:121 msgid "Последняя синхронизация AD" msgstr "" -#: apps/employees/models/base.py:166 +#: apps/employees/models/base.py:167 osc/apps/employees/models.py:122 msgid "Синхронизация AD" msgstr "" -#: apps/employees/models/base.py:167 +#: apps/employees/models/base.py:168 msgid "Только для офисных сотрудников" msgstr "" -#: apps/employees/models/base.py:170 +#: apps/employees/models/base.py:171 msgid "Записей на странице" msgstr "" -#: apps/employees/models/base.py:172 +#: apps/employees/models/base.py:173 msgid "Сколько строк показывать в таблицах портала по умолчанию" msgstr "" -#: apps/employees/models/base.py:176 +#: apps/employees/models/base.py:177 msgid "Был онлайн" msgstr "" -#: apps/employees/models/base.py:177 +#: apps/employees/models/base.py:178 msgid "Обновляется автоматически при активности в портале (не в AD/Mattermost)" msgstr "" -#: apps/employees/models/base.py:187 templates/index.html:250 -#: templates/pages/dashboard.html:174 templates/pages/employees.html:8 -#: templates/pages/employees.html:24 templates/pages/hr-portal.html:92 +#: apps/employees/models/base.py:183 +msgid "TOTP-секрет" +msgstr "" + +#: apps/employees/models/base.py:184 +msgid "Секрет TOTP (шифруется). Заполняется при настройке 2FA." +msgstr "" + +#: apps/employees/models/base.py:186 +msgid "2FA включена" +msgstr "" + +#: apps/employees/models/base.py:188 +msgid "Резервные коды 2FA (хеши)" +msgstr "" + +#: apps/employees/models/base.py:189 +msgid "Хеши одноразовых резервных кодов; использованный код удаляется." +msgstr "" + +#: apps/employees/models/base.py:199 osc/apps/employees/models.py:131 +#: templates/index.html:251 templates/pages/dashboard.html:174 +#: templates/pages/employees.html:8 templates/pages/employees.html:24 +#: templates/pages/hr-portal.html:92 msgid "Сотрудники" msgstr "Employees" @@ -466,12 +517,13 @@ msgid "Действует с" msgstr "" #: apps/employees/models/permissions.py:57 -#: templates/pages/pharmacy-detail.html:246 +#: templates/pages/pharmacy-detail.html:248 msgid "Действует до" msgstr "Valid until" #: apps/employees/models/permissions.py:58 -#: apps/locations/models/pharmacies.py:334 +#: apps/locations/models/pharmacies.py:334 osc/apps/employees/models.py:49 +#: osc/core/models/directory.py:32 msgid "Активен" msgstr "" @@ -533,9 +585,7 @@ msgid "ID повідомлень в Mattermost" msgstr "" #: apps/feed/models.py:52 -msgid "" -"{team_name: post_id} — за наявності id повторна публікація редагує існуюче " -"повідомлення" +msgid "{team_name: post_id} — за наявності id повторна публікація редагує існуюче повідомлення" msgstr "" #: apps/feed/models.py:55 @@ -543,9 +593,7 @@ msgid "Куди публікувати в Mattermost" msgstr "" #: apps/feed/models.py:56 -msgid "" -"Список команд (akc/pharmacys/warehouse) — обирається чекбоксами при " -"створенні/редагуванні" +msgid "Список команд (akc/pharmacys/warehouse) — обирається чекбоксами при створенні/редагуванні" msgstr "" #: apps/feed/models.py:61 apps/feed/models.py:100 apps/tasks/models.py:126 @@ -697,7 +745,7 @@ msgid "Экземпляров" msgstr "" #: apps/it_manager/admin.py:110 templates/pages/it-manager.html:13 -#: templates/pages/it-manager.html:514 templates/pages/pharmacy-detail.html:193 +#: templates/pages/it-manager.html:514 templates/pages/pharmacy-detail.html:195 msgid "Оборудование" msgstr "Equipment" @@ -712,9 +760,9 @@ msgstr "" #: apps/it_manager/admin.py:119 apps/it_manager/admin.py:212 #: apps/it_manager/admin.py:427 apps/it_manager/admin.py:476 #: apps/locations/admin.py:319 apps/locations/models/pharmacies.py:335 -#: core/models/connector_config.py:43 templates/pages/it-manager.html:674 +#: core/models/connector_config.py:44 templates/pages/it-manager.html:674 #: templates/pages/it-manager.html:845 templates/pages/it-manager.html:950 -#: templates/pages/pharmacy-detail.html:96 +#: templates/pages/pharmacy-detail.html:98 msgid "Примечания" msgstr "Notes" @@ -728,7 +776,7 @@ msgstr "" msgid "Модель" msgstr "Model" -#: apps/it_manager/admin.py:180 templates/pages/pharmacy-detail.html:197 +#: apps/it_manager/admin.py:180 templates/pages/pharmacy-detail.html:199 msgid "Гарантия" msgstr "Warranty" @@ -778,7 +826,8 @@ msgstr "Take in progress" msgid "Отметить решёнными" msgstr "" -#: apps/it_manager/admin.py:383 templates/pages/it-manager.html:75 +#: apps/it_manager/admin.py:383 templates/pages/chat.html:88 +#: templates/pages/chat.html:112 templates/pages/it-manager.html:75 #: templates/pages/it-manager.html:135 templates/pages/it-manager.html:480 #: templates/pages/it-manager.html:614 templates/pages/it-manager.html:815 #: templates/pages/it-manager.html:865 templates/pages/it-manager.html:1048 @@ -817,7 +866,7 @@ msgstr "IP addresses" msgid "Услуга" msgstr "" -#: apps/it_manager/admin.py:508 templates/pages/pharmacy-detail.html:243 +#: apps/it_manager/admin.py:508 templates/pages/pharmacy-detail.html:245 msgid "Технология" msgstr "Technology" @@ -829,7 +878,7 @@ msgstr "Expiry" msgid "Статические IP" msgstr "" -#: apps/it_manager/admin.py:608 templates/pages/employee-detail.html:89 +#: apps/it_manager/admin.py:608 templates/pages/employee-detail.html:96 msgid "Работа" msgstr "Work" @@ -882,12 +931,12 @@ msgstr "" #: apps/locations/admin.py:99 apps/locations/admin.py:282 #: templates/pages/employees.html:106 templates/pages/pharmacies.html:114 -#: templates/pages/pharmacy-detail.html:87 +#: templates/pages/pharmacy-detail.html:89 msgid "Адрес" msgstr "Address" #: apps/locations/admin.py:102 apps/locations/admin.py:139 -#: apps/locations/admin.py:354 templates/pages/pharmacy-detail.html:155 +#: apps/locations/admin.py:354 templates/pages/pharmacy-detail.html:157 msgid "Координаты" msgstr "Coordinates" @@ -938,12 +987,10 @@ msgid "Почта Carbonio" msgstr "" #: apps/locations/admin.py:316 -msgid "" -"Пусто в «Почта Carbonio» — адрес сгенерируется как <префикс " -"организации><номер>@домен. Можно задать вручную." +msgid "Пусто в «Почта Carbonio» — адрес сгенерируется как <префикс организации><номер>@домен. Можно задать вручную." msgstr "" -#: apps/locations/admin.py:376 core/views.py:350 +#: apps/locations/admin.py:376 core/views.py:352 #: templates/pages/structure.html:61 msgid "Сотрудников" msgstr "" @@ -1038,7 +1085,7 @@ msgid "Заведующий аптекой" msgstr "" #: apps/locations/models/pharmacies.py:113 -#: templates/pages/pharmacy-detail.html:90 +#: templates/pages/pharmacy-detail.html:92 msgid "Ответственный менеджер" msgstr "Responsible manager" @@ -1047,7 +1094,7 @@ msgid "Сотрудник с должностью «Відповідальний msgstr "" #: apps/locations/models/pharmacies.py:119 -#: templates/pages/pharmacy-detail.html:91 +#: templates/pages/pharmacy-detail.html:93 msgid "Куратор" msgstr "Curator" @@ -1095,9 +1142,7 @@ msgid "Отключён" msgstr "" #: apps/locations/models/pharmacies.py:157 -msgid "" -"Ящик аптеки. Пусто — сгенерируется как <префикс организации><номер>@домен. " -"Можно задать вручную." +msgid "Ящик аптеки. Пусто — сгенерируется как <префикс организации><номер>@домен. Можно задать вручную." msgstr "" #: apps/locations/models/pharmacies.py:160 @@ -1132,7 +1177,7 @@ msgstr "" msgid "Ошибка синхронизации Carbonio" msgstr "" -#: apps/locations/models/pharmacies.py:211 templates/index.html:381 +#: apps/locations/models/pharmacies.py:211 templates/index.html:382 #: templates/pages/dislocation.html:16 templates/pages/pharmacies.html:6 #: templates/pages/timetrack.html:49 msgid "Аптеки" @@ -1143,7 +1188,7 @@ msgid "Такой адрес Carbonio уже используется друго msgstr "" #: apps/locations/models/pharmacies.py:325 -#: templates/pages/pharmacy-detail.html:111 +#: templates/pages/pharmacy-detail.html:113 msgid "Основной" msgstr "Primary" @@ -1199,6 +1244,46 @@ msgstr "" msgid "Журнал синхронизации Carbonio" msgstr "" +#: apps/nextcloud_connector/models.py:20 +msgid "Создание папки" +msgstr "" + +#: apps/nextcloud_connector/models.py:21 +msgid "Обновление ACL" +msgstr "" + +#: apps/nextcloud_connector/models.py:22 +msgid "Пропуск" +msgstr "" + +#: apps/nextcloud_connector/models.py:27 +msgid "Пробный прогон" +msgstr "" + +#: apps/nextcloud_connector/models.py:30 +msgid "Тип сущности" +msgstr "" + +#: apps/nextcloud_connector/models.py:31 +msgid "Ссылка на сущность" +msgstr "" + +#: apps/nextcloud_connector/models.py:32 +msgid "Код отдела или номер аптеки" +msgstr "" + +#: apps/nextcloud_connector/models.py:33 +msgid "Путь Group Folder" +msgstr "" + +#: apps/nextcloud_connector/models.py:39 +msgid "Запись синхронизации Nextcloud" +msgstr "" + +#: apps/nextcloud_connector/models.py:40 +msgid "Журнал синхронизации Nextcloud" +msgstr "" + #: apps/tasks/models.py:25 templates/pages/it-manager.html:322 #: templates/pages/it-manager.html:374 templates/pages/task-detail.html:21 #: templates/pages/tasks.html:68 templates/pages/tasks.html:108 @@ -1292,7 +1377,7 @@ msgstr "" msgid "Відмітив" msgstr "" -#: apps/tasks/models.py:153 +#: apps/tasks/models.py:153 osc/core/models/directory.py:33 msgid "Порядок" msgstr "" @@ -1451,7 +1536,8 @@ msgid "Повна зміна" msgstr "" #: core/admin.py:20 core/models/directories.py:54 -#: core/models/directories.py:116 +#: core/models/directories.py:116 osc/core/models/directory.py:12 +#: osc/core/models/directory.py:23 msgid "Тип справочника" msgstr "" @@ -1482,7 +1568,7 @@ msgid "Записей" msgstr "" #: core/admin.py:144 templates/pages/pharmacy-detail.html:67 -#: templates/pages/pharmacy-detail.html:83 +#: templates/pages/pharmacy-detail.html:85 msgid "Основная информация" msgstr "General information" @@ -1503,6 +1589,7 @@ msgid "Дерево справочников перестроено" msgstr "" #: core/admin.py:195 core/models/directories.py:119 +#: osc/core/models/directory.py:9 osc/core/models/directory.py:26 #: templates/pages/it-manager.html:821 msgid "Название" msgstr "Name" @@ -1519,7 +1606,7 @@ msgstr "" msgid "Укажите токен или логин/пароль — в зависимости от типа коннектора" msgstr "" -#: core/admin.py:263 core/models/connector_config.py:39 +#: core/admin.py:263 core/models/connector_config.py:40 msgid "Дополнительные параметры" msgstr "" @@ -1527,55 +1614,57 @@ msgstr "" msgid "Коннектор" msgstr "" -#: core/models/connector_config.py:17 +#: core/models/connector_config.py:18 msgid "Тип коннектора" msgstr "" -#: core/models/connector_config.py:20 +#: core/models/connector_config.py:21 msgid "Включён" msgstr "" -#: core/models/connector_config.py:23 +#: core/models/connector_config.py:24 msgid "Хост" msgstr "" -#: core/models/connector_config.py:24 +#: core/models/connector_config.py:25 msgid "Порт" msgstr "" -#: core/models/connector_config.py:25 +#: core/models/connector_config.py:26 msgid "Использовать SSL" msgstr "" -#: core/models/connector_config.py:31 +#: core/models/connector_config.py:32 msgid "Пароль" msgstr "" -#: core/models/connector_config.py:33 +#: core/models/connector_config.py:34 msgid "Токен / API Key" msgstr "" -#: core/models/connector_config.py:34 +#: core/models/connector_config.py:35 msgid "Bearer-токен или API-ключ, если используется вместо логина/пароля" msgstr "" -#: core/models/connector_config.py:40 +#: core/models/connector_config.py:41 msgid "Специфичные для коннектора настройки в формате JSON" msgstr "" -#: core/models/connector_config.py:46 +#: core/models/connector_config.py:47 msgid "Настройки коннектора" msgstr "" -#: core/models/connector_config.py:47 +#: core/models/connector_config.py:48 osc/core/models/connector_settings.py:33 +#: osc/core/models/connector_settings.py:34 +#: osc/core/models/connector_settings.py:37 msgid "Настройки коннекторов" msgstr "" -#: core/models/connector_config.py:57 +#: core/models/connector_config.py:58 msgid "Хост обязателен для включённого коннектора" msgstr "" -#: core/models/connector_config.py:60 +#: core/models/connector_config.py:61 msgid "Для включённого коннектора необходимо указать токен или логин" msgstr "" @@ -1611,11 +1700,12 @@ msgstr "" msgid "Только для гибкой и кастомной иерархии" msgstr "" -#: core/models/directories.py:55 +#: core/models/directories.py:55 osc/core/models/directory.py:13 msgid "Типы справочников" msgstr "" -#: core/models/directories.py:118 +#: core/models/directories.py:118 osc/core/models/directory.py:8 +#: osc/core/models/directory.py:25 msgid "Код" msgstr "" @@ -1680,181 +1770,414 @@ msgstr "" msgid "Неверная контрольная сумма ИНН" msgstr "" -#: core/views.py:349 +#: core/views.py:351 msgid "Рабочих дней" msgstr "Working days" -#: core/views.py:349 +#: core/views.py:351 msgid "с отметками" msgstr "with check-ins" -#: core/views.py:350 +#: core/views.py:352 msgid "отмечались" msgstr "checked in" -#: core/views.py:351 +#: core/views.py:353 msgid "Смен" msgstr "Shifts" -#: core/views.py:351 +#: core/views.py:353 msgid "за месяц" msgstr "this month" -#: core/views.py:352 templates/pages/timetrack.html:62 +#: core/views.py:354 templates/pages/timetrack.html:62 msgid "Незакрытых" msgstr "Open" -#: core/views.py:352 +#: core/views.py:354 msgid "без ухода" msgstr "without checkout" -#: core/views.py:353 +#: core/views.py:355 msgid "Всего часов" msgstr "Total hours" -#: core/views.py:353 +#: core/views.py:355 msgid "отработано" msgstr "worked" -#: templates/index.html:210 +#: osc/apps/employees/models.py:34 +msgid "Логин для входа, совпадает с учётной записью AD" +msgstr "" + +#: osc/apps/employees/models.py:105 +msgid "Логин AD (sAMAccountName)" +msgstr "" + +#: osc/apps/employees/models.py:107 +msgid "AD User DN" +msgstr "" + +#: osc/apps/employees/models.py:151 +msgid "Не может быть раньше даты приёма" +msgstr "" + +#: osc/apps/employees/models.py:153 +msgid "Сотрудник не может быть своим руководителем" +msgstr "" + +#: osc/apps/mattermost_connector/models.py:23 +msgid "Запись синхронизации Mattermost" +msgstr "" + +#: osc/apps/mattermost_connector/models.py:24 +msgid "Журнал синхронизации Mattermost" +msgstr "" + +#: osc/core/models/connector_settings.py:10 +msgid "Требовать смену пароля при создании" +msgstr "" + +#: osc/core/models/connector_settings.py:12 +msgid "Новым учётным записям в AD выставляется флаг «сменить пароль при следующем входе». Если выключено — выданный пароль действует сразу, без принудительной смены." +msgstr "" + +#: osc/core/models/connector_settings.py:17 +msgid "Пароль не имеет срока действия" +msgstr "" + +#: osc/core/models/connector_settings.py:19 +msgid "Новым и существующим учётным записям в AD выставляется флаг «Password never expires». Если выключено — действует обычная парольная политика домена." +msgstr "" + +#: osc/core/models/connector_settings.py:24 +msgid "Команда Mattermost по умолчанию" +msgstr "" + +#: osc/core/models/connector_settings.py:25 +msgid "Сотрудники автоматически добавляются в эту команду при синхронизации с Mattermost." +msgstr "" + +#: osc/core/models/connector_settings.py:28 +msgid "Каналы по умолчанию" +msgstr "" + +#: osc/core/models/connector_settings.py:29 +msgid "Сотрудники автоматически добавляются в эти каналы при синхронизации с Mattermost." +msgstr "" + +#: osc/core/models/directory.py:29 +msgid "Родительский элемент" +msgstr "" + +#: osc/core/models/directory.py:30 +msgid "Должен принадлежать тому же типу справочника" +msgstr "" + +#: osc/core/models/directory.py:35 +msgid "OU в Active Directory" +msgstr "" + +#: osc/core/models/directory.py:37 +msgid "Используется только для справочника отделов (department): сотрудники этого отдела создаются/переносятся в указанную OU. Например: OU=IT,OU=OL_Users,DC=ol,DC=local. Если не задано — используется AD_USERS_OU." +msgstr "" + +#: osc/core/models/directory.py:44 templates/pages/dashboard.html:163 +msgid "Справочник" +msgstr "Directory" + +#: osc/core/models/directory.py:45 +msgid "Справочники" +msgstr "" + +#: osc/core/models/directory.py:56 +msgid "Элемент не может быть родителем самому себе" +msgstr "" + +#: osc/core/models/directory.py:58 +msgid "Родитель должен принадлежать тому же типу справочника" +msgstr "" + +#: osc/core/models/directory.py:62 +msgid "Циклическая вложенность недопустима" +msgstr "" + +#: osc/core/models/site_settings.py:9 +msgid "Название портала" +msgstr "" + +#: osc/core/models/site_settings.py:10 +msgid "Логотип" +msgstr "" + +#: osc/core/models/site_settings.py:13 osc/core/models/site_settings.py:14 +#: osc/core/models/site_settings.py:17 +msgid "Настройки сайта" +msgstr "" + +#: osc/core/utils/validators.py:16 +msgid "Введите корректный украинский номер телефона, например +380501234567" +msgstr "" + +#: osc/core/utils/validators.py:24 +msgid "Дата рождения должна быть в прошлом" +msgstr "" + +#: osc/core/utils/validators.py:27 +msgid "Сотруднику должно быть не менее 16 лет" +msgstr "" + +#: osc/core/utils/validators.py:29 +msgid "Проверьте дату рождения — возраст превышает 100 лет" +msgstr "" + +#: osc/core/utils/validators.py:35 +msgid "ИНН должен состоять из 10 цифр" +msgstr "" + +#: osc/core/utils/validators.py:38 +msgid "Некорректный ИНН: неверная контрольная сумма" +msgstr "" + +#: osc/templates/admin/employees/employee/delete_confirmation.html:10 +#, python-format +msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:" +msgstr "" + +#: osc/templates/admin/employees/employee/delete_confirmation.html:17 +msgid "Objects" +msgstr "" + +#: templates/index.html:211 msgid "Сеть аптек" msgstr "Pharmacy network" -#: templates/index.html:211 +#: templates/index.html:212 msgid "Портал пользователя" msgstr "User portal" -#: templates/index.html:220 +#: templates/index.html:221 msgid "Главное меню" msgstr "Main menu" -#: templates/index.html:229 templates/index.html:650 +#: templates/index.html:230 templates/index.html:654 msgid "Главная" msgstr "Home" -#: templates/index.html:239 templates/pages/news.html:6 +#: templates/index.html:240 templates/pages/news.html:6 msgid "Новости" msgstr "News" -#: templates/index.html:260 templates/index.html:660 +#: templates/index.html:261 templates/index.html:664 #: templates/pages/dashboard.html:145 templates/pages/task-detail.html:10 msgid "Задачи" msgstr "Tasks" -#: templates/index.html:268 templates/pages/dislocation.html:8 +#: templates/index.html:269 templates/pages/dislocation.html:8 msgid "Дислокация" msgstr "Dislocation" -#: templates/index.html:277 templates/pages/dashboard.html:135 +#: templates/index.html:278 templates/pages/dashboard.html:135 +#: templates/pages/documents.html:5 templates/pages/pharmacy-detail.html:75 msgid "Документы" msgstr "Documents" -#: templates/index.html:287 templates/pages/dashboard.html:125 +#: templates/index.html:288 templates/pages/dashboard.html:125 msgid "Электронная почта" msgstr "Email" -#: templates/index.html:296 templates/index.html:680 +#: templates/index.html:297 templates/index.html:684 +#: templates/pages/chat.html:5 msgid "Чат" msgstr "Chat" -#: templates/index.html:305 templates/pages/dashboard.html:154 +#: templates/index.html:306 templates/pages/dashboard.html:154 msgid "Календарь" msgstr "Calendar" -#: templates/index.html:314 +#: templates/index.html:315 msgid "Базы данных" msgstr "Databases" -#: templates/index.html:323 +#: templates/index.html:324 msgid "Отчёты" msgstr "Reports" -#: templates/index.html:333 +#: templates/index.html:334 msgid "Закупки" msgstr "Purchases" -#: templates/index.html:342 templates/pages/dashboard.html:183 +#: templates/index.html:343 templates/pages/dashboard.html:183 msgid "HR портал" msgstr "HR portal" -#: templates/index.html:352 templates/index.html:611 +#: templates/index.html:353 templates/index.html:612 #: templates/pages/settings.html:5 msgid "Настройки" msgstr "Settings" -#: templates/index.html:360 +#: templates/index.html:361 msgid "Управление" msgstr "Management" -#: templates/index.html:371 templates/pages/structure.html:7 +#: templates/index.html:372 templates/pages/structure.html:7 msgid "Структура" msgstr "Structure" -#: templates/index.html:390 +#: templates/index.html:391 msgid "Коммунальные услуги" msgstr "Utilities" -#: templates/index.html:401 +#: templates/index.html:402 msgid "Рекрутинг" msgstr "Recruiting" -#: templates/index.html:410 templates/pages/hr-portal.html:292 +#: templates/index.html:411 templates/pages/hr-portal.html:292 #: templates/pages/timetrack.html:7 msgid "Учёт рабочего времени" msgstr "Time tracking" -#: templates/index.html:418 +#: templates/index.html:419 msgid "Поддержка" msgstr "Support" -#: templates/index.html:428 templates/pages/hr-portal.html:284 +#: templates/index.html:429 templates/pages/hr-portal.html:284 msgid "Справка" msgstr "Reference" -#: templates/index.html:438 templates/pages/dashboard.html:193 +#: templates/index.html:439 templates/pages/dashboard.html:193 msgid "Поддержка IT" msgstr "IT Support" -#: templates/index.html:448 templates/pages/it-manager.html:6 +#: templates/index.html:449 templates/pages/it-manager.html:6 msgid "IT-отдел" msgstr "IT department" -#: templates/index.html:460 +#: templates/index.html:461 msgid "Active Directory" msgstr "Active Directory" -#: templates/index.html:494 templates/pages/employees.html:32 +#: templates/index.html:495 templates/pages/employees.html:32 msgid "Поиск..." msgstr "Search..." -#: templates/index.html:511 +#: templates/index.html:512 msgid "Язык" msgstr "Language" -#: templates/index.html:607 templates/pages/hr-portal.html:199 +#: templates/index.html:608 templates/pages/hr-portal.html:199 msgid "Профиль" msgstr "Profile" -#: templates/index.html:615 +#: templates/index.html:616 msgid "Помощь" msgstr "Help" -#: templates/index.html:620 +#: templates/index.html:623 msgid "Выход" msgstr "Logout" -#: templates/index.html:633 +#: templates/index.html:637 msgid "Загрузка..." msgstr "Loading..." -#: templates/index.html:671 +#: templates/index.html:675 msgid "Люди" msgstr "" -#: templates/index.html:687 +#: templates/index.html:691 msgid "Меню" msgstr "" +#: templates/pages/chat.html:6 +msgid "Внутренний корпоративный мессенджер (Mattermost)" +msgstr "Internal corporate messenger (Mattermost)" + +#: templates/pages/chat.html:15 +msgid "Поиск по всем сообщениям..." +msgstr "Search all messages..." + +#: templates/pages/chat.html:17 +msgid "Искать" +msgstr "Search" + +#: templates/pages/chat.html:31 +msgid "Личные сообщения" +msgstr "Direct messages" + +#: templates/pages/chat.html:32 templates/pages/chat.html:111 +msgid "Новое сообщение" +msgstr "New message" + +#: templates/pages/chat.html:37 templates/pages/chat.html:44 +#: templates/pages/documents.html:24 templates/pages/pharmacy-detail.html:337 +msgid "Загрузка…" +msgstr "Loading…" + +#: templates/pages/chat.html:41 +msgid "Каналы" +msgstr "Channels" + +#: templates/pages/chat.html:51 +msgid "Показывать закрытые разговоры" +msgstr "Show closed conversations" + +#: templates/pages/chat.html:59 +msgid "Выберите канал слева" +msgstr "Select a channel on the left" + +#: templates/pages/chat.html:69 templates/pages/chat.html:96 +msgid "Прикрепить файл" +msgstr "Attach file" + +#: templates/pages/chat.html:72 +msgid "Написать сообщение..." +msgstr "Write a message..." + +#: templates/pages/chat.html:87 +msgid "Обсуждение" +msgstr "Thread" + +#: templates/pages/chat.html:99 +msgid "Ответить в обсуждении..." +msgstr "Reply in thread..." + +#: templates/pages/chat.html:117 +msgid "Поиск коллег..." +msgstr "Search colleagues..." + +#: templates/pages/chat.html:119 +msgid "Начать разговор" +msgstr "Start conversation" + +#: templates/pages/chat.html:130 +msgid "Ваша учётная запись ещё не синхронизирована с Mattermost" +msgstr "Your account is not synced with Mattermost yet" + +#: templates/pages/chat.html:132 +msgid "Нажмите кнопку ниже, чтобы создать или привязать вашу учётную запись в Mattermost." +msgstr "Click the button below to create or link your Mattermost account." + +#: templates/pages/chat.html:135 +msgid "Синхронизировать сейчас" +msgstr "Sync now" + +#: templates/pages/chat.html:144 +msgid "Не удалось получить доступ к Mattermost" +msgstr "Failed to access Mattermost" + +#: templates/pages/chat.html:146 +msgid "Обратитесь в IT-отдел — возможно, отключена выдача Personal Access Token на сервере Mattermost." +msgstr "Contact the IT department — Personal Access Token issuance may be disabled on the Mattermost server." + +#: templates/pages/chat.html:155 +msgid "Чат ещё не подключён" +msgstr "Chat is not connected yet" + +#: templates/pages/chat.html:157 +msgid "Укажите публичный URL Mattermost (поле public_url в «Дополнительные параметры» коннектора Mattermost в админке) — и он появится здесь." +msgstr "Specify the public Mattermost URL (the public_url field under «Additional parameters» of the Mattermost connector in the admin) and it will appear here." + #: templates/pages/dashboard.html:7 msgid "Добрый день" msgstr "Good afternoon" @@ -1940,10 +2263,6 @@ msgstr "Quick access" msgid "Полезные ссылки и инструменты" msgstr "Useful links and tools" -#: templates/pages/dashboard.html:163 -msgid "Справочник" -msgstr "Directory" - #: templates/pages/dislocation.html:3 msgid "адрес не указан" msgstr "address not specified" @@ -2037,7 +2356,7 @@ msgstr "Map" #: templates/pages/dislocation.html:118 templates/pages/pharmacies.html:115 #: templates/pages/pharmacy-detail.html:49 -#: templates/pages/pharmacy-detail.html:139 +#: templates/pages/pharmacy-detail.html:141 msgid "Заведующий" msgstr "Manager" @@ -2068,7 +2387,7 @@ msgid "Неактивна" msgstr "Inactive" #: templates/pages/dislocation.html:208 -#: templates/pages/pharmacy-detail.html:147 +#: templates/pages/pharmacy-detail.html:149 msgid "В этой аптеке пока нет активных сотрудников" msgstr "No active employees in this pharmacy yet" @@ -2140,70 +2459,78 @@ msgstr "Showing" msgid "Нет записей" msgstr "No records" -#: templates/pages/employee-detail.html:21 templates/pages/news-detail.html:17 +#: templates/pages/documents.html:6 +msgid "Файловое хранилище: общие документы, обучение, отделы" +msgstr "" + +#: templates/pages/documents.html:29 +msgid "Нет доступных разделов документов." +msgstr "" + +#: templates/pages/employee-detail.html:28 templates/pages/news-detail.html:17 #: templates/pages/task-detail.html:41 templates/pages/tasks.html:127 msgid "Редактировать" msgstr "Edit" -#: templates/pages/employee-detail.html:40 templates/pages/employees.html:150 +#: templates/pages/employee-detail.html:47 templates/pages/employees.html:150 msgid "Не активный" msgstr "Inactive" -#: templates/pages/employee-detail.html:42 +#: templates/pages/employee-detail.html:49 msgid "Испытательный срок" msgstr "Probation period" -#: templates/pages/employee-detail.html:63 +#: templates/pages/employee-detail.html:70 msgid "Рабочий email" msgstr "Work email" -#: templates/pages/employee-detail.html:71 +#: templates/pages/employee-detail.html:78 msgid "Внутренний номер" msgstr "Internal number" -#: templates/pages/employee-detail.html:100 +#: templates/pages/employee-detail.html:107 msgid "Подчинённых" msgstr "Subordinates" -#: templates/pages/employee-detail.html:105 templates/pages/hr-portal.html:219 +#: templates/pages/employee-detail.html:112 templates/pages/hr-portal.html:219 msgid "Дата приёма" msgstr "Hire date" -#: templates/pages/employee-detail.html:132 +#: templates/pages/employee-detail.html:139 msgid "Экстренный контакт" msgstr "Emergency contact" -#: templates/pages/employee-detail.html:141 templates/pages/settings.html:17 +#: templates/pages/employee-detail.html:148 templates/pages/settings.html:17 msgid "Интеграции" msgstr "Integrations" -#: templates/pages/employee-detail.html:145 #: templates/pages/employee-detail.html:152 +#: templates/pages/employee-detail.html:159 msgid "Синхронизировано" msgstr "Synced" -#: templates/pages/employee-detail.html:147 #: templates/pages/employee-detail.html:154 +#: templates/pages/employee-detail.html:161 msgid "Отключено" msgstr "Disabled" -#: templates/pages/employee-detail.html:155 +#: templates/pages/employee-detail.html:162 msgid "Не синхронизировано" msgstr "Not synced" -#: templates/pages/employee-detail.html:182 +#: templates/pages/employee-detail.html:189 msgid "Задач пока нет" msgstr "No tasks yet" -#: templates/pages/employee-detail.html:196 +#: templates/pages/employee-detail.html:203 msgid "Цепочка руководства" msgstr "Management chain" -#: templates/pages/employee-detail.html:229 +#: templates/pages/employee-detail.html:236 msgid "Последнее посещение" msgstr "Last seen" -#: templates/pages/employee-detail.html:239 +#: templates/pages/employee-detail.html:246 msgid "Группы доступа" msgstr "Access groups" @@ -2469,8 +2796,7 @@ msgstr "New hiring request" #: templates/pages/hr-portal.html:416 msgid "Сразу создаёт личный учётный запис кандидата на срок испытания." -msgstr "" -"Immediately creates a personal candidate account for the probation period." +msgstr "Immediately creates a personal candidate account for the probation period." #: templates/pages/hr-portal.html:422 msgid "Фамилия " @@ -2532,7 +2858,7 @@ msgstr "Position / location" msgid "Испытание до" msgstr "Probation until" -#: templates/pages/hr-portal.html:537 templates/pages/pharmacy-detail.html:300 +#: templates/pages/hr-portal.html:537 templates/pages/pharmacy-detail.html:302 msgid "Подал" msgstr "Submitted by" @@ -2597,13 +2923,13 @@ msgid "Всего единиц" msgstr "Total units" #: templates/pages/it-manager.html:35 templates/pages/it-manager.html:259 -#: templates/pages/pharmacy-detail.html:211 +#: templates/pages/pharmacy-detail.html:213 msgid "На складе" msgstr "In stock" #: templates/pages/it-manager.html:39 templates/pages/it-manager.html:236 -#: templates/pages/it-manager.html:260 templates/pages/pharmacy-detail.html:196 -#: templates/pages/pharmacy-detail.html:212 +#: templates/pages/it-manager.html:260 templates/pages/pharmacy-detail.html:198 +#: templates/pages/pharmacy-detail.html:214 msgid "Выдано" msgstr "Issued" @@ -2644,9 +2970,7 @@ msgid "По одному в строку — вставьте список се msgstr "One per line — paste serial numbers, e.g." #: templates/pages/it-manager.html:96 -msgid "" -"Сколько серийников — столько единиц будет создано. Дубликаты и уже имеющиеся " -"пропускаются." +msgid "Сколько серийников — столько единиц будет создано. Дубликаты и уже имеющиеся пропускаются." msgstr "" #: templates/pages/it-manager.html:100 templates/pages/it-manager.html:670 @@ -2758,7 +3082,7 @@ msgstr "Type / Brand / Model" msgid "С/н · Инв. №" msgstr "S/n · Inv. no." -#: templates/pages/it-manager.html:261 templates/pages/pharmacy-detail.html:213 +#: templates/pages/it-manager.html:261 templates/pages/pharmacy-detail.html:215 msgid "В ремонте" msgstr "Under repair" @@ -2823,7 +3147,7 @@ msgstr "Assignee" #: templates/pages/it-manager.html:349 templates/pages/it-manager.html:486 #: templates/pages/it-manager.html:555 templates/pages/it-manager.html:1098 -#: templates/pages/pharmacy-detail.html:297 +#: templates/pages/pharmacy-detail.html:299 msgid "Дата" msgstr "Date" @@ -3004,7 +3328,7 @@ msgid "Номер договора" msgstr "Contract number" #: templates/pages/it-manager.html:895 templates/pages/it-manager.html:970 -#: templates/pages/pharmacy-detail.html:242 +#: templates/pages/pharmacy-detail.html:244 msgid "Тип услуги" msgstr "Service type" @@ -3048,7 +3372,7 @@ msgstr "One IP address per line" msgid "Провайдер / Локация" msgstr "Provider / Location" -#: templates/pages/it-manager.html:971 templates/pages/pharmacy-detail.html:244 +#: templates/pages/it-manager.html:971 templates/pages/pharmacy-detail.html:246 msgid "Скорость" msgstr "Speed" @@ -3117,7 +3441,7 @@ msgid "Это необратимо." msgstr "This is irreversible." #: templates/pages/news-detail.html:24 templates/pages/task-detail.html:48 -#: templates/pages/tasks.html:135 +#: templates/pages/tasks.html:135 templates/partials/pharmacy-documents.html:51 msgid "Удалить" msgstr "Delete" @@ -3248,83 +3572,83 @@ msgstr "Internet provider" msgid "Коммунальный отдел" msgstr "Utilities department" -#: templates/pages/pharmacy-detail.html:86 +#: templates/pages/pharmacy-detail.html:88 msgid "Регион" msgstr "Region" -#: templates/pages/pharmacy-detail.html:88 +#: templates/pages/pharmacy-detail.html:90 msgid "Категория" msgstr "Category" -#: templates/pages/pharmacy-detail.html:89 +#: templates/pages/pharmacy-detail.html:91 msgid "Категория НДС" msgstr "VAT category" -#: templates/pages/pharmacy-detail.html:92 +#: templates/pages/pharmacy-detail.html:94 msgid "Количество фармацевтов (штат)" msgstr "Number of pharmacists (staff)" -#: templates/pages/pharmacy-detail.html:119 +#: templates/pages/pharmacy-detail.html:121 msgid "Телефоны не указаны" msgstr "No phones specified" -#: templates/pages/pharmacy-detail.html:178 +#: templates/pages/pharmacy-detail.html:180 msgid "Создано:" msgstr "Created:" -#: templates/pages/pharmacy-detail.html:179 +#: templates/pages/pharmacy-detail.html:181 msgid "Обновлено:" msgstr "Updated:" -#: templates/pages/pharmacy-detail.html:194 +#: templates/pages/pharmacy-detail.html:196 msgid "Серийный / инв. №" msgstr "Serial / inv. no." -#: templates/pages/pharmacy-detail.html:223 +#: templates/pages/pharmacy-detail.html:225 msgid "За этой аптекой не закреплено оборудование" msgstr "No equipment assigned to this pharmacy" -#: templates/pages/pharmacy-detail.html:229 +#: templates/pages/pharmacy-detail.html:231 msgid "Управлять оборудованием в IT-отделе" msgstr "Manage equipment in IT department" -#: templates/pages/pharmacy-detail.html:241 +#: templates/pages/pharmacy-detail.html:243 msgid "Провайдер / договор" msgstr "Provider / contract" -#: templates/pages/pharmacy-detail.html:278 +#: templates/pages/pharmacy-detail.html:280 msgid "Договоров с провайдерами для этой аптеки не найдено" msgstr "No provider contracts found for this pharmacy" -#: templates/pages/pharmacy-detail.html:284 +#: templates/pages/pharmacy-detail.html:286 msgid "Управлять договорами в IT-отделе" msgstr "Manage contracts in IT department" -#: templates/pages/pharmacy-detail.html:296 +#: templates/pages/pharmacy-detail.html:298 msgid "Тип счётчика" msgstr "Meter type" -#: templates/pages/pharmacy-detail.html:298 +#: templates/pages/pharmacy-detail.html:300 msgid "Показания" msgstr "Readings" -#: templates/pages/pharmacy-detail.html:299 +#: templates/pages/pharmacy-detail.html:301 msgid "Расход" msgstr "Consumption" -#: templates/pages/pharmacy-detail.html:301 +#: templates/pages/pharmacy-detail.html:303 msgid "Комментарий" msgstr "Comment" -#: templates/pages/pharmacy-detail.html:312 +#: templates/pages/pharmacy-detail.html:314 msgid "Показания меньше предыдущего — проверьте" msgstr "Reading is lower than previous — check" -#: templates/pages/pharmacy-detail.html:322 +#: templates/pages/pharmacy-detail.html:324 msgid "Показаний счётчиков для этой аптеки ещё не подавали" msgstr "No meter readings submitted for this pharmacy yet" -#: templates/pages/pharmacy-detail.html:327 +#: templates/pages/pharmacy-detail.html:329 msgid "Подать показания / все показания" msgstr "Submit readings / all readings" @@ -3357,12 +3681,8 @@ msgid "Количество записей в таблицах по умолча msgstr "Default number of rows in tables" #: templates/pages/profile.html:100 -msgid "" -"Применяется ко всем таблицам портала, если для конкретной таблицы размер не " -"выбран вручную." -msgstr "" -"Applies to all portal tables unless a size is chosen manually for a specific " -"table." +msgid "Применяется ко всем таблицам портала, если для конкретной таблицы размер не выбран вручную." +msgstr "Applies to all portal tables unless a size is chosen manually for a specific table." #: templates/pages/settings.html:6 msgid "Конфигурация портала" @@ -3539,3 +3859,34 @@ msgstr "No time records for" #: templates/pages/timetrack.html:92 msgid "сотрудников" msgstr "employees" + +#: templates/partials/documents-browser.html:28 +#: templates/partials/pharmacy-documents.html:18 +msgid "Файловое хранилище пока не настроено." +msgstr "" + +#: templates/partials/documents-browser.html:32 +#: templates/partials/pharmacy-documents.html:22 +msgid "Не удалось получить список документов." +msgstr "" + +#: templates/partials/documents-browser.html:61 +msgid "В этой папке пока нет файлов." +msgstr "" + +#: templates/partials/documents-browser.html:74 +#: templates/partials/pharmacy-documents.html:76 +msgid "Загрузить" +msgstr "" + +#: templates/partials/pharmacy-documents.html:4 +msgid "Документы аптеки" +msgstr "" + +#: templates/partials/pharmacy-documents.html:48 +msgid "Удалить файл?" +msgstr "" + +#: templates/partials/pharmacy-documents.html:63 +msgid "В папке аптеки пока нет файлов." +msgstr "" diff --git a/locale/en/LC_MESSAGES/djangojs.mo b/locale/en/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..818f72e4317354b5608ede1642df6eb1d8e53a1b GIT binary patch literal 1622 zcma)(&u4JwDCYAFE;g$)7RcpWU(cH|^T;nc;RIEywr*6x}g zw_qet6(poqrH2Yy35g4rgka(%!U(}1FxwlK3Uc5Kr=C#zePgFd6F}Y7%xCBA`|+Lk z{@k?oXNG4h)=sRaSYKj!Yp~&Y4z2}XfM0;~t-!{A>a)$07P72gMPoSimnAl1JOehxkcDeoWPMsNZA6nq7CfPaI-(9{8u_+;O& zV{8*x0u$hQko46+^1t5Z4UqEP1h<2CLDKc4eSQXhjPvU@-++{71CmhOHjw`B0r89N z2R{N2f#i3rZMQ+vRRAGV*8p@5v_kvRnI6isL4UP2>NE9z3l`mp?oBnRA5@F(N4b$& z_v#C9J=T97^98 z9cn3|1}<7x`m0&`(|~i6I?WMLr)^ocv;#U>f1g8ZXi&UD58dQeT*FA~*maMV8xV$J z{D$IsXnLZ*qtc|Bi?6_j+e~3RHI{Z^acQ zTc15&`+Ro~@7&v+V8gP?`T|+4@S^n3p@~j}mM|M_MnalMuO~ynL*WF)QI>K8G@PYn z)i0TBKpXjpp3b|5w9+1p2Er+=w2p}|MDIeDlmCvFzL(pjFZc*m#*b(e@)l3x{GuPj WxV?*dcSX3Uuziz)aG?E+jMzW;JzLfQ literal 0 HcmV?d00001 diff --git a/locale/en/LC_MESSAGES/djangojs.po b/locale/en/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..bc4e3b5 --- /dev/null +++ b/locale/en/LC_MESSAGES/djangojs.po @@ -0,0 +1,97 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "Failed to load channels" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-28 21:52+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: static/assets/js/chat.js:310 +msgid "Не удалось загрузить каналы" +msgstr "Failed to load channels" + +#: static/assets/js/chat.js:402 +msgid "Нет каналов" +msgstr "No channels" + +#: static/assets/js/chat.js:423 +msgid "Нет сообщений" +msgstr "No messages" + +#: static/assets/js/chat.js:432 +msgid "Групповой разговор" +msgstr "Group conversation" + +#: static/assets/js/chat.js:549 static/assets/js/chat.js:952 +msgid "Загрузка…" +msgstr "Loading…" + +#: static/assets/js/chat.js:561 +msgid "Не удалось загрузить сообщения" +msgstr "Failed to load messages" + +#: static/assets/js/chat.js:611 +msgid "Личное" +msgstr "Direct" + +#: static/assets/js/chat.js:629 +msgid "Поиск…" +msgstr "Searching…" + +#: static/assets/js/chat.js:650 +msgid "Не удалось выполнить поиск" +msgstr "Search failed" + +#: static/assets/js/chat.js:663 +msgid "Найдено:" +msgstr "Found:" + +#: static/assets/js/chat.js:666 +msgid "Закрыть поиск" +msgstr "Close search" + +#: static/assets/js/chat.js:676 +msgid "Ничего не найдено" +msgstr "Nothing found" + +#: static/assets/js/chat.js:718 +msgid "бот" +msgstr "bot" + +#: static/assets/js/chat.js:743 +msgid "Вы" +msgstr "You" + +#: static/assets/js/chat.js:781 +msgid "Реакция" +msgstr "React" + +#: static/assets/js/chat.js:790 static/assets/js/chat.js:1002 +msgid "Ответов:" +msgstr "Replies:" + +#: static/assets/js/chat.js:790 +msgid "Ответить" +msgstr "Reply" + +#: static/assets/js/chat.js:964 +msgid "Не удалось загрузить обсуждение" +msgstr "Failed to load thread" + +#: static/assets/js/chat.js:1108 +msgid "Никого не найдено" +msgstr "No one found" + +#: static/assets/js/chat.js:1204 +msgid "Новое сообщение" +msgstr "New message" diff --git a/locale/uk/LC_MESSAGES/django.mo b/locale/uk/LC_MESSAGES/django.mo index 88a0adf04e6464f1fc23247146be7557a13e3f45..a2bd89b01b306ddad805115cbde8128085fc14bc 100644 GIT binary patch delta 14139 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

nC$= z3Gp4F9o>|u=V$j;3Ku-0g5OfUV}@1uGiN&VqUYwCe|#DBl;bH+C;Aa5$#vYqG=gPw zuG>1*Hz&&2JW%I}U-heKBEgr)_i1`YrT%YDjeLvqG1*9>2WNw9H-0A9F_P%-E14hD z;D*i1;xevVj5UaRlIF9;;xiPH_CK#aTdMD<_5$4js@}G#Bb~ z{tI>8@LS@=V~tI+bq~ky#HW;#e3|bt&H(ZX(~S?oaBDQT`OSVM$v*#a=6_QkP(I z^_A}i;Ya0UEMadrLis+?kkIiK^{0pm_WUI3J|=>hjhobk5aq~q?6udZyn*;1(NhUW zh{67({We@YoYYJ7v^P$+W?;k%H`KTFiPVJ=#fcTvb-)M2BFbN@9$VUL```hhBTZ49q2mVi)$p7z=JLO))4q_Jh zExcy0`v^CYFU7;CqnADRIo4DAv#1>5JH^^jIgRK?oK@KR(v)93_Ss~!HSUFzl_I8UpP0jMGO)BM`kQox-_0Blz=gBdNhm7WfB26>vb zjPgdkJJ-*1V(tS^`utknkLSPa@2#>hIMCBRE7P0z{d7O?vZby4yg}K&1bTC=K9tk@ O+4}AN-gz6R2mT+pU(SmF diff --git a/locale/uk/LC_MESSAGES/django.po b/locale/uk/LC_MESSAGES/django.po index 8de921f..ae4f03d 100644 --- a/locale/uk/LC_MESSAGES/django.po +++ b/locale/uk/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-28 10:22+0300\n" +"POT-Creation-Date: 2026-07-28 21:52+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,26 +15,31 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " -"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " -"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " -"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" -#: apps/ad_connector/models.py:10 apps/employees/models/base.py:186 -#: apps/employees/models/permissions.py:47 templates/pages/employees.html:103 -#: templates/pages/hr-portal.html:215 templates/pages/timetrack.html:58 +#: apps/ad_connector/models.py:10 apps/employees/models/base.py:198 +#: apps/employees/models/permissions.py:47 osc/apps/ad_connector/models.py:10 +#: osc/apps/employees/models.py:130 osc/apps/mattermost_connector/models.py:10 +#: templates/pages/employees.html:103 templates/pages/hr-portal.html:215 +#: templates/pages/timetrack.html:58 msgid "Сотрудник" msgstr "Співробітник" #: apps/ad_connector/models.py:13 apps/mail_connector/models.py:15 +#: apps/nextcloud_connector/models.py:34 osc/apps/ad_connector/models.py:13 +#: osc/apps/mattermost_connector/models.py:13 msgid "Действие" msgstr "" #: apps/ad_connector/models.py:15 apps/mail_connector/models.py:17 +#: osc/apps/ad_connector/models.py:14 +#: osc/apps/mattermost_connector/models.py:14 msgid "Создание" msgstr "" #: apps/ad_connector/models.py:16 apps/mail_connector/models.py:18 +#: osc/apps/ad_connector/models.py:14 +#: osc/apps/mattermost_connector/models.py:14 msgid "Обновление" msgstr "" @@ -50,43 +55,54 @@ msgstr "" #: apps/it_manager/admin.py:168 apps/it_manager/admin.py:263 #: apps/it_manager/admin.py:352 apps/it_manager/admin.py:498 #: apps/locations/models/pharmacies.py:128 apps/mail_connector/models.py:24 -#: apps/tasks/models.py:40 apps/visit_manager/admin.py:199 core/admin.py:32 +#: apps/nextcloud_connector/models.py:35 apps/tasks/models.py:40 +#: apps/visit_manager/admin.py:199 core/admin.py:32 +#: osc/apps/ad_connector/models.py:17 +#: osc/apps/mattermost_connector/models.py:17 #: templates/pages/dislocation.html:122 templates/pages/employees.html:107 #: templates/pages/hr-portal.html:535 templates/pages/it-manager.html:237 #: templates/pages/it-manager.html:273 templates/pages/it-manager.html:350 #: templates/pages/it-manager.html:403 templates/pages/it-manager.html:696 #: templates/pages/it-manager.html:724 templates/pages/it-manager.html:973 #: templates/pages/it-manager.html:1002 templates/pages/pharmacies.html:119 -#: templates/pages/pharmacy-detail.html:195 -#: templates/pages/pharmacy-detail.html:245 templates/pages/structure.html:63 +#: templates/pages/pharmacy-detail.html:197 +#: templates/pages/pharmacy-detail.html:247 templates/pages/structure.html:63 msgid "Статус" msgstr "Статус" #: apps/ad_connector/models.py:23 apps/mail_connector/models.py:25 +#: apps/nextcloud_connector/models.py:25 osc/apps/ad_connector/models.py:18 +#: osc/apps/mattermost_connector/models.py:18 msgid "Успех" msgstr "" -#: apps/ad_connector/models.py:23 apps/employees/models/base.py:144 -#: apps/employees/models/base.py:159 apps/locations/models/pharmacies.py:152 -#: apps/mail_connector/models.py:25 templates/pages/employee-detail.html:146 +#: apps/ad_connector/models.py:23 apps/employees/models/base.py:145 +#: apps/employees/models/base.py:160 apps/locations/models/pharmacies.py:152 +#: apps/mail_connector/models.py:25 apps/nextcloud_connector/models.py:26 +#: osc/apps/ad_connector/models.py:18 osc/apps/employees/models.py:97 +#: osc/apps/employees/models.py:115 osc/apps/mattermost_connector/models.py:18 #: templates/pages/employee-detail.html:153 +#: templates/pages/employee-detail.html:160 msgid "Ошибка" msgstr "Помилка" #: apps/ad_connector/models.py:25 apps/mail_connector/models.py:27 +#: apps/nextcloud_connector/models.py:36 osc/apps/ad_connector/models.py:20 +#: osc/apps/mattermost_connector/models.py:20 msgid "Сообщение" msgstr "" -#: apps/ad_connector/models.py:28 +#: apps/ad_connector/models.py:28 osc/apps/ad_connector/models.py:23 msgid "Запись синхронизации AD" msgstr "" -#: apps/ad_connector/models.py:29 +#: apps/ad_connector/models.py:29 osc/apps/ad_connector/models.py:24 msgid "Журнал синхронизации AD" msgstr "" -#: apps/employees/admin.py:37 apps/employees/admin.py:244 -#: apps/employees/models/base.py:112 templates/pages/hr-portal.html:446 +#: apps/employees/admin.py:37 apps/employees/admin.py:259 +#: apps/employees/models/base.py:113 apps/nextcloud_connector/models.py:16 +#: osc/apps/employees/models.py:72 templates/pages/hr-portal.html:446 #: templates/pages/structure.html:59 msgid "Отдел" msgstr "Відділ" @@ -103,319 +119,351 @@ msgstr "" msgid "— Выберите офис или склад —" msgstr "" -#: apps/employees/admin.py:50 apps/employees/models/base.py:106 +#: apps/employees/admin.py:50 apps/employees/models/base.py:107 msgid "Локация (офис/склад)" msgstr "" -#: apps/employees/admin.py:51 apps/employees/models/base.py:107 +#: apps/employees/admin.py:51 apps/employees/models/base.py:108 msgid "Заполняется для location_type=office или warehouse" msgstr "" -#: apps/employees/admin.py:118 core/admin.py:259 +#: apps/employees/admin.py:133 core/admin.py:259 msgid "Аутентификация" msgstr "" -#: apps/employees/admin.py:122 +#: apps/employees/admin.py:137 msgid "ФИО" msgstr "" -#: apps/employees/admin.py:126 +#: apps/employees/admin.py:141 msgid "Рабочая информация" msgstr "" -#: apps/employees/admin.py:134 apps/it_manager/admin.py:307 +#: apps/employees/admin.py:149 apps/it_manager/admin.py:307 msgid "Даты" msgstr "" -#: apps/employees/admin.py:138 templates/pages/employee-detail.html:119 +#: apps/employees/admin.py:153 templates/pages/employee-detail.html:126 msgid "Личные данные" msgstr "Особисті дані" -#: apps/employees/admin.py:142 apps/it_manager/admin.py:421 -#: apps/locations/admin.py:291 templates/pages/employee-detail.html:60 -#: templates/pages/pharmacy-detail.html:104 +#: apps/employees/admin.py:157 apps/it_manager/admin.py:421 +#: apps/locations/admin.py:291 templates/pages/employee-detail.html:67 +#: templates/pages/pharmacy-detail.html:106 msgid "Контакты" msgstr "Контакти" -#: apps/employees/admin.py:158 +#: apps/employees/admin.py:173 msgid "Графік та відвідуваність" msgstr "" -#: apps/employees/admin.py:161 +#: apps/employees/admin.py:176 msgid "Графіки роботи та записи відвідуваності відображаються нижче." msgstr "" -#: apps/employees/admin.py:169 +#: apps/employees/admin.py:184 msgid "Системный доступ" msgstr "" -#: apps/employees/admin.py:173 +#: apps/employees/admin.py:188 msgid "Только для IT-администраторов. is_staff — вход в Django admin." msgstr "" -#: apps/employees/admin.py:217 +#: apps/employees/admin.py:232 msgid "Предпросмотр" msgstr "" -#: apps/employees/admin.py:224 +#: apps/employees/admin.py:239 msgid "Группы" msgstr "" -#: apps/employees/models/base.py:33 core/models/connector_config.py:28 +#: apps/employees/models/base.py:34 core/models/connector_config.py:29 +#: osc/apps/employees/models.py:33 msgid "Логин" msgstr "" -#: apps/employees/models/base.py:34 +#: apps/employees/models/base.py:35 msgid "Уникальный логин для входа в систему" msgstr "" -#: apps/employees/models/base.py:37 +#: apps/employees/models/base.py:38 osc/apps/employees/models.py:37 msgid "Email адрес" msgstr "" -#: apps/employees/models/base.py:38 +#: apps/employees/models/base.py:39 osc/apps/employees/models.py:38 msgid "Рабочий email. Если не указан — генерируется из username@local.domain" msgstr "" -#: apps/employees/models/base.py:41 +#: apps/employees/models/base.py:42 osc/apps/employees/models.py:41 msgid "Фамилия" msgstr "" -#: apps/employees/models/base.py:42 templates/pages/profile.html:76 +#: apps/employees/models/base.py:43 osc/apps/employees/models.py:42 +#: templates/pages/profile.html:76 msgid "Имя" msgstr "Ім'я" -#: apps/employees/models/base.py:43 templates/pages/hr-portal.html:430 +#: apps/employees/models/base.py:44 osc/apps/employees/models.py:43 +#: templates/pages/hr-portal.html:430 msgid "Отчество" msgstr "По батькові" -#: apps/employees/models/base.py:45 +#: apps/employees/models/base.py:46 osc/apps/employees/models.py:46 msgid "Доступ к панели администратора" msgstr "" -#: apps/employees/models/base.py:46 +#: apps/employees/models/base.py:47 osc/apps/employees/models.py:47 msgid "Разрешает вход в Django admin. Только для IT-администраторов системы." msgstr "" -#: apps/employees/models/base.py:47 core/models/directories.py:29 -#: core/models/directories.py:121 templates/pages/employee-detail.html:38 +#: apps/employees/models/base.py:48 core/models/directories.py:29 +#: core/models/directories.py:121 templates/pages/employee-detail.html:45 #: templates/pages/employees.html:148 templates/pages/hr-portal.html:174 #: templates/pages/structure.html:89 msgid "Активный" msgstr "Активний" -#: apps/employees/models/base.py:48 +#: apps/employees/models/base.py:49 osc/apps/employees/models.py:49 msgid "Работает ли сотрудник сейчас" msgstr "" -#: apps/employees/models/base.py:49 +#: apps/employees/models/base.py:50 osc/apps/employees/models.py:50 msgid "Дата создания аккаунта" msgstr "" -#: apps/employees/models/base.py:52 templates/pages/employee-detail.html:122 +#: apps/employees/models/base.py:53 osc/apps/employees/models.py:52 +#: templates/pages/employee-detail.html:129 msgid "Дата рождения" msgstr "Дата народження" -#: apps/employees/models/base.py:56 templates/pages/employee-detail.html:126 +#: apps/employees/models/base.py:57 osc/apps/employees/models.py:54 +#: templates/pages/employee-detail.html:133 msgid "ИНН" msgstr "ІПН" -#: apps/employees/models/base.py:57 +#: apps/employees/models/base.py:58 osc/apps/employees/models.py:55 msgid "Идентификационный номер налогоплательщика" msgstr "" -#: apps/employees/models/base.py:62 templates/pages/employee-detail.html:67 -#: templates/pages/profile.html:57 +#: apps/employees/models/base.py:63 osc/apps/employees/models.py:59 +#: templates/pages/employee-detail.html:74 templates/pages/profile.html:57 msgid "Рабочий телефон" msgstr "Робочий телефон" -#: apps/employees/models/base.py:66 +#: apps/employees/models/base.py:67 msgid "Внутрішній номер" msgstr "" -#: apps/employees/models/base.py:67 +#: apps/employees/models/base.py:68 msgid "Короткий внутрішній (додатковий) номер АТС" msgstr "" -#: apps/employees/models/base.py:70 templates/pages/employee-detail.html:76 -#: templates/pages/profile.html:61 +#: apps/employees/models/base.py:71 osc/apps/employees/models.py:60 +#: templates/pages/employee-detail.html:83 templates/pages/profile.html:61 msgid "Личный телефон" msgstr "Особистий телефон" -#: apps/employees/models/base.py:73 templates/pages/employee-detail.html:80 -#: templates/pages/profile.html:65 +#: apps/employees/models/base.py:74 osc/apps/employees/models.py:61 +#: templates/pages/employee-detail.html:87 templates/pages/profile.html:65 msgid "Личный email" msgstr "Особистий email" -#: apps/employees/models/base.py:75 +#: apps/employees/models/base.py:76 osc/apps/employees/models.py:63 msgid "Контакт в экстренных случаях" msgstr "" -#: apps/employees/models/base.py:76 +#: apps/employees/models/base.py:77 osc/apps/employees/models.py:65 msgid "Телефон экстренного контакта" msgstr "" -#: apps/employees/models/base.py:78 templates/pages/profile.html:84 +#: apps/employees/models/base.py:79 osc/apps/employees/models.py:67 +#: templates/pages/profile.html:84 msgid "Степень родства" msgstr "Ступінь спорідненості" -#: apps/employees/models/base.py:81 apps/employees/models/base.py:100 +#: apps/employees/models/base.py:82 apps/employees/models/base.py:101 #: apps/hiring/models.py:34 apps/hiring/models.py:50 #: apps/locations/admin.py:347 apps/locations/models/base.py:29 #: apps/locations/models/pharmacies.py:210 #: apps/locations/models/pharmacies.py:349 apps/mail_connector/models.py:12 -#: apps/utilities/models.py:17 templates/pages/dislocation.html:116 -#: templates/pages/employees.html:64 templates/pages/employees.html:90 -#: templates/pages/hr-portal.html:126 templates/pages/hr-portal.html:441 -#: templates/pages/hr-portal.html:455 templates/pages/hr-portal.html:459 +#: apps/nextcloud_connector/models.py:17 apps/utilities/models.py:17 +#: templates/pages/dislocation.html:116 templates/pages/employees.html:64 +#: templates/pages/employees.html:90 templates/pages/hr-portal.html:126 +#: templates/pages/hr-portal.html:441 templates/pages/hr-portal.html:455 +#: templates/pages/hr-portal.html:459 msgid "Аптека" msgstr "Аптека" -#: apps/employees/models/base.py:82 apps/hiring/models.py:35 +#: apps/employees/models/base.py:83 apps/hiring/models.py:35 #: apps/locations/models/base.py:30 templates/pages/hr-portal.html:128 #: templates/pages/hr-portal.html:442 msgid "Склад" msgstr "Склад" -#: apps/employees/models/base.py:83 apps/locations/models/base.py:31 +#: apps/employees/models/base.py:84 apps/locations/models/base.py:31 #: templates/pages/employees.html:56 templates/pages/hr-portal.html:124 #: templates/pages/hr-portal.html:440 templates/pages/timetrack.html:47 msgid "Офис" msgstr "Офіс" -#: apps/employees/models/base.py:86 apps/locations/models/base.py:28 +#: apps/employees/models/base.py:87 apps/locations/models/base.py:28 msgid "Тип локации" msgstr "" -#: apps/employees/models/base.py:87 +#: apps/employees/models/base.py:88 msgid "Где работает: аптека / склад / офис" msgstr "" -#: apps/employees/models/base.py:94 apps/locations/models/pharmacies.py:88 +#: apps/employees/models/base.py:95 apps/locations/models/pharmacies.py:88 #: templates/pages/dislocation.html:117 templates/pages/pharmacies.html:113 -#: templates/pages/pharmacy-detail.html:85 +#: templates/pages/pharmacy-detail.html:87 msgid "Организация" msgstr "Організація" -#: apps/employees/models/base.py:95 apps/locations/models/pharmacies.py:89 +#: apps/employees/models/base.py:96 apps/locations/models/pharmacies.py:89 msgid "Юрлицо: АКС, АКС Одесса, Тира, Пентальфа..." msgstr "" -#: apps/employees/models/base.py:101 +#: apps/employees/models/base.py:102 msgid "Заполняется только для location_type=pharmacy" msgstr "" -#: apps/employees/models/base.py:114 +#: apps/employees/models/base.py:115 msgid "Заполняется для office / warehouse" msgstr "" -#: apps/employees/models/base.py:119 templates/pages/dislocation.html:297 -#: templates/pages/employees.html:104 templates/pages/hr-portal.html:216 -#: templates/pages/hr-portal.html:467 +#: apps/employees/models/base.py:120 osc/apps/employees/models.py:77 +#: templates/pages/dislocation.html:297 templates/pages/employees.html:104 +#: templates/pages/hr-portal.html:216 templates/pages/hr-portal.html:467 msgid "Должность" msgstr "Посада" -#: apps/employees/models/base.py:125 templates/pages/employee-detail.html:92 -#: templates/pages/structure.html:60 +#: apps/employees/models/base.py:126 osc/apps/employees/models.py:81 +#: templates/pages/employee-detail.html:99 templates/pages/structure.html:60 msgid "Руководитель" msgstr "Керівник" -#: apps/employees/models/base.py:128 +#: apps/employees/models/base.py:129 osc/apps/employees/models.py:84 msgid "Дата приёма на работу" msgstr "" -#: apps/employees/models/base.py:129 templates/pages/employee-detail.html:109 +#: apps/employees/models/base.py:130 osc/apps/employees/models.py:85 +#: templates/pages/employee-detail.html:116 msgid "Дата увольнения" msgstr "Дата звільнення" -#: apps/employees/models/base.py:130 +#: apps/employees/models/base.py:131 osc/apps/employees/models.py:86 msgid "Конец испытательного срока" msgstr "" -#: apps/employees/models/base.py:133 apps/visit_manager/admin.py:262 -#: apps/visit_manager/admin.py:289 templates/pages/hr-portal.html:165 -#: templates/pages/hr-portal.html:234 +#: apps/employees/models/base.py:134 apps/visit_manager/admin.py:262 +#: apps/visit_manager/admin.py:289 osc/apps/employees/models.py:88 +#: templates/pages/hr-portal.html:165 templates/pages/hr-portal.html:234 msgid "Фото" msgstr "Фото" -#: apps/employees/models/base.py:137 +#: apps/employees/models/base.py:138 osc/apps/employees/models.py:90 msgid "ID Mattermost" msgstr "" -#: apps/employees/models/base.py:138 +#: apps/employees/models/base.py:139 osc/apps/employees/models.py:91 msgid "Логин Mattermost" msgstr "" -#: apps/employees/models/base.py:140 +#: apps/employees/models/base.py:141 osc/apps/employees/models.py:93 msgid "Статус синхронизации Mattermost" msgstr "" -#: apps/employees/models/base.py:142 apps/tasks/models.py:24 -#: templates/pages/employee-detail.html:148 templates/pages/task-detail.html:25 -#: templates/pages/tasks.html:64 templates/pages/tasks.html:116 +#: apps/employees/models/base.py:143 apps/tasks/models.py:24 +#: osc/apps/employees/models.py:95 templates/pages/employee-detail.html:155 +#: templates/pages/task-detail.html:25 templates/pages/tasks.html:64 +#: templates/pages/tasks.html:116 msgid "Ожидает" msgstr "Очікує" -#: apps/employees/models/base.py:143 apps/employees/models/base.py:158 -#: apps/locations/models/pharmacies.py:151 +#: apps/employees/models/base.py:144 apps/employees/models/base.py:159 +#: apps/locations/models/pharmacies.py:151 osc/apps/employees/models.py:96 +#: osc/apps/employees/models.py:114 msgid "Синхронизирован" msgstr "" -#: apps/employees/models/base.py:145 apps/employees/models/base.py:160 +#: apps/employees/models/base.py:146 apps/employees/models/base.py:161 +#: osc/apps/employees/models.py:98 osc/apps/employees/models.py:116 msgid "Отключена" msgstr "" -#: apps/employees/models/base.py:149 +#: apps/employees/models/base.py:150 osc/apps/employees/models.py:102 msgid "Последняя синхронизация Mattermost" msgstr "" -#: apps/employees/models/base.py:150 +#: apps/employees/models/base.py:151 osc/apps/employees/models.py:103 msgid "Синхронизация Mattermost" msgstr "" -#: apps/employees/models/base.py:155 +#: apps/employees/models/base.py:156 osc/apps/employees/models.py:111 msgid "Статус синхронизации AD" msgstr "" -#: apps/employees/models/base.py:157 +#: apps/employees/models/base.py:158 osc/apps/employees/models.py:113 msgid "Не синхронизирован" msgstr "" -#: apps/employees/models/base.py:164 +#: apps/employees/models/base.py:165 osc/apps/employees/models.py:120 msgid "Ошибка синхронизации AD" msgstr "" -#: apps/employees/models/base.py:165 +#: apps/employees/models/base.py:166 osc/apps/employees/models.py:121 msgid "Последняя синхронизация AD" msgstr "" -#: apps/employees/models/base.py:166 +#: apps/employees/models/base.py:167 osc/apps/employees/models.py:122 msgid "Синхронизация AD" msgstr "" -#: apps/employees/models/base.py:167 +#: apps/employees/models/base.py:168 msgid "Только для офисных сотрудников" msgstr "" -#: apps/employees/models/base.py:170 +#: apps/employees/models/base.py:171 msgid "Записей на странице" msgstr "" -#: apps/employees/models/base.py:172 +#: apps/employees/models/base.py:173 msgid "Сколько строк показывать в таблицах портала по умолчанию" msgstr "" -#: apps/employees/models/base.py:176 +#: apps/employees/models/base.py:177 msgid "Был онлайн" msgstr "" -#: apps/employees/models/base.py:177 +#: apps/employees/models/base.py:178 msgid "Обновляется автоматически при активности в портале (не в AD/Mattermost)" msgstr "" -#: apps/employees/models/base.py:187 templates/index.html:250 -#: templates/pages/dashboard.html:174 templates/pages/employees.html:8 -#: templates/pages/employees.html:24 templates/pages/hr-portal.html:92 +#: apps/employees/models/base.py:183 +msgid "TOTP-секрет" +msgstr "" + +#: apps/employees/models/base.py:184 +msgid "Секрет TOTP (шифруется). Заполняется при настройке 2FA." +msgstr "" + +#: apps/employees/models/base.py:186 +msgid "2FA включена" +msgstr "" + +#: apps/employees/models/base.py:188 +msgid "Резервные коды 2FA (хеши)" +msgstr "" + +#: apps/employees/models/base.py:189 +msgid "Хеши одноразовых резервных кодов; использованный код удаляется." +msgstr "" + +#: apps/employees/models/base.py:199 osc/apps/employees/models.py:131 +#: templates/index.html:251 templates/pages/dashboard.html:174 +#: templates/pages/employees.html:8 templates/pages/employees.html:24 +#: templates/pages/hr-portal.html:92 msgid "Сотрудники" msgstr "Працівники" @@ -469,12 +517,13 @@ msgid "Действует с" msgstr "" #: apps/employees/models/permissions.py:57 -#: templates/pages/pharmacy-detail.html:246 +#: templates/pages/pharmacy-detail.html:248 msgid "Действует до" msgstr "Діє до" #: apps/employees/models/permissions.py:58 -#: apps/locations/models/pharmacies.py:334 +#: apps/locations/models/pharmacies.py:334 osc/apps/employees/models.py:49 +#: osc/core/models/directory.py:32 msgid "Активен" msgstr "" @@ -536,9 +585,7 @@ msgid "ID повідомлень в Mattermost" msgstr "" #: apps/feed/models.py:52 -msgid "" -"{team_name: post_id} — за наявності id повторна публікація редагує існуюче " -"повідомлення" +msgid "{team_name: post_id} — за наявності id повторна публікація редагує існуюче повідомлення" msgstr "" #: apps/feed/models.py:55 @@ -546,9 +593,7 @@ msgid "Куди публікувати в Mattermost" msgstr "" #: apps/feed/models.py:56 -msgid "" -"Список команд (akc/pharmacys/warehouse) — обирається чекбоксами при " -"створенні/редагуванні" +msgid "Список команд (akc/pharmacys/warehouse) — обирається чекбоксами при створенні/редагуванні" msgstr "" #: apps/feed/models.py:61 apps/feed/models.py:100 apps/tasks/models.py:126 @@ -700,7 +745,7 @@ msgid "Экземпляров" msgstr "" #: apps/it_manager/admin.py:110 templates/pages/it-manager.html:13 -#: templates/pages/it-manager.html:514 templates/pages/pharmacy-detail.html:193 +#: templates/pages/it-manager.html:514 templates/pages/pharmacy-detail.html:195 msgid "Оборудование" msgstr "Обладнання" @@ -715,9 +760,9 @@ msgstr "" #: apps/it_manager/admin.py:119 apps/it_manager/admin.py:212 #: apps/it_manager/admin.py:427 apps/it_manager/admin.py:476 #: apps/locations/admin.py:319 apps/locations/models/pharmacies.py:335 -#: core/models/connector_config.py:43 templates/pages/it-manager.html:674 +#: core/models/connector_config.py:44 templates/pages/it-manager.html:674 #: templates/pages/it-manager.html:845 templates/pages/it-manager.html:950 -#: templates/pages/pharmacy-detail.html:96 +#: templates/pages/pharmacy-detail.html:98 msgid "Примечания" msgstr "Примітки" @@ -731,7 +776,7 @@ msgstr "" msgid "Модель" msgstr "Модель" -#: apps/it_manager/admin.py:180 templates/pages/pharmacy-detail.html:197 +#: apps/it_manager/admin.py:180 templates/pages/pharmacy-detail.html:199 msgid "Гарантия" msgstr "Гарантія" @@ -781,7 +826,8 @@ msgstr "Взяти в роботу" msgid "Отметить решёнными" msgstr "" -#: apps/it_manager/admin.py:383 templates/pages/it-manager.html:75 +#: apps/it_manager/admin.py:383 templates/pages/chat.html:88 +#: templates/pages/chat.html:112 templates/pages/it-manager.html:75 #: templates/pages/it-manager.html:135 templates/pages/it-manager.html:480 #: templates/pages/it-manager.html:614 templates/pages/it-manager.html:815 #: templates/pages/it-manager.html:865 templates/pages/it-manager.html:1048 @@ -820,7 +866,7 @@ msgstr "IP-адреси" msgid "Услуга" msgstr "" -#: apps/it_manager/admin.py:508 templates/pages/pharmacy-detail.html:243 +#: apps/it_manager/admin.py:508 templates/pages/pharmacy-detail.html:245 msgid "Технология" msgstr "Технологія" @@ -832,7 +878,7 @@ msgstr "Закінчення" msgid "Статические IP" msgstr "" -#: apps/it_manager/admin.py:608 templates/pages/employee-detail.html:89 +#: apps/it_manager/admin.py:608 templates/pages/employee-detail.html:96 msgid "Работа" msgstr "Робота" @@ -885,12 +931,12 @@ msgstr "" #: apps/locations/admin.py:99 apps/locations/admin.py:282 #: templates/pages/employees.html:106 templates/pages/pharmacies.html:114 -#: templates/pages/pharmacy-detail.html:87 +#: templates/pages/pharmacy-detail.html:89 msgid "Адрес" msgstr "Адреса" #: apps/locations/admin.py:102 apps/locations/admin.py:139 -#: apps/locations/admin.py:354 templates/pages/pharmacy-detail.html:155 +#: apps/locations/admin.py:354 templates/pages/pharmacy-detail.html:157 msgid "Координаты" msgstr "Координати" @@ -941,12 +987,10 @@ msgid "Почта Carbonio" msgstr "" #: apps/locations/admin.py:316 -msgid "" -"Пусто в «Почта Carbonio» — адрес сгенерируется как <префикс " -"организации><номер>@домен. Можно задать вручную." +msgid "Пусто в «Почта Carbonio» — адрес сгенерируется как <префикс организации><номер>@домен. Можно задать вручную." msgstr "" -#: apps/locations/admin.py:376 core/views.py:350 +#: apps/locations/admin.py:376 core/views.py:352 #: templates/pages/structure.html:61 msgid "Сотрудников" msgstr "" @@ -1041,7 +1085,7 @@ msgid "Заведующий аптекой" msgstr "" #: apps/locations/models/pharmacies.py:113 -#: templates/pages/pharmacy-detail.html:90 +#: templates/pages/pharmacy-detail.html:92 msgid "Ответственный менеджер" msgstr "Відповідальний менеджер" @@ -1050,7 +1094,7 @@ msgid "Сотрудник с должностью «Відповідальний msgstr "" #: apps/locations/models/pharmacies.py:119 -#: templates/pages/pharmacy-detail.html:91 +#: templates/pages/pharmacy-detail.html:93 msgid "Куратор" msgstr "Куратор" @@ -1098,9 +1142,7 @@ msgid "Отключён" msgstr "" #: apps/locations/models/pharmacies.py:157 -msgid "" -"Ящик аптеки. Пусто — сгенерируется как <префикс организации><номер>@домен. " -"Можно задать вручную." +msgid "Ящик аптеки. Пусто — сгенерируется как <префикс организации><номер>@домен. Можно задать вручную." msgstr "" #: apps/locations/models/pharmacies.py:160 @@ -1135,7 +1177,7 @@ msgstr "" msgid "Ошибка синхронизации Carbonio" msgstr "" -#: apps/locations/models/pharmacies.py:211 templates/index.html:381 +#: apps/locations/models/pharmacies.py:211 templates/index.html:382 #: templates/pages/dislocation.html:16 templates/pages/pharmacies.html:6 #: templates/pages/timetrack.html:49 msgid "Аптеки" @@ -1146,7 +1188,7 @@ msgid "Такой адрес Carbonio уже используется друго msgstr "" #: apps/locations/models/pharmacies.py:325 -#: templates/pages/pharmacy-detail.html:111 +#: templates/pages/pharmacy-detail.html:113 msgid "Основной" msgstr "Основний" @@ -1202,6 +1244,46 @@ msgstr "" msgid "Журнал синхронизации Carbonio" msgstr "" +#: apps/nextcloud_connector/models.py:20 +msgid "Создание папки" +msgstr "" + +#: apps/nextcloud_connector/models.py:21 +msgid "Обновление ACL" +msgstr "" + +#: apps/nextcloud_connector/models.py:22 +msgid "Пропуск" +msgstr "" + +#: apps/nextcloud_connector/models.py:27 +msgid "Пробный прогон" +msgstr "" + +#: apps/nextcloud_connector/models.py:30 +msgid "Тип сущности" +msgstr "" + +#: apps/nextcloud_connector/models.py:31 +msgid "Ссылка на сущность" +msgstr "" + +#: apps/nextcloud_connector/models.py:32 +msgid "Код отдела или номер аптеки" +msgstr "" + +#: apps/nextcloud_connector/models.py:33 +msgid "Путь Group Folder" +msgstr "" + +#: apps/nextcloud_connector/models.py:39 +msgid "Запись синхронизации Nextcloud" +msgstr "" + +#: apps/nextcloud_connector/models.py:40 +msgid "Журнал синхронизации Nextcloud" +msgstr "" + #: apps/tasks/models.py:25 templates/pages/it-manager.html:322 #: templates/pages/it-manager.html:374 templates/pages/task-detail.html:21 #: templates/pages/tasks.html:68 templates/pages/tasks.html:108 @@ -1295,7 +1377,7 @@ msgstr "" msgid "Відмітив" msgstr "" -#: apps/tasks/models.py:153 +#: apps/tasks/models.py:153 osc/core/models/directory.py:33 msgid "Порядок" msgstr "" @@ -1454,7 +1536,8 @@ msgid "Повна зміна" msgstr "" #: core/admin.py:20 core/models/directories.py:54 -#: core/models/directories.py:116 +#: core/models/directories.py:116 osc/core/models/directory.py:12 +#: osc/core/models/directory.py:23 msgid "Тип справочника" msgstr "" @@ -1485,7 +1568,7 @@ msgid "Записей" msgstr "" #: core/admin.py:144 templates/pages/pharmacy-detail.html:67 -#: templates/pages/pharmacy-detail.html:83 +#: templates/pages/pharmacy-detail.html:85 msgid "Основная информация" msgstr "Основна інформація" @@ -1506,6 +1589,7 @@ msgid "Дерево справочников перестроено" msgstr "" #: core/admin.py:195 core/models/directories.py:119 +#: osc/core/models/directory.py:9 osc/core/models/directory.py:26 #: templates/pages/it-manager.html:821 msgid "Название" msgstr "Назва" @@ -1522,7 +1606,7 @@ msgstr "" msgid "Укажите токен или логин/пароль — в зависимости от типа коннектора" msgstr "" -#: core/admin.py:263 core/models/connector_config.py:39 +#: core/admin.py:263 core/models/connector_config.py:40 msgid "Дополнительные параметры" msgstr "" @@ -1530,55 +1614,57 @@ msgstr "" msgid "Коннектор" msgstr "" -#: core/models/connector_config.py:17 +#: core/models/connector_config.py:18 msgid "Тип коннектора" msgstr "" -#: core/models/connector_config.py:20 +#: core/models/connector_config.py:21 msgid "Включён" msgstr "" -#: core/models/connector_config.py:23 +#: core/models/connector_config.py:24 msgid "Хост" msgstr "" -#: core/models/connector_config.py:24 +#: core/models/connector_config.py:25 msgid "Порт" msgstr "" -#: core/models/connector_config.py:25 +#: core/models/connector_config.py:26 msgid "Использовать SSL" msgstr "" -#: core/models/connector_config.py:31 +#: core/models/connector_config.py:32 msgid "Пароль" msgstr "" -#: core/models/connector_config.py:33 +#: core/models/connector_config.py:34 msgid "Токен / API Key" msgstr "" -#: core/models/connector_config.py:34 +#: core/models/connector_config.py:35 msgid "Bearer-токен или API-ключ, если используется вместо логина/пароля" msgstr "" -#: core/models/connector_config.py:40 +#: core/models/connector_config.py:41 msgid "Специфичные для коннектора настройки в формате JSON" msgstr "" -#: core/models/connector_config.py:46 +#: core/models/connector_config.py:47 msgid "Настройки коннектора" msgstr "" -#: core/models/connector_config.py:47 +#: core/models/connector_config.py:48 osc/core/models/connector_settings.py:33 +#: osc/core/models/connector_settings.py:34 +#: osc/core/models/connector_settings.py:37 msgid "Настройки коннекторов" msgstr "" -#: core/models/connector_config.py:57 +#: core/models/connector_config.py:58 msgid "Хост обязателен для включённого коннектора" msgstr "" -#: core/models/connector_config.py:60 +#: core/models/connector_config.py:61 msgid "Для включённого коннектора необходимо указать токен или логин" msgstr "" @@ -1614,11 +1700,12 @@ msgstr "" msgid "Только для гибкой и кастомной иерархии" msgstr "" -#: core/models/directories.py:55 +#: core/models/directories.py:55 osc/core/models/directory.py:13 msgid "Типы справочников" msgstr "" -#: core/models/directories.py:118 +#: core/models/directories.py:118 osc/core/models/directory.py:8 +#: osc/core/models/directory.py:25 msgid "Код" msgstr "" @@ -1683,181 +1770,414 @@ msgstr "" msgid "Неверная контрольная сумма ИНН" msgstr "" -#: core/views.py:349 +#: core/views.py:351 msgid "Рабочих дней" msgstr "Робочих днів" -#: core/views.py:349 +#: core/views.py:351 msgid "с отметками" msgstr "з відмітками" -#: core/views.py:350 +#: core/views.py:352 msgid "отмечались" msgstr "відмічались" -#: core/views.py:351 +#: core/views.py:353 msgid "Смен" msgstr "Змін" -#: core/views.py:351 +#: core/views.py:353 msgid "за месяц" msgstr "за місяць" -#: core/views.py:352 templates/pages/timetrack.html:62 +#: core/views.py:354 templates/pages/timetrack.html:62 msgid "Незакрытых" msgstr "Незакритих" -#: core/views.py:352 +#: core/views.py:354 msgid "без ухода" msgstr "без виходу" -#: core/views.py:353 +#: core/views.py:355 msgid "Всего часов" msgstr "Всього годин" -#: core/views.py:353 +#: core/views.py:355 msgid "отработано" msgstr "відпрацьовано" -#: templates/index.html:210 +#: osc/apps/employees/models.py:34 +msgid "Логин для входа, совпадает с учётной записью AD" +msgstr "" + +#: osc/apps/employees/models.py:105 +msgid "Логин AD (sAMAccountName)" +msgstr "" + +#: osc/apps/employees/models.py:107 +msgid "AD User DN" +msgstr "" + +#: osc/apps/employees/models.py:151 +msgid "Не может быть раньше даты приёма" +msgstr "" + +#: osc/apps/employees/models.py:153 +msgid "Сотрудник не может быть своим руководителем" +msgstr "" + +#: osc/apps/mattermost_connector/models.py:23 +msgid "Запись синхронизации Mattermost" +msgstr "" + +#: osc/apps/mattermost_connector/models.py:24 +msgid "Журнал синхронизации Mattermost" +msgstr "" + +#: osc/core/models/connector_settings.py:10 +msgid "Требовать смену пароля при создании" +msgstr "" + +#: osc/core/models/connector_settings.py:12 +msgid "Новым учётным записям в AD выставляется флаг «сменить пароль при следующем входе». Если выключено — выданный пароль действует сразу, без принудительной смены." +msgstr "" + +#: osc/core/models/connector_settings.py:17 +msgid "Пароль не имеет срока действия" +msgstr "" + +#: osc/core/models/connector_settings.py:19 +msgid "Новым и существующим учётным записям в AD выставляется флаг «Password never expires». Если выключено — действует обычная парольная политика домена." +msgstr "" + +#: osc/core/models/connector_settings.py:24 +msgid "Команда Mattermost по умолчанию" +msgstr "" + +#: osc/core/models/connector_settings.py:25 +msgid "Сотрудники автоматически добавляются в эту команду при синхронизации с Mattermost." +msgstr "" + +#: osc/core/models/connector_settings.py:28 +msgid "Каналы по умолчанию" +msgstr "" + +#: osc/core/models/connector_settings.py:29 +msgid "Сотрудники автоматически добавляются в эти каналы при синхронизации с Mattermost." +msgstr "" + +#: osc/core/models/directory.py:29 +msgid "Родительский элемент" +msgstr "" + +#: osc/core/models/directory.py:30 +msgid "Должен принадлежать тому же типу справочника" +msgstr "" + +#: osc/core/models/directory.py:35 +msgid "OU в Active Directory" +msgstr "" + +#: osc/core/models/directory.py:37 +msgid "Используется только для справочника отделов (department): сотрудники этого отдела создаются/переносятся в указанную OU. Например: OU=IT,OU=OL_Users,DC=ol,DC=local. Если не задано — используется AD_USERS_OU." +msgstr "" + +#: osc/core/models/directory.py:44 templates/pages/dashboard.html:163 +msgid "Справочник" +msgstr "Довідник" + +#: osc/core/models/directory.py:45 +msgid "Справочники" +msgstr "" + +#: osc/core/models/directory.py:56 +msgid "Элемент не может быть родителем самому себе" +msgstr "" + +#: osc/core/models/directory.py:58 +msgid "Родитель должен принадлежать тому же типу справочника" +msgstr "" + +#: osc/core/models/directory.py:62 +msgid "Циклическая вложенность недопустима" +msgstr "" + +#: osc/core/models/site_settings.py:9 +msgid "Название портала" +msgstr "" + +#: osc/core/models/site_settings.py:10 +msgid "Логотип" +msgstr "" + +#: osc/core/models/site_settings.py:13 osc/core/models/site_settings.py:14 +#: osc/core/models/site_settings.py:17 +msgid "Настройки сайта" +msgstr "" + +#: osc/core/utils/validators.py:16 +msgid "Введите корректный украинский номер телефона, например +380501234567" +msgstr "" + +#: osc/core/utils/validators.py:24 +msgid "Дата рождения должна быть в прошлом" +msgstr "" + +#: osc/core/utils/validators.py:27 +msgid "Сотруднику должно быть не менее 16 лет" +msgstr "" + +#: osc/core/utils/validators.py:29 +msgid "Проверьте дату рождения — возраст превышает 100 лет" +msgstr "" + +#: osc/core/utils/validators.py:35 +msgid "ИНН должен состоять из 10 цифр" +msgstr "" + +#: osc/core/utils/validators.py:38 +msgid "Некорректный ИНН: неверная контрольная сумма" +msgstr "" + +#: osc/templates/admin/employees/employee/delete_confirmation.html:10 +#, python-format +msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:" +msgstr "" + +#: osc/templates/admin/employees/employee/delete_confirmation.html:17 +msgid "Objects" +msgstr "" + +#: templates/index.html:211 msgid "Сеть аптек" msgstr "Мережа аптек" -#: templates/index.html:211 +#: templates/index.html:212 msgid "Портал пользователя" msgstr "Портал користувача" -#: templates/index.html:220 +#: templates/index.html:221 msgid "Главное меню" msgstr "Головне меню" -#: templates/index.html:229 templates/index.html:650 +#: templates/index.html:230 templates/index.html:654 msgid "Главная" msgstr "Головна" -#: templates/index.html:239 templates/pages/news.html:6 +#: templates/index.html:240 templates/pages/news.html:6 msgid "Новости" msgstr "Новини" -#: templates/index.html:260 templates/index.html:660 +#: templates/index.html:261 templates/index.html:664 #: templates/pages/dashboard.html:145 templates/pages/task-detail.html:10 msgid "Задачи" msgstr "Задачі" -#: templates/index.html:268 templates/pages/dislocation.html:8 +#: templates/index.html:269 templates/pages/dislocation.html:8 msgid "Дислокация" msgstr "Дислокація" -#: templates/index.html:277 templates/pages/dashboard.html:135 +#: templates/index.html:278 templates/pages/dashboard.html:135 +#: templates/pages/documents.html:5 templates/pages/pharmacy-detail.html:75 msgid "Документы" msgstr "Документи" -#: templates/index.html:287 templates/pages/dashboard.html:125 +#: templates/index.html:288 templates/pages/dashboard.html:125 msgid "Электронная почта" msgstr "Електронна пошта" -#: templates/index.html:296 templates/index.html:680 +#: templates/index.html:297 templates/index.html:684 +#: templates/pages/chat.html:5 msgid "Чат" msgstr "Чат" -#: templates/index.html:305 templates/pages/dashboard.html:154 +#: templates/index.html:306 templates/pages/dashboard.html:154 msgid "Календарь" msgstr "Календар" -#: templates/index.html:314 +#: templates/index.html:315 msgid "Базы данных" msgstr "Бази даних" -#: templates/index.html:323 +#: templates/index.html:324 msgid "Отчёты" msgstr "Звіти" -#: templates/index.html:333 +#: templates/index.html:334 msgid "Закупки" msgstr "Закупівлі" -#: templates/index.html:342 templates/pages/dashboard.html:183 +#: templates/index.html:343 templates/pages/dashboard.html:183 msgid "HR портал" msgstr "HR портал" -#: templates/index.html:352 templates/index.html:611 +#: templates/index.html:353 templates/index.html:612 #: templates/pages/settings.html:5 msgid "Настройки" msgstr "Налаштування" -#: templates/index.html:360 +#: templates/index.html:361 msgid "Управление" msgstr "Управління" -#: templates/index.html:371 templates/pages/structure.html:7 +#: templates/index.html:372 templates/pages/structure.html:7 msgid "Структура" msgstr "Структура" -#: templates/index.html:390 +#: templates/index.html:391 msgid "Коммунальные услуги" msgstr "Комунальні послуги" -#: templates/index.html:401 +#: templates/index.html:402 msgid "Рекрутинг" msgstr "Рекрутинг" -#: templates/index.html:410 templates/pages/hr-portal.html:292 +#: templates/index.html:411 templates/pages/hr-portal.html:292 #: templates/pages/timetrack.html:7 msgid "Учёт рабочего времени" msgstr "Облік робочого часу" -#: templates/index.html:418 +#: templates/index.html:419 msgid "Поддержка" msgstr "Підтримка" -#: templates/index.html:428 templates/pages/hr-portal.html:284 +#: templates/index.html:429 templates/pages/hr-portal.html:284 msgid "Справка" msgstr "Довідка" -#: templates/index.html:438 templates/pages/dashboard.html:193 +#: templates/index.html:439 templates/pages/dashboard.html:193 msgid "Поддержка IT" msgstr "Підтримка IT" -#: templates/index.html:448 templates/pages/it-manager.html:6 +#: templates/index.html:449 templates/pages/it-manager.html:6 msgid "IT-отдел" msgstr "IT-відділ" -#: templates/index.html:460 +#: templates/index.html:461 msgid "Active Directory" msgstr "Active Directory" -#: templates/index.html:494 templates/pages/employees.html:32 +#: templates/index.html:495 templates/pages/employees.html:32 msgid "Поиск..." msgstr "Пошук..." -#: templates/index.html:511 +#: templates/index.html:512 msgid "Язык" msgstr "Мова" -#: templates/index.html:607 templates/pages/hr-portal.html:199 +#: templates/index.html:608 templates/pages/hr-portal.html:199 msgid "Профиль" msgstr "Профіль" -#: templates/index.html:615 +#: templates/index.html:616 msgid "Помощь" msgstr "Допомога" -#: templates/index.html:620 +#: templates/index.html:623 msgid "Выход" msgstr "Вихід" -#: templates/index.html:633 +#: templates/index.html:637 msgid "Загрузка..." msgstr "Завантаження..." -#: templates/index.html:671 +#: templates/index.html:675 msgid "Люди" msgstr "" -#: templates/index.html:687 +#: templates/index.html:691 msgid "Меню" msgstr "" +#: templates/pages/chat.html:6 +msgid "Внутренний корпоративный мессенджер (Mattermost)" +msgstr "Внутрішній корпоративний месенджер (Mattermost)" + +#: templates/pages/chat.html:15 +msgid "Поиск по всем сообщениям..." +msgstr "Пошук по всіх повідомленнях..." + +#: templates/pages/chat.html:17 +msgid "Искать" +msgstr "Шукати" + +#: templates/pages/chat.html:31 +msgid "Личные сообщения" +msgstr "Особисті повідомлення" + +#: templates/pages/chat.html:32 templates/pages/chat.html:111 +msgid "Новое сообщение" +msgstr "Нове повідомлення" + +#: templates/pages/chat.html:37 templates/pages/chat.html:44 +#: templates/pages/documents.html:24 templates/pages/pharmacy-detail.html:337 +msgid "Загрузка…" +msgstr "Завантаження…" + +#: templates/pages/chat.html:41 +msgid "Каналы" +msgstr "Канали" + +#: templates/pages/chat.html:51 +msgid "Показывать закрытые разговоры" +msgstr "Показувати закриті розмови" + +#: templates/pages/chat.html:59 +msgid "Выберите канал слева" +msgstr "Оберіть канал зліва" + +#: templates/pages/chat.html:69 templates/pages/chat.html:96 +msgid "Прикрепить файл" +msgstr "Прикріпити файл" + +#: templates/pages/chat.html:72 +msgid "Написать сообщение..." +msgstr "Написати повідомлення..." + +#: templates/pages/chat.html:87 +msgid "Обсуждение" +msgstr "Обговорення" + +#: templates/pages/chat.html:99 +msgid "Ответить в обсуждении..." +msgstr "Відповісти в обговоренні..." + +#: templates/pages/chat.html:117 +msgid "Поиск коллег..." +msgstr "Пошук колег..." + +#: templates/pages/chat.html:119 +msgid "Начать разговор" +msgstr "Почати розмову" + +#: templates/pages/chat.html:130 +msgid "Ваша учётная запись ещё не синхронизирована с Mattermost" +msgstr "Ваш акаунт ще не синхронізовано з Mattermost" + +#: templates/pages/chat.html:132 +msgid "Нажмите кнопку ниже, чтобы создать или привязать вашу учётную запись в Mattermost." +msgstr "Натисніть кнопку нижче, щоб створити або прив'язати ваш акаунт у Mattermost." + +#: templates/pages/chat.html:135 +msgid "Синхронизировать сейчас" +msgstr "Синхронізувати зараз" + +#: templates/pages/chat.html:144 +msgid "Не удалось получить доступ к Mattermost" +msgstr "Не вдалося отримати доступ до Mattermost" + +#: templates/pages/chat.html:146 +msgid "Обратитесь в IT-отдел — возможно, отключена выдача Personal Access Token на сервере Mattermost." +msgstr "Зверніться до IT-відділу — можливо, вимкнено видачу Personal Access Token на сервері Mattermost." + +#: templates/pages/chat.html:155 +msgid "Чат ещё не подключён" +msgstr "Чат ще не підключено" + +#: templates/pages/chat.html:157 +msgid "Укажите публичный URL Mattermost (поле public_url в «Дополнительные параметры» коннектора Mattermost в админке) — и он появится здесь." +msgstr "Вкажіть публічну URL-адресу Mattermost (поле public_url у «Додаткові параметри» коннектора Mattermost в адмінці) — і він з'явиться тут." + #: templates/pages/dashboard.html:7 msgid "Добрый день" msgstr "Доброго дня" @@ -1943,10 +2263,6 @@ msgstr "Швидкий доступ" msgid "Полезные ссылки и инструменты" msgstr "Корисні посилання та інструменти" -#: templates/pages/dashboard.html:163 -msgid "Справочник" -msgstr "Довідник" - #: templates/pages/dislocation.html:3 msgid "адрес не указан" msgstr "адресу не вказано" @@ -2040,7 +2356,7 @@ msgstr "Карта" #: templates/pages/dislocation.html:118 templates/pages/pharmacies.html:115 #: templates/pages/pharmacy-detail.html:49 -#: templates/pages/pharmacy-detail.html:139 +#: templates/pages/pharmacy-detail.html:141 msgid "Заведующий" msgstr "Завідуючий" @@ -2071,7 +2387,7 @@ msgid "Неактивна" msgstr "Неактивна" #: templates/pages/dislocation.html:208 -#: templates/pages/pharmacy-detail.html:147 +#: templates/pages/pharmacy-detail.html:149 msgid "В этой аптеке пока нет активных сотрудников" msgstr "У цій аптеці поки немає активних співробітників" @@ -2143,70 +2459,78 @@ msgstr "Показано" msgid "Нет записей" msgstr "Немає записів" -#: templates/pages/employee-detail.html:21 templates/pages/news-detail.html:17 +#: templates/pages/documents.html:6 +msgid "Файловое хранилище: общие документы, обучение, отделы" +msgstr "" + +#: templates/pages/documents.html:29 +msgid "Нет доступных разделов документов." +msgstr "" + +#: templates/pages/employee-detail.html:28 templates/pages/news-detail.html:17 #: templates/pages/task-detail.html:41 templates/pages/tasks.html:127 msgid "Редактировать" msgstr "Редагувати" -#: templates/pages/employee-detail.html:40 templates/pages/employees.html:150 +#: templates/pages/employee-detail.html:47 templates/pages/employees.html:150 msgid "Не активный" msgstr "Не активний" -#: templates/pages/employee-detail.html:42 +#: templates/pages/employee-detail.html:49 msgid "Испытательный срок" msgstr "Випробувальний термін" -#: templates/pages/employee-detail.html:63 +#: templates/pages/employee-detail.html:70 msgid "Рабочий email" msgstr "Робочий email" -#: templates/pages/employee-detail.html:71 +#: templates/pages/employee-detail.html:78 msgid "Внутренний номер" msgstr "Внутрішній номер" -#: templates/pages/employee-detail.html:100 +#: templates/pages/employee-detail.html:107 msgid "Подчинённых" msgstr "Підлеглих" -#: templates/pages/employee-detail.html:105 templates/pages/hr-portal.html:219 +#: templates/pages/employee-detail.html:112 templates/pages/hr-portal.html:219 msgid "Дата приёма" msgstr "Дата прийняття" -#: templates/pages/employee-detail.html:132 +#: templates/pages/employee-detail.html:139 msgid "Экстренный контакт" msgstr "Екстрений контакт" -#: templates/pages/employee-detail.html:141 templates/pages/settings.html:17 +#: templates/pages/employee-detail.html:148 templates/pages/settings.html:17 msgid "Интеграции" msgstr "Інтеграції" -#: templates/pages/employee-detail.html:145 #: templates/pages/employee-detail.html:152 +#: templates/pages/employee-detail.html:159 msgid "Синхронизировано" msgstr "Синхронізовано" -#: templates/pages/employee-detail.html:147 #: templates/pages/employee-detail.html:154 +#: templates/pages/employee-detail.html:161 msgid "Отключено" msgstr "Вимкнено" -#: templates/pages/employee-detail.html:155 +#: templates/pages/employee-detail.html:162 msgid "Не синхронизировано" msgstr "Не синхронізовано" -#: templates/pages/employee-detail.html:182 +#: templates/pages/employee-detail.html:189 msgid "Задач пока нет" msgstr "Задач поки немає" -#: templates/pages/employee-detail.html:196 +#: templates/pages/employee-detail.html:203 msgid "Цепочка руководства" msgstr "Ланцюжок керівництва" -#: templates/pages/employee-detail.html:229 +#: templates/pages/employee-detail.html:236 msgid "Последнее посещение" msgstr "Останнє відвідування" -#: templates/pages/employee-detail.html:239 +#: templates/pages/employee-detail.html:246 msgid "Группы доступа" msgstr "Групи доступу" @@ -2472,8 +2796,7 @@ msgstr "Нова заявка на найм" #: templates/pages/hr-portal.html:416 msgid "Сразу создаёт личный учётный запис кандидата на срок испытания." -msgstr "" -"Одразу створює особистий обліковий запис кандидата на термін випробування." +msgstr "Одразу створює особистий обліковий запис кандидата на термін випробування." #: templates/pages/hr-portal.html:422 msgid "Фамилия " @@ -2535,7 +2858,7 @@ msgstr "Посада / локація" msgid "Испытание до" msgstr "Випробування до" -#: templates/pages/hr-portal.html:537 templates/pages/pharmacy-detail.html:300 +#: templates/pages/hr-portal.html:537 templates/pages/pharmacy-detail.html:302 msgid "Подал" msgstr "Подав" @@ -2600,13 +2923,13 @@ msgid "Всего единиц" msgstr "Всього одиниць" #: templates/pages/it-manager.html:35 templates/pages/it-manager.html:259 -#: templates/pages/pharmacy-detail.html:211 +#: templates/pages/pharmacy-detail.html:213 msgid "На складе" msgstr "На складі" #: templates/pages/it-manager.html:39 templates/pages/it-manager.html:236 -#: templates/pages/it-manager.html:260 templates/pages/pharmacy-detail.html:196 -#: templates/pages/pharmacy-detail.html:212 +#: templates/pages/it-manager.html:260 templates/pages/pharmacy-detail.html:198 +#: templates/pages/pharmacy-detail.html:214 msgid "Выдано" msgstr "Видано" @@ -2647,9 +2970,7 @@ msgid "По одному в строку — вставьте список се msgstr "По одному в рядку — вставте список серійників, наприклад" #: templates/pages/it-manager.html:96 -msgid "" -"Сколько серийников — столько единиц будет создано. Дубликаты и уже имеющиеся " -"пропускаются." +msgid "Сколько серийников — столько единиц будет создано. Дубликаты и уже имеющиеся пропускаются." msgstr "" #: templates/pages/it-manager.html:100 templates/pages/it-manager.html:670 @@ -2761,7 +3082,7 @@ msgstr "Тип / Бренд / Модель" msgid "С/н · Инв. №" msgstr "С/н · Інв. №" -#: templates/pages/it-manager.html:261 templates/pages/pharmacy-detail.html:213 +#: templates/pages/it-manager.html:261 templates/pages/pharmacy-detail.html:215 msgid "В ремонте" msgstr "В ремонті" @@ -2826,7 +3147,7 @@ msgstr "Виконавець" #: templates/pages/it-manager.html:349 templates/pages/it-manager.html:486 #: templates/pages/it-manager.html:555 templates/pages/it-manager.html:1098 -#: templates/pages/pharmacy-detail.html:297 +#: templates/pages/pharmacy-detail.html:299 msgid "Дата" msgstr "Дата" @@ -3007,7 +3328,7 @@ msgid "Номер договора" msgstr "Номер договору" #: templates/pages/it-manager.html:895 templates/pages/it-manager.html:970 -#: templates/pages/pharmacy-detail.html:242 +#: templates/pages/pharmacy-detail.html:244 msgid "Тип услуги" msgstr "Тип послуги" @@ -3051,7 +3372,7 @@ msgstr "По одній IP-адресі на рядок" msgid "Провайдер / Локация" msgstr "Провайдер / Локація" -#: templates/pages/it-manager.html:971 templates/pages/pharmacy-detail.html:244 +#: templates/pages/it-manager.html:971 templates/pages/pharmacy-detail.html:246 msgid "Скорость" msgstr "Швидкість" @@ -3120,7 +3441,7 @@ msgid "Это необратимо." msgstr "Це незворотньо." #: templates/pages/news-detail.html:24 templates/pages/task-detail.html:48 -#: templates/pages/tasks.html:135 +#: templates/pages/tasks.html:135 templates/partials/pharmacy-documents.html:51 msgid "Удалить" msgstr "Видалити" @@ -3251,83 +3572,83 @@ msgstr "Інтернет-провайдер" msgid "Коммунальный отдел" msgstr "Комунальний відділ" -#: templates/pages/pharmacy-detail.html:86 +#: templates/pages/pharmacy-detail.html:88 msgid "Регион" msgstr "Регіон" -#: templates/pages/pharmacy-detail.html:88 +#: templates/pages/pharmacy-detail.html:90 msgid "Категория" msgstr "Категорія" -#: templates/pages/pharmacy-detail.html:89 +#: templates/pages/pharmacy-detail.html:91 msgid "Категория НДС" msgstr "Категорія ПДВ" -#: templates/pages/pharmacy-detail.html:92 +#: templates/pages/pharmacy-detail.html:94 msgid "Количество фармацевтов (штат)" msgstr "Кількість фармацевтів (штат)" -#: templates/pages/pharmacy-detail.html:119 +#: templates/pages/pharmacy-detail.html:121 msgid "Телефоны не указаны" msgstr "Телефони не вказані" -#: templates/pages/pharmacy-detail.html:178 +#: templates/pages/pharmacy-detail.html:180 msgid "Создано:" msgstr "Створено:" -#: templates/pages/pharmacy-detail.html:179 +#: templates/pages/pharmacy-detail.html:181 msgid "Обновлено:" msgstr "Оновлено:" -#: templates/pages/pharmacy-detail.html:194 +#: templates/pages/pharmacy-detail.html:196 msgid "Серийный / инв. №" msgstr "Серійний / інв. №" -#: templates/pages/pharmacy-detail.html:223 +#: templates/pages/pharmacy-detail.html:225 msgid "За этой аптекой не закреплено оборудование" msgstr "За цією аптекою не закріплено обладнання" -#: templates/pages/pharmacy-detail.html:229 +#: templates/pages/pharmacy-detail.html:231 msgid "Управлять оборудованием в IT-отделе" msgstr "Керувати обладнанням в IT-відділі" -#: templates/pages/pharmacy-detail.html:241 +#: templates/pages/pharmacy-detail.html:243 msgid "Провайдер / договор" msgstr "Провайдер / договір" -#: templates/pages/pharmacy-detail.html:278 +#: templates/pages/pharmacy-detail.html:280 msgid "Договоров с провайдерами для этой аптеки не найдено" msgstr "Договорів з провайдерами для цієї аптеки не знайдено" -#: templates/pages/pharmacy-detail.html:284 +#: templates/pages/pharmacy-detail.html:286 msgid "Управлять договорами в IT-отделе" msgstr "Керувати договорами в IT-відділі" -#: templates/pages/pharmacy-detail.html:296 +#: templates/pages/pharmacy-detail.html:298 msgid "Тип счётчика" msgstr "Тип лічильника" -#: templates/pages/pharmacy-detail.html:298 +#: templates/pages/pharmacy-detail.html:300 msgid "Показания" msgstr "Показання" -#: templates/pages/pharmacy-detail.html:299 +#: templates/pages/pharmacy-detail.html:301 msgid "Расход" msgstr "Витрата" -#: templates/pages/pharmacy-detail.html:301 +#: templates/pages/pharmacy-detail.html:303 msgid "Комментарий" msgstr "Коментар" -#: templates/pages/pharmacy-detail.html:312 +#: templates/pages/pharmacy-detail.html:314 msgid "Показания меньше предыдущего — проверьте" msgstr "Показання менше за попереднє — перевірте" -#: templates/pages/pharmacy-detail.html:322 +#: templates/pages/pharmacy-detail.html:324 msgid "Показаний счётчиков для этой аптеки ещё не подавали" msgstr "Показань лічильників для цієї аптеки ще не подавали" -#: templates/pages/pharmacy-detail.html:327 +#: templates/pages/pharmacy-detail.html:329 msgid "Подать показания / все показания" msgstr "Подати показання / усі показання" @@ -3360,12 +3681,8 @@ msgid "Количество записей в таблицах по умолча msgstr "Кількість записів у таблицях за замовчуванням" #: templates/pages/profile.html:100 -msgid "" -"Применяется ко всем таблицам портала, если для конкретной таблицы размер не " -"выбран вручную." -msgstr "" -"Застосовується до всіх таблиць порталу, якщо для конкретної таблиці розмір " -"не вибрано вручну." +msgid "Применяется ко всем таблицам портала, если для конкретной таблицы размер не выбран вручную." +msgstr "Застосовується до всіх таблиць порталу, якщо для конкретної таблиці розмір не вибрано вручну." #: templates/pages/settings.html:6 msgid "Конфигурация портала" @@ -3542,3 +3859,34 @@ msgstr "Немає відміток робочого часу за" #: templates/pages/timetrack.html:92 msgid "сотрудников" msgstr "співробітників" + +#: templates/partials/documents-browser.html:28 +#: templates/partials/pharmacy-documents.html:18 +msgid "Файловое хранилище пока не настроено." +msgstr "" + +#: templates/partials/documents-browser.html:32 +#: templates/partials/pharmacy-documents.html:22 +msgid "Не удалось получить список документов." +msgstr "" + +#: templates/partials/documents-browser.html:61 +msgid "В этой папке пока нет файлов." +msgstr "" + +#: templates/partials/documents-browser.html:74 +#: templates/partials/pharmacy-documents.html:76 +msgid "Загрузить" +msgstr "" + +#: templates/partials/pharmacy-documents.html:4 +msgid "Документы аптеки" +msgstr "" + +#: templates/partials/pharmacy-documents.html:48 +msgid "Удалить файл?" +msgstr "" + +#: templates/partials/pharmacy-documents.html:63 +msgid "В папке аптеки пока нет файлов." +msgstr "" diff --git a/locale/uk/LC_MESSAGES/djangojs.mo b/locale/uk/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..5c804104b0795cc28ed3429f5286a2228eb7dbec GIT binary patch literal 2235 zcmb7^OKcle6o#h|3Yd3+1>&Jo5G@g!){_R2PBNixG6@Ddj+~?j7Dz)f7$bKajVB1C zE)o|}P%1?#&@5035`wjp#`PqjMo28Wyq6^l1X-|V#}fW?$HC(`0y@^6&-cuE-pBdn zP|xQYo<}jB!1xj4NsQ6~yzu-A_JF^E&w#&!4}*!@H0?3)Dezu!0DJ(nK?9rtPkY@GtN+_&kUtInOsC zWcyk0ac~LbJgKZ7rVi90nd1)c^+zz;#Ty9pi!cfhB?p1UF*1zG+I z_y|}6xvnLU^IQcv&u>74&^EvWAnWkMI!Ifs9nbl>1LJP>FM9Dhb4~335C;3Z2ZPrG z?z993%2)omHm(b4c0S^gT-L;=a#5Za-{aR5>lm9P7e!4p#I;Bu7d5d8!8N7V5L=?Q zv-oW!+k$LaR^>%f=Am2?TblSngz|#80rR>huE2CtY=}AwOrF;X@irjd7EQUtw(D|P z*>6K9>~goCMI)9_%K~}99A3Go|7p_{YslcdxZX-Ij56-dusa?~ZQ{2kKT)NHaz#az zRpJ$jGT{Z>mG0FSoBSn&a+6n@U{U8+Y_*gERH$CM70wdft7n z$Ts?@6SyY5Zm05kHm8rK=;fT5O+WueZo*DvoJyci`;J#BIYHSsX>2Bwp@~%1rXf3< zN@q@`Mo07Z)YLFky~2W1aP?`|IcriTH8DQJnG9tzr%J_RWxvqYK?d1$)^4Y597`rf z%3k1l2=~D}@(JAcgX8lhr|1pR>^qKMaRX~+dQ2Z^>v39dyS{FFv*o#>S1@VdtzwXv zEG_s>NgpfwXDcRo^J-eL`UffcYdz=Dvt*EEQId`vAvH_#)M!tWbQp7kUV;vs>}N1+ zQD57DhAismY2-bbq#-i;=-j!M|0E5Q(ccS)Mwi2u2~tS1!R~a}dZEMr$==vk__L7T zKlvk`W%N@oN9Z%@MDJii6PHBTZa#d9YutF6I9uQGy%Dvj#l(*p_mCTMCEk8^j~=?0 z{1`VG?dPhx3Tu3@aV&8SRy(g%s|oEr)9bCvh$|SK=9o)vCwuk(`wraF-9am9cU;v{ zQ0XmsPz_vO#!YQv3Aa0ZKv0vP#cn9{qSmzgWglyK5%Hne*`gYqtEp7bq~cwyTSe_C l)^MLFyrVb`D)H85wQ)Ed9YWQjH>0K%ZFOhUl9$^}>u;cv^GE;y literal 0 HcmV?d00001 diff --git a/locale/uk/LC_MESSAGES/djangojs.po b/locale/uk/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..355a370 --- /dev/null +++ b/locale/uk/LC_MESSAGES/djangojs.po @@ -0,0 +1,100 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "Не вдалося завантажити канали" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-28 21:52+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" +#: static/assets/js/chat.js:310 +msgid "Не удалось загрузить каналы" +msgstr "Не вдалося завантажити канали" + +#: static/assets/js/chat.js:402 +msgid "Нет каналов" +msgstr "Немає каналів" + +#: static/assets/js/chat.js:423 +msgid "Нет сообщений" +msgstr "Немає повідомлень" + +#: static/assets/js/chat.js:432 +msgid "Групповой разговор" +msgstr "Групова розмова" + +#: static/assets/js/chat.js:549 static/assets/js/chat.js:952 +msgid "Загрузка…" +msgstr "Завантаження…" + +#: static/assets/js/chat.js:561 +msgid "Не удалось загрузить сообщения" +msgstr "Не вдалося завантажити повідомлення" + +#: static/assets/js/chat.js:611 +msgid "Личное" +msgstr "Особисте" + +#: static/assets/js/chat.js:629 +msgid "Поиск…" +msgstr "Пошук…" + +#: static/assets/js/chat.js:650 +msgid "Не удалось выполнить поиск" +msgstr "Не вдалося виконати пошук" + +#: static/assets/js/chat.js:663 +msgid "Найдено:" +msgstr "Знайдено:" + +#: static/assets/js/chat.js:666 +msgid "Закрыть поиск" +msgstr "Закрити пошук" + +#: static/assets/js/chat.js:676 +msgid "Ничего не найдено" +msgstr "Нічого не знайдено" + +#: static/assets/js/chat.js:718 +msgid "бот" +msgstr "бот" + +#: static/assets/js/chat.js:743 +msgid "Вы" +msgstr "Ви" + +#: static/assets/js/chat.js:781 +msgid "Реакция" +msgstr "Реакція" + +#: static/assets/js/chat.js:790 static/assets/js/chat.js:1002 +msgid "Ответов:" +msgstr "Відповідей:" + +#: static/assets/js/chat.js:790 +msgid "Ответить" +msgstr "Відповісти" + +#: static/assets/js/chat.js:964 +msgid "Не удалось загрузить обсуждение" +msgstr "Не вдалося завантажити обговорення" + +#: static/assets/js/chat.js:1108 +msgid "Никого не найдено" +msgstr "Нікого не знайдено" + +#: static/assets/js/chat.js:1204 +msgid "Новое сообщение" +msgstr "Нове повідомлення" diff --git a/static/assets/js/chat.js b/static/assets/js/chat.js index 70559bc..8e47fd9 100644 --- a/static/assets/js/chat.js +++ b/static/assets/js/chat.js @@ -1,3 +1,7 @@ +// Переклади для JS приходять із JavaScriptCatalog (/jsi18n/). Якщо каталог не +// підвантажився — не падаємо, показуємо базові (російські) рядки. +if (typeof window.gettext !== 'function') { window.gettext = function (s) { return s; }; } + var CHAT_QUICK_EMOJIS = [ ['👍', 'thumbsup'], ['❤️', 'heart'], ['😂', 'joy'], ['😮', 'open_mouth'], ['😢', 'cry'], ['🙏', 'pray'], @@ -303,7 +307,7 @@ function chatLoadChannels() { }).catch(function (e) { console.error(e); var el = document.getElementById('chat-channel-list'); - if (el) el.innerHTML = '

Не вдалося завантажити канали
'; + if (el) el.innerHTML = '
' + gettext('Не удалось загрузить каналы') + '
'; }); } @@ -395,7 +399,7 @@ function chatRenderChannelList() { }); if (!list.length) { - el.innerHTML = '
Немає каналів
'; + el.innerHTML = '
' + gettext('Нет каналов') + '
'; return; } @@ -416,7 +420,7 @@ function chatRenderDmList() { }); if (!list.length) { - el.innerHTML = '
Немає повідомлень
'; + el.innerHTML = '
' + gettext('Нет сообщений') + '
'; return; } @@ -425,7 +429,7 @@ function chatRenderDmList() { var otherId = chatDmOtherUserId[ch.id]; var isBot = ch.type === 'D' && otherId && chatUserIsBot[otherId]; var row = chatBuildChannelRow(ch.id, chatDmLabels[ch.id] || '…', - ch.type === 'G' ? 'Групова розмова' : '', {avatar: true, bot: isBot}); + ch.type === 'G' ? gettext('Групповой разговор') : '', {avatar: true, bot: isBot}); el.appendChild(row); // Якщо співрозмовник ЛС уже відомий — одразу показати його аватар. if (ch.type === 'D' && otherId) { @@ -542,7 +546,7 @@ function chatSelectChannel(channelId) { chatRenderComposerFileChips('chat-composer-files', chatComposerFileIds); var messagesEl = document.getElementById('chat-messages'); - if (messagesEl) messagesEl.innerHTML = '
Завантаження…
'; + if (messagesEl) messagesEl.innerHTML = '
' + gettext('Загрузка…') + '
'; chatRenderedPostIds = {}; chatApiFetch('/channels/' + channelId + '/posts?per_page=30').then(function (data) { @@ -554,7 +558,7 @@ function chatSelectChannel(channelId) { }); }).catch(function (e) { console.error(e); - if (messagesEl) messagesEl.innerHTML = '
Не вдалося завантажити повідомлення
'; + if (messagesEl) messagesEl.innerHTML = '
' + gettext('Не удалось загрузить сообщения') + '
'; }); } @@ -604,7 +608,7 @@ function chatSearchChannelLabel(channelId) { var ch = chatFindChannel(channelId); if (!ch) return ''; if (ch.type === 'O' || ch.type === 'P') return '#' + ch.display_name; - return chatDmLabels[ch.id] || 'Особисте'; + return chatDmLabels[ch.id] || gettext('Личное'); } function chatSearchMessages(terms) { @@ -622,7 +626,7 @@ function chatSearchMessages(terms) { resultsEl.style.display = 'flex'; if (messagesEl) messagesEl.style.display = 'none'; - resultsEl.innerHTML = '
Пошук…
'; + resultsEl.innerHTML = '
' + gettext('Поиск…') + '
'; var body = JSON.stringify({terms: terms, is_or_search: false, per_page: 30}); var merged = {}; // id -> post (дедуплікація між командами) @@ -643,7 +647,7 @@ function chatSearchMessages(terms) { }); }).catch(function (e) { console.error(e); - resultsEl.innerHTML = '
Не вдалося виконати пошук
'; + resultsEl.innerHTML = '
' + gettext('Не удалось выполнить поиск') + '
'; }); } @@ -656,10 +660,10 @@ function chatRenderSearchResults(posts) { head.style.cssText = 'display:flex; align-items:center; justify-content:space-between; margin-bottom:0.25rem;'; var title = document.createElement('span'); title.style.cssText = 'font-size:0.75rem; color:var(--color-muted-foreground);'; - title.textContent = 'Знайдено: ' + posts.length; + title.textContent = gettext('Найдено:') + ' ' + posts.length; var closeBtn = document.createElement('button'); closeBtn.type = 'button'; - closeBtn.textContent = 'Закрити пошук'; + closeBtn.textContent = gettext('Закрыть поиск'); closeBtn.style.cssText = 'background:none; border:none; cursor:pointer; font-size:0.75rem; color:var(--color-primary);'; closeBtn.onclick = chatCloseSearch; head.appendChild(title); @@ -669,7 +673,7 @@ function chatRenderSearchResults(posts) { if (!posts.length) { var none = document.createElement('div'); none.style.cssText = 'text-align:center; font-size:0.8125rem; color:var(--color-muted-foreground); padding:1rem;'; - none.textContent = 'Нічого не знайдено'; + none.textContent = gettext('Ничего не найдено'); el.appendChild(none); return; } @@ -711,7 +715,7 @@ function chatPostIsBot(post) { function chatBotBadge() { var b = document.createElement('span'); - b.textContent = 'бот'; + b.textContent = gettext('бот'); b.style.cssText = 'font-size:0.5625rem; font-weight:700; letter-spacing:0.03em; text-transform:uppercase; color:var(--color-muted-foreground); background:var(--color-muted); border:1px solid var(--color-border); border-radius:0.25rem; padding:0.0625rem 0.25rem; line-height:1.2;'; return b; } @@ -736,7 +740,7 @@ function chatBuildMessageEl(post, context) { meta.style.cssText = 'display:flex; align-items:baseline; gap:0.5rem; margin-bottom:0.25rem;' + (isMine ? ' flex-direction:row-reverse;' : ''); var nameEl = document.createElement('span'); nameEl.style.cssText = 'font-size:0.8125rem; font-weight:600; color:var(--color-foreground);'; - nameEl.textContent = isMine ? 'Ви' : senderName; + nameEl.textContent = isMine ? gettext('Вы') : senderName; var timeEl = document.createElement('span'); timeEl.style.cssText = 'font-size:0.6875rem; color:var(--color-muted-foreground);'; timeEl.textContent = post.create_at ? new Date(post.create_at).toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'}) : ''; @@ -774,7 +778,7 @@ function chatBuildMessageEl(post, context) { var reactBtn = document.createElement('button'); reactBtn.type = 'button'; reactBtn.style.cssText = 'background:none; border:none; cursor:pointer; font-size:0.6875rem; color:var(--color-muted-foreground); padding:0;'; - reactBtn.textContent = '🙂 Реакція'; + reactBtn.textContent = '🙂 ' + gettext('Реакция'); reactBtn.onclick = function (e) { chatToggleReactionPicker(e, post, context); }; actions.appendChild(reactBtn); @@ -783,7 +787,7 @@ function chatBuildMessageEl(post, context) { replyBtn.type = 'button'; replyBtn.id = 'chat-reply-count-' + post.id; replyBtn.style.cssText = 'background:none; border:none; cursor:pointer; font-size:0.6875rem; color:var(--color-primary); padding:0;'; - replyBtn.textContent = post.reply_count ? ('💬 ' + post.reply_count + ' відповідей') : '↩ Відповісти'; + replyBtn.textContent = post.reply_count ? ('💬 ' + gettext('Ответов:') + ' ' + post.reply_count) : ('↩ ' + gettext('Ответить')); replyBtn.onclick = function () { chatOpenThread(post.id); }; actions.appendChild(replyBtn); } @@ -945,7 +949,7 @@ function chatOpenThread(postId) { document.getElementById('chat-thread-composer-input').value = ''; var el = document.getElementById('chat-thread-messages'); - if (el) el.innerHTML = '
Завантаження…
'; + if (el) el.innerHTML = '
' + gettext('Загрузка…') + '
'; chatApiFetch('/posts/' + postId + '/thread?perPage=60').then(function (data) { var ids = (data.order || []).slice().reverse(); @@ -957,7 +961,7 @@ function chatOpenThread(postId) { }); }).catch(function (e) { console.error(e); - if (el) el.innerHTML = '
Не вдалося завантажити тред
'; + if (el) el.innerHTML = '
' + gettext('Не удалось загрузить обсуждение') + '
'; }); } @@ -995,7 +999,7 @@ function chatBumpReplyCount(rootId) { if (!root) return; root.reply_count = (root.reply_count || 0) + 1; var btn = document.getElementById('chat-reply-count-' + rootId); - if (btn) btn.textContent = '💬 ' + root.reply_count + ' відповідей'; + if (btn) btn.textContent = '💬 ' + gettext('Ответов:') + ' ' + root.reply_count; } function chatSendMessage() { @@ -1101,7 +1105,7 @@ function chatRenderDmPickerList() { container.innerHTML = ''; if (!filtered.length) { - container.innerHTML = '
Нікого не знайдено
'; + container.innerHTML = '
' + gettext('Никого не найдено') + '
'; return; } @@ -1197,7 +1201,7 @@ function chatUpdateTitle() { function chatNotifyNewMessage(post) { try { if (window.Notification && Notification.permission === 'granted') { - var who = chatUserNames[post.user_id] || 'Нове повідомлення'; + var who = chatUserNames[post.user_id] || gettext('Новое сообщение'); new Notification(who, {body: (post.message || '').slice(0, 140)}); } } catch (e) { /* ignore */ } diff --git a/templates/index.html b/templates/index.html index 7a8b79e..8c485b5 100644 --- a/templates/index.html +++ b/templates/index.html @@ -29,6 +29,7 @@ }); + diff --git a/templates/pages/chat.html b/templates/pages/chat.html index 917d0ed..21a04a3 100644 --- a/templates/pages/chat.html +++ b/templates/pages/chat.html @@ -1,25 +1,26 @@ +{% load i18n %}
-

Чат

-

Внутрішній корпоративний месенджер (Mattermost)

+

{% trans "Чат" %}

+

{% trans "Внутренний корпоративный мессенджер (Mattermost)" %}

{% if chat_state == 'ready' %} {{ chat_config|json_script:"chat-config-data" }} {{ chat_colleagues|json_script:"chat-colleagues-data" }} - +
- -
- +
@@ -27,27 +28,27 @@
- Особисті повідомлення -
-
Завантаження…
+
{% trans "Загрузка…" %}
- Канали + {% trans "Каналы" %}
-
Завантаження…
+
{% trans "Загрузка…" %}
@@ -55,7 +56,7 @@
- Оберіть канал зліва + {% trans "Выберите канал слева" %}
@@ -65,10 +66,10 @@
- -
- +
- Тред -
@@ -92,10 +93,10 @@
- -
- +
- Нове повідомлення -
- +
- +
@@ -126,12 +127,12 @@ -
Ваш акаунт ще не синхронізовано з Mattermost
+
{% trans "Ваша учётная запись ещё не синхронизирована с Mattermost" %}

- Натисніть кнопку нижче, щоб створити/прив'язати ваш акаунт у Mattermost. + {% trans "Нажмите кнопку ниже, чтобы создать или привязать вашу учётную запись в Mattermost." %}

@@ -140,9 +141,9 @@ -
Не вдалося отримати доступ до Mattermost
+
{% trans "Не удалось получить доступ к Mattermost" %}

- Зверніться до IT-відділу — можливо, вимкнено видачу Personal Access Token на сервері Mattermost. + {% trans "Обратитесь в IT-отдел — возможно, отключена выдача Personal Access Token на сервере Mattermost." %}

@@ -151,9 +152,9 @@ -
Чат ще не підключено
+
{% trans "Чат ещё не подключён" %}

- Вкажіть публічну URL-адресу Mattermost (поле public_url у "Дополнительные параметры" коннектора Mattermost в адмінці) — і вона з'явиться тут. + {% blocktrans %}Укажите публичный URL Mattermost (поле public_url в «Дополнительные параметры» коннектора Mattermost в админке) — и он появится здесь.{% endblocktrans %}

{% endif %}