mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-06-30 19:42:17 +00:00
Related: https://github.com/discourse/discourse-translator/pull/310 This commit includes all the jobs and event hooks to localize posts, topics, and categories. A few notes: - `feature_name: "translation"` because the site setting is `ai-translation` and module is `Translation` - we will switch to proper ai-feature in the near future, and can consider using the persona_user as `localization.localizer_user_id` - keeping things flat within the module for now as we will be moving to ai-feature soon and have to rearrange - Settings renamed/introduced are: - ai_translation_backfill_rate (0) - ai_translation_backfill_limit_to_public_content (true) - ai_translation_backfill_max_age_days (5) - ai_translation_verbose_logs (false)
44 lines
1.2 KiB
Ruby
44 lines
1.2 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
|
|
|
|
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
|