Форум » GUI » Есть ли функция транслита ? » Ответить

Есть ли функция транслита ?

Andrey: Всем привет ! Подскажите, есть ли в Харборе функция перевода с русского на транслит ? Может кто написал ? Или подскажите как можно сделать самому ! Только не надо советовать, что руками делать... Важна сама идея !

Ответов - 11

petr: FUNCTION repl_lat(letter) // замена русских букв латинскими согласно клавиатуре * cSearchFor := "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ?йцукенгшщзхъфывапролджэячсмитьбю/" cReplaceExp := "QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,./QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,./" letter1 := CharRepl(cSearchFor, letter, cReplaceExp) return (letter1)

PSP: Ну, к примеру, двумерный массив: { { "А", "A" }, { "Б", "B" }, { "В", "V" },.... { "Ж", "ZH" }, ... } Ищем по первому эелементу, берем второй. А вот обратно, с латинского на русский, чуть сложнее. Надо анализировать сочетания, например: "ZH" - "Ж", а не "З" и "Х" и т.д. Вот интересный сайтик: http://www.translit.ru/

Andrey: Не совсем то.... Мне нужно имена файлов перевести в транслит. Например: Железнодорожный Kировский Свердловский Центральный Советский и др. ....


PSP: Имхо, не важно, что переводить.

Andrey: Сделал функцию, может кому пригодиться: /////////////////////////////////////////////////////////////////////////////////// // Функция для перевода русского текста в транслит. [x]Harbour FUNCTION MyTranslit(cStr) LOCAL nI, cStr1, cStr2, aStr1, aStr2 // Сначала заменяем "односимвольные" фонемы. cStr1 := "АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЬЫЭабвгдеёзийклмнопрстуфхъьыэ" cStr2 := "ABVGDEEZIYKLMNOPRSTUFH''IEabvgdeeziyklmnoprstufh''ie" cStr := CharRepl(cStr1,cStr,cStr2,.T.) // Затем - "многосимвольные". aStr1 := { "ж", "ц", "ч", "ш", "щ", "ю", "я", "Ж", "Ц", "Ч", "Ш", "Щ", "Ю", "Я","ї", "Ї", "є", "Є" } aStr2 := {"zh","ts","ch","sh","sch","yu","ya","ZH","TS","CH","SH","SCH","YU","YA","i","Yi","ie","Ye" } FOR nI := 1 TO LEN(aStr1) cStr := CharRepl(aStr1[nI],cStr,aStr2[nI],.T.) NEXT RETURN cStr

Dima: Andrey пишет: Или подскажите как можно сделать самому Andrey пишет: Сделал функцию, может кому пригодиться: Вот и молодец

Andrey: Dima пишет: Вот и молодец Не прошло и года.... Отправлено: 02.12.09 - Сделано: 06.09.11

Dima: Andrey пишет: FOR nI := 1 TO LEN(aStr1) cStr := CharRepl(aStr1[nI],cStr,aStr2[nI],.T.) NEXT Тут CharRepl не верно сработает. Заменить надо на cStr:=Strtran(Cstr,aStr1[nI],aStr2[nI])

petr707: Транлит - стандартизован, можно выбрать таблицу https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D0%B8%D1%82 http://textpattern.ru/html/transliteration-tables.htm

Andrey: petr707 пишет: Транлит - стандартизован, можно выбрать таблицу А в Харборе его нет !

petr707: Все таки - рекомендую посетить Википедию - информацию к размышлению "Можно выбрать.." означает, что.. нет единственного решения и придется.. выбирать



полная версия страницы