Локализация (перевод) драйверов PPD
Производители печатного оборудования офисного уровня (принтеров, МФУ и т.п.), к сожалению, далеко не всегда радуют пользователей операционных систем отличных от Windows. Иногда, даже если есть драйвер PPD для CUPS для нужной модели принтера, он не доступен на родном языке пользователя. Я использую русскую локаль (ru_RU) и в данной заметке покажу, как можно к родному английскому языку драйвера добавить перевод на русский язык. Информации по этой теме в интернете крайне мало. Я нашёл только статью "PPD Extensions" и раздел "Globalized PPD Support" в документации CUPS.
Заголовочную часть я оставил практически без изменений. Лишь добавил строку:
Есть опции, описания которых заключены между объявлениями *OpenUI и *CloseUI. Эти опции описывают элементы управления на форме параметров принтера. Например, мне попадались описания выпадающих списков и переключателей.
Для перевода названия самого параметра нужно добавлять "*ru_RU.Translation", а для перевода опций этого параметра - "*ru_RU.". Проще это всё показать на примере. Вот пример перевода переключателя. Было:
Описания некоторых опций занимают несколько строк. Например:
Стало:
За перевод некоторых надписей отвечает система (на снимках видно, что даже в родном английском варианте есть русские слова). Но в результате работы по переводу практически все строки стали на русском языке. Вот ссылка на получившийся переведённый файл.
Реальный пример
Уважающий себя производитель Konika Minolta выкладывает драйвера для своего оборудования в том числе и для Linux. Но вот для модели Bizhub C452 доступны драйвера только для нескольких европейских языков, среди которых нет русского. Я скачал архив BHC652PPDLinux_200000002MU.zip, в котором в отдельных каталогах для каждого языка располагались драйвера в виде файлов KOC652opn.ppd и KOC652UX.ppd. Последний я скопировал под своим именем - my_KOC652UX.ppd. Вся работа по переводу будет производиться по нему.Заголовочную часть я оставил практически без изменений. Лишь добавил строку:
*cupsLanguages: "ru_RU"
Я пропустил разделы опциональных устройств принтера, которых у меня нет и приступил к добавлению переводов по интересующим строкам.Есть опции, описания которых заключены между объявлениями *OpenUI и *CloseUI. Эти опции описывают элементы управления на форме параметров принтера. Например, мне попадались описания выпадающих списков и переключателей.
Для перевода названия самого параметра нужно добавлять "*ru_RU.Translation", а для перевода опций этого параметра - "*ru_RU.". Проще это всё показать на примере. Вот пример перевода переключателя. Было:
*OpenUI *Collate/Collate: Boolean
*OrderDependency: 1 AnySetup *Collate
*DefaultCollate: True
*Collate False/Off: "<< /Collate false >> setpagedevice"
*Collate True/On: "<< /Collate true >> setpagedevice"
*CloseUI: *Collate
Стало:
*OpenUI *Collate/Collate: Boolean
*OrderDependency: 1 AnySetup *Collate
*DefaultCollate: True
*ru_RU.Translation Collate/Разбор по копиям: ""
*Collate False/Off: "<< /Collate false >> setpagedevice"
*ru_RU.Collate False/Отключено: "<< /Collate false >> setpagedevice"
*Collate True/On: "<< /Collate true >> setpagedevice"
*ru_RU.Collate True/Включено: "<< /Collate true >> setpagedevice"
*CloseUI: *Collate
Вот пример перевода выпадающего списка. Было:
*OpenUI *InputSlot/Paper Tray: PickOne
*OrderDependency: 50 AnySetup *InputSlot
*DefaultInputSlot: AutoSelect
*InputSlot AutoSelect/Auto Select: ""
*InputSlot Tray1/Tray1: "<< /ManualFeed false /MediaPosition 0 /TraySwitch false >> setpagedevice"
*InputSlot Tray2/Tray2: "<< /ManualFeed false /MediaPosition 1 /TraySwitch false >> setpagedevice"
*InputSlot Tray3/Tray3: "<< /ManualFeed false /MediaPosition 2 /TraySwitch false >> setpagedevice"
*InputSlot Tray4/Tray4: "<< /ManualFeed false /MediaPosition 3 /TraySwitch false >> setpagedevice"
*InputSlot LCT_Donau/LCT: "<< /ManualFeed false /MediaPosition 4 /TraySwitch false >> setpagedevice"
*InputSlot ManualFeed/Bypass Tray: "<< /ManualFeed true /TraySwitch false >> setpagedevice"
*CloseUI: *InputSlot
Стало:
*OpenUI *InputSlot/Paper Tray: PickOne
*OrderDependency: 50 AnySetup *InputSlot
*DefaultInputSlot: AutoSelect
*ru_RU.Translation InputSlot/Лоток загрузки бумаги: ""
*InputSlot AutoSelect/Auto Select: ""
*ru_RU.InputSlot AutoSelect/Автовыбор: ""
*InputSlot Tray1/Tray1: "<< /ManualFeed false /MediaPosition 0 /TraySwitch false >> setpagedevice"
*ru_RU.InputSlot Tray1/Лоток 1: "<< /ManualFeed false /MediaPosition 0 /TraySwitch false >> setpagedevice"
*InputSlot Tray2/Tray2: "<< /ManualFeed false /MediaPosition 1 /TraySwitch false >> setpagedevice"
*ru_RU.InputSlot Tray2/Лоток 2: "<< /ManualFeed false /MediaPosition 1 /TraySwitch false >> setpagedevice"
*InputSlot Tray3/Tray3: "<< /ManualFeed false /MediaPosition 2 /TraySwitch false >> setpagedevice"
*ru_RU.InputSlot Tray3/Лоток 3: "<< /ManualFeed false /MediaPosition 2 /TraySwitch false >> setpagedevice"
*InputSlot Tray4/Tray4: "<< /ManualFeed false /MediaPosition 3 /TraySwitch false >> setpagedevice"
*ru_RU.InputSlot Tray4/Лоток 4: "<< /ManualFeed false /MediaPosition 3 /TraySwitch false >> setpagedevice"
*InputSlot LCT_Donau/LCT: "<< /ManualFeed false /MediaPosition 4 /TraySwitch false >> setpagedevice"
*ru_RU.InputSlot LCT_Donau/Лоток большой ёмкости: "<< /ManualFeed false /MediaPosition 4 /TraySwitch false >> setpagedevice"
*InputSlot ManualFeed/Bypass Tray: "<< /ManualFeed true /TraySwitch false >> setpagedevice"
*ru_RU.InputSlot ManualFeed/Лоток ручной подачи: "<< /ManualFeed true /TraySwitch false >> setpagedevice"
*CloseUI: *InputSlot
На картинке визуально легче определить изменения:Описания некоторых опций занимают несколько строк. Например:
*MediaType Plain/Plain Paper: "<< /KMMediaType (Plain) /KMMediaColor (None) /KMMediaWeight (Normal) /MediaTabType (None) /MediaPreprinted false /MediaPrepunched false >>
/KMOptions /ProcSet findresource /setKMoptions get exec"
*End
Для перевода такой опции надо так же копировать всё целиком от "*MediaType" до "*End":
*ru_RU.MediaType Plain/Обычная бумага: "<< /KMMediaType (Plain) /KMMediaColor (None) /KMMediaWeight (Normal) /MediaTabType (None) /MediaPreprinted false /MediaPrepunched false >>
/KMOptions /ProcSet findresource /setKMoptions get exec"
*End
В конце файла дополнил раздел "Change Log":
*% === Change Log =============================
*% 25.08.2015 Add russian translations
Вот как выглядит результат перевода с точки зрения пользователя. Было:Стало:
За перевод некоторых надписей отвечает система (на снимках видно, что даже в родном английском варианте есть русские слова). Но в результате работы по переводу практически все строки стали на русском языке. Вот ссылка на получившийся переведённый файл.
Комментарии
Отправить комментарий