make l10n libs capable of handling plural translations

This commit is contained in:
Jakob Sack 2013-07-07 20:06:14 +02:00
parent e13d1d0cf2
commit 560839195e
2 changed files with 28 additions and 3 deletions

View File

@ -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

View File

@ -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);
}
}