Skip to content
This repository has been archived by the owner on Jan 31, 2020. It is now read-only.

Commit

Permalink
Merge pull request zendframework/zendframework#1725 from weierophinne…
Browse files Browse the repository at this point in the history
…y/feature/file-i18n

[zen-66] Update File\Transfer to new Translator
  • Loading branch information
DASPRiD committed Jul 3, 2012
2 parents ad831bf + 22716b3 commit ebe63d3
Show file tree
Hide file tree
Showing 7 changed files with 108 additions and 86 deletions.
60 changes: 28 additions & 32 deletions src/AbstractValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
namespace Zend\Validator;

use Traversable;
use Zend\I18n\Translator\Translator;
use Zend\Registry;
use Zend\Stdlib\ArrayUtils;
use Zend\Translator;
use Zend\Validator\Exception\InvalidArgumentException;

/**
Expand All @@ -43,7 +43,7 @@ abstract class AbstractValidator implements ValidatorInterface

/**
* Default translation object for all validate objects
* @var \Zend\Translator\Adapter\AbstractAdapter
* @var Translator
*/
protected static $defaultTranslator;

Expand All @@ -58,7 +58,7 @@ abstract class AbstractValidator implements ValidatorInterface
'messages' => array(), // Array of validation failure messages
'messageTemplates' => array(), // Array of validation failure message templates
'messageVariables' => array(), // Array of additional variables available for validation failure messages
'translator' => null, // Translation object to used -> \Zend\Translator\Translator
'translator' => null, // Translation object to used -> Zend\I18n\Translator\Translator
'translatorDisabled' => false, // Is translation disabled?
'valueObscured' => false, // Flag indicating whether or not value should be obfuscated in error messages
);
Expand Down Expand Up @@ -298,13 +298,7 @@ protected function createMessage($messageKey, $value)

$message = $this->abstractOptions['messageTemplates'][$messageKey];

if (null !== ($translator = $this->getTranslator())) {
if ($translator->isTranslated($messageKey)) {
$message = $translator->translate($messageKey);
} else {
$message = $translator->translate($message);
}
}
$message = $this->translateMessage($messageKey, $message);

if (is_object($value) &&
!in_array('__toString', get_class_methods($value))
Expand Down Expand Up @@ -408,27 +402,20 @@ public function isValueObscured()
/**
* Set translation object
*
* @param \Zend\Translator\Translator|\Zend\Translator\Adapter\AbstractAdapter|null $translator
* @param Translator|null $translator
* @return AbstractValidator
* @throws Exception\InvalidArgumentException
*/
public function setTranslator($translator = null)
public function setTranslator(Translator $translator = null)
{
if ((null === $translator) || ($translator instanceof Translator\Adapter\AbstractAdapter)) {
$this->abstractOptions['translator'] = $translator;
} elseif ($translator instanceof Translator\Translator) {
$this->abstractOptions['translator'] = $translator->getAdapter();
} else {
throw new InvalidArgumentException('Invalid translator specified');
}

$this->abstractOptions['translator'] = $translator;
return $this;
}

/**
* Return translation object
*
* @return \Zend\Translator\Adapter\AbstractAdapter|null
* @return Translator|null
*/
public function getTranslator()
{
Expand Down Expand Up @@ -456,25 +443,19 @@ public function hasTranslator()
/**
* Set default translation object for all validate objects
*
* @param \Zend\Translator\Translator|\Zend\Translator\Adapter\AbstractAdapter|null $translator
* @param Translator|null $translator
* @return void
* @throws Exception\InvalidArgumentException
*/
public static function setDefaultTranslator($translator = null)
public static function setDefaultTranslator(Translator $translator = null)
{
if ((null === $translator) || ($translator instanceof Translator\Adapter\AbstractAdapter)) {
self::$defaultTranslator = $translator;
} elseif ($translator instanceof Translator\Translator) {
self::$defaultTranslator = $translator->getAdapter();
} else {
throw new InvalidArgumentException('Invalid translator specified');
}
self::$defaultTranslator = $translator;
}

/**
* Get default translation object for all validate objects
*
* @return \Zend\Translator\Adapter\AbstractAdapter|null
* @return Translator|null
*/
public static function getDefaultTranslator()
{
Expand All @@ -488,7 +469,7 @@ public static function getDefaultTranslator()
*/
public static function hasDefaultTranslator()
{
return (bool)self::$defaultTranslator;
return (bool) self::$defaultTranslator;
}

/**
Expand Down Expand Up @@ -532,4 +513,19 @@ public static function setMessageLength($length = -1)
{
self::$messageLength = $length;
}

protected function translateMessage($messageKey, $message)
{
$translator = $this->getTranslator();
if (!$translator) {
return $message;
}

$translated = $translator->translate($messageKey);
if ($translated !== $messageKey) {
return $translated;
}

return $translator->translate($message);
}
}
51 changes: 27 additions & 24 deletions test/AbstractTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

namespace ZendTest\Validator;

use Zend\Translator;
use Zend\I18n\Translator\Translator;
use Zend\Validator\AbstractValidator;

/**
Expand Down Expand Up @@ -58,10 +58,10 @@ public function testCanSetTranslator()
{
$this->testTranslatorNullByDefault();
set_error_handler(array($this, 'errorHandlerIgnore'));
$translator = new Translator\Translator('ArrayAdapter', array(), 'en');
$translator = new Translator();
restore_error_handler();
$this->validator->setTranslator($translator);
$this->assertSame($translator->getAdapter(), $this->validator->getTranslator());
$this->assertSame($translator, $this->validator->getTranslator());
}

public function testCanSetTranslatorToNull()
Expand All @@ -78,35 +78,39 @@ public function testGlobalDefaultTranslatorNullByDefault()
$this->assertNull(AbstractValidator::getDefaultTranslator());
}



public function testErrorMessagesAreTranslatedWhenTranslatorPresent()
{
$translator = new Translator\Translator(
'ArrayAdapter',
array('fooMessage' => 'This is the translated message for %value%'),
'en'
$loader = new TestAsset\ArrayTranslator();
$loader->translations = array(
'fooMessage' => 'This is the translated message for %value%',
);
$translator = new Translator();
$translator->getPluginManager()->setService('default', $loader);
$translator->addTranslationFile('default', null);

$this->validator->setTranslator($translator);
$this->assertFalse($this->validator->isValid('bar'));
$messages = $this->validator->getMessages();
$this->assertTrue(array_key_exists('fooMessage', $messages));
$this->assertContains('bar', $messages['fooMessage']);
$this->assertContains('bar', $messages['fooMessage'], var_export($messages, 1));
$this->assertContains('This is the translated message for ', $messages['fooMessage']);
}

public function testCanTranslateMessagesInsteadOfKeys()
{
$translator = new Translator\Translator(
'ArrayAdapter',
array('%value% was passed' => 'This is the translated message for %value%'),
'en'
$loader = new TestAsset\ArrayTranslator();
$loader->translations = array(
'%value% was passed' => 'This is the translated message for %value%',
);
$translator = new Translator();
$translator->getPluginManager()->setService('default', $loader);
$translator->addTranslationFile('default', null);

$this->validator->setTranslator($translator);
$this->assertFalse($this->validator->isValid('bar'));
$messages = $this->validator->getMessages();
$this->assertTrue(array_key_exists('fooMessage', $messages));
$this->assertContains('bar', $messages['fooMessage']);
$this->assertContains('bar', $messages['fooMessage'], var_export($messages, 1));
$this->assertContains('This is the translated message for ', $messages['fooMessage']);
}

Expand Down Expand Up @@ -148,21 +152,20 @@ public function testDoesNotFailOnObjectInput()
public function testTranslatorEnabledPerDefault()
{
set_error_handler(array($this, 'errorHandlerIgnore'));
$translator = new Translator\Translator('ArrayAdapter', array(), 'en');
restore_error_handler();
$translator = new Translator();
$this->validator->setTranslator($translator);
$this->assertFalse($this->validator->isTranslatorDisabled());
}

public function testCanDisableTranslator()
{
set_error_handler(array($this, 'errorHandlerIgnore'));
$translator = new Translator\Translator(
'ArrayAdapter',
array('fooMessage' => 'This is the translated message for %value%'),
'en'
$loader = new TestAsset\ArrayTranslator();
$loader->translations = array(
'%value% was passed' => 'This is the translated message for %value%',
);
restore_error_handler();
$translator = new Translator();
$translator->getPluginManager()->setService('default', $loader);
$translator->addTranslationFile('default', null);
$this->validator->setTranslator($translator);

$this->assertFalse($this->validator->isValid('bar'));
Expand Down Expand Up @@ -214,4 +217,4 @@ public function errorHandlerIgnore($errno, $errstr, $errfile, $errline, array $e
{
$this->errorOccurred = true;
}
}
}
22 changes: 14 additions & 8 deletions test/EmailAddressTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

namespace ZendTest\Validator;

use Zend\I18n\Translator\Translator;
use Zend\Validator\EmailAddress;
use Zend\Validator\Hostname;

Expand Down Expand Up @@ -365,16 +366,21 @@ public function testHostnameValidatorMessagesShouldBeTranslated()
{
$hostnameValidator = new Hostname();
$translations = array(
'hostnameIpAddressNotAllowed' => 'hostnameIpAddressNotAllowed translation',
'hostnameUnknownTld' => 'hostnameUnknownTld translation',
'hostnameDashCharacter' => 'hostnameDashCharacter translation',
'hostnameIpAddressNotAllowed' => 'hostnameIpAddressNotAllowed translation',
'hostnameUnknownTld' => 'hostnameUnknownTld translation',
'hostnameDashCharacter' => 'hostnameDashCharacter translation',
'hostnameInvalidHostnameSchema' => 'hostnameInvalidHostnameSchema translation',
'hostnameUndecipherableTld' => 'hostnameUndecipherableTld translation',
'hostnameInvalidHostname' => 'hostnameInvalidHostname translation',
'hostnameInvalidLocalName' => 'hostnameInvalidLocalName translation',
'hostnameLocalNameNotAllowed' => 'hostnameLocalNameNotAllowed translation',
'hostnameUndecipherableTld' => 'hostnameUndecipherableTld translation',
'hostnameInvalidHostname' => 'hostnameInvalidHostname translation',
'hostnameInvalidLocalName' => 'hostnameInvalidLocalName translation',
'hostnameLocalNameNotAllowed' => 'hostnameLocalNameNotAllowed translation',
);
$translator = new \Zend\Translator\Translator('ArrayAdapter', $translations);
$loader = new TestAsset\ArrayTranslator();
$loader->translations = $translations;
$translator = new Translator();
$translator->getPluginManager()->setService('test', $loader);
$translator->addTranslationFile('test', null);

$this->validator->setTranslator($translator)->setHostnameValidator($hostnameValidator);

$this->validator->isValid('[email protected],512.777');
Expand Down
7 changes: 6 additions & 1 deletion test/HostnameTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

namespace ZendTest\Validator;

use Zend\I18n\Translator\Translator;
use Zend\Validator\Hostname;

/**
Expand Down Expand Up @@ -276,7 +277,11 @@ public function testValidatorMessagesShouldBeTranslated()
$translations = array(
'hostnameInvalidLocalName' => 'this is the IP error message',
);
$translator = new \Zend\Translator\Translator('ArrayAdapter', $translations);
$loader = new TestAsset\ArrayTranslator();
$loader->translations = $translations;
$translator = new Translator();
$translator->getPluginManager()->setService('default', $loader);
$translator->addTranslationFile('default', null);
$this->validator->setTranslator($translator);

$this->validator->isValid('0.239,512.777');
Expand Down
29 changes: 13 additions & 16 deletions test/StaticValidatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@

namespace ZendTest\Validator;

use Zend\I18n\Translator;
use Zend\Validator\AbstractValidator;
use Zend\I18n\Validator\Alpha;
use Zend\Validator\Between;
use Zend\Validator\StaticValidator;
use Zend\Validator\ValidatorPluginManager;
use Zend\Translator;

/**
* @category Zend
Expand Down Expand Up @@ -83,11 +83,9 @@ public function errorHandlerIgnore($errno, $errstr, $errfile, $errline, array $e

public function testCanSetGlobalDefaultTranslator()
{
set_error_handler(array($this, 'errorHandlerIgnore'));
$translator = new Translator\Translator('ArrayAdapter', array(), 'en');
restore_error_handler();
$translator = new Translator\Translator();
AbstractValidator::setDefaultTranslator($translator);
$this->assertSame($translator->getAdapter(), AbstractValidator::getDefaultTranslator());
$this->assertSame($translator, AbstractValidator::getDefaultTranslator());
}

public function testGlobalDefaultTranslatorUsedWhenNoLocalTranslatorSet()
Expand All @@ -99,9 +97,7 @@ public function testGlobalDefaultTranslatorUsedWhenNoLocalTranslatorSet()
public function testLocalTranslatorPreferredOverGlobalTranslator()
{
$this->testCanSetGlobalDefaultTranslator();
set_error_handler(array($this, 'errorHandlerIgnore'));
$translator = new Translator\Translator('ArrayAdapter', array(), 'en');
restore_error_handler();
$translator = new Translator\Translator();
$this->validator->setTranslator($translator);
$this->assertNotSame(AbstractValidator::getDefaultTranslator(), $this->validator->getTranslator());
}
Expand All @@ -112,11 +108,14 @@ public function testMaximumErrorMessageLength()
AbstractValidator::setMessageLength(10);
$this->assertEquals(10, AbstractValidator::getMessageLength());

$translator = new Translator\Translator(
'ArrayAdapter',
array(Alpha::INVALID => 'This is the translated message for %value%'),
'en'
$loader = new TestAsset\ArrayTranslator();
$loader->translations = array(
Alpha::INVALID => 'This is the translated message for %value%',
);
$translator = new Translator\Translator();
$translator->getPluginManager()->setService('default', $loader);
$translator->addTranslationFile('default', null);

$this->validator->setTranslator($translator);
$this->assertFalse($this->validator->isValid(123));
$messages = $this->validator->getMessages();
Expand All @@ -137,11 +136,9 @@ public function testSetGetMessageLengthLimitation()

public function testSetGetDefaultTranslator()
{
set_error_handler(array($this, 'errorHandlerIgnore'));
$translator = new Translator\Translator('ArrayAdapter', array(), 'en');
restore_error_handler();
$translator = new Translator\Translator();
AbstractValidator::setDefaultTranslator($translator);
$this->assertSame($translator->getAdapter(), AbstractValidator::getDefaultTranslator());
$this->assertSame($translator, AbstractValidator::getDefaultTranslator());
}

/* plugin loading */
Expand Down
16 changes: 16 additions & 0 deletions test/TestAsset/ArrayTranslator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

namespace ZendTest\Validator\TestAsset;

use Zend\I18n\Translator;

class ArrayTranslator implements Translator\Loader\LoaderInterface
{
public $translations;

public function load($filename, $locale)
{
$textDomain = new Translator\TextDomain($this->translations);
return $textDomain;
}
}
Loading

0 comments on commit ebe63d3

Please sign in to comment.