the220hq
(Quynh H Nguyen)
1
我尝试过编码,但实际上 URL 在浏览器地址栏中看起来很好。但是,当复制或发送它时,实际 URL 是一个转义字符串,不再友好。
我检查了 lib/slug.rb 并建议像这样更改 encoded_generator 函数:
def self.encoded_generator(string, downcase: true)
# 此生成器将清理几乎所有特殊字符,
# 包括 RFC3986 中的保留字符。
# 请参阅 URI::REGEXP::PATTERN。
string = I18n.transliterate(string, :locale => SiteSetting.default_locale)
string = string.strip.gsub(/\s+/, "-").gsub(CHAR_FILTER_REGEXP, "")
string = string.downcase if downcase
string
#CGI.escape(string)
end
我尝试了越南语环境并获得了想要的结果。希望它也能用于其他语言。
Lhc_fl
(Linca)
2
这似乎是一个兼容性考虑。某些应用程序仅支持拉丁文本链接,并且会直接截断非拉丁文本中的链接。
the220hq
(Quynh H Nguyen)
3
我不是 Ruby 代码编写者,但我阅读了文档并找到了这个:
在 <locale>.yml 中设置 Hash:
i18n:
transliterate:
rule:
ü: "ue"
ö: "oe"
所以这是在设置中自定义音译的方式,在函数结束时,我们只得到拉丁文本(友好的 URL)。我尝试用我的母语进行测试,不需要定义自定义 Hash 设置。
the220hq
(Quynh H Nguyen)
4
有什么办法可以保留代码更改吗?因为如果我执行:
./launcher destroy app && ./launcher start app
文件 ./lib/slug.rb 会恢复到原始代码。抱歉,我对 Ruby on Rails 环境不太熟悉。
the220hq
(Quynh H Nguyen)
5
很抱歉我的打扰!
我决定改用 ASCII 而不是编码函数。我不知道为什么,但使用编码函数时我得到了不同的结果。
我在这里错在哪里了?非常感谢!
def self.ascii_generator(string)
#I18n.with_locale(SiteSetting.default_locale) { string.tr(\"'\", \"\").parameterize }
string = I18n.transliterate(string, :locale => SiteSetting.default_locale)
string = string.strip.gsub(/\\s+/, \"-\").gsub(CHAR_FILTER_REGEXP, \"\")
string
end