From c62a4a4759c7669982ff9e9918c92facd9105652 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 28 Apr 2025 10:31:27 +0100 Subject: [PATCH] PERF: Compile main locale bundles just-in-time (#32335) Previously all locale bundles would be built & compressed during assets:precompile. For most sites, only one of these languages was actually used, so this is fairly wasteful. This commit moves the main locale bundle into the ExtraLocalesController, which has recently undergone many improvements to make it more efficient. This allows locale files to be bundled "just in time" when they're first accessed. Now that brotli level=6 is enabled for these assets in our nginx config, this change should have no impact on the locale bundle size. --- Gemfile | 6 -- Gemfile.lock | 4 - app/assets/javascripts/discourse/testem.js | 3 - .../javascripts/discourse/tests/index.html | 2 +- app/assets/javascripts/locales/ar.js.erb | 11 --- app/assets/javascripts/locales/be.js.erb | 3 - app/assets/javascripts/locales/bg.js.erb | 3 - app/assets/javascripts/locales/bs_BA.js.erb | 3 - app/assets/javascripts/locales/ca.js.erb | 3 - app/assets/javascripts/locales/cs.js.erb | 3 - app/assets/javascripts/locales/da.js.erb | 3 - app/assets/javascripts/locales/de.js.erb | 3 - app/assets/javascripts/locales/el.js.erb | 3 - app/assets/javascripts/locales/en.js.erb | 5 -- app/assets/javascripts/locales/en_GB.js.erb | 6 -- app/assets/javascripts/locales/es.js.erb | 3 - app/assets/javascripts/locales/et.js.erb | 3 - app/assets/javascripts/locales/fa_IR.js.erb | 3 - app/assets/javascripts/locales/fi.js.erb | 3 - app/assets/javascripts/locales/fr.js.erb | 3 - app/assets/javascripts/locales/gl.js.erb | 3 - app/assets/javascripts/locales/he.js.erb | 3 - app/assets/javascripts/locales/hr.js.erb | 3 - app/assets/javascripts/locales/hu.js.erb | 3 - app/assets/javascripts/locales/hy.js.erb | 3 - app/assets/javascripts/locales/i18n.js | 2 - app/assets/javascripts/locales/id.js.erb | 3 - app/assets/javascripts/locales/it.js.erb | 3 - app/assets/javascripts/locales/ja.js.erb | 3 - app/assets/javascripts/locales/ko.js.erb | 3 - app/assets/javascripts/locales/lt.js.erb | 3 - app/assets/javascripts/locales/lv.js.erb | 3 - app/assets/javascripts/locales/nb_NO.js.erb | 3 - app/assets/javascripts/locales/nl.js.erb | 3 - app/assets/javascripts/locales/pl_PL.js.erb | 3 - app/assets/javascripts/locales/pt.js.erb | 3 - app/assets/javascripts/locales/pt_BR.js.erb | 3 - app/assets/javascripts/locales/ro.js.erb | 3 - app/assets/javascripts/locales/ru.js.erb | 3 - app/assets/javascripts/locales/sk.js.erb | 3 - app/assets/javascripts/locales/sl.js.erb | 3 - app/assets/javascripts/locales/sq.js.erb | 3 - app/assets/javascripts/locales/sr.js.erb | 3 - app/assets/javascripts/locales/sv.js.erb | 3 - app/assets/javascripts/locales/sw.js.erb | 3 - app/assets/javascripts/locales/te.js.erb | 3 - app/assets/javascripts/locales/th.js.erb | 3 - app/assets/javascripts/locales/tr_TR.js.erb | 3 - app/assets/javascripts/locales/ug.js.erb | 3 - app/assets/javascripts/locales/uk.js.erb | 3 - app/assets/javascripts/locales/ur.js.erb | 3 - app/assets/javascripts/locales/vi.js.erb | 3 - app/assets/javascripts/locales/zh_CN.js.erb | 3 - app/assets/javascripts/locales/zh_TW.js.erb | 3 - app/controllers/extra_locales_controller.rb | 5 +- app/views/layouts/application.html.erb | 2 +- app/views/qunit/theme.html.erb | 2 +- config/application.rb | 3 - config/initializers/assets.rb | 20 +---- lib/js_locale_helper.rb | 5 +- lib/plugin/instance.rb | 4 +- lib/tasks/assets.rake | 86 +------------------ .../assets/locales/foo_BAR.js.erb | 2 - .../custom_locales/assets/locales/tlh.js.erb | 2 - .../custom_locales/assets/locales/tup.js.erb | 2 - spec/lib/js_locale_helper_spec.rb | 7 +- spec/lib/plugin/instance_spec.rb | 1 - spec/requests/application_controller_spec.rb | 36 ++++---- 68 files changed, 37 insertions(+), 317 deletions(-) delete mode 100644 app/assets/javascripts/locales/ar.js.erb delete mode 100644 app/assets/javascripts/locales/be.js.erb delete mode 100644 app/assets/javascripts/locales/bg.js.erb delete mode 100644 app/assets/javascripts/locales/bs_BA.js.erb delete mode 100644 app/assets/javascripts/locales/ca.js.erb delete mode 100644 app/assets/javascripts/locales/cs.js.erb delete mode 100644 app/assets/javascripts/locales/da.js.erb delete mode 100644 app/assets/javascripts/locales/de.js.erb delete mode 100644 app/assets/javascripts/locales/el.js.erb delete mode 100644 app/assets/javascripts/locales/en.js.erb delete mode 100644 app/assets/javascripts/locales/en_GB.js.erb delete mode 100644 app/assets/javascripts/locales/es.js.erb delete mode 100644 app/assets/javascripts/locales/et.js.erb delete mode 100644 app/assets/javascripts/locales/fa_IR.js.erb delete mode 100644 app/assets/javascripts/locales/fi.js.erb delete mode 100644 app/assets/javascripts/locales/fr.js.erb delete mode 100644 app/assets/javascripts/locales/gl.js.erb delete mode 100644 app/assets/javascripts/locales/he.js.erb delete mode 100644 app/assets/javascripts/locales/hr.js.erb delete mode 100644 app/assets/javascripts/locales/hu.js.erb delete mode 100644 app/assets/javascripts/locales/hy.js.erb delete mode 100644 app/assets/javascripts/locales/i18n.js delete mode 100644 app/assets/javascripts/locales/id.js.erb delete mode 100644 app/assets/javascripts/locales/it.js.erb delete mode 100644 app/assets/javascripts/locales/ja.js.erb delete mode 100644 app/assets/javascripts/locales/ko.js.erb delete mode 100644 app/assets/javascripts/locales/lt.js.erb delete mode 100644 app/assets/javascripts/locales/lv.js.erb delete mode 100644 app/assets/javascripts/locales/nb_NO.js.erb delete mode 100644 app/assets/javascripts/locales/nl.js.erb delete mode 100644 app/assets/javascripts/locales/pl_PL.js.erb delete mode 100644 app/assets/javascripts/locales/pt.js.erb delete mode 100644 app/assets/javascripts/locales/pt_BR.js.erb delete mode 100644 app/assets/javascripts/locales/ro.js.erb delete mode 100644 app/assets/javascripts/locales/ru.js.erb delete mode 100644 app/assets/javascripts/locales/sk.js.erb delete mode 100644 app/assets/javascripts/locales/sl.js.erb delete mode 100644 app/assets/javascripts/locales/sq.js.erb delete mode 100644 app/assets/javascripts/locales/sr.js.erb delete mode 100644 app/assets/javascripts/locales/sv.js.erb delete mode 100644 app/assets/javascripts/locales/sw.js.erb delete mode 100644 app/assets/javascripts/locales/te.js.erb delete mode 100644 app/assets/javascripts/locales/th.js.erb delete mode 100644 app/assets/javascripts/locales/tr_TR.js.erb delete mode 100644 app/assets/javascripts/locales/ug.js.erb delete mode 100644 app/assets/javascripts/locales/uk.js.erb delete mode 100644 app/assets/javascripts/locales/ur.js.erb delete mode 100644 app/assets/javascripts/locales/vi.js.erb delete mode 100644 app/assets/javascripts/locales/zh_CN.js.erb delete mode 100644 app/assets/javascripts/locales/zh_TW.js.erb delete mode 100644 spec/fixtures/plugins/custom_locales/assets/locales/foo_BAR.js.erb delete mode 100644 spec/fixtures/plugins/custom_locales/assets/locales/tlh.js.erb delete mode 100644 spec/fixtures/plugins/custom_locales/assets/locales/tup.js.erb diff --git a/Gemfile b/Gemfile index eba77c22799..64d85265867 100644 --- a/Gemfile +++ b/Gemfile @@ -117,12 +117,6 @@ gem "net-imap", require: false gem "net-pop", require: false gem "digest", require: false -# Gems used only for assets and not required in production environments by default. -# Allow everywhere for now cause we are allowing asset debugging in production -group :assets do - gem "uglifier" -end - group :test do gem "capybara", require: false gem "webmock", require: false diff --git a/Gemfile.lock b/Gemfile.lock index 74c5bf27e40..1bd3737f04a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -610,8 +610,6 @@ GEM concurrent-ruby (~> 1.0) tzinfo-data (1.2025.2) tzinfo (>= 1.0.0) - uglifier (4.2.1) - execjs (>= 0.3.0, < 3) unf (0.2.0) unicode-display_width (3.1.4) unicode-emoji (~> 4.0, >= 4.0.4) @@ -791,7 +789,6 @@ DEPENDENCIES thor trilogy tzinfo-data - uglifier unf unicorn web-push @@ -1085,7 +1082,6 @@ CHECKSUMS trilogy (2.9.0) sha256=a2d63b663ba68a4758e15d1f9afb228f5d16efc7fe7cea68699e1c106ef6067f tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b tzinfo-data (1.2025.2) sha256=a92375a1fbb47d38fe88fd514c40a38cc8f97d168da2a6479f15185e86470939 - uglifier (4.2.1) sha256=75d42b81b10bfd21e7a427fabb1d49ff5ea7bda3c4a5039ddb2a78d194c6f5aa unf (0.2.0) sha256=e6bcc2e101d80e3f9459753db747d5926aada1aaaf61e629e93359da9a5b04ab unicode-display_width (3.1.4) sha256=8caf2af1c0f2f07ec89ef9e18c7d88c2790e217c482bfc78aaa65eadd5415ac1 unicode-emoji (4.0.4) sha256=2c2c4ef7f353e5809497126285a50b23056cc6e61b64433764a35eff6c36532a diff --git a/app/assets/javascripts/discourse/testem.js b/app/assets/javascripts/discourse/testem.js index ac54dc31423..da2dfaa5175 100644 --- a/app/assets/javascripts/discourse/testem.js +++ b/app/assets/javascripts/discourse/testem.js @@ -216,9 +216,6 @@ if (themeTestPages) { } else { // Running with ember cli, but we want to pass through plugin request to Rails module.exports.proxies = { - "/assets/locales/*.js": { - target, - }, "/assets/plugins/*_extra.js": { target, }, diff --git a/app/assets/javascripts/discourse/tests/index.html b/app/assets/javascripts/discourse/tests/index.html index c4fb561923e..1c6db5ceef1 100644 --- a/app/assets/javascripts/discourse/tests/index.html +++ b/app/assets/javascripts/discourse/tests/index.html @@ -53,7 +53,7 @@ - + diff --git a/app/assets/javascripts/locales/ar.js.erb b/app/assets/javascripts/locales/ar.js.erb deleted file mode 100644 index 8eccfaf6140..00000000000 --- a/app/assets/javascripts/locales/ar.js.erb +++ /dev/null @@ -1,11 +0,0 @@ -//= depend_on 'client.ar.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:ar) %> - -// original moment.js implementation can be found here: -// https://github.com/moment/moment/blob/b7ec8e2ec068e03de4f832f28362675bb9e02261/locale/ar.js#L185-L191 -moment.updateLocale("ar", { - postformat(string) { - return string; - } -}); diff --git a/app/assets/javascripts/locales/be.js.erb b/app/assets/javascripts/locales/be.js.erb deleted file mode 100644 index fd3c6da2eab..00000000000 --- a/app/assets/javascripts/locales/be.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.be.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:be) %> diff --git a/app/assets/javascripts/locales/bg.js.erb b/app/assets/javascripts/locales/bg.js.erb deleted file mode 100644 index 006dfde3190..00000000000 --- a/app/assets/javascripts/locales/bg.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.bg.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:bg) %> diff --git a/app/assets/javascripts/locales/bs_BA.js.erb b/app/assets/javascripts/locales/bs_BA.js.erb deleted file mode 100644 index 7e2f912066d..00000000000 --- a/app/assets/javascripts/locales/bs_BA.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.bs_BA.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:bs_BA) %> diff --git a/app/assets/javascripts/locales/ca.js.erb b/app/assets/javascripts/locales/ca.js.erb deleted file mode 100644 index 4d680687651..00000000000 --- a/app/assets/javascripts/locales/ca.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.ca.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:ca) %> diff --git a/app/assets/javascripts/locales/cs.js.erb b/app/assets/javascripts/locales/cs.js.erb deleted file mode 100644 index 36dfbb499d0..00000000000 --- a/app/assets/javascripts/locales/cs.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.cs.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:cs) %> diff --git a/app/assets/javascripts/locales/da.js.erb b/app/assets/javascripts/locales/da.js.erb deleted file mode 100644 index b056590f304..00000000000 --- a/app/assets/javascripts/locales/da.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.da.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:da) %> diff --git a/app/assets/javascripts/locales/de.js.erb b/app/assets/javascripts/locales/de.js.erb deleted file mode 100644 index c82f281649a..00000000000 --- a/app/assets/javascripts/locales/de.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.de.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:de) %> diff --git a/app/assets/javascripts/locales/el.js.erb b/app/assets/javascripts/locales/el.js.erb deleted file mode 100644 index 5f4d947b553..00000000000 --- a/app/assets/javascripts/locales/el.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.el.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:el) %> \ No newline at end of file diff --git a/app/assets/javascripts/locales/en.js.erb b/app/assets/javascripts/locales/en.js.erb deleted file mode 100644 index edf422ff76f..00000000000 --- a/app/assets/javascripts/locales/en.js.erb +++ /dev/null @@ -1,5 +0,0 @@ -//= depend_on 'client.en.yml' -//= require locales/i18n - -<% JsLocaleHelper.reloadable_plugins(:en, self) %> -<%= JsLocaleHelper.output_locale(:en) %> diff --git a/app/assets/javascripts/locales/en_GB.js.erb b/app/assets/javascripts/locales/en_GB.js.erb deleted file mode 100644 index cc7502dcd0f..00000000000 --- a/app/assets/javascripts/locales/en_GB.js.erb +++ /dev/null @@ -1,6 +0,0 @@ -//= depend_on 'client.en_GB.yml' -//= depend_on 'client.en.yml' -//= require locales/i18n - -<% JsLocaleHelper.reloadable_plugins(:en_GB, self) %> -<%= JsLocaleHelper.output_locale(:en_GB) %> diff --git a/app/assets/javascripts/locales/es.js.erb b/app/assets/javascripts/locales/es.js.erb deleted file mode 100644 index f24bf7a0048..00000000000 --- a/app/assets/javascripts/locales/es.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.es.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:es) %> diff --git a/app/assets/javascripts/locales/et.js.erb b/app/assets/javascripts/locales/et.js.erb deleted file mode 100644 index 462066c6b10..00000000000 --- a/app/assets/javascripts/locales/et.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.et.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:et) %> diff --git a/app/assets/javascripts/locales/fa_IR.js.erb b/app/assets/javascripts/locales/fa_IR.js.erb deleted file mode 100644 index 9ce1c17cd5c..00000000000 --- a/app/assets/javascripts/locales/fa_IR.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.fa_IR.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:fa_IR) %> diff --git a/app/assets/javascripts/locales/fi.js.erb b/app/assets/javascripts/locales/fi.js.erb deleted file mode 100644 index 5c887f32690..00000000000 --- a/app/assets/javascripts/locales/fi.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.fi.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:fi) %> diff --git a/app/assets/javascripts/locales/fr.js.erb b/app/assets/javascripts/locales/fr.js.erb deleted file mode 100644 index 67b11dd3895..00000000000 --- a/app/assets/javascripts/locales/fr.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.fr.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:fr) %> diff --git a/app/assets/javascripts/locales/gl.js.erb b/app/assets/javascripts/locales/gl.js.erb deleted file mode 100644 index f38e7660deb..00000000000 --- a/app/assets/javascripts/locales/gl.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.gl.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:gl) %> diff --git a/app/assets/javascripts/locales/he.js.erb b/app/assets/javascripts/locales/he.js.erb deleted file mode 100644 index e2b73ce0080..00000000000 --- a/app/assets/javascripts/locales/he.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.he.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:he) %> diff --git a/app/assets/javascripts/locales/hr.js.erb b/app/assets/javascripts/locales/hr.js.erb deleted file mode 100644 index df6aa33c6ee..00000000000 --- a/app/assets/javascripts/locales/hr.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.hr.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:hr) %> diff --git a/app/assets/javascripts/locales/hu.js.erb b/app/assets/javascripts/locales/hu.js.erb deleted file mode 100644 index ee6a12ced45..00000000000 --- a/app/assets/javascripts/locales/hu.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.hu.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:hu) %> diff --git a/app/assets/javascripts/locales/hy.js.erb b/app/assets/javascripts/locales/hy.js.erb deleted file mode 100644 index c3c66612e02..00000000000 --- a/app/assets/javascripts/locales/hy.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.hy.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:hy) %> diff --git a/app/assets/javascripts/locales/i18n.js b/app/assets/javascripts/locales/i18n.js deleted file mode 100644 index 5f0857a0084..00000000000 --- a/app/assets/javascripts/locales/i18n.js +++ /dev/null @@ -1,2 +0,0 @@ -require("discourse/loader-shims"); -require("discourse-i18n"); diff --git a/app/assets/javascripts/locales/id.js.erb b/app/assets/javascripts/locales/id.js.erb deleted file mode 100644 index 84dff1714ba..00000000000 --- a/app/assets/javascripts/locales/id.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.id.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:id) %> diff --git a/app/assets/javascripts/locales/it.js.erb b/app/assets/javascripts/locales/it.js.erb deleted file mode 100644 index e4d404feaa2..00000000000 --- a/app/assets/javascripts/locales/it.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.it.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:it) %> diff --git a/app/assets/javascripts/locales/ja.js.erb b/app/assets/javascripts/locales/ja.js.erb deleted file mode 100644 index 2bb653952a6..00000000000 --- a/app/assets/javascripts/locales/ja.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.ja.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:ja) %> diff --git a/app/assets/javascripts/locales/ko.js.erb b/app/assets/javascripts/locales/ko.js.erb deleted file mode 100644 index d1acbaa20b2..00000000000 --- a/app/assets/javascripts/locales/ko.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.ko.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:ko) %> diff --git a/app/assets/javascripts/locales/lt.js.erb b/app/assets/javascripts/locales/lt.js.erb deleted file mode 100644 index 0928fa6e838..00000000000 --- a/app/assets/javascripts/locales/lt.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.lt.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:lt) %> diff --git a/app/assets/javascripts/locales/lv.js.erb b/app/assets/javascripts/locales/lv.js.erb deleted file mode 100644 index 3b75ac291bb..00000000000 --- a/app/assets/javascripts/locales/lv.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.lv.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:lv) %> diff --git a/app/assets/javascripts/locales/nb_NO.js.erb b/app/assets/javascripts/locales/nb_NO.js.erb deleted file mode 100644 index 46accb28166..00000000000 --- a/app/assets/javascripts/locales/nb_NO.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.nb_NO.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:nb_NO) %> diff --git a/app/assets/javascripts/locales/nl.js.erb b/app/assets/javascripts/locales/nl.js.erb deleted file mode 100644 index 3016458bfa8..00000000000 --- a/app/assets/javascripts/locales/nl.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.nl.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:nl) %> diff --git a/app/assets/javascripts/locales/pl_PL.js.erb b/app/assets/javascripts/locales/pl_PL.js.erb deleted file mode 100644 index 47fced8925e..00000000000 --- a/app/assets/javascripts/locales/pl_PL.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.pl_PL.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:pl_PL) %> diff --git a/app/assets/javascripts/locales/pt.js.erb b/app/assets/javascripts/locales/pt.js.erb deleted file mode 100644 index 43fdfd47ade..00000000000 --- a/app/assets/javascripts/locales/pt.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.pt.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:pt) %> diff --git a/app/assets/javascripts/locales/pt_BR.js.erb b/app/assets/javascripts/locales/pt_BR.js.erb deleted file mode 100644 index 866e3e1eb62..00000000000 --- a/app/assets/javascripts/locales/pt_BR.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.pt_BR.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:pt_BR) %> diff --git a/app/assets/javascripts/locales/ro.js.erb b/app/assets/javascripts/locales/ro.js.erb deleted file mode 100644 index ff235132335..00000000000 --- a/app/assets/javascripts/locales/ro.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.ro.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:ro) %> diff --git a/app/assets/javascripts/locales/ru.js.erb b/app/assets/javascripts/locales/ru.js.erb deleted file mode 100644 index 1f54e50d8e5..00000000000 --- a/app/assets/javascripts/locales/ru.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.ru.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:ru) %> diff --git a/app/assets/javascripts/locales/sk.js.erb b/app/assets/javascripts/locales/sk.js.erb deleted file mode 100644 index 0ea8866c6c2..00000000000 --- a/app/assets/javascripts/locales/sk.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.sk.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:sk) %> diff --git a/app/assets/javascripts/locales/sl.js.erb b/app/assets/javascripts/locales/sl.js.erb deleted file mode 100644 index 84c07776975..00000000000 --- a/app/assets/javascripts/locales/sl.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.sl.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:sl) %> \ No newline at end of file diff --git a/app/assets/javascripts/locales/sq.js.erb b/app/assets/javascripts/locales/sq.js.erb deleted file mode 100644 index 388763a9ca1..00000000000 --- a/app/assets/javascripts/locales/sq.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.sq.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:sq) %> \ No newline at end of file diff --git a/app/assets/javascripts/locales/sr.js.erb b/app/assets/javascripts/locales/sr.js.erb deleted file mode 100644 index 7d2e42c701e..00000000000 --- a/app/assets/javascripts/locales/sr.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.sr.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:sr) %> diff --git a/app/assets/javascripts/locales/sv.js.erb b/app/assets/javascripts/locales/sv.js.erb deleted file mode 100644 index e404277bc62..00000000000 --- a/app/assets/javascripts/locales/sv.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.sv.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:sv) %> diff --git a/app/assets/javascripts/locales/sw.js.erb b/app/assets/javascripts/locales/sw.js.erb deleted file mode 100644 index 802dd59f024..00000000000 --- a/app/assets/javascripts/locales/sw.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.sw.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:sw) %> diff --git a/app/assets/javascripts/locales/te.js.erb b/app/assets/javascripts/locales/te.js.erb deleted file mode 100644 index 51a8dd0af7f..00000000000 --- a/app/assets/javascripts/locales/te.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.te.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:te) %> diff --git a/app/assets/javascripts/locales/th.js.erb b/app/assets/javascripts/locales/th.js.erb deleted file mode 100644 index e20959e00cf..00000000000 --- a/app/assets/javascripts/locales/th.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.th.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:th) %> diff --git a/app/assets/javascripts/locales/tr_TR.js.erb b/app/assets/javascripts/locales/tr_TR.js.erb deleted file mode 100644 index 1f7fa13c9ba..00000000000 --- a/app/assets/javascripts/locales/tr_TR.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.tr_TR.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:tr_TR) %> diff --git a/app/assets/javascripts/locales/ug.js.erb b/app/assets/javascripts/locales/ug.js.erb deleted file mode 100644 index cdf2139ee75..00000000000 --- a/app/assets/javascripts/locales/ug.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.ug.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:ug) %> diff --git a/app/assets/javascripts/locales/uk.js.erb b/app/assets/javascripts/locales/uk.js.erb deleted file mode 100644 index 5422c46f967..00000000000 --- a/app/assets/javascripts/locales/uk.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.uk.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:uk) %> diff --git a/app/assets/javascripts/locales/ur.js.erb b/app/assets/javascripts/locales/ur.js.erb deleted file mode 100644 index 6bff8e1dd8b..00000000000 --- a/app/assets/javascripts/locales/ur.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.ur.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:ur) %> diff --git a/app/assets/javascripts/locales/vi.js.erb b/app/assets/javascripts/locales/vi.js.erb deleted file mode 100644 index d08cb397f57..00000000000 --- a/app/assets/javascripts/locales/vi.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.vi.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:vi) %> diff --git a/app/assets/javascripts/locales/zh_CN.js.erb b/app/assets/javascripts/locales/zh_CN.js.erb deleted file mode 100644 index ac663d89b41..00000000000 --- a/app/assets/javascripts/locales/zh_CN.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.zh_CN.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:zh_CN) %> diff --git a/app/assets/javascripts/locales/zh_TW.js.erb b/app/assets/javascripts/locales/zh_TW.js.erb deleted file mode 100644 index da6a15c3031..00000000000 --- a/app/assets/javascripts/locales/zh_TW.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -//= depend_on 'client.zh_TW.yml' -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:zh_TW) %> diff --git a/app/controllers/extra_locales_controller.rb b/app/controllers/extra_locales_controller.rb index c37d674994c..0b161291524 100644 --- a/app/controllers/extra_locales_controller.rb +++ b/app/controllers/extra_locales_controller.rb @@ -11,12 +11,13 @@ class ExtraLocalesController < ApplicationController OVERRIDES_BUNDLE = "overrides" SHA1_HASH_LENGTH = 40 + MAIN_BUNDLE = "main" MF_BUNDLE = "mf" ADMIN_BUNDLE = "admin" WIZARD_BUNDLE = "wizard" SITE_SPECIFIC_BUNDLES = [OVERRIDES_BUNDLE, MF_BUNDLE] - SHARED_BUNDLES = [ADMIN_BUNDLE, WIZARD_BUNDLE] + SHARED_BUNDLES = [MAIN_BUNDLE, ADMIN_BUNDLE, WIZARD_BUNDLE] class << self def js_digests @@ -63,6 +64,8 @@ class ExtraLocalesController < ApplicationController JsLocaleHelper.output_client_overrides(locale_str) when MF_BUNDLE JsLocaleHelper.output_MF(locale_str) + when MAIN_BUNDLE + JsLocaleHelper.output_locale(locale_str) else JsLocaleHelper.output_extra_locales(bundle_str, locale_str) end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 9b4524d7928..aad72181a06 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -36,7 +36,7 @@ <%= preload_script file %> <%- end %> - <%= preload_script "locales/#{I18n.locale}" %> + <%= preload_script_url ExtraLocalesController.url("main") %> <%= preload_script_url ExtraLocalesController.url("mf") %> <%- if ExtraLocalesController.client_overrides_exist? %> <%= preload_script_url ExtraLocalesController.url("overrides") %> diff --git a/app/views/qunit/theme.html.erb b/app/views/qunit/theme.html.erb index 715169e25c0..b9ddca78255 100644 --- a/app/views/qunit/theme.html.erb +++ b/app/views/qunit/theme.html.erb @@ -10,7 +10,7 @@ <%= preload_script "test-support" %> <%= preload_script "discourse" %> <%= preload_script "test" %> - <%= preload_script "locales/#{I18n.locale}" %> + <%= preload_script_url ExtraLocalesController.url("main") %> <%= preload_script_url ExtraLocalesController.url("mf") %> <%= preload_script "admin" %> <%- Discourse.find_plugin_js_assets(include_disabled: true).each do |file| %> diff --git a/config/application.rb b/config/application.rb index 0c987d60fd0..11212513864 100644 --- a/config/application.rb +++ b/config/application.rb @@ -117,9 +117,6 @@ module Discourse # :all can be used as a placeholder for all plugins not explicitly named. # config.plugins = [ :exception_notification, :ssl_requirement, :all ] - # Allows us to skip minification on some files - config.assets.skip_minification = [] - # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. config.time_zone = "UTC" diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 118839cafa0..52866818360 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -9,7 +9,6 @@ Rails.application.config.assets.enabled = true Rails.application.config.assets.version = "2-#{GlobalSetting.asset_url_salt}" # Add additional assets to the asset load path. -Rails.application.config.assets.paths << "#{Rails.root}/config/locales" Rails.application.config.assets.paths << "#{Rails.root}/public/javascripts" # Precompile additional assets. @@ -23,29 +22,12 @@ Rails.application.config.assets.precompile += [ end, ] -Rails.application.config.assets.precompile += %w[ - break_string.js - locales/i18n.js - scripts/discourse-test-listen-boot -] +Rails.application.config.assets.precompile += %w[break_string.js scripts/discourse-test-listen-boot] Rails.application.config.assets.precompile << lambda do |logical_path, filename| filename.start_with?(EmberCli.dist_dir) && EmberCli.assets.include?(logical_path) end -# Precompile all available locales -unless GlobalSetting.try(:omit_base_locales) - Dir - .glob("#{Rails.root}/app/assets/javascripts/locales/*.js.erb") - .each do |file| - Rails - .application - .config - .assets - .precompile << "locales/#{file.match(/([a-z_A-Z]+\.js)\.erb$/)[1]}" - end -end - # out of the box sprockets 3 grabs loose files that are hanging in assets, # the exclusion list does not include hbs so you double compile all this stuff Rails.application.config.assets.precompile.delete(Sprockets::Railtie::LOOSE_APP_ASSETS) diff --git a/lib/js_locale_helper.rb b/lib/js_locale_helper.rb index 3a0052425c4..0875f8a6186 100644 --- a/lib/js_locale_helper.rb +++ b/lib/js_locale_helper.rb @@ -187,7 +187,10 @@ module JsLocaleHelper translations = translations_for(locale_str) remove_message_formats!(translations, locale) - result = +"" + result = +<<~JS + require("discourse/loader-shims"); + require("discourse-i18n"); + JS translations.keys.each do |l| translations[l].keys.each { |k| translations[l].delete(k) unless k == "js" } diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb index a9edfd9b6e5..4d993060e7c 100644 --- a/lib/plugin/instance.rb +++ b/lib/plugin/instance.rb @@ -1429,7 +1429,6 @@ class Plugin::Instance "" opts[:server_locale_file] = Dir["#{root_path}/config/locales/server*.#{locale}.yml"].first || "" - opts[:js_locale_file] = File.join(root_path, "assets/locales/#{locale}.js.erb") locale_chain = opts[:fallbackLocale] ? [locale, opts[:fallbackLocale]] : [locale] lib_locale_path = File.join(root_path, "lib/javascripts/locale") @@ -1522,8 +1521,7 @@ class Plugin::Instance def valid_locale?(custom_locale) File.exist?(custom_locale[:client_locale_file]) && - File.exist?(custom_locale[:server_locale_file]) && - File.exist?(custom_locale[:js_locale_file]) && custom_locale[:moment_js] + File.exist?(custom_locale[:server_locale_file]) && custom_locale[:moment_js] end def find_locale_file(locale_chain, path) diff --git a/lib/tasks/assets.rake b/lib/tasks/assets.rake index bd9c08ec966..8c4daae065b 100644 --- a/lib/tasks/assets.rake +++ b/lib/tasks/assets.rake @@ -34,7 +34,6 @@ task "assets:precompile:before": %w[ assets:precompile:prereqs assets:precompile:build ] do - require "uglifier" require "open3" # Ensure we ALWAYS do a clean build @@ -42,13 +41,8 @@ task "assets:precompile:before": %w[ STDERR.puts "Purging temp files" `rm -fr #{Rails.root}/tmp/cache` - $node_compress = !ENV["SKIP_NODE_UGLIFY"] - - unless ENV["USE_SPROCKETS_UGLIFY"] - $bypass_sprockets_uglify = true - Rails.configuration.assets.js_compressor = nil - Rails.configuration.assets.gzip = false - end + Rails.configuration.assets.js_compressor = nil + Rails.configuration.assets.gzip = false STDERR.puts "Bundling assets" @@ -127,54 +121,12 @@ def cdn_relative_path(p) global_path_klass.cdn_relative_path(p) end -def compress_node(from, to) - to_path = "#{assets_path}/#{to}" - assets = cdn_relative_path("/assets") - assets_additional_path = (d = File.dirname(from)) == "." ? "" : "/#{d}" - source_map_root = assets + assets_additional_path - source_map_url = "#{File.basename(to)}.map" - base_source_map = assets_path + assets_additional_path - - cmd = <<~SH - pnpm terser '#{assets_path}/#{from}' -m -c -o '#{to_path}' --source-map "base='#{base_source_map}',root='#{source_map_root}',url='#{source_map_url}',includeSources=true" - SH - - STDERR.puts cmd - result = `#{cmd} 2>&1` - unless $?.success? - STDERR.puts result - exit 1 - end - - result -end - -def compress_ruby(from, to) - data = File.read("#{assets_path}/#{from}") - - uglified, map = - Uglifier.new( - comments: :none, - source_map: { - filename: File.basename(from), - output_filename: File.basename(to), - }, - ).compile_with_map(data) - dest = "#{assets_path}/#{to}" - - File.write(dest, uglified << "\n//# sourceMappingURL=#{cdn_path "/assets/#{to}.map"}") - File.write(dest + ".map", map) - - GC.start -end - def gzip(path) STDERR.puts "gzip -f -c -9 #{path} > #{path}.gz" STDERR.puts `gzip -f -c -9 #{path} > #{path}.gz`.strip raise "gzip compression failed: exit code #{$?.exitstatus}" if $?.exitstatus != 0 end -# different brotli versions use different parameters def brotli_command(path) compression_quality = ENV["DISCOURSE_ASSETS_PRECOMPILE_DEFAULT_BROTLI_QUALITY"] || "6" "brotli -f --quality=#{compression_quality} #{path} --output=#{path}.br" @@ -188,21 +140,6 @@ def brotli(path) raise "chmod failed: exit code #{$?.exitstatus}" if $?.exitstatus != 0 end -def max_compress?(path, locales) - return false if Rails.configuration.assets.skip_minification.include? path - return false if EmberCli.is_ember_cli_asset?(path) - return true if path.exclude? "locales/" - - path_locale = path.delete_prefix("locales/").delete_suffix(".js") - return true if locales.include? path_locale - - false -end - -def compress(from, to) - $node_compress ? compress_node(from, to) : compress_ruby(from, to) -end - def concurrent? if ENV["SPROCKETS_CONCURRENT"] == "1" concurrent_compressors = [] @@ -249,30 +186,13 @@ task "assets:precompile:compress_js": "environment" do .select { |k, v| k =~ /\.js\z/ } .each do |file, info| path = "#{assets_path}/#{file}" - _file = - ( - if (d = File.dirname(file)) == "." - "_#{file}" - else - "#{d}/_#{File.basename(file)}" - end - ) - _path = "#{assets_path}/#{_file}" - max_compress = max_compress?(info["logical_path"], locales) - if File.exist?(_path) - STDERR.puts "Skipping: #{file} already compressed" - elsif file.include? "discourse/tests" + if file.include? "discourse/tests" STDERR.puts "Skipping: #{file}" else proc.call do log_task_duration(file) do STDERR.puts "Compressing: #{file}" - if max_compress - FileUtils.mv(path, _path) - compress(_file, file) - end - info["size"] = File.size(path) info["mtime"] = File.mtime(path).iso8601 gzip(path) diff --git a/spec/fixtures/plugins/custom_locales/assets/locales/foo_BAR.js.erb b/spec/fixtures/plugins/custom_locales/assets/locales/foo_BAR.js.erb deleted file mode 100644 index 0c552402810..00000000000 --- a/spec/fixtures/plugins/custom_locales/assets/locales/foo_BAR.js.erb +++ /dev/null @@ -1,2 +0,0 @@ -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:foo_BAR) %> diff --git a/spec/fixtures/plugins/custom_locales/assets/locales/tlh.js.erb b/spec/fixtures/plugins/custom_locales/assets/locales/tlh.js.erb deleted file mode 100644 index 2e3284dc996..00000000000 --- a/spec/fixtures/plugins/custom_locales/assets/locales/tlh.js.erb +++ /dev/null @@ -1,2 +0,0 @@ -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:tlh) %> diff --git a/spec/fixtures/plugins/custom_locales/assets/locales/tup.js.erb b/spec/fixtures/plugins/custom_locales/assets/locales/tup.js.erb deleted file mode 100644 index ffc9195f924..00000000000 --- a/spec/fixtures/plugins/custom_locales/assets/locales/tup.js.erb +++ /dev/null @@ -1,2 +0,0 @@ -//= require locales/i18n -<%= JsLocaleHelper.output_locale(:tup) %> diff --git a/spec/lib/js_locale_helper_spec.rb b/spec/lib/js_locale_helper_spec.rb index a12fd409845..de446db7614 100644 --- a/spec/lib/js_locale_helper_spec.rb +++ b/spec/lib/js_locale_helper_spec.rb @@ -22,12 +22,9 @@ RSpec.describe JsLocaleHelper do ctx.eval <<~JS define("discourse/loader-shims", () => {}) define("discourse/lib/load-moment", () => {}) - moment = { defineLocale: () => {}, fn: {}, tz: {} } + require("discourse-i18n"); + globalThis.moment = { defineLocale: () => {}, fn: {}, tz: {} } JS - # As there are circular references in the return value, this raises an - # error if we let MiniRacer try to convert the value to JSON. Forcing - # returning `null` from `#eval` will prevent that. - ctx.eval("#{File.read("#{Rails.root}/app/assets/javascripts/locales/i18n.js")};null") ctx end diff --git a/spec/lib/plugin/instance_spec.rb b/spec/lib/plugin/instance_spec.rb index fd8c7a01c43..8dc9a52cfe7 100644 --- a/spec/lib/plugin/instance_spec.rb +++ b/spec/lib/plugin/instance_spec.rb @@ -607,7 +607,6 @@ TEXT config/locales/client.foo_BAR.yml config/locales/server.foo_BAR.yml lib/javascripts/locale/moment_js/foo_BAR.js - assets/locales/foo_BAR.js.erb ].each do |path| it "does not register a new locale when #{path} is missing" do path = "#{plugin_path}/#{path}" diff --git a/spec/requests/application_controller_spec.rb b/spec/requests/application_controller_spec.rb index 2751a3a069a..230af6201fa 100644 --- a/spec/requests/application_controller_spec.rb +++ b/spec/requests/application_controller_spec.rb @@ -1074,11 +1074,13 @@ RSpec.describe ApplicationController do { HTTP_ACCEPT_LANGUAGE: locale } end - def locale_scripts(body) + def main_locale_scripts(body) Nokogiri::HTML5 .parse(body) - .css('script[src*="assets/locales/"]') - .map { |script| script.attributes["src"].value } + .css('script[src*="extra-locales/"]') + .filter_map do |script| + script.attributes["src"].to_s[%r{extra-locales/[^/]+/([^/]+)/main.js}, 1] + end end context "with allow_user_locale disabled" do @@ -1092,7 +1094,7 @@ RSpec.describe ApplicationController do it "uses the default locale" do get "/latest", headers: headers("fr") expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/en.js") + expect(main_locale_scripts(response.body)).to contain_exactly("en") end end @@ -1103,7 +1105,7 @@ RSpec.describe ApplicationController do get "/latest", headers: headers("fr") expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/en.js") + expect(main_locale_scripts(response.body)).to contain_exactly("en") end end end @@ -1121,13 +1123,13 @@ RSpec.describe ApplicationController do it "uses the locale from the headers" do get "/latest", headers: headers("fr") expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/fr.js") + expect(main_locale_scripts(response.body)).to contain_exactly("fr") end it "doesn't leak after requests" do get "/latest", headers: headers("fr") expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/fr.js") + expect(main_locale_scripts(response.body)).to contain_exactly("fr") expect(I18n.locale.to_s).to eq(SiteSettings::DefaultsProvider::DEFAULT_LOCALE) end end @@ -1140,7 +1142,7 @@ RSpec.describe ApplicationController do it "uses the user's preferred locale" do get "/latest", headers: headers("fr") expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/fr.js") + expect(main_locale_scripts(response.body)).to contain_exactly("fr") end it "serves a 404 page in the preferred locale" do @@ -1153,7 +1155,7 @@ RSpec.describe ApplicationController do it "serves a RenderEmpty page in the preferred locale" do get "/u/#{user.username}/preferences/interface" expect(response.status).to eq(200) - expect(response.body).to have_tag("script", with: { src: "/assets/locales/fr.js" }) + expect(main_locale_scripts(response.body)).to contain_exactly("fr") end end end @@ -1166,7 +1168,7 @@ RSpec.describe ApplicationController do get "/latest", headers: headers("zh-CN") expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/zh_CN.js") + expect(main_locale_scripts(response.body)).to contain_exactly("zh_CN") end end @@ -1177,7 +1179,7 @@ RSpec.describe ApplicationController do get "/latest", headers: headers("") expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/en.js") + expect(main_locale_scripts(response.body)).to contain_exactly("en") end end end @@ -1194,7 +1196,7 @@ RSpec.describe ApplicationController do it "uses the locale from the cookie" do get "/latest", headers: { Cookie: "locale=es" } expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/es.js") + expect(main_locale_scripts(response.body)).to contain_exactly("es") expect(I18n.locale.to_s).to eq(SiteSettings::DefaultsProvider::DEFAULT_LOCALE) # doesn't leak after requests end end @@ -1203,7 +1205,7 @@ RSpec.describe ApplicationController do it "returns the locale and region separated by an underscore" do get "/latest", headers: { Cookie: "locale=zh-CN" } expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/zh_CN.js") + expect(main_locale_scripts(response.body)).to contain_exactly("zh_CN") end end end @@ -1215,7 +1217,7 @@ RSpec.describe ApplicationController do get "/latest", headers: { Cookie: "" } expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/en.js") + expect(main_locale_scripts(response.body)).to contain_exactly("en") end end end @@ -1232,7 +1234,7 @@ RSpec.describe ApplicationController do it "uses the locale from the param" do get "/latest?lang=es" expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/es.js") + expect(main_locale_scripts(response.body)).to contain_exactly("es") expect(I18n.locale.to_s).to eq(SiteSettings::DefaultsProvider::DEFAULT_LOCALE) # doesn't leak after requests end end @@ -1241,7 +1243,7 @@ RSpec.describe ApplicationController do it "returns the locale and region separated by an underscore" do get "/latest?lang=zh-CN" expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/zh_CN.js") + expect(main_locale_scripts(response.body)).to contain_exactly("zh_CN") end end end @@ -1253,7 +1255,7 @@ RSpec.describe ApplicationController do get "/latest" expect(response.status).to eq(200) - expect(locale_scripts(response.body)).to contain_exactly("/assets/locales/en.js") + expect(main_locale_scripts(response.body)).to contain_exactly("en") end end end