Merge branch '2.2'
* 2.2: [Config] #7644 add tests for passing number looking attributes as strings [HttpFoundation][BrowserKit] fixed path when converting a cookie to a string [BrowserKit] removed dead code [HttpFoundation] fixed empty domain= in Cookie::__toString() fixed detection of secure cookies received over https [2.2] Pass ESI header to subrequests [Translation] removed an uneeded class property [Translation] removed unneeded getter/setter [Translator] added additional conversion for encodings other than utf-8 fixed source messages to accept pluralized messages [Validator][translation][japanese] add messages for new validator fix a DI circular reference recognition bug [HttpFoundation] fixed the creation of sub-requests under some circumstances for IIS Conflicts: src/Symfony/Component/HttpFoundation/Tests/CookieTest.php
This commit is contained in:
commit
1552a16420
@ -266,7 +266,7 @@ abstract class Client
|
||||
|
||||
$response = $this->filterResponse($this->response);
|
||||
|
||||
$this->cookieJar->updateFromResponse($response);
|
||||
$this->cookieJar->updateFromResponse($response, $uri);
|
||||
|
||||
$this->redirect = $response->getHeader('Location');
|
||||
|
||||
|
@ -95,7 +95,7 @@ class Cookie
|
||||
$cookie .= '; domain='.$this->domain;
|
||||
}
|
||||
|
||||
if ('/' !== $this->path) {
|
||||
if ($this->path) {
|
||||
$cookie .= '; path='.$this->path;
|
||||
}
|
||||
|
||||
@ -147,10 +147,9 @@ class Cookie
|
||||
if ((false === $urlParts = parse_url($url)) || !isset($urlParts['host']) || !isset($urlParts['path'])) {
|
||||
throw new \InvalidArgumentException(sprintf('The URL "%s" is not valid.', $url));
|
||||
}
|
||||
$parts = array_merge($urlParts, $parts);
|
||||
|
||||
$values['domain'] = $parts['host'];
|
||||
$values['path'] = substr($parts['path'], 0, strrpos($parts['path'], '/'));
|
||||
$values['domain'] = $urlParts['host'];
|
||||
$values['path'] = substr($urlParts['path'], 0, strrpos($urlParts['path'], '/'));
|
||||
}
|
||||
|
||||
foreach ($parts as $part) {
|
||||
|
@ -205,6 +205,15 @@ class ClientTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array('foo' => 'bar'), $client->getCookieJar()->allValues('http://www.example.com/foo/foobar'), '->request() updates the CookieJar');
|
||||
}
|
||||
|
||||
public function testRequestSecureCookies()
|
||||
{
|
||||
$client = new TestClient();
|
||||
$client->setNextResponse(new Response('<html><a href="/foo">foo</a></html>', 200, array('Set-Cookie' => 'foo=bar; path=/; secure')));
|
||||
$client->request('GET', 'https://www.example.com/foo/foobar');
|
||||
|
||||
$this->assertTrue($client->getCookieJar()->get('foo', '/', 'www.example.com')->isSecure());
|
||||
}
|
||||
|
||||
public function testClick()
|
||||
{
|
||||
if (!class_exists('Symfony\Component\DomCrawler\Crawler')) {
|
||||
|
@ -26,14 +26,14 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
||||
public function getTestsForToFromString()
|
||||
{
|
||||
return array(
|
||||
array('foo=bar'),
|
||||
array('foo=bar; path=/'),
|
||||
array('foo=bar; path=/foo'),
|
||||
array('foo=bar; domain=google.com'),
|
||||
array('foo=bar; domain=example.com; secure', 'https://example.com/'),
|
||||
array('foo=bar; httponly'),
|
||||
array('foo=bar; domain=google.com; path=/'),
|
||||
array('foo=bar; domain=example.com; path=/; secure', 'https://example.com/'),
|
||||
array('foo=bar; path=/; httponly'),
|
||||
array('foo=bar; domain=google.com; path=/foo; secure; httponly', 'https://google.com/'),
|
||||
array('foo=bar=baz'),
|
||||
array('foo=bar%3Dbaz'),
|
||||
array('foo=bar=baz; path=/'),
|
||||
array('foo=bar%3Dbaz; path=/'),
|
||||
);
|
||||
}
|
||||
|
||||
@ -67,17 +67,17 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testFromStringWithCapitalization()
|
||||
{
|
||||
$this->assertEquals('Foo=Bar', (string) Cookie::fromString('Foo=Bar'));
|
||||
$this->assertEquals('foo=bar; expires=Fri, 31 Dec 2010 23:59:59 GMT', (string) Cookie::fromString('foo=bar; Expires=Fri, 31 Dec 2010 23:59:59 GMT'));
|
||||
$this->assertEquals('foo=bar; domain=www.example.org; httponly', (string) Cookie::fromString('foo=bar; DOMAIN=www.example.org; HttpOnly'));
|
||||
$this->assertEquals('Foo=Bar; path=/', (string) Cookie::fromString('Foo=Bar'));
|
||||
$this->assertEquals('foo=bar; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/', (string) Cookie::fromString('foo=bar; Expires=Fri, 31 Dec 2010 23:59:59 GMT'));
|
||||
$this->assertEquals('foo=bar; domain=www.example.org; path=/; httponly', (string) Cookie::fromString('foo=bar; DOMAIN=www.example.org; HttpOnly'));
|
||||
}
|
||||
|
||||
public function testFromStringWithUrl()
|
||||
{
|
||||
$this->assertEquals('foo=bar; domain=www.example.com', (string) Cookie::FromString('foo=bar', 'http://www.example.com/'));
|
||||
$this->assertEquals('foo=bar; domain=www.example.com; path=/', (string) Cookie::FromString('foo=bar', 'http://www.example.com/'));
|
||||
$this->assertEquals('foo=bar; domain=www.example.com; path=/foo', (string) Cookie::FromString('foo=bar', 'http://www.example.com/foo/bar'));
|
||||
$this->assertEquals('foo=bar; domain=www.example.com', (string) Cookie::FromString('foo=bar; path=/', 'http://www.example.com/foo/bar'));
|
||||
$this->assertEquals('foo=bar; domain=www.myotherexample.com', (string) Cookie::FromString('foo=bar; domain=www.myotherexample.com', 'http://www.example.com/'));
|
||||
$this->assertEquals('foo=bar; domain=www.example.com; path=/', (string) Cookie::FromString('foo=bar; path=/', 'http://www.example.com/foo/bar'));
|
||||
$this->assertEquals('foo=bar; domain=www.myotherexample.com; path=/', (string) Cookie::FromString('foo=bar; domain=www.myotherexample.com', 'http://www.example.com/'));
|
||||
}
|
||||
|
||||
public function testFromStringThrowsAnExceptionIfCookieIsNotValid()
|
||||
|
@ -117,7 +117,15 @@ class XmlUtilsTest extends \PHPUnit_Framework_TestCase
|
||||
array(100.0, '1e2'),
|
||||
array(-120.0, '-1.2E2'),
|
||||
array(-10100.1, '-10100.1'),
|
||||
array(-10100.1, '-10,100.1'),
|
||||
array('-10,100.1', '-10,100.1'),
|
||||
array('1234 5678 9101 1121 3141', '1234 5678 9101 1121 3141'),
|
||||
array('1,2,3,4', '1,2,3,4'),
|
||||
array('11,22,33,44', '11,22,33,44'),
|
||||
array('11,222,333,4', '11,222,333,4'),
|
||||
array('1,222,333,444', '1,222,333,444'),
|
||||
array('11,222,333,444', '11,222,333,444'),
|
||||
array('111,222,333,444', '111,222,333,444'),
|
||||
array('1111,2222,3333,4444,5555', '1111,2222,3333,4444,5555'),
|
||||
array('foo', 'foo'),
|
||||
);
|
||||
}
|
||||
|
@ -193,8 +193,8 @@ class XmlUtils
|
||||
return false;
|
||||
case is_numeric($value):
|
||||
return '0x' == $value[0].$value[1] ? hexdec($value) : floatval($value);
|
||||
case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $value):
|
||||
return floatval(str_replace(',', '', $value));
|
||||
case preg_match('/^(-|\+)?[0-9]+(\.[0-9]+)?$/', $value):
|
||||
return floatval($value);
|
||||
default:
|
||||
return $value;
|
||||
}
|
||||
|
@ -56,11 +56,13 @@ class CheckCircularReferencesPass implements CompilerPassInterface
|
||||
private function checkOutEdges(array $edges)
|
||||
{
|
||||
foreach ($edges as $edge) {
|
||||
$node = $edge->getDestNode();
|
||||
$this->currentPath[] = $id = $node->getId();
|
||||
$node = $edge->getDestNode();
|
||||
$id = $node->getId();
|
||||
$searchKey = array_search($id, $this->currentPath);
|
||||
$this->currentPath[] = $id;
|
||||
|
||||
if ($this->currentId === $id) {
|
||||
throw new ServiceCircularReferenceException($this->currentId, $this->currentPath);
|
||||
if (false !== $searchKey) {
|
||||
throw new ServiceCircularReferenceException($id, array_slice($this->currentPath, $searchKey));
|
||||
}
|
||||
|
||||
$this->checkOutEdges($node->getOutEdges());
|
||||
|
@ -24,7 +24,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
class CheckCircularReferencesPassTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
|
||||
*/
|
||||
public function testProcess()
|
||||
{
|
||||
@ -36,7 +36,7 @@ class CheckCircularReferencesPassTest extends \PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
|
||||
*/
|
||||
public function testProcessWithAliases()
|
||||
{
|
||||
@ -49,7 +49,7 @@ class CheckCircularReferencesPassTest extends \PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
|
||||
*/
|
||||
public function testProcessDetectsIndirectCircularReference()
|
||||
{
|
||||
@ -61,6 +61,19 @@ class CheckCircularReferencesPassTest extends \PHPUnit_Framework_TestCase
|
||||
$this->process($container);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
|
||||
*/
|
||||
public function testDeepCircularReference()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$container->register('a')->addArgument(new Reference('b'));
|
||||
$container->register('b')->addArgument(new Reference('c'));
|
||||
$container->register('c')->addArgument(new Reference('b'));
|
||||
|
||||
$this->process($container);
|
||||
}
|
||||
|
||||
public function testProcessIgnoresMethodCalls()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
|
@ -16,7 +16,7 @@
|
||||
<parameter>on</parameter>
|
||||
<parameter>off</parameter>
|
||||
<parameter key="float">1.3</parameter>
|
||||
<parameter>1,000.3</parameter>
|
||||
<parameter>1000.3</parameter>
|
||||
<parameter>a string</parameter>
|
||||
<parameter type="collection">
|
||||
<parameter>foo</parameter>
|
||||
|
@ -93,11 +93,11 @@ class Cookie
|
||||
}
|
||||
}
|
||||
|
||||
if ('/' !== $this->path) {
|
||||
if ($this->path) {
|
||||
$str .= '; path='.$this->path;
|
||||
}
|
||||
|
||||
if (null !== $this->getDomain()) {
|
||||
if ($this->getDomain()) {
|
||||
$str .= '; domain='.$this->getDomain();
|
||||
}
|
||||
|
||||
|
@ -1464,11 +1464,14 @@ class Request
|
||||
{
|
||||
$requestUri = '';
|
||||
|
||||
if ($this->headers->has('X_ORIGINAL_URL') && false !== stripos(PHP_OS, 'WIN')) {
|
||||
if ($this->headers->has('X_ORIGINAL_URL')) {
|
||||
// IIS with Microsoft Rewrite Module
|
||||
$requestUri = $this->headers->get('X_ORIGINAL_URL');
|
||||
$this->headers->remove('X_ORIGINAL_URL');
|
||||
} elseif ($this->headers->has('X_REWRITE_URL') && false !== stripos(PHP_OS, 'WIN')) {
|
||||
$this->server->remove('HTTP_X_ORIGINAL_URL');
|
||||
$this->server->remove('UNENCODED_URL');
|
||||
$this->server->remove('IIS_WasUrlRewritten');
|
||||
} elseif ($this->headers->has('X_REWRITE_URL')) {
|
||||
// IIS with ISAPI_Rewrite
|
||||
$requestUri = $this->headers->get('X_REWRITE_URL');
|
||||
$this->headers->remove('X_REWRITE_URL');
|
||||
|
@ -134,11 +134,12 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
||||
public function testToString()
|
||||
{
|
||||
$cookie = new Cookie('foo', 'bar', strtotime('Fri, 20-May-2011 15:25:52 GMT'), '/', '.myfoodomain.com', true);
|
||||
|
||||
$this->assertEquals('foo=bar; expires=Fri, 20-May-2011 15:25:52 GMT; domain=.myfoodomain.com; secure; httponly', $cookie->__toString(), '->__toString() returns string representation of the cookie');
|
||||
$this->assertEquals('foo=bar; expires=Fri, 20-May-2011 15:25:52 GMT; path=/; domain=.myfoodomain.com; secure; httponly', $cookie->__toString(), '->__toString() returns string representation of the cookie');
|
||||
|
||||
$cookie = new Cookie('foo', null, 1, '/admin/', '.myfoodomain.com');
|
||||
|
||||
$this->assertEquals('foo=deleted; expires='.gmdate("D, d-M-Y H:i:s T", time()-31536001).'; path=/admin/; domain=.myfoodomain.com; httponly', $cookie->__toString(), '->__toString() returns string representation of a cleared cookie if value is NULL');
|
||||
|
||||
$cookie = new Cookie('foo', 'bar', 0, '/', '');
|
||||
$this->assertEquals('foo=bar; path=/; httponly', $cookie->__toString());
|
||||
}
|
||||
}
|
||||
|
@ -1373,6 +1373,95 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
||||
// reset
|
||||
Request::setTrustedProxies(array());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider iisRequestUriProvider
|
||||
*/
|
||||
public function testIISRequestUri($headers, $server, $expectedRequestUri)
|
||||
{
|
||||
$request = new Request();
|
||||
$request->headers->replace($headers);
|
||||
$request->server->replace($server);
|
||||
|
||||
$this->assertEquals($expectedRequestUri, $request->getRequestUri(), '->getRequestUri() is correct');
|
||||
|
||||
$subRequestUri = '/bar/foo';
|
||||
$subRequest = $request::create($subRequestUri, 'get', array(), array(), array(), $request->server->all());
|
||||
$this->assertEquals($subRequestUri, $subRequest->getRequestUri(), '->getRequestUri() is correct in sub request');
|
||||
}
|
||||
|
||||
public function iisRequestUriProvider()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array(
|
||||
'X_ORIGINAL_URL' => '/foo/bar',
|
||||
),
|
||||
array(),
|
||||
'/foo/bar'
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'X_REWRITE_URL' => '/foo/bar',
|
||||
),
|
||||
array(),
|
||||
'/foo/bar'
|
||||
),
|
||||
array(
|
||||
array(),
|
||||
array(
|
||||
'IIS_WasUrlRewritten' => '1',
|
||||
'UNENCODED_URL' => '/foo/bar'
|
||||
),
|
||||
'/foo/bar'
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'X_ORIGINAL_URL' => '/foo/bar',
|
||||
),
|
||||
array(
|
||||
'HTTP_X_ORIGINAL_URL' => '/foo/bar'
|
||||
),
|
||||
'/foo/bar'
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'X_ORIGINAL_URL' => '/foo/bar',
|
||||
),
|
||||
array(
|
||||
'IIS_WasUrlRewritten' => '1',
|
||||
'UNENCODED_URL' => '/foo/bar'
|
||||
),
|
||||
'/foo/bar'
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'X_ORIGINAL_URL' => '/foo/bar',
|
||||
),
|
||||
array(
|
||||
'HTTP_X_ORIGINAL_URL' => '/foo/bar',
|
||||
'IIS_WasUrlRewritten' => '1',
|
||||
'UNENCODED_URL' => '/foo/bar'
|
||||
),
|
||||
'/foo/bar'
|
||||
),
|
||||
array(
|
||||
array(),
|
||||
array(
|
||||
'ORIG_PATH_INFO' => '/foo/bar',
|
||||
),
|
||||
'/foo/bar'
|
||||
),
|
||||
array(
|
||||
array(),
|
||||
array(
|
||||
'ORIG_PATH_INFO' => '/foo/bar',
|
||||
'QUERY_STRING' => 'foo=bar',
|
||||
),
|
||||
'/foo/bar?foo=bar'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RequestContentProxy extends Request
|
||||
|
@ -114,11 +114,11 @@ class ResponseHeaderBagTest extends \PHPUnit_Framework_TestCase
|
||||
$bag = new ResponseHeaderBag(array());
|
||||
$bag->setCookie(new Cookie('foo', 'bar'));
|
||||
|
||||
$this->assertContains("Set-Cookie: foo=bar; httponly", explode("\r\n", $bag->__toString()));
|
||||
$this->assertContains("Set-Cookie: foo=bar; path=/; httponly", explode("\r\n", $bag->__toString()));
|
||||
|
||||
$bag->clearCookie('foo');
|
||||
|
||||
$this->assertContains("Set-Cookie: foo=deleted; expires=".gmdate("D, d-M-Y H:i:s T", time() - 31536001)."; httponly", explode("\r\n", $bag->__toString()));
|
||||
$this->assertContains("Set-Cookie: foo=deleted; expires=".gmdate("D, d-M-Y H:i:s T", time() - 31536001)."; path=/; httponly", explode("\r\n", $bag->__toString()));
|
||||
}
|
||||
|
||||
public function testReplace()
|
||||
@ -158,7 +158,7 @@ class ResponseHeaderBagTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertContains("Set-Cookie: foo=bar; path=/path/foo; domain=foo.bar; httponly", $headers);
|
||||
$this->assertContains("Set-Cookie: foo=bar; path=/path/foo; domain=foo.bar; httponly", $headers);
|
||||
$this->assertContains("Set-Cookie: foo=bar; path=/path/bar; domain=bar.foo; httponly", $headers);
|
||||
$this->assertContains("Set-Cookie: foo=bar; httponly", $headers);
|
||||
$this->assertContains("Set-Cookie: foo=bar; path=/; httponly", $headers);
|
||||
|
||||
$cookies = $bag->getCookies(ResponseHeaderBag::COOKIES_ARRAY);
|
||||
$this->assertTrue(isset($cookies['foo.bar']['/path/foo']['foo']));
|
||||
|
@ -90,6 +90,9 @@ class InlineFragmentRenderer extends RoutableFragmentRenderer
|
||||
$server['REMOTE_ADDR'] = '127.0.0.1';
|
||||
|
||||
$subRequest = $request::create($uri, 'get', array(), $cookies, array(), $server);
|
||||
if ($request->headers->has('Surrogate-Capability')) {
|
||||
$subRequest->headers->set('Surrogate-Capability', $request->headers->get('Surrogate-Capability'));
|
||||
}
|
||||
if ($session = $request->getSession()) {
|
||||
$subRequest->setSession($session);
|
||||
}
|
||||
|
@ -137,4 +137,23 @@ class InlineFragmentRendererTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
$this->assertEquals('Foo', ob_get_clean());
|
||||
}
|
||||
|
||||
public function testESIHeaderIsKeptInSubrequest()
|
||||
{
|
||||
$expectedSubRequest = Request::create('/');
|
||||
$expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
|
||||
|
||||
$kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
|
||||
$kernel
|
||||
->expects($this->any())
|
||||
->method('handle')
|
||||
->with($expectedSubRequest)
|
||||
;
|
||||
|
||||
$strategy = new InlineFragmentRenderer($kernel);
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
|
||||
$strategy->render('/', $request);
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ class XliffFileLoader implements LoaderInterface
|
||||
throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
|
||||
}
|
||||
|
||||
$xml = $this->parseFile($resource);
|
||||
list($xml, $encoding) = $this->parseFile($resource);
|
||||
$xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:1.2');
|
||||
|
||||
$catalogue = new MessageCatalogue($locale);
|
||||
@ -52,7 +52,21 @@ class XliffFileLoader implements LoaderInterface
|
||||
}
|
||||
|
||||
$source = isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source;
|
||||
$catalogue->set((string) $source, (string) $translation->target, $domain);
|
||||
$target = (string) $translation->target;
|
||||
|
||||
// If the xlf file has another encoding specified, try to convert it because
|
||||
// simple_xml will always return utf-8 encoded values
|
||||
if ('UTF-8' !== $encoding && !empty($encoding)) {
|
||||
if (function_exists('mb_convert_encoding')) {
|
||||
$target = mb_convert_encoding($target, $encoding, 'UTF-8');
|
||||
} elseif (function_exists('iconv')) {
|
||||
$target = iconv('UTF-8', $encoding, $target);
|
||||
} else {
|
||||
throw new \RuntimeException('No suitable convert encoding function (use UTF-8 as your encoding or install the iconv or mbstring extension).');
|
||||
}
|
||||
}
|
||||
|
||||
$catalogue->set((string) $source, $target, $domain);
|
||||
}
|
||||
$catalogue->addResource(new FileResource($resource));
|
||||
|
||||
@ -117,7 +131,7 @@ class XliffFileLoader implements LoaderInterface
|
||||
|
||||
libxml_use_internal_errors($internalErrors);
|
||||
|
||||
return simplexml_import_dom($dom);
|
||||
return array(simplexml_import_dom($dom), strtoupper($dom->encoding));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -50,6 +50,19 @@ class XliffFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertFalse($catalogue->has('extra', 'domain1'));
|
||||
}
|
||||
|
||||
public function testEncoding()
|
||||
{
|
||||
if (!function_exists('iconv') && !function_exists('mb_convert_encoding')) {
|
||||
$this->markTestSkipped('The iconv and mbstring extensions are not available.');
|
||||
}
|
||||
|
||||
$loader = $this->createLoader();
|
||||
$catalogue = $loader->load(__DIR__.'/../fixtures/encoding.xlf', 'en', 'domain1');
|
||||
|
||||
$this->assertEquals(utf8_decode('föö'), $catalogue->get('bar', 'domain1'));
|
||||
$this->assertEquals(utf8_decode('bär'), $catalogue->get('foo', 'domain1'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
|
||||
*/
|
||||
|
15
src/Symfony/Component/Translation/Tests/fixtures/encoding.xlf
vendored
Normal file
15
src/Symfony/Component/Translation/Tests/fixtures/encoding.xlf
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="file.ext">
|
||||
<body>
|
||||
<trans-unit id="1" resname="foo">
|
||||
<source>foo</source>
|
||||
<target>bär</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2" resname="bar">
|
||||
<source>bar</source>
|
||||
<target>föö</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
@ -179,7 +179,7 @@
|
||||
<target>ユーザーの現在のパスワードでなければなりません。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="48">
|
||||
<source>This value should have exactly {{ limit }} characters.</source>
|
||||
<source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
|
||||
<target>ちょうど{{ limit }}文字でなければなりません。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="49">
|
||||
@ -203,17 +203,25 @@
|
||||
<target>PHP拡張によってアップロードに失敗しました。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="54">
|
||||
<source>This collection should contain {{ limit }} elements or more.</source>
|
||||
<source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
|
||||
<target>{{ limit }}個以上の要素を含んでなければいけません。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="55">
|
||||
<source>This collection should contain {{ limit }} elements or less.</source>
|
||||
<source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
|
||||
<target>要素は{{ limit }}個までです。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="56">
|
||||
<source>This collection should contain exactly {{ limit }} elements.</source>
|
||||
<source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
|
||||
<target>要素はちょうど{{ limit }}個でなければなりません。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="57">
|
||||
<source>Invalid card number.</source>
|
||||
<target>無効なカード番号です。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="58">
|
||||
<source>Unsupported card type or invalid card number.</source>
|
||||
<target>未対応のカード種類又は無効なカード番号です。</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
Reference in New Issue
Block a user