올바른 방법은 무엇인가요? Discourse 내에서 쿼리를 사용하여 MySQL에서, 혹은 몇 가지 스크립트를 활용하는 방식일까요?
플러그인을 사용하여 사용자 정의 언어를 만드는 것이 우리 인스턴스에서 몇 가지 문제를 일으키는 것 같습니다.
올바른 방법은 무엇인가요? Discourse 내에서 쿼리를 사용하여 MySQL에서, 혹은 몇 가지 스크립트를 활용하는 방식일까요?
플러그인을 사용하여 사용자 정의 언어를 만드는 것이 우리 인스턴스에서 몇 가지 문제를 일으키는 것 같습니다.
다음 코드를 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) }
감사합니다! 로케일에서 오버라이드된 문자열을 처리하는 가장 효과적인 방법은 무엇인가요?
코드는 작동하는 것 같지만, 대상 ‘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) already exists.