From 560839195e97abdaca4f8c144a6a760a0ab90c19 Mon Sep 17 00:00:00 2001 From: Jakob Sack Date: Sun, 7 Jul 2013 20:06:14 +0200 Subject: [PATCH] make l10n libs capable of handling plural translations --- lib/l10n.php | 20 ++++++++++++++++++++ lib/l10n/string.php | 11 ++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/l10n.php b/lib/l10n.php index d35ce5fed1..03528c2274 100644 --- a/lib/l10n.php +++ b/lib/l10n.php @@ -166,6 +166,26 @@ class OC_L10N{ return new OC_L10N_String($this, $text, $parameters); } + /** + * @brief Translating + * @param $text_singular String the string to translate for exactly one object + * @param $text_plural String the string to translate for n objects + * @param $count Integer Number of objects + * @param array $parameters default:array() Parameters for sprintf + * @return \OC_L10N_String Translation or the same text + * + * Returns the translation. If no translation is found, $text will be + * returned. %n will be replaced with the number of objects. + */ + public function tp($text_singular, $text_plural, $count, $parameters = array()) { + if($count == 1){ + return new OC_L10N_String($this, $text_singular, $parameters, $count); + } + else{ + return new OC_L10N_String($this, $text_plural, $parameters, $count); + } + } + /** * @brief Translating * @param $textArray The text array we need a translation for diff --git a/lib/l10n/string.php b/lib/l10n/string.php index 8eef10071e..1bef733094 100644 --- a/lib/l10n/string.php +++ b/lib/l10n/string.php @@ -8,18 +8,23 @@ class OC_L10N_String{ protected $l10n; - public function __construct($l10n, $text, $parameters) { + public function __construct($l10n, $text, $parameters, $count = 1) { $this->l10n = $l10n; $this->text = $text; $this->parameters = $parameters; + $this->count = $count; } public function __toString() { $translations = $this->l10n->getTranslations(); + + $text = $this->text; if(array_key_exists($this->text, $translations)) { - return vsprintf($translations[$this->text], $this->parameters); + $text = $translations[$this->text]; } - return vsprintf($this->text, $this->parameters); + // Replace %n first (won't interfere with vsprintf) + $text = str_replace('%n', $this->count, $text); + return vsprintf($text, $this->parameters); } }