Merge pull request #2178 from ajnart/dev

Version 0.15.7
This commit is contained in:
Meier Lukas
2024-11-02 17:44:55 +01:00
committed by GitHub
23 changed files with 219 additions and 162 deletions

View File

@@ -432,7 +432,7 @@
"type": "notebook", "type": "notebook",
"properties": { "properties": {
"showToolbar": true, "showToolbar": true,
"content": "<h2><strong>Welcome to Homarr 🚀👋</strong></h2><p>We're glad that you're here! Homarr is a <em>modern </em>and <em>easy to use</em> dashboard that helps you to <strong>organize and manage</strong> your home network from one place. Control is <strong>at your fingertips</strong>.</p><p>We recommend you to read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev/docs/introduction/after-the-installation\">getting started guide</a> first. To edit this board you must enter the edit mode - only administrators can do this. Adding an app is the first step you should take. You can do this by clicking the <code>Add tile</code> button at the top right and select <code>App</code>. After you provided an internal URL, external URL and selected an icon you can drag it around when holding down the left mouse button. Make it bigger or smaller using the drag icon at the bottom right. When you're happy with it's position, you <strong>must exit edit mode to save your board</strong>. Adding widgets works the same way but may require additional configuration - read the documentation for more information.</p><p>To remove this widget, you must log in to your administrator account and click on the menu to delete it.</p><p><strong><u>Your TODO list:</u></strong></p><ul data-type=\"taskList\"><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev\">documentation</a></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add your <em>first app</em></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p><em>Resize </em>and <em>drag</em> your app to a different position</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add the <em>clock widget</em> to your dashboard</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Create a <em>new user</em></p></div></li></ul>" "content": "<h2><strong>Welcome to Homarr 🚀👋</strong></h2><p>We're glad that you're here! Homarr is a <em>modern </em>and <em>easy to use</em> dashboard that helps you to <strong>organize and manage</strong> your home network from one place. Control is <strong>at your fingertips</strong>.</p><p>We recommend you to read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev/docs/getting-started/after-the-installation\">getting started guide</a> first. To edit this board you must enter the edit mode - only administrators can do this. Adding an app is the first step you should take. You can do this by clicking the <code>Add tile</code> button at the top right and select <code>App</code>. After you provided an internal URL, external URL and selected an icon you can drag it around when holding down the left mouse button. Make it bigger or smaller using the drag icon at the bottom right. When you're happy with it's position, you <strong>must exit edit mode to save your board</strong>. Adding widgets works the same way but may require additional configuration - read the documentation for more information.</p><p>To remove this widget, you must log in to your administrator account and click on the menu to delete it.</p><p><strong><u>Your TODO list:</u></strong></p><ul data-type=\"taskList\"><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev\">documentation</a></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add your <em>first app</em></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p><em>Resize </em>and <em>drag</em> your app to a different position</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add the <em>clock widget</em> to your dashboard</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Create a <em>new user</em></p></div></li></ul>"
}, },
"area": { "area": {
"type": "wrapper", "type": "wrapper",
@@ -510,4 +510,4 @@
"allowGuests": false "allowGuests": false
} }
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "homarr", "name": "homarr",
"version": "0.15.6", "version": "0.15.7",
"description": "Homarr - A homepage for your server.", "description": "Homarr - A homepage for your server.",
"license": "MIT", "license": "MIT",
"repository": { "repository": {

View File

@@ -16,8 +16,8 @@
}, },
"afterLoginRedirection": "Після входу ви будете перенаправлені на сайт {{url}}", "afterLoginRedirection": "Після входу ви будете перенаправлені на сайт {{url}}",
"providersEmpty": { "providersEmpty": {
"title": "", "title": "Помилка постачальника авторизації",
"message": "" "message": "Постачальник(и) не налаштовано, перевірте свої журнали для отримання додаткової інформації."
} }
}, },
"alert": "Ваші облікові дані невірні або такого облікового запису не існує. Будь ласка, спробуйте ще раз." "alert": "Ваші облікові дані невірні або такого облікового запису не існує. Будь ласка, спробуйте ще раз."

View File

@@ -1,7 +1,7 @@
{ {
"save": "Зберегти", "save": "Зберегти",
"apply": "", "apply": "Застосувати",
"insert": "", "insert": "Вставити",
"about": "Про програму", "about": "Про програму",
"cancel": "Скасувати", "cancel": "Скасувати",
"close": "Закрити", "close": "Закрити",
@@ -13,11 +13,11 @@
"previous": "Попередній", "previous": "Попередній",
"confirm": "Підтвердити", "confirm": "Підтвердити",
"enabled": "Увімкнено", "enabled": "Увімкнено",
"duplicate": "", "duplicate": "Дублікат",
"disabled": "Вимкнено", "disabled": "Вимкнено",
"enableAll": "Увімкнути все", "enableAll": "Увімкнути все",
"disableAll": "Вимкнути усе", "disableAll": "Вимкнути усе",
"setTimer": "", "setTimer": "Встановити таймер",
"version": "Версія", "version": "Версія",
"changePosition": "Змінити положення", "changePosition": "Змінити положення",
"remove": "Видалити", "remove": "Видалити",
@@ -47,7 +47,7 @@
"seeMore": "Побачити більше...", "seeMore": "Побачити більше...",
"position": { "position": {
"left": "Ліворуч.", "left": "Ліворуч.",
"center": "", "center": "Центр",
"right": "Так." "right": "Так."
}, },
"attributes": { "attributes": {
@@ -55,5 +55,5 @@
"height": "Висота" "height": "Висота"
}, },
"public": "Публічний", "public": "Публічний",
"restricted": "" "restricted": "Обмежено"
} }

View File

@@ -22,5 +22,5 @@
"message": "Створено категорію \"{{name}}\"" "message": "Створено категорію \"{{name}}\""
} }
}, },
"importFromDocker": "" "importFromDocker": "Імпортувати з docker"
} }

View File

@@ -26,7 +26,7 @@
"title": "Інструменти", "title": "Інструменти",
"items": { "items": {
"docker": "Docker", "docker": "Docker",
"api": "" "api": "API"
} }
}, },
"about": { "about": {

View File

@@ -5,10 +5,10 @@
"key": "Гарячі клавіши", "key": "Гарячі клавіши",
"action": "Дії", "action": "Дії",
"keybinds": "Сполучення клавіш", "keybinds": "Сполучення клавіш",
"translators": "", "translators": "Перекладачі ({{count}})",
"translatorsDescription": "", "translatorsDescription": "Завдяки цим людям Homarr доступний {{languages}} мовами! Хочете допомогти перекласти Homarr своєю мовою? Прочитайте, як це зробити <a>тут</a>.",
"contributors": "", "contributors": "Учасники ({{count}})",
"contributorsDescription": "", "contributorsDescription": "Ці люди створили код, завдяки якому homarr працює! Хочете допомогти побудувати Homarr? Прочитайте, як це зробити <a>тут</a>",
"actions": { "actions": {
"toggleTheme": "Перемикання світлого/темного режиму", "toggleTheme": "Перемикання світлого/темного режиму",
"focusSearchBar": "Зосередьтеся на рядку пошуку", "focusSearchBar": "Зосередьтеся на рядку пошуку",

View File

@@ -32,7 +32,7 @@
"externalAddress": { "externalAddress": {
"label": "Зовнішня адреса", "label": "Зовнішня адреса",
"description": "URL-адреса відкриється в браузері при натисканні на додаток.", "description": "URL-адреса відкриється в браузері при натисканні на додаток.",
"tooltip": "" "tooltip": "Ви можете використовувати декілька змінних для створення динамічних адрес:<br><br><b>[homarr_base]</b>: повна адреса, за винятком порту і шляху. <i>(Приклад: 'https://subdomain.homarr.dev')</i><br><b>[homarr_hostname]</b>: повна базова адреса, включаючи поточний субдомен. <i>(Приклад: 'subdomain.homarr.dev')</i><br><b>[homarr_domain]</b>: домен з відфільтрованим субдоменом. <i>(Приклад: `homarr.dev')</i><br><b>[homarr_protocol]</b>: <i>http/https</i><br><br>Всі ці змінні залежать від поточного url."
} }
}, },
"behaviour": { "behaviour": {

View File

@@ -16,15 +16,15 @@
"label": "Видалити назавжди", "label": "Видалити назавжди",
"disabled": "Видалення вимкнено, оскільки старіші компоненти Homarr не дозволяють видаляти конфігурацію за замовчуванням. Видалення буде можливим у майбутньому." "disabled": "Видалення вимкнено, оскільки старіші компоненти Homarr не дозволяють видаляти конфігурацію за замовчуванням. Видалення буде можливим у майбутньому."
}, },
"duplicate": "", "duplicate": "Дублікат",
"rename": { "rename": {
"label": "", "label": "Перейменувати",
"modal": { "modal": {
"title": "", "title": "Перейменувати дошку {{name}}",
"fields": { "fields": {
"name": { "name": {
"label": "", "label": "Нова назва",
"placeholder": "" "placeholder": "Нова назва дошки"
} }
} }
} }

View File

@@ -6,10 +6,10 @@
}, },
"filter": { "filter": {
"roles": { "roles": {
"all": "", "all": "Усе",
"normal": "", "normal": "Нормально",
"admin": "", "admin": "Адміністратор",
"owner": "" "owner": "Власник"
} }
}, },
"table": { "table": {

View File

@@ -1,6 +1,6 @@
{ {
"metaTitle": "", "metaTitle": "Користувач {{username}}",
"back": "", "back": "Повернутися до керування користувачами",
"sections": { "sections": {
"general": { "general": {
"title": "Загальне", "title": "Загальне",
@@ -14,40 +14,40 @@
} }
}, },
"security": { "security": {
"title": "", "title": "Безпека",
"inputs": { "inputs": {
"password": { "password": {
"label": "" "label": "Новий пароль"
}, },
"terminateExistingSessions": { "terminateExistingSessions": {
"label": "", "label": "Завершити поточні сесії",
"description": "" "description": "Змушує користувача повторно входити в систему на своїх пристроях"
}, },
"confirm": { "confirm": {
"label": "Підтвердити", "label": "Підтвердити",
"description": "" "description": "Пароль буде оновлено. Дію не можна скасувати."
} }
} }
}, },
"roles": { "roles": {
"title": "", "title": "Ролі",
"currentRole": "", "currentRole": "Поточна роль: ",
"badges": { "badges": {
"owner": "", "owner": "Власник",
"admin": "", "admin": "Адміністратор",
"normal": "" "normal": "Нормально"
} }
}, },
"deletion": { "deletion": {
"title": "", "title": "Видалення облікового запису",
"inputs": { "inputs": {
"confirmUsername": { "confirmUsername": {
"label": "", "label": "Підтвердіть ім'я користувача",
"description": "" "description": "Введіть ім'я користувача для підтвердження видалення"
}, },
"confirm": { "confirm": {
"label": "Видалити назавжди", "label": "Видалити назавжди",
"description": "" "description": "Я усвідомлюю, що ця дія є безстроковою і всі дані облікового запису будуть втрачені."
} }
} }
} }

View File

@@ -5,11 +5,11 @@
"settings": { "settings": {
"title": "Налаштування віджету дати й часу", "title": "Налаштування віджету дати й часу",
"timezone": { "timezone": {
"label": "", "label": "Часовий пояс",
"info": "" "info": "Виберіть назву свого часового поясу, знайдіть свій тут: "
}, },
"customTitle": { "customTitle": {
"label": "" "label": "Назва міста або власна назва"
}, },
"display24HourFormat": { "display24HourFormat": {
"label": "Показувати повний час (24 години)" "label": "Показувати повний час (24 години)"
@@ -21,11 +21,11 @@
} }
}, },
"titleState": { "titleState": {
"label": "", "label": "Назва годинника",
"info": "", "info": "У віджеті можна показувати власну назву та код часового поясу.<br/>Ви також можете показувати лише місто, не показувати жодного,<br/>або навіть показувати лише часовий пояс, якщо вибрано обидва, але не вказано назву.",
"data": { "data": {
"both": "", "both": "Назва та часовий пояс",
"city": "", "city": "Тільки назва",
"none": "Нема" "none": "Нема"
} }
} }

View File

@@ -131,11 +131,11 @@
"diskSize": "", "diskSize": "",
"diskRatio": "", "diskRatio": "",
"uptime": "", "uptime": "",
"plugin": "", "plugin": "Плагін",
"ha": "", "ha": "Стан HA - {{haState}}",
"sharedStorage": "", "sharedStorage": "Спільне сховище",
"localStorage": "", "localStorage": "Локальне сховище",
"na": "" "na": "Н"
} }
} }
} }

View File

@@ -1,22 +1,22 @@
{ {
"descriptor": { "descriptor": {
"name": "", "name": "Статус менеджера індексування",
"description": "", "description": "Статус про ваші індексування",
"settings": { "settings": {
"title": "", "title": "Статус менеджера індексування",
"openIndexerSiteInNewTab": { "openIndexerSiteInNewTab": {
"label": "" "label": "Відкрити Сайт індексування у новій вкладці"
} }
} }
}, },
"indexersStatus": { "indexersStatus": {
"title": "", "title": "Менеджер індексації",
"testAllButton": "" "testAllButton": "Перевірте все"
}, },
"errors": { "errors": {
"general": { "general": {
"title": "", "title": "Не вдається знайти менеджера індексації",
"text": "" "text": "Виникла проблема підключення до вашого менеджера індексаторів. Будь ласка, перевірте вашу конфігурацію/інтеграцію(ї)."
} }
} }
} }

View File

@@ -1,96 +1,96 @@
{ {
"descriptor": { "descriptor": {
"name": "", "name": "Перекодування медіа",
"description": "", "description": "Відображає інформацію про перекодування медіа",
"settings": { "settings": {
"title": "", "title": "Налаштування перекодування мультимедіа",
"appId": { "appId": {
"label": "" "label": "Виберіть програму"
}, },
"defaultView": { "defaultView": {
"label": "", "label": "Вигляд за замовчуванням",
"data": { "data": {
"workers": "", "workers": "Робітники",
"queue": "Черга", "queue": "Черга",
"statistics": "" "statistics": "Статистика"
} }
}, },
"showHealthCheck": { "showHealthCheck": {
"label": "" "label": "Показувати індикатор перевірки працездатності"
}, },
"showHealthChecksInQueue": { "showHealthChecksInQueue": {
"label": "" "label": "Показувати перевірки працездатності в черзі"
}, },
"queuePageSize": { "queuePageSize": {
"label": "" "label": "Черга: Елементи на сторінку"
}, },
"showAppIcon": { "showAppIcon": {
"label": "" "label": "Показати іконку програми в правому нижньому куті"
} }
} }
}, },
"noAppSelected": "", "noAppSelected": "Будь ласка, оберіть додаток у налаштуваннях віджету",
"views": { "views": {
"workers": { "workers": {
"table": { "table": {
"header": { "header": {
"name": "", "name": "Файл",
"eta": "Залишилося", "eta": "Залишилося",
"progress": "Прогрес" "progress": "Прогрес"
}, },
"empty": "Пусто", "empty": "Пусто",
"tooltip": { "tooltip": {
"transcode": "", "transcode": "Перекодувати",
"healthCheck": "" "healthCheck": "Перевірка працездатності"
} }
} }
}, },
"queue": { "queue": {
"table": { "table": {
"header": { "header": {
"name": "", "name": "Файл",
"size": "Розмір" "size": "Розмір"
}, },
"footer": { "footer": {
"currentIndex": "" "currentIndex": "{{start}}-{{end}} від {{total}}"
}, },
"empty": "Пусто", "empty": "Пусто",
"tooltip": { "tooltip": {
"transcode": "", "transcode": "Перекодувати",
"healthCheck": "" "healthCheck": "Перевірка працездатності"
} }
} }
}, },
"statistics": { "statistics": {
"empty": "Пусто", "empty": "Пусто",
"box": { "box": {
"transcodes": "", "transcodes": "Перекодує: {{value}}",
"healthChecks": "", "healthChecks": "Перевірки працездатності: {{value}}",
"files": "", "files": "Файли: {{value}}",
"spaceSaved": "" "spaceSaved": "Збережено: {{value}}"
}, },
"pies": { "pies": {
"transcodes": "", "transcodes": "Перекодує",
"healthChecks": "", "healthChecks": "Перевірка працездатності",
"videoCodecs": "", "videoCodecs": "Кодеки",
"videoContainers": "", "videoContainers": "Контейнери",
"videoResolutions": "" "videoResolutions": "Роздільна здатність"
} }
} }
}, },
"error": { "error": {
"title": "Помилка", "title": "Помилка",
"message": "" "message": "Виникла помилка при отриманні даних з Tdarr."
}, },
"tabs": { "tabs": {
"workers": "", "workers": "Робітники",
"queue": "Черга", "queue": "Черга",
"statistics": "" "statistics": "Статистика"
}, },
"healthCheckStatus": { "healthCheckStatus": {
"title": "", "title": "Перевірка працездатності",
"queued": "", "queued": "У черзі",
"healthy": "", "healthy": "Здоровий",
"unhealthy": "" "unhealthy": "Нездоровий"
} }
} }

View File

@@ -1,32 +1,32 @@
{ {
"entityNotFound": "", "entityNotFound": "Об'єкт не знайдено",
"descriptor": { "descriptor": {
"name": "", "name": "Home Assistant об'єкт",
"description": "", "description": "Поточний стан об'єкта в Home Assistant",
"settings": { "settings": {
"title": "", "title": "Стан об'єкта",
"entityId": { "entityId": {
"label": "", "label": "Ідентифікатор об'єкта",
"info": "" "info": "Унікальний ідентифікатор сутності в Home Assistant. Скопіюйте, натиснувши на об'єкт > Натисніть на значок гвинтика > Натисніть на кнопку копіювання в \"Ідентифікаторі об'єкта\". Деякі користувацькі об'єкти можуть не підтримуватися."
}, },
"appendUnit": { "appendUnit": {
"label": "", "label": "Додайте одиницю виміру",
"info": "" "info": "Додайте атрибут одиниці виміру до стану об'єкта."
}, },
"automationId": { "automationId": {
"label": "", "label": "Додатковий ідентифікатор автоматизації",
"info": "" "info": "Ваш унікальний ідентифікатор автоматизації. Завжди починається з automation.XXXXX. Якщо не встановлено, віджет не буде клікабельним, а лише показуватиме стан. Після натискання стан об'єкта буде оновлено."
}, },
"displayName": { "displayName": {
"label": "" "label": "Відображати ім'я"
}, },
"displayFriendlyName": { "displayFriendlyName": {
"label": "", "label": "Відображати зрозуміле ім'я",
"info": "" "info": "Замість відображуваного імені відображати зрозуміле ім’я від Home Assistant."
}, },
"genericToggle": { "genericToggle": {
"label": "", "label": "Перемикач об'єкту",
"info": "" "info": "Виконайте загальну дію перемикання Home Assistant над об’єктом після натискання."
} }
} }
} }

View File

@@ -1,15 +1,15 @@
{ {
"descriptor": { "descriptor": {
"name": "", "name": "Автоматизація Home Assistant",
"description": "", "description": "Виконати автоматизацію",
"settings": { "settings": {
"title": "", "title": "Виконати автоматизацію",
"automationId": { "automationId": {
"label": "", "label": "Ідентифікатор автоматизації",
"info": "" "info": "Ваш унікальний ідентифікатор автоматизації. Завжди починається з automation.XXXXX."
}, },
"displayName": { "displayName": {
"label": "" "label": "Відображати ім'я"
} }
} }
} }

View File

@@ -11,10 +11,10 @@
"label": "Відображати завершені торренти" "label": "Відображати завершені торренти"
}, },
"displayActiveTorrents": { "displayActiveTorrents": {
"label": "" "label": "Відображати активні торренти"
}, },
"speedLimitOfActiveTorrents": { "speedLimitOfActiveTorrents": {
"label": "" "label": "Швидкість завантаження, щоб вважати торрент активним (кБ/с)"
}, },
"displayStaleTorrents": { "displayStaleTorrents": {
"label": "Відображати застарілі торренти" "label": "Відображати застарілі торренти"
@@ -27,19 +27,19 @@
"description": "Якщо позначено опцію \"білий список\", він буде діяти як білий список. Якщо не позначено, це чорний список. Нічого не робитиме, якщо порожній" "description": "Якщо позначено опцію \"білий список\", він буде діяти як білий список. Якщо не позначено, це чорний список. Нічого не робитиме, якщо порожній"
}, },
"displayRatioWithFilter": { "displayRatioWithFilter": {
"label": "", "label": "Відображати співвідношення відфільтрованих списків торрентів",
"info": "" "info": "Якщо цю опцію вимкнено, буде показано лише глобальне співвідношення. Глобальне співвідношення все одно використовуватиме мітки, якщо встановлено"
}, },
"columnOrdering": { "columnOrdering": {
"label": "" "label": "Увімкнути переупорядкування стовпців"
}, },
"rowSorting": { "rowSorting": {
"label": "" "label": "Увімкнути сортування рядків"
}, },
"columns": { "columns": {
"label": "", "label": "Виберіть стовпці для відображення",
"data": { "data": {
"date": "", "date": "Дата додавання",
"down": "Завантаження", "down": "Завантаження",
"up": "Віддача", "up": "Віддача",
"eta": "Залишилося", "eta": "Залишилося",
@@ -47,7 +47,7 @@
} }
}, },
"nameColumnSize": { "nameColumnSize": {
"label": "" "label": "Змінити розмір стовпчика назви"
} }
} }
}, },
@@ -55,24 +55,24 @@
"footer": { "footer": {
"error": "Помилка", "error": "Помилка",
"lastUpdated": "Востаннє оновлено {{time}} тому", "lastUpdated": "Востаннє оновлено {{time}} тому",
"ratioGlobal": "", "ratioGlobal": "Глобальне співвідношення",
"ratioWithFilter": "" "ratioWithFilter": "Співвідношення з фільтром"
}, },
"table": { "table": {
"header": { "header": {
"isCompleted": "", "isCompleted": "Завантаження",
"name": "Ім’я", "name": "Ім’я",
"dateAdded": "", "dateAdded": "Додано на",
"size": "Розмір", "size": "Розмір",
"download": "Завантаження", "download": "Завантаження",
"upload": "Віддача", "upload": "Віддача",
"estimatedTimeOfArrival": "Залишилося", "estimatedTimeOfArrival": "Залишилося",
"progress": "Прогрес", "progress": "Прогрес",
"totalUploaded": "", "totalUploaded": "Загальне завантаження",
"totalDownloaded": "", "totalDownloaded": "Загальне завантаження",
"ratio": "", "ratio": "Співвідношення",
"seeds": "", "seeds": "Сідери (підключено)",
"peers": "", "peers": "Піри (підключено)",
"label": "", "label": "",
"state": "Стан", "state": "Стан",
"stateMessage": "" "stateMessage": ""

View File

@@ -11,10 +11,10 @@
"label": "Показувати назву міста" "label": "Показувати назву міста"
}, },
"displayWeekly": { "displayWeekly": {
"label": "" "label": "Показати тижневий прогноз"
}, },
"forecastDays": { "forecastDays": {
"label": "" "label": "Дні для відображення"
}, },
"location": { "location": {
"label": "Погодна локація" "label": "Погодна локація"

View File

@@ -19,26 +19,26 @@
"label": "Фон" "label": "Фон"
}, },
"backgroundImageAttachment": { "backgroundImageAttachment": {
"label": "", "label": "Прикріплене фонове зображення",
"options": { "options": {
"fixed": "", "fixed": "Фіксований - фон залишається в тому самому положенні (рекомендовано)",
"scroll": "" "scroll": "Прокручування фонове прокручування за допомогою миші"
} }
}, },
"backgroundImageSize": { "backgroundImageSize": {
"label": "", "label": "Розмір фонового зображення",
"options": { "options": {
"cover": "", "cover": "Обкладинка Масштабує зображення до найменшого розміру, щоб охопити все вікно, обрізаючи зайвий простір. (рекомендовано)",
"contain": "" "contain": "Вмістити - Масштабує зображення до максимально можливого розміру в межах контейнера без обрізання або розтягування зображення."
} }
}, },
"backgroundImageRepeat": { "backgroundImageRepeat": {
"label": "", "label": "Прикріплене фонове зображення",
"options": { "options": {
"repeat": "", "repeat": "Повторювати - Зображення повторюється стільки разів, скільки потрібно, щоб покрити всю область зафарбовування фонового зображення.",
"no-repeat": "", "no-repeat": "Без повтору - Зображення не повторюється і може не заповнювати весь простір (рекомендовано)",
"repeat-x": "", "repeat-x": "Повторити X - Те саме, що й \"Повторити\", але тільки на горизонтальній осі.",
"repeat-y": "" "repeat-y": "Повторити Y - Те саме, що й \"Повторити\", але тільки по вертикальній осі."
} }
}, },
"customCSS": { "customCSS": {

View File

@@ -2,7 +2,7 @@
"title": "Docker", "title": "Docker",
"alerts": { "alerts": {
"notConfigured": { "notConfigured": {
"text": "" "text": "У вашому екземплярі Homarr не налаштовано Docker або не вдалося отримати контейнери. Будь ласка, зверніться до документації, щоб дізнатися, як налаштувати інтеграцію."
} }
}, },
"modals": { "modals": {

View File

@@ -7,6 +7,7 @@ import { decode, encode } from 'next-auth/jwt';
import { env } from '~/env'; import { env } from '~/env';
import { secondsFromTimeString } from '~/tools/client/parseDuration'; import { secondsFromTimeString } from '~/tools/client/parseDuration';
import { adapter, getProviders, onCreateUser } from '~/utils/auth'; import { adapter, getProviders, onCreateUser } from '~/utils/auth';
import { createCookiesWithDefaultOptions } from '~/utils/auth/cookies';
import { createRedirectUri } from '~/utils/auth/oidc'; import { createRedirectUri } from '~/utils/auth/oidc';
import EmptyNextAuthProvider from '~/utils/empty-provider'; import EmptyNextAuthProvider from '~/utils/empty-provider';
import { fromDate, generateSessionToken } from '~/utils/session'; import { fromDate, generateSessionToken } from '~/utils/session';
@@ -106,17 +107,7 @@ export const constructAuthOptions = async (
}, },
adapter: adapter as Adapter, adapter: adapter as Adapter,
providers: [...(await getProviders(req.headers)), EmptyNextAuthProvider()], providers: [...(await getProviders(req.headers)), EmptyNextAuthProvider()],
cookies: { cookies: createCookiesWithDefaultOptions(req.url?.startsWith('https:') ?? false),
sessionToken: {
name: 'next-auth.session-token',
options: {
httpOnly: true,
sameSite: 'lax',
path: '/',
secure: true,
},
},
},
jwt: { jwt: {
async encode(params) { async encode(params) {
if (!isCredentialsRequest(req)) { if (!isCredentialsRequest(req)) {

66
src/utils/auth/cookies.ts Normal file
View File

@@ -0,0 +1,66 @@
export const createCookiesWithDefaultOptions = (useSecureCookies: boolean) => {
const cookiePrefix = useSecureCookies ? '__Secure-' : '';
return {
// default cookie options
sessionToken: {
// We don't use __Secure prefix as the cookie is used in the code
name: `next-auth.session-token`,
options: {
httpOnly: true,
sameSite: 'lax',
path: '/',
secure: useSecureCookies,
},
},
callbackUrl: {
name: `${cookiePrefix}next-auth.callback-url`,
options: {
httpOnly: true,
sameSite: 'lax',
path: '/',
secure: useSecureCookies,
},
},
csrfToken: {
// Default to __Host- for CSRF token for additional protection if using useSecureCookies
// NB: The `__Host-` prefix is stricter than the `__Secure-` prefix.
name: `${useSecureCookies ? '__Host-' : ''}next-auth.csrf-token`,
options: {
httpOnly: true,
sameSite: 'lax',
path: '/',
secure: useSecureCookies,
},
},
pkceCodeVerifier: {
name: `${cookiePrefix}next-auth.pkce.code_verifier`,
options: {
httpOnly: true,
sameSite: 'lax',
path: '/',
secure: useSecureCookies,
maxAge: 60 * 15, // 15 minutes in seconds
},
},
state: {
name: `${cookiePrefix}next-auth.state`,
options: {
httpOnly: true,
sameSite: 'lax',
path: '/',
secure: useSecureCookies,
maxAge: 60 * 15, // 15 minutes in seconds
},
},
nonce: {
name: `${cookiePrefix}next-auth.nonce`,
options: {
httpOnly: true,
sameSite: 'lax',
path: '/',
secure: useSecureCookies,
},
},
} as const;
};