diff --git a/app/controllers/extra_locales_controller.rb b/app/controllers/extra_locales_controller.rb
index d6819d8ae23..7aad6b4138b 100644
--- a/app/controllers/extra_locales_controller.rb
+++ b/app/controllers/extra_locales_controller.rb
@@ -4,27 +4,30 @@ class ExtraLocalesController < ApplicationController
   skip_before_filter :check_xhr, :preload_json
 
   def show
-    locale_str = I18n.locale.to_s
-    translations = JsLocaleHelper.translations_for(locale_str)
-
     bundle = params[:bundle]
     raise Discourse::InvalidAccess.new unless bundle =~ /^[a-z]+$/
-    for_key = translations[locale_str]["#{bundle}_js"] 
 
+    locale_str = I18n.locale.to_s
+    translations = JsLocaleHelper.translations_for(locale_str)
+    for_key = translations[locale_str]["#{bundle}_js"]
 
-    if for_key.present?
-      js = <<-JS
+    if plugin_for_key = JsLocaleHelper.plugin_translations(locale_str)["#{bundle}_js"]
+      for_key.deep_merge!(plugin_for_key)
+    end
+
+    js =
+      if for_key.present?
+        <<~JS
         (function() {
           if (window.I18n) {
             window.I18n.extras = window.I18n.extras || [];
             window.I18n.extras.push(#{for_key.to_json});
           }
         })();
-      JS
-    else
-      js = ""
-    end
-
+        JS
+      else
+        ""
+      end
 
     render text: js, content_type: "application/javascript"
   end
diff --git a/lib/js_locale_helper.rb b/lib/js_locale_helper.rb
index 02216d94eb8..b44c07b7add 100644
--- a/lib/js_locale_helper.rb
+++ b/lib/js_locale_helper.rb
@@ -1,5 +1,19 @@
 module JsLocaleHelper
 
+  def self.plugin_translations(locale_str)
+    @plugin_translations ||= HashWithIndifferentAccess.new
+
+    @plugin_translations[locale_str] ||= begin
+      translations = {}
+
+      Dir["#{Rails.root}/plugins/*/config/locales/client.#{locale_str}.yml"].each do |file|
+        translations.deep_merge! YAML::load(File.open(file))[locale_str]
+      end
+
+      translations
+    end
+  end
+
   def self.load_translations(locale, opts=nil)
     opts ||= {}
 
@@ -11,14 +25,9 @@ module JsLocaleHelper
 
       # load default translations
       translations = YAML::load(File.open("#{Rails.root}/config/locales/client.#{locale_str}.yml"))
-      # load plugins translations
-      plugin_translations = {}
-      Dir["#{Rails.root}/plugins/*/config/locales/client.#{locale_str}.yml"].each do |file|
-        plugin_translations.deep_merge! YAML::load(File.open(file))
-      end
 
       # merge translations (plugin translations overwrite default translations)
-      translations[locale_str]['js'].deep_merge!(plugin_translations[locale_str]['js']) if translations[locale_str] && plugin_translations[locale_str] && plugin_translations[locale_str]['js']
+      translations[locale_str]['js'].deep_merge!(plugin_translations(locale_str)['js']) if translations[locale_str] && plugin_translations(locale_str) && plugin_translations(locale_str)['js']
 
       translations
     end
@@ -71,17 +80,16 @@ module JsLocaleHelper
 
     site_locale = SiteSetting.default_locale.to_sym
 
-    if Rails.env.development?
-      translations = load_translations(locale_sym, force: true)
-    else
-      if locale_sym == :en
-        translations = load_translations(locale_sym)
+    translations =
+      if Rails.env.development?
+        load_translations(locale_sym, force: true)
+      elsif locale_sym == :en
+        load_translations(locale_sym)
       elsif locale_sym == site_locale || site_locale == :en
-        translations = load_translations_merged(locale_sym, :en)
+        load_translations_merged(locale_sym, :en)
       else
-        translations = load_translations_merged(locale_sym, site_locale, :en)
+        load_translations_merged(locale_sym, site_locale, :en)
       end
-    end
 
     I18n.locale = current_locale
 
diff --git a/spec/controllers/extra_locales_controller_spec.rb b/spec/controllers/extra_locales_controller_spec.rb
index c7453aca56f..3c64d738646 100644
--- a/spec/controllers/extra_locales_controller_spec.rb
+++ b/spec/controllers/extra_locales_controller_spec.rb
@@ -18,6 +18,26 @@ describe ExtraLocalesController do
       get :show, bundle: '-invalid..character!!'
       expect(response).to_not be_success
     end
+
+    it "should include plugin translations" do
+      JsLocaleHelper.expects(:plugin_translations).with("en").returns({
+        "admin_js" => {
+          "admin" => {
+            "site_settings" => {
+              "categories" => {
+                "github_badges" => "Github Badges"
+              }
+            }
+          }
+        }
+      }).at_least_once
+
+      get :show, bundle: "admin"
+
+      expect(response).to be_success
+      expect(response.body.include?("github_badges")).to eq(true)
+    end
+
   end
 
 end