カスタム言語をデフォルトの言語(ES_XXからesへ)に移動

どうすれば適切に行えますか?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) }
「いいね!」 3

ありがとうございます。ロケールでオーバーライドされた文字列を処理する最も効果的な方法は?

コードは機能するように見えますが、宛先の「デフォルト」ロケールでオーバーライドされた文字列では機能しません。

「いいね!」 2

レールコンソールで以下を実行すると役立ちます。

I18n.reload!
ExtraLocalesController.clear_cache!
MessageBus.publish("/i18n-flush", refresh: true)

それでもうまくいかない場合は、サーバーを再起動すると確実に機能します。

「いいね!」 3

ありがとうございます。私のインスタンス内の何かに起因しているようですが、前のメッセージでうまく表現できなかったかもしれません :slight_smile:

念のため、エラーメッセージをコピーします。

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.