mirror of
https://ghfast.top/https://github.com/Lhcfl/replace-translations-global.git
synced 2026-05-22 00:24:11 +08:00
56 lines
1.5 KiB
Ruby
56 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# name: replace-translations-global
|
|
# about: replace translations
|
|
# version: 0.0.1
|
|
# authors: Linca
|
|
# url: https://github.com/Lhcfl/replace-translations-global
|
|
# required_version: 3.0.0
|
|
|
|
enabled_site_setting :enable_replace_translations_global
|
|
|
|
after_initialize do
|
|
|
|
on(:site_setting_changed) do |setting_name, old_value, new_value|
|
|
if setting_name == :replace_translations_replacements
|
|
Scheduler::Defer.later("Setup Translations Replacement") do
|
|
::JsLocaleHelper.clear_cache!
|
|
end
|
|
end
|
|
end
|
|
|
|
module ::JsLocaleHelper
|
|
class << self
|
|
alias_method :load_translations_old, :load_translations
|
|
def load_translations(locale)
|
|
ret = load_translations_old(locale)
|
|
begin
|
|
replacements = {}
|
|
SiteSetting.replace_translations_replacements_map.each do |rule|
|
|
matched = /([^:]+):([\s\S]+)=>([\s\S]*)/.match(rule)
|
|
if (matched.present?)
|
|
replacements[matched[1]] ||= []
|
|
replacements[matched[1]].push([matched[2], matched[3]])
|
|
end
|
|
end
|
|
|
|
rules = replacements[locale.to_s]
|
|
if (rules.present?)
|
|
ret.deep_transform_values do |val|
|
|
if val.respond_to? :gsub
|
|
rules.each do |ori, rep|
|
|
val.gsub! Regexp.new(ori), rep
|
|
end
|
|
end
|
|
val
|
|
end
|
|
else
|
|
ret
|
|
end
|
|
rescue
|
|
ret
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|