Какой правильный способ это сделать? Через MySQL, используя запросы внутри Discourse, возможно, с помощью скрипта?
Похоже, что использование плагина для создания собственного языка вызывает некоторые проблемы в нашем экземпляре.
Какой правильный способ это сделать? Через MySQL, используя запросы внутри Discourse, возможно, с помощью скрипта?
Похоже, что использование плагина для создания собственного языка вызывает некоторые проблемы в нашем экземпляре.
Выполнение следующего в консоли Rails должно сработать:
old_locale = "es_XX"
new_locale = "es"
DB.exec <<~SQL
UPDATE users
SET locale = '#{new_locale}'
WHERE locale = '#{old_locale}'
SQL
DB.exec <<~SQL
UPDATE site_settings
SET value = '#{new_locale}'
WHERE name = 'default_locale' AND value = '#{old_locale}'
SQL
DB.exec <<~SQL
UPDATE translation_overrides
SET locale = '#{new_locale}'
WHERE locale = '#{old_locale}'
SQL
DB.exec <<~SQL
UPDATE theme_translation_overrides
SET locale = '#{new_locale}'
WHERE locale = '#{old_locale}'
SQL
def fix_search_data(model)
key = "#{model}_id"
table = "#{model}_search_data"
puts "Миграция #{table} на новый локаль."
sql = <<~SQL
UPDATE #{table}
SET locale = '#{new_locale}'
WHERE #{key} IN (
SELECT #{key}
FROM #{table}
WHERE locale = '#{old_locale}'
LIMIT 100000
)
SQL
loop do
count = DB.exec(sql)
break if count == 0
puts "Мигрировано #{count} строк #{table} на новый локаль."
end
end
%w[category tag topic user].each { |model| fix_search_data(model) }
Спасибо! Какой наиболее эффективный способ работы с переопределёнными строками в локали?
Код, похоже, работает, но не с переопределёнными в целевой локали ‘default’.
Выполнение следующего в консоли Rails должно помочь:
I18n.reload!
ExtraLocalesController.clear_cache!
MessageBus.publish("/i18n-flush", refresh: true)
Если это не поможет, перезапуск сервера точно сработает.
Спасибо, похоже, это связано с чем-то в моём экземпляре, но, возможно, я не очень хорошо выразился в своём предыдущем сообщении ![]()
Я копирую сообщение об ошибке, на всякий случай:
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_translation_overrides_on_locale_and_translation_key"
DETAIL: Key (locale, translation_key)=(es, js.docs.categories) уже существует.