Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Функция перевода рус. сивола в лат.?   Найти похожие ветки 

 
vigo_   (2006-05-30 15:22) [0]

Подскажите где можно найти функцию перевода русских символов в латинскиу транслитерацию? Понадобилось для перевода фамилии и имени (в латиницу).
Думаю тема не нова, может у кого ссылка осталась?
Спасибо.


 
tesseract ©   (2006-05-30 15:26) [1]

создай таблицу крнвертации. Google пр неё знает.


 
Desdechado ©   (2006-05-30 15:31) [2]

элементарно - 2 массива с соответствующими буквами по одинаковым индексам


 
Marser ©   (2006-05-30 15:40) [3]

> [2] Desdechado ©   (30.05.06 15:31)
> элементарно - 2 массива с соответствующими буквами по одинаковым
> индексам

"Х"="H"
"Ш"= ?
В смысле, что одним символом явно не обойдёшься. Для Щ их вообще три нужно.


 
Desdechado ©   (2006-05-30 15:44) [4]

А что, массив обязан быть по CHAR ?
Я ж на писал "буквами". Словом как-то комбинацию "zh" не назовешь.


 
Guest 111   (2006-05-30 15:47) [5]

function TranslChar(c: char): string;
var
 r: string;
begin
 case c of
   "а": r:="a";
   "б": r:="b";
...
  "Ю": r:="U";
  "Я": r:="Ya";
 else r:=c;
 end;
 result:=r;
end;

function Transliterate(aStr: string): string;
var
 i: integer;
begin
 for i:=1 to Length(aStr)
   result:=result+TranslChar(aStr[i]);
end;


 
Marser ©   (2006-05-30 15:49) [6]

Кстати, и "х" открытое пишется как "kh"...


 
vigo_   (2006-05-30 17:01) [7]

Хоть и не красиво, но работает...

function CyrToLat(s: string): String;
var
str : string;
i, l : integer;
begin
 s := AnsiLowerCase(s);
 l := length(s); str := "";
 for i := 1 to l do
  case s[i] of
    "а" : str := str + "a";
    "б" : str := str + "b";
    "в" : str := str + "v";
    "г" : str := str + "g";
    "д" : str := str + "d";
    "е" : str := str + "e";
    "ё" : str := str + "e";
    "ж" : str := str + "zh";
    "з" : str := str + "z";
    "и" : str := str + "i";
    "й" : str := str + "y";
    "к" : str := str + "k";
    "л" : str := str + "l";
    "м" : str := str + "m";
    "н" : str := str + "n";
    "о" : str := str + "o";
    "п" : str := str + "p";
    "р" : str := str + "r";
    "с" : str := str + "s";
    "т" : str := str + "t";
    "у" : str := str + "u";
    "ф" : str := str + "f";
    "х" : str := str + "kh";
    "ц" : str := str + "ts";
    "ч" : str := str + "ch";
    "ш" : str := str + "sh";
    "щ" : str := str + "shch";
    "ъ" : str := str + "";
    "ы" : str := str + "y";
    "ь" : str := str + "";
    "э" : str := str + "e";
    "ю" : str := str + "yu";
    "я" : str := str + "ya";
    " " : str := str + " ";
  end;
Result := UpperCase(str);
end;


 
oldman ©   (2006-05-30 17:05) [8]


> Guest 111   (30.05.06 15:47) [5]


> vigo_   (30.05.06 17:01) [7]


В моей фамилии концовка "деев"...
Прямой перевод ни подойдет... Получится длинное "и"...
:)))


 
vigo_   (2006-05-30 17:20) [9]

Спасибо, тогда, видимо, так:

Result := UpperCase(StringReplace(str, "ee", "eye", [rfReplaceAll]));


Интересно, какие еще могут быть варианты?


 
oldman ©   (2006-05-30 17:24) [10]


> vigo_   (30.05.06 17:20) [9]
> Интересно, какие еще могут быть варианты?


"деев":="de`ev" :)
A "deyev", имхо, = "дейев"


 
vigo_   (2006-05-30 17:43) [11]

Судя по ссылке, все-таки "deev", имхо:

http://ezpc.dax.ru/itliter.shtml


 
vigo_   (2006-05-30 18:31) [12]

Вроде окончательный вариант, если кому интересно:


function CyrToLat(s: string): String;
var
str : string;
i, l : integer;
begin
 s := AnsiLowerCase(s);
 l := length(s); str := "";
 for i := 1 to l do
  case s[i] of
    "а" : str := str + "a";
    "б" : str := str + "b";
    "в" : str := str + "v";
    "г" : str := str + "g";
    "д" : str := str + "d";
    "е" : if ((i = 1)
            or (copy(str, length(str), 1) = " ")
            or (copy(str, length(str), 1) = "-")
            or (copy(str, length(str), 1) = "e")
            or (copy(str, length(str), 1) = "o"))
           then str := str + "ye"
             else str := str + "e";
    "ё" : str := str + "e";
    "ж" : str := str + "zh";
    "з" : str := str + "z";
    "и" : str := str + "i";
    "й" : begin
           if copy(str, length(str), 1) = "i" then delete(str, length(str), 1);
           str := str + "y"
          end;
    "к" : str := str + "k";
    "л" : str := str + "l";
    "м" : str := str + "m";
    "н" : str := str + "n";
    "о" : str := str + "o";
    "п" : str := str + "p";
    "р" : str := str + "r";
    "с" : str := str + "s";
    "т" : str := str + "t";
    "у" : str := str + "u";
    "ф" : str := str + "f";
    "х" : str := str + "kh";
    "ц" : str := str + "ts";
    "ч" : str := str + "ch";
    "ш" : str := str + "sh";
    "щ" : str := str + "shch";
    "ъ" : str := str + "-";
    "ы" : str := str + "y";
    "ь" : str := str + "-";
    "э" : str := str + "e";
    "ю" : str := str + "yu";
    "я" : str := str + "ya";
    " " : str := str + " ";
  end;
Result := UpperCase(StringReplace(str, "-", "", [rfReplaceAll]));
end;



Страницы: 1 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.055 c
2-1149597376
fast2
2006-06-06 16:36
2006.06.25
Как добавить строку вStringGrid e?


1-1147956544
Layner
2006-05-18 16:49
2006.06.25
Как "заставить" бегать SelectItems в TreeView


2-1149774642
Nikolaich
2006-06-08 17:50
2006.06.25
Как программно переместить splitter?


2-1149608848
Iehbr
2006-06-06 19:47
2006.06.25
Что за глюк???


4-1143199326
slaga
2006-03-24 14:22
2006.06.25
Как получить ссылку на работающий Thread имея его ID