حول الروابط الصديقة والأحرف غير اللاتينية

لقد جربت الترميز ولكن في الواقع يمكن رؤية عنوان URL بشكل جيد في شريط عنوان متصفح الإنترنت. ومع ذلك، عند نسخه أو إرساله، يكون عنوان URL الفعلي عبارة عن سلسلة هروب وغير ودود بعد الآن.

لقد تحققت من lib/slug.rb واقترحت تغيير دالة encoded_generator بهذا الشكل:

  def self.encoded_generator(string, downcase: true)
    # This generator will sanitize almost all special characters,
    # including reserved characters from RFC3986.
    # See also 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

لقد جربت مع إعدادات اللغة الفيتنامية وحصلت على النتائج المرجوة. آمل أن يعمل مع لغات أخرى.

أعتقد أن هذا اعتبار للتوافق. تدعم بعض التطبيقات روابط النص اللاتيني فقط وتقوم بقص الروابط في النصوص غير اللاتينية مباشرة.

لستُ كاتب أكواد روبي، ولكن قرأت المستند ووجدت هذا:

Setting a Hash in <locale>.yml:

i18n:
  transliterate:
    rule:
      ü: "ue"
      ö: "oe"

لذلك هذه هي الطريقة لتخصيص النسخ الصوتي في الإعداد، في نهاية الدالة، نحصل على نص لاتيني (عنوان URL مناسب) فقط. لقد جربت بلغتي الأم، ولا حاجة لتعريف إعدادات هاش مخصصة.

هل هناك أي طريقة للاحتفاظ بتغيير الكود؟ لأنه إذا قمت بتنفيذ:

./launcher destroy app && ./launcher start app

فإن الملف ./lib/slug.rb يعود إلى الكود الأصلي. أنا آسف لأنني جديد في بيئة Ruby on Rails.

أنا آسف جدًا لإزعاجي!

لقد قررت تغيير الأكواد النصية بدلاً من الوظيفة المشفرة. لا أعرف السبب، لكنني حصلت على نتائج مختلفة عند استخدام التشفير.

ما الخطأ الذي ارتكبته هنا؟ شكرًا جزيلاً لك!

  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

بعد التجربة، وجدت ما يلي:

  • لا تقم أبدًا بتغيير ascii_generator. إنه يتسبب في خطأ في تجميع القوالب/السمات/CSS في discourse.
  • استخدم فقط encoded_generator وربما قم بتشفيرها إلى لغتك المحلية، مع الاحتفاظ بإعداد اللغة الافتراضي للنظام (الإنجليزية).
  • أضف الكود المتغير لـ slug.rb في .yml للاحتفاظ بتخصيص slug.rb في كل مرة يتم فيها إعادة بناء التطبيق.

أتمنى لك يومًا سعيدًا!