Корейские слаги FriendlyID

Когда я добавляю статью на корейском языке с заголовком, например: 신품

Гем FriendlyID создает пустой слаг, а URL-адрес похож на /8... так что это ID. Посмотрите по этой ссылке: http://www.srecipe.kr.com/articles/8

Другие языки работают.

Как я могу получить URL-адрес, который отображается на латинские буквы, такие как /this-is-url из 신품?


person Richard Lapiš    schedule 31.05.2013    source источник
comment
Ответили? Я так не думаю! Это было отмечено как не по теме и принудительно закрыто. ПОЖАЛУЙСТА!   -  person Richard Lapiš    schedule 31.05.2013


Ответы (2)


Как и все эти решения для постоянных ссылок, дружественный идентификатор использует метод parameterize для преобразования строки в безопасную строку URL. вот так:

require 'active_support/all'
puts "Oh Hai There".parameterize
=> oh-hai-there

Проблема возникает, когда вы используете строки, отличные от ASCII, в которых параметризация заменяется пустой строкой, что вызывает вашу проблему:

# encoding: UTF-8
require 'active_support/all'
puts "신품".parameterize
=> 

ActiveSupport предоставляет способ изменить строки, отличные от ASCII, на близкое приближение с помощью метода transliterate.

# encoding: UTF-8
require 'active_support/all'
include ActiveSupport::Inflector

puts transliterate("Ærøskøbing")
=> AEroskobing

Но если он не знает о символе, по умолчанию он будет ??

# encoding: UTF-8
require 'active_support/all'
include ActiveSupport::Inflector

puts transliterate "신품"
=> ??

Но вы можете сказать транслитерации, как обращаться с символами. Итак, в модели Rails

# Store the transliterations in locales/en.yml
en:
  i18n:
    transliterate:
      rule:
        신: "abc"
        품: "def"

puts transliterate "신품"
=> "abcdef"

Таким образом, вы можете использовать transliterate(title).parameterize вместо простой параметризации. И если вы введете корейский алфавит в раздел транслитерации, вы будете близки к золотому.

person Jesse Wolgamott    schedule 31.05.2013
comment
Я забыл заключить полученное правило в кавычки: I18n::InvalidLocaleData: не удается загрузить переводы из config/locales/en.yml: #‹Psych::SyntaxError: (config/locales/en.yml): не нашел ожидаемого алфавитного или числовой символ при сканировании якоря - person Pascal Pixel; 29.11.2016

Еще не пробовал, но собираюсь:

Я отчитаюсь, когда попробую их.

person Dominic Sayers    schedule 04.04.2014
comment
Где отчет? - person Pascal Pixel; 29.11.2016
comment
Справедливый комментарий. Спустя 2 с лишним года я уже не могу вспомнить, каковы были мои выводы. Как вы думаете, мне следует удалить ответ или оставить там список репозиториев на случай, если они кому-то пригодятся? - person Dominic Sayers; 01.12.2016
comment
Репозиторий ромаджи был мне полезен! Спасибо за ссылку! - person Pascal Pixel; 19.12.2016