summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJakob Sack <mail@jakobsack.de>2013-07-16 22:16:53 +0200
committerJakob Sack <mail@jakobsack.de>2013-07-16 22:16:53 +0200
commitbb0c5bff5fc493dd24c2c9cbbf27986fd5098de1 (patch)
tree9aa2eceb270a6f9fbeaba5ec74b3a37f0121a5cc /lib
parent18fc22b52bdf1d8372a6e9c602872c423ce50eff (diff)
downloadnextcloud-server-bb0c5bff5fc493dd24c2c9cbbf27986fd5098de1.tar.gz
nextcloud-server-bb0c5bff5fc493dd24c2c9cbbf27986fd5098de1.zip
Add multiple plural forms to the php part
Diffstat (limited to 'lib')
-rw-r--r--lib/l10n.php34
-rw-r--r--lib/l10n/string.php9
2 files changed, 38 insertions, 5 deletions
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);