diff --git a/src/components/LocaleSelectorModal.tsx b/src/components/LocaleSelectorModal.tsx index e6029a0..3d80d96 100644 --- a/src/components/LocaleSelectorModal.tsx +++ b/src/components/LocaleSelectorModal.tsx @@ -23,6 +23,7 @@ export default function LocaleSelectorModal() { + {/* Add language here with the name of the language in his native name */} diff --git a/src/locales/LocaleTranslations.tsx b/src/locales/LocaleTranslations.tsx index 38719d2..e45e28b 100644 --- a/src/locales/LocaleTranslations.tsx +++ b/src/locales/LocaleTranslations.tsx @@ -6,4 +6,5 @@ export default { ch: require("./ch.json") as Record, de: require("./de.json") as Record, tr: require("./tr.json") as Record, + ru: require("./ru.json") as Record, }; diff --git a/src/locales/ru.json b/src/locales/ru.json new file mode 100644 index 0000000..2e6d652 --- /dev/null +++ b/src/locales/ru.json @@ -0,0 +1,119 @@ +{ + "topbar.discord": "Присоединяйтесь к нам в Discord", + "topbar.beer": "На кружечку пива ❤️", + "presetButtons.applyPresetTooltip": "Пресет будет загружен в таблицы RyzenAdj и применен", + "presetButtons.loadPresetTooltip": "Пресет будет загружен в таблицы RyzenAdj, но не применен", + "presetAutoApply.whenSessionResume": "При продолжении сессии", + "presetAutoApply.whenRCStart": "При старте Ryzen Controller", + "presetAutoApply.whenLaptopPluggedIn": "Когда подключено питание ноутбука", + "presetAutoApply.whenLaptopPluggedOut": "При работе ноутбука от АКБ", + "presetButtons.confirmDeletion": "Вы уверены, что хотите удалить \"{preset}\"?", + "presetButtons.loadedPreset": "Пресет {preset} загружен", + "presetButtons.uploadPresetConfirmation": "Вы уверены, что хотите выгрузить {preset}?", + "presetListEmpty.youDontHaveAny": "У вас еще нет ни одного пресета", + "presetListEmpty.sentencePart1": "Вы можете создать пресет, используя кнопку", + "presetListEmpty.createPresetBtn": "Создать пресет", + "presetListEmpty.sentencePart2": ", которая доступна в таблицах настроек RyzenAdj (CPU, GPU, ...).", + "PresetOnline.listNotLoadedYet": "Список пресетов не загружен, либо онлайн-пресетов ещё нет", + "PresetOnline.loadPresetListBtn": "Загрузить список пресетов", + "PresetOnline.sentencePart1": "Вы можете поделиться собственным пресетом, нажав на кнопку", + "PresetOnline.uploadBtn": "Выгрузить", + "PresetOnline.sentencePart2": ", доступную при наличии ваших пресетов.", + "sceneSelector.cpuTitle": "ЦП", + "sceneSelector.gpuTitle": "ГП Vega", + "ryzenAdj.maxGfxclk.label": "Максимальная частота Vega iGPU (МГц)", + "ryzenAdj.stapmTime.desc": "Skin Temperature Aware Power Management (STAPM). Определяет период буста, который будет использоваться", + "ryzenAdj.slowLimit.desc": "Количество энергии, которое процессор может использовать при отключенных уровнях буста", + "appContext.minimizeOnLaunch.name": "Сворачивать при запуске", + "appContext.ryzenAdjPath.name": "Путь к RyzenAdj", + "sceneSelector.settingsTitle": "Настройки", + "sceneSelector.powerTitle": "Питание", + "ryzenAdj.slowTime.desc": "Определяет период времени, который будет использоваться вне периода буста, чтобы обеспечить постоянную мощность, которая должна быть подана от БП", + "ryzenAdj.slowTime.label": "Отслеживание мощности пакета (PPT) - медленный период времени", + "ryzenAdj.minFclkFrequency.desc": "Infinity Fabric - это маркетинговый термин AMD для моста, соединяющего процессоры (ГП / ЦП), определяющий ограничение мин. частоты шины", + "ryzenAdj.maxFclkFrequency.desc": "Infinity Fabric - это маркетинговый термин AMD для моста, соединяющего процессоры (ГП / ЦП), определяющий ограничение макс. частоты шины", + "ryzenAdj.stapmLimit.desc": "Skin Temperature Aware Power Management (STAPM). Определяет предел питания от БП, который используется для управления периодом буста устройства.", + "ryzenAdj.stapmTime.label": "Период буста ЦП", + "ryzenAdj.vrmmaxCurrent.desc": "Лимит подаваемой мощности для материнской платы на процессор", + "ryzenAdj.vrmmaxCurrent.label": "Предел тока VRM (A)", + "appContext.ryzenAdjPath.shortDesc": "Полный путь к бинарнику RyzenAdj", + "ryzenAdj.maxFclkFrequency.label": "Максимальная частота Infinity Fabric (МГц)", + "ryzenAdj.stapmLimit.label": "CPU TDP (Вт)", + "appContext.autoStartOnBoot.shortDesc": "Запускать Ryzen Controller при старте ОС", + "sceneSelector.presetsTitle": "Пресеты", + "ryzenAdj.psi0Current.label": "Текущее ограничение PSI0 (мА)", + "ryzenAdj.maxGfxclk.desc": "Максимальная частота (Vega) ГП, на котором он может работать", + "ryzenAdj.minFclkFrequency.label": "Минимальная частота Infinity Fabric (МГц)", + "ryzenAdj.slowLimit.label": "Мин. CPU TDP (Вт)", + "appContext.minimizeOnLaunch.shortDesc": "Запускать Ryzen Controller свёрнутым", + "ryzenAdj.minGfxclk.label": "Минимальная частота Vega iGPU (МГц)", + "ryzenAdj.fastLimit.desc": "Питание, которое CPU может использовать во время буста", + "appContext.minimizeToTray.name": "Свернуть в трей", + "ryzenAdj.psi0Current.desc": "Лимит подаваемой мощности для материнской платы на PSI0", + "ryzenAdj.minGfxclk.desc": "Минимальная частота (Vega) ГП, на котором он может работать", + "ryzenAdj.fastLimit.label": "CPU TDP при бусте (Вт)", + "appContext.autoStartOnBoot.name": "Автоматически запускаться при загрузке ОС", + "appContext.minimizeToTray.shortDesc": "Сворачивать Ryzen Controller в трей вместо панели задач", + "appContext.reApplyPeriodically.desc": "На некоторых ноутбуках BIOS порой сбрасывает те настройки, которые RyzenAdj пытается выставить. Вы можете использовать эту опцию, чтобы периодически переприменять настройки.", + "sceneSelector.releasesTitle": "Релизы", + "ryzenAdj.tctlTemp.desc": "Температура, до которой CPU может нагреться перед выключением буста", + "appContext.reApplyPeriodically.name": "Периодически переприменять", + "ryzenAdj.tctlTemp.label": "Лимит температуры (°C)", + "appContext.reApplyPeriodically.shortDesc": "Позволяет переприменять настройки RyzenAdj периодически (каждые X секунд)", + "PresetsScene.onlinePresetTitle": "Пресеты в сети", + "PresetsScene.localPresetTitle": "Локальные пресеты", + "PresetsScene.autoApplyTitle": "Применять пресет автоматически", + "SettingsScene.settingsTitle": "Настройки", + "settingForm.currentPath": "Текущий путь:", + "sysInfoCards.biosVersion": "Версия BIOS:", + "sysInfoCards.gpuPerfDesc": "{ram} МБ (Динамическая видеопамять: {dyn}).", + "SettingsScene.sysInfoTitle": "Информация о системе", + "sysInfoCards.basicInfoTitle": "Общая информация", + "settingForm.browseBtn": "Обзор", + "SettingsScene.systemHashDesc": "Это будет использоваться для обеспечения совместимости загруженных пресетов.", + "sysInfoCards.CPUInfoTitle": "Информация о ЦП", + "sysInfoCards.cpuPerfDesc": "{speedmax} ГГц с {physicalCores} ядрами и {cores} потоками.", + "sysInfoCards.GPUInfoTitle": "Информация о ГП #{index}", + "SettingsScene.loadingSysHash": "Загрузка...", + "ryzenAdjBottomBar.prompt": "Наименование нового пресета", + "ryzenAdjBottomBar.mustProvideName": "Вы должны указать наименование", + "ryzenAdjBottomBar.presetCreated": "Пресет \"{newPresetName}\" создан", + "ryzenAdjBottomBar.presetWithSameNameExist": "Пресет с наименованием \"{newPresetName}\" уже существует", + "presetButtons.apply": "Применить", + "presetButtons.delete": "Удалить", + "presetButtons.load": "Загрузить", + "presetAutoApply.nonePreset": "Отсутствует", + "presetButtons.upload": "Выгрузить", + "ryzenAdj.applySuccess": "RyzenAdj успешно применил настройки", + "presetButtons.uploadSucceed": "Пресет {preset} был выгружен", + "presetOnlineBtn.downloadTooltip": "Сохранит пресет в ваш локальный пресет", + "presetOnlineBtn.loadTooltip": "Без сохранения пресета будет загружен в таблицы RyzenAdj, но не применён", + "presetOnlineBtn.download": "Скачать", + "presetOnlineBtn.load": "Загрузить", + "presetButtons.presetWithSameNameAlreadyExistOnline": "Пресет с таким наименованием уже присутствует в сети", + "presetOnlineBtn.presetDownloaded": "Пресет \"{presetName}\" загружен", + "presetOnlineBtn.presetSameNameExist": "У вас уже есть пресет с таким же именем", + "PresetsScene.cantVoteTwiceSamePreset": "Вы не можете дважды голосовать за один и тот же пресет", + "PresetsScene.confirmVote": "Вы уверены, что хотите проголосовать {vote} за этот пресет?", + "PresetsScene.updatingVotes": "Обновление голосов...", + "notification.settingsSaveSuccess": "Настройки были успешно сохранены", + "ryzenAdjBottomBar.apply": "Применить", + "ryzenAdjBottomBar.createPreset": "Создать пресет", + "ryzenAdjBottomBar.reset": "Сброс", + "app.localeSelectorModalTitle": "Изменить язык", + "appContext.newReleaseAvailable": "Доступна новая версия, пожалуйста, проверьте вкладку 'Релизы'", + "PresetOnline.errorLoadingPresets": "Невозможно загрузить пресеты", + "PresetOnline.retryLoadingPresetListBtn": "Повторить", + "PresetOnline.pleaseCheckInternetConnection": "Пожалуйста, проверьте ваше интернет-соединение", + "presetButtons.uploadError": "Возникла ошибка во время выгрузки пресета.", + "presetLine.compatibility": "Совместимость:", + "appContext.invalidPreset": "Невозможно применить некорректный пресет", + "presetOnlineBtn.presetInvalidOrObsolete": "Пресет \"{presetName}\" некорректен, либо устарел", + "PresetsScene.errorWhileSendingVote": "Ошибка при отправке голоса", + "sysInfoCards.unableToGetSysInfo": "Невозможно получить информацию о системе:", + "settingForm.windowsBinFileType": "Исполняемый файл Windows", + "appContext.ryzenAdjPath.wrongPath": "Путь к ryzenadj.exe некорректен, пожалуйста, измените его в разделе 'Настройки'", + "ryzenAdjBottomBar.invalidPreset": "Невозможно применить некорректный пресет", + "presetOnlineBtn.presetLoaded": "Пресет \"{presetName}\" загружен", + "presetButtons.mustWaitForSignatureGen": "Вы должны подождать завершения генерации подписи ноутбука" +}