ФИО по-латински.

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
kreator
✯ Ветеран ✯
Сообщения: 5160
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

ФИО по-латински.

Сообщение kreator »

Нужно на лету преобразовывать фамилию и, может быть, имя, отчество в латиницу. Хранить по-латински в базе не хочется. Ни у кого нет процедурки для этого дела?
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

ФИО по-латински.

Сообщение Дед Пахом »

Интересный вопрос. Если без затей, то без проблем - поставить каждой русской букве однозначное соответствие. А если например надо "Чехов" преобразовать в "Chekhov"?
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 5160
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

ФИО по-латински.

Сообщение kreator »

Как раз с Чеховым проблем нет, однозначное соответствие "ч"-"ch", "х"-"kh". Пугает скорее "й", "ий", "ый". В общем, когда надо обрабатывать несколько русских букв, а звук как бы один. Целая тема. Думал, может кто уже проходил.
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

ФИО по-латински.

Сообщение Дед Пахом »

Нашёл перспективную страничку, для php, но это не важно https://habrahabr.ru/post/187778/
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

ФИО по-латински.

Сообщение Admin »

Ну по тупому как то так... на основе документа

Код: Выделить всё

       PROGRAM
       MAP
         Translit(STRING Str),STRING
       END

   CODE
   MESSAGE(Translit('Пример:   транслитерация фамилии - Пупкин Василий Васильевич!'))

Translit        PROCEDURE(STRING Str)!,STRING
RusSmall        STRING('абвгдеёжзийклмнопрстуфхцчшщыэюяьъ')
EngChars        STRING(4),DIM(33)
Result          STRING(1024)
Counter         SHORT
Spaces          SHORT
Position        SHORT
  CODE
  EngChars[1] = 'a'
  EngChars[2] = 'b'
  EngChars[3] = 'v'
  EngChars[4] = 'g'
  EngChars[5] = 'd'
  EngChars[6] = 'e'
  EngChars[7] = 'e'
  EngChars[8] = 'zh'
  EngChars[9] = 'z'
  EngChars[10] = 'i'
  EngChars[11] = 'i'
  EngChars[12] = 'k'
  EngChars[13] = 'l'
  EngChars[14] = 'm'
  EngChars[15] = 'n'
  EngChars[16] = 'o'
  EngChars[17] = 'p'
  EngChars[18] = 'r'
  EngChars[19] = 's'
  EngChars[20] = 't'
  EngChars[21] = 'u'
  EngChars[22] = 'f'
  EngChars[23] = 'kh'
  EngChars[24] = 'tc'
  EngChars[25] = 'ch'
  EngChars[26] = 'sh'
  EngChars[27] = 'shch'
  EngChars[28] = 'y'
  EngChars[29] = 'e'
  EngChars[30] = 'iu'
  EngChars[31] = 'ia'
  EngChars[32] = ''
  EngChars[33] = ''
  LOOP Counter = 1 TO LEN(Str)
    IF Str[Counter] = ' '
      Spaces += 1
      CYCLE
    END
    Position = INSTRING(LOWER(Str[Counter]),RusSmall,1,1)
    IF Position > 0
      Result = CLIP(Result) & ALL(' ',Spaces) & CHOOSE(ISUPPER(Str[Counter]), UPPER(EngChars[Position]), EngChars[Position])
    ELSE
      Result = CLIP(Result) & ALL(' ',Spaces) & Str[Counter]
    END
    Spaces = 0
  END
  RETURN Result
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

ФИО по-латински.

Сообщение Admin »

ENV файл не забываем... сам забыл и тупил сидел несколько минут :idied:
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

ФИО по-латински.

Сообщение Admin »

Ага... ну и UPPER у меня жирный :) нужно только первую букву ...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

ФИО по-латински.

Сообщение Admin »

Исправил

Код: Выделить всё

       PROGRAM
       MAP
         Translit(STRING Str),STRING
       END

   CODE
   MESSAGE(Translit('Пример:   транслитерация фамилии - Чумак Василий Васильевич!'))

Translit        PROCEDURE(STRING Str)!,STRING
RusSmall        STRING('абвгдеёжзийклмнопрстуфхцчшщыэюяьъ')
EngChars        STRING(4),DIM(33)
Result          STRING(1024)
Counter         SHORT
Spaces          SHORT
Position        SHORT
FourChars       STRING(4)
  CODE
  EngChars[1] = 'a'
  EngChars[2] = 'b'
  EngChars[3] = 'v'
  EngChars[4] = 'g'
  EngChars[5] = 'd'
  EngChars[6] = 'e'
  EngChars[7] = 'e'
  EngChars[8] = 'zh'
  EngChars[9] = 'z'
  EngChars[10] = 'i'
  EngChars[11] = 'i'
  EngChars[12] = 'k'
  EngChars[13] = 'l'
  EngChars[14] = 'm'
  EngChars[15] = 'n'
  EngChars[16] = 'o'
  EngChars[17] = 'p'
  EngChars[18] = 'r'
  EngChars[19] = 's'
  EngChars[20] = 't'
  EngChars[21] = 'u'
  EngChars[22] = 'f'
  EngChars[23] = 'kh'
  EngChars[24] = 'tc'
  EngChars[25] = 'ch'
  EngChars[26] = 'sh'
  EngChars[27] = 'shch'
  EngChars[28] = 'y'
  EngChars[29] = 'e'
  EngChars[30] = 'iu'
  EngChars[31] = 'ia'
  EngChars[32] = ''
  EngChars[33] = ''
  LOOP Counter = 1 TO LEN(Str)
    IF Str[Counter] = ' '
      Spaces += 1
      CYCLE
    END
    Position = INSTRING(LOWER(Str[Counter]),RusSmall,1,1)
    IF Position > 0
      FourChars = EngChars[Position]
      FourChars[1] = UPPER(FourChars[1])
      Result = CLIP(Result) & ALL(' ',Spaces) & CHOOSE(ISUPPER(Str[Counter]), FourChars, EngChars[Position])
    ELSE
      Result = CLIP(Result) & ALL(' ',Spaces) & Str[Counter]
    END
    Spaces = 0
  END
  RETURN Result
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 5160
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

ФИО по-латински.

Сообщение kreator »

Принцип ясен. Нужно для начала сделать по-простому. А потом вылавливать необычные фамилии, и для них пытаться найти варианты. Сразу не могу сообразить, что делать с дифтонгами, которых по определению в русском языке нет :D .
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

ФИО по-латински.

Сообщение Дед Пахом »

По ссылке, которую я приводил, есть же разбор сложных случаев - Е,Ё в начале слова или в середине кодируются по-разному, ну и т.д.
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

ФИО по-латински.

Сообщение Admin »

Для начала найти актуальную документацию по загран. паспортам.
Подправить и все.
Без разных фантазий...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 5160
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

ФИО по-латински.

Сообщение kreator »

Дед Пахом писал(а):По ссылке, которую я приводил, есть же разбор сложных случаев - Е,Ё в начале слова или в середине кодируются по-разному, ну и т.д.
А я банально не согласен с тем автором. Почему Егор должен писаться как Yegor, а Елена как Yelena? Нужно, действительно, искать правила. Если они вообще существуют. Либо методом проб и ошибок.
We are hard at work… for you. :)
kreator
✯ Ветеран ✯
Сообщения: 5160
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

ФИО по-латински.

Сообщение kreator »

Вот, кстати, хоть какие-то правила - http://transliteration.ru/mvd_1047. Может даже и официоз.
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

ФИО по-латински.

Сообщение Admin »

kreator писал(а): Вот, кстати, хоть какие-то правила - http://transliteration.ru/mvd_1047. Может даже и официоз.
И опять дифтонги. Откуда вы их в русском языке выкопали?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

ФИО по-латински.

Сообщение Admin »

Дед Пахом писал(а):Е,Ё в начале слова или в середине кодируются по-разному
Кто это решил? :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Закрыто