summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/js/js.js11
-rw-r--r--lib/l10n.php34
-rw-r--r--lib/l10n/string.php9
3 files changed, 43 insertions, 11 deletions
diff --git a/core/js/js.js b/core/js/js.js
index 15cf1d286fa..37540bd15e7 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -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{
diff --git a/lib/l10n.php b/lib/l10n.php
index 03528c22746..8348962cc10 100644
--- a/lib/l10n.php
+++ b/lib/l10n.php
@@ -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);
+ }
}
}
@@ -221,6 +236,17 @@ class OC_L10N{
}
/**
+ * @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
* @param $params parameters for this localization
diff --git a/lib/l10n/string.php b/lib/l10n/string.php
index 1bef7330945..3cda5eab506 100644
--- a/lib/l10n/string.php
+++ b/lib/l10n/string.php
@@ -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);