Транслитерация

Материал из DRKB

Транслитерация[править | править код]

Например, молоко - moloko. И всё.

Вот пример функции, которая транслирует из русских слов в английские. Пригодилась, когда нужно было файлы в mp3-плеер перегонять - он русский не понимает.


unit Translate;

interface

function Convert(OldName: string): string;

implementation

function Convert(OldName: string): string;
var
  OldNameLength: Integer;
  i: Integer;
  s: string;
begin
  OldNameLength := Length(OldName);
  s := '';
  i := 1;
  while i <= OldNameLength do
  begin
    if (OldName[i] in ['A'..'Z'] + ['a'..'z'] + ['0'..'9'] +
      ['{'] + ['}'] + ['['] + [']'] + ['`'] + ['~'] +
      ['!'] + ['@'] + ['#'] + ['$'] + ['%'] + ['^'] +
      ['&'] + ['*'] + ['('] + [')'] + ['-'] + ['_'] +
      ['+'] + ['='] + ['\'] + ['|'] + [';'] + [':'] +
      ['"'] + ['{'] + ['<'] + ['>'] + [','] + ['.'] +
      [' '] + ['?'] + ['/'] + ['№'] + ['^']) then
      s := s + OldName[i];
    if OldName[i] in ['А', 'Б', 'а', 'б'] then
      s := s + chr(Ord(OldName[i]) - 127);
    if OldName[i] in ['В', 'в'] then
      s := s + chr(Ord(OldName[i]) - 108);
    if OldName[i] in ['Г', 'г', 'Ж', 'ж'] then
      s := s + chr(Ord(OldName[i]) - 124);
    if OldName[i] in ['Д', 'д', 'Е', 'е'] then
      s := s + chr(Ord(OldName[i]) - 128);
    if OldName[i] in ['З', 'з'] then
      s := s + chr(Ord(OldName[i]) - 109);
    if OldName[i] in ['И', 'и', 'К', 'к', 'Л', 'л', 'М', 'м', 'Н',
      'н', 'О', 'о', 'П', 'п'] then
      s := s + chr(Ord(OldName[i]) - 127);
    if OldName[i] in ['Й', 'й'] then
      s := s + chr(Ord(OldName[i]) - 128);
    if OldName[i] in ['Р', 'р', 'С', 'с', 'Т', 'т', 'У', 'у'] then
      s := s + chr(Ord(OldName[i]) - 126);
    if OldName[i] in ['Ф', 'ф'] then
      s := s + chr(Ord(OldName[i]) - 142);
    if OldName[i] in ['Х', 'х'] then
      s := s + chr(Ord(OldName[i]) - 141);
    if OldName[i] in ['Ц', 'ц'] then
      s := s + chr(Ord(OldName[i]) - 147);
    if OldName[i] in ['Ы', 'ы'] then
      s := s + chr(Ord(OldName[i]) - 130);
    if OldName[i] in ['Э', 'э'] then
      s := s + chr(Ord(OldName[i]) - 152);
    if OldName[i] = 'Ё' then
      s := s + 'Yo';
    if OldName[i] = 'ё' then
      s := s + 'yo';
    if OldName[i] = 'Ч' then
      s := s + 'Ch';
    if OldName[i] = 'ч' then
      s := s + 'ch';
    if OldName[i] = 'Ш' then
      s := s + 'Sh';
    if OldName[i] = 'ш' then
      s := s + 'sh';
    if OldName[i] = 'Щ' then
      s := s + 'Sch';
    if OldName[i] = 'щ' then
      s := s + 'sch';
    if OldName[i] in ['Ъ', 'ъ', 'Ь', 'ь'] then
      s := s + chr(39);
    if OldName[i] = 'Ю' then
      s := s + 'Yu';
    if OldName[i] = 'ю' then
      s := s + 'yu';
    if OldName[i] = 'Я' then
      s := s + 'Ya';
    if OldName[i] = 'я' then
      s := s + 'ya';
    i := i + 1;
  end;
  Convert := s;
end;

end.


Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01972