Initial locale setting now available

In a sentence: New Docker installs will now have the option to set the language at bootstrap time.

This has been a pain point for a while: the FAQ, Terms of Service, and Privacy policy would get set up with the wrong language. See this topic from July of last year:

https://meta.discourse.org/t/new-non-english-installs/18077

Here’s one of the support topics that came up: https://meta.discourse.org/t/setting-lang-ru-ru-utf-8-in-app-yml-does-not-work-when-bootstrapping-docker-container/22726


You can do this by setting the DISCOURSE_DEFAULT_LOCALE environment variable in app.yml. Note that this will make it impossible to change the locale from the web UI.

Here’s an example of an app.yml with language settings set.

params:
  db_default_text_search_config: "pg_catalog.french"
  ## Set db_shared_buffers to 1/3 of the memory you wish to allocate to postgres
  ## on 1GB install set to 128MB on a 4GB instance you may raise to 1GB
  #db_shared_buffers: "256MB"
  #
  ## Which Git revision should this container use? (default: tests-passed)
  # version: tests-passed
 env:
  LANG: fr_FR.UTF-8
  DISCOURSE_DEFAULT_LOCALE: fr

This will be available in latest right now, beta v1.2.0.beta7, stable v1.2.0.

8 Likes

What happens if you change the locale in app.yml and rebuild the container?

It should be the same as if you changed the site setting and rebuilt it - i.e. it should only matter for the first run.

So once language is set this way, it can never be changed, ever? Not without destroying the whole site? Even recreating from backup would recreate the old language topics yes?

I… think so, because stuff like the Lounge and the FAQ topics are not re-created when you rebuild.

I think I’ll test it…

We prefer global setting to site setting in app/model/global_setting.rb. Am I right here? @riking

We seed the db based on locale only at the first time. The next seed won’t create or update seed topics. But if you recreate from backup, the topic won’t change because it’s already seeded.

Default categories name doesn’t respect the locale setting. db:migrate migrates the db before invoking the block so I18n.t takes no effect when creating the categories. @neil

1 Like

Yes, this environment variable sets a GlobalSetting.

1 Like

This is also done by the latest pr.