我遇到了一个考验我理智的问题。在我的 Rails 应用程序中,我从一个 I18n 翻译文件中加载一个转义的 UTF-8 字符串,以用于我的应用程序路由。但是,在路由中使用时,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/routes.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。谢谢大家!
最佳答案
对于 YAML,这似乎已正确转义,但它不是特定于 UTF-8 的。这只是 Ruby 字符串转义,可用于任何字符编码,UTF-8 只是其中一种。
您看到的错误是同一内容的 URL 转义版本。
确保您在 rake routes
的输出中正确定义了一条路线,根据您的字符串,该路线将是 /Товары
。
关于ruby-on-rails - Rails 3 路由、Yaml 和转义 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6310380/