RSS Git Download  Clone
Raw Blame History 63kB 1084 lines
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: "БД",
    server: "Сървър",
    clients: "Клиенти",
    memory: "Памет",
    persistence: "Устойчивост",
    stats: "Статистика",
    replication: "Репликация",
    cpu: "CPU",
    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: {
    // When you translate the english name, keep the Language in English
    // eg. Inglés / English
    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",
    // When you translate the language, keep the Language in English
    // eg. Idioma / Language
    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\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u043f\u0440\u043e\u043c\u0435\u043d\u0438\u0442\u0435",
    inline: "\u0412 \u0440\u0435\u0434",
    sideBySide: "\u0415\u0434\u0438\u043d \u0434\u043e \u0434\u0440\u0443\u0433",
    additions: "\u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0438\u044f",
    deletions: "\u0438\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0438\u044f",
    unchangedLines: "\u043d\u0435\u043f\u0440\u043e\u043c\u0435\u043d\u0435\u043d\u0438 \u0440\u0435\u0434\u043e\u0432\u0435",
    noChanges: "\u041d\u044f\u043c\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438",
    before: "\u041f\u0440\u0435\u0434\u0438",
    after: "\u0421\u043b\u0435\u0434",
  },
  label: {
    id: {
      nodeId: 'ID на възела',
      id: "ID на връзката",
      info: "Ако не искате да променяте свойствата: sshPassword, sshPrivateKey, password, tlsCrt, tlsKey, tlsCa, моля въведете ID на връзката в тези полета, за да запазите стойностите на свойствата. Ако искате същата логика за паролата на възела, въведете ID на възела в паролата на възела."
    },
    secureFeature: 'Ако видите стойност, която започва с P3X и изглежда еднаква, това е защитна функция. За да промените настройките, просто заменете тези настройки с празни или нещо друго и те ще бъдат запазени. Ако не промените настройките, те ще бъдат запазени така, както са на сървъра.',
    aiTranslating: "Превод...",
    aiSettings: "AI Настройки",
    aiGroqApiKey: "Groq API ключ",
    aiGroqApiKeyInfo: "По избор. Собствен Groq API ключ за по-добра производителност. Получете безплатен ключ от",
    aiGroqApiKeyPlaceholder: "gsk_...",
    aiGroqApiKeySaved: "AI API ключът е запазен",
    aiGroqApiKeyInvalid: "Невалиден Groq API ключ",
    aiGroqApiKeyNotSet: "Не е зададен (по подразбиране на сървъра)",
    aiEnabled: "AI активирано",
    aiEnabledYes: "Да",
    aiEnabledNo: "Не",
    aiRouteViaNetwork: "Пренасочване чрез network.corifeus.com",
    aiRoutingDirect: "Заявките отиват директно към Groq с вашия собствен API ключ, заобикаляйки network.corifeus.com.",
    aiRoutingNetwork: "AI заявките се насочват през network.corifeus.com. Ако имате свой безплатен Groq API ключ, можете да изключите този превключвател, за да насочвате директно към Groq без network.corifeus.com.",
    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}`,
      readyIndicator: "Готови."
    },
    cheatsheet: {
      title: "AI Cheatsheet — Какво мога да попитам?",
      subtitle: "Щракнете върху произволна подкана, за да я поставите в конзолата. След това натиснете Enter.",
      searchPlaceholder: "Подкани за филтриране...",
      openOfficialDocs: "Redis Команди ↗",
      openOfficialDocsTooltip: "Отворете официалния справочник за команди Redis на адрес redis.io",
      closeTooltip: "Затваряне (Esc)",
      empty: "Няма подкани, които отговарят на вашия филтър.",
      footerHint: "Съвет: въведете „ai:“, последвано от нещо на който и да е език — AI разбира 54 езика и използва състояние на живо Redis, когато е необходимо.",
      groups: {
        diagnostics: {
          name: "Диагностика на живо",
          description: "Помолете AI да проучи състоянието на сървъра на живо чрез безопасни инструменти само за четене.",
          prompts: [
            "защо паметта е висока?",
            "покажи ми 10-те най-бавни заявки",
            "кои клиенти са свързани?",
            "каква е политиката за максимална памет?",
            "има ли скорошни изгонвания?",
            "има ли латентно събитие?",
            "колко време работи сървъра?",
            "какъв е процентът на попадение?",
            "показване на използването на процесора",
            "обобщете пространството на ключовете",
            "колко памет използва всеки тип данни?",
            "блокира ли нещо сървъра в момента?"
          ]
        },
        keys: {
          name: "Ключове",
          description: "Проверете, намерете и обсъдете ключовете, без да щракате през дървото.",
          prompts: [
            "намери всички ключове, съответстващи на user:*",
            "колко ключа във всяка база данни?",
            "покажи най-големия хеш в този db",
            "намиране на ключове с TTL по-малко от 60 секунди",
            "кои ключове нямат TTL?",
            "какъв тип е ключът session:abc?",
            "оценка на паметта, използвана от префикса \"session:\"",
            "показва кодирането на обекта на ключ user:42",
            "има ли ключове, които изтичат?",
            "кое пространство от имена използва най-много памет?"
          ]
        },
        dataTypes: {
          name: "Типове данни",
          description: "Фразиране на естествен език за създаване/четене/актуализиране на всеки тип Redis.",
          prompts: [
            "създайте хеш с име user:1 с полета name=Alice age=30",
            "добавете три елемента към списък tasks",
            "добавете членове към набор favourites",
            "добавете отбелязани членове към сортиран набор leaderboard",
            "добавете събитие към потока events",
            "вземете последните 10 записа от поток events",
            "вземете всички полета на хеш потребител:1",
            "вземете членове на набор favourites",
            "вземете топ 10 по резултат от leaderboard"
          ]
        },
        modules: {
          name: "Модули",
          description: "Заявки за заредени модули Redis (категориите по-долу се показват само когато модулът присъства).",
          prompts: []
        },
        json: {
          name: "RedisJSON",
          description: "Налично, когато модулът ReJSON е зареден.",
          prompts: [
            "създайте документ JSON на user:42 с { име: \"Alice\", възраст: 30 }",
            "прочетете полето за име на user:42",
            "актуализиране на възрастта на user:42 до 31",
            "избройте всички ключове JSON",
            "изтриване на поле от документ JSON",
            "вземете вложено поле с помощта на JSONPath"
          ]
        },
        search: {
          name: "RediSearch",
          description: "Налично, когато модулът за търсене е зареден.",
          prompts: [
            "списък на всички индекси на пълен текст",
            "стартирайте търсене в пълен текст за \"redis\" на индекс idx:products",
            "създайте хеш-подкрепен индекс с полета заглавие (TEXT) и цена (NUMERIC)",
            "получете информация за индекс idx:products",
            "спад индекс idx:products",
            "намерете документи, чиято цена е между 10 и 50",
            "напишете хибридно търсене, комбинирайки текстово и векторно сходство"
          ]
        },
        timeseries: {
          name: "RedisTimeSeries",
          description: "Налично, когато модулът за времеви серии е зареден.",
          prompts: [
            "избройте всички ключове за времеви серии",
            "добавете точка за данни към temp:room1",
            "вземете обхвата на temp:room1 от вчера до сега",
            "вземете многообхват по етикет sensor=temp",
            "генериране на 100 точки от данни за синусоида за temp:room1",
            "показване на задържане и етикети за temp:room1"
          ]
        },
        bloom: {
          name: "RedisBloom (Блум / Кукувица / Top-K / CMS / T-Digest)",
          description: "Налично, когато bf модулът е зареден.",
          prompts: [
            "проверете дали елемент foo съществува във филтъра за разцвет spam:ips",
            "добавете елементи към филтъра за разцвет spam:ips",
            "създайте топ-K с име popular с K=10",
            "query count-min sketch traffic за ключ /home",
            "добавете стойности към t-digest и вземете 95-ия персентил",
            "показване на информация за филтър за разцвет spam:ips"
          ]
        },
        vectorSet: {
          name: "VectorSet (Redis 8+)",
          description: "Налично, когато се открие Redis 8+ (роден тип VECTORSET).",
          prompts: [
            "добавете вектор към embeddings",
            "намерете 10-те най-сходни вектора с вектор на заявка",
            "покажете размери и брой вектори embeddings",
            "изтриване на елемент от векторен набор embeddings",
            "търсене по име на елемент с VSIM"
          ]
        },
        redis8: {
          name: "Redis 8+ функции",
          description: "Показва се при откриване на Redis 8+.",
          prompts: [
            "задайте хеш поле ttl с HEXPIRE",
            "вземете дайджест на стойност на низ",
            "изпълнете хибридно пълнотекстово + векторно търсене (FT.HYBRID)",
            "задайте множество ключове със споделено изтичане с помощта на MSETEX",
            "изтриване на запис в поток с потребителска група (XDELEX)",
            "показване на статистически данни за слотовете на клъстера за първите 10 слотове"
          ]
        },
        scripting: {
          name: "Скриптиране",
          description: "Генерирайте Lua / EVAL скриптове от описания на естествен език.",
          prompts: [
            "напишете атомен скрипт, който увеличава counter X само ако Y > 5",
            "генерирайте 100 произволни ключа с Lua",
            "преобразувайте този шел конвейер в единичен EVAL: ключове user:* | ВЗЕМЕТЕ | grep неактивен | DEL",
            "портиране на групова операция към Lua за безопасност на клъстера",
            "проверка и задаване на стилова актуализация в едно Lua повикване",
            "итерация върху хеш и изтриване на полета, съответстващи на шаблон"
          ]
        },
        cluster: {
          name: "Клъстер",
          description: "Показва се само в клъстерен режим.",
          prompts: [
            "показва информация за клъстера",
            "списък на клъстерните възли",
            "покажете първите 10 слота по брой ключове",
            "покажете първите 10 слота по памет",
            "кой майстор притежава слот 5000?"
          ]
        },
        acl: {
          name: "ACL (Redis 6+)",
          description: "Проверете потребителите за контрол на достъпа и текущата връзка.",
          prompts: [
            "с кого съм свързан?",
            "избройте всички потребители на ACL",
            "какви разрешения имам?",
            "показва потребителските правила по подразбиране"
          ]
        },
        qna: {
          name: "Общи въпроси и отговори",
          description: "Задавайте Redis въпроси за знания — без инструменти, само отговори.",
          prompts: [
            "какво е ZADD?",
            "как работи отказът на клъстера?",
            "обяснете SCAN срещу KEYS",
            "кога трябва да използвам EVAL срещу множество команди?",
            "какви са опциите за постоянство Redis?",
            "каква е разликата между RDB и AOF?",
            "как Redis Sentinel взема решение за нов майстор?",
            "обяснете хеш тагове в клъстерен режим"
          ]
        },
        translate: {
          name: "Команда на естествен език → Redis",
          description: "Опишете какво искате на някой от 54 езика; AI записва командата Redis.",
          prompts: [
            "ключ за изтриване user:42",
            "преименувайте ключа foo на лента",
            "ключът изтича session:abc след 10 секунди",
            "копирайте източника на ключ към дестинацията",
            "увеличаване на брояча на посещенията с 5",
            "задайте ключов поздрав на \"hello\" за 1 час",
            "изтрий всички ключове user:*",
            "покажи ми 10-те най-натоварени ключа"
          ]
        }
      }
    },
    ssh: {
      on: 'SSH включен',
      off: 'SSH изключен',
      sshHost: 'SSH Хост',
      sshPort: 'SSH Порт',
      sshUsername: 'SSH Потребителско име',
      sshPassword: 'SSH Парола',
      sshPrivateKey: 'SSH Частен ключ'
    },
    isBuffer: opts => `[object ArrayBuffer] означава, че стойността е двоични данни или стойността е по-голяма от ${opts.maxValueAsBuffer}`,
    streamValue: `Полето и стойността на потока са на един ред. Напр.: field1 value1 "field 2" "value 2"`,
    streamTimestampId: `'*' означава автоматично генериране или спецификация като <millisecondsTime>-<sequenceNumber>`,
    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: "Клъстер включен",
      off: "Клъстер изключен"
    },
    sentinel: {
      on: "Sentinel включен",
      off: "Sentinel изключен",
      name: "Sentinel име"
    },
    readonly: {
      on: "Readonly включен",
      off: "Readonly изключен"
    },
    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: "\u041e\u0442\u043c\u0435\u043d\u0435\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 не позволява достъп до този модел. Моля, надградете плана си или използвайте прокси 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: "\u041e\u0442\u043c\u044f\u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430",
        undoDisabled: "\u041e\u0442\u043c\u044f\u043d\u0430 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0430",
        diffEnabled: "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u0439 diff \u043f\u0440\u0435\u0434\u0438 \u0437\u0430\u043f\u0438\u0441",
        diffDisabled: "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 diff \u043f\u0440\u0435\u0434\u0438 \u0437\u0430\u043f\u0438\u0441 \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
        jsonFormatTwoSpace: "Форматиране на JSON с 2 интервала",
        jsonFormatFourSpace: "Форматиране на JSON с 4 интервала",
        formName: "Redis настройки",
        searchModeClient: "Търсене от страната на клиента",
        searchModeServer: "Търсене от страната на сървъра",
        searchModeStartsWith: "Търсене с режим 'започва с'",
        searchModeIncludes: "Режим на търсене 'съдържа'"
      },
      undoHint: "\u041e\u0442\u043c\u044f\u043d\u0430\u0442\u0430 \u0435 \u043d\u0430\u043b\u0438\u0447\u043d\u0430 \u0441\u0430\u043c\u043e \u0437\u0430 \u0442\u0438\u043f\u043e\u0432\u0435 \u043a\u043b\u044e\u0447\u043e\u0432\u0435 string \u0438 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: "БД"
      }
    }
  },
  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 &notifications:*",
      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 Assistant на network.corifeus.com — анализирайте домейни, IPs, DNS записи, SSL сертификати, имейл сигурност и мрежова инфраструктура. Осъществено от AI за незабавни, изчерпателни резултати.",
    disclaimer: "Тази промоция се показва само на демонстрационния сайт и няма да се показва в Docker, Electron или внедрявания на уеб приложения.",
    toastMessage: "Изпробвайте нашия безплатен AI Network Assistant на адрес network.corifeus.com — анализирайте домейни, DNS, SSL и още!",
    visit: "Посетете network.corifeus.com"
  }
};
module.exports = strings;