Add multiple plural forms to the php part
This commit is contained in:
parent
18fc22b52b
commit
bb0c5bff5f
3 changed files with 43 additions and 11 deletions
|
@ -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{
|
||||
|
|
34
lib/l10n.php
34
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue