Throw exceptions when '' is used as translation domain.

'' is never a good translation domain and often indicates developer
error. Treat it as a mistake and throw an exception.

Fixes #3939
This commit is contained in:
mark_story 2013-07-27 21:41:22 -04:00
parent 76aab0a635
commit 17b25388b3
2 changed files with 17 additions and 2 deletions

View file

@ -124,12 +124,14 @@ class I18n {
* *
* @param string $singular String to translate * @param string $singular String to translate
* @param string $plural Plural string (if any) * @param string $plural Plural string (if any)
* @param string $domain Domain The domain of the translation. Domains are often used by plugin translations * @param string $domain Domain The domain of the translation. Domains are often used by plugin translations.
* If null, the default domain will be used.
* @param string $category Category The integer value of the category to use. * @param string $category Category The integer value of the category to use.
* @param integer $count Count Count is used with $plural to choose the correct plural form. * @param integer $count Count Count is used with $plural to choose the correct plural form.
* @param string $language Language to translate string to. * @param string $language Language to translate string to.
* If null it checks for language in session followed by Config.language configuration variable. * If null it checks for language in session followed by Config.language configuration variable.
* @return string translated string. * @return string translated string.
* @throws CakeException When '' is provided as a domain.
*/ */
public static function translate($singular, $plural = null, $domain = null, $category = 6, $count = null, $language = null) { public static function translate($singular, $plural = null, $domain = null, $category = 6, $count = null, $language = null) {
$_this = I18n::getInstance(); $_this = I18n::getInstance();
@ -162,6 +164,9 @@ class I18n {
if (is_null($domain)) { if (is_null($domain)) {
$domain = self::$defaultDomain; $domain = self::$defaultDomain;
} }
if ($domain === '') {
throw new CakeException(__d('cake_dev', 'You cannot use "" as a domain.'));
}
$_this->domain = $domain . '_' . $_this->l10n->lang; $_this->domain = $domain . '_' . $_this->l10n->lang;

View file

@ -1854,6 +1854,16 @@ class I18nTest extends CakeTestCase {
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
} }
/**
* Test that the '' domain causes exceptions.
*
* @expectedException CakeException
* @return void
*/
public function testTranslateEmptyDomain() {
I18n::translate('Plural Rule 1', null, '');
}
/** /**
* Singular method * Singular method
* *