
  const
    TranslitTableHigh = 155;
    TranslitData: array [0..TranslitTableHigh] of WideString = (
      'АA','аa','БB','бb','ВV','вv','ГG','гg','ДD','дd',
      'ЕE','еe','ЁYO','ёyo','ЖZH','жzh','ЗZ','зz','ИI','иi',
      'ЙJ','йj','КK','кk','ЛL','лl','МM','мm','НN','нn',
      'ОO','оo','ПP','пp','РR','рr','СS','сs','ТT','тt',
      'УU','уu','ФF','фf','ХH','хh','ЦTS','цts','ЧCH','чch',
      'ШSH','шsh','ЩSHCH','щshch','Ь''','ь''','ЫY','ыy',
      'Ъ''','ъ''','ЭE','эe','ЮYU','юyu','ЯYA','яya',
      '‘''','’''','“"','”"','„"','…...','«"','»"','®(R)',
      '–-','—-','‘''','ŠS','ŽZ','˜~','™(tm)','šs','žz',
      'ŸY','¡j','©(C)','ÿy','¼1/4','½1/2','¾3/4','¿?',
      'ÀA','ÁA','ÂA','ÃA','ÄA','ÅA','ÆAE','ÇC','ÈE','ÉE',
      'ÊE','ËE','ÌI','ÍI','ÎI','ÏI','ÐD','ÑN','ÒO','ÓO',
      'ÔO','ÕO','ÖOE','×x','ØO','ÙU','ÚU','ÛU','ÜUE','ÝY',
      'ßss','àa','áa','âa','ãa','äae','åa','æae','çc','èe',
      'ée','êe','ëe','ìi','íi','îi','ïi','ðo','ñn','òo',
      'óo','ôo','õo','öoe','øo','ùu','úu','ûu','üue','ýy',
      '№No','≠<>','≤<=','≥>=');
  var
    trata: array[WideChar] of String[4];

  procedure InitTranslit;
  var
    w: WideChar;
    i: integer;
  begin
    for w:=low(WideChar) to high(WideChar) do
      trata[w]:= w;
    for i:=0 to TranslitTableHigh do
      trata[TranslitData[i][1]]:= Copy(TranslitData[i], 2, Length(TranslitData[i]) - 1);
  end;
    
  function Translit(s: WideString): AnsiString;
  var i: integer;
  begin
    Result:='';
    For i:=1 to length(s) do Result+= trata[s[i]];
  end;
