yaroslav / russian

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

Замена твердого знака в parameterize #26

Closed zuf closed 13 years ago

zuf commented 13 years ago

Мне кажется не очень красиво заменять твердый знак дефисом в методе parameterize:

"съедобный подъезд".parameterize #=> "s-edobnyy-pod-ezd"

Визуально в этом примере из двух слов мы получили четыре. Понятно, что это идет из транслитерации, где твердый знак превращается в одиночную кавычку-апостроф, которая затем превращается в дефис:

Russian.transliterate "съедобный подъезд" #=> "s'edobnyy pod'ezd"
"s'edobnyy pod'ezd".parameterize

Можно попробовать заменять твердый знак на y или j:

"съедобный подъезд".parameterize #=> "syedobnyy-podyezd"
"съедобный подъезд".parameterize #=> "sjedobnyy-podjezd"
julik commented 13 years ago

Cool URLs don't change? то есть я все понимаю но уже существующие нематериализованные кусочки поменяются

zuf commented 13 years ago

Зависит от реализации. Например у меня ссылки работают через friendly_id и там параметризация происходит только при сохранении объекта. Т.е. параметризованная строка (slug в терминах friendly_id) хранится в базе. Соответственно текущие slug'и не изменятся, но будут меняться после пересохранения экземпляров моделей. Но и это не страшно, потому что friendly_id помнит о старых вариантах slugs и они будут работать дальше пока их не удалят из базы.

Так что для меня изменение поведения в данном вопросе совсем не страшно и даже желательно. С другой стороны доработка параметризации твердого знака это довольно вторичная хотелка, каждый, кому это нужно может без труда сделать себе monkey patch и без проблем заменять твердый знак на y или j. Этим тикетом я лишь хотел показать, что есть не очень красивые места, в которых параметризация работает не лучшим, на мой взгляд, образом.

yaroslav commented 13 years ago

Не согласен с Юликом — пермалинки, все же, на то и пермалинки, чтобы быть жестко связанными с сущностью на сайте.

Согласен, что черточка никуда не годится, но это, все же, проблема уровня parameterize или friendly_id. То есть, если бы это распространялось только на русский язык — можно было бы написать хак для этого, но, "julik's gem".parameterize == "julik-s-gem", а это тоже неправильно. Думаю, апострофы нужно исправлять на уровне выше — на мой взгляд, нужно не все подряд заменять на минусы :)

Закрою здесь.