1

Тема: AHK: Трансляция английских слов в русские

Всем здравствуйте, мне нужно, чтобы английские символы преобразовывались в русские.
То есть, например пользователь вводит в InputBox такую фразу: Privet - а скрипт транслирует в Привет.
Пример:

Анг: F - Скрипт транслирует в Ф
Анг: R - Скрипт транслирует в Р

Можно привести пример одной клавиши, а далее я сам сделаю все остальные.

2

Re: AHK: Трансляция английских слов в русские

ahk: punto switcher.

3

Re: AHK: Трансляция английских слов в русские

svoboden, и как с помощью Punto Switcher можно такое сделать?

4

Re: AHK: Трансляция английских слов в русские

Зачем punto switcher, в поиске есть же примеры для ahk.

5

Re: AHK: Трансляция английских слов в русские

StringReplace.

6

Re: AHK: Трансляция английских слов в русские

Я поискал в поисковике, там нету того, чего я хочу.
Вот первый пример:
http://forum.script-coding.com/viewtopic.php?id=8737
Вот второй пример:
http://forum.script-coding.com/viewtopic.php?id=11455
Тут ничего не понятно, а мне нужно именно, чтобы символы в переменной из анг. языка компилировались в русский.

7 (изменено: svoboden, 2017-10-26 08:28:48)

Re: AHK: Трансляция английских слов в русские

И в теме % AHK: как в пунто свитчере тоже искали?

8

Re: AHK: Трансляция английских слов в русские

Вот пример кода:

InputBox, Text
V:= ""
EN1=QWERTYUIOP{}qwertyuiop[]
RU1=ЙЦУКЕНГШЩЗХЪйцукенгшщзхъ
EN2=ASDFGHJKL:"asdfghjkl;'
RU2=ФЫВАПРОЛДЖЭфывапролджэ
EN3=ZXCVBNM<>?zxcvbnm,./
RU3=ЯЧСМИТЬБЮ,ячсмитьбю.
EN4=~@#$^&|`
RU4=Ё"№;:?/ё
EN=%EN1%%EN2%%EN3%%EN4%
RU=%RU1%%RU2%%RU3%%RU4%

Loop, parse, Text
{
M1:=A_LoopField

	if InStr(EN, M1)
	{
	L1=%En%
	L2=%RU%
	}
	else if InStr(RU, M1)
	{
	L1=%RU%
	L2=%En%
	}
	else
	{
	V.=A_LoopField
	L1=
	L2=
	}
	
	Loop, parse, L1
	{
	M2:=A_LoopField
	if (Asc(M2)=Asc(M1))
		{
		N:=A_Index
		break
		}
	}
	Loop, parse, L2
	{
	if (N=A_Index)
		{
		V.=A_LoopField
		break
		}
	}	
} 
Msgbox, % V
return

Тут при вставке в inputBox, например Angella - он выводит фтпуддф - неверное значение. Не подскажете, как можно переделать этот код, чтобы он выводил - Анжелла?
PS: скрипт взят с сайта - http://forum.script-coding.com/viewtopic.php?id=11455

9

Re: AHK: Трансляция английских слов в русские

Зачем такое, я имел в виду автозамену.

10

Re: AHK: Трансляция английских слов в русские

svoboden, а как её сделать?

11

Re: AHK: Трансляция английских слов в русские

Откудово я знаю, как ее сделать. Справку читайте, тренеруйтесь, я сам еще учусь.

12 (изменено: svoboden, 2017-10-26 09:06:21)

Re: AHK: Трансляция английских слов в русские

Так можно:

InputBox, Output
if Output = Angella
MsgBox Анжелла
else 
MsgBox % output

13

Re: AHK: Трансляция английских слов в русские

Malcev, а как это можно реализовать с помощью StringReplace?

14

Re: AHK: Трансляция английских слов в русские

Оказалось проще простого! Блин как же я раньше не догадался.

15 (изменено: svoboden, 2017-10-27 05:48:00)

Re: AHK: Трансляция английских слов в русские

sanniauto пишет:

Оказалось проще простого!

Да не совсем, это просто все, а если слов этих будет много? Тогда, может, нужен массив.

InputBox, Output

Array1 := Array("Red", "Green", "Angella","Blue","Privet")
Array2 := Array("Красный", "Зеленый", "Анджелла","Синий","Привет")

for i in Array1
  if Array1[i] = Output
   MsgBox, % Array2[i]

16

Re: AHK: Трансляция английских слов в русские

sanniauto, транслируют радио- и телепередачи. В Вашем случае речь наверное о транслитерации.

17 (изменено: belyankin12, 2017-10-29 12:20:01)

Re: AHK: Трансляция английских слов в русские

svoboden, вы хотите создавать массив из всех слов русского языка? Делаем функцию:

translit(repstr)
{
	StringReplace, repstr, repstr, a , [[a]] , All
    return repstr
}

msgbox, % translit("a")
Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

18 (изменено: Malcev, 2017-10-27 12:47:35)

Re: AHK: Трансляция английских слов в русские

svoboden пишет:

Да не совсем, это просто все, а если слов этих будет много

А разве задача была в переводе слов?

sanniauto пишет:

мне нужно, чтобы английские символы преобразовывались в русские.

Кстати, sanniauto, а чего финальный код не привели, может у кого-то возникнет подобная проблема?

19 (изменено: svoboden, 2017-10-28 06:57:27)

Re: AHK: Трансляция английских слов в русские

belyankin12, "Когда вы говорите (запятая) что не можете сделать..."
Malcev, да кто мешает использовать буквы вместо слов?

20

Re: AHK: Трансляция английских слов в русские

svoboden, больше нечего сказать? Браво. Вот вы и показали уровень своего интеллекта.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

21

Re: AHK: Трансляция английских слов в русские

svoboden, никто не мешает. Просто зачем  писать, что не просто это все, аргументируя это вами выдуманным заданием. Да и приведенное вами решение окажется совсем непростым, если понадобится заменить какие-либо слова в массивах.

22 (изменено: svoboden, 2017-10-29 02:02:33)

Re: AHK: Трансляция английских слов в русские

belyankin12, так покажите пример, как должна работать ваша чудо-функция "translit".
Malcev, я писал, что не совсем это просто все.

23

Re: AHK: Трансляция английских слов в русские

Что сложного написать для всех английских букв stringreplace?
Это можно сделать вполне без массивов.

24 (изменено: svoboden, 2017-10-30 07:13:48)

Re: AHK: Трансляция английских слов в русские

Это как, для каждой буквы отдельная команда нужна?

25

Re: AHK: Трансляция английских слов в русские

Да.

26 (изменено: svoboden, 2017-10-29 02:46:48)

Re: AHK: Трансляция английских слов в русские

А через RegExReplace никак не сделать, или это как по воробьям из .....?

27

Re: AHK: Трансляция английских слов в русские

StringReplace можно заменить на RegexReplace, но толку от этого никакого не будет, так же  придется писать для каждой буквы.
Только еще медленнее будет.

28 (изменено: svoboden, 2017-10-29 03:51:09)

Re: AHK: Трансляция английских слов в русские

Странно, все английские буквы может удалить одной командой, а заменить - нет.

29

Re: AHK: Трансляция английских слов в русские

Ничего странного.
Удалить - это значить заменить каждое совпадение на пустоту.
А в данной задаче заменять надо не на одно и тоже значение, а на разные.
А такое в регулярных выражениях можно добиться разве что с помощью Callout:

Global arr := {a:"а", b:"б", v:"в"}
Global Replacement := 0

msgbox % RegExReplace("abv", ".(?C:Match)", Replacement)

Match(M)
{	
   Replacement := arr[M]
}

30

Re: AHK: Трансляция английских слов в русские

Не понимаю, чего здесь обсуждать. Автор даже толком вопрос не сформулировал. http://i.smiles2k.net/hello_byby_smiles/meeting.gif

31 (изменено: belyankin12, 2017-10-29 11:20:17)

Re: AHK: Трансляция английских слов в русские

Сформулировал, мне больше интересно то, что Malcev объясняет svoboden то, что я уже сделал и показал, а тот, неспособный скопировать код из примера и увидеть как он работает, просит примеров накидать ему.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

32

Re: AHK: Трансляция английских слов в русские

Вообще-то автор темы sanniauto, и что он имел в виду под "трансляция" - не понятно. Вот его пример:

Privet - а скрипт транслирует в Привет
Анг: F - Скрипт транслирует в Ф
Анг: R - Скрипт транслирует в Р

А теперь представьте себе, что на входе слово knizhka. Что должно быть на выходе - книжка или книзхка? Преобразовывать по правилам транслитерации? Тогда как скрипт узнает как отличить ж от зх? И вообще автора не смущает слово "трансляция" в названии темы. Думаю, ему сперва нужно упорядочить своим мысли-скакуны.

33

Re: AHK: Трансляция английских слов в русские

По крайней мере когда мы начали воспринимать его слова как транслит, он начал отзываться в положительную сторону, значит угадали верно .

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

34

Re: AHK: Трансляция английских слов в русские

Ага, осталось только составить словарь на 100000+ русских слов. Я понимаю, если транслит кириллицы на латиницу, но не наоборот же. Я написал Shodka, а он будет думать: это Сходка или Шодка?

35 (изменено: belyankin12, 2017-10-29 12:32:36)

Re: AHK: Трансляция английских слов в русские

Тут уже придется выбирать. Ну либо пожертвовать удобством и сделать условности в strreplase, например sh это "ш" а s_h это "cx", как-то так. Ну либо как svoboden предлагает - массив из всех слов английского или русского языка .

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

36 (изменено: Malcev, 2017-10-29 13:34:40)

Re: AHK: Трансляция английских слов в русские

Массив из всех слов не поможет, так как есть исключения - Пасха-Паша. Чтобы избежать таких проблем можно использовать апостроф. Sh-ш, s'h-сх.

37

Re: AHK: Трансляция английских слов в русские

Ну это такой рофл был, конечно в программировании так дела не делаются, это я про массив . Мне кажется логичнее все же будет наоборот. Sh - сх а s'h - ш. Т.е. если пользователь хочет переводить как есть пусть и пишет как есть, а если определенная группа символов переводится по особенному, то пусть её помечает. И плевать на здравый смысл и правила .

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

38

Re: AHK: Трансляция английских слов в русские

Если исходить из удобства для пользователя, то Sh-ш правильнее, так как слов с буквой "ш" намного больше чем с сочетанием "сх".

39

Re: AHK: Трансляция английских слов в русские

Смотря кто будет использовать. Есть такая определенная категория юзверей (процентов 80 из всех), которым нужна только одна кнопка "Сделать то, что я хочу". И при этом у них абсолютно отключаются мозги на любые, даже самые-самые простые условности работы программы. Потому если целевой аудиторией этого скрипта будут такие юзвери, то все же лучше сделать мой вариант, потому что в этом плане исключений (не по популярности, а по количеству) меньше. Ну мне так кажется.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

40

Re: AHK: Трансляция английских слов в русские

В принципе тут даже ничего сочинять не надо, можно взять готовый шаблон и модернизировать его уже по своему вкусу.
Например вот:
http://fallenangelz.clan.su/index/translit/0-12

41 (изменено: svoboden, 2017-10-30 07:57:42)

Re: AHK: Трансляция английских слов в русские

Мне эти sanniauto вместе с belyankin12 все мозги запутали. Один не знает, как происходит транслитерация текста через Punto switcher, другой думает, что я не знаю про команду StringReplace. Отвечаю
belyankin12`у: "Я знаю, как через StringReplace происходит транслитерация текста, я хотел упростить скрипт, чтобы не писать более 50 команд StringReplace"! И считаю, что мне это удалось.

P.S. А насчет того, что в программировании так дела не делаются. Хорошо, тогда в Excele тут тоже неправильный макрос делают? Что-то сомневаюсь. Так что belyankin12 это я с вас смеюсь.

42

Re: AHK: Трансляция английских слов в русские

50 строчек кода это не самое страшное. Как по мне легче 50 строчек замутить на каждую букву, чем создавать массив со словами, коих может быть больше даже чем 50. Вам уже сказали что все равно придется создавать 50 строчек, или со strreplace, или с regexereplace, ну либо создавать один большой массив, потом regex и ещё функцию запихивать с одной дополнительной переменной. Меньше писать, может быть, но при этом работа в разы медленее. Мы все поняли, что вы знаете про регулярные выражения много, но в программировании очень редко существует единственный способ решения проблемы.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.