Merge branch '3.0'
* 3.0: (28 commits) [Console] Fix an autocompletion question helper issue with non-sequentially indexed choices [Process] Fix pipes handling [Finder] Partially revert #17134 to fix a regression Mentioned the deprecation of deep parameters in UPGRADE files [HttpKernel] Fix mem usage when stripping the prod container [Filesystem] Fix false positive in ->remove() [Filesystem] Cleanup/sync with 2.3 [Validator] Fix the locale validator so it treats a locale alias as a valid locale [HttpFoundation] Fix transient test [HttpFoundation] Add a dependency on the mbstring polyfill [2.7] update readme files for new components add readme files where missing [2.8] update readme files for new components fix lowest TwigBridge deps versions reference form type by name on Symfony 2.7 [EventDispatcher] fix syntax error Don't use reflections when possible Don't use reflections when possible [Form] Update form tests after the ICU data update [Intl] Update tests and the number formatter to match behaviour of the intl extension ... Conflicts: src/Symfony/Component/Ldap/README.md src/Symfony/Component/Security/Core/README.md src/Symfony/Component/Security/Csrf/README.md src/Symfony/Component/Security/Http/README.md
This commit is contained in:
commit
fe012e8abb
@ -781,7 +781,7 @@ UPGRADE FROM 2.x to 3.0
|
||||
The `security.csrf.token_manager` should be used instead.
|
||||
|
||||
* The `validator.mapping.cache.apc` service has been removed in favor of the `validator.mapping.cache.doctrine.apc` one.
|
||||
|
||||
|
||||
* The ability to pass `apc` as the `framework.validation.cache` configuration key value has been removed.
|
||||
Use `validator.mapping.cache.doctrine.apc` instead:
|
||||
|
||||
@ -1061,7 +1061,7 @@ UPGRADE FROM 2.x to 3.0
|
||||
|
||||
```php
|
||||
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
|
||||
|
||||
|
||||
class MyVoter extends Voter
|
||||
{
|
||||
protected function supports($attribute, $object)
|
||||
@ -1772,4 +1772,19 @@ UPGRADE FROM 2.x to 3.0
|
||||
|
||||
### HttpFoundation
|
||||
|
||||
* `Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface` no longer implements the `IteratorAggregate` interface. Use the `all()` method instead of iterating over the flash bag.
|
||||
* `Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface` no longer implements the `IteratorAggregate` interface. Use the `all()` method instead of iterating over the flash bag.
|
||||
|
||||
* Removed the feature that allowed finding deep items in `ParameterBag::get()`.
|
||||
This may affect you when getting parameters from the `Request` class:
|
||||
|
||||
Before:
|
||||
|
||||
```php
|
||||
$request->query->get('foo[bar]', null, true);
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```php
|
||||
$request->query->get('foo')[bar];
|
||||
```
|
||||
|
@ -3,58 +3,11 @@ PHPUnit Bridge
|
||||
|
||||
Provides utilities for PHPUnit, especially user deprecation notices management.
|
||||
|
||||
It comes with the following features:
|
||||
Resources
|
||||
---------
|
||||
|
||||
* enforce a consistent `C` locale;
|
||||
* auto-register `class_exists` to load Doctrine annotations;
|
||||
* print a user deprecation notices summary at the end of the test suite;
|
||||
* display the stack trace of a deprecation on-demand.
|
||||
|
||||
By default any non-legacy-tagged or any non-@-silenced deprecation notices will
|
||||
make tests fail. This can be changed by setting the `SYMFONY_DEPRECATIONS_HELPER`
|
||||
environment variable to the maximum number of deprecations that are allowed to be
|
||||
triggered before making the test suite fail. Alternatively, setting it to `weak`
|
||||
will make the bridge ignore any deprecation notices and is useful to projects
|
||||
that must use deprecated interfaces for backward compatibility reasons.
|
||||
|
||||
A summary of deprecation notices is displayed at the end of the test suite:
|
||||
|
||||
* **Unsilenced** reports deprecation notices that were triggered without the
|
||||
recommended @-silencing operator;
|
||||
* **Legacy** deprecation notices denote tests that explicitly test some legacy
|
||||
interfaces. There are four ways to mark a test as legacy:
|
||||
- make its class start with the `Legacy` prefix;
|
||||
- make its method start with `testLegacy`;
|
||||
- make its data provider start with `provideLegacy` or `getLegacy`;
|
||||
- add the `@group legacy` annotation to its class or method.
|
||||
* **Remaining/Other** deprecation notices are all other (non-legacy)
|
||||
notices, grouped by message, test class and method.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Add this bridge to the `require-dev` section of your `composer.json` file
|
||||
(not in `require`) with e.g. `composer require --dev "symfony/phpunit-bridge"`.
|
||||
|
||||
When running `phpunit`, you will see a summary of deprecation notices at the end
|
||||
of the test suite.
|
||||
|
||||
Deprecation notices in the **Unsilenced** section should just be @-silenced:
|
||||
`@trigger_error('...', E_USER_DEPRECATED);`. Without the @-silencing operator,
|
||||
users would need to opt-out from deprecation notices. Silencing by default swaps
|
||||
this behavior and allows users to opt-in when they are ready to cope with them
|
||||
(by adding a custom error handler like the one provided by this bridge.)
|
||||
|
||||
Deprecation notices in the **Remaining/Other** section need some thought.
|
||||
You have to decide either to:
|
||||
|
||||
* update your code to not use deprecated interfaces anymore, thus gaining better
|
||||
forward compatibility;
|
||||
* or move them to the **Legacy** section (by using one of the above way).
|
||||
|
||||
In case you need to inspect the stack trace of a particular deprecation triggered
|
||||
by your unit tests, you can set the `SYMFONY_DEPRECATIONS_HELPER` env var to a
|
||||
regular expression that matches this deprecation's message, encapsed between `/`.
|
||||
For example, `SYMFONY_DEPRECATIONS_HELPER=/foobar/ phpunit` will stop your test
|
||||
suite once a deprecation notice is triggered whose message contains the "foobar"
|
||||
string.
|
||||
* [Documentation](https://symfony.com/doc/current/components/phpunit_bridge.html)
|
||||
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||
in the [main Symfony repository](https://github.com/symfony/symfony)
|
||||
|
13
src/Symfony/Bridge/Swiftmailer/README.md
Normal file
13
src/Symfony/Bridge/Swiftmailer/README.md
Normal file
@ -0,0 +1,13 @@
|
||||
Swiftmailer Bridge
|
||||
==================
|
||||
|
||||
Provides integration for [Swiftmailer](http://swiftmailer.org/) into the
|
||||
Symfony web development toolbar.
|
||||
|
||||
Resources
|
||||
---------
|
||||
|
||||
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||
in the [main Symfony repository](https://github.com/symfony/symfony)
|
@ -22,7 +22,7 @@
|
||||
"require-dev": {
|
||||
"symfony/asset": "~2.8|~3.0",
|
||||
"symfony/finder": "~2.8|~3.0",
|
||||
"symfony/form": "~2.8.3|~3.0",
|
||||
"symfony/form": "~2.8.4|~3.0.4",
|
||||
"symfony/http-kernel": "~2.8|~3.0",
|
||||
"symfony/polyfill-intl-icu": "~1.0",
|
||||
"symfony/routing": "~2.8|~3.0",
|
||||
|
@ -36,8 +36,7 @@ class LoggingTranslatorPass implements CompilerPassInterface
|
||||
$definition = $container->getDefinition((string) $translatorAlias);
|
||||
$class = $container->getParameterBag()->resolveValue($definition->getClass());
|
||||
|
||||
$refClass = new \ReflectionClass($class);
|
||||
if ($refClass->implementsInterface('Symfony\Component\Translation\TranslatorInterface') && $refClass->implementsInterface('Symfony\Component\Translation\TranslatorBagInterface')) {
|
||||
if (is_subclass_of($class, 'Symfony\Component\Translation\TranslatorInterface') && is_subclass_of($class, 'Symfony\Component\Translation\TranslatorBagInterface')) {
|
||||
$container->getDefinition('translator.logging')->setDecoratedService('translator');
|
||||
$container->getDefinition('translation.warmer')->replaceArgument(0, new Reference('translator.logging.inner'));
|
||||
}
|
||||
|
10
src/Symfony/Bundle/FrameworkBundle/README.md
Normal file
10
src/Symfony/Bundle/FrameworkBundle/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
FrameworkBundle
|
||||
===============
|
||||
|
||||
Resources
|
||||
---------
|
||||
|
||||
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||
in the [main Symfony repository](https://github.com/symfony/symfony)
|
10
src/Symfony/Bundle/SecurityBundle/README.md
Normal file
10
src/Symfony/Bundle/SecurityBundle/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
SecurityBundle
|
||||
==============
|
||||
|
||||
Resources
|
||||
---------
|
||||
|
||||
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||
in the [main Symfony repository](https://github.com/symfony/symfony)
|
10
src/Symfony/Bundle/TwigBundle/README.md
Normal file
10
src/Symfony/Bundle/TwigBundle/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
TwigBundle
|
||||
==========
|
||||
|
||||
Resources
|
||||
---------
|
||||
|
||||
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||
in the [main Symfony repository](https://github.com/symfony/symfony)
|
10
src/Symfony/Bundle/WebProfilerBundle/README.md
Normal file
10
src/Symfony/Bundle/WebProfilerBundle/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
WebProfilerBundle
|
||||
=================
|
||||
|
||||
Resources
|
||||
---------
|
||||
|
||||
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||
in the [main Symfony repository](https://github.com/symfony/symfony)
|
@ -1,166 +1,14 @@
|
||||
Asset Component
|
||||
===============
|
||||
|
||||
The Asset component manages asset URLs.
|
||||
|
||||
Versioned Asset URLs
|
||||
--------------------
|
||||
|
||||
The basic `Package` adds a version to generated asset URLs:
|
||||
|
||||
```php
|
||||
use Symfony\Component\Asset\Package;
|
||||
use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy;
|
||||
|
||||
$package = new Package(new StaticVersionStrategy('v1'));
|
||||
|
||||
echo $package->getUrl('/me.png');
|
||||
// /me.png?v1
|
||||
```
|
||||
|
||||
The default format can be configured:
|
||||
|
||||
```php
|
||||
$package = new Package(new StaticVersionStrategy('v1', '%s?version=%s'));
|
||||
|
||||
echo $package->getUrl('/me.png');
|
||||
// /me.png?version=v1
|
||||
|
||||
// put the version before the path
|
||||
$package = new Package(new StaticVersionStrategy('v1', 'version-%2$s/%1$s'));
|
||||
|
||||
echo $package->getUrl('/me.png');
|
||||
// /version-v1/me.png
|
||||
```
|
||||
|
||||
Asset URLs Base Path
|
||||
--------------------
|
||||
|
||||
When all assets are stored in a common path, use the `PathPackage` to avoid
|
||||
repeating yourself:
|
||||
|
||||
```php
|
||||
use Symfony\Component\Asset\PathPackage;
|
||||
|
||||
$package = new PathPackage('/images', new StaticVersionStrategy('v1'));
|
||||
|
||||
echo $package->getUrl('/me.png');
|
||||
// /images/me.png?v1
|
||||
```
|
||||
|
||||
Asset URLs Base URLs
|
||||
--------------------
|
||||
|
||||
If your assets are hosted on different domain name than the main website, use
|
||||
the `UrlPackage` class:
|
||||
|
||||
```php
|
||||
use Symfony\Component\Asset\UrlPackage;
|
||||
|
||||
$package = new UrlPackage('http://assets.example.com/images/', new StaticVersionStrategy('v1'));
|
||||
|
||||
echo $package->getUrl('/me.png');
|
||||
// http://assets.example.com/images/me.png?v1
|
||||
```
|
||||
|
||||
One technique used to speed up page rendering in browsers is to use several
|
||||
domains for assets; this is possible by passing more than one base URLs:
|
||||
|
||||
```php
|
||||
use Symfony\Component\Asset\UrlPackage;
|
||||
|
||||
$urls = array(
|
||||
'http://a1.example.com/images/',
|
||||
'http://a2.example.com/images/',
|
||||
);
|
||||
$package = new UrlPackage($urls, new StaticVersionStrategy('v1'));
|
||||
|
||||
echo $package->getUrl('/me.png');
|
||||
// http://a1.example.com/images/me.png?v1
|
||||
```
|
||||
|
||||
Note that it's also guaranteed that any given path will always use the same
|
||||
base URL to be nice with HTTP caching mechanisms.
|
||||
|
||||
HttpFoundation Integration
|
||||
--------------------------
|
||||
|
||||
If you are using HttpFoundation for your project, set the Context to get
|
||||
additional features for free:
|
||||
|
||||
```php
|
||||
use Symfony\Component\Asset\PathPackage;
|
||||
use Symfony\Component\Asset\Context\RequestStackContext;
|
||||
|
||||
$package = new PathPackage('images', new StaticVersionStrategy('v1'));
|
||||
$package->setContext(new RequestStackContext($requestStack));
|
||||
|
||||
echo $package->getUrl('/me.png');
|
||||
// /somewhere/images/me.png?v1
|
||||
```
|
||||
|
||||
In addition to the configured base path, `PathPackage` now also automatically
|
||||
prepends the current request base URL to assets to allow your website to be
|
||||
hosted anywhere under the web server root directory.
|
||||
|
||||
```php
|
||||
use Symfony\Component\Asset\UrlPackage;
|
||||
use Symfony\Component\Asset\Context\RequestStackContext;
|
||||
|
||||
$package = new UrlPackage(array('http://example.com/', 'https://example.com/'), new StaticVersionStrategy('v1'));
|
||||
$package->setContext(new RequestStackContext($requestStack));
|
||||
|
||||
echo $package->getUrl('/me.png');
|
||||
// https://example.com/images/me.png?v1
|
||||
```
|
||||
|
||||
`UrlPackage` now uses the current request scheme (HTTP or HTTPs) to select an
|
||||
appropriate base URL (HTTPs or protocol-relative URLs for HTTPs requests, any
|
||||
base URL for HTTP requests).
|
||||
|
||||
Named Packages
|
||||
--------------
|
||||
|
||||
The `Packages` class allows to easily manages several packages in a single
|
||||
project by naming packages:
|
||||
|
||||
```php
|
||||
use Symfony\Component\Asset\Package;
|
||||
use Symfony\Component\Asset\PathPackage;
|
||||
use Symfony\Component\Asset\UrlPackage;
|
||||
use Symfony\Component\Asset\Packages;
|
||||
|
||||
// by default, just add a version to all assets
|
||||
$versionStrategy = new StaticVersionStrategy('v1');
|
||||
$defaultPackage = new Asset\Package($versionStrategy);
|
||||
|
||||
$namedPackages = array(
|
||||
// images are hosted on another web server
|
||||
'img' => new Asset\UrlPackage('http://img.example.com/', $versionStrategy),
|
||||
|
||||
// documents are stored deeply under the web root directory
|
||||
// let's create a shortcut
|
||||
'doc' => new Asset\PathPackage('/somewhere/deep/for/documents', $versionStrategy),
|
||||
);
|
||||
|
||||
// bundle all packages to make it easy to use them
|
||||
$packages = new Asset\Packages($defaultPackage, $namedPackages);
|
||||
|
||||
echo $packages->getUrl('/some.css');
|
||||
// /some.css?v1
|
||||
|
||||
echo $packages->getUrl('/me.png', 'img');
|
||||
// http://img.example.com/me.png?v1
|
||||
|
||||
echo $packages->getUrl('/me.pdf', 'doc');
|
||||
// /somewhere/deep/for/documents/me.pdf?v1
|
||||
```
|
||||
The Asset component manages URL generation and versioning of web assets such as
|
||||
CSS stylesheets, JavaScript files and image files.
|
||||
|
||||
Resources
|
||||
---------
|
||||
|
||||
You can run the unit tests with the following command:
|
||||
|
||||
$ cd path/to/Symfony/Component/Asset/
|
||||
$ composer update
|
||||
$ phpunit
|
||||
* [Documentation](https://symfony.com/doc/current/components/asset/introduction.html)
|
||||
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||
in the [main Symfony repository](https://github.com/symfony/symfony)
|
||||
|
@ -138,8 +138,8 @@ class Question
|
||||
*/
|
||||
public function setAutocompleterValues($values)
|
||||
{
|
||||
if (is_array($values) && $this->isAssoc($values)) {
|
||||
$values = array_merge(array_keys($values), array_values($values));
|
||||
if (is_array($values)) {
|
||||
$values = $this->isAssoc($values) ? array_merge(array_keys($values), array_values($values)) : array_values($values);
|
||||
}
|
||||
|
||||
if (null !== $values && !is_array($values)) {
|
||||
|
@ -135,6 +135,26 @@ class QuestionHelperTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals('FooBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
public function testAskWithAutocompleteWithNonSequentialKeys()
|
||||
{
|
||||
if (!$this->hasSttyAvailable()) {
|
||||
$this->markTestSkipped('`stty` is required to test autocomplete functionality');
|
||||
}
|
||||
|
||||
// <UP ARROW><UP ARROW><NEWLINE><DOWN ARROW><DOWN ARROW><NEWLINE>
|
||||
$inputStream = $this->getInputStream("\033[A\033[A\n\033[B\033[B\n");
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setInputStream($inputStream);
|
||||
$dialog->setHelperSet(new HelperSet(array(new FormatterHelper())));
|
||||
|
||||
$question = new ChoiceQuestion('Please select a bundle', array(1 => 'AcmeDemoBundle', 4 => 'AsseticBundle'));
|
||||
$question->setMaxAttempts(1);
|
||||
|
||||
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('AsseticBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
public function testAskHiddenResponse()
|
||||
{
|
||||
if ('\\' === DIRECTORY_SEPARATOR) {
|
||||
|
@ -45,7 +45,7 @@ class Debug
|
||||
error_reporting(E_ALL);
|
||||
}
|
||||
|
||||
if ('cli' !== php_sapi_name()) {
|
||||
if ('cli' !== PHP_SAPI) {
|
||||
ini_set('display_errors', 0);
|
||||
ExceptionHandler::register();
|
||||
} elseif ($displayErrors && (!ini_get('log_errors') || ini_get('error_log'))) {
|
||||
|
@ -162,17 +162,17 @@ class DebugClassLoader
|
||||
break;
|
||||
}
|
||||
}
|
||||
$parent = $refl->getParentClass();
|
||||
$parent = get_parent_class($class);
|
||||
|
||||
if (!$parent || strncmp($ns, $parent->name, $len)) {
|
||||
if ($parent && isset(self::$deprecated[$parent->name]) && strncmp($ns, $parent->name, $len)) {
|
||||
@trigger_error(sprintf('The %s class extends %s that is deprecated %s', $name, $parent->name, self::$deprecated[$parent->name]), E_USER_DEPRECATED);
|
||||
if (!$parent || strncmp($ns, $parent, $len)) {
|
||||
if ($parent && isset(self::$deprecated[$parent]) && strncmp($ns, $parent, $len)) {
|
||||
@trigger_error(sprintf('The %s class extends %s that is deprecated %s', $name, $parent, self::$deprecated[$parent]), E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
$parentInterfaces = array();
|
||||
$deprecatedInterfaces = array();
|
||||
if ($parent) {
|
||||
foreach ($parent->getInterfaceNames() as $interface) {
|
||||
foreach (class_implements($parent) as $interface) {
|
||||
$parentInterfaces[$interface] = 1;
|
||||
}
|
||||
}
|
||||
|
@ -325,9 +325,8 @@ class Container implements ResettableContainerInterface
|
||||
public function getServiceIds()
|
||||
{
|
||||
$ids = array();
|
||||
$r = new \ReflectionClass($this);
|
||||
foreach ($r->getMethods() as $method) {
|
||||
if (preg_match('/^get(.+)Service$/', $method->name, $match)) {
|
||||
foreach (get_class_methods($this) as $method) {
|
||||
if (preg_match('/^get(.+)Service$/', $method, $match)) {
|
||||
$ids[] = self::underscore($match[1]);
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ use Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\DumperInterface as
|
||||
use Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\NullDumper;
|
||||
use Symfony\Component\DependencyInjection\ExpressionLanguage;
|
||||
use Symfony\Component\ExpressionLanguage\Expression;
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
|
||||
/**
|
||||
* PhpDumper dumps a service container as a PHP class.
|
||||
@ -56,6 +57,7 @@ class PhpDumper extends Dumper
|
||||
private $expressionLanguage;
|
||||
private $targetDirRegex;
|
||||
private $targetDirMaxMatches;
|
||||
private $docStar;
|
||||
|
||||
/**
|
||||
* @var \Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\DumperInterface
|
||||
@ -102,7 +104,9 @@ class PhpDumper extends Dumper
|
||||
'class' => 'ProjectServiceContainer',
|
||||
'base_class' => 'Container',
|
||||
'namespace' => '',
|
||||
'debug' => true,
|
||||
), $options);
|
||||
$this->docStar = $options['debug'] ? '*' : '';
|
||||
|
||||
if (!empty($options['file']) && is_dir($dir = dirname($options['file']))) {
|
||||
// Build a regexp where the first root dirs are mandatory,
|
||||
@ -227,9 +231,15 @@ class PhpDumper extends Dumper
|
||||
array($this->getProxyDumper(), 'isProxyCandidate')
|
||||
);
|
||||
$code = '';
|
||||
$strip = '' === $this->docStar && method_exists('Symfony\Component\HttpKernel\Kernel', 'stripComments');
|
||||
|
||||
foreach ($definitions as $definition) {
|
||||
$code .= "\n".$this->getProxyDumper()->getProxyCode($definition);
|
||||
$proxyCode = "\n".$this->getProxyDumper()->getProxyCode($definition);
|
||||
if ($strip) {
|
||||
$proxyCode = "<?php\n".$proxyCode;
|
||||
$proxyCode = substr(Kernel::stripComments($proxyCode), 5);
|
||||
}
|
||||
$code .= $proxyCode;
|
||||
}
|
||||
|
||||
return $code;
|
||||
@ -617,7 +627,7 @@ EOF;
|
||||
$visibility = $isProxyCandidate ? 'public' : 'protected';
|
||||
$code = <<<EOF
|
||||
|
||||
/**
|
||||
/*{$this->docStar}
|
||||
* Gets the '$id' service.$doc
|
||||
*$lazyInitializationDoc
|
||||
* $return
|
||||
@ -740,7 +750,7 @@ use Symfony\Component\DependencyInjection\Exception\LogicException;
|
||||
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
||||
$bagClass
|
||||
|
||||
/**
|
||||
/*{$this->docStar}
|
||||
* $class.
|
||||
*
|
||||
* This class has been auto-generated
|
||||
@ -766,7 +776,7 @@ EOF;
|
||||
|
||||
$code = <<<EOF
|
||||
|
||||
/**
|
||||
/*{$this->docStar}
|
||||
* Constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
@ -797,7 +807,7 @@ EOF;
|
||||
|
||||
$code = <<<EOF
|
||||
|
||||
/**
|
||||
/*{$this->docStar}
|
||||
* Constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
@ -829,7 +839,7 @@ EOF;
|
||||
{
|
||||
return <<<EOF
|
||||
|
||||
/**
|
||||
/*{$this->docStar}
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function compile()
|
||||
@ -950,11 +960,14 @@ EOF;
|
||||
}
|
||||
|
||||
EOF;
|
||||
if ('' === $this->docStar) {
|
||||
$code = str_replace('/**', '/*', $code);
|
||||
}
|
||||
}
|
||||
|
||||
$code .= <<<EOF
|
||||
|
||||
/**
|
||||
/*{$this->docStar}
|
||||
* Gets the default parameters.
|
||||
*
|
||||
* @return array An array of the default parameters
|
||||
|
@ -98,9 +98,8 @@ class RegisterListenersPass implements CompilerPassInterface
|
||||
// We must assume that the class value has been correctly filled, even if the service is created by a factory
|
||||
$class = $container->getParameterBag()->resolveValue($def->getClass());
|
||||
|
||||
$refClass = new \ReflectionClass($class);
|
||||
$interface = 'Symfony\Component\EventDispatcher\EventSubscriberInterface';
|
||||
if (!$refClass->implementsInterface($interface)) {
|
||||
if (!is_subclass_of($class, $interface)) {
|
||||
throw new \InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
|
||||
}
|
||||
|
||||
|
@ -2,42 +2,14 @@ ExpressionLanguage Component
|
||||
============================
|
||||
|
||||
The ExpressionLanguage component provides an engine that can compile and
|
||||
evaluate expressions:
|
||||
|
||||
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
|
||||
|
||||
$language = new ExpressionLanguage();
|
||||
|
||||
echo $language->evaluate('1 + foo', array('foo' => 2));
|
||||
// would output 3
|
||||
|
||||
echo $language->compile('1 + foo', array('foo'));
|
||||
// would output (1 + $foo)
|
||||
|
||||
By default, the engine implements simple math and logic functions, method
|
||||
calls, property accesses, and array accesses.
|
||||
|
||||
You can extend your DSL with functions:
|
||||
|
||||
$compiler = function ($arg) {
|
||||
return sprintf('strtoupper(%s)', $arg);
|
||||
};
|
||||
$evaluator = function (array $variables, $value) {
|
||||
return strtoupper($value);
|
||||
};
|
||||
$language->register('upper', $compiler, $evaluator);
|
||||
|
||||
echo $language->evaluate('"foo" ~ upper(foo)', array('foo' => 'bar'));
|
||||
// would output fooBAR
|
||||
|
||||
echo $language->compile('"foo" ~ upper(foo)');
|
||||
// would output ("foo" . strtoupper($foo))
|
||||
evaluate expressions. An expression is a one-liner that returns a value
|
||||
(mostly, but not limited to, Booleans).
|
||||
|
||||
Resources
|
||||
---------
|
||||
|
||||
You can run the unit tests with the following command:
|
||||
|
||||
$ cd path/to/Symfony/Component/ExpressionLanguage/
|
||||
$ composer.phar install --dev
|
||||
$ phpunit
|
||||
* [Documentation](https://symfony.com/doc/current/components/expression_language/introduction.html)
|
||||
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||
in the [main Symfony repository](https://github.com/symfony/symfony)
|
||||
|
@ -158,12 +158,13 @@ class Filesystem
|
||||
$files = iterator_to_array($this->toIterator($files));
|
||||
$files = array_reverse($files);
|
||||
foreach ($files as $file) {
|
||||
if (@(unlink($file) || rmdir($file))) {
|
||||
continue;
|
||||
}
|
||||
if (is_link($file)) {
|
||||
// Workaround https://bugs.php.net/52176
|
||||
if (!@unlink($file) && !@rmdir($file)) {
|
||||
$error = error_get_last();
|
||||
throw new IOException(sprintf('Failed to remove symlink "%s": %s.', $file, $error['message']));
|
||||
}
|
||||
// See https://bugs.php.net/52176
|
||||
$error = error_get_last();
|
||||
throw new IOException(sprintf('Failed to remove symlink "%s": %s.', $file, $error['message']));
|
||||
} elseif (is_dir($file)) {
|
||||
$this->remove(new \FilesystemIterator($file));
|
||||
|
||||
@ -171,11 +172,9 @@ class Filesystem
|
||||
$error = error_get_last();
|
||||
throw new IOException(sprintf('Failed to remove directory "%s": %s.', $file, $error['message']));
|
||||
}
|
||||
} elseif ($this->exists($file)) {
|
||||
if (!@unlink($file)) {
|
||||
$error = error_get_last();
|
||||
throw new IOException(sprintf('Failed to remove file "%s": %s.', $file, $error['message']));
|
||||
}
|
||||
} elseif (file_exists($file)) {
|
||||
$error = error_get_last();
|
||||
throw new IOException(sprintf('Failed to remove file "%s": %s.', $file, $error['message']));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -435,7 +434,7 @@ class Filesystem
|
||||
$target = str_replace($originDir, $targetDir, $file->getPathname());
|
||||
|
||||
if ($copyOnWindows) {
|
||||
if (is_link($file) || is_file($file)) {
|
||||
if (is_file($file)) {
|
||||
$this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
|
||||
} elseif (is_dir($file)) {
|
||||
$this->mkdir($target);
|
||||
|
@ -156,7 +156,7 @@ class FilesystemTest extends FilesystemTestCase
|
||||
$this->assertEquals('SOURCE FILE', file_get_contents($targetFilePath));
|
||||
}
|
||||
|
||||
public function testCopyForOriginUrlsAndExistingLocalFileDefaultsToNotCopy()
|
||||
public function testCopyForOriginUrlsAndExistingLocalFileDefaultsToCopy()
|
||||
{
|
||||
$sourceFilePath = 'http://symfony.com/images/common/logo/logo_symfony_header.png';
|
||||
$targetFilePath = $this->workspace.DIRECTORY_SEPARATOR.'copy_target_file';
|
||||
@ -347,7 +347,7 @@ class FilesystemTest extends FilesystemTestCase
|
||||
|
||||
// create symlink to nonexistent dir
|
||||
rmdir($basePath.'dir');
|
||||
$this->assertFalse(is_dir($basePath.'dir-link'));
|
||||
$this->assertFalse('\\' === DIRECTORY_SEPARATOR ? @readlink($basePath.'dir-link') : is_dir($basePath.'dir-link'));
|
||||
|
||||
$this->filesystem->remove($basePath);
|
||||
|
||||
@ -383,7 +383,7 @@ class FilesystemTest extends FilesystemTestCase
|
||||
$file = str_repeat('T', 259 - strlen($basePath));
|
||||
$path = $basePath.$file;
|
||||
exec('TYPE NUL >>'.$file); // equivalent of touch, we can not use the php touch() here because it suffers from the same limitation
|
||||
self::$longPathNamesWindows[] = $path; // save this so we can clean up later
|
||||
$this->longPathNamesWindows[] = $path; // save this so we can clean up later
|
||||
chdir($oldPath);
|
||||
$this->filesystem->exists($path);
|
||||
}
|
||||
@ -744,6 +744,8 @@ class FilesystemTest extends FilesystemTestCase
|
||||
$this->filesystem->remove($link);
|
||||
|
||||
$this->assertTrue(!is_link($link));
|
||||
$this->assertTrue(!is_file($link));
|
||||
$this->assertTrue(!is_dir($link));
|
||||
}
|
||||
|
||||
public function testSymlinkIsOverwrittenIfPointsToDifferentTarget()
|
||||
@ -917,7 +919,7 @@ class FilesystemTest extends FilesystemTestCase
|
||||
$this->filesystem->mirror($sourcePath, $targetPath);
|
||||
|
||||
$this->assertTrue(is_dir($targetPath));
|
||||
$this->assertFileEquals($sourcePath.'file1', $targetPath.DIRECTORY_SEPARATOR.'link1');
|
||||
$this->assertFileEquals($sourcePath.'file1', $targetPath.'link1');
|
||||
$this->assertTrue(is_link($targetPath.DIRECTORY_SEPARATOR.'link1'));
|
||||
}
|
||||
|
||||
@ -937,7 +939,7 @@ class FilesystemTest extends FilesystemTestCase
|
||||
$this->filesystem->mirror($sourcePath, $targetPath);
|
||||
|
||||
$this->assertTrue(is_dir($targetPath));
|
||||
$this->assertFileEquals($sourcePath.'/nested/file1.txt', $targetPath.DIRECTORY_SEPARATOR.'link1/file1.txt');
|
||||
$this->assertFileEquals($sourcePath.'/nested/file1.txt', $targetPath.'link1/file1.txt');
|
||||
$this->assertTrue(is_link($targetPath.DIRECTORY_SEPARATOR.'link1'));
|
||||
}
|
||||
|
||||
@ -961,7 +963,7 @@ class FilesystemTest extends FilesystemTestCase
|
||||
$this->filesystem->mirror($sourcePath, $targetPath);
|
||||
|
||||
$this->assertTrue(is_dir($targetPath));
|
||||
$this->assertFileEquals($sourcePath.'/nested/file1.txt', $targetPath.DIRECTORY_SEPARATOR.'link1/file1.txt');
|
||||
$this->assertFileEquals($sourcePath.'/nested/file1.txt', $targetPath.'link1/file1.txt');
|
||||
$this->assertTrue(is_link($targetPath.DIRECTORY_SEPARATOR.'link1'));
|
||||
$this->assertEquals('\\' === DIRECTORY_SEPARATOR ? realpath($sourcePath.'\nested') : 'nested', readlink($targetPath.DIRECTORY_SEPARATOR.'link1'));
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ class FilesystemTestCase extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
private $umask;
|
||||
|
||||
static protected $longPathNamesWindows = array();
|
||||
protected $longPathNamesWindows = array();
|
||||
|
||||
/**
|
||||
* @var \Symfony\Component\Filesystem\Filesystem
|
||||
@ -33,18 +33,11 @@ class FilesystemTestCase extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public static function setUpBeforeClass()
|
||||
{
|
||||
if (!empty(self::$longPathNamesWindows)) {
|
||||
foreach (self::$longPathNamesWindows as $path) {
|
||||
exec('DEL '.$path);
|
||||
}
|
||||
}
|
||||
|
||||
if ('\\' === DIRECTORY_SEPARATOR && null === self::$symlinkOnWindows) {
|
||||
$target = tempnam(sys_get_temp_dir(), 'sl');
|
||||
$link = sys_get_temp_dir().'/sl'.microtime(true).mt_rand();
|
||||
if (self::$symlinkOnWindows = @symlink($target, $link)) {
|
||||
unlink($link);
|
||||
}
|
||||
self::$symlinkOnWindows = @symlink($target, $link) && is_link($link);
|
||||
@unlink($link);
|
||||
unlink($target);
|
||||
}
|
||||
}
|
||||
@ -52,14 +45,21 @@ class FilesystemTestCase extends \PHPUnit_Framework_TestCase
|
||||
protected function setUp()
|
||||
{
|
||||
$this->umask = umask(0);
|
||||
$this->filesystem = new Filesystem();
|
||||
$this->workspace = rtrim(sys_get_temp_dir(), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.time().mt_rand(0, 1000);
|
||||
mkdir($this->workspace, 0777, true);
|
||||
$this->workspace = realpath($this->workspace);
|
||||
$this->filesystem = new Filesystem();
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
if (!empty($this->longPathNamesWindows)) {
|
||||
foreach ($this->longPathNamesWindows as $path) {
|
||||
exec('DEL '.$path);
|
||||
}
|
||||
$this->longPathNamesWindows = array();
|
||||
}
|
||||
|
||||
$this->filesystem->remove($this->workspace);
|
||||
umask($this->umask);
|
||||
}
|
||||
@ -102,10 +102,6 @@ class FilesystemTestCase extends \PHPUnit_Framework_TestCase
|
||||
|
||||
protected function markAsSkippedIfSymlinkIsMissing($relative = false)
|
||||
{
|
||||
if (!function_exists('symlink')) {
|
||||
$this->markTestSkipped('Function symlink is required.');
|
||||
}
|
||||
|
||||
if ('\\' === DIRECTORY_SEPARATOR && false === self::$symlinkOnWindows) {
|
||||
$this->markTestSkipped('symlink requires "Create symbolic links" privilege on Windows');
|
||||
}
|
||||
|
@ -39,11 +39,18 @@ abstract class FilterIterator extends \FilterIterator
|
||||
while ($iterator instanceof \OuterIterator) {
|
||||
$innerIterator = $iterator->getInnerIterator();
|
||||
|
||||
if ($innerIterator instanceof \FilesystemIterator) {
|
||||
if ($innerIterator instanceof RecursiveDirectoryIterator) {
|
||||
// this condition is necessary for iterators to work properly with non-local filesystems like ftp
|
||||
if ($innerIterator->isRewindable()) {
|
||||
$innerIterator->next();
|
||||
$innerIterator->rewind();
|
||||
}
|
||||
} elseif ($innerIterator instanceof \FilesystemIterator) {
|
||||
$innerIterator->next();
|
||||
$innerIterator->rewind();
|
||||
}
|
||||
$iterator = $iterator->getInnerIterator();
|
||||
|
||||
$iterator = $innerIterator;
|
||||
}
|
||||
|
||||
parent::rewind();
|
||||
|
@ -51,17 +51,17 @@ class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase
|
||||
public function dataProvider()
|
||||
{
|
||||
return array(
|
||||
array(\IntlDateFormatter::SHORT, null, null, '03.02.10 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(\IntlDateFormatter::MEDIUM, null, null, '03.02.2010 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(\IntlDateFormatter::LONG, null, null, '03. Februar 2010 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(\IntlDateFormatter::FULL, null, null, 'Mittwoch, 03. Februar 2010 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(\IntlDateFormatter::SHORT, null, null, '03.02.10, 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(\IntlDateFormatter::MEDIUM, null, null, '03.02.2010, 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(\IntlDateFormatter::LONG, null, null, '3. Februar 2010 um 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(\IntlDateFormatter::FULL, null, null, 'Mittwoch, 3. Februar 2010 um 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(\IntlDateFormatter::SHORT, \IntlDateFormatter::NONE, null, '03.02.10', '2010-02-03 00:00:00 UTC'),
|
||||
array(\IntlDateFormatter::MEDIUM, \IntlDateFormatter::NONE, null, '03.02.2010', '2010-02-03 00:00:00 UTC'),
|
||||
array(\IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, '03. Februar 2010', '2010-02-03 00:00:00 UTC'),
|
||||
array(\IntlDateFormatter::FULL, \IntlDateFormatter::NONE, null, 'Mittwoch, 03. Februar 2010', '2010-02-03 00:00:00 UTC'),
|
||||
array(null, \IntlDateFormatter::SHORT, null, '03.02.2010 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(null, \IntlDateFormatter::MEDIUM, null, '03.02.2010 04:05:06', '2010-02-03 04:05:06 UTC'),
|
||||
array(null, \IntlDateFormatter::LONG, null, '03.02.2010 04:05:06 GMT', '2010-02-03 04:05:06 UTC'),
|
||||
array(\IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, '3. Februar 2010', '2010-02-03 00:00:00 UTC'),
|
||||
array(\IntlDateFormatter::FULL, \IntlDateFormatter::NONE, null, 'Mittwoch, 3. Februar 2010', '2010-02-03 00:00:00 UTC'),
|
||||
array(null, \IntlDateFormatter::SHORT, null, '03.02.2010, 04:05', '2010-02-03 04:05:00 UTC'),
|
||||
array(null, \IntlDateFormatter::MEDIUM, null, '03.02.2010, 04:05:06', '2010-02-03 04:05:06 UTC'),
|
||||
array(null, \IntlDateFormatter::LONG, null, '03.02.2010, 04:05:06 GMT', '2010-02-03 04:05:06 UTC'),
|
||||
// see below for extra test case for time format FULL
|
||||
array(\IntlDateFormatter::NONE, \IntlDateFormatter::SHORT, null, '04:05', '1970-01-01 04:05:00 UTC'),
|
||||
array(\IntlDateFormatter::NONE, \IntlDateFormatter::MEDIUM, null, '04:05:06', '1970-01-01 04:05:06 UTC'),
|
||||
@ -103,7 +103,7 @@ class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase
|
||||
{
|
||||
$transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC', null, \IntlDateFormatter::FULL);
|
||||
|
||||
$this->assertEquals('03.02.2010 04:05:06 GMT', $transformer->transform($this->dateTime));
|
||||
$this->assertEquals('03.02.2010, 04:05:06 GMT', $transformer->transform($this->dateTime));
|
||||
}
|
||||
|
||||
public function testTransformToDifferentLocale()
|
||||
@ -131,7 +131,7 @@ class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase
|
||||
$dateTime = clone $input;
|
||||
$dateTime->setTimezone(new \DateTimeZone('Asia/Hong_Kong'));
|
||||
|
||||
$this->assertEquals($dateTime->format('d.m.Y H:i'), $transformer->transform($input));
|
||||
$this->assertEquals($dateTime->format('d.m.Y, H:i'), $transformer->transform($input));
|
||||
}
|
||||
|
||||
public function testTransformWithDifferentPatterns()
|
||||
@ -150,7 +150,7 @@ class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase
|
||||
$dateTime = clone $input;
|
||||
$dateTime = $dateTime->setTimezone(new \DateTimeZone('Asia/Hong_Kong'));
|
||||
|
||||
$this->assertEquals($dateTime->format('d.m.Y H:i'), $transformer->transform($input));
|
||||
$this->assertEquals($dateTime->format('d.m.Y, H:i'), $transformer->transform($input));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -198,7 +198,7 @@ class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase
|
||||
{
|
||||
$transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC', null, \IntlDateFormatter::FULL);
|
||||
|
||||
$this->assertDateTimeEquals($this->dateTime, $transformer->reverseTransform('03.02.2010 04:05:06 GMT+00:00'));
|
||||
$this->assertDateTimeEquals($this->dateTime, $transformer->reverseTransform('03.02.2010, 04:05:06 GMT+00:00'));
|
||||
}
|
||||
|
||||
public function testReverseTransformFromDifferentLocale()
|
||||
@ -217,7 +217,7 @@ class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase
|
||||
$dateTime = new \DateTime('2010-02-03 04:05:00 Asia/Hong_Kong');
|
||||
$dateTime->setTimezone(new \DateTimeZone('America/New_York'));
|
||||
|
||||
$this->assertDateTimeEquals($dateTime, $transformer->reverseTransform('03.02.2010 04:05'));
|
||||
$this->assertDateTimeEquals($dateTime, $transformer->reverseTransform('03.02.2010, 04:05'));
|
||||
}
|
||||
|
||||
public function testReverseTransformWithDifferentPatterns()
|
||||
|
@ -487,7 +487,7 @@ class DateTypeTest extends TestCase
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView(1, '1', 'Jän'),
|
||||
new ChoiceView(1, '1', 'Jän.'),
|
||||
new ChoiceView(4, '4', 'Apr.'),
|
||||
), $view['month']->vars['choices']);
|
||||
}
|
||||
|
@ -161,6 +161,20 @@ class BinaryFileResponse extends Response
|
||||
$filename = $this->file->getFilename();
|
||||
}
|
||||
|
||||
if ('' === $filenameFallback && (!preg_match('/^[\x20-\x7e]*$/', $filename) || false !== strpos($filename, '%'))) {
|
||||
$encoding = mb_detect_encoding($filename, null, true);
|
||||
|
||||
for ($i = 0; $i < mb_strlen($filename, $encoding); ++$i) {
|
||||
$char = mb_substr($filename, $i, 1, $encoding);
|
||||
|
||||
if ('%' === $char || ord($char) < 32 || ord($char) > 126) {
|
||||
$filenameFallback .= '_';
|
||||
} else {
|
||||
$filenameFallback .= $char;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$dispositionHeader = $this->headers->makeDisposition($disposition, $filename, $filenameFallback);
|
||||
$this->headers->set('Content-Disposition', $dispositionHeader);
|
||||
|
||||
|
@ -268,7 +268,7 @@ class Request
|
||||
// stores the Content-Type and Content-Length header values in
|
||||
// HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH fields.
|
||||
$server = $_SERVER;
|
||||
if ('cli-server' === php_sapi_name()) {
|
||||
if ('cli-server' === PHP_SAPI) {
|
||||
if (array_key_exists('HTTP_CONTENT_LENGTH', $_SERVER)) {
|
||||
$server['CONTENT_LENGTH'] = $_SERVER['HTTP_CONTENT_LENGTH'];
|
||||
}
|
||||
|
@ -236,6 +236,10 @@ class NativeSessionStorage implements SessionStorageInterface
|
||||
*/
|
||||
public function registerBag(SessionBagInterface $bag)
|
||||
{
|
||||
if ($this->started) {
|
||||
throw new \LogicException('Cannot register a bag when the session is already started.');
|
||||
}
|
||||
|
||||
$this->bags[$bag->getName()] = $bag;
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,17 @@ class BinaryFileResponseTest extends ResponseTestCase
|
||||
$this->assertEquals('inline; filename="README.md"', $response->headers->get('Content-Disposition'));
|
||||
}
|
||||
|
||||
public function testConstructWithNonAsciiFilename()
|
||||
{
|
||||
touch(sys_get_temp_dir().'/fööö.html');
|
||||
|
||||
$response = new BinaryFileResponse(sys_get_temp_dir().'/fööö.html', 200, array(), true, 'attachment');
|
||||
|
||||
@unlink(sys_get_temp_dir().'/fööö.html');
|
||||
|
||||
$this->assertSame('fööö.html', $response->getFile()->getFilename());
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \LogicException
|
||||
*/
|
||||
@ -49,6 +60,14 @@ class BinaryFileResponseTest extends ResponseTestCase
|
||||
$this->assertFalse($response->getContent());
|
||||
}
|
||||
|
||||
public function testSetContentDispositionGeneratesSafeFallbackFilename()
|
||||
{
|
||||
$response = new BinaryFileResponse(__FILE__);
|
||||
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'föö.html');
|
||||
|
||||
$this->assertSame('attachment; filename="f__.html"; filename*=utf-8\'\'f%C3%B6%C3%B6.html', $response->headers->get('Content-Disposition'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideRanges
|
||||
*/
|
||||
|
@ -1833,7 +1833,7 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
||||
$request = Request::create('/');
|
||||
$request->headers->set('host', $host);
|
||||
$this->assertEquals($host, $request->getHost());
|
||||
$this->assertLessThan(3, microtime(true) - $start);
|
||||
$this->assertLessThan(5, microtime(true) - $start);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -82,6 +82,16 @@ class NativeSessionStorageTest extends \PHPUnit_Framework_TestCase
|
||||
$storage->getBag('non_existing');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \LogicException
|
||||
*/
|
||||
public function testRegisterBagForAStartedSessionThrowsException()
|
||||
{
|
||||
$storage = $this->getStorage();
|
||||
$storage->start();
|
||||
$storage->registerBag(new AttributeBag());
|
||||
}
|
||||
|
||||
public function testGetId()
|
||||
{
|
||||
$storage = $this->getStorage();
|
||||
|
@ -16,7 +16,8 @@
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9"
|
||||
"php": ">=5.5.9",
|
||||
"symfony/polyfill-mbstring": "~1.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/expression-language": "~2.8|~3.0"
|
||||
|
@ -75,7 +75,7 @@ class ConfigDataCollector extends DataCollector
|
||||
'wincache_enabled' => extension_loaded('wincache') && ini_get('wincache.ocenabled'),
|
||||
'zend_opcache_enabled' => extension_loaded('Zend OPcache') && ini_get('opcache.enable'),
|
||||
'bundles' => array(),
|
||||
'sapi_name' => php_sapi_name(),
|
||||
'sapi_name' => PHP_SAPI,
|
||||
);
|
||||
|
||||
if (isset($this->kernel)) {
|
||||
|
@ -51,9 +51,9 @@ class FragmentRendererPass implements CompilerPassInterface
|
||||
throw new \InvalidArgumentException(sprintf('The service "%s" must not be abstract as fragment renderer are lazy-loaded.', $id));
|
||||
}
|
||||
|
||||
$refClass = new \ReflectionClass($container->getParameterBag()->resolveValue($def->getClass()));
|
||||
$class = $container->getParameterBag()->resolveValue($def->getClass());
|
||||
$interface = 'Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface';
|
||||
if (!$refClass->implementsInterface($interface)) {
|
||||
if (!is_subclass_of($class, $interface)) {
|
||||
throw new \InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
|
||||
}
|
||||
|
||||
|
@ -629,10 +629,7 @@ abstract class Kernel implements KernelInterface, TerminableInterface
|
||||
$dumper->setProxyDumper(new ProxyDumper(md5($cache->getPath())));
|
||||
}
|
||||
|
||||
$content = $dumper->dump(array('class' => $class, 'base_class' => $baseClass, 'file' => $cache->getPath()));
|
||||
if (!$this->debug) {
|
||||
$content = static::stripComments($content);
|
||||
}
|
||||
$content = $dumper->dump(array('class' => $class, 'base_class' => $baseClass, 'file' => $cache->getPath(), 'debug' => $this->debug));
|
||||
|
||||
$cache->write($content, $container->getResources());
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
||||
'fr' => 'fra',
|
||||
'gn' => 'grn',
|
||||
'hy' => 'hye',
|
||||
'hr' => 'hrv',
|
||||
'ik' => 'ipk',
|
||||
'is' => 'isl',
|
||||
'iu' => 'iku',
|
||||
@ -76,6 +77,7 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
||||
'sc' => 'srd',
|
||||
'sk' => 'slk',
|
||||
'sq' => 'sqi',
|
||||
'sr' => 'srp',
|
||||
'sw' => 'swa',
|
||||
'uz' => 'uzb',
|
||||
'yi' => 'yid',
|
||||
@ -164,10 +166,13 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
||||
|
||||
private function generateAlpha2ToAlpha3Mapping(ArrayAccessibleResourceBundle $metadataBundle)
|
||||
{
|
||||
$aliases = $metadataBundle['languageAlias'];
|
||||
// Data structure has changed in ICU 5.5 from "languageAlias" to "alias->language"
|
||||
$aliases = $metadataBundle['languageAlias'] ?: $metadataBundle['alias']['language'];
|
||||
$alpha2ToAlpha3 = array();
|
||||
|
||||
foreach ($aliases as $alias => $language) {
|
||||
// $language is a string before ICU 5.5
|
||||
$language = is_string($language) ? $language : $language['replacement'];
|
||||
if (2 === strlen($language) && 3 === strlen($alias)) {
|
||||
if (isset(self::$preferredAlpha2ToAlpha3Mapping[$language])) {
|
||||
// Validate to prevent typos
|
||||
@ -181,12 +186,13 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
||||
}
|
||||
|
||||
$alpha3 = self::$preferredAlpha2ToAlpha3Mapping[$language];
|
||||
$alpha2 = is_string($aliases[$alpha3]) ? $aliases[$alpha3] : $aliases[$alpha3]['replacement'];
|
||||
|
||||
if ($language !== $aliases[$alpha3]) {
|
||||
if ($language !== $alpha2) {
|
||||
throw new RuntimeException(
|
||||
'The statically set three-letter mapping '.$alpha3.' '.
|
||||
'for the language code '.$language.' seems to be '.
|
||||
'an alias for '.$aliases[$alpha3].'. Wrong mapping?'
|
||||
'an alias for '.$alpha2.'. Wrong mapping?'
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -234,7 +234,7 @@ final class Intl
|
||||
*/
|
||||
public static function getIcuStubVersion()
|
||||
{
|
||||
return '51.2';
|
||||
return '55.1';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -259,7 +259,7 @@ class NumberFormatter
|
||||
|
||||
private static $enTextAttributes = array(
|
||||
self::DECIMAL => array('', '', '-', '', '*', '', ''),
|
||||
self::CURRENCY => array('¤', '', '(¤', ')', '*', ''),
|
||||
self::CURRENCY => array('¤', '', '-¤', '', '*', ''),
|
||||
);
|
||||
|
||||
/**
|
||||
@ -357,7 +357,7 @@ class NumberFormatter
|
||||
|
||||
$ret = $symbol.$value;
|
||||
|
||||
return $negative ? '('.$ret.')' : $ret;
|
||||
return $negative ? '-'.$ret : $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -10,4 +10,5 @@
|
||||
51 = http://source.icu-project.org/repos/icu/icu/tags/release-51-2/source
|
||||
52 = http://source.icu-project.org/repos/icu/icu/tags/release-52-1/source
|
||||
53 = http://source.icu-project.org/repos/icu/icu/tags/release-53-1/source
|
||||
54 = http://source.icu-project.org/repos/icu/icu/tags/release-54-rc/source
|
||||
54 = http://source.icu-project.org/repos/icu/icu/tags/release-54-1/source
|
||||
55 = http://source.icu-project.org/repos/icu/icu/tags/release-55-1/source
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"AED": [
|
||||
"AED",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.11.68",
|
||||
"Names": {
|
||||
"NAD": [
|
||||
"$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"AED": [
|
||||
"AED",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.12.18",
|
||||
"Names": {
|
||||
"SDG": [
|
||||
"SDG",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -339,7 +339,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"Britaniya Funt Sterlinqi"
|
||||
"Britaniya Funt"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.10.34",
|
||||
"Names": {
|
||||
"AZN": [
|
||||
"ман.",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.7.39",
|
||||
"Version": "2.1.10.93",
|
||||
"Names": {
|
||||
"AUD": [
|
||||
"A$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.10.42",
|
||||
"Names": {
|
||||
"AED": [
|
||||
"AED",
|
||||
@ -71,7 +71,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"angilɛ Livri Siterlingi"
|
||||
"angilɛ Livri"
|
||||
],
|
||||
"GHC": [
|
||||
"GHC",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.7.39",
|
||||
"Version": "2.1.10.93",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -315,7 +315,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£ RU",
|
||||
"lur sterling Breizh-Veur"
|
||||
"lur Breizh-Veur"
|
||||
],
|
||||
"GEL": [
|
||||
"GEL",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.13.46",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -359,7 +359,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"GBP",
|
||||
"Britanska funta sterlinga"
|
||||
"Britanska funta"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -347,7 +347,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"Британска фунта стерлинга"
|
||||
"Британска фунта"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -384,7 +384,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"lliura esterlina britànica"
|
||||
"lliura britànica"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.7.80",
|
||||
"Version": "2.1.10.93",
|
||||
"Names": {
|
||||
"AED": [
|
||||
"AED",
|
||||
@ -187,7 +187,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"Punt Sterling Prydain"
|
||||
"Punt Prydain"
|
||||
],
|
||||
"GEL": [
|
||||
"GEL",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.9.62",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.13.4",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -387,7 +387,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"Britisches Pfund Sterling"
|
||||
"Britisches Pfund"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.21",
|
||||
"Version": "2.1.11.70",
|
||||
"Names": {
|
||||
"BYR": [
|
||||
"BYR",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -387,7 +387,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"britainga pound sterling"
|
||||
"britainga pound"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -335,7 +335,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"Λίρα Στερλίνα Βρετανίας"
|
||||
"Λίρα Βρετανίας"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.87",
|
||||
"Version": "2.1.13.48",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -387,7 +387,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"British Pound Sterling"
|
||||
"British Pound"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
@ -1019,7 +1019,7 @@
|
||||
],
|
||||
"UZS": [
|
||||
"UZS",
|
||||
"Uzbekistan Som"
|
||||
"Uzbekistani Som"
|
||||
],
|
||||
"VEB": [
|
||||
"VEB",
|
||||
@ -1047,7 +1047,7 @@
|
||||
],
|
||||
"XAF": [
|
||||
"FCFA",
|
||||
"CFA Franc BEAC"
|
||||
"Central African CFA Franc"
|
||||
],
|
||||
"XCD": [
|
||||
"EC$",
|
||||
@ -1067,7 +1067,7 @@
|
||||
],
|
||||
"XOF": [
|
||||
"CFA",
|
||||
"CFA Franc BCEAO"
|
||||
"West African CFA Franc"
|
||||
],
|
||||
"XPF": [
|
||||
"CFPF",
|
||||
|
@ -1,6 +1,34 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.12.90",
|
||||
"Names": {
|
||||
"BYB": [
|
||||
"BYB",
|
||||
"Belarusian New Rouble (1994–1999)"
|
||||
],
|
||||
"BYR": [
|
||||
"BYR",
|
||||
"Belarusian Rouble"
|
||||
],
|
||||
"JPY": [
|
||||
"JP¥",
|
||||
"Japanese Yen"
|
||||
],
|
||||
"LVR": [
|
||||
"LVR",
|
||||
"Latvian Rouble"
|
||||
],
|
||||
"RUB": [
|
||||
"RUB",
|
||||
"Russian Rouble"
|
||||
],
|
||||
"RUR": [
|
||||
"RUR",
|
||||
"Russian Rouble (1991–1998)"
|
||||
],
|
||||
"TJR": [
|
||||
"TJR",
|
||||
"Tajikistani Rouble"
|
||||
],
|
||||
"USD": [
|
||||
"US$",
|
||||
"US Dollar"
|
||||
|
@ -1,33 +1,13 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.11.59",
|
||||
"Names": {
|
||||
"BYR": [
|
||||
"BYR",
|
||||
"Belarusian Rouble"
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"British Pound"
|
||||
],
|
||||
"RUB": [
|
||||
"RUB",
|
||||
"Russian Rouble"
|
||||
"AUD": [
|
||||
"$",
|
||||
"Australian Dollar"
|
||||
],
|
||||
"SCR": [
|
||||
"SCR",
|
||||
"Seychelles Rupee"
|
||||
],
|
||||
"UZS": [
|
||||
"UZS",
|
||||
"Uzbekistani Som"
|
||||
],
|
||||
"XAF": [
|
||||
"FCFA",
|
||||
"Central African CFA Franc"
|
||||
],
|
||||
"XOF": [
|
||||
"CFA",
|
||||
"West African CFA Franc"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.11.50",
|
||||
"Names": {
|
||||
"BWP": [
|
||||
"P",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.11.50",
|
||||
"Names": {
|
||||
"BZD": [
|
||||
"$",
|
||||
|
@ -1,13 +1,9 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.14.16",
|
||||
"Names": {
|
||||
"CAD": [
|
||||
"$",
|
||||
"Canadian Dollar"
|
||||
],
|
||||
"USD": [
|
||||
"US$",
|
||||
"US Dollar"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"GB£",
|
||||
"British Pound Sterling"
|
||||
"British Pound"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -1,374 +1,6 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.11.59",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
"Andorran Peseta"
|
||||
],
|
||||
"AED": [
|
||||
"AED",
|
||||
"United Arab Emirates Dirham"
|
||||
],
|
||||
"AFA": [
|
||||
"AFA",
|
||||
"Afghan Afghani (1927–2002)"
|
||||
],
|
||||
"AFN": [
|
||||
"AFN",
|
||||
"Afghan Afghani"
|
||||
],
|
||||
"ALL": [
|
||||
"ALL",
|
||||
"Albanian Lek"
|
||||
],
|
||||
"AMD": [
|
||||
"AMD",
|
||||
"Armenian Dram"
|
||||
],
|
||||
"ANG": [
|
||||
"ANG",
|
||||
"Netherlands Antillean Guilder"
|
||||
],
|
||||
"AOA": [
|
||||
"AOA",
|
||||
"Angolan Kwanza"
|
||||
],
|
||||
"ARS": [
|
||||
"ARS",
|
||||
"Argentine Peso"
|
||||
],
|
||||
"ATS": [
|
||||
"ATS",
|
||||
"Austrian Schilling"
|
||||
],
|
||||
"AUD": [
|
||||
"A$",
|
||||
"Australian Dollar"
|
||||
],
|
||||
"AWG": [
|
||||
"AWG",
|
||||
"Aruban Florin"
|
||||
],
|
||||
"AZM": [
|
||||
"AZM",
|
||||
"Azerbaijani Manat (1993–2006)"
|
||||
],
|
||||
"AZN": [
|
||||
"AZN",
|
||||
"Azerbaijani Manat"
|
||||
],
|
||||
"BAD": [
|
||||
"BAD",
|
||||
"Bosnia-Herzegovina Dinar (1992–1994)"
|
||||
],
|
||||
"BAM": [
|
||||
"BAM",
|
||||
"Bosnia-Herzegovina Convertible Mark"
|
||||
],
|
||||
"BAN": [
|
||||
"BAN",
|
||||
"Bosnia-Herzegovina New Dinar (1994–1997)"
|
||||
],
|
||||
"BBD": [
|
||||
"BBD",
|
||||
"Barbadian Dollar"
|
||||
],
|
||||
"BDT": [
|
||||
"BDT",
|
||||
"Bangladeshi Taka"
|
||||
],
|
||||
"BEC": [
|
||||
"BEC",
|
||||
"Belgian Franc (convertible)"
|
||||
],
|
||||
"BEF": [
|
||||
"BEF",
|
||||
"Belgian Franc"
|
||||
],
|
||||
"BEL": [
|
||||
"BEL",
|
||||
"Belgian Franc (financial)"
|
||||
],
|
||||
"BGL": [
|
||||
"BGL",
|
||||
"Bulgarian Hard Lev"
|
||||
],
|
||||
"BGM": [
|
||||
"BGM",
|
||||
"Bulgarian Socialist Lev"
|
||||
],
|
||||
"BGN": [
|
||||
"BGN",
|
||||
"Bulgarian Lev"
|
||||
],
|
||||
"BGO": [
|
||||
"BGO",
|
||||
"Bulgarian Lev (1879–1952)"
|
||||
],
|
||||
"BHD": [
|
||||
"BHD",
|
||||
"Bahraini Dinar"
|
||||
],
|
||||
"BIF": [
|
||||
"BIF",
|
||||
"Burundian Franc"
|
||||
],
|
||||
"BMD": [
|
||||
"BMD",
|
||||
"Bermudan Dollar"
|
||||
],
|
||||
"BND": [
|
||||
"BND",
|
||||
"Brunei Dollar"
|
||||
],
|
||||
"BOB": [
|
||||
"BOB",
|
||||
"Bolivian Boliviano"
|
||||
],
|
||||
"BRL": [
|
||||
"R$",
|
||||
"Brazilian Real"
|
||||
],
|
||||
"BSD": [
|
||||
"BSD",
|
||||
"Bahamian Dollar"
|
||||
],
|
||||
"BTN": [
|
||||
"BTN",
|
||||
"Bhutanese Ngultrum"
|
||||
],
|
||||
"BUK": [
|
||||
"BUK",
|
||||
"Burmese Kyat"
|
||||
],
|
||||
"BWP": [
|
||||
"BWP",
|
||||
"Botswanan Pula"
|
||||
],
|
||||
"BYB": [
|
||||
"BYB",
|
||||
"Belarusian New Rouble (1994–1999)"
|
||||
],
|
||||
"BYR": [
|
||||
"BYR",
|
||||
"Belarusian Ruble"
|
||||
],
|
||||
"BZD": [
|
||||
"BZD",
|
||||
"Belize Dollar"
|
||||
],
|
||||
"CAD": [
|
||||
"CA$",
|
||||
"Canadian Dollar"
|
||||
],
|
||||
"CDF": [
|
||||
"CDF",
|
||||
"Congolese Franc"
|
||||
],
|
||||
"CHE": [
|
||||
"CHE",
|
||||
"WIR Euro"
|
||||
],
|
||||
"CHF": [
|
||||
"CHF",
|
||||
"Swiss Franc"
|
||||
],
|
||||
"CHW": [
|
||||
"CHW",
|
||||
"WIR Franc"
|
||||
],
|
||||
"CLP": [
|
||||
"CLP",
|
||||
"Chilean Peso"
|
||||
],
|
||||
"CNY": [
|
||||
"CN¥",
|
||||
"Chinese Yuan"
|
||||
],
|
||||
"COP": [
|
||||
"COP",
|
||||
"Colombian Peso"
|
||||
],
|
||||
"CRC": [
|
||||
"CRC",
|
||||
"Costa Rican Colón"
|
||||
],
|
||||
"CSD": [
|
||||
"CSD",
|
||||
"Serbian Dinar (2002–2006)"
|
||||
],
|
||||
"CSK": [
|
||||
"CSK",
|
||||
"Czechoslovak Hard Koruna"
|
||||
],
|
||||
"CUC": [
|
||||
"CUC",
|
||||
"Cuban Convertible Peso"
|
||||
],
|
||||
"CUP": [
|
||||
"CUP",
|
||||
"Cuban Peso"
|
||||
],
|
||||
"CVE": [
|
||||
"CVE",
|
||||
"Cape Verdean Escudo"
|
||||
],
|
||||
"CYP": [
|
||||
"CYP",
|
||||
"Cypriot Pound"
|
||||
],
|
||||
"CZK": [
|
||||
"CZK",
|
||||
"Czech Republic Koruna"
|
||||
],
|
||||
"DDM": [
|
||||
"DDM",
|
||||
"East German Mark"
|
||||
],
|
||||
"DEM": [
|
||||
"DEM",
|
||||
"German Mark"
|
||||
],
|
||||
"DJF": [
|
||||
"DJF",
|
||||
"Djiboutian Franc"
|
||||
],
|
||||
"DKK": [
|
||||
"DKK",
|
||||
"Danish Krone"
|
||||
],
|
||||
"DOP": [
|
||||
"DOP",
|
||||
"Dominican Peso"
|
||||
],
|
||||
"DZD": [
|
||||
"DZD",
|
||||
"Algerian Dinar"
|
||||
],
|
||||
"EEK": [
|
||||
"EEK",
|
||||
"Estonian Kroon"
|
||||
],
|
||||
"EGP": [
|
||||
"EGP",
|
||||
"Egyptian Pound"
|
||||
],
|
||||
"ERN": [
|
||||
"ERN",
|
||||
"Eritrean Nakfa"
|
||||
],
|
||||
"ESA": [
|
||||
"ESA",
|
||||
"Spanish Peseta (A account)"
|
||||
],
|
||||
"ESB": [
|
||||
"ESB",
|
||||
"Spanish Peseta (convertible account)"
|
||||
],
|
||||
"ESP": [
|
||||
"ESP",
|
||||
"Spanish Peseta"
|
||||
],
|
||||
"ETB": [
|
||||
"ETB",
|
||||
"Ethiopian Birr"
|
||||
],
|
||||
"EUR": [
|
||||
"€",
|
||||
"Euro"
|
||||
],
|
||||
"FIM": [
|
||||
"FIM",
|
||||
"Finnish Markka"
|
||||
],
|
||||
"FJD": [
|
||||
"FJD",
|
||||
"Fijian Dollar"
|
||||
],
|
||||
"FKP": [
|
||||
"FKP",
|
||||
"Falkland Islands Pound"
|
||||
],
|
||||
"FRF": [
|
||||
"FRF",
|
||||
"French Franc"
|
||||
],
|
||||
"GBP": [
|
||||
"£",
|
||||
"British Pound Sterling"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
"Georgian Kupon Larit"
|
||||
],
|
||||
"GEL": [
|
||||
"GEL",
|
||||
"Georgian Lari"
|
||||
],
|
||||
"GHS": [
|
||||
"GHS",
|
||||
"Ghanaian Cedi"
|
||||
],
|
||||
"GIP": [
|
||||
"GIP",
|
||||
"Gibraltar Pound"
|
||||
],
|
||||
"GMD": [
|
||||
"GMD",
|
||||
"Gambian Dalasi"
|
||||
],
|
||||
"GNF": [
|
||||
"GNF",
|
||||
"Guinean Franc"
|
||||
],
|
||||
"GRD": [
|
||||
"GRD",
|
||||
"Greek Drachma"
|
||||
],
|
||||
"GTQ": [
|
||||
"GTQ",
|
||||
"Guatemalan Quetzal"
|
||||
],
|
||||
"GYD": [
|
||||
"GYD",
|
||||
"Guyanaese Dollar"
|
||||
],
|
||||
"HKD": [
|
||||
"HK$",
|
||||
"Hong Kong Dollar"
|
||||
],
|
||||
"HNL": [
|
||||
"HNL",
|
||||
"Honduran Lempira"
|
||||
],
|
||||
"HRD": [
|
||||
"HRD",
|
||||
"Croatian Dinar"
|
||||
],
|
||||
"HRK": [
|
||||
"HRK",
|
||||
"Croatian Kuna"
|
||||
],
|
||||
"HTG": [
|
||||
"HTG",
|
||||
"Haitian Gourde"
|
||||
],
|
||||
"HUF": [
|
||||
"HUF",
|
||||
"Hungarian Forint"
|
||||
],
|
||||
"IDR": [
|
||||
"IDR",
|
||||
"Indonesian Rupiah"
|
||||
],
|
||||
"IEP": [
|
||||
"IEP",
|
||||
"Irish Pound"
|
||||
],
|
||||
"ILP": [
|
||||
"ILP",
|
||||
"Israeli Pound"
|
||||
],
|
||||
"ILR": [
|
||||
"ILR",
|
||||
"Israeli Shekel (1980–1985)"
|
||||
@ -376,562 +8,6 @@
|
||||
"ILS": [
|
||||
"₪",
|
||||
"Israeli New Shekel"
|
||||
],
|
||||
"INR": [
|
||||
"₹",
|
||||
"Indian Rupee"
|
||||
],
|
||||
"IQD": [
|
||||
"IQD",
|
||||
"Iraqi Dinar"
|
||||
],
|
||||
"IRR": [
|
||||
"IRR",
|
||||
"Iranian Rial"
|
||||
],
|
||||
"ISK": [
|
||||
"ISK",
|
||||
"Icelandic Króna"
|
||||
],
|
||||
"ITL": [
|
||||
"ITL",
|
||||
"Italian Lira"
|
||||
],
|
||||
"JMD": [
|
||||
"JMD",
|
||||
"Jamaican Dollar"
|
||||
],
|
||||
"JOD": [
|
||||
"JOD",
|
||||
"Jordanian Dinar"
|
||||
],
|
||||
"KES": [
|
||||
"KES",
|
||||
"Kenyan Shilling"
|
||||
],
|
||||
"KGS": [
|
||||
"KGS",
|
||||
"Kyrgystani Som"
|
||||
],
|
||||
"KHR": [
|
||||
"KHR",
|
||||
"Cambodian Riel"
|
||||
],
|
||||
"KMF": [
|
||||
"KMF",
|
||||
"Comorian Franc"
|
||||
],
|
||||
"KPW": [
|
||||
"KPW",
|
||||
"North Korean Won"
|
||||
],
|
||||
"KRH": [
|
||||
"KRH",
|
||||
"South Korean Hwan (1953–1962)"
|
||||
],
|
||||
"KRO": [
|
||||
"KRO",
|
||||
"South Korean Won (1945–1953)"
|
||||
],
|
||||
"KRW": [
|
||||
"₩",
|
||||
"South Korean Won"
|
||||
],
|
||||
"KWD": [
|
||||
"KWD",
|
||||
"Kuwaiti Dinar"
|
||||
],
|
||||
"KYD": [
|
||||
"KYD",
|
||||
"Cayman Islands Dollar"
|
||||
],
|
||||
"KZT": [
|
||||
"KZT",
|
||||
"Kazakhstani Tenge"
|
||||
],
|
||||
"LAK": [
|
||||
"LAK",
|
||||
"Laotian Kip"
|
||||
],
|
||||
"LBP": [
|
||||
"LBP",
|
||||
"Lebanese Pound"
|
||||
],
|
||||
"LKR": [
|
||||
"LKR",
|
||||
"Sri Lankan Rupee"
|
||||
],
|
||||
"LRD": [
|
||||
"LRD",
|
||||
"Liberian Dollar"
|
||||
],
|
||||
"LSL": [
|
||||
"LSL",
|
||||
"Lesotho Loti"
|
||||
],
|
||||
"LTL": [
|
||||
"LTL",
|
||||
"Lithuanian Litas"
|
||||
],
|
||||
"LTT": [
|
||||
"LTT",
|
||||
"Lithuanian Talonas"
|
||||
],
|
||||
"LUC": [
|
||||
"LUC",
|
||||
"Luxembourgian Convertible Franc"
|
||||
],
|
||||
"LUF": [
|
||||
"LUF",
|
||||
"Luxembourgian Franc"
|
||||
],
|
||||
"LUL": [
|
||||
"LUL",
|
||||
"Luxembourg Financial Franc"
|
||||
],
|
||||
"LVL": [
|
||||
"LVL",
|
||||
"Latvian Lats"
|
||||
],
|
||||
"LVR": [
|
||||
"LVR",
|
||||
"Latvian Rouble"
|
||||
],
|
||||
"LYD": [
|
||||
"LYD",
|
||||
"Libyan Dinar"
|
||||
],
|
||||
"MAD": [
|
||||
"MAD",
|
||||
"Moroccan Dirham"
|
||||
],
|
||||
"MCF": [
|
||||
"MCF",
|
||||
"Monegasque Franc"
|
||||
],
|
||||
"MDC": [
|
||||
"MDC",
|
||||
"Moldovan Cupon"
|
||||
],
|
||||
"MDL": [
|
||||
"MDL",
|
||||
"Moldovan Leu"
|
||||
],
|
||||
"MGA": [
|
||||
"MGA",
|
||||
"Malagasy Ariary"
|
||||
],
|
||||
"MKD": [
|
||||
"MKD",
|
||||
"Macedonian Denar"
|
||||
],
|
||||
"MKN": [
|
||||
"MKN",
|
||||
"Macedonian Denar (1992–1993)"
|
||||
],
|
||||
"MMK": [
|
||||
"MMK",
|
||||
"Myanmar Kyat"
|
||||
],
|
||||
"MNT": [
|
||||
"MNT",
|
||||
"Mongolian Tugrik"
|
||||
],
|
||||
"MOP": [
|
||||
"MOP",
|
||||
"Macanese Pataca"
|
||||
],
|
||||
"MRO": [
|
||||
"MRO",
|
||||
"Mauritanian Ouguiya"
|
||||
],
|
||||
"MTL": [
|
||||
"MTL",
|
||||
"Maltese Lira"
|
||||
],
|
||||
"MTP": [
|
||||
"MTP",
|
||||
"Maltese Pound"
|
||||
],
|
||||
"MUR": [
|
||||
"MUR",
|
||||
"Mauritian Rupee"
|
||||
],
|
||||
"MVP": [
|
||||
"MVP",
|
||||
"Maldivian Rupee"
|
||||
],
|
||||
"MVR": [
|
||||
"MVR",
|
||||
"Maldivian Rufiyaa"
|
||||
],
|
||||
"MWK": [
|
||||
"MWK",
|
||||
"Malawian Kwacha"
|
||||
],
|
||||
"MXN": [
|
||||
"MX$",
|
||||
"Mexican Peso"
|
||||
],
|
||||
"MXP": [
|
||||
"MXP",
|
||||
"Mexican Silver Peso (1861–1992)"
|
||||
],
|
||||
"MXV": [
|
||||
"MXV",
|
||||
"Mexican Investment Unit"
|
||||
],
|
||||
"MYR": [
|
||||
"MYR",
|
||||
"Malaysian Ringgit"
|
||||
],
|
||||
"MZN": [
|
||||
"MZN",
|
||||
"Mozambican Metical"
|
||||
],
|
||||
"NAD": [
|
||||
"NAD",
|
||||
"Namibian Dollar"
|
||||
],
|
||||
"NGN": [
|
||||
"NGN",
|
||||
"Nigerian Naira"
|
||||
],
|
||||
"NIC": [
|
||||
"NIC",
|
||||
"Nicaraguan Córdoba (1988–1991)"
|
||||
],
|
||||
"NIO": [
|
||||
"NIO",
|
||||
"Nicaraguan Córdoba"
|
||||
],
|
||||
"NLG": [
|
||||
"NLG",
|
||||
"Dutch Guilder"
|
||||
],
|
||||
"NOK": [
|
||||
"NOK",
|
||||
"Norwegian Krone"
|
||||
],
|
||||
"NPR": [
|
||||
"NPR",
|
||||
"Nepalese Rupee"
|
||||
],
|
||||
"NZD": [
|
||||
"NZ$",
|
||||
"New Zealand Dollar"
|
||||
],
|
||||
"OMR": [
|
||||
"OMR",
|
||||
"Omani Rial"
|
||||
],
|
||||
"PAB": [
|
||||
"PAB",
|
||||
"Panamanian Balboa"
|
||||
],
|
||||
"PEN": [
|
||||
"PEN",
|
||||
"Peruvian Nuevo Sol"
|
||||
],
|
||||
"PGK": [
|
||||
"PGK",
|
||||
"Papua New Guinean Kina"
|
||||
],
|
||||
"PHP": [
|
||||
"PHP",
|
||||
"Philippine Peso"
|
||||
],
|
||||
"PKR": [
|
||||
"PKR",
|
||||
"Pakistani Rupee"
|
||||
],
|
||||
"PLN": [
|
||||
"PLN",
|
||||
"Polish Zloty"
|
||||
],
|
||||
"PLZ": [
|
||||
"PLZ",
|
||||
"Polish Zloty (1950–1995)"
|
||||
],
|
||||
"PTE": [
|
||||
"PTE",
|
||||
"Portuguese Escudo"
|
||||
],
|
||||
"PYG": [
|
||||
"PYG",
|
||||
"Paraguayan Guarani"
|
||||
],
|
||||
"QAR": [
|
||||
"QAR",
|
||||
"Qatari Rial"
|
||||
],
|
||||
"ROL": [
|
||||
"ROL",
|
||||
"Romanian Leu (1952–2006)"
|
||||
],
|
||||
"RON": [
|
||||
"RON",
|
||||
"Romanian Leu"
|
||||
],
|
||||
"RSD": [
|
||||
"RSD",
|
||||
"Serbian Dinar"
|
||||
],
|
||||
"RUB": [
|
||||
"RUB",
|
||||
"Russian Ruble"
|
||||
],
|
||||
"RUR": [
|
||||
"RUR",
|
||||
"Russian Rouble (1991–1998)"
|
||||
],
|
||||
"RWF": [
|
||||
"RWF",
|
||||
"Rwandan Franc"
|
||||
],
|
||||
"SAR": [
|
||||
"SAR",
|
||||
"Saudi Riyal"
|
||||
],
|
||||
"SBD": [
|
||||
"SBD",
|
||||
"Solomon Islands Dollar"
|
||||
],
|
||||
"SCR": [
|
||||
"SCR",
|
||||
"Seychellois Rupee"
|
||||
],
|
||||
"SDG": [
|
||||
"SDG",
|
||||
"Sudanese Pound"
|
||||
],
|
||||
"SEK": [
|
||||
"SEK",
|
||||
"Swedish Krona"
|
||||
],
|
||||
"SGD": [
|
||||
"SGD",
|
||||
"Singapore Dollar"
|
||||
],
|
||||
"SHP": [
|
||||
"SHP",
|
||||
"Saint Helena Pound"
|
||||
],
|
||||
"SIT": [
|
||||
"SIT",
|
||||
"Slovenian Tolar"
|
||||
],
|
||||
"SKK": [
|
||||
"SKK",
|
||||
"Slovak Koruna"
|
||||
],
|
||||
"SLL": [
|
||||
"SLL",
|
||||
"Sierra Leonean Leone"
|
||||
],
|
||||
"SOS": [
|
||||
"SOS",
|
||||
"Somali Shilling"
|
||||
],
|
||||
"SRD": [
|
||||
"SRD",
|
||||
"Surinamese Dollar"
|
||||
],
|
||||
"SSP": [
|
||||
"SSP",
|
||||
"South Sudanese Pound"
|
||||
],
|
||||
"STD": [
|
||||
"STD",
|
||||
"São Tomé and Príncipe Dobra"
|
||||
],
|
||||
"SUR": [
|
||||
"SUR",
|
||||
"Soviet Rouble"
|
||||
],
|
||||
"SVC": [
|
||||
"SVC",
|
||||
"Salvadoran Colón"
|
||||
],
|
||||
"SYP": [
|
||||
"SYP",
|
||||
"Syrian Pound"
|
||||
],
|
||||
"SZL": [
|
||||
"SZL",
|
||||
"Swazi Lilangeni"
|
||||
],
|
||||
"THB": [
|
||||
"฿",
|
||||
"Thai Baht"
|
||||
],
|
||||
"TJR": [
|
||||
"TJR",
|
||||
"Tajikistani Rouble"
|
||||
],
|
||||
"TJS": [
|
||||
"TJS",
|
||||
"Tajikistani Somoni"
|
||||
],
|
||||
"TMM": [
|
||||
"TMM",
|
||||
"Turkmenistani Manat (1993–2009)"
|
||||
],
|
||||
"TMT": [
|
||||
"TMT",
|
||||
"Turkmenistani Manat"
|
||||
],
|
||||
"TND": [
|
||||
"TND",
|
||||
"Tunisian Dinar"
|
||||
],
|
||||
"TOP": [
|
||||
"TOP",
|
||||
"Tongan Paʻanga"
|
||||
],
|
||||
"TPE": [
|
||||
"TPE",
|
||||
"Timorese Escudo"
|
||||
],
|
||||
"TRL": [
|
||||
"TRL",
|
||||
"Turkish Lira (1922–2005)"
|
||||
],
|
||||
"TRY": [
|
||||
"TRY",
|
||||
"Turkish Lira"
|
||||
],
|
||||
"TTD": [
|
||||
"TTD",
|
||||
"Trinidad and Tobago Dollar"
|
||||
],
|
||||
"TWD": [
|
||||
"NT$",
|
||||
"New Taiwan Dollar"
|
||||
],
|
||||
"TZS": [
|
||||
"TZS",
|
||||
"Tanzanian Shilling"
|
||||
],
|
||||
"UAH": [
|
||||
"UAH",
|
||||
"Ukrainian Hryvnia"
|
||||
],
|
||||
"UAK": [
|
||||
"UAK",
|
||||
"Ukrainian Karbovanets"
|
||||
],
|
||||
"UGX": [
|
||||
"UGX",
|
||||
"Ugandan Shilling"
|
||||
],
|
||||
"USN": [
|
||||
"USN",
|
||||
"US Dollar (Next day)"
|
||||
],
|
||||
"USS": [
|
||||
"USS",
|
||||
"US Dollar (Same day)"
|
||||
],
|
||||
"UYU": [
|
||||
"UYU",
|
||||
"Uruguayan Peso"
|
||||
],
|
||||
"UZS": [
|
||||
"UZS",
|
||||
"Uzbekistan Som"
|
||||
],
|
||||
"VEF": [
|
||||
"VEF",
|
||||
"Venezuelan Bolívar"
|
||||
],
|
||||
"VND": [
|
||||
"₫",
|
||||
"Vietnamese Dong"
|
||||
],
|
||||
"VNN": [
|
||||
"VNN",
|
||||
"Vietnamese Dong (1978–1985)"
|
||||
],
|
||||
"VUV": [
|
||||
"VUV",
|
||||
"Vanuatu Vatu"
|
||||
],
|
||||
"WST": [
|
||||
"WST",
|
||||
"Samoan Tala"
|
||||
],
|
||||
"XAF": [
|
||||
"FCFA",
|
||||
"CFA Franc BEAC"
|
||||
],
|
||||
"XCD": [
|
||||
"EC$",
|
||||
"East Caribbean Dollar"
|
||||
],
|
||||
"XEU": [
|
||||
"XEU",
|
||||
"European Currency Unit"
|
||||
],
|
||||
"XFO": [
|
||||
"XFO",
|
||||
"French Gold Franc"
|
||||
],
|
||||
"XFU": [
|
||||
"XFU",
|
||||
"French UIC-Franc"
|
||||
],
|
||||
"XOF": [
|
||||
"CFA",
|
||||
"CFA Franc BCEAO"
|
||||
],
|
||||
"XPF": [
|
||||
"CFPF",
|
||||
"CFP Franc"
|
||||
],
|
||||
"XRE": [
|
||||
"XRE",
|
||||
"RINET Funds"
|
||||
],
|
||||
"YDD": [
|
||||
"YDD",
|
||||
"Yemeni Dinar"
|
||||
],
|
||||
"YER": [
|
||||
"YER",
|
||||
"Yemeni Rial"
|
||||
],
|
||||
"YUD": [
|
||||
"YUD",
|
||||
"Yugoslavian Hard Dinar (1966–1990)"
|
||||
],
|
||||
"YUM": [
|
||||
"YUM",
|
||||
"Yugoslavian New Dinar (1994–2002)"
|
||||
],
|
||||
"YUN": [
|
||||
"YUN",
|
||||
"Yugoslavian Convertible Dinar (1990–1992)"
|
||||
],
|
||||
"YUR": [
|
||||
"YUR",
|
||||
"Yugoslavian Reformed Dinar (1992–1993)"
|
||||
],
|
||||
"ZAL": [
|
||||
"ZAL",
|
||||
"South African Rand (financial)"
|
||||
],
|
||||
"ZAR": [
|
||||
"ZAR",
|
||||
"South African Rand"
|
||||
],
|
||||
"ZMK": [
|
||||
"ZMK",
|
||||
"Zambian Kwacha (1968–2012)"
|
||||
],
|
||||
"ZMW": [
|
||||
"ZMW",
|
||||
"Zambian Kwacha"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
"Names": {
|
||||
"GBP": [
|
||||
"GB£",
|
||||
"British Pound Sterling"
|
||||
"British Pound"
|
||||
],
|
||||
"GIP": [
|
||||
"£",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.10.93",
|
||||
"Names": {
|
||||
"JMD": [
|
||||
"$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.11.50",
|
||||
"Names": {
|
||||
"MOP": [
|
||||
"MOP$",
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.11.50",
|
||||
"Names": {
|
||||
"GBP": [
|
||||
"GB£",
|
||||
"British Pound Sterling"
|
||||
"British Pound"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.11.51",
|
||||
"Names": {
|
||||
"NZD": [
|
||||
"$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.11.51",
|
||||
"Names": {
|
||||
"PKR": [
|
||||
"Rs",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.11.51",
|
||||
"Names": {
|
||||
"SGD": [
|
||||
"$",
|
||||
|
@ -3,11 +3,11 @@
|
||||
"Names": {
|
||||
"GBP": [
|
||||
"GB£",
|
||||
"British Pound Sterling"
|
||||
"British Pound"
|
||||
],
|
||||
"SHP": [
|
||||
"£",
|
||||
"Saint Helena Pound"
|
||||
"St. Helena Pound"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
"Names": {
|
||||
"GBP": [
|
||||
"GB£",
|
||||
"British Pound Sterling"
|
||||
"British Pound"
|
||||
],
|
||||
"SSP": [
|
||||
"£",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.11.51",
|
||||
"Names": {
|
||||
"ZAR": [
|
||||
"R",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.13.21",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -67,7 +67,7 @@
|
||||
],
|
||||
"AWG": [
|
||||
"AWG",
|
||||
"florín de Aruba"
|
||||
"florín arubeño"
|
||||
],
|
||||
"AZM": [
|
||||
"AZM",
|
||||
@ -87,7 +87,7 @@
|
||||
],
|
||||
"BBD": [
|
||||
"BBD",
|
||||
"dólar de Barbados"
|
||||
"dólar barbadense"
|
||||
],
|
||||
"BDT": [
|
||||
"BDT",
|
||||
@ -111,7 +111,7 @@
|
||||
],
|
||||
"BGN": [
|
||||
"BGN",
|
||||
"leva"
|
||||
"lev búlgaro"
|
||||
],
|
||||
"BHD": [
|
||||
"BHD",
|
||||
@ -167,7 +167,7 @@
|
||||
],
|
||||
"BSD": [
|
||||
"BSD",
|
||||
"dólar de las Bahamas"
|
||||
"dólar bahameño"
|
||||
],
|
||||
"BTN": [
|
||||
"BTN",
|
||||
@ -191,7 +191,7 @@
|
||||
],
|
||||
"BZD": [
|
||||
"BZD",
|
||||
"dólar de Belice"
|
||||
"dólar beliceño"
|
||||
],
|
||||
"CAD": [
|
||||
"CA$",
|
||||
@ -339,7 +339,7 @@
|
||||
],
|
||||
"FKP": [
|
||||
"FKP",
|
||||
"libra de las Islas Malvinas"
|
||||
"libra malvinense"
|
||||
],
|
||||
"FRF": [
|
||||
"FRF",
|
||||
@ -347,7 +347,7 @@
|
||||
],
|
||||
"GBP": [
|
||||
"GBP",
|
||||
"libra esterlina"
|
||||
"libra británica"
|
||||
],
|
||||
"GEK": [
|
||||
"GEK",
|
||||
@ -407,7 +407,7 @@
|
||||
],
|
||||
"HKD": [
|
||||
"HKD",
|
||||
"dólar de Hong Kong"
|
||||
"dólar hongkonés"
|
||||
],
|
||||
"HNL": [
|
||||
"HNL",
|
||||
@ -427,7 +427,7 @@
|
||||
],
|
||||
"HUF": [
|
||||
"HUF",
|
||||
"forinto"
|
||||
"forinto húngaro"
|
||||
],
|
||||
"IDR": [
|
||||
"IDR",
|
||||
@ -467,7 +467,7 @@
|
||||
],
|
||||
"JMD": [
|
||||
"JMD",
|
||||
"dólar de Jamaica"
|
||||
"dólar jamaicano"
|
||||
],
|
||||
"JOD": [
|
||||
"JOD",
|
||||
@ -511,7 +511,7 @@
|
||||
],
|
||||
"KZT": [
|
||||
"KZT",
|
||||
"tengue"
|
||||
"tenge kazako"
|
||||
],
|
||||
"LAK": [
|
||||
"LAK",
|
||||
@ -523,7 +523,7 @@
|
||||
],
|
||||
"LKR": [
|
||||
"LKR",
|
||||
"rupia de Sri Lanka"
|
||||
"rupia esrilanquesa"
|
||||
],
|
||||
"LRD": [
|
||||
"LRD",
|
||||
@ -535,7 +535,7 @@
|
||||
],
|
||||
"LTL": [
|
||||
"LTL",
|
||||
"litas"
|
||||
"litas lituano"
|
||||
],
|
||||
"LTT": [
|
||||
"LTT",
|
||||
@ -555,7 +555,7 @@
|
||||
],
|
||||
"LVL": [
|
||||
"LVL",
|
||||
"lats"
|
||||
"lats letón"
|
||||
],
|
||||
"LVR": [
|
||||
"LVR",
|
||||
@ -627,7 +627,7 @@
|
||||
],
|
||||
"MWK": [
|
||||
"MWK",
|
||||
"kuacha malauí"
|
||||
"kwacha malauí"
|
||||
],
|
||||
"MXN": [
|
||||
"MXN",
|
||||
|
@ -1,62 +1,14 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"AMD": [
|
||||
"AMD",
|
||||
"dram"
|
||||
],
|
||||
"AWG": [
|
||||
"AWG",
|
||||
"florín arubeño"
|
||||
],
|
||||
"BBD": [
|
||||
"BBD",
|
||||
"dólar barbadense"
|
||||
],
|
||||
"BSD": [
|
||||
"BSD",
|
||||
"dólar bahameño"
|
||||
],
|
||||
"BZD": [
|
||||
"BZD",
|
||||
"dólar beliceño"
|
||||
],
|
||||
"CAD": [
|
||||
"CAD",
|
||||
"dólar canadiense"
|
||||
],
|
||||
"ERN": [
|
||||
"ERN",
|
||||
"nakfa"
|
||||
],
|
||||
"EUR": [
|
||||
"EUR",
|
||||
"euro"
|
||||
],
|
||||
"HKD": [
|
||||
"HKD",
|
||||
"dólar hongkonés"
|
||||
],
|
||||
"ILS": [
|
||||
"ILS",
|
||||
"nuevo sheqel israelí"
|
||||
],
|
||||
"JMD": [
|
||||
"JMD",
|
||||
"dólar jamaicano"
|
||||
],
|
||||
"KZT": [
|
||||
"KZT",
|
||||
"tenge kazako"
|
||||
],
|
||||
"LKR": [
|
||||
"LKR",
|
||||
"rupia esrilanquesa"
|
||||
],
|
||||
"MOP": [
|
||||
"MOP",
|
||||
"pataca"
|
||||
],
|
||||
"THB": [
|
||||
"THB",
|
||||
"bat"
|
||||
@ -68,10 +20,6 @@
|
||||
"VND": [
|
||||
"VND",
|
||||
"dong"
|
||||
],
|
||||
"ZMW": [
|
||||
"ZMK",
|
||||
"kuacha zambiano"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"ARS": [
|
||||
"$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"CLP": [
|
||||
"$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"COP": [
|
||||
"$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"CRC": [
|
||||
"₡",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"USD": [
|
||||
"$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"GTQ": [
|
||||
"Q",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"HNL": [
|
||||
"L",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"AFN": [
|
||||
"Af",
|
||||
@ -9,10 +9,6 @@
|
||||
"ALL",
|
||||
"lek albanés"
|
||||
],
|
||||
"AMD": [
|
||||
"AMD",
|
||||
"dram armenio"
|
||||
],
|
||||
"ANG": [
|
||||
"Naf",
|
||||
"florín de las Antillas Neerlandesas"
|
||||
@ -41,10 +37,6 @@
|
||||
"BDT",
|
||||
"taka de Bangladesh"
|
||||
],
|
||||
"BGN": [
|
||||
"BGN",
|
||||
"lev búlgaro"
|
||||
],
|
||||
"BND": [
|
||||
"BND",
|
||||
"dólar de Brunéi"
|
||||
@ -117,22 +109,10 @@
|
||||
"ECV",
|
||||
"unidad de valor constante (UVC) ecuatoriana"
|
||||
],
|
||||
"ERN": [
|
||||
"ERN",
|
||||
"nakfa eritreo"
|
||||
],
|
||||
"ETB": [
|
||||
"ETB",
|
||||
"birr etíope"
|
||||
],
|
||||
"FKP": [
|
||||
"FKP",
|
||||
"libra malvinense"
|
||||
],
|
||||
"GBP": [
|
||||
"GBP",
|
||||
"libra esterlina británica"
|
||||
],
|
||||
"GEL": [
|
||||
"GEL",
|
||||
"lari georgiano"
|
||||
@ -153,18 +133,10 @@
|
||||
"HRK",
|
||||
"kuna croata"
|
||||
],
|
||||
"HUF": [
|
||||
"HUF",
|
||||
"florín húngaro"
|
||||
],
|
||||
"ILS": [
|
||||
"ILS",
|
||||
"nuevo shéquel israelí"
|
||||
],
|
||||
"JMD": [
|
||||
"JMD",
|
||||
"dólar jamaiquino"
|
||||
],
|
||||
"JPY": [
|
||||
"JPY",
|
||||
"yen japonés"
|
||||
@ -189,14 +161,6 @@
|
||||
"LKR",
|
||||
"rupia de Sri Lanka"
|
||||
],
|
||||
"LTL": [
|
||||
"LTL",
|
||||
"litas lituano"
|
||||
],
|
||||
"LVL": [
|
||||
"LVL",
|
||||
"lats letón"
|
||||
],
|
||||
"MGA": [
|
||||
"MGA",
|
||||
"ariary malgache"
|
||||
@ -209,10 +173,6 @@
|
||||
"MNT",
|
||||
"tugrik mongol"
|
||||
],
|
||||
"MOP": [
|
||||
"MOP",
|
||||
"pataca de Macao"
|
||||
],
|
||||
"MRO": [
|
||||
"MRO",
|
||||
"ouguiya mauritano"
|
||||
@ -221,10 +181,6 @@
|
||||
"MVR",
|
||||
"rufiyaa de Maldivas"
|
||||
],
|
||||
"MWK": [
|
||||
"MWK",
|
||||
"kwacha malauí"
|
||||
],
|
||||
"MXN": [
|
||||
"$",
|
||||
"peso mexicano"
|
||||
@ -354,7 +310,7 @@
|
||||
"rand sudafricano"
|
||||
],
|
||||
"ZMW": [
|
||||
"ZMK",
|
||||
"ZMW",
|
||||
"kwacha zambiano"
|
||||
]
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"NIO": [
|
||||
"C$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"PAB": [
|
||||
"B\/.",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"PEN": [
|
||||
"S\/.",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"USD": [
|
||||
"$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"USD": [
|
||||
"$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.19",
|
||||
"Version": "2.1.13.23",
|
||||
"Names": {
|
||||
"JPY": [
|
||||
"¥",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.11.86",
|
||||
"Names": {
|
||||
"USD": [
|
||||
"US$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"AED": [
|
||||
"AED",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.12.94",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
@ -783,7 +783,7 @@
|
||||
],
|
||||
"XAF": [
|
||||
"FCFA",
|
||||
"فرانک CFA مرکز آفریقا"
|
||||
"فرانک CFA مرکز افریقا"
|
||||
],
|
||||
"XCD": [
|
||||
"$EC",
|
||||
@ -795,7 +795,7 @@
|
||||
],
|
||||
"XOF": [
|
||||
"CFA",
|
||||
"فرانک CFA غرب آفریقا"
|
||||
"فرانک CFA غرب افریقا"
|
||||
],
|
||||
"XPF": [
|
||||
"CFPF",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.6.69",
|
||||
"Version": "2.1.12.17",
|
||||
"Names": {
|
||||
"AUD": [
|
||||
"A$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Version": "2.1.8.9",
|
||||
"Version": "2.1.13.33",
|
||||
"Names": {
|
||||
"ADP": [
|
||||
"ADP",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user