有什么正确的方法可以做到这一点?通过 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 "Migrating #{table} to new_locale locale."
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 "Migrated #{count} rows of #{table} to new locale."
end
end
%w[category tag topic user].each { |model| fix_search_data(model) }
谢谢!处理 locale 中被覆盖字符串的最有效方法是什么?
代码似乎有效,但不能与目标“默认”locale 中被覆盖的字符串一起使用。
在 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) already exists.
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.