const strings = {
error: {
server_error: "Помилка сервера, будь ласка, спробуйте ще раз",
aiPromptTooLong: "Запит AI занадто довгий (максимум 4096 символів)",
},
title: {
donate: "Пожертвувати",
donateTitle: "Підтримайте P3X Redis UI",
donateDescription: "P3X Redis UI — безкоштовний проєкт з відкритим кодом. Витрати на підтримку додатку, функцій AI, образів Docker, серверів та інфраструктури оплачуються з власної кишені розробника. Якщо ви вважаєте цей інструмент корисним, будь ласка, підтримайте його подальший розвиток пожертвою. Кожен внесок допомагає проєкту жити та рости. Дякуємо!",
jsonRecursive: "Розгортання всіх гілок",
name: "P3X Redis UI",
nameDonated: "P3X Redis UI+",
main: "Ви можете вибрати Redis-з'єднання для підключення з меню внизу зліва.",
statistics: "Статистика",
error: "Помилка",
connectingRedis: "Підключення до Redis ...",
socketioConnectError: "Помилка Socket.IO",
db: "DB",
server: "Сервер",
clients: "Клієнти",
memory: "Пам'ять",
persistence: "Збереження",
stats: "Статистика",
replication: "Реплікація",
cpu: "CPU",
cluster: "Cluster",
modules: "Модулі",
errorstats: "Статистика помилок",
commandstats: "Статистика команд",
latencystats: "Статистика затримок",
keysizes: "Розміри ключів",
threads: "Потоки"
},
confirm: {
dropIndex: "Ви впевнені, що хочете видалити цей індекс?",
uploadBuffer: "Ви впевнені, що хочете завантажити ці бінарні дані?",
uploadBufferDone: "Бінарні дані завантажено",
uploadBufferDoneAndSave: "Бінарні дані завантажено та збережено на сервері",
title: "Підтвердити",
alert: "Попередження",
info: "Інформація",
deleteListItem: "Ви впевнені, що хочете видалити цей елемент списку?",
deleteHashKey: "Ви впевнені, що хочете видалити цей хеш-ключ?",
deleteStreamTimestamp: "Ви впевнені, що хочете видалити цю мітку часу потоку?",
deleteSetMember: "Ви впевнені, що хочете видалити цього члена множини?",
deleteZSetMember: "Ви впевнені, що хочете видалити цього члена впорядкованої множини?",
deleteConnection: "Підтвердити",
deleteConnectionText: "Ви впевнені, що хочете видалити це Redis-з'єднання?",
deleteNode: "Ви впевнені, що хочете видалити цей Redis-вузол?",
deleteAllKeys: opts => {
return `Видалити це дерево та всі його ключі (${opts.key})?`;
},
deleteSearchKeys: opts => {
return `Ви впевнені, що хочете видалити всі ключі, які відповідають "${opts.pattern}"? Знайдено ${opts.count} ключів.`;
},
socketioConnectError: "Socket.IO не може підключитися до сервера, ви можете перезавантажити та спробувати вирішити помилку підключення самостійно, клієнт не знає, як її вирішити.",
socketioAuthRequired: "Потрібна авторизація Socket.IO. Будь ласка, автентифікуйтесь за допомогою HTTP Basic Auth (ім'я користувача/пароль) та перезавантажте.",
invalidCredentials: "Невірне ім'я користувача або пароль.",
delete: "Видалити?",
deleteKey: "Ви впевнені, що хочете видалити цей ключ?",
rename: {
title: "Ви впевнені, що хочете перейменувати цей ключ?",
textContent: "Ця дія перейменовує ключ назавжди.",
placeholder: "Redis-ключ (обов'язковий)"
},
ttl: {
title: "Ви впевнені, що хочете змінити TTL цього ключа?",
textContent: "Зміна TTL оновлює час життя цього ключа. Залиште порожнім, щоб зберегти ключ назавжди.",
placeholder: "TTL Redis-ключа (ціле число або порожнє)",
placeholderPlaceholder: "Порожнє означає, що він зберігається назавжди; інакше введіть ціле число.",
convertTextToTime: "Конвертувати текст у час",
convertTextToTimePlaceholder: "Напр. 1d буде 86400"
}
},
language: {
bg: "Български / Bulgarian",
cs: "Čeština / Czech",
de: "Deutsch / German",
el: "Ελληνικά / Greek",
en: "English",
es: "Español / Spanish",
fr: "Français / French",
hu: "Magyar / Hungarian",
it: "Italiano / Italian",
ja: "日本語 / Japanese",
nl: "Nederlands / Dutch",
pl: "Polski / Polish",
"pt-PT": "Português / Portuguese",
ro: "Română / Romanian",
ru: "Русский / Russian",
sk: "Slovenčina / Slovak",
sr: "Српски / Serbian",
sv: "Svenska / Swedish",
tr: "Türkçe / Turkish",
uk: "Українська / Ukrainian",
zn: "中文 / Chinese",
ar: "العربية / Arabic",
az: "Azərbaycanca / Azerbaijani",
be: "Беларуская / Belarusian",
bn: "বাংলা / Bengali",
da: "Dansk / Danish",
et: "Eesti / Estonian",
fi: "Suomi / Finnish",
fil: "Filipino / Filipino",
he: "עברית / Hebrew",
hr: "Hrvatski / Croatian",
hy: "Հայերեն / Armenian",
id: "Bahasa Indonesia / Indonesian",
ka: "ქართული / Georgian",
kk: "Қазақша / Kazakh",
km: "ខ្មែរ / Khmer",
ko: "한국어 / Korean",
ky: "Кыргызча / Kyrgyz",
lt: "Lietuvių / Lithuanian",
mk: "Македонски / Macedonian",
ms: "Bahasa Melayu / Malay",
ne: "नेपाली / Nepali",
no: "Norsk / Norwegian",
"pt-BR": "Português (Brasil) / Portuguese (Brazil)",
sl: "Slovenščina / Slovenian",
tg: "Тоҷикӣ / Tajik",
th: "ไทย / Thai",
vi: "Tiếng Việt / Vietnamese",
"zh-HK": "中文(香港) / Chinese (Hong Kong)",
"zh-TW": "中文(台灣) / Chinese (Taiwan)",
bs: 'Bosanski / Bosnian',
si: 'සිංහල / Sinhala',
sw: 'Kiswahili / Swahili',
ta: 'தமிழ் / Tamil'
},
intention: {
copy: "Копіювати",
downloadBuffer: "Завантажити бінарний файл",
setBuffer: "Вивантажити бінарний файл",
exportKeys: "Експорт ключів",
exportAllKeys: (opts) => `Експорт усіх ${opts.count} ключів`,
exportSearchResults: (opts) => `Експорт ${opts.count} результатів`,
deleteAllKeysMenu: (opts) => `Видалити все ${opts.count}`,
importKeys: "Імпорт ключів",
deleteSearchKeys: (opts) => `Видалити ${opts.count} відповідних ключів`,
saveWithFormatJson: "Зберегти з форматуванням",
formatJson: "Форматувати Json",
wrap: "Перенос",
unwrap: "Без переносу",
downloadJson: "Завантажити JSON",
pubsubMonitor: "PubSub",
pulse: "Pulse",
profiler: "Profiler",
memoryAnalysis: "Analysis",
language: "Мова / Language",
ok: "OK",
addKey: "Додати до цього ключа",
addKeyRoot: "Додати кореневий ключ",
reloadKey: "Перезавантажити ключ",
reload: "Перезавантажити",
close: "Закрити",
commands: "Команди",
view: "Вигляд",
statistics: "Статистика",
refresh: "Оновити",
pause: "Пауза",
resume: "Продовжити",
clear: "Очистити",
rename: "Перейменувати",
main: "База даних",
cancel: "Скасувати",
theme: "Тема",
github: "GitHub",
githubRepo: "Репозиторій",
githubRelease: "Релізи",
githubChangelog: "Журнал змін",
info: "Info",
settings: "Налаштування",
connect: "Підключити",
disconnect: "Відключити",
logout: "Вийти",
overview: "Огляд",
console: "Консоль",
noConnections: "Немає з'єднань, додайте з'єднання в меню налаштувань.",
noConnectionsInSettings: "Немає з'єднань, ви можете додати НОВЕ З'ЄДНАННЯ вище.",
connectionAdd: "Нове з'єднання",
addGroup: "Додати групу",
extend: "Розгорнути",
collapse: "Згорнути",
add: "Додати",
edit: "Редагувати",
save: "Зберегти",
ttl: "Встановити TTL",
fieldTtl: "TTL поля",
digest: "Дайджест",
delete: "Видалити",
remove: "Вилучити",
areYouSure: "Ви впевнені?",
sure: "Впевнені",
testConnection: "Тестувати з'єднання",
getKey: "Завантаження Redis-ключа та пов'язаних даних ...",
jsonViewShow: "Показати JSON",
jsonViewEditor: "Редагувати JSON",
quickConsole: "Швидка консоль",
moveUp: "Перемістити вгору",
moveDown: "Перемістити вниз",
},
diff: {
reviewChanges: "\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438 \u0437\u043c\u0456\u043d\u0438",
inline: "\u0423 \u0440\u044f\u0434\u043a\u0443",
sideBySide: "\u041f\u043b\u0456\u0447-\u043e-\u043f\u043b\u0456\u0447",
additions: "\u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f",
deletions: "\u0432\u0438\u0434\u0430\u043b\u0435\u043d\u043d\u044f",
unchangedLines: "\u043d\u0435\u0437\u043c\u0456\u043d\u0435\u043d\u0456 \u0440\u044f\u0434\u043a\u0438",
noChanges: "\u0417\u043c\u0456\u043d \u043d\u0435 \u0432\u0438\u044f\u0432\u043b\u0435\u043d\u043e",
before: "\u0414\u043e",
after: "\u041f\u0456\u0441\u043b\u044f",
},
label: {
id: {
nodeId: 'ID вузла',
id: "ID з'єднання",
info: "Якщо ви не хочете змінювати властивості: sshPassword, sshPrivateKey, password, tlsCrt, tlsKey, tlsCa, введіть ID з'єднання в ці властивості, щоб зберегти значення. Якщо ви хочете такої ж логіки для пароля вузла, введіть ID вузла в поле пароля вузла."
},
secureFeature: 'Якщо ви бачите значення, яке починається з P3X і виглядає однаково, це функція безпеки. Щоб змінити налаштування, замініть їх порожніми або чимось іншим, і вони будуть збережені. Якщо ви не зміните налаштування, вони залишаться такими, як є на сервері.',
aiTranslating: "Переклад...",
aiSettings: "Налаштування ШІ",
aiGroqApiKey: "Ключ API Groq",
aiGroqApiKeyInfo: "Необов'язково. Власний ключ API Groq для кращої продуктивності. Отримайте безкоштовний ключ на",
aiGroqApiKeyPlaceholder: "gsk_...",
aiGroqApiKeySaved: "Ключ API ШІ збережено",
aiGroqApiKeyInvalid: "Недійсний ключ API Groq",
aiGroqApiKeyNotSet: "Не встановлено (за замовчуванням сервера)",
aiEnabled: "ШІ увімкнено",
aiEnabledYes: "Так",
aiEnabledNo: "Ні",
aiRouteViaNetwork: "Маршрут через network.corifeus.com",
aiRoutingDirect: "Запити йдуть напряму до Groq з вашим власним API-ключем, оминаючи network.corifeus.com.",
aiRoutingNetwork: "AI-запити маршрутизуються через network.corifeus.com. Якщо у вас є власний безкоштовний ключ API Groq, ви можете вимкнути цей перемикач.",
aiMaxTokens: "Максимальна кількість токенів AI",
aiMaxTokensInfo: "Максимальна кількість токенів для відповідей AI. Більші значення дозволяють довші відповіді, але можуть використовувати більше API-кредитів.",
consoleDrawer: {
toggleTooltip: "Перемкнути консоль",
clearTooltip: "Очистити історію консолі",
closeTooltip: "Закрити консоль",
aiSettingsTooltip: "Налаштування AI",
modeRedis: "REDIS",
modeAi: "AI",
connectionChipNoDb: opts => `${opts.name}`,
connectionChipWithDb: opts => `${opts.name} · db ${opts.db}`,
pageChip: opts => `сторінка: ${opts.page}`,
connectingTo: opts => `Підключення до ${opts.name}…`,
connectedTo: opts => `Підключено до ${opts.name} (Redis ${opts.version} ${opts.mode}, ${opts.modules} модулів завантажено)`,
connectedToNoInfo: opts => `Підключено до ${opts.name}`,
disconnectedFrom: opts => `Відключено від ${opts.name}`,
notConnected: "Не підключено.",
limitedAiOnly: "Лише обмежений AI — загальні запитання й відповіді про Redis працюють.",
connectHint: "Для живої діагностики введіть: connect <name>",
cheatsheetHint: "Введіть ai: help, щоб побачити, що можна запитати.",
needsConnection: "Для цього потрібне активне підключення. Спочатку введіть \"connect <name>\".",
aiNeedsConnectionReason: "AI у режимі живого стану (використання інструментів) доступний лише під час підключення до Redis.",
verbNeedsConnection: opts => `"${opts.verb}" потребує активного підключення — спочатку введіть "connect <name>".`,
aiLimitedMode: "AI працює в обмеженому режимі — доки ви не підключитесь, доступні лише загальні запитання про Redis.",
welcomeDisconnected: "Вітаємо. Ви ще не підключені до жодного екземпляра Redis.",
readyIndicator: "Готово.",
},
cheatsheet: {
title: "Шпаргалка AI — що можна запитати?",
subtitle: "Клацніть будь-який запит, щоб вставити його в консоль. Потім натисніть Enter.",
searchPlaceholder: "Фільтрувати запити…",
openOfficialDocs: "Redis Commands ↗",
openOfficialDocsTooltip: "Відкрити офіційний довідник команд Redis на redis.io",
closeTooltip: "Закрити (Esc)",
empty: "Жоден запит не відповідає фільтру.",
footerHint: "Підказка: введіть \"ai:\" і будь-який текст будь-якою мовою — AI розуміє 54 мови та за потреби використовує актуальний стан Redis.",
// Each group has: name (category label), match (search-filter alias), prompts (array of example strings)
groups: {
diagnostics: {
name: "Жива діагностика",
description: "Попросіть AI дослідити поточний стан сервера за допомогою безпечних інструментів лише для читання.",
prompts: [
"чому пам'ять завантажена так сильно?",
"покажи 10 найповільніших запитів",
"які клієнти підключені?",
"яка політика maxmemory?",
"чи були нещодавно витіснення ключів?",
"чи є події затримки?",
"скільки часу працює сервер?",
"який коефіцієнт попадань у кеш?",
"покажи завантаження CPU",
"зроби зведення простору ключів",
"скільки пам'яті використовує кожен тип даних?",
"чи щось блокує сервер зараз?"
]
},
keys: {
name: "Ключі",
description: "Досліджуйте, шукайте та аналізуйте ключі без клацань по дереву.",
prompts: [
"знайди всі ключі за шаблоном user:*",
"скільки ключів у кожній базі даних?",
"покажи найбільший hash у цій базі",
"знайди ключі з TTL менше 60 секунд",
"які ключі не мають TTL?",
"якого типу ключ session:abc?",
"оціни пам'ять, яку використовує префікс \"session:\"",
"покажи object encoding для ключа user:42",
"чи є ключі, що скоро закінчать термін дії?",
"який простір імен використовує найбільше пам'яті?"
]
},
dataTypes: {
name: "Типи даних",
description: "Формулювання природною мовою для створення/читання/оновлення для кожного типу Redis.",
prompts: [
"створи hash з ім'ям user:1 з полями name=Alice age=30",
"додай три елементи до list tasks",
"додай членів до set favourites",
"додай членів з балами до sorted set leaderboard",
"додай подію до stream events",
"отримай останні 10 записів зі stream events",
"отримай усі поля hash user:1",
"отримай членів set favourites",
"отримай топ-10 за балами з leaderboard"
]
},
modules: {
name: "Модулі",
description: "Запити до завантажених модулів Redis (категорії нижче з'являються, лише коли модуль присутній).",
prompts: []
},
json: {
name: "RedisJSON",
description: "Доступно, коли завантажений модуль ReJSON.",
prompts: [
"створи JSON-документ у user:42 з { name: \"Alice\", age: 30 }",
"прочитай поле name у user:42",
"онови age у user:42 до 31",
"перелічи всі ключі JSON",
"видали поле з JSON-документа",
"отримай вкладене поле за JSONPath"
]
},
search: {
name: "RediSearch",
description: "Доступно, коли завантажений модуль search.",
prompts: [
"перелічи всі повнотекстові індекси",
"виконай повнотекстовий пошук \"redis\" в індексі idx:products",
"створи індекс на основі hash з полями title (TEXT) і price (NUMERIC)",
"отримай інформацію про індекс idx:products",
"видали індекс idx:products",
"знайди документи, де price від 10 до 50",
"напиши гібридний пошук, що поєднує текст і векторну схожість"
]
},
timeseries: {
name: "RedisTimeSeries",
description: "Доступно, коли завантажений модуль timeseries.",
prompts: [
"перелічи всі ключі timeseries",
"додай точку даних у temp:room1",
"отримай діапазон temp:room1 від вчора до зараз",
"отримай multi-range за міткою sensor=temp",
"згенеруй 100 точок синусоїди для temp:room1",
"покажи retention і мітки для temp:room1"
]
},
bloom: {
name: "RedisBloom (Bloom / Cuckoo / Top-K / CMS / T-Digest)",
description: "Доступно, коли завантажений модуль bf.",
prompts: [
"перевір, чи існує елемент foo у bloom filter spam:ips",
"додай елементи до bloom filter spam:ips",
"створи top-K з ім'ям popular із K=10",
"запитай count-min sketch traffic для ключа /home",
"додай значення до t-digest і отримай 95-й процентиль",
"покажи інформацію про bloom filter spam:ips"
]
},
vectorSet: {
name: "VectorSet (Redis 8+)",
description: "Доступно, коли виявлено Redis 8+ (нативний тип VECTORSET).",
prompts: [
"додай вектор до embeddings",
"знайди 10 найсхожіших векторів до запитового вектора",
"покажи розмірність і кількість у vectorset embeddings",
"видали елемент з vectorset embeddings",
"шукай за ім'ям елемента через VSIM"
]
},
redis8: {
name: "Можливості Redis 8+",
description: "Показується, коли виявлено Redis 8+.",
prompts: [
"встанови TTL для поля hash за допомогою HEXPIRE",
"отримай digest значення рядка",
"виконай гібридний повнотекстовий + векторний пошук (FT.HYBRID)",
"встанови кілька ключів зі спільним терміном дії через MSETEX",
"видали запис потоку з consumer group (XDELEX)",
"покажи cluster slot-stats для топ-10 слотів"
]
},
scripting: {
name: "Скриптинг",
description: "Генеруйте скрипти Lua / EVAL з описів природною мовою.",
prompts: [
"напиши атомарний скрипт, що збільшує counter X тільки якщо Y > 5",
"згенеруй 100 випадкових ключів на Lua",
"перетвори цей shell-конвеєр на один EVAL: keys user:* | GET | grep inactive | DEL",
"портуй пакетну операцію на Lua для безпечної роботи в кластері",
"оновлення в стилі check-and-set одним викликом Lua",
"ітеруй hash і видали поля за шаблоном"
]
},
cluster: {
name: "Кластер",
description: "Показується лише в режимі кластера.",
prompts: [
"покажи інформацію про кластер",
"перелічи вузли кластера",
"покажи топ-10 слотів за кількістю ключів",
"покажи топ-10 слотів за пам'яттю",
"який master володіє слотом 5000?"
]
},
acl: {
name: "ACL (Redis 6+)",
description: "Переглядайте користувачів контролю доступу та поточне підключення.",
prompts: [
"під яким користувачем я підключений?",
"перелічи всіх користувачів ACL",
"які в мене дозволи?",
"покажи правила користувача default"
]
},
qna: {
name: "Загальні питання",
description: "Ставте питання про знання Redis — без інструментів, лише відповіді.",
prompts: [
"що таке ZADD?",
"як працює failover у кластері?",
"поясни SCAN і KEYS",
"коли використовувати EVAL замість кількох команд?",
"які є варіанти персистентності Redis?",
"чим відрізняються RDB і AOF?",
"як Redis Sentinel обирає новий master?",
"поясни hash tags у режимі кластера"
]
},
translate: {
name: "Природна мова → команда Redis",
description: "Опишіть, що ви хочете, простою українською (або будь-якою з 54 мов); AI напише команду Redis.",
prompts: [
"видали ключ user:42",
"перейменуй ключ foo на bar",
"встанови термін дії ключа session:abc на 10 секунд",
"скопіюй ключ source у destination",
"збільш counter visits на 5",
"встанови ключ greeting у \"hello\" на 1 годину",
"покажи 10 найчастіше запитуваних ключів",
"видали всі ключі за шаблоном temp:*"
]
}
}
},
ssh: {
on: 'SSH увімкнено',
off: 'SSH вимкнено',
sshHost: 'SSH-хост',
sshPort: 'SSH-порт',
sshUsername: "SSH ім'я користувача",
sshPassword: 'SSH-пароль',
sshPrivateKey: 'SSH приватний ключ'
},
isBuffer: opts => `[object ArrayBuffer] означає, що значення є бінарними даними або значення більше ніж ${opts.maxValueAsBuffer}`,
streamValue: `Поле та значення Stream записуються в один рядок. Напр.: field1 value1 "field 2" "value 2"`,
streamTimestampId: `'*' означає автоматично згенероване або специфікація як <мілісекундиЧасу>-<номерПослідовності>`,
unableToLoadKey: ({
key
}) => {
return `Неможливо завантажити цей ключ: ${key}. Можливо, ключ було видалено. Точна помилка знаходиться в консолі.`;
},
bigJson: "Цей JSON-об'єкт більше 10 кб, тому переконайтесь, що ви знаєте, що робите, оскільки деякі функції можуть повільно відображатися.",
addNode: "Додати вузол",
validateJson: "Перевірити JSON",
reducedFunction: `Обмежена функціональність`,
tooManyKeys: opts => {
return `Максимальна кількість ключів для повної функціональності — ${opts.maxLightKeysCount}. У цій базі даних ключів більше ніж дозволено: ${opts.count}. Сортування ключів та додаткова інформація дерева вимкнені. Пошук здійснюється лише на сервері, а не на клієнті.`;
},
redisCommandNotFound: "Відповідну команду Redis не знайдено ...",
treeKeyStore: `Сортування (природне порівняння) виконується на клієнті, тобто в браузері, що означає штраф продуктивності для великих наборів, наприклад понад 10 тис. ключів, це може додати трохи часу до рендерингу сторінки. У Redis немає сортування ключів, тільки таким чином.`,
socketIoTimeout: options => {
return `Час очікування Socket.IO для цього запиту вичерпано (макс. ${options.timeout / 1000} секунд) ...`;
},
resizerInfo: options => {
return `Мінімальна ширина лівої або правої панелі — ${options.width}px`;
},
jsonViewNotParsable: "Це значення не може бути розпізнане як JSON ",
ttlTitle: "Встановіть TTL у секундах",
passwordSecure: "Пароль може бути порожнім, але все одно відображатиме символи, це функція безпеки.",
aclAuthHint: "Використовуйте ім’я користувача та пароль Redis ACL для автентифікації. Залиште порожнім для користувача за умовчанням без пароля.",
tlsWithoutCert: "Увімкнути TLS без додаткового сертифіката",
tlsRejectUnauthorized: "Відхилити неавторизований сертифікат",
tlsSecure: "Якщо ви бачите конфігурацію TLS, яка починається з P3X, або всі налаштування TLS виглядають однаково, це функція безпеки. Щоб змінити налаштування, замініть їх порожніми або чимось іншим, і вони будуть збережені. Якщо ви не зміните налаштування TLS, вони залишаться такими, як є на сервері.",
treeSeparatorEmpty: "Якщо роздільник дерева порожній, дерево не матиме вкладених вузлів, лише простий список",
treeSeparatorEmptyNote: "Немає вкладених вузлів, лише простий список",
welcomeConsole: "Ласкаво просимо до консолі Redis",
welcomeConsoleInfo: "SHIFT + Історія курсором ВГОРУ або ВНИЗ увімкнена",
redisListIndexInfo: "Порожнє для додавання в кінець, -1 для додавання на початок або збережіть на показану позицію.",
console: "Консоль",
connectiondAdd: "Додати з'єднання",
connectiondEdit: "Редагувати з'єднання",
connectiondView: "Переглянути з'єднання",
connections: "З'єднання",
keysSort: {
on: "Сортування ключів увімкнено",
off: "Сортування ключів вимкнено"
},
cluster: {
on: "Cluster увімкнено",
off: "Cluster вимкнено"
},
sentinel: {
on: "Sentinel увімкнено",
off: "Sentinel вимкнено",
name: "Назва Sentinel"
},
readonly: {
on: "Лише для читання увімкнено",
off: "Лише для читання вимкнено"
},
theme: {
light: "Світла",
dark: "Темна enterprise",
darkNeu: "Темна",
darkoBluo: "Darko bluo",
enterprise: "Enterprise",
redis: "Redis",
matrix: "Matrix"
},
connected: opts => {
return `Підключено: ${opts.name}`;
},
tree: "Дерево",
askAuth: "Запитати авторизацію",
keyboardShortcuts: "Гарячі клавіші",
about: "Про програму",
supportedLanguages: "Підтримувані мови",
version: "Версія",
redisVersion: "Версія Redis",
modules: "Модулі",
shortcutRefresh: "Оновити",
shortcutSearch: "Фокус на пошуку",
shortcutNewKey: "Новий ключ",
shortcutDisconnect: "Відключити",
themeAuto: "Автоматично (система)",
languageAuto: "Auto (system)",
shortcutCommandPalette: "Палітра команд",
commandPalette: "Палітра команд",
noResults: "Немає результатів",
redisCommandsReference: "Команди Redis",
ungrouped: "Без групи",
grouped: "Згруповані",
connectFirst: "Спочатку підключіться до сервера Redis",
searchLanguage: "Пошук мови...",
exportProgress: "Експорт ключів...",
importProgress: "Імпорт ключів...",
importPreview: "Попередній перегляд",
importOverwrite: "Перезаписати",
importSkip: "Пропустити",
importConflict: "Якщо ключ вже існує:",
noKeysToExport: "Немає ключів для експорту",
time: "Час",
type: "Тип",
format: "Формат",
loading: "Завантаження...",
autoRefresh: "Авто",
exportSearchHint: "Експортуються лише ключі, що відповідають поточному пошуку",
importSearchHint: "Імпорт застосовується до всієї бази даних, а не лише до результатів пошуку",
deleteSearchHint: "Видаляє всі ключі, що відповідають поточному пошуку на сервері",
deletingSearchKeys: "Видалення відповідних ключів...",
importNoKeys: "Ключі не знайдено у файлі",
desktopNotifications: "Сповіщення робочого столу",
desktopNotificationsEnabled: "Увімкнути сповіщення робочого столу",
desktopNotificationsInfo: "Отримуйте сповіщення ОС про від'єднання та повторне підключення Redis, коли програма не у фокусі."
},
status: {
dataCopied: "Дані скопійовано в буфер обміну",
exportDone: "Експорт завершено",
deletedSearchKeys: (opts) => `Видалено ${opts.count} ключів`,
indexCreated: "Індекс створено",
indexDropped: "Індекс видалено",
importDone: (opts) => `Імпорт завершено: ${opts.created} створено, ${opts.skipped} пропущено, ${opts.errors} помилок`,
nodeRemoved: "Вузол видалено",
keyIsNotExisting: "Цей ключ міг бути видалений або його термін дії минув.",
keyCount: opts => {
if (opts.keyCount === 0) {
return "Немає ключів";
} else if (opts.keyCount === 1) {
return "1 ключ";
} else {
return `${opts.keyCount} ключів`;
}
},
treeExpandAll: "Розгорнути всі гілки дерева. Ця операція може бути ресурсоємною і зайняти час ...",
noRedisKeys: "У цій базі даних немає ключів.",
redisConnected: "Redis підключено успішно",
reverted: "\u0421\u043a\u0430\u0441\u043e\u0432\u0430\u043d\u043e",
reloadingDataInfo: "Перезавантаження інформації Redis",
added: "Додано",
saved: "Оновлено",
cancelled: "Скасовано",
deleted: "Видалено",
savedRedis: "Дані Redis збережено",
redisDisconnected: opts => {
return `Поточне з'єднання мало помилку: ${opts.error.message}`;
},
dbChanged: opts => {
return `Індекс БД встановлено на ${opts.db}. `;
},
treeDeleted: opts => {
return `Ключ дерева було видалено (${opts.key}).`;
},
deletedKey: opts => {
return `Ключ було видалено (${opts.key}).`;
},
renamedKey: "Цей ключ було перейменовано",
ttlChanged: "TTL цього ключа було змінено",
notInteger: "Це введення не є цілим числом",
persisted: "Цей ключ зберігається назавжди",
set: "Ключ встановлено/додано",
connectionRestored: "З'єднання відновлено",
socketDisconnected: "Від'єднано",
socketError: "Помилка з'єднання",
deletedHashKey: "Хеш-ключ видалено",
deletedSetMember: "Член множини видалено",
deletedListElement: "Елемент списку видалено",
deletedZSetMember: "Член відсортованої множини видалено",
deletedStreamTimestamp: "Запис потоку видалено",
},
code: {
"delete-connection": "Це з'єднання було видалено, тому вас від'єднано від цього екземпляра Redis.",
"save-connection": "Це з'єднання було змінено, тому вас від'єднано від цього екземпляра Redis. Ви можете підключитися знову.",
"readonly-connections": "Додавання/збереження/видалення з'єднань доступне лише для читання!",
"readonly-connection-mode": "Це з'єднання в режимі лише для читання!",
"list-out-of-bounds": "Цей індекс списку виходить за межі",
"invalid-json-value": "The value is not valid JSON.",
"http_auth_required": "Потрібна авторизація: будь ласка, автентифікуйтесь за допомогою HTTP Basic Auth та перезавантажте.",
"auto-connection-failed": "Можливо, з'єднання було видалено і через це автоматичне підключення не вдалося.",
invalid_console_command: "Ця команда не працює через GUI.",
"AI_DISABLED": "AI вимкнено. Увімкніть його в налаштуваннях AI.",
"AI_PROMPT_REQUIRED": "Потрібен запит AI.",
"GROQ_API_KEY_READONLY": "Ключ Groq API доступний лише для читання і не може бути змінений.",
"blocked_api_access": "Ваш план Groq API не дозволяє доступ до цієї моделі. Оновіть план Groq або використовуйте проксі network.corifeus.com.",
"rate_limit": "Досягнуто ліміт AI. Спробуйте пізніше або використовуйте власний ключ Groq API в налаштуваннях."
},
form: {
error: {
required: "Обов'язкове",
port: "Порт повинен бути між 1-65535",
invalid: "Форма недійсна"
},
connection: {
label: {
name: "Назва",
group: "Група",
host: "Ім'я хоста",
port: "Порт",
password: "Пароль",
username: "Ім'я користувача"
}
},
treeSettings: {
maxValueDisplay: "Максимальна довжина відображення значення",
maxValueDisplayInfo: "Якщо встановлено 0, показувати повні значення. Якщо більше 0, обрізати до цієї довжини. Якщо -1: для рядків — приховати значення до редагування; для інших типів — показувати повний вміст.",
maxKeys: "Максимальна кількість ключів",
maxKeysInfo: "Щоб GUI не зламався, ми обмежуємо максимальну кількість ключів.",
keyCount: (opts) => {
return `Кількість ключів: ${opts?.keyCount ?? 0}`;
},
label: {
animation: "Використовувати анімацію",
noAnimation: "Без анімації",
undoEnabled: "\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u043d\u043d\u044f \u0443\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e",
undoDisabled: "\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
diffEnabled: "\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 diff \u043f\u0435\u0440\u0435\u0434 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f\u043c",
diffDisabled: "Diff \u043f\u0435\u0440\u0435\u0434 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f\u043c \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
jsonFormatTwoSpace: "Форматувати JSON з 2 пробілами",
jsonFormatFourSpace: "Форматувати JSON з 4 пробілами",
formName: "Налаштування Redis",
searchModeClient: "Режим пошуку на клієнті",
searchModeServer: "Режим пошуку на сервері",
searchModeStartsWith: "Пошук з режимом «починається з»",
searchModeIncludes: "Пошук з режимом «містить»"
},
undoHint: "\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u043d\u043d\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0435 \u043b\u0438\u0448\u0435 \u0434\u043b\u044f \u0442\u0438\u043f\u0456\u0432 \u043a\u043b\u044e\u0447\u0456\u0432 string \u0456 JSON",
field: {
treeSeparator: "Роздільник дерева",
treeSeparatorSelector: "Вибір роздільника дерева",
page: "Кількість сторінок дерева",
keyPageCount: "Кількість сторінок ключів",
keysSort: "Сортувати ключі",
searchMode: "Режим пошуку",
searchModeStartsWith: "Пошук починається з / містить"
},
error: {
keyPageCount: "Кількість сторінок ключів повинна бути цілим числом від 5 до 100",
page: "Кількість сторінок повинна бути цілим числом від 10 до 5000",
maxValueDisplay: "Максимальне значення відображення повинно бути цілим числом від -1 до 32768",
maxKeys: "Максимальна кількість ключів повинна бути цілим числом від 100 до 100000"
}
},
key: {
label: {
formName: {
add: "Додати новий Redis-ключ",
edit: "Редагувати Redis-ключ",
append: "Додати до існуючого Redis-ключа"
}
},
field: {
streamTimestamp: "Мітка часу",
key: "Ключ",
type: "Тип",
index: "Індекс",
hashKey: "Хеш-ключ",
score: "Оцінка",
value: "Значення",
errorRate: "Частота помилок",
capacity: "Ємність",
topk: "Top K",
width: "Ширина",
depth: "Глибина",
decay: "Згасання",
compression: "Стиснення",
increment: "Інкремент",
item: "Елемент",
vectorValues: "Значення вектора (через кому)",
element: "Назва елемента",
},
error: {
streamTimestamp: "Мітка часу обов'язкова, у форматі Redis або як *",
key: "Ключ повинен містити щонайменше один символ",
hashKey: "Ключ хеш-таблиці повинен містити щонайменше один символ",
score: "Оцінка впорядкованої множини обов'язкова",
value: "Значення обов'язкове",
errorRate: "Частота помилок повинна бути від 0 до 1 (напр. 0.01)",
capacity: "Ємність повинна бути додатним цілим числом",
topk: "Top K повинен бути додатним цілим числом",
width: "Ширина повинна бути додатним цілим числом",
depth: "Глибина повинна бути додатним цілим числом",
item: "Елемент обов'язковий"
}
},
main: {
label: {
database: "DB"
}
}
},
page: {
search: {
title: "Пошук",
index: "Індекс",
query: "Запит",
results: "Результати",
noIndex: "Індекси не знайдено",
createIndex: "Створити індекс",
dropIndex: "Видалити індекс",
indexInfo: "Інформація про індекс",
indexName: "Назва індексу",
prefix: "Префікс ключа (необов'язково)",
fieldName: "Назва поля",
hybridMode: "Гібридний пошук (FT.HYBRID)",
vectorField: "Векторне поле",
vectorValues: "Значення вектора",
},
monitor: {
title: "Моніторинг",
memory: "Пам'ять",
opsPerSec: "Операцій/сек",
clients: "Клієнти",
blocked: "Заблоковано",
hitsMisses: "Влучність",
networkIo: "Мережа I/O",
slowLog: "Повільний журнал",
noSlowQueries: "Повільних запитів не зареєстровано.",
confirmSlowLogReset: "Ви впевнені, що бажаєте скинути повільний журнал?",
slowLogResetDone: "Повільний журнал було скинуто.",
totalCommands: "Всього",
expired: "Прострочено",
evicted: "Витіснено",
clientList: "Список клієнтів",
topKeys: "Найбільші ключі за памяттю",
killClient: "Завершити клієнта",
clientKilled: "Клієнта завершено",
confirmKillClient: "Ви впевнені, що хочете завершити цього клієнта?",
noKeys: "Немає ключів",
rss: "RSS",
peak: "Пік",
fragmentation: "Фрагментація",
hitsAndMisses: "Влучання / Промахи",
noClients: "Немає клієнтів",
slotStats: "Статистика слотів кластера",
serverInfo: "Інформація про сервер",
os: "Операційна система",
port: "Мережевий порт",
pid: "ID процесу",
configFile: "Файл конфігурації",
uptime: "Час роботи",
keyspace: "Ключовий простір Redis",
keys: "Ключі Redis",
expires: "Термін дії закінчується",
noKeyspace: "Немає ключів",
persistence: "Постійність даних",
rdbLastSave: "Останнє збереження RDB",
rdbStatus: "Статус RDB",
rdbChanges: "Зміни після останнього збереження",
aofEnabled: "AOF увімкнено",
aofSize: "Розмір AOF",
replication: "Реплікація Redis",
role: "Роль реплікації",
replicas: "Підключені репліки",
masterHost: "Основний хост",
linkStatus: "Стан посилання реплікації",
cpu: "Використання ЦП",
cpuSys: "система",
cpuUser: "Користувач",
modules: "Завантажено модулі Redis",
noModules: "Немає завантажених модулів Redis",
clusterSlotMap: "Карта слота кластера Redis",
slotRange: "Діапазон кластерних слотів",
totalSlots: "Загальна кількість слотів кластера",
noClusterData: "Дані кластера Redis відсутні.",
},
analysis: {
title: "Аналіз пам'яті",
runAnalysis: "Запустити аналіз",
running: "Аналіз...",
typeDistribution: "Розподіл типів",
prefixMemory: "Пам'ять за префіксом",
topKeysByMemory: "Найбільші ключі за пам'яттю",
expirationOverview: "Термін дії ключів",
memoryBreakdown: "Розбивка пам'яті",
keysScanned: "Проскановано ключів",
totalMemory: "Загальна пам'ять",
rssMemory: "RSS пам'ять",
peakMemory: "Пікова пам'ять",
luaMemory: "Lua пам'ять",
overheadMemory: "Накладні витрати",
datasetMemory: "Набір даних",
fragmentation: "Фрагментація",
allocator: "Алокатор",
withTTL: "З TTL",
persistent: "Постійні",
avgTTL: "Середній TTL",
prefix: "Префікс",
keyCount: "Кількість ключів",
memoryUsage: "Використання пам'яті",
noPrefix: "(без префікса)",
topN: "Top N",
maxScanKeys: "Макс. сканованих ключів",
type: "Тип",
noData: "Немає даних. Натисніть Запустити аналіз, щоб почати.",
exportAll: "Експорт усього",
memoryDoctor: "Memory Doctor",
doctorNoData: "Натисніть Оновити, щоб запустити діагностику Memory Doctor.",
},
acl: {
title: "Користувачі ACL",
loadUsers: "Завантажити користувачів",
loading: "Завантаження...",
username: "Ім'я користувача",
status: "Статус",
enabled: "Увімкнено",
disabled: "Вимкнено",
commands: "Команди",
commandsHint: "наприклад, +@all or +@read -@dangerous",
keys: "Ключові шаблони Redis",
keysHint: "наприклад, ~* or ~user:*",
channels: "Канали Pub/Sub",
channelsHint: "наприклад, &* or ¬ifications:*",
password: "Пароль",
noPassword: "Без пароля (nopass)",
passwordHint: "Залиште пустим, щоб зберегти поточний пароль",
currentUser: "поточний",
createUser: "Створити користувача",
editUser: "Редагувати користувача",
deleteUser: "Видалити",
confirmDelete: "Ви впевнені, що бажаєте видалити користувача ACL?",
userDeleted: "Користувача ACL було видалено.",
userSaved: "Користувача ACL було збережено.",
cannotDeleteDefault: "Неможливо видалити користувача за умовчанням.",
cannotDeleteSelf: "Неможливо видалити підключеного користувача.",
noUsers: "ACL вимагає Redis 6.0+.",
groupCommon: "Загальні",
groupDataTypes: "Типи даних",
groupOperations: "Операції",
rules: "Правила",
rulesHint: "Маркери, розділені пробілами (наприклад, on >password +@all ~* &*)",
defaultUserWarning: "Застереження: зміна користувача за умовчанням може заблокувати всі підключення. Якщо це станеться, вам потрібно буде перезапустити Redis або використати redis-cli, щоб відновити доступ.",
},
overview: {
noConnected: "Немає підключення до Redis.",
overviewClients: "Перелік підключених за кількістю клієнтів",
connectedCount: opt => {
if (opt.length === 1) {
return "1 клієнт";
}
return `${opt.length} клієнтів`;
}
},
key: {
label: {
key: "Ключ",
encoding: "Кодування",
compression: "Стиснення",
aiRateLimited: "Досягнуто ліміт запитів AI. Спробуйте пізніше або використовуйте власний ключ Groq API в Налаштуваннях.",
aiError: "Запит AI не вдався",
length: "Розмір",
ttl: "TTL",
ttlTitle: "Час життя",
type: "Тип",
ttlNotExpire: "не закінчується",
lengthString: "байт",
lengthItem: "елементів",
actions: "Дії"
},
list: {
table: {
index: "Індекс",
value: "Значення"
}
},
hash: {
table: {
hashkey: "Хеш-ключ",
value: "Значення"
}
},
set: {
table: {
value: "Член"
}
},
zset: {
table: {
value: "Член",
score: "Оцінка"
}
},
stream: {
table: {
timestamp: "ID мітки часу",
field: "Поле",
value: "Значення"
}
},
timeseries: {
chart: "Графік",
info: "Інформація",
addPoint: "Додати точку даних",
from: "Від (мс або -)",
to: "До (мс або +)",
aggregation: "Агрегація",
timeBucket: "Інтервал (мс)",
none: "Немає",
dataPoints: "точки даних",
labels: "Мітки",
rules: "Правила",
retention: "Зберігання",
timestamp: "Мітка часу",
value: "Значення",
retentionHint: "0 = без закінчення терміну, або мілісекунди",
duplicatePolicy: "Політика дублікатів",
labelsHint: "ключ1 значення1 ключ2 значення2",
timestampHint: "'*' означає автоматичне генерування, або мітка часу в мілісекундах",
editAllHint: "Один запис на рядок: мітка_часу значення (мітка_часу може бути * для авто)",
autoSpread: "Автоматичний інтервал розподілу *",
formula: "Формула",
formulaLinear: "Лінійна",
formulaRandom: "Випадкова",
formulaSawtooth: "Пилоподібна",
formulaPoints: "Точки",
formulaAmplitude: "Амплітуда",
formulaOffset: "Зміщення",
generate: "Згенерувати",
exportChart: "Експорт PNG",
overlay: "Накладання ключів",
overlayHint: "Ключі через кому",
mrangeFilter: "Фільтр міток",
bulkMode: "Масова генерація",
mrangeHint: "напр. sensor=temp"
},
probabilistic: {
info: "Інформація",
addItem: "Додати елемент",
checkItem: "Перевірити елемент",
item: "Елемент",
exists: "Існує",
doesNotExist: "Не існує",
topkList: "Основні елементи",
topkCount: "Кількість",
queryCount: "Кількість запитів",
queryResult: "Результат запиту",
addedSuccessfully: "Елемент успішно додано",
deletedSuccessfully: "Елемент успішно видалено",
quantile: "Квантиль",
quantileResult: "Результат",
noItems: "Немає елементів для відображення",
resetConfirm: "Скинути всі дані в цьому T-Digest?"
},
vectorset: {
info: "Інформація",
elements: "Елементи",
similarity: "Пошук за подібністю",
searchByElement: "Пошук за елементом",
searchByVector: "Пошук за вектором",
vectorValues: "Значення вектора",
element: "Елемент",
score: "Оцінка",
count: "Кількість",
addElement: "Додати елемент",
attributes: "Атрибути",
noAttributes: "Немає атрибутів",
dimensions: "Розмірності",
removeConfirm: "Видалити цей елемент з VectorSet?",
noElements: "Немає елементів",
filter: "Фільтр",
searchComplete: "Пошук завершено",
}
},
treeControls: {
settings: "Налаштування дерева",
expandAll: "Розгорнути все",
collapseAll: "Згорнути все",
level: "Рівень",
search: {
search: "Пошук серед ключів",
clear: "Очистити поточний пошук",
placeholderClient: "Пошук на стороні клієнта",
placeholderServer: "Пошук на стороні сервера",
info: (opts) => "Пошук на стороні клієнта означає, що текст збігається з введеним у пошуковому полі. Пошук на стороні сервера означає пошук у шаблонах ключів як *{текст-пошуку}*. Для великих наборів даних краще використовувати пошук на стороні сервера. Для менших наборів даних краще використовувати пошук на стороні клієнта." + ` Якщо кількість ключів перевищує ${opts?.maxLightKeysCount ?? 110000}, ви можете шукати лише на стороні сервера.`,
largeSetInfo: "У великому наборі даних пошук на стороні клієнта вимкнено, тому зараз можливий лише пошук на стороні сервера.",
infoDetails: "Щоб дізнатися, як працює пошук, перегляньте налаштування"
},
pager: {
next: "Наступна",
prev: "Попередня",
first: "Перша",
last: "Остання"
}
}
},
time: {
years: "років",
months: "місяців",
days: "днів",
year: "рік",
month: "місяць",
day: "день",
second: "секунда",
seconds: "секунди",
minute: "хвилина",
minutes: "хвилини",
hour: "година",
hours: "години"
},
redisTypes: {
string: "String",
list: "List",
hash: "Hash table",
set: "Set",
zset: "Sorted set - zset",
stream: "Stream",
json: "JSON",
timeseries: "Time Series",
bloom: "Bloom фільтр",
cuckoo: "Cuckoo фільтр",
topk: "Top-K",
cms: "Count-Min Sketch",
tdigest: "T-Digest",
vectorset: "VectorSet",
},
promo: {
title: "AI-помічник для мережі",
description: "Відкрийте для себе наш безкоштовний AI-помічник для мережі на network.corifeus.com — аналізуйте домени, IP-адреси, DNS-записи, SSL-сертифікати, безпеку електронної пошти та мережеву інфраструктуру. Працює на базі AI для миттєвих і всебічних результатів.",
disclaimer: "Це промо показується лише на demo-сайті й не з’являється в розгортаннях Docker, Electron або вебзастосунку.",
toastMessage: "Спробуйте наш безкоштовний AI-помічник для мережі на network.corifeus.com — аналізуйте домени, DNS, SSL та багато іншого!",
visit: "Відкрити network.corifeus.com",
}
};
module.exports = strings;