mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-07-25 07:23:26 +00:00
This commit - normalizes locales like en_GB and variants to en. With this, the feature will not translate en_GB posts to en (or similarly pt_BR to pt_PT) - consolidates whether the feature is enabled in `DiscourseAi::Translation.enabled?` - similarly for backfill in `DiscourseAi::Translation.backfill_enabled?` - turns off backfill if `ai_translation_backfill_max_age_days` is 0 to keep true to what it says. Set it to a high number to backfill everything
51 lines
1.4 KiB
Ruby
51 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseAi
|
|
module Translation
|
|
class LocaleNormalizer
|
|
# Normalizes locale string, matching the list of I18n.locales where possible
|
|
# @param locale [String,Symbol] the locale to normalize
|
|
# @return [String] the normalized locale
|
|
def self.normalize_to_i18n(locale)
|
|
return nil if locale.blank?
|
|
locale = locale.to_s.gsub("-", "_")
|
|
|
|
i18n_pairs.each { |downcased, value| return value if locale.downcase == downcased }
|
|
|
|
locale
|
|
end
|
|
|
|
def self.is_same?(locale1, locale2)
|
|
return true if locale1 == locale2
|
|
locale1 = locale1.gsub("-", "_").downcase
|
|
locale2 = locale2.gsub("-", "_").downcase
|
|
locale1.split("_").first == locale2.split("_").first
|
|
end
|
|
|
|
private
|
|
|
|
def self.i18n_pairs
|
|
# they should look like this for the input to match against:
|
|
# {
|
|
# "lowercased" => "actual",
|
|
# "en" => "en",
|
|
# "zh_cn" => "zh_CN",
|
|
# "zh" => "zh_CN",
|
|
# }
|
|
@locale_map ||=
|
|
I18n
|
|
.available_locales
|
|
.reduce({}) do |output, sym|
|
|
locale = sym.to_s
|
|
output[locale.downcase] = locale
|
|
if locale.include?("_")
|
|
short = locale.split("_").first
|
|
output[short] = locale if output[short].blank?
|
|
end
|
|
output
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|