"Adding test coverage for I18n class.

Adding ability to change translations on the fly
	Example: Configure::write('Config.language', 'locale');
Same setting can be used to define you own locale
	Example: Configure::write('Config.language', 'somename');
Added ability to set additional directory paths for locale directory
	Example: Configure::write('Locale.path', DS . 'directory'. DS . 'locale');
Fixed merging of core translations, if present."

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@6905 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
phpnut 2008-05-17 00:48:34 +00:00
parent 8124d166ff
commit 638b06ff85
47 changed files with 2225 additions and 108 deletions

View file

@ -53,6 +53,13 @@ class I18n extends Object {
* @access public
*/
var $domain = null;
/**
* Current language used for translations
*
* @var string
* @access private;
*/
var $__lang = null;
/**
* Translation strings for a specific domain read from the .mo or .po files
*
@ -94,12 +101,6 @@ class I18n extends Object {
if (!$instance) {
$instance[0] =& new I18n();
$instance[0]->l10n =& new L10n();
$language = Configure::read('Config.language');
if ($language === null && !empty($_SESSION['Config']['language'])) {
$language = $_SESSION['Config']['language'];
}
$instance[0]->l10n->get($language);
}
return $instance[0];
}
@ -115,11 +116,20 @@ class I18n extends Object {
* @return string translated strings.
* @access public
*/
function translate($singular, $plural = null, $domain = null, $category = 5, $count = null) {
function translate($singular, $plural = null, $domain = null, $category = null, $count = null) {
if (!$category) {
$category = 5;
}
$language = Configure::read('Config.language');
if ($language === null && !empty($_SESSION['Config']['language'])) {
$language = $_SESSION['Config']['language'];
}
$_this =& I18n::getInstance();
if (($_this->__lang && $_this->__lang !== $language) || !$_this->__lang) {
$lang = $_this->l10n->get($language);
$_this->__lang = $lang;
}
$_this->category = $_this->__categories[$category];
if (is_null($domain)) {
@ -131,15 +141,15 @@ class I18n extends Object {
$_this->__domains = Cache::read($_this->domain, '_cake_core_');
}
if (!isset($_this->__domains[$_this->category][$domain])) {
if (!isset($_this->__domains[$_this->category][$_this->__lang][$domain])) {
$_this->__bindTextDomain($domain);
$_this->__cache = true;
}
if (!isset($count)) {
$pli = 0;
} elseif (!empty($_this->__domains[$_this->category][$domain]["%plural-c"]) && $_this->__noLocale === false) {
$ph = $_this->__domains[$_this->category][$domain]["%plural-c"];
} elseif (!empty($_this->__domains[$_this->category][$_this->__lang][$domain]["%plural-c"]) && $_this->__noLocale === false) {
$ph = $_this->__domains[$_this->category][$_this->__lang][$domain]["%plural-c"];
$pli = $_this->__pluralGuess($ph, $count);
} else {
if ($count != 1) {
@ -149,13 +159,12 @@ class I18n extends Object {
}
}
if (!empty($_this->__domains[$_this->category][$domain][$singular])) {
if (($trans = $_this->__domains[$_this->category][$domain][$singular]) || ($pli) && ($trans = $_this->__domains[$_this->category][$domain][$plural])) {
if (!empty($_this->__domains[$_this->category][$_this->__lang][$domain][$singular])) {
if (($trans = $_this->__domains[$_this->category][$_this->__lang][$domain][$singular]) || ($pli) && ($trans = $_this->__domains[$_this->category][$_this->__lang][$domain][$plural])) {
if (is_array($trans)) {
if (!isset($trans[$pli])) {
$pli = 0;
if (isset($trans[$pli])) {
$trans = $trans[$pli];
}
$trans = $trans[$pli];
}
if (strlen($trans)) {
$singular = $trans;
@ -188,113 +197,120 @@ class I18n extends Object {
} elseif (strpos($type, "n%100!=11")) {
if (strpos($type, "n!=0")) {
$type = 21;
$type = 3;
}
if (strpos($type, "n%10<=4")) {
$type = 22;
$type = 4;
}
if (strpos($type, "n%10>=2")) {
$type = 23;
$type = 5;
}
} elseif (strpos($type, "n<=4")) {
$type = 25;
$type = 6;
} elseif (strpos($type, "n==2")) {
$type = 31;
$type = 9;
} elseif (strpos($type, "n%10>=2")) {
$type = 26;
} elseif (strpos($type, "n%100==3")) {
$type = 28;
} elseif (strpos($type, ";plural=n;")) {
$type = 7;
} else {
$type = 0;
} elseif (strpos($type, "n%100==3")) {
$type = 8;
} elseif (strpos($type, "n%100<20")) {
$type = 10;
}
}
switch ($type) {
case -1:
return (0);
return 0;
case 1:
if ($n != 1) {
return (1);
return 1;
}
return (0);
return 0;
case 2:
if ($n > 1) {
return (1);
return 1;
}
return (0);
case 7:
return ($n);
case 21:
return 0;
case 3:
if (($n % 10 == 1) && ($n % 100 != 11)) {
return (0);
return 0;
}
if ($n != 0 ) {
return (1);
return 1;
}
return (2);
case 22:
return 2;
case 4:
if (($n % 10 == 1) && ($n % 100 != 11)) {
return (0);
return 0;
}
if (($n % 10 >= 2) && ($n % 10 <= 4) && ($n % 100 < 10 || $n % 100 >= 20)) {
return (1);
return 1;
}
return (2);
case 23:
return 2;
case 5:
if (($n % 10 == 1) && ($n % 100 != 11)) {
return (0);
return 0;
}
if (($n %10 >= 2) && ($n % 100 < 10 || $n % 100 >= 20)) {
return (1);
return 1;
}
return (2);
case 25:
return 2;
case 6:
if ($n==1) {
return (0);
return 0;
}
if ($n >= 2 && $n <= 4) {
return (1);
return 1;
}
return (2);
case 26:
return 2;
case 7:
if ($n==1) {
return (0);
return 0;
}
if ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20)) {
return (1);
return 1;
}
return (2);
case 28:
return 2;
case 8:
if ($n % 100 == 1) {
return (0);
return 0;
}
if ($n % 100 == 2 || $n % 100 == 3 || $n % 100 == 4) {
return (2);
if ($n % 100 == 2) {
return 1;
}
return (3);
case 31:
if ($n % 100 == 3 || $n % 100 == 4) {
return 2;
}
return 3;
case 9:
if ($n == 1) {
return (0);
return 0;
}
if ($n == 2) {
return (1);
return 1;
}
return (2);
default:
$type = -1;
return 2;
case 10:
if ($n == 1) {
return 0;
}
if ($n == 0 || $n % 100 > 0 && $n % 100 < 20) {
return 1;
}
return 2;
}
return(0);
return $n;
}
/**
* Binds the given domain to a file in the specified directory.
@ -310,6 +326,12 @@ class I18n extends Object {
$merge = array();
$searchPath[] = APP . 'locale';
$paths = Configure::read('Locale.path');
if ($paths) {
$searchPath[] = $paths;
}
$plugins = Configure::listObjects('plugin');
if (!empty($plugins)) {
@ -325,12 +347,12 @@ class I18n extends Object {
if (file_exists($fn = "$app.mo")) {
$_this->__loadMo($fn, $domain);
$_this->__noLocale = false;
$merge = $_this->__domains;
$merge[$_this->category][$_this->__lang][$domain] = $_this->__domains[$_this->category][$_this->__lang][$domain];
$core = null;
} elseif (file_exists($fn = "$app.po") && ($f = fopen($fn, "r"))) {
$_this->__loadPo($f, $domain);
$_this->__noLocale = false;
$merge = $_this->__domains;
$merge[$_this->category][$_this->__lang][$domain] = $_this->__domains[$_this->category][$_this->__lang][$domain];
$core = null;
}
}
@ -347,26 +369,27 @@ class I18n extends Object {
}
}
if (empty($_this->__domains[$_this->category][$domain])) {
$_this->__domains[$_this->category][$domain] = array();
if (empty($_this->__domains[$_this->category][$_this->__lang][$domain])) {
$_this->__domains[$_this->category][$_this->__lang][$domain] = array();
return($domain);
}
if ($head = $_this->__domains[$_this->category][$domain][""]) {
if ($head = $_this->__domains[$_this->category][$_this->__lang][$domain][""]) {
foreach (explode("\n", $head) as $line) {
$header = strtok($line,":");
$line = trim(strtok("\n"));
$_this->__domains[$_this->category][$domain]["%po-header"][strtolower($header)] = $line;
$_this->__domains[$_this->category][$_this->__lang][$domain]["%po-header"][strtolower($header)] = $line;
}
if (isset($_this->__domains[$_this->category][$domain]["%po-header"]["plural-forms"])) {
$switch = preg_replace("/[() {}\\[\\]^\\s*\\]]+/", "", $_this->__domains[$_this->category][$domain]["%po-header"]["plural-forms"]);
$_this->__domains[$_this->category][$domain]["%plural-c"] = $switch;
if (isset($_this->__domains[$_this->category][$_this->__lang][$domain]["%po-header"]["plural-forms"])) {
$switch = preg_replace("/[() {}\\[\\]^\\s*\\]]+/", "", $_this->__domains[$_this->category][$_this->__lang][$domain]["%po-header"]["plural-forms"]);
$_this->__domains[$_this->category][$_this->__lang][$domain]["%plural-c"] = $switch;
unset($_this->__domains[$_this->category][$_this->__lang][$domain]["%po-header"]);
}
$_this->__domains = Set::pushDiff($_this->__domains, $merge);
if (isset($_this->__domains[$_this->category][$domain][null])) {
unset($_this->__domains[$_this->category][$domain][null]);
if (isset($_this->__domains[$_this->category][$_this->__lang][$domain][null])) {
unset($_this->__domains[$_this->category][$_this->__lang][$domain][null]);
}
}
return($domain);
@ -402,10 +425,10 @@ class I18n extends Object {
if (strpos($msgstr, "\000")) {
$msgstr = explode("\000", $msgstr);
}
$_this->__domains[$_this->category][$domain][$msgid] = $msgstr;
$_this->__domains[$_this->category][$_this->__lang][$domain][$msgid] = $msgstr;
if (isset($msgid_plural)) {
$_this->__domains[$_this->category][$domain][$msgid_plural] =& $_this->__domains[$_this->category][$domain][$msgid];
$_this->__domains[$_this->category][$_this->__lang][$domain][$msgid_plural] =& $_this->__domains[$_this->category][$_this->__lang][$domain][$msgid];
}
}
}
@ -481,19 +504,7 @@ class I18n extends Object {
fclose($file);
$merge[""] = $header;
return $_this->__domains[$_this->category][$domain] = array_merge($merge ,$translations);
}
/**
* Not implemented
*
* @param string $domain Domain
* @param string $codeset Code set
* @return string
* @access private
* @todo Not implemented
*/
function __bindTextDomainCodeset($domain, $codeset = null) {
return($domain);
return $_this->__domains[$_this->category][$_this->__lang][$domain] = array_merge($merge ,$translations);
}
/**
* Object destructor

View file

@ -373,14 +373,23 @@ class L10n extends Object {
$this->lang = DEFAULT_LANGUAGE;
$this->locale = $this->__l10nCatalog[$this->__l10nMap[DEFAULT_LANGUAGE]]['locale'];
$this->charset = $this->__l10nCatalog[$this->__l10nMap[DEFAULT_LANGUAGE]]['charset'];
} else {
$this->lang = $language;
$this->languagePath = array(0 => $language);
}
if ($this->default) {
$this->languagePath[2] = $this->__l10nCatalog[$this->__l10nMap[$this->default]]['localeFallback'];
}
$this->found = true;
Configure::write('Config.language', $this->lang);
if (Configure::read('Locale.language') === null) {
Configure::write('Config.language', $this->lang);
}
Configure::write('charset', $this->charset);
if ($language) {
return $language;
}
}
/**
* Attempts to find the locale settings based on the HTTP_ACCEPT_LANGUAGE variable

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,21 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Poedit-Language: Single Form Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 0 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d ends with any # (from core translated)"

View file

@ -0,0 +1,24 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Poedit-Language: Single Form Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 0 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d ends with any # (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 0"

View file

@ -0,0 +1,24 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
"X-Poedit-Language: Four Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 10 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d ends in 1 (from core translated)"
msgstr[1] "%d ends in 2 (from core translated)"
msgstr[2] "%d ends in 03-04 (from core translated)"
msgstr[3] "%d everything else (from core translated)"

View file

@ -0,0 +1,27 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
"X-Poedit-Language: Four Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 10 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d ends in 1 (translated)"
msgstr[1] "%d ends in 2 (translated)"
msgstr[2] "%d ends in 03-04 (translated)"
msgstr[3] "%d everything else (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"

View file

@ -0,0 +1,22 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Poedit-Language: Two Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 1 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d = 1 (from core translated)"
msgstr[1] "%d = 0 or > 1 (from core translated)"

View file

@ -0,0 +1,25 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Poedit-Language: Two Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 1 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d = 1 (translated)"
msgstr[1] "%d = 0 or > 1 (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"

View file

@ -0,0 +1,22 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
"X-Poedit-Language: Two Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 2 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d = 0 or 1 (from core translated)"
msgstr[1] "%d > 1 (from core translated)"

View file

@ -0,0 +1,25 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
"X-Poedit-Language: Two Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 2 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d = 0 or 1 (translated)"
msgstr[1] "%d > 1 (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"

View file

@ -0,0 +1,23 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 3 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d ends 1 but not 11 (from core translated)"
msgstr[1] "%d everything else (from core translated)"
msgstr[2] "%d = 0 (from core translated)"

View file

@ -0,0 +1,26 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 3 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d ends 1 but not 11 (translated)"
msgstr[1] "%d everything else (translated)"
msgstr[2] "%d = 0 (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"

View file

@ -0,0 +1,23 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 4 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d = 1 (from core translated)"
msgstr[1] "%d = 2 (from core translated)"
msgstr[2] "%d everything else (from core translated)"

View file

@ -0,0 +1,26 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 4 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d = 1 (translated)"
msgstr[1] "%d = 2 (translated)"
msgstr[2] "%d everything else (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"

View file

@ -0,0 +1,23 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 5 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d = 1 (from core translated)"
msgstr[1] "%d = 0 or ends in 01-19 (from core translated)"
msgstr[2] "%d everything else (from core translated)"

View file

@ -0,0 +1,24 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 5 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d = 1 (translated)"
msgstr[1] "%d = 0 or ends in 01-19 (translated)"
msgstr[2] "%d everything else (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"

View file

@ -0,0 +1,23 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 6 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d ends in 1, not 11 (from core translated)"
msgstr[1] "%d everything else (from core translated)"
msgstr[2] "%d ends in 0 or ends in 10-20 (from core translated)"

View file

@ -0,0 +1,26 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 6 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d ends in 1, not 11 (translated)"
msgstr[1] "%d everything else (translated)"
msgstr[2] "%d ends in 0 or ends in 10-20 (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"

View file

@ -0,0 +1,23 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 7 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d ends in 1, not 11 (from core translated)"
msgstr[1] "%d ends in 2-4, not 12-14 (from core translated)"
msgstr[2] "%d everything else (from core translated)"

View file

@ -0,0 +1,26 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 7 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d ends in 1, not 11 (translated)"
msgstr[1] "%d ends in 2-4, not 12-14 (translated)"
msgstr[2] "%d everything else (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"

View file

@ -0,0 +1,23 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 8 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d is 1 (from core translated)"
msgstr[1] "%d is 2-4 (from core translated)"
msgstr[2] "%d everything else (from core translated)"

View file

@ -0,0 +1,26 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 8 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d is 1 (translated)"
msgstr[1] "%d is 2-4 (translated)"
msgstr[2] "%d everything else (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"

View file

@ -0,0 +1,23 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1 (from core)"
msgstr "Plural Rule 9 (from core translated)"
msgid "%d = 1 (from core)"
msgid_plural "%d = 0 or > 1 (from core)"
msgstr[0] "%d is 1 (from core translated)"
msgstr[1] "%d ends in 2-4, not 12-14 (from core translated)"
msgstr[2] "%d everything else (from core translated)"

View file

@ -0,0 +1,26 @@
msgid ""
msgstr ""
"Project-Id-Version: CakePHP Testsuite\n"
"POT-Creation-Date: 2008-05-15 02:51-0700\n"
"PO-Revision-Date: \n"
"Last-Translator: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"Language-Team: CakePHP I18N & I10N Team <i10n.cakephp@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Poedit-Language: Three Forms of Plurals\n"
"X-Poedit-SourceCharset: utf-8\n"
msgid "Plural Rule 1"
msgstr "Plural Rule 9 (translated)"
msgid "%d = 1"
msgid_plural "%d = 0 or > 1"
msgstr[0] "%d is 1 (translated)"
msgstr[1] "%d ends in 2-4, not 12-14 (translated)"
msgstr[2] "%d everything else (translated)"
#~ msgid "Plural-Forms 1"
#~ msgstr "Plural-Forms 1 (translated)"