Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


apple-mac-os:macos-high-sierra:how-to-create-service-of-fast-transliteration-based-on-perl-script-in-macos-high-sierra

Создание службы быстрой транслитерации, вызываемой через сочетание клавиш в macOS High Sierra

В одной из предыдущих статей нашего Блога представлялся Powershell-скрипт для создания псевдонимов почтовых ящиков из ФИО пользователя. Нечто подобное можно организовать на MAC с помощью Automator.app

При создании нового документа выберем тип «Служба»

Затем на рабочее пространство из библиотеки «утилиты» добавим шаг «Запустить shell-скрипт», настроим службу и шаг: Служба получает «текст» в приложении Firefox.app, установим галочку на «Заменить выбранный текст выходными данными». В настройках шага установим передачу входных данных как аргумента и изменим shell на perl.

Вставим скрипт:

#!/usr/bin/perl
use utf8;
use Encode;
 
for ( map { decode_utf8 join '.', reverse(( split' ', $_ )[0..1])  } @ARGV) {
	s/й/y/g;
	s/Й/Y/g;
    	s/ё/ye/g;
	s/Ё/Ye/g;
	y/абвгдезиклмнопрстуфыэ/abvgdeziklmnoprstufye/;
	y/АБВГДЕЗИКЛМНОПРСТУФЫЭ/ABVGDEZIKLMNOPRSTUFYE/;
    	s/ж/zh/g;
    	s/Ж/Zh/g;
    	s/х/kh/g;
   	s/Х/kh/g;
   	s/ц/ts/g;
    	s/Ц/Ts/g;
    	s/ч/ch/g;
    	s/Ч/Ch/g;
    	s/ш/sh/g;
    	s/Ш/Sh/g;
    	s/щ/sch/g;
    	s/Щ/Sch/g;
    	s/(ъ|ь)//g;
    	s/ю/yu/g;
    	s/Ю/Yu/g;
    	s/я/ya/g;
    	s/Я/Ya/g;
    	print $_
}

Сохраним службу под именем Translit. Для удобства в настройках клавиатуры «Сочетания клавиш» назначим удобное для нас сочетание, например Option+Command+T

Откроем консоль Exchange в Firefox, перейдём в мастер создания ящика и введём в строку «Псевдоним» ФИО пользователя

Выделим Command+A, и вызовем службу Option+Command+T

[UPDATE: 19.01.2022]

Адаптация задачи на AppleScript для выполнения в Команды.app или Automator.app, так же как и в предыдущем варианте через сочетание клавиш. В случае использования Команды.app для работы необходимо разрешить выполнение скриптов в настройках, а так же разрешить использование «/System/Library/PrivateFrameworks/VoiceShortcuts.framework/Versions/A/Support/siriactionsd» в «Системные настройки → Защита и безопасность → Конфиденциальность → Универсальный доступ». Система добавит этот файл в универсальный доступ автоматически, пользователю необходимо только разрешить использование.

set theString to the clipboard
set countwords to count words of theString
 
if countwords is 3 then
 
	set toTranslit to theString
 
	set RULow1 to "а"
	set RULow2 to "б"
	set RULow3 to "в"
	set RULow4 to "г"
	set RULow5 to "д"
	set RULow6 to "е"
	set RULow7 to "ё"
	set RULow8 to "ж"
	set RULow9 to "з"
	set RULow10 to "и"
	set RULow11 to "й"
	set RULow12 to "к"
	set RULow13 to "л"
	set RULow14 to "м"
	set RULow15 to "н"
	set RULow16 to "о"
	set RULow17 to "п"
	set RULow18 to "р"
	set RULow19 to "с"
	set RULow20 to "т"
	set RULow21 to "у"
	set RULow22 to "ф"
	set RULow23 to "х"
	set RULow24 to "ц"
	set RULow25 to "ч"
	set RULow26 to "ш"
	set RULow27 to "щ"
	set RULow28 to "ъ"
	set RULow29 to "ы"
	set RULow30 to "ь"
	set RULow31 to "э"
	set RULow32 to "ю"
	set RULow33 to "я"
	--
	set RUCap1 to "А"
	set RUCap2 to "Б"
	set RUCap3 to "В"
	set RUCap4 to "Г"
	set RUCap5 to "Д"
	set RUCap6 to "Е"
	set RUCap7 to "Ё"
	set RUCap8 to "Ж"
	set RUCap9 to "З"
	set RUCap10 to "И"
	set RUCap11 to "Й"
	set RUCap12 to "К"
	set RUCap13 to "Л"
	set RUCap14 to "М"
	set RUCap15 to "Н"
	set RUCap16 to "О"
	set RUCap17 to "П"
	set RUCap18 to "Р"
	set RUCap19 to "С"
	set RUCap20 to "Т"
	set RUCap21 to "У"
	set RUCap22 to "Ф"
	set RUCap23 to "Х"
	set RUCap24 to "Ц"
	set RUCap25 to "Ч"
	set RUCap26 to "Ш"
	set RUCap27 to "Щ"
	set RUCap28 to "Э"
	set RUCap29 to "Ю"
	set RUCap30 to "Я"
	--
	set ENLow1 to "a"
	set ENLow2 to "b"
	set ENLow3 to "v"
	set ENLow4 to "g"
	set ENLow5 to "d"
	set ENLow6 to "e"
	set ENLow7 to "ye"
	set ENLow8 to "zh"
	set ENLow9 to "z"
	set ENLow10 to "i"
	set ENLow11 to "y"
	set ENLow12 to "k"
	set ENLow13 to "l"
	set ENLow14 to "m"
	set ENLow15 to "n"
	set ENLow16 to "o"
	set ENLow17 to "p"
	set ENLow18 to "r"
	set ENLow19 to "s"
	set ENLow20 to "t"
	set ENLow21 to "u"
	set ENLow22 to "f"
	set ENLow23 to "kh"
	set ENLow24 to "ts"
	set ENLow25 to "ch"
	set ENLow26 to "sh"
	set ENLow27 to "sch"
	set ENLow28 to ""
	set ENLow29 to "y"
	set ENLow30 to ""
	set ENLow31 to "e"
	set ENLow32 to "yu"
	set ENLow33 to "ya"
	--
	set ENCap1 to "A"
	set ENCap2 to "B"
	set ENCap3 to "V"
	set ENCap4 to "G"
	set ENCap5 to "D"
	set ENCap6 to "E"
	set ENCap7 to "Ye"
	set ENCap8 to "Zh"
	set ENCap9 to "Z"
	set ENCap10 to "I"
	set ENCap11 to "Y"
	set ENCap12 to "K"
	set ENCap13 to "L"
	set ENCap14 to "M"
	set ENCap15 to "N"
	set ENCap16 to "O"
	set ENCap17 to "P"
	set ENCap18 to "R"
	set ENCap19 to "S"
	set ENCap20 to "T"
	set ENCap21 to "U"
	set ENCap22 to "F"
	set ENCap23 to "Kh"
	set ENCap24 to "Ts"
	set ENCap25 to "Ch"
	set ENCap26 to "Sh"
	set ENCap27 to "Sch"
	set ENCap28 to "E"
	set ENCap29 to "Yu"
	set ENCap30 to "Ya"
	--
 
	set sourceList to {RULow1, RULow2, RULow3, RULow4, RULow5, RULow6, ¬
		RULow7, RULow8, RULow9, RULow10, RULow11, RULow12, RULow13, ¬
		RULow14, RULow15, RULow16, RULow17, RULow18, RULow19, ¬
		RULow20, RULow21, RULow22, RULow23, RULow24, RULow25, ¬
		RULow26, RULow27, RULow28, RULow29, RULow30, RULow31, ¬
		RULow32, RULow33, RUCap1, RUCap2, RUCap3, RUCap4, RUCap5, ¬
		RUCap6, RUCap7, RUCap8, RUCap9, RUCap10, RUCap11, RUCap12, ¬
		RUCap13, RUCap14, RUCap15, RUCap16, RUCap17, RUCap18, ¬
		RUCap19, RUCap20, RUCap21, RUCap22, RUCap23, RUCap24, ¬
		RUCap25, RUCap26, RUCap27, RUCap28, RUCap29, RUCap30}
	set targetList to {ENLow1, ENLow2, ENLow3, ENLow4, ENLow5, ENLow6, ¬
		ENLow7, ENLow8, ENLow9, ENLow10, ENLow11, ENLow12, ENLow13, ¬
		ENLow14, ENLow15, ENLow16, ENLow17, ENLow18, ENLow19, ¬
		ENLow20, ENLow21, ENLow22, ENLow23, ENLow24, ENLow25, ¬
		ENLow26, ENLow27, ENLow28, ENLow29, ENLow30, ENLow31, ¬
		ENLow32, ENLow33, ENCap1, ENCap2, ENCap3, ENCap4, ENCap5, ¬
		ENCap6, ENCap7, ENCap8, ENCap9, ENCap10, ENCap11, ENCap12, ¬
		ENCap13, ENCap14, ENCap15, ENCap16, ENCap17, ENCap18, ¬
		ENCap19, ENCap20, ENCap21, ENCap22, ENCap23, ENCap24, ¬
		ENCap25, ENCap26, ENCap27, ENCap28, ENCap29, ENCap30}
 
	set ASTID to AppleScript's text item delimiters
	repeat with i from 1 to count of sourceList
		considering case
			set toTranslit to findReplace(item i of sourceList, ¬
				item i of targetList, toTranslit)
		end considering
	end repeat
	set AppleScript's text item delimiters to ASTID
 
	set results to toTranslit's word 2 & "." & toTranslit's word 1
	set the clipboard to results
	tell application "System Events" to key code "9" using command down
	delay 0.1
	set the clipboard to theString
end if
 
on findReplace(findText, replaceText, sourceText)
	set AppleScript's text item delimiters to findText
	set sourceText to text items of sourceText
	set AppleScript's text item delimiters to replaceText
	return sourceText as text
end findReplace

Проверено на следующих конфигурациях:

Версия ОС
Apple macOS High Sierra (10.13.4)
Apple macOS Mojave (10.14)
Apple macOS Catalina (10.15)
Apple macOS Monterey (12.0.1, Apple/Intel)

Автор первичной редакции:
Виталий Якоб
Время публикации: 01.05.2018 17:36

Обсуждение

АлексейАлексей, 21.12.2020 07:58
Шикарная функция. У меня тут возникла задача преобразовать из транслита на русский. То есть обратная функция. Интересно как это можно реализовать на мас. Можете помочь с вопросом ?
Виталий ЯкобВиталий Якоб, 19.01.2022 17:26, 19.01.2022 17:28
В обновлённом варианте Вам будет проще составить "словарь" для замены букв.
Ваш комментарий:
 

apple-mac-os/macos-high-sierra/how-to-create-service-of-fast-transliteration-based-on-perl-script-in-macos-high-sierra.txt · Последнее изменение: 20.01.2022 17:14 — Виталий Якоб

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki