yaroslav / russian

Russian language support for Ruby and Rails | Поддержка русского языка для Ruby и Rails
MIT License
475 stars 127 forks source link

a few improvements to the "russian" gem #35

Open relev opened 12 years ago

relev commented 12 years ago
  1. a translation scheme fix (translit("схема") should give "skhema" and not "shema")
  2. simple detransliteration (maybe someone will need it...)

each change is accompanied with corresponding tests.

PS. The last commit removes all trailing space I found in ruby files. Unsure if you need it..

yaroslav commented 12 years ago

Детранслит хороший. А почему 1. считается фиксом, на основании какого правила?

relev commented 12 years ago

Не совсем понял вопрос.

Раньше "схема", "сходить" и подобные им слова транслитерировались как "shema", "shodit", которые читаются как "шема", "шодит", что не очень удобно. С добавлением правила "сх => skh" они транслитерируются в skhema и skhodit, что читается правильно (и позволяет выполнить обратную транслитерацию).

Пускай будет не фикс, а дополнение :)

yaroslav commented 12 years ago

Ну, я имею в виду что транслитерация делается по определенным правилам (указанным где-то), точно так же как и дата-время делается по ГОСТу. Просто я могу вспомнить один или два патча на тему транслитерации где слова выглядели, скажем, «лучше», но неясно, почему именно этот вариант транслитерации считался правильным.

Просто какой-то ссылки на спецификацию/стандарт будет достаточно, иначе после применения транслитерация может, наоборот, не понравиться кому-то еще.

Надеюсь, объяснил и не показался при этом унылым формалистом.

relev commented 12 years ago

Рассмотрим 2 утверждения:

  1. Правила транслитерации имеют дело с написанием букв. Как получившаяся строка потом читается человеком им, как правило, дела нету.
  2. ГОСТ Р 52535.1-2006 Приложение А Предлагает транслитерировать русскую Х как KH http://protect.gost.ru/v.aspx?control=8&baseC=-1&page=0&month=-1&year=-1&search=&RegNum=1&DocOnPageCount=15&id=120830&pageK=FEBC4724-215A-4FD6-BEA9-8F7E37C5F7E1

Однако когда в тексте везде используется kh, это не удобно читать (хотя, наверное, дело привычки). Сравните:

Teplokhod khodit khuzhe v khrenovoi bukhte. и Teplohod hodit huzhe v hrenovoi buhte.

Второй вариант гораздо легче для восприятия (или мне кажется?) Однако в таком случае возникает проблема с буквосочетанием "sh". Для разрешения оного можно воспользоваться рекомендацией ГОСТа (должен же от него быть какой-то толк?) и англоязычных товарищей (говорят, что так понятно и удобно - skhema, но buhta).

Да, такой подход несколько усложняет сам процес транслитерации (получается, что результирующая буква зависит от контекста, а это не всегда легко реализовать), и поэтому редко используется на практике. Однако Ваша базовая реализация дала очень хороший инструмент (использование регулярных выражений), что позволяет использовать контекст и добиваться более легкочитаемых результатов. В частности, можно легко сделать отображение "компьютер" -> "computer", "консул" -> "consul", "цент" -> "cent" и т.п. И обратное преобразование тоже. Для своего проекта я наверное так и сделаю... Возможно, прикручу несколько вариантов транслитерации, чтобы можно было выбрать алгоритм - описанный в ГОСТ, либо оптимизированный для восприятия человека, знакомого с английским.

Применение этой схемы однозначно не понравится тем, у кого в базе хранятся транслитерированные строки для поиска, ведь им придётся перетранслитерировать их заново. Поэтому я не в претензии, если этот (или даже все) коммиты не будут приняты в Ваш репозиторий.

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

relev commented 12 years ago

В частности, можно легко сделать отображение "компьютер" -> "computer"

и при этом чтобы не получалось "комар" -> "comar" .

renius commented 12 years ago

skhema потому что согласная перед х buhta tahta cheburahta потому что гласная перед х

relev commented 12 years ago

renius, я не совсем понял Вашу мысль. Единственная последовательность букв, которая вызывает затруднения при чтении транслитерированного текста (при условии замены русской "х" на латинскую "h") - это "сх", потому что в транслитерированном варианте получается "sh", что воспринимается как "ш". Для обработки именно этого случая я добавил правило, благо механизм движка замены, доступный в геме, намного мощнее предполагаемого авторами ГОСТа.

alsemyonov commented 12 years ago

@yaroslav, а можно хотя бы детранслит отдельно включить в гем?

scarfacedeb commented 9 years ago

@yaroslav есть какие-нибудь новости по этому PR?