Что нового

Нужен Транслитератор латинских литер в русские

zeionline

Новичок
Сообщения
36
Репутация
1
Версия AutoIT: v3.3.6.1
Описание:
Нужен Транслитератор с двумя полями ввода текста. Принцип роботы: нужно чтоб переводил латинские литеры в русские, в верхние поле вписуеш латинские литеры в нижнем выводит русские (q=й , w=ц , e=у ).
Примечания:
Желательно чтоб скрипт переводил как латинские литеры в русские так и на оборот.
Спасибо.
 

SET777

Новичок
Сообщения
51
Репутация
3
zeionline
Назначить каждой клавише транслитерацию - подходит?
Код:
$q = InputBox("", "")
If $q = 'q' Then
	MsgBox(0, "", 'Русская буква й')
ElseIf $q = 'й' Then
	MsgBox(0, "", 'Английская q')
EndIf
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
zeionline
Может кто из этого вам поможет сделать

Код:
#include <WindowsConstants.au3>

;читаем таблицу соответствий
$file = FileOpen(@ScriptDir&'\Translits.txt', 0)
$table = FileRead($file)
FileClose($file)

; создаём интерфейс
GUICreate('My Program', 300, 240, -1, -1, $WS_OVERLAPPEDWINDOW)
$Edit=GUICtrlCreateEdit('', 10, 10, 280, 180)
$Start=GUICtrlCreateButton('Выполнить', 200, 200, 90, 28)
$ObrTrnstF=GUICtrlCreateCheckbox('Обратное направление', 10, 200, 160, 17)
GUISetState ()
While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case $Start
			If GUICtrlRead($ObrTrnstF)=4 Then
				$Trt1=StringRegExp($table, '(.*)(?:=.*?\r\n)', 3)
				$Trt2=StringRegExp($table, '(?:.*?=)(.*)(?=\r\n)', 3)
			Else
				$Trt1=StringRegExp($table, '(?:.*?=)(.*)(?=\r\n)', 3)
				$Trt2=StringRegExp($table, '(.*)(?:=.*?\r\n)', 3)
			EndIf
			$Edit0=GUICtrlRead($Edit)
			If $Edit0 Then
				For $j = 0 to UBound($Trt1)-1
					$Edit0=StringReplace($Edit0, $Trt1[$j], $Trt2[$j], 0, 1)
				Next
			EndIf
			GUICtrlSetData($Edit, $Edit0)
		Case -3
			 Exit
	EndSwitch
WEnd


файл Translits.txt
Код:
Ё=YO
Ж=ZH
Й=Y'
Х=KH
Ц=TC
Ч=CH
Щ=SHC
Ш=SH
Э=E'
Ю=YU
Я=YA
А=A
Б=B
В=V
Г=G
Д=D
Е=E
З=Z
И=I
К=K
Л=L
М=M
Н=N
О=O
П=P
Р=R
С=S
Т=T
У=U
Ф=F
Ъ='
Ы=Y
Ь='
ё=yo
ж=zh
й=y'
х=kh
ц=tc
ч=ch
щ=shc
ш=sh
э=e'
ю=yu
я=ya
а=a
б=b
в=v
г=g
д=d
е=e
з=z
и=i
к=k
л=l
м=m
н=n
о=o
п=p
р=r
с=s
т=t
у=u
ф=f
ъ='
ы=y
ь='

В утилите ReName есть ещё пару десятков файлов правил транслитерации.

Либо получить файлы транслитерации скриптом (а то у меня в ReName под имена файлов заточено)
Код:
_translit('http://www.translit.ru/?direction=ru&account=', @ScriptDir&'\translit_ru.txt')
_translit('http://www.translit.ru/?direction=ru&account=numeric', @ScriptDir&'\буквы-цифры.txt')
_translit('http://www.translit.ru/?direction=ru&account=gost-7-79-2000', @ScriptDir&'\ГОСТ-7-79-2000.txt')
_translit('http://www.translit.ru/?direction=ru&account=gost-16876-71', @ScriptDir&'\ГОСТ-16876-71.txt')
_translit('http://www.translit.ru/?direction=ru&account=sjev-1362-78', @ScriptDir&'\СЭВ-1362-78.txt')
_translit('http://www.translit.ru/?direction=ru&account=mvd-rf', @ScriptDir&'\МВД-РФ.txt')
_translit('http://www.translit.ru/?direction=ru&account=lc', @ScriptDir&'\LC.txt')
_translit('http://www.translit.ru/?direction=ru&account=bgn', @ScriptDir&'\BGN.txt')
_translit('http://www.translit.ru/?direction=ru&account=bsi', @ScriptDir&'\BSI.txt')

_translit('http://www.translit.ru/?direction=ua&account=', @ScriptDir&'\украинский.txt')
_translit('http://www.translit.ru/?direction=ge&account=', @ScriptDir&'\грузинский.txt')
_translit('http://www.translit.ru/?direction=gr&account=', @ScriptDir&'\греческий.txt')
_translit('http://www.translit.ru/?direction=be&account=', @ScriptDir&'\белорусский.txt')
_translit('http://www.translit.ru/?direction=am&account=', @ScriptDir&'\армянский.txt')
_translit('http://www.translit.ru/?direction=il&account=', @ScriptDir&'\иврит.txt')

Func _translit($url, $file)
$vTest = InetRead($url)
If @error Then MsgBox(0, 'Сообщение', 'Возможно интернет отключен')
$vTest = BinaryToString($vTest)
; вытаскиваем 4 группы транслита (строчные и заглавные, символы и транслит).
$vTest=StringRegExp($vTest, '(?si)(?:.*var chartable = new Array\(new Array\(")(.*?)(?:"\),new Array\(")(.*?)(?:"\),new Array\(")(.*?)(?:"\),new Array\(")(.*?)(?="\)\);\r\nfunction showtable.*)', 3)
; удаляем мета-символы
For $i = 0 to 3
	$vTest[$i]=StringReplace($vTest[$i], '\', '')
Next
; создаём массив подмены
$1=StringSplit($vTest[0], '","', 1)
$2=StringSplit($vTest[1], '","', 1)
$3=StringSplit($vTest[2], '","', 1)
$4=StringSplit($vTest[3], '","', 1)

; цикл объединения в таблицу.
$TextS = ''
$TextU = ''
For $i = 1 To $1[0]
	$TextS&=$1[$i]&'='&$3[$i]&@CRLF
	$TextU&=$2[$i]&'='&$4[$i]&@CRLF
Next

$file = FileOpen($file, 2)
FileWrite($file, $TextS&$TextU)
FileClose($file)
EndFunc
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
:whistle: :whistle: :whistle:
Код:
#include <GUIConstants.au3>

$GUI = GUICreate("1337 Text Translator", 200, 90, -1, -1)
$Input = GUICtrlCreateInput("", 10, 60, 180, 20)
$Button = GUICtrlCreateButton("1337 My Text", 10, 30, 180, 25)
$Label = GUICtrlCreateLabel("", 10, 10, 180, 20)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
        Exit
    Case $nMsg = $Button
        $string = GUICtrlRead($Input)
        $string = StringReplace($string, "s", "$")
        $string = StringReplace($string, "a", "4")
        $string = StringReplace($string, "o", "0")
        $string = StringReplace($string, "i", "!")
        $string = StringReplace($string, "e", "3")
        $string = StringReplace($string, "l", "|_")
        $string = StringReplace($string, "p", "|>")
        $string = StringReplace($string, "t", "7")
        $string = StringReplace($string, ".", ",")
        $string = StringReplace($string, "b", "/3")
        $string = StringReplace($string, "c", "(")
        $string = StringReplace($string, "d", "[)")
        $string = StringReplace($string, "h", "]-[")
        $string = StringReplace($string, "k", "|<")
        $string = StringReplace($string, "m", "|v|")
        $string = StringReplace($string, "n", "/\/")
        $string = StringReplace($string, "q", "()_")
        $string = StringReplace($string, "r", "/2")
        $string = StringReplace($string, "v", "\/")
        $string = StringReplace($string, "w", "\/\/")
        $string = StringReplace($string, "x", "><")
        $string = StringReplace($string, "y", "`/")
        $string = StringReplace($string, "z", "7_")
        MsgBox(0, "1337 Text", $string)
    EndSelect
WEnd


http://www.autoitscript.com/forum/topic/57731-1337-text-translator/
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Zaramot
Разве замена "[" на "х" это транслит? И лучше это делать циклом, запись намного компактнее. Делаем StringSplit, потом перебираем массив в цикле.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Когда-то делал функцию транслита с однозначным обратным ретранслитом.
Вот можно приспособить
Особенно не тестировал.
Приблизительно так :
Код:
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <EditConstants.au3>

$hForm = GUICreate('Test',300, 300)
GUISetBkColor(0xECE9D8)

$hInput1=GUICtrlCreateInput ( "", 5, 60, 250, 40)
$hInput2=GUICtrlCreateInput ( "", 5, 120, 250, 40)

$ButTest1=GUICtrlCreateButton('Обратная операция',150, 270, 120, 25)
GUICtrlSetTip (-1, "Проверить обратной  операцией ")

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
         Case $ButTest1
            $sText=GUICtrlRead($hInput2)
            GUICtrlSetData($hInput1, $sText)
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam) 
	Local $hWndFrom = $ilParam
	Local $iIDFrom = BitAND($iwParam, 0xFFFF)
	Local $iCode = BitShift($iwParam, 16)
	Switch $hWnd
        Case $hForm
            Switch $iIDFrom
                Case  $hInput1
                    Switch $iCode
                        Case $EN_UPDATE
                            $sText=GUICtrlRead($hInput1)
                            $iASC=Asc(StringLeft($sText,1))
                        If $iASC< 192 Then 
                            $iFlag=2
                        Else
                            $iFlag=1
                        EndIf
                        $sNewText=__StringTranslit_ReTranslit1($sText, $iFlag)   
                        GUICtrlSetData($hInput2, $sNewText)
                    EndSwitch
        EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG 
EndFunc  ;==>WM_COMMAND

;============================================================================================================
Func __StringTranslit_ReTranslit1($sString,$flag=1)   
; - Название функции       :  Транслит-Ретранслит текстовой строки
;- Синтаксис              :  $text=__StringTranslit_ReTranslit($text,$flag)
;  Параметры              ;  $flfg = 1  - Транслит  
;                     		    ;  $flfg = 2  - РеТранслит 
;- Возврашаемое значение  :  Измененная строка
;- Дата написания         :  19.10.2008
;- Версия                 :  AutoIT 3.2.12.0   
;============================================================================================================
	Local Const $aCyrTab[72] = [71, "щ","Щ",                	"щ","Щ","ы","Ы", _
									"ё","ж","ч","ш","э","ю","я", _
									"Ё","Ж","Ц","Ч","Ш","Э","Ю","Я", _
									"а","б","в","г","д","е","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ь","ъ","ы", _
									"А","Б","В","Г","Д","Е","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ь","Ъ","Ы", _								
																"ц","Ц"]
	
	Local Const $aLatTab[72] = [71, "sch","SCH",                "sh`","SH`","i`","I`", _
									"yo" ,"zh" ,"ch","sh","e`","yu","ya", _
									"YO" ,"ZH" ,"TS","CH","SH","E`","YU","YA", _
									"a","b","v","g","d","e","z","i","j","k","l","m","n","o","p","r","s","t","u","f","h","`","'","y", _
									"A","B","V","G","D","E","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","H","`","'","Y", _
																"c","C"]
	
	$sString=StringReplace ( $sString ,"'",'"')
	If $flag=1  Then 
		;$sString=StringReplace ( $sString ,"'",'"')
		Local $a1=$aCyrTab,$a2=$aLatTab
	Else
		Local $a2=$aCyrTab,$a1=$aLatTab
	EndIf

	For $i = 1 To UBound($a1)-1
		$sString = StringReplace($sString, $a1[$i],$a2[$i], 0, 2) 
	Next

	If $flag=1  Then Return $sString

	$sString = StringRegExpReplace($sString, "([А-Я,Ё]{2})ь","\1Ь")  
	$sString = StringRegExpReplace($sString, "([А-Я,Ё]{2})ъ","\1Ъ")  
	$sString = StringRegExpReplace($sString, "ь([А-Я,Ё])","Ь\1")  
	$sString = StringRegExpReplace($sString, "ъ([А-Я,Ё])","Ъ\1")

	Return $sString
EndFunc  ;==>__StringTranslit_ReTranslit
 
Верх