kr580 2.0.0

Desktop KR580VM80 / Intel 8080 emulator.
Documentation
use crate::i18n::Lang;

pub(super) fn contextual(feature: &str, name: &str, lang: Lang) -> Option<&'static str> {
    let translations = match (feature, name) {
        ("JobPageOrder", "Standard") => ("Обычный (1, 2, 3)", "Standard (1, 2, 3)"),
        ("JobPageOrder", "Reverse") => ("Обратный (3, 2, 1)", "Reverse (3, 2, 1)"),
        ("PresentationDirection", "RightBottom") => {
            ("Слева направо, затем вниз", "Left to right, then down")
        }
        ("PresentationDirection", "BottomRight") => {
            ("Сверху вниз, затем вправо", "Top to bottom, then right")
        }
        ("PresentationDirection", "LeftBottom") => {
            ("Справа налево, затем вниз", "Right to left, then down")
        }
        ("PresentationDirection", "BottomLeft") => {
            ("Сверху вниз, затем влево", "Top to bottom, then left")
        }
        ("PresentationDirection", "RightTop") => {
            ("Слева направо, затем вверх", "Left to right, then up")
        }
        ("PageDefaultSource" | "PageInputBin", "AUTO") => ("Автовыбор", "Auto select"),
        ("PageMediaType", "OFF") => ("Не указано", "Unspecified"),
        ("PageMediaType", "NORMAL") => ("Обычная бумага", "Plain paper"),
        ("PageMediaType", "THICK") => ("Плотная бумага (90–120 г/м²)", "Thick paper (90–120 g/m²)"),
        ("PageMediaType", "THIN") => ("Тонкая бумага (60–69 г/м²)", "Thin paper (60–69 g/m²)"),
        ("PageMediaType", "BOND") => ("Документная бумага", "Bond paper"),
        ("PageMediaType", "COLOR") => ("Цветная бумага", "Colored paper"),
        ("PageMediaType", "CARD") => ("Картон (121–163 г/м²)", "Cardstock (121–163 g/m²)"),
        ("PageMediaType", "LABEL") => ("Наклейки", "Labels"),
        ("PageMediaType", "ENV") => ("Конверт", "Envelope"),
        ("PageMediaType", "USED") => ("Бланки", "Preprinted paper"),
        ("PageMediaType", "RECYCLED") => ("Переработанная бумага", "Recycled paper"),
        ("PageResolution", "1_600x600_dpi") => ("Стандартное", "Standard"),
        ("PageResolution", "0_1200x1200_dpi") => ("Высокое разрешение", "High resolution"),
        _ => return None,
    };
    Some(pick(lang, translations))
}

pub(super) fn feature(name: &str, lang: Lang) -> Option<&'static str> {
    let translations = match name {
        "DocumentColorAdjust" => ("Коррекция цвета", "Color adjustment"),
        "UsePreferredColor" => ("Предпочтительные цвета", "Preferred colors"),
        "PageOutputColor" => ("Цветовой режим", "Color mode"),
        "DocumentBlackOptimization" => ("Оптимизация чёрного", "Black optimization"),
        "DocumentFirstPageColorOnly" => ("Цветная только первая страница", "Color first page only"),
        "DocumentCmykColorPreservation" => ("Сохранение цветов CMYK", "Preserve CMYK colors"),
        "DocumentCollate" => ("Разобрать по копиям", "Collate"),
        "DocumentDarkenText" => ("Чёткий текст", "Clear text"),
        "JobDuplexPrinterDefault" => ("Двусторонняя печать по умолчанию", "Duplex printer default"),
        "JobDuplexAllDocumentsContiguously" => ("Двусторонняя печать", "Double-sided printing"),
        "DocumentDuplexReverse" => (
            "Обратная сторона при двусторонней печати",
            "Reverse duplex printing",
        ),
        "DocumentDuplexIgnoreOrientation" => (
            "Игнорировать ориентацию при двусторонней печати",
            "Ignore orientation for duplex printing",
        ),
        "DocumentPreventPopup" => (
            "Не показывать уведомления драйвера",
            "Suppress driver popups",
        ),
        "DocumentFirstPageInputBin" => ("Лоток первой страницы", "First-page paper source"),
        "JobHighAltitude" => ("Поправка на высоту", "Altitude correction"),
        "DocumentBinding" => ("Переплёт", "Binding"),
        "DocumentNUp" => ("Страниц на листе", "Pages per sheet"),
        "PresentationDirection" => ("Порядок страниц на листе", "Presentation direction"),
        "PageBorder" => ("Рамка страницы", "Page border"),
        "PageScaling" | "ScalingOptions" => ("Масштабирование", "Scaling"),
        "ScaleOffsetAlignment" => ("Выравнивание при масштабировании", "Scale offset alignment"),
        "PageOrientation" => ("Ориентация", "Orientation"),
        "DocumentOverlay" | "DocumentDeviceOverlay" => ("Наложение", "Overlay"),
        "ConfirmPrintOverlay" => ("Подтверждать печать наложения", "Confirm overlay printing"),
        "PageRange1" => ("Первый диапазон страниц", "Page range 1"),
        "PageRange2" => ("Второй диапазон страниц", "Page range 2"),
        "PageMediaSize" => ("Размер бумаги", "Paper size"),
        "PageDefaultSource" | "PageInputBin" => ("Источник бумаги", "Paper source"),
        "PageMediaType" => ("Тип бумаги", "Paper type"),
        "JobPreviewLayout" => ("Единицы предпросмотра", "Preview units"),
        "DocumentAllTextToBlack" => ("Печатать весь текст чёрным", "Print all text in black"),
        "JobPageOrder" => ("Порядок страниц", "Page order"),
        "PageResolution" | "PageIResolution" => ("Качество печати", "Print quality"),
        "DocumentTonerSave" => ("Экономия тонера", "Toner saving"),
        "PageWatermark" => ("Водяной знак", "Watermark"),
        "TransparencyType" => ("Расположение водяного знака", "Watermark placement"),
        "Layering" => ("Слой водяного знака", "Watermark layer"),
        "PageApply" => ("Область применения", "Apply to"),
        "DrawPerSide" => ("Рисовать на каждой стороне", "Draw on each side"),
        "Type" => ("Тип содержимого", "Content type"),
        "Alignment" => ("Расположение", "Alignment"),
        "HeaderFooter" => ("Колонтитулы", "Headers and footers"),
        "LeftHeader" => ("Левый верхний колонтитул", "Left header"),
        "CenterHeader" => ("Центральный верхний колонтитул", "Center header"),
        "RightHeader" => ("Правый верхний колонтитул", "Right header"),
        "LeftFooter" => ("Левый нижний колонтитул", "Left footer"),
        "CenterFooter" => ("Центральный нижний колонтитул", "Center footer"),
        "RightFooter" => ("Правый нижний колонтитул", "Right footer"),
        "DocumentSkipBlankPages" => ("Пропускать пустые страницы", "Skip blank pages"),
        "DocumentFineEdge" => ("Усиление контуров", "Edge enhancement"),
        "JobAutoConfiguration" => ("Автоматическая конфигурация", "Automatic configuration"),
        _ => return None,
    };
    Some(pick(lang, translations))
}

pub(super) fn option(name: &str, lang: Lang) -> Option<&'static str> {
    let translations = match name {
        "Auto" | "AUTO" => ("Авто", "Auto"),
        "AutoSelect" => ("Автовыбор", "Auto select"),
        "Manual" => ("Вручную", "Manual"),
        "On" => ("Вкл.", "On"),
        "Off" | "OFF" => ("Выкл.", "Off"),
        "None" | "NoOverlay" => ("Нет", "None"),
        "Grayscale" => ("Оттенки серого", "Grayscale"),
        "Collated" => ("По копиям", "Collated"),
        "Uncollated" => ("По страницам", "Uncollated"),
        "Minimum" => ("Минимум", "Minimum"),
        "Maximum" => ("Максимум", "Maximum"),
        "OneSided" => ("Односторонняя", "One-sided"),
        "TwoSidedLongEdge" => ("По длинной кромке", "Long-edge binding"),
        "TwoSidedShortEdge" => ("По короткой кромке", "Short-edge binding"),
        "MPTray" => ("Универсальный лоток", "Multipurpose tray"),
        "Normal" => ("Обычный", "Normal"),
        "HIGH_a32_1" => ("Высота 1", "Altitude 1"),
        "HIGH_a32_2" => ("Высота 2", "Altitude 2"),
        "HIGH_a32_3" => ("Высота 3", "Altitude 3"),
        "Booklet" => ("Брошюра", "Booklet"),
        "SolidLine" => ("Сплошная линия", "Solid line"),
        "DashedLine" => ("Штриховая линия", "Dashed line"),
        "DottedLine" => ("Пунктирная линия", "Dotted line"),
        "ChainLine" => ("Штрихпунктирная линия", "Dash-dot line"),
        "ChainDoubleDashedLine" => ("Двойная штрихпунктирная линия", "Double dash-dot line"),
        "3DimensionalLine" => ("Объёмная линия", "3D line"),
        "Transparent" => ("Прозрачная", "Transparent"),
        "DoubleSolidLine" => ("Двойная сплошная линия", "Double solid line"),
        "CropMarks" => ("Метки обрезки", "Crop marks"),
        "CornerMarks" => ("Угловые метки", "Corner marks"),
        "CustomSquare" => ("Пользовательский масштаб", "Custom scale"),
        "FitToPage" => ("По размеру страницы", "Fit to page"),
        "BottomCenter" => ("Снизу по центру", "Bottom center"),
        "Center" => ("По центру", "Center"),
        "LeftCenter" => ("Слева по центру", "Center left"),
        "RightCenter" => ("Справа по центру", "Center right"),
        "TopCenter" => ("Сверху по центру", "Top center"),
        "TopLeft" => ("Сверху слева", "Top left"),
        "TopRight" => ("Сверху справа", "Top right"),
        "Landscape" => ("Альбомная", "Landscape"),
        "Portrait" => ("Книжная", "Portrait"),
        "ReverseLandscape" => ("Обратная альбомная", "Reverse landscape"),
        "ReversePortrait" => ("Обратная книжная", "Reverse portrait"),
        "LoadOverlay" => ("Использовать наложение", "Use overlay"),
        "CreateOverlay" => ("Создать наложение", "Create overlay"),
        "AllPages" | "AllPage" => ("Все страницы", "All pages"),
        "FirstPage" => ("Первая страница", "First page"),
        "FirstPageOnly" => ("Только первая страница", "First page only"),
        "AllExceptFirstPages" => ("Все, кроме первой", "All except first page"),
        "OddPages" => ("Нечётные страницы", "Odd pages"),
        "EvenPages" => ("Чётные страницы", "Even pages"),
        "FrontPages" => ("Лицевые стороны", "Front pages"),
        "BackPages" => ("Обратные стороны", "Back pages"),
        "ISOC5Envelope" => ("Конверт C5", "C5 envelope"),
        "ISOC4Envelope" => ("Конверт C4", "C4 envelope"),
        "ISODLEnvelope" => ("Конверт DL", "DL envelope"),
        "NorthAmericaNumber10Envelope" => ("Конверт №10", "No. 10 envelope"),
        "NorthAmericaMonarchEnvelope" => ("Конверт Monarch", "Monarch envelope"),
        "CustomMediaSize" => ("Пользовательский размер", "Custom size"),
        "Millimeter" => ("Миллиметры", "Millimeters"),
        "Inch" => ("Дюймы", "Inches"),
        "PageIResolutionValue" => ("Значение разрешения", "Resolution value"),
        "Text" => ("Текст", "Text"),
        "Underlying" | "Underlay" => ("Под содержимым", "Below content"),
        "Floating" | "Overlay" => ("Над содержимым", "Above content"),
        "Date" => ("Дата", "Date"),
        "LogonName" => ("Имя пользователя", "User name"),
        "JobAccountingName" => ("Имя учётной записи задания", "Job account name"),
        "ImageTemplate" => ("Шаблон изображения", "Image template"),
        "Image" => ("Изображение", "Image"),
        "Top" => ("Сверху", "Top"),
        "Left" => ("Слева", "Left"),
        "Right" => ("Справа", "Right"),
        "BottomLeft" => ("Снизу слева", "Bottom left"),
        "Bottom" => ("Снизу", "Bottom"),
        "BottomRight" => ("Снизу справа", "Bottom right"),
        "Options" => ("Параметры", "Options"),
        "ShortDate" => ("Короткая дата", "Short date"),
        "LongDate" => ("Полная дата", "Long date"),
        "ShortTime" => ("Короткое время", "Short time"),
        "LongTime" => ("Полное время", "Long time"),
        "PageNumber" => ("Номер страницы", "Page number"),
        "ComputerName" => ("Имя компьютера", "Computer name"),
        _ => return None,
    };
    Some(pick(lang, translations))
}

pub(super) fn parameter(name: &str, lang: Lang) -> Option<&'static str> {
    let translations = match name {
        "DocumentColorAdjustBrightness" => ("Яркость", "Brightness"),
        "DocumentColorAdjustContrast" => ("Контрастность", "Contrast"),
        "DocumentColorAdjustSaturation" => ("Насыщенность", "Saturation"),
        "DocumentColorAdjustRedValue" => ("Красный", "Red"),
        "DocumentColorAdjustGreenValue" => ("Зелёный", "Green"),
        "DocumentColorAdjustBlueValue" => ("Синий", "Blue"),
        "DocumentColorAdjustPreferredColorSkin" => ("Оттенки кожи", "Skin tones"),
        "DocumentColorAdjustPreferredColorGrass" => ("Оттенки травы", "Grass tones"),
        "DocumentColorAdjustPreferredColorSky" => ("Оттенки неба", "Sky tones"),
        "JobCopiesAllDocuments" => ("Количество копий", "Copies"),
        "PagePosterOverlapValue" => ("Перекрытие частей плаката", "Poster overlap"),
        "PageScalingOffsetWidth" => ("Смещение по горизонтали", "Horizontal offset"),
        "PageScalingOffsetHeight" => ("Смещение по вертикали", "Vertical offset"),
        "PageScalingScale" => ("Масштаб", "Scale"),
        "PageScalingTargetMediaSizeId" => ("Код целевого размера бумаги", "Target paper size ID"),
        "PageScalingTargetMediaSizeWidth" => ("Ширина целевой бумаги", "Target paper width"),
        "PageScalingTargetMediaSizeHeight" => ("Высота целевой бумаги", "Target paper height"),
        "PageScalingTargetMediaSizeName" => ("Целевой размер бумаги", "Target paper size"),
        "PageScalingTargetMediaSizeXOffset" => ("Горизонтальное поле", "Horizontal margin"),
        "PageScalingTargetMediaSizeYOffset" => ("Вертикальное поле", "Vertical margin"),
        "DocumentOverlayOverlayPath" => ("Файл наложения", "Overlay file"),
        "PageMediaSizeMediaSizeWidth" => ("Пользовательская ширина бумаги", "Custom paper width"),
        "PageMediaSizeMediaSizeHeight" => ("Пользовательская высота бумаги", "Custom paper height"),
        "PageIResolutionIResolution" => ("Разрешение изображения", "Image resolution"),
        "PageIResolutionBPP" => ("Глубина цвета", "Color depth"),
        "PageIResolutionImageQuality" => ("Качество изображения", "Image quality"),
        "PageWatermarkTextColor" => ("Цвет водяного знака", "Watermark color"),
        "PageWatermarkTextFontSize" => ("Размер шрифта водяного знака", "Watermark font size"),
        "PageWatermarkTextText" => ("Текст водяного знака", "Watermark text"),
        "PageWatermarkTextAngle" => ("Угол водяного знака", "Watermark angle"),
        "PageWatermarkTextFontFace" => ("Шрифт водяного знака", "Watermark font"),
        "PageWatermarkTextFontCharset" => ("Кодировка шрифта", "Font encoding"),
        "PageWatermarkTextFontWeight" => ("Насыщенность шрифта", "Font weight"),
        "PageWatermarkTextFontItalic" => ("Курсив", "Italic"),
        "PageWatermarkTextWatermarkName" => ("Название водяного знака", "Watermark name"),
        "PageWatermarkTextImageScale" => ("Масштаб водяного знака", "Watermark scale"),
        "PageWatermarkTextTransparencyLevel" => {
            ("Прозрачность водяного знака", "Watermark transparency")
        }
        "PageHeaderFooterOptionsFontFace" => ("Шрифт колонтитулов", "Header and footer font"),
        "PageHeaderFooterOptionsFontSize" => {
            ("Размер шрифта колонтитулов", "Header and footer font size")
        }
        "PageHeaderFooterOptionsFontColor" => ("Цвет колонтитулов", "Header and footer color"),
        "PageHeaderFooterOptionsFontCharset" => {
            ("Кодировка колонтитулов", "Header and footer encoding")
        }
        _ => return None,
    };
    Some(pick(lang, translations))
}

fn pick(lang: Lang, (ru, en): (&'static str, &'static str)) -> &'static str {
    match lang {
        Lang::Ru => ru,
        Lang::En => en,
    }
}