the220hq
(Quynh H Nguyen)
1
URLをエンコードしましたが、実際にはインターネットブラウザのアドレスバーでは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のコードライターではありませんが、ドキュメントを読んで、これを見つけました。
Setting a Hash in <locale>.yml:
i18n:
transliterate:
rule:
ü: "ue"
ö: "oe"
したがって、これが設定で転写をカスタマイズする方法です。関数の最後に、ラテン文字のテキスト(フレンドリーなURL)のみを取得します。私の母国語で試しましたが、カスタムハッシュ設定を定義する必要はありませんでした。
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