Рельсы 3 маршрута, Yaml & Escape UTF-8 - PullRequest
2 голосов
/ 10 июня 2011

У меня проблема с проверкой моего здравомыслия.В моем приложении rails я загружаю экранированную строку UTF-8 из файла перевода I18n для использования в моих маршрутах приложения.Однако, rails не освобождает строку при использовании в маршрутизации.Вот мой файл перевода:

--- 
ru: 
  activerecord: 
    models: 
      item: 
        other: "\xD0\xA2\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x80\xD1\x8B" # UTF-8 escaped version of "Товары". (to_yaml is doing the escaping btw)

А вот мой config / rout.rb

match "/#{Item.model_name.human(:count => :other).downcase}" => "items#index"

Однако при переходе по этому маршруту я получаю:

Routing Error

No route matches "/%d0%a2%d0%be%d0%b2%d0%b0%d1%80%d1%8b"

Если UTF-8 хранится в файле перевода без сохранения, все работает нормально.to_yaml экранирует строку и вызывает проблему.Есть ли способ заставить Yaml сохранить исходную строку?

Кстати, я использую Rails 3.0.7, Ruby 1.9.2.Спасибо, ребята!

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Мне удалось сохранить исходную строку UTF-8 без преобразования строки во внутреннюю кодировку Ruby, используя ya2yaml вместо to_yaml.Однако мне пришлось кодировать ключи и значения хэша params в UTF-8 (ключи кодировались как ASCII-8BIT, а значения как в UTF-8), прежде чем генерировался yaml:

  def utf8_hash(some_hash) # convert hash key & values to utf-8 for proper translation
    new_hash = Hash.new
    some_hash.each do |key, value|
      new_hash[key.encode(Encoding::UTF_8)] = value.to_s.encode(Encoding::UTF_8)
    end    
    new_hash
  end

  utf8_hash(params).ya2yaml
1 голос
/ 10 июня 2011

Это выглядит как правильно экранированный для YAML, но это не специфично для UTF-8. Это просто экранирование строки Ruby, и его можно использовать для любой кодировки символов, из которых UTF-8 - только одна.

То, что вы видите как ошибку, - это та же самая версия с экранированием URL.

Убедитесь, что у вас правильно определен маршрут в выводе rake routes, который на основе вашей строки будет /Товары.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...