]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add multiple plural forms to the php part
authorJakob Sack <mail@jakobsack.de>
Tue, 16 Jul 2013 20:16:53 +0000 (22:16 +0200)
committerJakob Sack <mail@jakobsack.de>
Tue, 16 Jul 2013 20:16:53 +0000 (22:16 +0200)
core/js/js.js
lib/l10n.php
lib/l10n/string.php

index 15cf1d286fa9735c56c60adfd475051d51c79882..37540bd15e773699643436a08b388259d2f382a2 100644 (file)
@@ -33,7 +33,7 @@ if (oc_debug !== true || typeof console === "undefined" || typeof console.log ==
  * @return string
  */
 function t(app, text, vars, count){
-       if( !( t.cache[app] )){
+       if( !( t.cache[app] )) {
                $.ajax(OC.filePath('core','ajax','translations.php'),{
                        async:false,//todo a proper sollution for this without sync ajax calls
                        data:{'app': app},
@@ -49,8 +49,7 @@ function t(app, text, vars, count){
                }
        }
        var _build = function (text, vars, count) {
-               // FIXME: replace %n with content of count
-               return text.replace(/{([^{}]*)}/g,
+               return text.replace(/%n/g, count).replace(/{([^{}]*)}/g,
                        function (a, b) {
                                var r = vars[b];
                                return typeof r === 'string' || typeof r === 'number' ? r : a;
@@ -62,7 +61,7 @@ function t(app, text, vars, count){
                translation = t.cache[app][text];
        }
 
-       if(typeof vars === 'object' || typeof count !== 'undefined' ) {
+       if(typeof vars === 'object' || count !== undefined ) {
                return _build(translation, vars, count);
        } else {
                return translation;
@@ -79,8 +78,8 @@ t.cache={};
  * @param vars (optional) FIXME
  * @return string
  */
-function tp(app, text_singular, text_plural, count, vars){
-       if(count==1){
+function n(app, text_singular, text_plural, count, vars){
+       if(count === 1) {
                return t(app, text_singular, vars, count);
        }
        else{
index 03528c22746e841abeb24b3e292f3604ed105322..8348962cc10132af00ad5fe726a2270561e22ae2 100644 (file)
@@ -176,13 +176,28 @@ class OC_L10N{
         *
         * Returns the translation. If no translation is found, $text will be
         * returned. %n will be replaced with the number of objects.
+        *
+        * In case there is more than one plural form you can add a function
+        * "selectplural" in core/l10n/l10n-*.php
+        *
+        * Example:
+        *
+        *   [...]
+        *   'selectplural' => function($i){return $i == 1 ? 0 : $i == 2 ? 1 : 2},
+        *   [...]
         */
-       public function tp($text_singular, $text_plural, $count, $parameters = array()) {
-               if($count == 1){
-                       return new OC_L10N_String($this, $text_singular, $parameters, $count);
+       public function n($text_singular, $text_plural, $count, $parameters = array()) {
+               $identifier = "_${text_singular}__${text_plural}_";
+               if(array_key_exists( $this->localizations, "selectplural") && array_key_exists($this->translations, $identifier)) {
+                       return new OC_L10N_String( $this, $identifier, $parameters, $count );
                }
                else{
-                       return new OC_L10N_String($this, $text_plural, $parameters, $count);
+                       if($count === 1) {
+                               return new OC_L10N_String($this, $text_singular, $parameters, $count);
+                       }
+                       else{
+                               return new OC_L10N_String($this, $text_plural, $parameters, $count);
+                       }
                }
        }
 
@@ -220,6 +235,17 @@ class OC_L10N{
                return $this->translations;
        }
 
+       /**
+        * @brief get localizations
+        * @returns Fetch all localizations
+        *
+        * Returns an associative array with all localizations
+        */
+       public function getLocalizations() {
+               $this->init();
+               return $this->localizations;
+       }
+
        /**
         * @brief Localization
         * @param $type Type of localization
index 1bef7330945b4773765826ffd7921ca53458c0ba..3cda5eab50687dd6745257c47ad9106418924e27 100644 (file)
@@ -18,10 +18,17 @@ class OC_L10N_String{
 
        public function __toString() {
                $translations = $this->l10n->getTranslations();
+               $localizations = $this->l10n->getLocalizations();
 
                $text = $this->text;
                if(array_key_exists($this->text, $translations)) {
-                       $text = $translations[$this->text];
+                       if(is_array($translations[$this->text])) {
+                               $id = $localizations["selectplural"]( $count );
+                               $text = $translations[$this->text][$id]
+                       }
+                       else{
+                               $text = $translations[$this->text];
+                       }
                }
                // Replace %n first (won't interfere with vsprintf)
                $text = str_replace('%n', $this->count, $text);