use super::{help_ru, keys::Key, network, printer};
pub(super) fn translate(key: Key) -> &'static str {
match key {
Key::MenuFile => "Файл",
Key::MenuMp => "МП-Система",
Key::MenuView => "Вид",
Key::MenuSettings => "Настройки",
Key::MenuHelp => "Помощь",
Key::HelpShowDocs => "Вызвать справку",
Key::HelpAbout => "О программе",
Key::HelpDialogTitle => "Справка",
Key::HelpSearchPlaceholder => "Поиск по справке…",
Key::HnAbout => "О программе",
Key::HnAppearance => "Внешний вид",
Key::HnArchitecture => "Архитектура МП КР580ВМ80А",
Key::HnArithmeticCommands => "Арифметические команды",
Key::HnCommandPanel => "Панель системных команд",
Key::HnCommandReference => "Сводка команд КР580ВМ80А",
Key::HnCommandSummary => "Приложение: сводка команд",
Key::HnControlTransferCommands => "Команды передачи управления",
Key::HnCpuArchitecture => "Микропроцессор КР580ВМ80",
Key::HnDataTransferCommands => "Команды пересылок",
Key::HnDeviceWorkflow => "Работа с устройствами",
Key::HnExport => "Экспорт",
Key::HnExternalDevices => "Внешние устройства",
Key::HnFeatures => "Возможности эмулятора",
Key::HnFileFormats => "Форматы файлов",
Key::HnFilesExport => "Экспорт и загрузка данных",
Key::HnFlagsRegister => "Регистр флагов",
Key::HnFloppy => "Дисковод КР580",
Key::HnGeneralPrinciples => "Общие принципы работы",
Key::HnGeneralSettings => "Общие настройки",
Key::HnHdd => "Жёсткий диск КР580",
Key::HnImport => "Импорт",
Key::HnInstructionSet => "Система команд",
Key::HnIntroduction => "Введение",
Key::HnIoCommands => "Команды ввода-вывода",
Key::HnLogicalCommands => "Логические команды",
Key::HnMainMenu => "Главное меню",
Key::HnMainWindow => "Главное окно программы",
Key::HnMemoryIoSpaces => "Пространства памяти и ввода-вывода",
Key::HnMemorySearch => "Поиск в памяти",
Key::HnMenuFile => "Меню «Файл»",
Key::HnMenuHelp => "Меню «Справка»",
Key::HnMenuMpSystem => "Меню «МП-Система»",
Key::HnMonitor => "Монитор КР580",
Key::HnNetwork => "Сетевой адаптер КР580",
Key::HnPrinter => "Принтер КР580",
Key::HnProcessorControlCommands => "Команды управления процессором",
Key::HnProgramInterface => "Описание программы",
Key::HnRamEditing => "Панель редактирования ОЗУ",
Key::HnRamTable => "Таблица содержимого ОЗУ",
Key::HnRegisterEdit => "Редактирование регистров",
Key::HnRegisterEditing => "Панель редактирования регистров",
Key::HnRegisters => "Регистры МП",
Key::HnResetButtons => "Кнопки сброса",
Key::HnRunButtons => "Кнопки выполнения",
Key::HnSaveLoad => "Сохранение и загрузка состояния",
Key::HnSchematic => "Структурная схема МП-системы",
Key::HnSettings => "Настройки программы",
Key::HnShortcuts => "Горячие клавиши",
Key::HnStackCommands => "Стековые команды",
Key::HnSystemComponents => "Компоненты МПС на базе КР580",
Key::HnSystemComposition => "Состав МП-системы",
Key::HnTopicShortcuts => "Таблица горячих клавиш",
Key::HnWorkflow => "Работа с программой",
Key::HcAbout
| Key::HcFeatures
| Key::HcSystemComponents
| Key::HcArchitecture
| Key::HcRegisters
| Key::HcFlagsRegister
| Key::HcMemoryIoSpaces
| Key::HcDataTransferCommands
| Key::HcLogicalCommands
| Key::HcArithmeticCommands
| Key::HcControlTransferCommands
| Key::HcProcessorControlCommands
| Key::HcIoCommands
| Key::HcStackCommands
| Key::HcMainWindow
| Key::HcMenuFile
| Key::HcMenuMpSystem
| Key::HcMenuHelp
| Key::HcSchematic
| Key::HcRamTable
| Key::HcMonitor
| Key::HcFloppy
| Key::HcHdd
| Key::HcNetwork
| Key::HcPrinter
| Key::HcRamEditing
| Key::HcRegisterEditing
| Key::HcResetButtons
| Key::HcCommandPanel
| Key::HcRunButtons
| Key::HcSaveLoad
| Key::HcImport
| Key::HcExport
| Key::HcFileFormats
| Key::HcGeneralSettings
| Key::HcAppearance
| Key::HcGeneralPrinciples
| Key::HcMemorySearch
| Key::HcRegisterEdit
| Key::HcDeviceWorkflow
| Key::HcCommandSummary
| Key::HcShortcuts => help_ru::translate(key),
Key::AboutTitle => "О программе",
Key::AppName => "KR580",
Key::AboutDescription => {
"Программа-эмулятор микропроцессорной системы на базе микропроцессора КР580ВМ80"
}
Key::AboutVersion => "Версия",
Key::AboutGithubLabel => "GitHub",
Key::FileNew => "Новый файл",
Key::FileOpen => "Открыть",
Key::FileSave => "Сохранить",
Key::FileSaveAs => "Сохранить как",
Key::FileImport => "Импорт",
Key::FileExport => "Экспорт",
Key::ExportFormatXlsx => "MS Excel",
Key::ExportFormatText => "Текстовый файл",
Key::ExportPageLabel => "На странице",
Key::ExportPageDefault => "Подпрограмма 1",
Key::ExportPageNameBase => "Подпрограмма",
Key::ExportSectionLabel => "В разделе",
Key::ExportSectionDefault => "Раздел 1",
Key::ExportSectionNameBase => "Раздел",
Key::ExportAddPageTooltip => "Добавить страницу",
Key::ExportAddSectionTooltip => "Добавить раздел",
Key::ExportDeletePageTooltip => "Удалить страницу",
Key::ExportDeleteSectionTooltip => "Удалить раздел",
Key::ExportMemoryGroup => "Содержимое ОЗУ",
Key::ExportRegistersGroup => "Значения регистров",
Key::ExportFlagsGroup => "Значения флагов",
Key::ExportRangeFrom => "Ячейки, начиная с",
Key::ExportRangeTo => "по",
Key::ExportColumnAddress => "Включая столбец \"№ ячейки ОЗУ\"",
Key::ExportColumnValue => "Включая столбец \"Значение ячейки ОЗУ\"",
Key::ExportColumnCommand => "Включая столбец \"Команда\"",
Key::ExportColumnComment => "Добавить пустой столбец для комментариев",
Key::ExportRegisterAccumulator => "Аккумулятор",
Key::ExportRegisterStackPointer => "Указатель стека",
Key::ExportRegisterProgramCounter => "Счётчик команд",
Key::ExportRegisterCycles => "Счётчик тактов",
Key::ImportSourceGroup => "Источник импорта",
Key::ImportFileLabel => "Файл",
Key::ImportNoFile => "Файл не выбран",
Key::ImportNoTargets => "В файле нет отдельных листов или разделов",
Key::ImportSheetLabel => "На листе",
Key::ImportSectionLabel => "В разделе",
Key::ImportBrowseTooltip => "Выбрать файл",
Key::ImportChooseFileRequired => "Выберите файл для импорта",
Key::MpRunProgram => "Выполнить программу",
Key::MpRunInstruction => "Выполнить команду",
Key::MpRunTact => "Выполнить такт",
Key::MpResetRam => "Очистить ОЗУ",
Key::MpResetCpu => "Очистить регистры",
Key::MpClearHalt => "Сбросить флаг HLT",
Key::DiscardCancel => "Отменить",
Key::DiscardBody => "Несохранённые изменения будут потеряны.",
Key::DiscardBodyDeleteHdd => "Все данные будут потеряны.",
Key::DiscardTitleOpen => "Открыть файл",
Key::DiscardTitleNew => "Новый файл",
Key::DiscardTitleImport => "Импорт",
Key::DiscardTitleClose => "Закрыть приложение",
Key::DiscardTitleDeleteHdd => "Удалить файл HDD?",
Key::DiscardConfirmOpen => "Открыть",
Key::DiscardConfirmNew => "Создать",
Key::DiscardConfirmImport => "Импортировать",
Key::DiscardConfirmClose => "Закрыть",
Key::DiscardConfirmDeleteHdd => "Удалить",
Key::StatusReady => "Готов",
Key::StatusNewFile => "Новый файл",
Key::StatusCpuHalted => "ЦП остановлен",
Key::StatusStopped => "Остановлен",
Key::StatusTact => "Такт",
Key::StatusCycle => "цикл",
Key::StatusOpened => "Открыто",
Key::StatusSavedTo => "Сохранено в",
Key::StatusExportTo => "Экспорт в",
Key::StatusImportFrom => "Импорт из",
Key::ErrorPrefix => "Ошибка",
Key::HaltNotice => "Процессор остановлен командой HLT\nСбросьте регистры или флаг HLT",
Key::SpeedTitle => "Скорость",
Key::SpeedUnit => "инстр/сек",
Key::SettingsTitle => "Настройки",
Key::SettingsSearchPlaceholder => "Поиск настроек",
Key::SettingsCategoryGeneral => "Общие",
Key::SettingsCategoryExternalDevices => "Внешние устройства",
Key::SettingsCategoryAppearance => "Внешний вид",
Key::SettingsCategoryShortcuts => "Горячие клавиши",
Key::SettingsLanguageLabel => "Язык",
Key::SettingsLanguageHint => "Язык интерфейса приложения",
Key::SettingsSpeedLabel => "Скорость",
Key::SettingsSpeedHint => "Скорость по умолчанию для всех файлов",
Key::SettingsFollowPcLabel => "Следовать за PC",
Key::SettingsFollowPcHint => "Перемещать подсветку за счётчиком команд во время выполнения",
Key::SettingsMemoryOperandHighlightingLabel => "Подсвечивать операнды памяти",
Key::SettingsMemoryOperandHighlightingHint => "Раскрашивать операнды команд в списке ОЗУ",
Key::SettingsFloppyImageLabel => "Образ дисковода",
Key::SettingsFloppyImageHint => "Образ дисковода, загружаемый по умолчанию",
Key::SettingsFloppyImageBrowse => "Обзор…",
Key::SettingsHddDirectoryLabel => "Каталог HDD",
Key::SettingsHddDirectoryHint => "Каталог по умолчанию для файла буфера жёсткого диска",
Key::SettingsHddDirectoryBrowse => "Обзор…",
Key::SettingsFileAssociationLabel => "Ассоциация .580",
Key::SettingsFileAssociationHint => "Открывать файлы .580 в KR580 по двойному клику",
Key::SettingsFileAssociationAdd => "Добавить",
Key::SettingsFileAssociationRemove => "Удалить",
Key::SettingsToggleOn => "Включено",
Key::SettingsToggleOff => "Выключено",
Key::SettingsThemeLabel => "Тема",
Key::SettingsThemeHint => "Тема оформления интерфейса",
Key::SettingsThemePlaceholder => "Скоро",
Key::SettingsShortcutsLabel => "Горячие клавиши",
Key::SettingsShortcutsHint => "Настройка сочетаний клавиш",
Key::SettingsNoMatches => "Нет совпадений",
Key::SettingsReset => "Сброс",
Key::SettingsResetConfirmTitle => "Сбросить настройки?",
Key::SettingsResetConfirmBody => "Все настройки вернутся к значениям по умолчанию",
Key::SettingsResetConfirmAction => "Сбросить",
Key::LangRussian => "Русский",
Key::LangEnglish => "Английский",
Key::SpeedSlow => "Низко",
Key::SpeedMedium => "Средне",
Key::SpeedHigh => "Быстро",
Key::SpeedMax => "Макс",
Key::HeaderStatus => "Статус",
Key::HltOn => "HLT ВКЛ",
Key::HltOff => "HLT ВЫКЛ",
Key::RegistersAndOperands => "Регистры и операнды",
Key::Accumulator => "Аккумулятор",
Key::BufferRegister1 => "Буферный регистр 1",
Key::BufferRegister2 => "Буферный регистр 2",
Key::AddressBuffer => "Буфер адреса",
Key::AddressBufferTooltip => {
"Последний 16-разрядный адрес, выставленный процессором на адресную шину."
}
Key::InstructionRegister => "Регистр команд",
Key::InstructionRegisterTooltip => {
"Байт кода операции команды, выполняемой в данный момент."
}
Key::InstructionDecoder => "Д/Ш команд",
Key::InstructionDecoderTooltip => {
"Человекочитаемая мнемоника, декодированная из регистра команд."
}
Key::ControlSignals => "Сигналы управления",
Key::CurrentCommand => "Текущая команда",
Key::DataBuffer => "Буфер данных",
Key::DataBufferTooltip => {
"Последний байт, появившийся на 8-разрядной шине данных процессора. Обновляется при каждом чтении памяти или порта."
}
Key::FlagsRegister => "Регистр признаков",
Key::FlagsRegisterTooltip => {
"Компактное представление флагов PSW: S (знак), Z (ноль), AC (вспомогательный перенос), P (чётность), C (перенос). Биты 1 и 3 на 8080 всегда равны 0."
}
Key::StatusRegister => "Регистр состояния",
Key::PswTooltip => {
"Слово состояния программы: аккумулятор A, сложенный с байтом флагов PSW. Старший байт – A, младший – флаги."
}
Key::StackPointerTooltip => {
"Указатель стека. Указывает на вершину программного стека в памяти; PUSH уменьшает, POP увеличивает."
}
Key::ProgramCounterTooltip => {
"Счётчик команд. Содержит адрес следующего байта команды, который будет прочитан."
}
Key::IncDecTooltip => {
"Количество байт, которое процессор добавит к счётчику команд после завершения текущей команды."
}
Key::Multiplexer => "Мультиплексор",
Key::TempStorageRegisters => "Регистры временного хранения",
Key::GeneralPurposeRegisters => "Регистры общего назначения (РОН)",
Key::StackPointer => "Указатель стека (УС)",
Key::ProgramCounter => "Счётчик команд (СК)",
Key::IncDec => "Инкремент-декремент",
Key::LampF2 => {
"Вторая фаза такта\nВторая половина внутреннего такта; многие управляющие импульсы привязаны к этому фронту."
}
Key::LampF1 => {
"Первая фаза такта\nПервая половина внутреннего такта; процессор начинает новое состояние шины."
}
Key::LampSync => {
"Синхронизация\nАктивен в начале машинного цикла и определяет тип операции на шине."
}
Key::LampReady => {
"Процессор готов\nПри активном уровне процессор завершает цикл шины; при низком – вставляет такты ожидания."
}
Key::LampWait => {
"Состояние ожидания\nЗагорается, когда процессор растягивает цикл шины из-за неактивного READY."
}
Key::LampHold => {
"Запрос захвата шины\nВнешнее устройство просит процессор отключиться от системной шины для прямого доступа к памяти."
}
Key::LampInt => {
"Запрос прерывания\nВнешнее устройство требует обработки; учитывается только при разрешённых прерываниях."
}
Key::LampInte => {
"Прерывания разрешены\nПри установленном флаге процессор принимает маскируемый запрос прерывания."
}
Key::LampDbin => {
"Приём данных с шины\nПроцессор читает данные из памяти или порта ввода-вывода на шину данных."
}
Key::LampWr => {
"Строб записи\nПроцессор записывает данные из аккумулятора или шины данных в память/порт."
}
Key::LampHlda => {
"Подтверждение захвата\nПроцессор отключился от шины и предоставил её контроллеру прямого доступа к памяти."
}
Key::CyclesAndTacts => "Цикл и такт",
Key::CycleLabel => "Цикл",
Key::TactLabel => "Такт",
Key::CycleTooltip => "Какой по счёту шаг сейчас выполняет команда. Числится с единицы.",
Key::TactTooltip => "Номер такта внутри текущего шага команды. Числится с единицы.",
Key::InternalTimings => "Внутренние тайминги",
Key::TotalTacts => "Тактов",
Key::InstructionTact => "Такт инструкции",
Key::PhaseLabel => "Фаза",
Key::TotalTactsTooltip => {
"Сколько тактов всего прошло с начала программы. Числится с нуля."
}
Key::InstructionTactTooltip => {
"Номер такта внутри текущей команды по полной шкале (T1, T2, ...). Числится с единицы."
}
Key::PhaseTooltip => "То же, что «Такт инструкции», но считается с нуля.",
Key::MemoryListTitle => "Содержимое ячеек ОЗУ",
Key::ColumnAddress => "Адрес",
Key::ColumnValue => "Значение",
Key::ColumnCommand => "Команда",
Key::MemoryEditorTitle => "Ячейка ОЗУ и ее значение",
Key::RegisterEditorTitle => "Регистр и его значение",
Key::ActionPause => "Пауза",
Key::ActionRunProgram => "Выполнить программу",
Key::ActionRestartProgram => "Перезапустить программу",
Key::ActionStepInstruction => "Выполнить команду",
Key::ActionStepTact => "Выполнить такт",
Key::ActionResetRam => "Сброс ОЗУ",
Key::ActionResetCpu => "Сброс регистров",
Key::ExecutionPanel => "Выполнение",
Key::ResetPanel => "Сброс",
Key::QuickAccess => "Быстрый доступ",
Key::DeviceMonitor => "Отобразить монитор",
Key::DeviceFloppy => "Отобразить буфер дисковода",
Key::DeviceHdd => "Отобразить буфер жёсткого диска",
Key::DeviceNetwork => "Отобразить буфер сетевого адаптера",
Key::DevicePrinter => "Отобразить буфер принтера",
Key::ViewStackArea => "Показать стековую область памяти",
Key::MonitorUnifiedScreen => "Экран КР580",
Key::MonitorTextLayer => "Текстовый слой",
Key::MonitorPixelLayer => "Графический слой",
Key::MonitorHexBuffer => "Поток байт",
Key::MonitorClose => "Закрыть",
Key::MonitorDetach => "Открепить в отдельное окно",
Key::MonitorAttach => "Вернуть в окно эмулятора",
Key::MonitorPin => "Закрепить поверх других окон",
Key::MonitorUnpin => "Не держать поверх других окон",
Key::MonitorViewSplit => "Разделить",
Key::MonitorViewUnified => "Объединить",
Key::MonitorClearBuffer => "Очистить буфер",
Key::MonitorSaveImage => "Сохранить изображение",
Key::MonitorImageSaved => "Изображение монитора сохранено",
Key::MonitorImageSaveFailed => "Не удалось сохранить изображение",
Key::MonitorHexFilterAll => "Фильтр: всё",
Key::MonitorHexFilterGraphics => "Фильтр: графика",
Key::MonitorHexFilterText => "Фильтр: текст",
Key::FloppyContent => "Содержимое буфера дисковода",
Key::FloppyImageContent => "Содержимое образа",
Key::FloppyStatus => "Статус",
Key::FloppyPath => "Файл",
Key::FloppyPathMissing => "файл не подключён",
Key::FloppyImagePathMissing => "Файл не подключён",
Key::FloppyBytesQueued => "байт в очереди",
Key::FloppyClearBuffer => "Очистить буфер дисковода",
Key::FloppyShowImageContents => "Отобразить содержимое файла образа",
Key::FloppyOpenImage => "Открыть файл образа дискеты",
Key::FloppyDetachImage => "Отключить файл образа дискеты",
Key::FloppySaveBuffer => "Сохранить текущий буфер в файл",
Key::FloppyDebugBuffer => "Debug-режим буфера",
Key::FloppyImageAttached => "Образ дискеты подключён",
Key::FloppyImageDetached => "Образ дискеты отключён",
Key::FloppyDebugEnabled => "режим отладки",
Key::FloppyBufferSaved => "Буфер дисковода сохранён",
Key::HddContent => "Содержимое буфера жёсткого диска",
Key::HddImageContent => "Содержимое файла",
Key::HddStatus => "Статус",
Key::HddPath => "Файл",
Key::HddPathMissing => "файл не подключён",
Key::HddImagePathMissing => "Файл не подключён",
Key::HddBytesQueued => "байт в очереди",
Key::HddClearBuffer => "Очистить буфер жёсткого диска",
Key::HddClose => "Закрыть",
Key::HddChooseDirectory => "Выбрать каталог",
Key::HddDebugBuffer => "Debug-режим буфера",
Key::HddDeleteFile => "Удалить файл HDD",
Key::HddCreateFile => "Создать файл HDD",
Key::HddDebugEnabled => "режим отладки",
Key::HddShowImageContents => "Отобразить содержимое файла",
Key::HddFileDeleted => "Файл HDD удалён",
Key::Network(key) => network::translate_ru(key),
Key::Printer(key) => printer::translate_ru(key),
Key::DeviceStatusReady => "готов",
Key::DeviceStatusNotReady => "не готов",
Key::DeviceStatusBusy => "занят",
Key::DeviceStatusNoData => "нет данных",
Key::DeviceStatusConnected => "подключён",
Key::DeviceStatusListening => "слушает",
Key::DeviceStatusDisconnected => "отключён",
Key::ColCmdCode => "Код",
Key::ColCmdMnemonic => "Команда",
Key::ColCmdOperand => "Операнд",
Key::ColCmdLength => "Длина",
Key::ColCmdKind => "Тип",
Key::ColCmdAddressing => "Адресация",
Key::CmdLengthByte => "1 байт",
Key::CmdLengthBytes2 => "2 байта",
Key::CmdLengthBytes3 => "3 байта",
Key::CmdKindUnknown => "неизвестно",
Key::CmdKindControl => "управление",
Key::CmdKindBranch => "переход",
Key::CmdKindStack => "стек",
Key::CmdKindIo => "ввод/вывод",
Key::CmdKindMove => "пересылка",
Key::CmdKindLogic => "логика",
Key::CmdKindArithmetic => "арифметика",
Key::CmdAddrImplicit => "неявная",
Key::CmdAddrImmediate => "непосредств",
Key::CmdAddrDirect => "прямая",
Key::CmdAddrIndirect => "косвенная",
Key::CmdAddrRegister => "регистровая",
Key::OpcodeSearchPlaceholder => "Поиск: hex или мнемоника",
Key::StatusByteHeader => "Статусный байт T1: что процессор делает на текущем такте.",
Key::StatusPrefix => "Статус:",
Key::StatusNoProgramAt => "Нет программы по адресу",
Key::StatusNothingToUndo => "Нечего отменять",
Key::StatusNothingToRedo => "Нечего вернуть",
Key::StatusEnterHexPattern => "Введите hex-шаблон для поиска",
Key::StatusInvalidMemoryBytes => "Некорректные байты: используйте HEX-пары через пробел",
Key::StatusMemoryBytesOutOfRange => "Последовательность не помещается в ОЗУ",
Key::StatusPatternFound => "Найден шаблон",
Key::StatusAtAddress => "по адресу",
Key::StatusNoMatchesFor => "Нет адресов, соответствующих",
Key::ErrNotA580File => "Не .580 файл – поддерживается только расширение .580",
Key::ErrFileEmpty => "Файл пуст",
Key::ErrWrong580Size => "Не похоже на .580 файл (должно быть ровно 65549 байт)",
Key::ErrLegacyTrailerCorrupt => "Конец файла повреждён – это не .580 файл",
Key::ErrSettingsNewerVersion => {
"Настройки сохранены в более новой версии – обновите программу"
}
Key::ErrSettingsCorrupt => "Файл настроек повреждён",
Key::ErrCannotReadFileFormat => "Не удалось прочитать файл – проверьте формат",
Key::ErrCannotReadFile => "Не удалось прочитать файл",
Key::ErrCannotWriteTable => "Не удалось записать таблицу",
Key::ErrCannotWriteFile => "Не удалось записать файл",
Key::ErrFileNotFound => "Файл не найден",
Key::ErrPermissionDenied => "Нет доступа к файлу",
Key::ErrFileAlreadyExists => "Файл уже существует",
Key::ErrDiskFull => "На диске недостаточно места",
Key::ErrIoGeneric => "Ошибка чтения или записи файла",
Key::ErrAddressOutOfRange => "Адрес вне допустимого диапазона памяти",
Key::ErrHddDirectoryNotWritable => {
"Невозможно использовать этот каталог – нет прав на запись"
}
Key::ErrUnknownRegister => "Неизвестное имя регистра",
Key::ErrUndocumentedOpcode => "Недокументированная команда",
Key::ErrFloppyImageNotAttached => "Файл образа дисковода не подключён",
Key::ErrInternal => "Внутренняя ошибка приложения",
Key::ErrGenericFailed => "Не удалось выполнить операцию",
}
}