]> source.dussan.org Git - nextcloud-server.git/commitdiff
Allow to overwrite a single language string via the theme folder
authorJoas Schilling <nickvergessen@owncloud.com>
Fri, 26 Feb 2016 12:56:02 +0000 (13:56 +0100)
committerJoas Schilling <nickvergessen@owncloud.com>
Fri, 26 Feb 2016 12:56:02 +0000 (13:56 +0100)
core/js/l10n.js
lib/private/template/jsresourcelocator.php

index fb93d7b789e166ccc490ef406a407358ecaf99a1..c19f523b30e4ae8f4a9ebea2b70eca0d6c26a5d9 100644 (file)
@@ -66,13 +66,21 @@ OC.L10N = {
         * @param {Function|String} [pluralForm] optional plural function or plural string
         */
        register: function(appName, bundle, pluralForm) {
-               this._bundles[appName] = bundle || {};
-
-               if (_.isFunction(pluralForm)) {
-                       this._pluralFunctions[appName] = pluralForm;
+               var self = this;
+               if (_.isUndefined(this._bundles[appName])) {
+                       this._bundles[appName] = bundle || {};
+
+                       if (_.isFunction(pluralForm)) {
+                               this._pluralFunctions[appName] = pluralForm;
+                       } else {
+                               // generate plural function based on form
+                               this._pluralFunctions[appName] = this._generatePluralFunction(pluralForm);
+                       }
                } else {
-                       // generate plural function based on form
-                       this._pluralFunctions[appName] = this._generatePluralFunction(pluralForm);
+                       // Theme overwriting the default language
+                       _.each(bundle, function(translation, key) {
+                               self._bundles[appName][key] = translation
+                       });
                }
        },
 
index 4df1ac8c7f01ec833f1bc192aa91ec58c6854321..6ea7b6291c0ac3afc1a86e896aba8d740be94b9b 100644 (file)
@@ -31,8 +31,24 @@ class JSResourceLocator extends ResourceLocator {
        public function doFind($script) {
                $theme_dir = 'themes/'.$this->theme.'/';
                if (strpos($script, '3rdparty') === 0
-                       && $this->appendIfExist($this->thirdpartyroot, $script.'.js')
-                       || $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$script.'.js')
+                       && $this->appendIfExist($this->thirdpartyroot, $script.'.js')) {
+                       return;
+               }
+
+               if (strpos($script, '/l10n/') !== false) {
+                       // For language files we try to load them all, so themes can overwrite
+                       // single l10n strings without having to translate all of them.
+                       $found = 0;
+                       $found += $this->appendIfExist($this->serverroot, 'core/'.$script.'.js');
+                       $found += $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$script.'.js');
+                       $found += $this->appendIfExist($this->serverroot, $script.'.js');
+                       $found += $this->appendIfExist($this->serverroot, $theme_dir.$script.'.js');
+                       $found += $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$script.'.js');
+
+                       if ($found) {
+                               return;
+                       }
+               } else if ($this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$script.'.js')
                        || $this->appendIfExist($this->serverroot, $theme_dir.$script.'.js')
                        || $this->appendIfExist($this->serverroot, $script.'.js')
                        || $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$script.'.js')
@@ -40,6 +56,7 @@ class JSResourceLocator extends ResourceLocator {
                ) {
                        return;
                }
+
                $app = substr($script, 0, strpos($script, '/'));
                $script = substr($script, strpos($script, '/')+1);
                $app_path = \OC_App::getAppPath($app);