diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 3d21822287b6b..d4dafb2aa0029 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,6 +1,6 @@
| Q | A
| ------------- | ---
-| Branch? | 7.3 for features / 6.4, 7.1, and 7.2 for bug fixes
+| Branch? | 7.4 for features / 6.4, 7.2, or 7.3 for bug fixes
| Bug fix? | yes/no
| New feature? | yes/no
| Deprecations? | yes/no
diff --git a/.github/build-packages.php b/.github/build-packages.php
index d69a3c8198ec0..4793b8483d7ed 100644
--- a/.github/build-packages.php
+++ b/.github/build-packages.php
@@ -1,5 +1,15 @@
'__unset' !== $v);
+ }, []);
+
+ return $expandedVersions ?? [];
+}
+
if (3 > $_SERVER['argc']) {
echo "Usage: branch version dir1 dir2 ... dirN\n";
exit(1);
@@ -52,11 +62,13 @@
$packages[$package->name][$package->version] = $package;
- $versions = @file_get_contents('https://repo.packagist.org/p/'.$package->name.'.json') ?: sprintf('{"packages":{"%s":{"%s":%s}}}', $package->name, $package->version, file_get_contents($dir.'/composer.json'));
- $versions = json_decode($versions)->packages->{$package->name};
+ foreach (['.json', '~dev.json'] as $ext) {
+ $versions = @file_get_contents('https://repo.packagist.org/p2/'.$package->name.$ext) ?: '[]';
+ $versions = json_decode($versions, true)['packages'][$package->name] ?? [];
- foreach ($versions as $v => $package) {
- $packages[$package->name] += [$v => $package];
+ foreach (expandComposerMetadata($versions) as $p) {
+ $packages[$package->name] += [$p['version'] => $p];
+ }
}
}
diff --git a/.github/expected-missing-return-types.diff b/.github/expected-missing-return-types.diff
index 20ae4c8f3e17e..9faed9a44dd73 100644
--- a/.github/expected-missing-return-types.diff
+++ b/.github/expected-missing-return-types.diff
@@ -177,6 +177,23 @@ diff --git a/src/Symfony/Component/DependencyInjection/Extension/PrependExtensio
- public function prepend(ContainerBuilder $container);
+ public function prepend(ContainerBuilder $container): void;
}
+diff --git a/src/Symfony/Component/Emoji/EmojiTransliterator.php b/src/Symfony/Component/Emoji/EmojiTransliterator.php
+--- a/src/Symfony/Component/Emoji/EmojiTransliterator.php
++++ b/src/Symfony/Component/Emoji/EmojiTransliterator.php
+@@ -88,5 +88,5 @@ final class EmojiTransliterator extends \Transliterator
+ */
+ #[\ReturnTypeWillChange]
+- public function getErrorCode(): int|false
++ public function getErrorCode(): int
+ {
+ return isset($this->transliterator) ? $this->transliterator->getErrorCode() : 0;
+@@ -97,5 +97,5 @@ final class EmojiTransliterator extends \Transliterator
+ */
+ #[\ReturnTypeWillChange]
+- public function getErrorMessage(): string|false
++ public function getErrorMessage(): string
+ {
+ return isset($this->transliterator) ? $this->transliterator->getErrorMessage() : '';
diff --git a/src/Symfony/Component/EventDispatcher/EventSubscriberInterface.php b/src/Symfony/Component/EventDispatcher/EventSubscriberInterface.php
--- a/src/Symfony/Component/EventDispatcher/EventSubscriberInterface.php
+++ b/src/Symfony/Component/EventDispatcher/EventSubscriberInterface.php
diff --git a/.github/get-modified-packages.php b/.github/get-modified-packages.php
index 11478cbe935c0..24de414fdd266 100644
--- a/.github/get-modified-packages.php
+++ b/.github/get-modified-packages.php
@@ -22,7 +22,7 @@ function getPackageType(string $packageDir): string
return match (true) {
str_contains($packageDir, 'Symfony/Bridge/') => 'bridge',
str_contains($packageDir, 'Symfony/Bundle/') => 'bundle',
- preg_match('@Symfony/Component/[^/]+/Bridge/@', $packageDir) => 'component_bridge',
+ 1 === preg_match('@Symfony/Component/[^/]+/Bridge/@', $packageDir) => 'component_bridge',
str_contains($packageDir, 'Symfony/Component/') => 'component',
str_contains($packageDir, 'Symfony/Contracts/') => 'contract',
str_ends_with($packageDir, 'Symfony/Contracts') => 'contracts',
diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml
index 11a64fd143362..a2a3f8853882a 100644
--- a/.github/workflows/integration-tests.yml
+++ b/.github/workflows/integration-tests.yml
@@ -19,7 +19,7 @@ jobs:
tests:
name: Integration
- runs-on: Ubuntu-20.04
+ runs-on: ubuntu-24.04
strategy:
matrix:
@@ -172,7 +172,7 @@ jobs:
run: |
echo "::group::apt-get update"
sudo wget -O - https://packages.couchbase.com/clients/c/repos/deb/couchbase.key | sudo apt-key add -
- echo "deb https://packages.couchbase.com/clients/c/repos/deb/ubuntu2004 focal focal/main" | sudo tee /etc/apt/sources.list.d/couchbase.list
+ echo "deb https://packages.couchbase.com/clients/c/repos/deb/ubuntu2404 noble noble/main" | sudo tee /etc/apt/sources.list.d/couchbase.list
sudo apt-get update
echo "::endgroup::"
diff --git a/.github/workflows/intl-data-tests.yml b/.github/workflows/intl-data-tests.yml
index a02bd73ac5b8f..193b3dd1df14d 100644
--- a/.github/workflows/intl-data-tests.yml
+++ b/.github/workflows/intl-data-tests.yml
@@ -36,7 +36,7 @@ permissions:
jobs:
tests:
name: Intl/Emoji data
- runs-on: Ubuntu-20.04
+ runs-on: ubuntu-24.04
steps:
- name: Checkout
diff --git a/.github/workflows/package-tests.yml b/.github/workflows/package-tests.yml
index bc6f8eec683c7..55d1c82e3661a 100644
--- a/.github/workflows/package-tests.yml
+++ b/.github/workflows/package-tests.yml
@@ -11,7 +11,7 @@ permissions:
jobs:
verify:
name: Verify Packages
- runs-on: Ubuntu-20.04
+ runs-on: ubuntu-24.04
steps:
- name: Checkout code
uses: actions/checkout@v4
diff --git a/.github/workflows/phpunit-bridge.yml b/.github/workflows/phpunit-bridge.yml
index ef6b86be43e09..5de320ee91c0e 100644
--- a/.github/workflows/phpunit-bridge.yml
+++ b/.github/workflows/phpunit-bridge.yml
@@ -22,7 +22,7 @@ permissions:
jobs:
lint:
name: Lint PhpUnitBridge
- runs-on: Ubuntu-20.04
+ runs-on: ubuntu-24.04
steps:
- name: Checkout
@@ -35,4 +35,4 @@ jobs:
php-version: "7.2"
- name: Lint
- run: find ./src/Symfony/Bridge/PhpUnit -name '*.php' | grep -v -e /Tests/ -e /Attribute/ -e /Extension/ -e /Metadata/ -e ForV7 -e ForV8 -e ForV9 -e ConstraintLogicTrait | parallel -j 4 php -l {}
+ run: find ./src/Symfony/Bridge/PhpUnit -name '*.php' | grep -v -e /Tests/ -e /Attribute/ -e /Extension/ -e /Metadata/ -e ForV7 -e ForV8 -e ForV9 -e ConstraintLogicTrait -e SymfonyExtension | parallel -j 4 php -l {}
diff --git a/.github/workflows/psalm.yml b/.github/workflows/psalm.yml
index a165d0c7dc126..33a5f58b44c6a 100644
--- a/.github/workflows/psalm.yml
+++ b/.github/workflows/psalm.yml
@@ -17,7 +17,7 @@ permissions:
jobs:
psalm:
name: Psalm
- runs-on: Ubuntu-20.04
+ runs-on: ubuntu-24.04
env:
php-version: '8.2'
diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml
index c2929a461dfef..1033e761a2d0b 100644
--- a/.github/workflows/scorecards.yml
+++ b/.github/workflows/scorecards.yml
@@ -6,7 +6,7 @@ on:
schedule:
- cron: '34 4 * * 6'
push:
- branches: [ "7.3" ]
+ branches: [ "7.4" ]
# Declare default permissions as read only.
permissions: read-all
@@ -14,7 +14,7 @@ permissions: read-all
jobs:
analysis:
name: Scorecards analysis
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
# Needed to upload the results to code-scanning dashboard.
security-events: write
@@ -26,38 +26,45 @@ jobs:
steps:
- name: "Checkout code"
- uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846 # v3.0.0
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: "Run analysis"
- uses: ossf/scorecard-action@3e15ea8318eee9b333819ec77a36aca8d39df13e # v1.1.1
+ uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1
with:
results_file: results.sarif
results_format: sarif
- # (Optional) Read-only PAT token. Uncomment the `repo_token` line below if:
+ # (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
# - you want to enable the Branch-Protection check on a *public* repository, or
- # - you are installing Scorecards on a *private* repository
- # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
- # repo_token: ${{ secrets.SCORECARD_READ_TOKEN }}
-
- # Publish the results for public repositories to enable scorecard badges. For more details, see
- # https://github.com/ossf/scorecard-action#publishing-results.
- # For private repositories, `publish_results` will automatically be set to `false`, regardless
- # of the value entered here.
+ # - you are installing Scorecard on a *private* repository
+ # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action?tab=readme-ov-file#authentication-with-fine-grained-pat-optional.
+ # repo_token: ${{ secrets.SCORECARD_TOKEN }}
+
+ # Public repositories:
+ # - Publish results to OpenSSF REST API for easy access by consumers
+ # - Allows the repository to include the Scorecard badge.
+ # - See https://github.com/ossf/scorecard-action#publishing-results.
+ # For private repositories:
+ # - `publish_results` will always be set to `false`, regardless
+ # of the value entered here.
publish_results: true
+ # (Optional) Uncomment file_mode if you have a .gitattributes with files marked export-ignore
+ # file_mode: git
+
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: "Upload artifact"
- uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
+ uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
with:
name: SARIF file
path: results.sarif
retention-days: 5
- # Upload the results to GitHub's code scanning dashboard.
+ # Upload the results to GitHub's code scanning dashboard (optional).
+ # Commenting out will disable upload of results to your repo's Code Scanning dashboard
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@5f532563584d71fdef14ee64d17bafb34f751ce5 # v1.0.26
+ uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
index d8d36c4e7e039..578b225ea6f17 100644
--- a/.github/workflows/unit-tests.yml
+++ b/.github/workflows/unit-tests.yml
@@ -21,7 +21,7 @@ jobs:
name: Unit Tests
env:
- extensions: amqp,apcu,igbinary,intl,mbstring,memcached,redis,relay
+ extensions: amqp,apcu,brotli,igbinary,intl,mbstring,memcached,redis,relay,zstd
strategy:
matrix:
@@ -33,14 +33,11 @@ jobs:
mode: low-deps
- php: '8.3'
- php: '8.4'
- # brotli and zstd extensions are optional, when not present the commands will be used instead,
- # we must test both scenarios
- extensions: amqp,apcu,brotli,igbinary,intl,mbstring,memcached,redis,relay,zstd
- php: '8.5'
#mode: experimental
fail-fast: false
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
steps:
- name: Checkout
@@ -101,7 +98,7 @@ jobs:
# Create local composer packages for each patched components and reference them in composer.json files when cross-testing components
if [[ ! "${{ matrix.mode }}" = *-deps ]]; then
- php .github/build-packages.php HEAD^ $SYMFONY_VERSION src/Symfony/Bridge/PhpUnit
+ php .github/build-packages.php HEAD^ $SYMFONY_VERSION src/Symfony/Bridge/PhpUnit
else
echo SYMFONY_DEPRECATIONS_HELPER=weak >> $GITHUB_ENV
cp composer.json composer.json.orig
@@ -139,10 +136,6 @@ jobs:
echo SYMFONY_REQUIRE=">=$([ '${{ matrix.mode }}' = low-deps ] && echo 5.4 || echo $SYMFONY_VERSION)" >> $GITHUB_ENV
[[ "${{ matrix.mode }}" = *-deps ]] && mv composer.json.phpunit composer.json || true
- if [[ "${{ matrix.mode }}" = low-deps ]]; then
- echo SYMFONY_PHPUNIT_REQUIRE="nikic/php-parser:^4.18" >> $GITHUB_ENV
- fi
-
- name: Install dependencies
run: |
echo "::group::composer update"
@@ -237,6 +230,12 @@ jobs:
run: |
script -e -c './phpunit --group tty' /dev/null
+ - name: Run AssetMapper without ext-brotli nor ext-zstd
+ if: "! matrix.mode"
+ run: |
+ sudo rm /etc/php/*/cli/conf.d/*-{brotli,zstd}.ini
+ ./phpunit src/Symfony/Component/AssetMapper
+
- name: Run tests with SIGCHLD enabled PHP
if: "matrix.php == '8.2' && ! matrix.mode"
run: |
diff --git a/CHANGELOG-7.2.md b/CHANGELOG-7.2.md
index 0bb8758194576..d6d188669de42 100644
--- a/CHANGELOG-7.2.md
+++ b/CHANGELOG-7.2.md
@@ -7,6 +7,58 @@ in 7.2 minor versions.
To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v7.2.0...v7.2.1
+* 7.2.7 (2025-05-29)
+
+ * bug #60549 [Translation] Add intl-icu fallback for MessageCatalogue metadata (pontus-mp)
+ * bug #60571 [ErrorHandler] Do not transform file to link if it does not exist (lyrixx)
+ * bug #60494 [Messenger] fix: Add argument as integer (overexpOG)
+ * bug #60524 [Notifier] Fix Clicksend transport (BafS)
+ * bug #60478 [Validator] add missing `$extensions` and `$extensionsMessage` to the `Image` constraint (xabbuh)
+ * bug #60484 [PhpUnitBridge] Clean up mocked features only when ``@group`` is present (HypeMC)
+ * bug #60490 [PhpUnitBridge] set path to the PHPUnit autoload file (xabbuh)
+ * bug #60423 [DependencyInjection] Make `DefinitionErrorExceptionPass` consider `IGNORE_ON_UNINITIALIZED_REFERENCE` and `RUNTIME_EXCEPTION_ON_INVALID_REFERENCE` the same (MatTheCat)
+ * bug #60439 [FrameworkBundle] Fix declaring field-attr tags in xml config files (nicolas-grekas)
+ * bug #60428 [DependencyInjection] Fix missing binding for ServiceCollectionInterface when declaring a service subscriber (nicolas-grekas)
+ * bug #60421 [VarExporter] Fixed lazy-loading ghost objects generation with property hooks (cheack)
+ * bug #60266 [Security] Exclude remember_me from default login authenticators (santysisi)
+ * bug #60400 [Config] Fix generated comment for multiline "info" (GromNaN)
+ * bug #60260 [Serializer] Prevent `Cannot traverse an already closed generator` error by materializing Traversable input (santysisi)
+ * bug #60292 [HttpFoundation] Encode path in `X-Accel-Redirect` header (Athorcis)
+ * bug #58643 [SecurityBundle] Use Composer `InstalledVersions` to check if flex is installed (andyexeter)
+ * bug #60275 [DoctrineBridge] Fix UniqueEntityValidator Stringable identifiers (GiuseppeArcuti, wkania)
+ * bug #60293 [Messenger] fix asking users to select an option if `--force` option is used in `messenger:failed:retry` command (W0rma)
+ * bug #60379 [Security] Avoid failing when PersistentRememberMeHandler handles a malformed cookie (Seldaek)
+ * bug #60373 [FrameworkBundle] Ensure `Email` class exists before using it (Kocal)
+ * bug #60365 [FrameworkBundle] ensure that all supported e-mail validation modes can be configured (xabbuh)
+ * bug #60350 [Security][LoginLink] Throw `InvalidLoginLinkException` on invalid parameters (davidszkiba)
+ * bug #60340 [String] fix EmojiTransliterator return type compatibility with PHP 8.5 (xabbuh)
+
+* 7.2.6 (2025-05-02)
+
+ * bug #60288 [VarExporter] dump default value for property hooks if present (xabbuh)
+ * bug #60267 [Contracts] Fix `ServiceMethodsSubscriberTrait` for nullable service (StevenRenaux)
+ * bug #60268 [Contracts] Fix `ServiceSubscriberTrait` for nullable service (StevenRenaux)
+ * bug #60256 [Mailer][Postmark] drop the `Date` header using the API transport (xabbuh)
+ * bug #60258 [VarExporter] Fix: Use correct closure call for property-specific logic in $notByRef (Hakayashii, denjas)
+ * bug #60269 [Notifier] [Discord] Fix value limits (norkunas)
+ * bug #60270 [Validator] [WordCount] Treat 0 as one character word and do not exclude it (sidz)
+ * bug #60248 [Messenger] Revert " Add call to `gc_collect_cycles()` after each message is handled" (jwage)
+ * bug #60236 [String] Support nexus -> nexuses pluralization (KorvinSzanto)
+ * bug #60238 [Lock] read (possible) error from Redis instance where evalSha() was called (xabbuh)
+ * bug #60194 [Workflow] Fix dispatch of entered event when the subject is already in this marking (lyrixx)
+ * bug #60174 [PhpUnitBridge] properly clean up mocked features after tests have run (xabbuh)
+ * bug #60172 [Cache] Fix invalidating on save failures with Array|ApcuAdapter (nicolas-grekas)
+ * bug #60122 [Cache] ArrayAdapter serialization exception clean $expiries (bastien-wink)
+ * bug #60167 [Cache] Fix proxying third party PSR-6 cache items (Dmitry Danilson)
+ * bug #60165 [HttpKernel] Do not ignore enum in controller arguments when it has an `#[Autowire]` attribute (ruudk)
+ * bug #60168 [Console] Correctly convert `SIGSYS` to its name (cs278)
+ * bug #60166 [Security] fix(security): fix OIDC user identifier (vincentchalamon)
+ * bug #60124 [Validator] : fix url validation when punycode is on tld but not on domain (joelwurtz)
+ * bug #60137 [Config] ResourceCheckerConfigCache metadata unserialize emits warning (Colin Michoudet)
+ * bug #60057 [Mailer] Fix `Trying to access array offset on value of type null` error by adding null checking (khushaalan)
+ * bug #60094 [DoctrineBridge] Fix support for entities that leverage native lazy objects (nicolas-grekas)
+ * bug #60094 [DoctrineBridge] Fix support for entities that leverage native lazy objects (nicolas-grekas)
+
* 7.2.5 (2025-03-28)
* bug #60054 [Form] Use duplicate_preferred_choices to set value of ChoiceType (aleho)
diff --git a/CHANGELOG-7.3.md b/CHANGELOG-7.3.md
new file mode 100644
index 0000000000000..bee0295a98485
--- /dev/null
+++ b/CHANGELOG-7.3.md
@@ -0,0 +1,248 @@
+CHANGELOG for 7.3.x
+===================
+
+This changelog references the relevant changes (bug and security fixes) done
+in 7.3 minor versions.
+
+To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
+To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v7.3.0...v7.3.1
+
+* 7.3.0 (2025-05-29)
+
+ * bug #60549 [Translation] Add intl-icu fallback for MessageCatalogue metadata (pontus-mp)
+ * bug #60571 [ErrorHandler] Do not transform file to link if it does not exist (lyrixx)
+ * bug #60542 [Webhook] Fix controller service name (HypeMC)
+
+* 7.3.0-RC1 (2025-05-25)
+
+ * bug #60529 [AssetMapper] Fix SequenceParser possible infinite loop (smnandre)
+ * bug #60532 [Routing] Fix inline default `null` (HypeMC)
+ * bug #60535 [DoctrineBridge] Fix resetting the manager when using native lazy objects (HypeMC)
+ * bug #60500 [PhpUnitBridge] Fix cleaning up mocked features with attributes (HypeMC)
+ * bug #60330 [FrameworkBundle] skip messenger deduplication middleware registration when no "default" lock is configured (lyrixx)
+ * bug #60494 [Messenger] fix: Add argument as integer (overexpOG)
+ * bug #60524 [Notifier] Fix Clicksend transport (BafS)
+ * bug #60479 [FrameworkBundle] object mapper service definition without form (soyuka)
+ * bug #60478 [Validator] add missing `$extensions` and `$extensionsMessage` to the `Image` constraint (xabbuh)
+ * bug #60491 [ObjectMapper] added earlier skip to allow if=false when using source mapping (maciekpaprocki)
+ * bug #60484 [PhpUnitBridge] Clean up mocked features only when ``@group`` is present (HypeMC)
+ * bug #60490 [PhpUnitBridge] set path to the PHPUnit autoload file (xabbuh)
+ * bug #60489 [FrameworkBundle] Fix activation strategy of traceable decorators (nicolas-grekas)
+ * feature #60475 [Validator] Revert Slug constraint (wouterj)
+ * feature #60105 [JsonPath] Add `JsonPathAssertionsTrait` and related constraints (alexandre-daubois)
+ * bug #60423 [DependencyInjection] Make `DefinitionErrorExceptionPass` consider `IGNORE_ON_UNINITIALIZED_REFERENCE` and `RUNTIME_EXCEPTION_ON_INVALID_REFERENCE` the same (MatTheCat)
+ * bug #60439 [FrameworkBundle] Fix declaring field-attr tags in xml config files (nicolas-grekas)
+ * bug #60428 [DependencyInjection] Fix missing binding for ServiceCollectionInterface when declaring a service subscriber (nicolas-grekas)
+ * bug #60426 [Validator] let the `SlugValidator` accept `AsciiSlugger` results (xabbuh)
+ * bug #60421 [VarExporter] Fixed lazy-loading ghost objects generation with property hooks (cheack)
+ * bug #60419 [SecurityBundle] normalize string values to a single ExposeSecurityLevel instance (xabbuh)
+ * bug #60266 [Security] Exclude remember_me from default login authenticators (santysisi)
+ * bug #60407 [Console] Invokable command `#[Option]` adjustments (kbond)
+ * bug #60400 [Config] Fix generated comment for multiline "info" (GromNaN)
+ * bug #60260 [Serializer] Prevent `Cannot traverse an already closed generator` error by materializing Traversable input (santysisi)
+ * bug #60292 [HttpFoundation] Encode path in `X-Accel-Redirect` header (Athorcis)
+ * bug #60401 Passing more than one Security attribute is not supported (santysisi)
+
+* 7.3.0-BETA2 (2025-05-10)
+
+ * bug #58643 [SecurityBundle] Use Composer `InstalledVersions` to check if flex is installed (andyexeter)
+ * feature #54276 [Workflow] Add support for executing custom workflow definition validators during the container compilation (lyrixx)
+ * feature #52981 [FrameworkBundle] Make `ValidatorCacheWarmer` and `SerializeCacheWarmer` use `kernel.build_dir` instead of `kernel.cache_dir` (Okhoshi)
+ * feature #54384 [TwigBundle] Use `kernel.build_dir` to store the templates known at build time (Okhoshi)
+ * bug #60275 [DoctrineBridge] Fix UniqueEntityValidator Stringable identifiers (GiuseppeArcuti, wkania)
+ * feature #59602 [Console] `#[Option]` rules & restrictions (kbond)
+ * feature #60389 [Console] Add support for `SignalableCommandInterface` with invokable commands (HypeMC)
+ * bug #60293 [Messenger] fix asking users to select an option if `--force` option is used in `messenger:failed:retry` command (W0rma)
+ * bug #60392 [DependencyInjection][FrameworkBundle] Fix precedence of `App\Kernel` alias and ignore `container.excluded` tag on synthetic services (nicolas-grekas)
+ * bug #60379 [Security] Avoid failing when PersistentRememberMeHandler handles a malformed cookie (Seldaek)
+ * bug #60308 [Messenger] Fix integration with newer versions of Pheanstalk (HypeMC)
+ * bug #60373 [FrameworkBundle] Ensure `Email` class exists before using it (Kocal)
+ * bug #60365 [FrameworkBundle] ensure that all supported e-mail validation modes can be configured (xabbuh)
+ * bug #60350 [Security][LoginLink] Throw `InvalidLoginLinkException` on invalid parameters (davidszkiba)
+ * bug #60366 [Console] Set description as first parameter to `Argument` and `Option` attributes (alamirault)
+ * bug #60361 [Console] Ensure overriding `Command::execute()` keeps priority over `__invoke()` (GromNaN)
+ * feature #60028 [ObjectMapper] Condition to target a specific class (soyuka)
+ * feature #60344 [Console] Use kebab-case for auto-guessed input arguments/options names (chalasr)
+ * bug #60340 [String] fix EmojiTransliterator return type compatibility with PHP 8.5 (xabbuh)
+ * bug #60322 [FrameworkBundle] drop the limiters option for non-compound rater limiters (xabbuh)
+
+* 7.3.0-BETA1 (2025-05-02)
+
+ * feature #60232 Add PHP config support for routing (fabpot)
+ * feature #60102 [HttpFoundation] Add `UriSigner::verify()` that throws named exceptions (kbond)
+ * feature #60222 [FrameworkBundle][HttpFoundation] Add Clock support for `UriSigner` (kbond)
+ * feature #60226 [Uid] Add component-specific exception classes (rela589n)
+ * feature #60163 [TwigBridge] Allow attachment name to be set for inline images (aleho)
+ * feature #60186 [DependencyInjection] Add "when" argument to #[AsAlias] (Zuruuh)
+ * feature #60195 [Workflow] Deprecate `Event::getWorkflow()` method (lyrixx)
+ * feature #60193 [Workflow] Add a link to mermaid.live from the profiler (lyrixx)
+ * feature #60188 [JsonPath] Add two utils methods to `JsonPath` builder (alexandre-daubois)
+ * feature #60018 [Messenger] Reset peak memory usage for each message (TimWolla)
+ * feature #60155 [FrameworkBundle][RateLimiter] compound rate limiter config (kbond)
+ * feature #60171 [FrameworkBundle][RateLimiter] deprecate `RateLimiterFactory` alias (kbond)
+ * feature #60139 [Runtime] Support extra dot-env files (natepage)
+ * feature #60140 Notifier mercure7.3 (ernie76)
+ * feature #59762 [Config] Add `NodeDefinition::docUrl()` (alexandre-daubois)
+ * feature #60099 [FrameworkBundle][RateLimiter] default `lock_factory` to `auto` (kbond)
+ * feature #60112 [DoctrineBridge] Improve exception message when `EntityValueResolver` gets no mapping information (MatTheCat)
+ * feature #60103 [Console] Mark `AsCommand` attribute as ``@final`` (Somrlik, GromNaN)
+ * feature #60069 [FrameworkBundle] Deprecate setting the `collect_serializer_data` to `false` (mtarld)
+ * feature #60087 [TypeInfo] add TypeFactoryTrait::arrayKey() (xabbuh)
+ * feature #42124 [Messenger] Add `$stamps` parameter to `HandleTrait::handle` (alexander-schranz)
+ * feature #58200 [Notifier] Deprecate sms77 Notifier bridge (MrYamous)
+ * feature #58380 [WebProfilerBundle] Update the logic that minimizes the toolbar (javiereguiluz)
+ * feature #60039 [TwigBridge] Collect all deprecations with `lint:twig` command (Fan2Shrek)
+ * feature #60081 [FrameworkBundle] Enable controller service with `#[Route]` attribute (GromNaN)
+ * feature #60076 [Console] Deprecate returning a non-int value from a `\Closure` function set via `Command::setCode()` (yceruto)
+ * feature #59655 [JsonPath] Add the component (alexandre-daubois)
+ * feature #58805 [TwigBridge][Validator] Add the Twig constraint and its validator (sfmok)
+ * feature #54275 [Messenger] [Amqp] Add default exchange support (ilyachase)
+ * feature #60052 [Mailer][TwigBridge] Revert "Add support for translatable objects" (kbond)
+ * feature #59967 [Mailer][TwigBridge] Add support for translatable subject (norkunas)
+ * feature #58654 [FrameworkBundle] Binding for Object Mapper component (soyuka)
+ * feature #60040 [Messenger] Use newer version of Beanstalkd bridge library (HypeMC)
+ * feature #52748 [TwigBundle] Enable `#[AsTwigFilter]`, `#[AsTwigFunction]` and `#[AsTwigTest]` attributes to configure runtime extensions (GromNaN)
+ * feature #59831 [Mailer][Mime] Refactor S/MIME encryption handling in `SMimeEncryptionListener` (Spomky)
+ * feature #59981 [TypeInfo] Add `ArrayShapeType::$sealed` (mtarld)
+ * feature #51741 [ObjectMapper] Object to Object mapper component (soyuka)
+ * feature #57309 [FrameworkBundle][HttpKernel] Allow configuring the logging channel per type of exceptions (Arkalo2)
+ * feature #60007 [Security] Add methods param in IsCsrfTokenValid attribute (Oviglo)
+ * feature #59900 [DoctrineBridge] add new `DatePointType` Doctrine type (garak)
+ * feature #59904 [Routing] Add alias in `{foo:bar}` syntax in route parameter (eltharin)
+ * feature #59978 [Messenger] Add `--class-filter` option to the `messenger:failed:remove` command (arnaud-deabreu)
+ * feature #60024 [Console] Add support for invokable commands in `LockableTrait` (yceruto)
+ * feature #59813 [Cache] Enable namespace-based invalidation by prefixing keys with backend-native namespace separators (nicolas-grekas)
+ * feature #59902 [PropertyInfo] Deprecate `Type` (mtarld, chalasr)
+ * feature #59890 [VarExporter] Leverage native lazy objects (nicolas-grekas)
+ * feature #54545 [DoctrineBridge] Add argument to `EntityValueResolver` to set type aliases (NanoSector)
+ * feature #60011 [DependencyInjection] Enable multiple attribute autoconfiguration callbacks on the same class (GromNaN)
+ * feature #60020 [FrameworkBundle] Make `ServicesResetter` autowirable (lyrixx)
+ * feature #59929 [RateLimiter] Add `CompoundRateLimiterFactory` (kbond)
+ * feature #59993 [Form] Add input with `string` value in `MoneyType` (StevenRenaux)
+ * feature #59987 [FrameworkBundle] Auto-exclude DI extensions, test cases, entities and messenger messages (nicolas-grekas)
+ * feature #59827 [TypeInfo] Add `ArrayShapeType` class (mtarld)
+ * feature #59909 [FrameworkBundle] Add `--method` option to `debug:router` command (santysisi)
+ * feature #59913 [DependencyInjection] Leverage native lazy objects for lazy services (nicolas-grekas)
+ * feature #53425 [Translation] Allow default parameters (Jean-Beru)
+ * feature #59464 [AssetMapper] Add `--dry-run` option on `importmap:require` command (chadyred)
+ * feature #59880 [Yaml] Add the `Yaml::DUMP_FORCE_DOUBLE_QUOTES_ON_VALUES` flag to enforce double quotes around string values (dkarlovi)
+ * feature #59922 [Routing] Add `MONGODB_ID` to requirement patterns (GromNaN)
+ * feature #59842 [TwigBridge] Add Twig `field_id()` form helper (Legendary4226)
+ * feature #59869 [Cache] Add support for `valkey:` / `valkeys:` schemes (nicolas-grekas)
+ * feature #59862 [Messenger] Allow to close the transport connection (andrew-demb)
+ * feature #59857 [Cache] Add `\Relay\Cluster` support (dorrogeray)
+ * feature #59863 [JsonEncoder] Rename the component to `JsonStreamer` (mtarld)
+ * feature #52749 [Serializer] Add discriminator map to debug commmand output (jschaedl)
+ * feature #59871 [Form] Add support for displaying nested options in `DebugCommand` (yceruto)
+ * feature #58769 [ErrorHandler] Add a command to dump static error pages (pyrech)
+ * feature #54932 [Security][SecurityBundle] OIDC discovery (vincentchalamon)
+ * feature #58485 [Validator] Add `filenameCharset` and `filenameCountUnit` options to `File` constraint (IssamRaouf)
+ * feature #59828 [Serializer] Add `defaultType` to `DiscriminatorMap` (alanpoulain)
+ * feature #59570 [Notifier][Webhook] Add Smsbox support (alanzarli)
+ * feature #50027 [Security] OAuth2 Introspection Endpoint (RFC7662) (Spomky)
+ * feature #57686 [Config] Allow using an enum FQCN with `EnumNode` (alexandre-daubois)
+ * feature #59588 [Console] Add a Tree Helper + multiple Styles (smnandre)
+ * feature #59618 [OptionsResolver] Deprecate defining nested options via `setDefault()` use `setOptions()` instead (yceruto)
+ * feature #59805 [Security] Improve DX of recent additions (nicolas-grekas)
+ * feature #59822 [Messenger] Add options to specify SQS queue attributes and tags (TrePe0)
+ * feature #59290 [JsonEncoder] Replace normalizers by value transformers (mtarld)
+ * feature #59800 [Validator] Add support for closures in `When` (alexandre-daubois)
+ * feature #59814 [Framework] Deprecate the `framework.validation.cache` config option (alexandre-daubois)
+ * feature #59804 [TypeInfo] Add type alias support (mtarld)
+ * feature #59150 [Security] Allow using a callable with `#[IsGranted]` (alexandre-daubois)
+ * feature #59789 [Notifier] [Bluesky] Return the record CID as additional info (javiereguiluz)
+ * feature #59526 [Messenger] [AMQP] Add TransportMessageIdStamp logic for AMQP (AurelienPillevesse)
+ * feature #59771 [Security] Add ability for voters to explain their vote (nicolas-grekas)
+ * feature #59768 [Messenger][Process] add `fromShellCommandline` to `RunProcessMessage` (Staormin)
+ * feature #59377 [Notifier] Add Matrix bridge (chii0815)
+ * feature #58488 [Serializer] Fix deserializing XML Attributes into string properties (Hanmac)
+ * feature #59657 [Console] Add markdown format to Table (amenk)
+ * feature #59274 [Validator] Allow Unique constraint validation on all elements (Jean-Beru)
+ * feature #59704 [DependencyInjection] Add `Definition::addExcludedTag()` and `ContainerBuilder::findExcludedServiceIds()` for auto-discovering value-objects (GromNaN)
+ * feature #49750 [FrameworkBundle] Allow to pass signals to `StopWorkerOnSignalsListener` in XML config and as plain strings (alexandre-daubois)
+ * feature #59479 [Mailer] [Smtp] Add DSN param to enforce TLS/STARTTLS (ssddanbrown)
+ * feature #59562 [Security] Support hashing the hashed password using crc32c when putting the user in the session (nicolas-grekas)
+ * feature #58501 [Mailer] Add configuration for dkim and smime signers (elias-playfinder, eliasfernandez)
+ * feature #52181 [Security] Ability to add roles in `form_login_ldap` by ldap group (Spomky)
+ * feature #59712 [DependencyInjection] Don't skip classes with private constructor when autodiscovering (nicolas-grekas)
+ * feature #50797 [FrameworkBundle][Validator] Add `framework.validation.disable_translation` option (alexandre-daubois)
+ * feature #49652 [Messenger] Add `bury_on_reject` option to Beanstalkd bridge (HypeMC)
+ * feature #51744 [Security] Add a normalization step for the user-identifier in firewalls (Spomky)
+ * feature #54141 [Messenger] Introduce `DeduplicateMiddleware` (VincentLanglet)
+ * feature #58546 [Scheduler] Add MessageHandler result to the `PostRunEvent` (bartholdbos)
+ * feature #58743 [HttpFoundation] Streamlining server event streaming (yceruto)
+ * feature #58939 [RateLimiter] Add `RateLimiterFactoryInterface` (alexandre-daubois)
+ * feature #58717 [HttpKernel] Support `Uid` in `#[MapQueryParameter]` (seb-jean)
+ * feature #59634 [Validator] Add support for the `otherwise` option in the `When` constraint (alexandre-daubois)
+ * feature #59670 [Serializer] Add `NumberNormalizer` (valtzu)
+ * feature #59679 [Scheduler] Normalize `TriggerInterface` as `string` (valtzu)
+ * feature #59641 [Serializer] register named normalizer & denormalizer aliases (mathroc)
+ * feature #59682 [Security] Deprecate UserInterface & TokenInterface's `eraseCredentials()` (chalasr, nicolas-grekas)
+ * feature #59667 [Notifier] [Bluesky] Allow to attach website preview card (ppoulpe)
+ * feature #58300 [Security][SecurityBundle] Show user account status errors (core23)
+ * feature #59630 [FrameworkBundle] Add support for info on `ArrayNodeDefinition::canBeEnabled()` and `ArrayNodeDefinition::canBeDisabled()` (alexandre-daubois)
+ * feature #59612 [Mailer] Add attachments support for Sweego Mailer Bridge (welcoMattic)
+ * feature #59302 [TypeInfo] Deprecate `CollectionType` as list and not as array (mtarld)
+ * feature #59481 [Notifier] Add SentMessage additional info (mRoca)
+ * feature #58819 [Routing] Allow aliases in `#[Route]` attribute (damienfern)
+ * feature #59004 [AssetMapper] Detect import with a sequence parser (smnandre)
+ * feature #59601 [Messenger] Add keepalive support (silasjoisten)
+ * feature #59536 [JsonEncoder] Allow to warm up object and list (mtarld)
+ * feature #59565 [Console] Deprecating Command getDefaultName and getDefaultDescription methods (yceruto)
+ * feature #59473 [Console] Add broader support for command "help" definition (yceruto)
+ * feature #54744 [Validator] deprecate the use of option arrays to configure validation constraints (xabbuh)
+ * feature #59493 [Console] Invokable command adjustments (yceruto)
+ * feature #59482 [Mailer] [Smtp] Add DSN option to make SocketStream bind to IPv4 (quilius)
+ * feature #57721 [Security][SecurityBundle] Add encryption support to OIDC tokens (Spomky)
+ * feature #58599 [Serializer] Add xml context option to ignore empty attributes (qdequippe)
+ * feature #59368 [TypeInfo] Add `TypeFactoryTrait::fromValue` method (mtarld)
+ * feature #59401 [JsonEncoder] Add `JsonEncodable` attribute (mtarld)
+ * feature #59123 [WebProfilerBundle] Extend web profiler listener & config for replace on ajax requests (chr-hertel)
+ * feature #59477 [Mailer][Notifier] Add and use `Dsn::getBooleanOption()` (OskarStark)
+ * feature #59474 [Console] Invokable command deprecations (yceruto)
+ * feature #59340 [Console] Add support for invokable commands and input attributes (yceruto)
+ * feature #59035 [VarDumper] Add casters for object-converted resources (alexandre-daubois)
+ * feature #59225 [FrameworkBundle] Always display service arguments & deprecate `--show-arguments` option for `debug:container` (Florian-Merle)
+ * feature #59384 [PhpUnitBridge] Enable configuring mock namespaces with attributes (HypeMC)
+ * feature #59370 [HttpClient] Allow using HTTP/3 with the `CurlHttpClient` (MatTheCat)
+ * feature #50334 [FrameworkBundle][PropertyInfo] Wire the `ConstructorExtractor` class (HypeMC)
+ * feature #59354 [OptionsResolver] Support union of types (VincentLanglet)
+ * feature #58542 [Validator] Add `Slug` constraint (raffaelecarelle)
+ * feature #59286 [Serializer] Deprecate the `CompiledClassMetadataFactory` (mtarld)
+ * feature #59257 [DependencyInjection] Support `@>` as a shorthand for `!service_closure` in YamlFileLoader (chx)
+ * feature #58545 [String] Add `AbstractString::pascal()` method (raffaelecarelle)
+ * feature #58559 [Validator] [DateTime] Add `format` to error messages (sauliusnord)
+ * feature #58564 [HttpKernel] Let Monolog handle the creation of log folder for improved readonly containers handling (shyim)
+ * feature #59360 [Messenger] Implement `KeepaliveReceiverInterface` in Redis bridge (HypeMC)
+ * feature #58698 [Mailer] Add AhaSend Bridge (farhadhf)
+ * feature #57632 [PropertyInfo] Add `PropertyDescriptionExtractorInterface` to `PhpStanExtractor` (mtarld)
+ * feature #58786 [Notifier] [Brevo][SMS] Brevo sms notifier add options (ikerib)
+ * feature #59273 [Messenger] Add `BeanstalkdPriorityStamp` to Beanstalkd bridge (HypeMC)
+ * feature #58761 [Mailer] [Amazon] Add support for custom headers in ses+api (StudioMaX)
+ * feature #54939 [Mailer] Add `retry_period` option for email transport (Sébastien Despont, fabpot)
+ * feature #59068 [HttpClient] Add IPv6 support to NativeHttpClient (dmitrii-baranov-tg)
+ * feature #59088 [DependencyInjection] Make `#[AsTaggedItem]` repeatable (alexandre-daubois)
+ * feature #59301 [Cache][HttpKernel] Add a `noStore` argument to the `#` attribute (smnandre)
+ * feature #59315 [Yaml] Add compact nested mapping support to `Dumper` (gr8b)
+ * feature #59325 [Config] Add `ifFalse()` (OskarStark)
+ * feature #58243 [Yaml] Add support for dumping `null` as an empty value by using the `Yaml::DUMP_NULL_AS_EMPTY` flag (alexandre-daubois)
+ * feature #59291 [TypeInfo] Add `accepts` method (mtarld)
+ * feature #59265 [Validator] Validate SVG ratio in Image validator (maximecolin)
+ * feature #59129 [SecurityBundle][TwigBridge] Add `is_granted_for_user()` function (natewiebe13)
+ * feature #59254 [JsonEncoder] Remove chunk size definition (mtarld)
+ * feature #59022 [HttpFoundation] Generate url-safe hashes for signed urls (valtzu)
+ * feature #59177 [JsonEncoder] Add native lazyghost support (mtarld)
+ * feature #59192 [PropertyInfo] Add non-*-int missing types for PhpStanExtractor (wuchen90)
+ * feature #58515 [FrameworkBundle][JsonEncoder] Wire services (mtarld)
+ * feature #59157 [HttpKernel] [MapQueryString] added key argument to MapQueryString attribute (feymo)
+ * feature #59154 [HttpFoundation] Support iterable of string in `StreamedResponse` (mtarld)
+ * feature #51718 [Serializer] [JsonEncoder] Introducing the component (mtarld)
+ * feature #58946 [Console] Add support of millisecondes for `formatTime` (SebLevDev)
+ * feature #48142 [Security][SecurityBundle] User authorization checker (natewiebe13)
+ * feature #59075 [Uid] Add ``@return` non-empty-string` annotations to `AbstractUid` and relevant functions (niravpateljoin)
+ * feature #59114 [ErrorHandler] support non-empty-string/non-empty-list when patching return types (xabbuh)
+ * feature #59020 [AssetMapper] add support for assets pre-compression (dunglas)
+ * feature #58651 [Mailer][Notifier] Add webhooks signature verification on Sweego bridges (welcoMattic)
+ * feature #59026 [VarDumper] Add caster for Socket instances (nicolas-grekas)
+ * feature #58989 [VarDumper] Add caster for `AddressInfo` objects (nicolas-grekas)
+
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index ffc3b6feae6fd..3e7f5ec2b6e78 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -30,16 +30,16 @@ The Symfony Connect username in parenthesis allows to get more information
- Kris Wallsmith (kriswallsmith)
- Jakub Zalas (jakubzalas)
- Yonel Ceruto (yonelceruto)
+ - HypeMC (hypemc)
- Hugo Hamon (hhamon)
- Tobias Nyholm (tobias)
- - HypeMC (hypemc)
- Jérôme Tamarelle (gromnan)
- Antoine Lamirault (alamirault)
- Samuel ROZE (sroze)
- Pascal Borreli (pborreli)
- Romain Neutron
- - Joseph Bielawski (stloyd)
- Kevin Bond (kbond)
+ - Joseph Bielawski (stloyd)
- Drak (drak)
- Abdellatif Ait boudad (aitboudad)
- Lukas Kahwe Smith (lsmith)
@@ -79,8 +79,8 @@ The Symfony Connect username in parenthesis allows to get more information
- Iltar van der Berg
- Miha Vrhovnik (mvrhov)
- Gary PEGEOT (gary-p)
- - Saša Stamenković (umpirsky)
- Alexander Schranz (alexander-schranz)
+ - Saša Stamenković (umpirsky)
- Allison Guilhem (a_guilhem)
- Mathieu Piot (mpiot)
- Vasilij Duško (staff)
@@ -94,10 +94,10 @@ The Symfony Connect username in parenthesis allows to get more information
- Vladimir Reznichenko (kalessil)
- Peter Rehm (rpet)
- Henrik Bjørnskov (henrikbjorn)
- - David Buchmann (dbu)
- Ruud Kamphuis (ruudk)
- - Andrej Hudec (pulzarraider)
+ - David Buchmann (dbu)
- Tomas Norkūnas (norkunas)
+ - Andrej Hudec (pulzarraider)
- Jáchym Toušek (enumag)
- Hubert Lenoir (hubert_lenoir)
- Christian Raue
@@ -111,14 +111,14 @@ The Symfony Connect username in parenthesis allows to get more information
- Frank A. Fiebig (fafiebig)
- Baldini
- Fran Moreno (franmomu)
+ - Antoine Makdessi (amakdessi)
- Charles Sarrazin (csarrazi)
- Henrik Westphal (snc)
- Dariusz Górecki (canni)
- - Antoine Makdessi (amakdessi)
- Ener-Getick
- Graham Campbell (graham)
- - Massimiliano Arione (garak)
- Joel Wurtz (brouznouf)
+ - Massimiliano Arione (garak)
- Tugdual Saunier (tucksaun)
- Lee McDermott
- Brandon Turner
@@ -160,12 +160,13 @@ The Symfony Connect username in parenthesis allows to get more information
- Włodzimierz Gajda (gajdaw)
- Javier Spagnoletti (phansys)
- Adrien Brault (adrienbrault)
+ - Florent Morselli (spomky_)
+ - soyuka
- Florian Voutzinos (florianv)
- Teoh Han Hui (teohhanhui)
- Przemysław Bogusz (przemyslaw-bogusz)
- Colin Frei
- excelwebzone
- - Florent Morselli (spomky_)
- Paráda József (paradajozsef)
- Maximilian Beckers (maxbeckers)
- Baptiste Clavié (talus)
@@ -178,13 +179,13 @@ The Symfony Connect username in parenthesis allows to get more information
- jeremyFreeAgent (jeremyfreeagent)
- Michael Babker (mbabker)
- Alexis Lefebvre
+ - Hugo Alliaume (kocal)
- Christopher Hertel (chertel)
- Joshua Thijssen
- Vasilij Dusko
- Daniel Wehner (dawehner)
- Robert Schönthal (digitalkaoz)
- Smaine Milianni (ismail1432)
- - Hugo Alliaume (kocal)
- François-Xavier de Guillebon (de-gui_f)
- Andreas Schempp (aschempp)
- noniagriconomie
@@ -195,7 +196,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Niels Keurentjes (curry684)
- OGAWA Katsuhiro (fivestar)
- Jhonny Lidfors (jhonne)
- - soyuka
- Juti Noppornpitak (shiroyuki)
- Gregor Harlan (gharlan)
- Anthony MARTIN
@@ -255,6 +255,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Alessandro Lai (jean85)
- 77web
- Gocha Ossinkine (ossinkine)
+ - matlec
- Jesse Rushlow (geeshoe)
- Matthieu Ouellette-Vachon (maoueh)
- Michał Pipa (michal.pipa)
@@ -277,6 +278,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Sébastien Alfaiate (seb33300)
- James Halsall (jaitsu)
- Christian Scheb
+ - Alex Hofbauer (alexhofbauer)
- Mikael Pajunen
- Warnar Boekkooi (boekkooi)
- Justin Hileman (bobthecow)
@@ -302,11 +304,13 @@ The Symfony Connect username in parenthesis allows to get more information
- DQNEO
- Chi-teck
- Marko Kaznovac (kaznovac)
+ - Stiven Llupa (sllupa)
- Andre Rømcke (andrerom)
- Bram Leeda (bram123)
- Patrick Landolt (scube)
- Karoly Gossler (connorhu)
- Timo Bakx (timobakx)
+ - Quentin Devos
- Giorgio Premi
- Alan Poulain (alanpoulain)
- Ruben Gonzalez (rubenrua)
@@ -327,20 +331,21 @@ The Symfony Connect username in parenthesis allows to get more information
- Stadly
- Stepan Anchugov (kix)
- bronze1man
- - matlec
- sun (sun)
+ - Filippo Tessarotto (slamdunk)
- Larry Garfield (crell)
- Leo Feyer
- Nikolay Labinskiy (e-moe)
- Martin Schuhfuß (usefulthink)
- apetitpa
+ - wkania
- Guilliam Xavier
- Pierre Minnieur (pminnieur)
- Dominique Bongiraud
- - Stiven Llupa (sllupa)
- Hugo Monteiro (monteiro)
- Dmitrii Poddubnyi (karser)
- Julien Pauli
+ - Jonathan H. Wage
- Michael Lee (zerustech)
- Florian Lonqueu-Brochard (florianlb)
- Joe Bennett (kralos)
@@ -364,11 +369,9 @@ The Symfony Connect username in parenthesis allows to get more information
- Arjen van der Meijden
- Sven Paulus (subsven)
- Peter Kruithof (pkruithof)
- - Alex Hofbauer (alexhofbauer)
- Maxime Veber (nek-)
- Valentine Boineau (valentineboineau)
- Rui Marinho (ruimarinho)
- - Filippo Tessarotto (slamdunk)
- Jeroen Noten (jeroennoten)
- Possum
- Jérémie Augustin (jaugustin)
@@ -376,6 +379,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Pascal Montoya
- Julien Brochet
- François Pluchino (francoispluchino)
+ - W0rma
- Tristan Darricau (tristandsensio)
- Jan Sorgalla (jsor)
- henrikbjorn
@@ -386,7 +390,6 @@ The Symfony Connect username in parenthesis allows to get more information
- dFayet
- Rob Frawley 2nd (robfrawley)
- Renan (renanbr)
- - Jonathan H. Wage
- Nikita Konstantinov (unkind)
- Dariusz
- Daniel Gorgan
@@ -395,12 +398,12 @@ The Symfony Connect username in parenthesis allows to get more information
- Daniel Tschinder
- Christian Schmidt
- Alexander Kotynia (olden)
+ - Matthieu Lempereur (mryamous)
- Elnur Abdurrakhimov (elnur)
- Manuel Reinhard (sprain)
- Zan Baldwin (zanbaldwin)
- Tim Goudriaan (codedmonkey)
- BoShurik
- - Quentin Devos
- Adam Prager (padam87)
- Benoît Burnichon (bburnichon)
- maxime.steinhausser
@@ -426,7 +429,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Sullivan SENECHAL (soullivaneuh)
- Uwe Jäger (uwej711)
- javaDeveloperKid
- - W0rma
+ - Chris Smith (cs278)
- Lynn van der Berg (kjarli)
- Michaël Perrin (michael.perrin)
- Eugene Leonovich (rybakit)
@@ -436,6 +439,7 @@ The Symfony Connect username in parenthesis allows to get more information
- GordonsLondon
- Ray
- Philipp Cordes (corphi)
+ - Fabien S (bafs)
- Chekote
- Thomas Adam
- Anderson Müller
@@ -461,7 +465,6 @@ The Symfony Connect username in parenthesis allows to get more information
- renanbr
- Sébastien Lavoie (lavoiesl)
- Alex Rock (pierstoval)
- - Matthieu Lempereur (mryamous)
- Wodor Wodorski
- Beau Simensen (simensen)
- Magnus Nordlander (magnusnordlander)
@@ -470,6 +473,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Marcos Sánchez
- Emanuele Panzeri (thepanz)
- Zmey
+ - Santiago San Martin (santysisi)
- Kim Hemsø Rasmussen (kimhemsoe)
- Maximilian Reichel (phramz)
- Samaël Villette (samadu61)
@@ -489,14 +493,15 @@ The Symfony Connect username in parenthesis allows to get more information
- Bohan Yang (brentybh)
- Vilius Grigaliūnas
- Jordane VASPARD (elementaire)
- - Chris Smith (cs278)
- Thomas Bisignani (toma)
- Florian Klein (docteurklein)
+ - Pierre Ambroise (dotordu)
- Raphaël Geffroy (raphael-geffroy)
- Damien Alexandre (damienalexandre)
- Manuel Kießling (manuelkiessling)
- Alexey Kopytko (sanmai)
- Warxcell (warxcell)
+ - SiD (plbsid)
- Atsuhiro KUBO (iteman)
- rudy onfroy (ronfroy)
- Serkan Yildiz (srknyldz)
@@ -506,7 +511,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Gabor Toth (tgabi333)
- realmfoo
- Joppe De Cuyper (joppedc)
- - Fabien S (bafs)
- Simon Podlipsky (simpod)
- Thomas Tourlourat (armetiz)
- Andrey Esaulov (andremaha)
@@ -542,6 +546,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Ahmed Raafat
- Philippe Segatori
- Thibaut Cheymol (tcheymol)
+ - Vincent Chalamon
- Raffaele Carelle
- Erin Millard
- Matthew Lewinski (lewinski)
@@ -583,6 +588,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Daniel STANCU
- Kristen Gilden
- Robbert Klarenbeek (robbertkl)
+ - Dalibor Karlović
- Hamza Makraz (makraz)
- Eric Masoero (eric-masoero)
- Vitalii Ekert (comrade42)
@@ -609,7 +615,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Alex (aik099)
- Kieran Brahney
- Fabien Villepinte
- - SiD (plbsid)
- Greg Thornton (xdissent)
- Alex Bowers
- Kev
@@ -635,7 +640,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Ivan Sarastov (isarastov)
- flack (flack)
- Shein Alexey
- - Pierre Ambroise (dotordu)
+ - Link1515
- Joe Lencioni
- Daniel Tschinder
- Diego Agulló (aeoris)
@@ -658,6 +663,7 @@ The Symfony Connect username in parenthesis allows to get more information
- a.dmitryuk
- Anthon Pang (robocoder)
- Julien Galenski (ruian)
+ - Benjamin Morel
- Ben Scott (bpscott)
- Shyim
- Pablo Lozano (arkadis)
@@ -697,7 +703,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Neil Peyssard (nepey)
- Niklas Fiekas
- Mark Challoner (markchalloner)
- - Vincent Chalamon
- Andreas Hennings
- Markus Bachmann (baachi)
- Gunnstein Lye (glye)
@@ -713,6 +718,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Ivan Nikolaev (destillat)
- Gildas Quéméner (gquemener)
- Ioan Ovidiu Enache (ionutenache)
+ - Mokhtar Tlili (sf-djuba)
- Maxim Dovydenok (dovydenok-maxim)
- Laurent Masforné (heisenberg)
- Claude Khedhiri (ck-developer)
@@ -755,6 +761,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Jérémy REYNAUD (babeuloula)
- Faizan Akram Dar (faizanakram)
- Arkadius Stefanski (arkadius)
+ - Andy Palmer (andyexeter)
- Jonas Flodén (flojon)
- AnneKir
- Tobias Weichart
@@ -762,7 +769,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Tristan Pouliquen
- Miro Michalicka
- Hans Mackowiak
- - Dalibor Karlović
- M. Vondano
- Dominik Zogg
- Maximilian Zumbansen
@@ -779,6 +785,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Giso Stallenberg (gisostallenberg)
- Rob Bast
- Roberto Espinoza (respinoza)
+ - Steven RENAUX (steven_renaux)
- Marvin Feldmann (breyndotechse)
- Soufian EZ ZANTAR (soezz)
- Marek Zajac
@@ -865,7 +872,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Dariusz Ruminski
- Bahman Mehrdad (bahman)
- Romain Gautier (mykiwi)
- - Link1515
- Matthieu Bontemps
- Erik Trapman
- De Cock Xavier (xdecock)
@@ -936,7 +942,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Forfarle (forfarle)
- Johnny Robeson (johnny)
- Disquedur
- - Benjamin Morel
- Guilherme Ferreira
- Geoffrey Tran (geoff)
- Jannik Zschiesche
@@ -1003,12 +1008,12 @@ The Symfony Connect username in parenthesis allows to get more information
- Alexandre Dupuy (satchette)
- Michel Hunziker
- Malte Blättermann
+ - Ilya Levin (ilyachase)
- Simeon Kolev (simeon_kolev9)
- Joost van Driel (j92)
- Jonas Elfering
- Mihai Stancu
- Nahuel Cuesta (ncuesta)
- - Santiago San Martin
- Chris Boden (cboden)
- EStyles (insidestyles)
- Christophe Villeger (seragan)
@@ -1063,7 +1068,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Pierrick VIGNAND (pierrick)
- Alex Bogomazov (alebo)
- aaa2000 (aaa2000)
- - Andy Palmer (andyexeter)
- Andrew Neil Forster (krciga22)
- Stefan Warman (warmans)
- Tristan Maindron (tmaindron)
@@ -1101,6 +1105,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Kevin SCHNEKENBURGER
- Geordie
- Fabien Salles (blacked)
+ - Tim Düsterhus
- Andreas Erhard (andaris)
- alexpozzi
- Michael Devery (mickadoo)
@@ -1112,6 +1117,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Luca Saba (lucasaba)
- Sascha Grossenbacher (berdir)
- Guillaume Aveline
+ - nathanpage
- Robin Lehrmann
- Szijarto Tamas
- Thomas P
@@ -1491,7 +1497,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Johnson Page (jwpage)
- Kuba Werłos (kuba)
- Ruben Gonzalez (rubenruateltek)
- - Mokhtar Tlili (sf-djuba)
- Michael Roterman (wtfzdotnet)
- Philipp Keck
- Pavol Tuka
@@ -1507,6 +1512,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Dominik Ulrich
- den
- Gábor Tóth
+ - Bastien THOMAS
- ouardisoft
- Daniel Cestari
- Matt Janssen
@@ -1672,13 +1678,13 @@ The Symfony Connect username in parenthesis allows to get more information
- Chris de Kok
- Eduard Bulava (nonanerz)
- Andreas Kleemann (andesk)
- - Ilya Levin (ilyachase)
- Hubert Moreau (hmoreau)
- Nicolas Appriou
- Silas Joisten (silasjoisten)
- Igor Timoshenko (igor.timoshenko)
- Pierre-Emmanuel CAPEL
- Manuele Menozzi
+ - Yevhen Sidelnyk
- “teerasak”
- Anton Babenko (antonbabenko)
- Irmantas Šiupšinskas (irmantas)
@@ -1707,6 +1713,7 @@ The Symfony Connect username in parenthesis allows to get more information
- hamza
- dantleech
- Kajetan Kołtuniak (kajtii)
+ - Dan (dantleech)
- Sander Goossens (sandergo90)
- Rudy Onfroy
- Tero Alén (tero)
@@ -1860,6 +1867,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Philipp Fritsche
- Léon Gersen
- tarlepp
+ - Giuseppe Arcuti
- Dustin Wilson
- Benjamin Paap (benjaminpaap)
- Claus Due (namelesscoder)
@@ -1953,7 +1961,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Bruno MATEU
- Jeremy Bush
- Lucas Bäuerle
- - Steven RENAUX (steven_renaux)
- Laurens Laman
- Thomason, James
- Dario Savella
@@ -1964,6 +1971,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Peter Trebaticky
- Moza Bogdan (bogdan_moza)
- Viacheslav Sychov
+ - Zuruuh
- Nicolas Sauveur (baishu)
- Helmut Hummel (helhum)
- Matt Brunt
@@ -2015,6 +2023,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Rémi Leclerc
- Jan Vernarsky
- Ionut Cioflan
+ - John Edmerson Pizarra
- Sergio
- Jonas Hünig
- Mehrdad
@@ -2188,6 +2197,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Tim Ward
- Adiel Cristo (arcristo)
- Christian Flach (cmfcmf)
+ - Dennis Jaschinski (d.jaschinski)
- Fabian Kropfhamer (fabiank)
- Jeffrey Cafferata (jcidnl)
- Junaid Farooq (junaidfarooq)
@@ -2257,6 +2267,7 @@ The Symfony Connect username in parenthesis allows to get more information
- wivaku
- Markus Reinhold
- Jingyu Wang
+ - es
- steveYeah
- Asrorbek (asrorbek)
- Samy D (dinduks)
@@ -2271,6 +2282,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Alan Scott
- Juanmi Rodriguez Cerón
- twifty
+ - David Szkiba
- Andy Raines
- François Poguet
- Anthony Ferrara
@@ -2289,6 +2301,7 @@ The Symfony Connect username in parenthesis allows to get more information
- xdavidwu
- Benjamin RICHARD
- Raphaël Droz
+ - Vladimir Pakhomchik
- pdommelen
- Eric Stern
- ShiraNai7
@@ -2367,6 +2380,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Tom Corrigan (tomcorrigan)
- Luis Galeas
- Bogdan Scordaliu
+ - Sven Scholz
- Martin Pärtel
- Daniel Rotter (danrot)
- Frédéric Bouchery (fbouchery)
@@ -2572,6 +2586,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Benhssaein Youssef
- Benoit Leveque
- bill moll
+ - chillbram
- Benjamin Bender
- PaoRuby
- Holger Lösken
@@ -2701,6 +2716,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Marcel Siegert
- ryunosuke
- Bruno BOUTAREL
+ - Athorcis
- John Stevenson
- everyx
- Richard Heine
@@ -2758,6 +2774,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Abdouarrahmane FOUAD (fabdouarrahmane)
- Jakub Janata (janatjak)
- Jm Aribau (jmaribau)
+ - Maciej Paprocki (maciekpaprocki)
- Matthew Foster (mfoster)
- Paul Seiffert (seiffert)
- Vasily Khayrulin (sirian)
@@ -2866,7 +2883,6 @@ The Symfony Connect username in parenthesis allows to get more information
- fabi
- Grayson Koonce
- Ruben Jansen
- - nathanpage
- Wissame MEKHILEF
- Mihai Stancu
- shreypuranik
@@ -3106,6 +3122,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Darryl Hein (xmmedia)
- Vladimir Sadicov (xtech)
- Marcel Berteler
+ - Ruud Seberechts
- sdkawata
- Frederik Schmitt
- Peter van Dommelen
@@ -3143,6 +3160,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Pierre Rineau
- Florian Morello
- Maxim Lovchikov
+ - ivelin vasilev
- adenkejawen
- Florent SEVESTRE (aniki-taicho)
- Ari Pringle (apringle)
@@ -3161,6 +3179,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Ashura
- Götz Gottwald
- Alessandra Lai
+ - timesince
- alangvazq
- Christoph Krapp
- Ernest Hymel
@@ -3197,7 +3216,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Buster Neece
- Albert Prat
- Alessandro Loffredo
- - Tim Düsterhus
- Ian Phillips
- Carlos Tasada
- Remi Collet
@@ -3319,6 +3337,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Kevin Verschaeve (keversc)
- Kevin Herrera (kherge)
- Kubicki Kamil (kubik)
+ - Lauris Binde (laurisb)
- Luis Ramón López López (lrlopez)
- Vladislav Nikolayev (luxemate)
- Martin Mandl (m2mtech)
@@ -3357,11 +3376,13 @@ The Symfony Connect username in parenthesis allows to get more information
- Pavel Barton
- Exploit.cz
- GuillaumeVerdon
+ - Dmitry Danilson
- Marien Fressinaud
- ureimers
- akimsko
- Youpie
- Jason Stephens
+ - Korvin Szanto
- srsbiz
- Taylan Kasap
- Michael Orlitzky
@@ -3392,6 +3413,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Evgeniy Koval
- Lars Moelleken
- dasmfm
+ - Karel Syrový
- Claas Augner
- Mathias Geat
- neodevcode
@@ -3445,6 +3467,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Sylvain Lorinet
- Pavol Tuka
- klyk50
+ - Colin Michoudet
- jc
- BenjaminBeck
- Aurelijus Rožėnas
@@ -3474,6 +3497,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Philipp
- lol768
- jamogon
+ - Tom Hart
- Vyacheslav Slinko
- Benjamin Laugueux
- guangwu
@@ -3571,6 +3595,7 @@ The Symfony Connect username in parenthesis allows to get more information
- mieszko4
- Steve Preston
- ibasaw
+ - koyolgecen
- Wojciech Skorodecki
- Kevin Frantz
- Neophy7e
@@ -3580,7 +3605,6 @@ The Symfony Connect username in parenthesis allows to get more information
- andrey-tech
- David Ronchaud
- Chris McGehee
- - Bastien THOMAS
- Shaun Simmons
- Pierre-Louis LAUNAY
- Arseny Razin
@@ -3601,6 +3625,7 @@ The Symfony Connect username in parenthesis allows to get more information
- satalaondrej
- Matthias Dötsch
- jonmldr
+ - Nowfel2501
- Yevgen Kovalienia
- Lebnik
- Shude
@@ -3622,6 +3647,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Egor Gorbachev
- Julian Krzefski
- Derek Stephen McLean
+ - PatrickRedStar
- Norman Soetbeer
- zorn
- Yuriy Potemkin
@@ -3731,6 +3757,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Brandon Kelly (brandonkelly)
- Choong Wei Tjeng (choonge)
- Bermon Clément (chou666)
+ - Chris Shennan (chrisshennan)
- Citia (citia)
- Kousuke Ebihara (co3k)
- Loïc Vernet (coil)
@@ -3893,6 +3920,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Romain
- Xavier REN
- Kevin Meijer
+ - Ignacio Alveal
- max
- Alexander Bauer (abauer)
- Ahmad Mayahi (ahmadmayahi)
diff --git a/UPGRADE-7.3.md b/UPGRADE-7.3.md
index 5652ce639f19d..5fa4d18677279 100644
--- a/UPGRADE-7.3.md
+++ b/UPGRADE-7.3.md
@@ -8,6 +8,37 @@ Read more about this in the [Symfony documentation](https://symfony.com/doc/7.3/
If you're upgrading from a version below 7.2, follow the [7.2 upgrade guide](UPGRADE-7.2.md) first.
+Table of Contents
+-----------------
+
+Bundles
+
+ * [FrameworkBundle](#FrameworkBundle)
+ * [SecurityBundle](#SecurityBundle)
+ * [WebProfilerBundle](#WebProfilerBundle)
+
+Bridges
+
+ * [DoctrineBridge](#DoctrineBridge)
+
+Components
+
+ * [AssetMapper](#AssetMapper)
+ * [Console](#Console)
+ * [DependencyInjection](#DependencyInjection)
+ * [HttpFoundation](#HttpFoundation)
+ * [Ldap](#Ldap)
+ * [OptionsResolver](#OptionsResolver)
+ * [PropertyInfo](#PropertyInfo)
+ * [Security](#Security)
+ * [Notifier](#Notifier)
+ * [Serializer](#Serializer)
+ * [TypeInfo](#TypeInfo)
+ * [Validator](#Validator)
+ * [VarDumper](#VarDumper)
+ * [VarExporter](#VarExporter)
+ * [Workflow](#Workflow)
+
AssetMapper
-----------
@@ -59,6 +90,7 @@ FrameworkBundle
because its default value will change in version 8.0
* Deprecate the `--show-arguments` option of the `container:debug` command, as arguments are now always shown
* Deprecate the `framework.validation.cache` config option
+ * Deprecate the `RateLimiterFactory` autowiring aliases, use `RateLimiterFactoryInterface` instead
* Deprecate setting the `framework.profiler.collect_serializer_data` config option to `false`
When set to `true`, normalizers must be injected using the `NormalizerInterface`, and not using any concrete implementation.
@@ -75,6 +107,40 @@ FrameworkBundle
public function __construct(#[Autowire('@serializer.normalizer.object')] NormalizerInterface $normalizer) {}
```
+ * The XML routing configuration files (`errors.xml` and `webhook.xml`) are
+ deprecated, use their PHP equivalent ones:
+
+ Before:
+
+ ```yaml
+ when@dev:
+ _errors:
+ resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
+ prefix: /_error
+
+ webhook:
+ resource: '@FrameworkBundle/Resources/config/routing/webhook.xml'
+ prefix: /webhook
+ ```
+
+ After:
+
+ ```yaml
+ when@dev:
+ _errors:
+ resource: '@FrameworkBundle/Resources/config/routing/errors.php'
+ prefix: /_error
+
+ webhook:
+ resource: '@FrameworkBundle/Resources/config/routing/webhook.php'
+ prefix: /webhook
+ ```
+
+HttpFoundation
+--------------
+
+ * `Request::getPreferredLanguage()` now favors a more preferred language above exactly matching a locale
+
Ldap
----
@@ -144,9 +210,7 @@ Security
```php
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token, ?Vote $vote = null): bool
{
- $vote ??= new Vote();
-
- $vote->reasons[] = 'A brief explanation of why access is granted or denied, as appropriate.';
+ $vote?->addReason('A brief explanation of why access is granted or denied, as appropriate.');
}
```
@@ -160,8 +224,8 @@ SecurityBundle
* Deprecate the `security.hide_user_not_found` config option in favor of `security.expose_security_errors`
- Notifier
- --------
+Notifier
+--------
* Deprecate the `Sms77` transport, use `SevenIo` instead
@@ -170,6 +234,12 @@ Serializer
* Deprecate the `CompiledClassMetadataFactory` and `CompiledClassMetadataCacheWarmer` classes
+TypeInfo
+--------
+
+ * Deprecate constructing a `CollectionType` instance as a list that is not an array
+ * Deprecate the third `$asList` argument of `TypeFactoryTrait::iterable()`, use `TypeFactoryTrait::list()` instead
+
Validator
---------
@@ -225,12 +295,6 @@ Validator
)
```
-TypeInfo
---------
-
- * Deprecate constructing a `CollectionType` instance as a list that is not an array
- * Deprecate the third `$asList` argument of `TypeFactoryTrait::iterable()`, use `TypeFactoryTrait::list()` instead
-
VarDumper
---------
@@ -243,3 +307,110 @@ VarExporter
* Deprecate using `ProxyHelper::generateLazyProxy()` when native lazy proxies can be used - the method should be used to generate abstraction-based lazy decorators only
* Deprecate `LazyGhostTrait` and `LazyProxyTrait`, use native lazy objects instead
* Deprecate `ProxyHelper::generateLazyGhost()`, use native lazy objects instead
+
+WebProfilerBundle
+-----------------
+
+ * The XML routing configuration files (`profiler.xml` and `wdt.xml`) are
+ deprecated, use their PHP equivalent ones:
+
+ Before:
+
+ ```yaml
+ when@dev:
+ web_profiler_wdt:
+ resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
+ prefix: /_wdt
+
+ web_profiler_profiler:
+ resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
+ prefix: /_profiler
+ ```
+
+ After:
+
+ ```yaml
+ when@dev:
+ web_profiler_wdt:
+ resource: '@WebProfilerBundle/Resources/config/routing/wdt.php'
+ prefix: /_wdt
+
+ web_profiler_profiler:
+ resource: '@WebProfilerBundle/Resources/config/routing/profiler.php
+ prefix: /_profiler
+ ```
+
+Workflow
+--------
+
+ * Deprecate `Event::getWorkflow()` method
+
+ Before:
+
+ ```php
+ use Symfony\Component\Workflow\Attribute\AsCompletedListener;
+ use Symfony\Component\Workflow\Event\CompletedEvent;
+
+ class MyListener
+ {
+ #[AsCompletedListener('my_workflow', 'to_state2')]
+ public function terminateOrder(CompletedEvent $event): void
+ {
+ $subject = $event->getSubject();
+ if ($event->getWorkflow()->can($subject, 'to_state3')) {
+ $event->getWorkflow()->apply($subject, 'to_state3');
+ }
+ }
+ }
+ ```
+
+ After:
+
+ ```php
+ use Symfony\Component\DependencyInjection\Attribute\Target;
+ use Symfony\Component\Workflow\Attribute\AsCompletedListener;
+ use Symfony\Component\Workflow\Event\CompletedEvent;
+ use Symfony\Component\Workflow\WorkflowInterface;
+
+ class MyListener
+ {
+ public function __construct(
+ #[Target('your_workflow_name')]
+ private readonly WorkflowInterface $workflow,
+ ) {
+ }
+
+ #[AsCompletedListener('your_workflow_name', 'to_state2')]
+ public function terminateOrder(CompletedEvent $event): void
+ {
+ $subject = $event->getSubject();
+ if ($this->workflow->can($subject, 'to_state3')) {
+ $this->workflow->apply($subject, 'to_state3');
+ }
+ }
+ }
+ ```
+
+ Or:
+
+ ```php
+ use Symfony\Component\DependencyInjection\ServiceLocator;
+ use Symfony\Component\DependencyInjection\Attribute\AutowireLocator;
+ use Symfony\Component\Workflow\Attribute\AsTransitionListener;
+ use Symfony\Component\Workflow\Event\TransitionEvent;
+
+ class GenericListener
+ {
+ public function __construct(
+ #[AutowireLocator('workflow', 'name')]
+ private ServiceLocator $workflows
+ ) {
+ }
+
+ #[AsTransitionListener()]
+ public function doSomething(TransitionEvent $event): void
+ {
+ $workflow = $this->workflows->get($event->getWorkflowName());
+ }
+ }
+ ```
diff --git a/composer.json b/composer.json
index 3cfbe70ae68d8..20bcb49c4b782 100644
--- a/composer.json
+++ b/composer.json
@@ -143,7 +143,7 @@
"league/uri": "^6.5|^7.0",
"masterminds/html5": "^2.7.2",
"monolog/monolog": "^3.0",
- "nikic/php-parser": "^4.18|^5.0",
+ "nikic/php-parser": "^5.0",
"nyholm/psr7": "^1.0",
"pda/pheanstalk": "^5.1|^7.0",
"php-http/discovery": "^1.15",
diff --git a/src/Symfony/Bridge/Doctrine/ArgumentResolver/EntityValueResolver.php b/src/Symfony/Bridge/Doctrine/ArgumentResolver/EntityValueResolver.php
index ffff3006f7184..1efa7d78d0524 100644
--- a/src/Symfony/Bridge/Doctrine/ArgumentResolver/EntityValueResolver.php
+++ b/src/Symfony/Bridge/Doctrine/ArgumentResolver/EntityValueResolver.php
@@ -21,6 +21,7 @@
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
+use Symfony\Component\HttpKernel\Exception\NearMissValueResolverException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
@@ -68,7 +69,11 @@ public function resolve(Request $request, ArgumentMetadata $argument): array
} elseif (false === $object = $this->find($manager, $request, $options, $argument)) {
// find by criteria
if (!$criteria = $this->getCriteria($request, $options, $manager, $argument)) {
- return [];
+ if (!class_exists(NearMissValueResolverException::class)) {
+ return [];
+ }
+
+ throw new NearMissValueResolverException(sprintf('Cannot find mapping for "%s": declare one using either the #[MapEntity] attribute or mapped route parameters.', $options->class));
}
try {
$object = $manager->getRepository($options->class)->findOneBy($criteria);
@@ -185,7 +190,7 @@ private function getCriteria(Request $request, MapEntity $options, ObjectManager
return $criteria;
} elseif (null === $mapping) {
- trigger_deprecation('symfony/doctrine-bridge', '7.1', 'Relying on auto-mapping for Doctrine entities is deprecated for argument $%s of "%s": declare the identifier using either the #[MapEntity] attribute or mapped route parameters.', $argument->getName(), method_exists($argument, 'getControllerName') ? $argument->getControllerName() : 'n/a');
+ trigger_deprecation('symfony/doctrine-bridge', '7.1', 'Relying on auto-mapping for Doctrine entities is deprecated for argument $%s of "%s": declare the mapping using either the #[MapEntity] attribute or mapped route parameters.', $argument->getName(), method_exists($argument, 'getControllerName') ? $argument->getControllerName() : 'n/a');
$mapping = $request->attributes->keys();
}
diff --git a/src/Symfony/Bridge/Doctrine/CHANGELOG.md b/src/Symfony/Bridge/Doctrine/CHANGELOG.md
index fbd1055437d8f..961a0965d3431 100644
--- a/src/Symfony/Bridge/Doctrine/CHANGELOG.md
+++ b/src/Symfony/Bridge/Doctrine/CHANGELOG.md
@@ -7,12 +7,13 @@ CHANGELOG
* Reset the manager registry using native lazy objects when applicable
* Deprecate the `DoctrineExtractor::getTypes()` method, use `DoctrineExtractor::getType()` instead
* Add support for `Symfony\Component\Clock\DatePoint` as `DatePointType` Doctrine type
+ * Improve exception message when `EntityValueResolver` gets no mapping information
+ * Add type aliases support to `EntityValueResolver`
7.2
---
* Accept `ReadableCollection` in `CollectionToArrayTransformer`
- * Add type aliases support to `EntityValueResolver`
7.1
---
diff --git a/src/Symfony/Bridge/Doctrine/ManagerRegistry.php b/src/Symfony/Bridge/Doctrine/ManagerRegistry.php
index a533b3bb8d12c..fa4d88b99455d 100644
--- a/src/Symfony/Bridge/Doctrine/ManagerRegistry.php
+++ b/src/Symfony/Bridge/Doctrine/ManagerRegistry.php
@@ -80,21 +80,35 @@ function (&$wrappedInstance, LazyLoadingInterface $manager) use ($name) {
return;
}
- try {
- $r->resetAsLazyProxy($manager, \Closure::bind(
- function () use ($name) {
- $name = $this->aliases[$name] ?? $name;
+ $asProxy = $r->initializeLazyObject($manager) !== $manager;
+ $initializer = \Closure::bind(
+ function ($manager) use ($name, $asProxy) {
+ $name = $this->aliases[$name] ?? $name;
+ if ($asProxy) {
+ $manager = false;
+ }
+
+ $manager = match (true) {
+ isset($this->fileMap[$name]) => $this->load($this->fileMap[$name], $manager),
+ !$method = $this->methodMap[$name] ?? null => throw new \LogicException(\sprintf('The "%s" service is synthetic and cannot be reset.', $name)),
+ (new \ReflectionMethod($this, $method))->isStatic() => $this->{$method}($this, $manager),
+ default => $this->{$method}($manager),
+ };
+
+ if ($asProxy) {
+ return $manager;
+ }
+ },
+ $this->container,
+ Container::class
+ );
- return match (true) {
- isset($this->fileMap[$name]) => $this->load($this->fileMap[$name], false),
- !$method = $this->methodMap[$name] ?? null => throw new \LogicException(\sprintf('The "%s" service is synthetic and cannot be reset.', $name)),
- (new \ReflectionMethod($this, $method))->isStatic() => $this->{$method}($this, false),
- default => $this->{$method}(false),
- };
- },
- $this->container,
- Container::class
- ));
+ try {
+ if ($asProxy) {
+ $r->resetAsLazyProxy($manager, $initializer);
+ } else {
+ $r->resetAsLazyGhost($manager, $initializer);
+ }
} catch (\Error $e) {
if (__FILE__ !== $e->getFile()) {
throw $e;
diff --git a/src/Symfony/Bridge/Doctrine/Tests/ArgumentResolver/EntityValueResolverTest.php b/src/Symfony/Bridge/Doctrine/Tests/ArgumentResolver/EntityValueResolverTest.php
index 91ec5e89b99d3..8207317803857 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/ArgumentResolver/EntityValueResolverTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/ArgumentResolver/EntityValueResolverTest.php
@@ -24,6 +24,7 @@
use Symfony\Component\ExpressionLanguage\SyntaxError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
+use Symfony\Component\HttpKernel\Exception\NearMissValueResolverException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class EntityValueResolverTest extends TestCase
@@ -75,6 +76,11 @@ public function testResolveWithNoIdAndDataOptional()
$request = new Request();
$argument = $this->createArgument(null, new MapEntity(), 'arg', true);
+ if (class_exists(NearMissValueResolverException::class)) {
+ $this->expectException(NearMissValueResolverException::class);
+ $this->expectExceptionMessage('Cannot find mapping for "stdClass": declare one using either the #[MapEntity] attribute or mapped route parameters.');
+ }
+
$this->assertSame([], $resolver->resolve($request, $argument));
}
@@ -94,6 +100,11 @@ public function testResolveWithStripNulls()
$manager->expects($this->never())
->method('getRepository');
+ if (class_exists(NearMissValueResolverException::class)) {
+ $this->expectException(NearMissValueResolverException::class);
+ $this->expectExceptionMessage('Cannot find mapping for "stdClass": declare one using either the #[MapEntity] attribute or mapped route parameters.');
+ }
+
$this->assertSame([], $resolver->resolve($request, $argument));
}
@@ -262,6 +273,11 @@ public function testResolveGuessOptional()
$manager->expects($this->never())->method('getRepository');
+ if (class_exists(NearMissValueResolverException::class)) {
+ $this->expectException(NearMissValueResolverException::class);
+ $this->expectExceptionMessage('Cannot find mapping for "stdClass": declare one using either the #[MapEntity] attribute or mapped route parameters.');
+ }
+
$this->assertSame([], $resolver->resolve($request, $argument));
}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/DummyManager.php b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/DummyManager.php
index 04e5a2acdd334..806ef032d8d5c 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/DummyManager.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/DummyManager.php
@@ -1,5 +1,14 @@
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
namespace Symfony\Bridge\Doctrine\Tests\Fixtures;
use Doctrine\Persistence\Mapping\ClassMetadata;
@@ -11,6 +20,10 @@ class DummyManager implements ObjectManager
{
public $bar;
+ public function __construct()
+ {
+ }
+
public function find($className, $id): ?object
{
}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/UserUuidNameDto.php b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/UserUuidNameDto.php
new file mode 100644
index 0000000000000..8c2c60d21ba85
--- /dev/null
+++ b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/UserUuidNameDto.php
@@ -0,0 +1,24 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bridge\Doctrine\Tests\Fixtures;
+
+use Symfony\Component\Uid\Uuid;
+
+class UserUuidNameDto
+{
+ public function __construct(
+ public ?Uuid $id,
+ public ?string $fullName,
+ public ?string $address,
+ ) {
+ }
+}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/UserUuidNameEntity.php b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/UserUuidNameEntity.php
new file mode 100644
index 0000000000000..3ac3ead8d201a
--- /dev/null
+++ b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/UserUuidNameEntity.php
@@ -0,0 +1,29 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bridge\Doctrine\Tests\Fixtures;
+
+use Doctrine\ORM\Mapping\Column;
+use Doctrine\ORM\Mapping\Entity;
+use Doctrine\ORM\Mapping\Id;
+use Symfony\Component\Uid\Uuid;
+
+#[Entity]
+class UserUuidNameEntity
+{
+ public function __construct(
+ #[Id, Column]
+ public ?Uuid $id = null,
+ #[Column(unique: true)]
+ public ?string $fullName = null,
+ ) {
+ }
+}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/ManagerRegistryTest.php b/src/Symfony/Bridge/Doctrine/Tests/ManagerRegistryTest.php
index fa44ba0a00bbb..4803e6acaf0af 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/ManagerRegistryTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/ManagerRegistryTest.php
@@ -22,7 +22,7 @@
class ManagerRegistryTest extends TestCase
{
- public static function setUpBeforeClass(): void
+ public function testResetService()
{
$container = new ContainerBuilder();
@@ -32,10 +32,7 @@ public static function setUpBeforeClass(): void
$dumper = new PhpDumper($container);
eval('?>'.$dumper->dump(['class' => 'LazyServiceDoctrineBridgeContainer']));
- }
- public function testResetService()
- {
$container = new \LazyServiceDoctrineBridgeContainer();
$registry = new TestManagerRegistry('name', [], ['defaultManager' => 'foo'], 'defaultConnection', 'defaultManager', 'proxyInterfaceName');
@@ -52,6 +49,63 @@ public function testResetService()
$this->assertFalse(isset($foo->bar));
}
+ /**
+ * @requires PHP 8.4
+ *
+ * @dataProvider provideResetServiceWithNativeLazyObjectsCases
+ */
+ public function testResetServiceWithNativeLazyObjects(string $class)
+ {
+ $container = new $class();
+
+ $registry = new TestManagerRegistry(
+ 'irrelevant',
+ [],
+ ['defaultManager' => 'foo'],
+ 'irrelevant',
+ 'defaultManager',
+ 'irrelevant',
+ );
+ $registry->setTestContainer($container);
+
+ $foo = $container->get('foo');
+ self::assertSame(DummyManager::class, $foo::class);
+
+ $foo->bar = 123;
+ self::assertTrue(isset($foo->bar));
+
+ $registry->resetManager();
+
+ self::assertSame($foo, $container->get('foo'));
+ self::assertSame(DummyManager::class, $foo::class);
+ self::assertFalse(isset($foo->bar));
+ }
+
+ public static function provideResetServiceWithNativeLazyObjectsCases(): iterable
+ {
+ $container = new ContainerBuilder();
+
+ $container->register('foo', DummyManager::class)->setPublic(true);
+ $container->getDefinition('foo')->setLazy(true);
+ $container->compile();
+
+ $dumper = new PhpDumper($container);
+
+ eval('?>'.$dumper->dump(['class' => 'NativeLazyServiceDoctrineBridgeContainer']));
+
+ yield ['NativeLazyServiceDoctrineBridgeContainer'];
+
+ $dumps = $dumper->dump(['class' => 'NativeLazyServiceDoctrineBridgeContainerAsFiles', 'as_files' => true]);
+
+ $lastDump = array_pop($dumps);
+ foreach (array_reverse($dumps) as $dump) {
+ eval('?>'.$dump);
+ }
+ eval('?>'.$lastDump);
+
+ yield ['NativeLazyServiceDoctrineBridgeContainerAsFiles'];
+ }
+
/**
* When performing an entity manager lazy service reset, the reset operations may re-use the container
* to create a "fresh" service: when doing so, it can happen that the "fresh" service is itself a proxy.
diff --git a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php
index ad3d603adbfaf..04817d9389049 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php
@@ -30,7 +30,7 @@
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\DoctrineWithEmbedded;
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\EnumInt;
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\EnumString;
-use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
+use Symfony\Bridge\PhpUnit\ExpectUserDeprecationMessageTrait;
use Symfony\Component\PropertyInfo\Type as LegacyType;
use Symfony\Component\TypeInfo\Type;
@@ -39,7 +39,7 @@
*/
class DoctrineExtractorTest extends TestCase
{
- use ExpectDeprecationTrait;
+ use ExpectUserDeprecationMessageTrait;
private function createExtractor(): DoctrineExtractor
{
@@ -117,7 +117,7 @@ public function testTestGetPropertiesWithEmbedded()
*/
public function testExtractLegacy(string $property, ?array $type = null)
{
- $this->expectDeprecation('Since symfony/property-info 7.3: The "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getTypes()" method is deprecated, use "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getType()" instead.');
+ $this->expectUserDeprecationMessage('Since symfony/property-info 7.3: The "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getTypes()" method is deprecated, use "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getType()" instead.');
$this->assertEquals($type, $this->createExtractor()->getTypes(DoctrineDummy::class, $property, []));
}
@@ -127,7 +127,7 @@ public function testExtractLegacy(string $property, ?array $type = null)
*/
public function testExtractWithEmbeddedLegacy()
{
- $this->expectDeprecation('Since symfony/property-info 7.3: The "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getTypes()" method is deprecated, use "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getType()" instead.');
+ $this->expectUserDeprecationMessage('Since symfony/property-info 7.3: The "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getTypes()" method is deprecated, use "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getType()" instead.');
$expectedTypes = [new LegacyType(
LegacyType::BUILTIN_TYPE_OBJECT,
@@ -149,7 +149,7 @@ public function testExtractWithEmbeddedLegacy()
*/
public function testExtractEnumLegacy()
{
- $this->expectDeprecation('Since symfony/property-info 7.3: The "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getTypes()" method is deprecated, use "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getType()" instead.');
+ $this->expectUserDeprecationMessage('Since symfony/property-info 7.3: The "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getTypes()" method is deprecated, use "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getType()" instead.');
$this->assertEquals([new LegacyType(LegacyType::BUILTIN_TYPE_OBJECT, false, EnumString::class)], $this->createExtractor()->getTypes(DoctrineEnum::class, 'enumString', []));
$this->assertEquals([new LegacyType(LegacyType::BUILTIN_TYPE_OBJECT, false, EnumInt::class)], $this->createExtractor()->getTypes(DoctrineEnum::class, 'enumInt', []));
@@ -265,7 +265,7 @@ public function testGetPropertiesCatchException()
*/
public function testGetTypesCatchExceptionLegacy()
{
- $this->expectDeprecation('Since symfony/property-info 7.3: The "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getTypes()" method is deprecated, use "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getType()" instead.');
+ $this->expectUserDeprecationMessage('Since symfony/property-info 7.3: The "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getTypes()" method is deprecated, use "Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor::getType()" instead.');
$this->assertNull($this->createExtractor()->getTypes('Not\Exist', 'baz'));
}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/Fixtures/DoctrineFooType.php b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/Fixtures/DoctrineFooType.php
index 93e9818f4383c..6619f911ae1e0 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/Fixtures/DoctrineFooType.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/Fixtures/DoctrineFooType.php
@@ -41,7 +41,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform): ?str
throw new ConversionException(sprintf('Expected "%s", got "%s"', 'Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\Foo', get_debug_type($value)));
}
- return $foo->bar;
+ return $value->bar;
}
public function convertToPHPValue($value, AbstractPlatform $platform): ?Foo
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Types/DatePointTypeTest.php b/src/Symfony/Bridge/Doctrine/Tests/Types/DatePointTypeTest.php
index a5aaec292b906..84b265ed6502c 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Types/DatePointTypeTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Types/DatePointTypeTest.php
@@ -11,11 +11,9 @@
namespace Symfony\Bridge\Doctrine\Tests\Types;
+use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Platforms\AbstractPlatform;
-use Doctrine\DBAL\Platforms\MariaDBPlatform;
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
-use Doctrine\DBAL\Platforms\SqlitePlatform;
-use Doctrine\DBAL\Types\ConversionException;
use Doctrine\DBAL\Types\Type;
use PHPUnit\Framework\TestCase;
use Symfony\Bridge\Doctrine\Types\DatePointType;
@@ -56,14 +54,14 @@ public function testDatePointConvertsToDatabaseValue()
public function testDatePointConvertsToPHPValue()
{
$datePoint = new DatePoint();
- $actual = $this->type->convertToPHPValue($datePoint, new SqlitePlatform());
+ $actual = $this->type->convertToPHPValue($datePoint, self::getSqlitePlatform());
$this->assertSame($datePoint, $actual);
}
public function testNullConvertsToPHPValue()
{
- $actual = $this->type->convertToPHPValue(null, new SqlitePlatform());
+ $actual = $this->type->convertToPHPValue(null, self::getSqlitePlatform());
$this->assertNull($actual);
}
@@ -72,14 +70,32 @@ public function testDateTimeImmutableConvertsToPHPValue()
{
$format = 'Y-m-d H:i:s';
$dateTime = new \DateTimeImmutable('2025-03-03 12:13:14');
- $actual = $this->type->convertToPHPValue($dateTime, new SqlitePlatform());
+ $actual = $this->type->convertToPHPValue($dateTime, self::getSqlitePlatform());
$expected = DatePoint::createFromInterface($dateTime);
$this->assertSame($expected->format($format), $actual->format($format));
}
+ public function testDatabaseValueConvertsToPHPValue()
+ {
+ $actual = $this->type->convertToPHPValue('2025-03-03 12:13:14', new PostgreSQLPlatform());
+
+ $this->assertInstanceOf(DatePoint::class, $actual);
+ $this->assertSame('2025-03-03 12:13:14', $actual->format('Y-m-d H:i:s'));
+ }
+
public function testGetName()
{
$this->assertSame('date_point', $this->type->getName());
}
+
+ private static function getSqlitePlatform(): AbstractPlatform
+ {
+ if (interface_exists(Exception::class)) {
+ // DBAL 4+
+ return new \Doctrine\DBAL\Platforms\SQLitePlatform();
+ }
+
+ return new \Doctrine\DBAL\Platforms\SqlitePlatform();
+ }
}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Types/UlidTypeTest.php b/src/Symfony/Bridge/Doctrine/Tests/Types/UlidTypeTest.php
index 15852c8a92b64..b490d94f4263f 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Types/UlidTypeTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Types/UlidTypeTest.php
@@ -11,11 +11,11 @@
namespace Symfony\Bridge\Doctrine\Tests\Types;
+use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Platforms\MariaDBPlatform;
use Doctrine\DBAL\Platforms\MySQLPlatform;
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
-use Doctrine\DBAL\Platforms\SQLitePlatform;
use Doctrine\DBAL\Types\ConversionException;
use Doctrine\DBAL\Types\Type;
use PHPUnit\Framework\TestCase;
@@ -23,12 +23,6 @@
use Symfony\Component\Uid\AbstractUid;
use Symfony\Component\Uid\Ulid;
-// DBAL 3 compatibility
-class_exists('Doctrine\DBAL\Platforms\SqlitePlatform');
-
-// DBAL 3 compatibility
-class_exists('Doctrine\DBAL\Platforms\SqlitePlatform');
-
final class UlidTypeTest extends TestCase
{
private const DUMMY_ULID = '01EEDQEK6ZAZE93J8KG5B4MBJC';
@@ -87,25 +81,25 @@ public function testNotSupportedTypeConversionForDatabaseValue()
{
$this->expectException(ConversionException::class);
- $this->type->convertToDatabaseValue(new \stdClass(), new SQLitePlatform());
+ $this->type->convertToDatabaseValue(new \stdClass(), self::getSqlitePlatform());
}
public function testNullConversionForDatabaseValue()
{
- $this->assertNull($this->type->convertToDatabaseValue(null, new SQLitePlatform()));
+ $this->assertNull($this->type->convertToDatabaseValue(null, self::getSqlitePlatform()));
}
public function testUlidInterfaceConvertsToPHPValue()
{
$ulid = $this->createMock(AbstractUid::class);
- $actual = $this->type->convertToPHPValue($ulid, new SQLitePlatform());
+ $actual = $this->type->convertToPHPValue($ulid, self::getSqlitePlatform());
$this->assertSame($ulid, $actual);
}
public function testUlidConvertsToPHPValue()
{
- $ulid = $this->type->convertToPHPValue(self::DUMMY_ULID, new SQLitePlatform());
+ $ulid = $this->type->convertToPHPValue(self::DUMMY_ULID, self::getSqlitePlatform());
$this->assertInstanceOf(Ulid::class, $ulid);
$this->assertEquals(self::DUMMY_ULID, $ulid->__toString());
@@ -115,19 +109,19 @@ public function testInvalidUlidConversionForPHPValue()
{
$this->expectException(ConversionException::class);
- $this->type->convertToPHPValue('abcdefg', new SQLitePlatform());
+ $this->type->convertToPHPValue('abcdefg', self::getSqlitePlatform());
}
public function testNullConversionForPHPValue()
{
- $this->assertNull($this->type->convertToPHPValue(null, new SQLitePlatform()));
+ $this->assertNull($this->type->convertToPHPValue(null, self::getSqlitePlatform()));
}
public function testReturnValueIfUlidForPHPValue()
{
$ulid = new Ulid();
- $this->assertSame($ulid, $this->type->convertToPHPValue($ulid, new SQLitePlatform()));
+ $this->assertSame($ulid, $this->type->convertToPHPValue($ulid, self::getSqlitePlatform()));
}
public function testGetName()
@@ -146,13 +140,23 @@ public function testGetGuidTypeDeclarationSQL(AbstractPlatform $platform, string
public static function provideSqlDeclarations(): \Generator
{
yield [new PostgreSQLPlatform(), 'UUID'];
- yield [new SQLitePlatform(), 'BLOB'];
+ yield [self::getSqlitePlatform(), 'BLOB'];
yield [new MySQLPlatform(), 'BINARY(16)'];
yield [new MariaDBPlatform(), 'BINARY(16)'];
}
public function testRequiresSQLCommentHint()
{
- $this->assertTrue($this->type->requiresSQLCommentHint(new SQLitePlatform()));
+ $this->assertTrue($this->type->requiresSQLCommentHint(self::getSqlitePlatform()));
+ }
+
+ private static function getSqlitePlatform(): AbstractPlatform
+ {
+ if (interface_exists(Exception::class)) {
+ // DBAL 4+
+ return new \Doctrine\DBAL\Platforms\SQLitePlatform();
+ }
+
+ return new \Doctrine\DBAL\Platforms\SqlitePlatform();
}
}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Types/UuidTypeTest.php b/src/Symfony/Bridge/Doctrine/Tests/Types/UuidTypeTest.php
index 8e4ab2937d05b..f26e43ffe66b3 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Types/UuidTypeTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Types/UuidTypeTest.php
@@ -11,11 +11,11 @@
namespace Symfony\Bridge\Doctrine\Tests\Types;
+use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Platforms\MariaDBPlatform;
use Doctrine\DBAL\Platforms\MySQLPlatform;
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
-use Doctrine\DBAL\Platforms\SqlitePlatform;
use Doctrine\DBAL\Types\ConversionException;
use Doctrine\DBAL\Types\Type;
use PHPUnit\Framework\TestCase;
@@ -92,25 +92,25 @@ public function testNotSupportedTypeConversionForDatabaseValue()
{
$this->expectException(ConversionException::class);
- $this->type->convertToDatabaseValue(new \stdClass(), new SqlitePlatform());
+ $this->type->convertToDatabaseValue(new \stdClass(), self::getSqlitePlatform());
}
public function testNullConversionForDatabaseValue()
{
- $this->assertNull($this->type->convertToDatabaseValue(null, new SqlitePlatform()));
+ $this->assertNull($this->type->convertToDatabaseValue(null, self::getSqlitePlatform()));
}
public function testUuidInterfaceConvertsToPHPValue()
{
$uuid = $this->createMock(AbstractUid::class);
- $actual = $this->type->convertToPHPValue($uuid, new SqlitePlatform());
+ $actual = $this->type->convertToPHPValue($uuid, self::getSqlitePlatform());
$this->assertSame($uuid, $actual);
}
public function testUuidConvertsToPHPValue()
{
- $uuid = $this->type->convertToPHPValue(self::DUMMY_UUID, new SqlitePlatform());
+ $uuid = $this->type->convertToPHPValue(self::DUMMY_UUID, self::getSqlitePlatform());
$this->assertInstanceOf(Uuid::class, $uuid);
$this->assertEquals(self::DUMMY_UUID, $uuid->__toString());
@@ -120,19 +120,19 @@ public function testInvalidUuidConversionForPHPValue()
{
$this->expectException(ConversionException::class);
- $this->type->convertToPHPValue('abcdefg', new SqlitePlatform());
+ $this->type->convertToPHPValue('abcdefg', self::getSqlitePlatform());
}
public function testNullConversionForPHPValue()
{
- $this->assertNull($this->type->convertToPHPValue(null, new SqlitePlatform()));
+ $this->assertNull($this->type->convertToPHPValue(null, self::getSqlitePlatform()));
}
public function testReturnValueIfUuidForPHPValue()
{
$uuid = Uuid::v4();
- $this->assertSame($uuid, $this->type->convertToPHPValue($uuid, new SqlitePlatform()));
+ $this->assertSame($uuid, $this->type->convertToPHPValue($uuid, self::getSqlitePlatform()));
}
public function testGetName()
@@ -151,13 +151,23 @@ public function testGetGuidTypeDeclarationSQL(AbstractPlatform $platform, string
public static function provideSqlDeclarations(): \Generator
{
yield [new PostgreSQLPlatform(), 'UUID'];
- yield [new SqlitePlatform(), 'BLOB'];
+ yield [self::getSqlitePlatform(), 'BLOB'];
yield [new MySQLPlatform(), 'BINARY(16)'];
yield [new MariaDBPlatform(), 'BINARY(16)'];
}
public function testRequiresSQLCommentHint()
{
- $this->assertTrue($this->type->requiresSQLCommentHint(new SqlitePlatform()));
+ $this->assertTrue($this->type->requiresSQLCommentHint(self::getSqlitePlatform()));
+ }
+
+ private static function getSqlitePlatform(): AbstractPlatform
+ {
+ if (interface_exists(Exception::class)) {
+ // DBAL 4+
+ return new \Doctrine\DBAL\Platforms\SQLitePlatform();
+ }
+
+ return new \Doctrine\DBAL\Platforms\SqlitePlatform();
}
}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
index 77aed59874e38..4f93768cddf7c 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
@@ -14,7 +14,6 @@
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\DBAL\Types\Type;
use Doctrine\ORM\EntityRepository;
-use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\ORM\Tools\SchemaTool;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\Persistence\ObjectManager;
@@ -32,7 +31,6 @@
use Symfony\Bridge\Doctrine\Tests\Fixtures\Employee;
use Symfony\Bridge\Doctrine\Tests\Fixtures\HireAnEmployee;
use Symfony\Bridge\Doctrine\Tests\Fixtures\Person;
-use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdEntityRepository;
use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdEntity;
use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdNoToStringEntity;
use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdStringWrapperNameEntity;
@@ -43,9 +41,12 @@
use Symfony\Bridge\Doctrine\Tests\Fixtures\UpdateCompositeIntIdEntity;
use Symfony\Bridge\Doctrine\Tests\Fixtures\UpdateCompositeObjectNoToStringIdEntity;
use Symfony\Bridge\Doctrine\Tests\Fixtures\UpdateEmployeeProfile;
+use Symfony\Bridge\Doctrine\Tests\Fixtures\UserUuidNameDto;
+use Symfony\Bridge\Doctrine\Tests\Fixtures\UserUuidNameEntity;
use Symfony\Bridge\Doctrine\Tests\TestRepositoryFactory;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator;
+use Symfony\Component\Uid\Uuid;
use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
use Symfony\Component\Validator\Exception\UnexpectedValueException;
use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
@@ -118,6 +119,7 @@ private function createSchema($em)
$em->getClassMetadata(Employee::class),
$em->getClassMetadata(CompositeObjectNoToStringIdEntity::class),
$em->getClassMetadata(SingleIntIdStringWrapperNameEntity::class),
+ $em->getClassMetadata(UserUuidNameEntity::class),
]);
}
@@ -1425,4 +1427,25 @@ public function testEntityManagerNullObjectWhenDTODoctrineStyle()
$this->validator->validate($dto, $constraint);
}
+
+ public function testUuidIdentifierWithSameValueDifferentInstanceDoesNotCauseViolation()
+ {
+ $uuidString = 'ec562e21-1fc8-4e55-8de7-a42389ac75c5';
+ $existingPerson = new UserUuidNameEntity(Uuid::fromString($uuidString), 'Foo Bar');
+ $this->em->persist($existingPerson);
+ $this->em->flush();
+
+ $dto = new UserUuidNameDto(Uuid::fromString($uuidString), 'Foo Bar', '');
+
+ $constraint = new UniqueEntity(
+ fields: ['fullName'],
+ entityClass: UserUuidNameEntity::class,
+ identifierFieldNames: ['id'],
+ em: self::EM_NAME,
+ );
+
+ $this->validator->validate($dto, $constraint);
+
+ $this->assertNoViolation();
+ }
}
diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php
index 87eebbca142c6..4aed1cd3a44c2 100644
--- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php
+++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php
@@ -197,6 +197,12 @@ public function validate(mixed $value, Constraint $constraint): void
foreach ($constraint->identifierFieldNames as $identifierFieldName) {
$propertyValue = $this->getPropertyValue($entityClass, $identifierFieldName, current($result));
+ if ($fieldValues[$identifierFieldName] instanceof \Stringable) {
+ $fieldValues[$identifierFieldName] = (string) $fieldValues[$identifierFieldName];
+ }
+ if ($propertyValue instanceof \Stringable) {
+ $propertyValue = (string) $propertyValue;
+ }
if ($fieldValues[$identifierFieldName] !== $propertyValue) {
$entityMatched = false;
break;
diff --git a/src/Symfony/Bridge/PhpUnit/Extension/DisableClockMockSubscriber.php b/src/Symfony/Bridge/PhpUnit/Extension/DisableClockMockSubscriber.php
deleted file mode 100644
index 1de94db292656..0000000000000
--- a/src/Symfony/Bridge/PhpUnit/Extension/DisableClockMockSubscriber.php
+++ /dev/null
@@ -1,51 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bridge\PhpUnit\Extension;
-
-use PHPUnit\Event\Code\TestMethod;
-use PHPUnit\Event\Test\Finished;
-use PHPUnit\Event\Test\FinishedSubscriber;
-use PHPUnit\Metadata\Group;
-use Symfony\Bridge\PhpUnit\Attribute\TimeSensitive;
-use Symfony\Bridge\PhpUnit\ClockMock;
-use Symfony\Bridge\PhpUnit\Metadata\AttributeReader;
-
-/**
- * @internal
- */
-class DisableClockMockSubscriber implements FinishedSubscriber
-{
- public function __construct(
- private AttributeReader $reader,
- ) {
- }
-
- public function notify(Finished $event): void
- {
- $test = $event->test();
-
- if (!$test instanceof TestMethod) {
- return;
- }
-
- foreach ($test->metadata() as $metadata) {
- if ($metadata instanceof Group && 'time-sensitive' === $metadata->groupName()) {
- ClockMock::withClockMock(false);
- break;
- }
- }
-
- if ($this->reader->forClassAndMethod($test->className(), $test->methodName(), TimeSensitive::class)) {
- ClockMock::withClockMock(false);
- }
- }
-}
diff --git a/src/Symfony/Bridge/PhpUnit/Extension/DisableDnsMockSubscriber.php b/src/Symfony/Bridge/PhpUnit/Extension/DisableDnsMockSubscriber.php
deleted file mode 100644
index 29cdbbf1835cf..0000000000000
--- a/src/Symfony/Bridge/PhpUnit/Extension/DisableDnsMockSubscriber.php
+++ /dev/null
@@ -1,51 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bridge\PhpUnit\Extension;
-
-use PHPUnit\Event\Code\TestMethod;
-use PHPUnit\Event\Test\Finished;
-use PHPUnit\Event\Test\FinishedSubscriber;
-use PHPUnit\Metadata\Group;
-use Symfony\Bridge\PhpUnit\Attribute\DnsSensitive;
-use Symfony\Bridge\PhpUnit\DnsMock;
-use Symfony\Bridge\PhpUnit\Metadata\AttributeReader;
-
-/**
- * @internal
- */
-class DisableDnsMockSubscriber implements FinishedSubscriber
-{
- public function __construct(
- private AttributeReader $reader,
- ) {
- }
-
- public function notify(Finished $event): void
- {
- $test = $event->test();
-
- if (!$test instanceof TestMethod) {
- return;
- }
-
- foreach ($test->metadata() as $metadata) {
- if ($metadata instanceof Group && 'dns-sensitive' === $metadata->groupName()) {
- DnsMock::withMockedHosts([]);
- break;
- }
- }
-
- if ($this->reader->forClassAndMethod($test->className(), $test->methodName(), DnsSensitive::class)) {
- DnsMock::withMockedHosts([]);
- }
- }
-}
diff --git a/src/Symfony/Bridge/PhpUnit/SymfonyExtension.php b/src/Symfony/Bridge/PhpUnit/SymfonyExtension.php
index a21e4626368b9..05ff99aa8aedc 100644
--- a/src/Symfony/Bridge/PhpUnit/SymfonyExtension.php
+++ b/src/Symfony/Bridge/PhpUnit/SymfonyExtension.php
@@ -11,12 +11,23 @@
namespace Symfony\Bridge\PhpUnit;
+use PHPUnit\Event\Code\Test;
+use PHPUnit\Event\Code\TestMethod;
+use PHPUnit\Event\Test\BeforeTestMethodErrored;
+use PHPUnit\Event\Test\BeforeTestMethodErroredSubscriber;
+use PHPUnit\Event\Test\Errored;
+use PHPUnit\Event\Test\ErroredSubscriber;
+use PHPUnit\Event\Test\Finished;
+use PHPUnit\Event\Test\FinishedSubscriber;
+use PHPUnit\Event\Test\Skipped;
+use PHPUnit\Event\Test\SkippedSubscriber;
+use PHPUnit\Metadata\Group;
use PHPUnit\Runner\Extension\Extension;
use PHPUnit\Runner\Extension\Facade;
use PHPUnit\Runner\Extension\ParameterCollection;
use PHPUnit\TextUI\Configuration\Configuration;
-use Symfony\Bridge\PhpUnit\Extension\DisableClockMockSubscriber;
-use Symfony\Bridge\PhpUnit\Extension\DisableDnsMockSubscriber;
+use Symfony\Bridge\PhpUnit\Attribute\DnsSensitive;
+use Symfony\Bridge\PhpUnit\Attribute\TimeSensitive;
use Symfony\Bridge\PhpUnit\Extension\EnableClockMockSubscriber;
use Symfony\Bridge\PhpUnit\Extension\RegisterClockMockSubscriber;
use Symfony\Bridge\PhpUnit\Extension\RegisterDnsMockSubscriber;
@@ -41,7 +52,58 @@ public function bootstrap(Configuration $configuration, Facade $facade, Paramete
$facade->registerSubscriber(new RegisterClockMockSubscriber($reader));
$facade->registerSubscriber(new EnableClockMockSubscriber($reader));
- $facade->registerSubscriber(new DisableClockMockSubscriber($reader));
+ $facade->registerSubscriber(new class($reader) implements ErroredSubscriber {
+ public function __construct(private AttributeReader $reader)
+ {
+ }
+
+ public function notify(Errored $event): void
+ {
+ SymfonyExtension::disableClockMock($event->test(), $this->reader);
+ SymfonyExtension::disableDnsMock($event->test(), $this->reader);
+ }
+ });
+ $facade->registerSubscriber(new class($reader) implements FinishedSubscriber {
+ public function __construct(private AttributeReader $reader)
+ {
+ }
+
+ public function notify(Finished $event): void
+ {
+ SymfonyExtension::disableClockMock($event->test(), $this->reader);
+ SymfonyExtension::disableDnsMock($event->test(), $this->reader);
+ }
+ });
+ $facade->registerSubscriber(new class($reader) implements SkippedSubscriber {
+ public function __construct(private AttributeReader $reader)
+ {
+ }
+
+ public function notify(Skipped $event): void
+ {
+ SymfonyExtension::disableClockMock($event->test(), $this->reader);
+ SymfonyExtension::disableDnsMock($event->test(), $this->reader);
+ }
+ });
+
+ if (interface_exists(BeforeTestMethodErroredSubscriber::class)) {
+ $facade->registerSubscriber(new class($reader) implements BeforeTestMethodErroredSubscriber {
+ public function __construct(private AttributeReader $reader)
+ {
+ }
+
+ public function notify(BeforeTestMethodErrored $event): void
+ {
+ if (method_exists($event, 'test')) {
+ SymfonyExtension::disableClockMock($event->test(), $this->reader);
+ SymfonyExtension::disableDnsMock($event->test(), $this->reader);
+ } else {
+ ClockMock::withClockMock(false);
+ DnsMock::withMockedHosts([]);
+ }
+ }
+ });
+ }
if ($parameters->has('dns-mock-namespaces')) {
foreach (explode(',', $parameters->get('dns-mock-namespaces')) as $namespace) {
@@ -50,6 +112,43 @@ public function bootstrap(Configuration $configuration, Facade $facade, Paramete
}
$facade->registerSubscriber(new RegisterDnsMockSubscriber($reader));
- $facade->registerSubscriber(new DisableDnsMockSubscriber($reader));
+ }
+
+ /**
+ * @internal
+ */
+ public static function disableClockMock(Test $test, AttributeReader $reader): void
+ {
+ if (self::hasGroup($test, 'time-sensitive', $reader, TimeSensitive::class)) {
+ ClockMock::withClockMock(false);
+ }
+ }
+
+ /**
+ * @internal
+ */
+ public static function disableDnsMock(Test $test, AttributeReader $reader): void
+ {
+ if (self::hasGroup($test, 'dns-sensitive', $reader, DnsSensitive::class)) {
+ DnsMock::withMockedHosts([]);
+ }
+ }
+
+ /**
+ * @internal
+ */
+ public static function hasGroup(Test $test, string $groupName, AttributeReader $reader, string $attribute): bool
+ {
+ if (!$test instanceof TestMethod) {
+ return false;
+ }
+
+ foreach ($test->metadata() as $metadata) {
+ if ($metadata instanceof Group && $groupName === $metadata->groupName()) {
+ return true;
+ }
+ }
+
+ return [] !== $reader->forClassAndMethod($test->className(), $test->methodName(), $attribute);
}
}
diff --git a/src/Symfony/Bridge/PhpUnit/Tests/Fixtures/symfonyextension/tests/bootstrap.php b/src/Symfony/Bridge/PhpUnit/Tests/Fixtures/symfonyextension/tests/bootstrap.php
index 3616e5096c3b7..385e7ea7e51e4 100644
--- a/src/Symfony/Bridge/PhpUnit/Tests/Fixtures/symfonyextension/tests/bootstrap.php
+++ b/src/Symfony/Bridge/PhpUnit/Tests/Fixtures/symfonyextension/tests/bootstrap.php
@@ -23,8 +23,6 @@
require __DIR__.'/../../../../SymfonyExtension.php';
require __DIR__.'/../../../../Attribute/DnsSensitive.php';
require __DIR__.'/../../../../Attribute/TimeSensitive.php';
-require __DIR__.'/../../../../Extension/DisableClockMockSubscriber.php';
-require __DIR__.'/../../../../Extension/DisableDnsMockSubscriber.php';
require __DIR__.'/../../../../Extension/EnableClockMockSubscriber.php';
require __DIR__.'/../../../../Extension/RegisterClockMockSubscriber.php';
require __DIR__.'/../../../../Extension/RegisterDnsMockSubscriber.php';
diff --git a/src/Symfony/Bridge/PhpUnit/Tests/SymfonyExtensionWithManualRegister.php b/src/Symfony/Bridge/PhpUnit/Tests/SymfonyExtensionWithManualRegister.php
new file mode 100644
index 0000000000000..c02d6f1cf64ce
--- /dev/null
+++ b/src/Symfony/Bridge/PhpUnit/Tests/SymfonyExtensionWithManualRegister.php
@@ -0,0 +1,64 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bridge\PhpUnit\Tests;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Bridge\PhpUnit\ClockMock;
+use Symfony\Bridge\PhpUnit\DnsMock;
+
+class SymfonyExtensionWithManualRegister extends TestCase
+{
+ public static function setUpBeforeClass(): void
+ {
+ ClockMock::register(self::class);
+ ClockMock::withClockMock(strtotime('2024-05-20 15:30:00'));
+
+ DnsMock::register(self::class);
+ DnsMock::withMockedHosts([
+ 'example.com' => [
+ ['type' => 'A', 'ip' => '1.2.3.4'],
+ ],
+ ]);
+ }
+
+ public static function tearDownAfterClass(): void
+ {
+ ClockMock::withClockMock(false);
+ DnsMock::withMockedHosts([]);
+ }
+
+ public function testDate()
+ {
+ self::assertSame('2024-05-20 15:30:00', date('Y-m-d H:i:s'));
+ }
+
+ public function testGetHostByName()
+ {
+ self::assertSame('1.2.3.4', gethostbyname('example.com'));
+ }
+
+ public function testTime()
+ {
+ self::assertSame(1716219000, time());
+ }
+
+ public function testDnsGetRecord()
+ {
+ self::assertSame([[
+ 'host' => 'example.com',
+ 'class' => 'IN',
+ 'ttl' => 1,
+ 'type' => 'A',
+ 'ip' => '1.2.3.4',
+ ]], dns_get_record('example.com'));
+ }
+}
diff --git a/src/Symfony/Bridge/PhpUnit/Tests/symfonyextension.phpt b/src/Symfony/Bridge/PhpUnit/Tests/symfonyextension.phpt
index 933352f07eadc..dd26388e71fd6 100644
--- a/src/Symfony/Bridge/PhpUnit/Tests/symfonyextension.phpt
+++ b/src/Symfony/Bridge/PhpUnit/Tests/symfonyextension.phpt
@@ -5,6 +5,8 @@ if (!getenv('SYMFONY_PHPUNIT_VERSION') || version_compare(getenv('SYMFONY_PHPUNI
--FILE--
'composer.json',
'COMPOSER_VENDOR_DIR' => 'vendor',
'COMPOSER_BIN_DIR' => 'bin',
+ 'COMPOSER_NO_INTERACTION' => '1',
'SYMFONY_SIMPLE_PHPUNIT_BIN_DIR' => __DIR__,
];
@@ -234,10 +235,10 @@
@copy("$PHPUNIT_VERSION_DIR/phpunit.xsd", 'phpunit.xsd');
chdir("$PHPUNIT_VERSION_DIR");
if ($SYMFONY_PHPUNIT_REMOVE) {
- $passthruOrFail("$COMPOSER remove --no-update --no-interaction ".$SYMFONY_PHPUNIT_REMOVE);
+ $passthruOrFail("$COMPOSER remove --no-update ".$SYMFONY_PHPUNIT_REMOVE);
}
if ($SYMFONY_PHPUNIT_REQUIRE) {
- $passthruOrFail("$COMPOSER require --no-update --no-interaction ".$SYMFONY_PHPUNIT_REQUIRE);
+ $passthruOrFail("$COMPOSER require --no-update ".$SYMFONY_PHPUNIT_REQUIRE);
}
if (5.1 <= $PHPUNIT_VERSION && $PHPUNIT_VERSION < 5.4) {
$passthruOrFail("$COMPOSER require --no-update phpunit/phpunit-mock-objects \"~3.1.0\"");
@@ -386,6 +387,10 @@ class_exists(\SymfonyExcludeListSimplePhpunit::class, false) && PHPUnit\Util\Bla
$cmd .= '%2$s';
}
+if (version_compare($PHPUNIT_VERSION, '11.0', '>=')) {
+ $GLOBALS['_composer_autoload_path'] = "$PHPUNIT_DIR/$PHPUNIT_VERSION_DIR/vendor/autoload.php";
+}
+
if ($components) {
$skippedTests = $_SERVER['SYMFONY_PHPUNIT_SKIPPED_TESTS'] ?? false;
$runningProcs = [];
diff --git a/src/Symfony/Bridge/PhpUnit/bootstrap.php b/src/Symfony/Bridge/PhpUnit/bootstrap.php
index 5fddda14eb847..24d593406c87a 100644
--- a/src/Symfony/Bridge/PhpUnit/bootstrap.php
+++ b/src/Symfony/Bridge/PhpUnit/bootstrap.php
@@ -14,7 +14,11 @@
use Symfony\Bridge\PhpUnit\DeprecationErrorHandler;
// Detect if we need to serialize deprecations to a file.
-if (in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) && $file = getenv('SYMFONY_DEPRECATIONS_SERIALIZE')) {
+if (
+ // Skip if we're using PHPUnit >=10
+ !class_exists(PHPUnit\Metadata\Metadata::class)
+ && in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) && $file = getenv('SYMFONY_DEPRECATIONS_SERIALIZE')
+) {
DeprecationErrorHandler::collectDeprecations($file);
return;
@@ -46,6 +50,10 @@
}
}
-if ('disabled' !== getenv('SYMFONY_DEPRECATIONS_HELPER')) {
+if (
+ // Skip if we're using PHPUnit >=10
+ !class_exists(PHPUnit\Metadata\Metadata::class, false)
+ && 'disabled' !== getenv('SYMFONY_DEPRECATIONS_HELPER')
+) {
DeprecationErrorHandler::register(getenv('SYMFONY_DEPRECATIONS_HELPER'));
}
diff --git a/src/Symfony/Bridge/PhpUnit/composer.json b/src/Symfony/Bridge/PhpUnit/composer.json
index 1283dfe33a9b0..de9101f796d73 100644
--- a/src/Symfony/Bridge/PhpUnit/composer.json
+++ b/src/Symfony/Bridge/PhpUnit/composer.json
@@ -2,7 +2,9 @@
"name": "symfony/phpunit-bridge",
"type": "symfony-bridge",
"description": "Provides utilities for PHPUnit, especially user deprecation notices management",
- "keywords": [],
+ "keywords": [
+ "testing"
+ ],
"homepage": "https://symfony.com",
"license": "MIT",
"authors": [
diff --git a/src/Symfony/Bridge/Twig/CHANGELOG.md b/src/Symfony/Bridge/Twig/CHANGELOG.md
index 8029cb4e4a464..d6d929cb50ed6 100644
--- a/src/Symfony/Bridge/Twig/CHANGELOG.md
+++ b/src/Symfony/Bridge/Twig/CHANGELOG.md
@@ -8,6 +8,7 @@ CHANGELOG
* Add `field_id()` Twig form helper function
* Add a `Twig` constraint that validates Twig templates
* Make `lint:twig` collect all deprecations instead of stopping at the first one
+ * Add `name` argument to `email.image` to override the attachment file name being set as the file path
7.2
---
diff --git a/src/Symfony/Bridge/Twig/Extension/WebLinkExtension.php b/src/Symfony/Bridge/Twig/Extension/WebLinkExtension.php
index 9eeb305aee36c..b06f0a8cedbe4 100644
--- a/src/Symfony/Bridge/Twig/Extension/WebLinkExtension.php
+++ b/src/Symfony/Bridge/Twig/Extension/WebLinkExtension.php
@@ -44,7 +44,7 @@ public function getFunctions(): array
/**
* Adds a "Link" HTTP header.
*
- * @param string $rel The relation type (e.g. "preload", "prefetch", "prerender" or "dns-prefetch")
+ * @param string $rel The relation type (e.g. "preload", "prefetch", or "dns-prefetch")
* @param array $attributes The attributes of this link (e.g. "['as' => true]", "['pr' => 0.5]")
*
* @return string The relation URI
@@ -115,7 +115,11 @@ public function prefetch(string $uri, array $attributes = []): string
}
/**
- * Indicates to the client that it should prerender this resource .
+ * Indicates to the client that it should prerender this resource.
+ *
+ * This feature is deprecated and superseded by the Speculation Rules API.
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/rel/prerender
*
* @param array $attributes The attributes of this link (e.g. "['as' => true]", "['pr' => 0.5]")
*
diff --git a/src/Symfony/Bridge/Twig/Mime/WrappedTemplatedEmail.php b/src/Symfony/Bridge/Twig/Mime/WrappedTemplatedEmail.php
index a327e94b3321e..1feedc20370bb 100644
--- a/src/Symfony/Bridge/Twig/Mime/WrappedTemplatedEmail.php
+++ b/src/Symfony/Bridge/Twig/Mime/WrappedTemplatedEmail.php
@@ -39,14 +39,16 @@ public function toName(): string
* some Twig namespace for email images (e.g. '@email/images/logo.png').
* @param string|null $contentType The media type (i.e. MIME type) of the image file (e.g. 'image/png').
* Some email clients require this to display embedded images.
+ * @param string|null $name A custom file name that overrides the original name (filepath) of the image
*/
- public function image(string $image, ?string $contentType = null): string
+ public function image(string $image, ?string $contentType = null, ?string $name = null): string
{
$file = $this->twig->getLoader()->getSourceContext($image);
$body = $file->getPath() ? new File($file->getPath()) : $file->getCode();
- $this->message->addPart((new DataPart($body, $image, $contentType))->asInline());
+ $name = $name ?: $image;
+ $this->message->addPart((new DataPart($body, $name, $contentType))->asInline());
- return 'cid:'.$image;
+ return 'cid:'.$name;
}
/**
diff --git a/src/Symfony/Bridge/Twig/Tests/Fixtures/assets/images/logo1.png b/src/Symfony/Bridge/Twig/Tests/Fixtures/assets/images/logo1.png
new file mode 100644
index 0000000000000..519ab7c691ba9
Binary files /dev/null and b/src/Symfony/Bridge/Twig/Tests/Fixtures/assets/images/logo1.png differ
diff --git a/src/Symfony/Bridge/Twig/Tests/Fixtures/assets/images/logo2.png b/src/Symfony/Bridge/Twig/Tests/Fixtures/assets/images/logo2.png
new file mode 120000
index 0000000000000..e9f523cbd5b31
--- /dev/null
+++ b/src/Symfony/Bridge/Twig/Tests/Fixtures/assets/images/logo2.png
@@ -0,0 +1 @@
+logo1.png
\ No newline at end of file
diff --git a/src/Symfony/Bridge/Twig/Tests/Fixtures/templates/email/attach.html.twig b/src/Symfony/Bridge/Twig/Tests/Fixtures/templates/email/attach.html.twig
new file mode 100644
index 0000000000000..e70e32fbcb757
--- /dev/null
+++ b/src/Symfony/Bridge/Twig/Tests/Fixtures/templates/email/attach.html.twig
@@ -0,0 +1,3 @@
+
Attachments
+{{ email.attach('@assets/images/logo1.png') }}
+{{ email.attach('@assets/images/logo2.png', name='image.png') }}
diff --git a/src/Symfony/Bridge/Twig/Tests/Fixtures/templates/email/image.html.twig b/src/Symfony/Bridge/Twig/Tests/Fixtures/templates/email/image.html.twig
new file mode 100644
index 0000000000000..074edf4c91b2f
--- /dev/null
+++ b/src/Symfony/Bridge/Twig/Tests/Fixtures/templates/email/image.html.twig
@@ -0,0 +1,2 @@
+
+
diff --git a/src/Symfony/Bridge/Twig/Tests/Mime/WrappedTemplatedEmailTest.php b/src/Symfony/Bridge/Twig/Tests/Mime/WrappedTemplatedEmailTest.php
new file mode 100644
index 0000000000000..428ebc93dc4ab
--- /dev/null
+++ b/src/Symfony/Bridge/Twig/Tests/Mime/WrappedTemplatedEmailTest.php
@@ -0,0 +1,102 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bridge\Twig\Tests\Mime;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Bridge\Twig\Mime\BodyRenderer;
+use Symfony\Bridge\Twig\Mime\TemplatedEmail;
+use Twig\Environment;
+use Twig\Loader\FilesystemLoader;
+
+/**
+ * @author Alexander Hofbauer buildEmail('email/image.html.twig');
+ $body = $email->toString();
+ $contentId1 = $email->getAttachments()[0]->getContentId();
+ $contentId2 = $email->getAttachments()[1]->getContentId();
+
+ $part1 = str_replace("\n", "\r\n",
+ <<
+ Content-Type: image/png; name="$contentId1"
+ Content-Transfer-Encoding: base64
+ Content-Disposition: inline;
+ name="$contentId1";
+ filename="@assets/images/logo1.png"
+
+ PART
+ );
+
+ $part2 = str_replace("\n", "\r\n",
+ <<
+ Content-Type: image/png; name="$contentId2"
+ Content-Transfer-Encoding: base64
+ Content-Disposition: inline;
+ name="$contentId2"; filename=image.png
+
+ PART
+ );
+
+ self::assertStringContainsString('', $body);
+ self::assertStringContainsString($part1, $body);
+ self::assertStringContainsString($part2, $body);
+ }
+
+ public function testEmailAttach()
+ {
+ $email = $this->buildEmail('email/attach.html.twig');
+ $body = $email->toString();
+
+ $part1 = str_replace("\n", "\r\n",
+ <<from('a.hofbauer@fify.at')
+ ->htmlTemplate($template);
+
+ $loader = new FilesystemLoader(\dirname(__DIR__).'/Fixtures/templates/');
+ $loader->addPath(\dirname(__DIR__).'/Fixtures/assets', 'assets');
+
+ $environment = new Environment($loader);
+ $renderer = new BodyRenderer($environment);
+ $renderer->render($email);
+
+ return $email;
+ }
+}
diff --git a/src/Symfony/Bridge/Twig/Validator/Constraints/TwigValidator.php b/src/Symfony/Bridge/Twig/Validator/Constraints/TwigValidator.php
index de92a36272963..3064341f3b10d 100644
--- a/src/Symfony/Bridge/Twig/Validator/Constraints/TwigValidator.php
+++ b/src/Symfony/Bridge/Twig/Validator/Constraints/TwigValidator.php
@@ -45,26 +45,33 @@ public function validate(mixed $value, Constraint $constraint): void
$value = (string) $value;
- if (!$constraint->skipDeprecations) {
- $prevErrorHandler = set_error_handler(static function ($level, $message, $file, $line) use (&$prevErrorHandler) {
- if (\E_USER_DEPRECATED !== $level) {
- return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
- }
-
- $templateLine = 0;
- if (preg_match('/ at line (\d+)[ .]/', $message, $matches)) {
- $templateLine = $matches[1];
- }
-
- throw new Error($message, $templateLine);
- });
- }
-
$realLoader = $this->twig->getLoader();
try {
$temporaryLoader = new ArrayLoader([$value]);
$this->twig->setLoader($temporaryLoader);
- $this->twig->parse($this->twig->tokenize(new Source($value, '')));
+
+ if (!$constraint->skipDeprecations) {
+ $prevErrorHandler = set_error_handler(static function ($level, $message, $file, $line) use (&$prevErrorHandler) {
+ if (\E_USER_DEPRECATED !== $level) {
+ return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
+ }
+
+ $templateLine = 0;
+ if (preg_match('/ at line (\d+)[ .]/', $message, $matches)) {
+ $templateLine = $matches[1];
+ }
+
+ throw new Error($message, $templateLine);
+ });
+ }
+
+ try {
+ $this->twig->parse($this->twig->tokenize(new Source($value, '')));
+ } finally {
+ if (!$constraint->skipDeprecations) {
+ restore_error_handler();
+ }
+ }
} catch (Error $e) {
$this->context->buildViolation($constraint->message)
->setParameter('{{ error }}', $e->getMessage())
@@ -73,9 +80,6 @@ public function validate(mixed $value, Constraint $constraint): void
->addViolation();
} finally {
$this->twig->setLoader($realLoader);
- if (!$constraint->skipDeprecations) {
- restore_error_handler();
- }
}
}
}
diff --git a/src/Symfony/Bundle/DebugBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/DebugBundle/DependencyInjection/Configuration.php
index 4dbdc4c7abb81..a72034d98293a 100644
--- a/src/Symfony/Bundle/DebugBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/DebugBundle/DependencyInjection/Configuration.php
@@ -26,7 +26,9 @@ public function getConfigTreeBuilder(): TreeBuilder
$treeBuilder = new TreeBuilder('debug');
$rootNode = $treeBuilder->getRootNode();
- $rootNode->children()
+ $rootNode
+ ->docUrl('https://symfony.com/doc/{version:major}.{version:minor}/reference/configuration/debug.html', 'symfony/debug-bundle')
+ ->children()
->integerNode('max_items')
->info('Max number of displayed items past the first level, -1 means no limit.')
->min(-1)
diff --git a/src/Symfony/Bundle/DebugBundle/composer.json b/src/Symfony/Bundle/DebugBundle/composer.json
index d00a4db6424c0..31b480091abdc 100644
--- a/src/Symfony/Bundle/DebugBundle/composer.json
+++ b/src/Symfony/Bundle/DebugBundle/composer.json
@@ -18,19 +18,16 @@
"require": {
"php": ">=8.2",
"ext-xml": "*",
+ "composer-runtime-api": ">=2.1",
+ "symfony/config": "^7.3",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/twig-bridge": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0"
},
"require-dev": {
- "symfony/config": "^6.4|^7.0",
"symfony/web-profiler-bundle": "^6.4|^7.0"
},
- "conflict": {
- "symfony/config": "<6.4",
- "symfony/dependency-injection": "<6.4"
- },
"autoload": {
"psr-4": { "Symfony\\Bundle\\DebugBundle\\": "" },
"exclude-from-classmap": [
diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
index 6c4daeb6df85d..ce62c9cdf836b 100644
--- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
+++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
@@ -4,6 +4,34 @@ CHANGELOG
7.3
---
+ * Add `errors.php` and `webhook.php` routing configuration files (use them instead of their XML equivalent)
+
+ Before:
+
+ ```yaml
+ when@dev:
+ _errors:
+ resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
+ prefix: /_error
+
+ webhook:
+ resource: '@FrameworkBundle/Resources/config/routing/webhook.xml'
+ prefix: /webhook
+ ```
+
+ After:
+
+ ```yaml
+ when@dev:
+ _errors:
+ resource: '@FrameworkBundle/Resources/config/routing/errors.php'
+ prefix: /_error
+
+ webhook:
+ resource: '@FrameworkBundle/Resources/config/routing/webhook.php'
+ prefix: /webhook
+ ```
+
* Add support for the ObjectMapper component
* Add support for assets pre-compression
* Rename `TranslationUpdateCommand` to `TranslationExtractCommand`
@@ -22,6 +50,12 @@ CHANGELOG
* Enable service argument resolution on classes that use the `#[Route]` attribute,
the `#[AsController]` attribute is no longer required
* Deprecate setting the `framework.profiler.collect_serializer_data` config option to `false`
+ * Set `framework.rate_limiter.limiters.*.lock_factory` to `auto` by default
+ * Deprecate `RateLimiterFactory` autowiring aliases, use `RateLimiterFactoryInterface` instead
+ * Allow configuring compound rate limiters
+ * Make `ValidatorCacheWarmer` use `kernel.build_dir` instead of `cache_dir`
+ * Make `SerializeCacheWarmer` use `kernel.build_dir` instead of `cache_dir`
+ * Support executing custom workflow validators during container compilation
7.2
---
diff --git a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/SerializerCacheWarmer.php b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/SerializerCacheWarmer.php
index 46da4daaab4d1..fbf7083b70b28 100644
--- a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/SerializerCacheWarmer.php
+++ b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/SerializerCacheWarmer.php
@@ -41,6 +41,9 @@ public function __construct(
protected function doWarmUp(string $cacheDir, ArrayAdapter $arrayAdapter, ?string $buildDir = null): bool
{
+ if (!$buildDir) {
+ return false;
+ }
if (!$this->loaders) {
return true;
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ValidatorCacheWarmer.php b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ValidatorCacheWarmer.php
index 6ecaa4bd14d01..9c313f80a8662 100644
--- a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ValidatorCacheWarmer.php
+++ b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ValidatorCacheWarmer.php
@@ -41,6 +41,10 @@ public function __construct(
protected function doWarmUp(string $cacheDir, ArrayAdapter $arrayAdapter, ?string $buildDir = null): bool
{
+ if (!$buildDir) {
+ return false;
+ }
+
$loaders = $this->validatorBuilder->getLoaders();
$metadataFactory = new LazyLoadingMetadataFactory(new LoaderChain($loaders), $arrayAdapter);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDebugCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDebugCommand.php
index 55c101e9c29e3..8d5f85ceea4ca 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDebugCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDebugCommand.php
@@ -104,6 +104,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$io->title(
\sprintf('Current configuration for %s', $name === $extensionAlias ? \sprintf('extension with alias "%s"', $extensionAlias) : \sprintf('"%s"', $name))
);
+
+ if ($docUrl = $this->getDocUrl($extension, $container)) {
+ $io->comment(\sprintf('Documentation at %s', $docUrl));
+ }
}
$io->writeln($this->convertToFormat([$extensionAlias => $config], $format));
@@ -269,4 +273,15 @@ private function getAvailableFormatOptions(): array
{
return ['txt', 'yaml', 'json'];
}
+
+ private function getDocUrl(ExtensionInterface $extension, ContainerBuilder $container): ?string
+ {
+ $configuration = $extension instanceof ConfigurationInterface ? $extension : $extension->getConfiguration($container->getExtensionConfig($extension->getAlias()), $container);
+
+ return $configuration
+ ->getConfigTreeBuilder()
+ ->getRootNode()
+ ->getNode(true)
+ ->getAttribute('docUrl');
+ }
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDumpReferenceCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDumpReferenceCommand.php
index 7e5cd765fd2d3..3cb744d746cae 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDumpReferenceCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDumpReferenceCommand.php
@@ -23,6 +23,7 @@
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
+use Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface;
use Symfony\Component\Yaml\Yaml;
/**
@@ -123,6 +124,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$message .= \sprintf(' at path "%s"', $path);
}
+ if ($docUrl = $this->getExtensionDocUrl($extension)) {
+ $message .= \sprintf(' (see %s)', $docUrl);
+ }
+
switch ($format) {
case 'yaml':
$io->writeln(\sprintf('# %s', $message));
@@ -182,4 +187,18 @@ private function getAvailableFormatOptions(): array
{
return ['yaml', 'xml'];
}
+
+ private function getExtensionDocUrl(ConfigurationInterface|ConfigurationExtensionInterface $extension): ?string
+ {
+ $kernel = $this->getApplication()->getKernel();
+ $container = $this->getContainerBuilder($kernel);
+
+ $configuration = $extension instanceof ConfigurationInterface ? $extension : $extension->getConfiguration($container->getExtensionConfig($extension->getAlias()), $container);
+
+ return $configuration
+ ->getConfigTreeBuilder()
+ ->getRootNode()
+ ->getNode(true)
+ ->getAttribute('docUrl');
+ }
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/SecretsRevealCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/SecretsRevealCommand.php
index 150186b1d37ba..c2110ee76f683 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/SecretsRevealCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/SecretsRevealCommand.php
@@ -61,6 +61,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int
if (!\array_key_exists($name, $secrets)) {
$io->error(\sprintf('The secret "%s" does not exist.', $name));
+ return self::INVALID;
+ } elseif (null === $secrets[$name]) {
+ $io->error(\sprintf('The secret "%s" could not be decrypted.', $name));
+
return self::INVALID;
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
index aa61cb12c56f4..f4e137f04b980 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
@@ -48,9 +48,11 @@
use Symfony\Component\Translation\Translator;
use Symfony\Component\TypeInfo\Type;
use Symfony\Component\Uid\Factory\UuidFactory;
+use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Webhook\Controller\WebhookController;
use Symfony\Component\WebLink\HttpHeaderSerializer;
+use Symfony\Component\Workflow\Validator\DefinitionValidatorInterface;
use Symfony\Component\Workflow\WorkflowEvents;
/**
@@ -75,6 +77,7 @@ public function getConfigTreeBuilder(): TreeBuilder
$rootNode = $treeBuilder->getRootNode();
$rootNode
+ ->docUrl('https://symfony.com/doc/{version:major}.{version:minor}/reference/configuration/framework.html', 'symfony/framework-bundle')
->beforeNormalization()
->ifTrue(fn ($v) => !isset($v['assets']) && isset($v['templating']) && class_exists(Package::class))
->then(function ($v) {
@@ -254,6 +257,7 @@ private function addFormSection(ArrayNodeDefinition $rootNode, callable $enableI
->arrayNode('field_attr')
->performNoDeepMerging()
->normalizeKeys(false)
+ ->useAttributeAsKey('name')
->scalarPrototype()->end()
->defaultValue(['data-controller' => 'csrf-protection'])
->end()
@@ -401,6 +405,7 @@ private function addWorkflowSection(ArrayNodeDefinition $rootNode): void
->useAttributeAsKey('name')
->prototype('array')
->fixXmlConfig('support')
+ ->fixXmlConfig('definition_validator')
->fixXmlConfig('place')
->fixXmlConfig('transition')
->fixXmlConfig('event_to_dispatch', 'events_to_dispatch')
@@ -430,11 +435,28 @@ private function addWorkflowSection(ArrayNodeDefinition $rootNode): void
->prototype('scalar')
->cannotBeEmpty()
->validate()
- ->ifTrue(fn ($v) => !class_exists($v) && !interface_exists($v, false))
+ ->ifTrue(static fn ($v) => !class_exists($v) && !interface_exists($v, false))
->thenInvalid('The supported class or interface "%s" does not exist.')
->end()
->end()
->end()
+ ->arrayNode('definition_validators')
+ ->prototype('scalar')
+ ->cannotBeEmpty()
+ ->validate()
+ ->ifTrue(static fn ($v) => !class_exists($v))
+ ->thenInvalid('The validation class %s does not exist.')
+ ->end()
+ ->validate()
+ ->ifTrue(static fn ($v) => !is_a($v, DefinitionValidatorInterface::class, true))
+ ->thenInvalid(\sprintf('The validation class %%s is not an instance of "%s".', DefinitionValidatorInterface::class))
+ ->end()
+ ->validate()
+ ->ifTrue(static fn ($v) => 1 <= (new \ReflectionClass($v))->getConstructor()?->getNumberOfRequiredParameters())
+ ->thenInvalid('The %s validation class constructor must not have any arguments.')
+ ->end()
+ ->end()
+ ->end()
->scalarNode('support_strategy')
->cannotBeEmpty()
->end()
@@ -446,7 +468,7 @@ private function addWorkflowSection(ArrayNodeDefinition $rootNode): void
->variableNode('events_to_dispatch')
->defaultValue(null)
->validate()
- ->ifTrue(function ($v) {
+ ->ifTrue(static function ($v) {
if (null === $v) {
return false;
}
@@ -473,14 +495,14 @@ private function addWorkflowSection(ArrayNodeDefinition $rootNode): void
->arrayNode('places')
->beforeNormalization()
->always()
- ->then(function ($places) {
+ ->then(static function ($places) {
if (!\is_array($places)) {
throw new InvalidConfigurationException('The "places" option must be an array in workflow configuration.');
}
// It's an indexed array of shape ['place1', 'place2']
if (isset($places[0]) && \is_string($places[0])) {
- return array_map(function (string $place) {
+ return array_map(static function (string $place) {
return ['name' => $place];
}, $places);
}
@@ -520,7 +542,7 @@ private function addWorkflowSection(ArrayNodeDefinition $rootNode): void
->arrayNode('transitions')
->beforeNormalization()
->always()
- ->then(function ($transitions) {
+ ->then(static function ($transitions) {
if (!\is_array($transitions)) {
throw new InvalidConfigurationException('The "transitions" option must be an array in workflow configuration.');
}
@@ -587,20 +609,20 @@ private function addWorkflowSection(ArrayNodeDefinition $rootNode): void
->end()
->end()
->validate()
- ->ifTrue(function ($v) {
+ ->ifTrue(static function ($v) {
return $v['supports'] && isset($v['support_strategy']);
})
->thenInvalid('"supports" and "support_strategy" cannot be used together.')
->end()
->validate()
- ->ifTrue(function ($v) {
+ ->ifTrue(static function ($v) {
return !$v['supports'] && !isset($v['support_strategy']);
})
->thenInvalid('"supports" or "support_strategy" should be configured.')
->end()
->beforeNormalization()
->always()
- ->then(function ($values) {
+ ->then(static function ($values) {
// Special case to deal with XML when the user wants an empty array
if (\array_key_exists('event_to_dispatch', $values) && null === $values['event_to_dispatch']) {
$values['events_to_dispatch'] = [];
@@ -1074,7 +1096,7 @@ private function addValidationSection(ArrayNodeDefinition $rootNode, callable $e
->validate()->castToArray()->end()
->end()
->scalarNode('translation_domain')->defaultValue('validators')->end()
- ->enumNode('email_validation_mode')->values(['html5', 'loose', 'strict'])->defaultValue('html5')->end()
+ ->enumNode('email_validation_mode')->values((class_exists(Email::class) ? Email::VALIDATION_MODES : ['html5-allow-no-tld', 'html5', 'strict']) + ['loose'])->defaultValue('html5')->end()
->arrayNode('mapping')
->addDefaultsIfNotSet()
->fixXmlConfig('path')
@@ -1268,7 +1290,7 @@ private function addPropertyInfoSection(ArrayNodeDefinition $rootNode, callable
->then(function ($v) {
$v['property_info']['with_constructor_extractor'] = false;
- trigger_deprecation('symfony/framework-bundle', '7.3', 'Not setting the "with_constructor_extractor" option explicitly is deprecated because its default value will change in version 8.0.');
+ trigger_deprecation('symfony/framework-bundle', '7.3', 'Not setting the "property_info.with_constructor_extractor" option explicitly is deprecated because its default value will change in version 8.0.');
return $v;
})
@@ -2349,7 +2371,7 @@ private function addMailerSection(ArrayNodeDefinition $rootNode, callable $enabl
->info('S/MIME encrypter configuration')
->children()
->scalarNode('repository')
- ->info('Path to the S/MIME certificate repository. Shall implement the `Symfony\Component\Mailer\EventListener\SmimeCertificateRepositoryInterface`.')
+ ->info('S/MIME certificate repository service. This service shall implement the `Symfony\Component\Mailer\EventListener\SmimeCertificateRepositoryInterface`.')
->defaultValue('')
->cannotBeEmpty()
->end()
@@ -2504,7 +2526,7 @@ private function addRateLimiterSection(ArrayNodeDefinition $rootNode, callable $
->children()
->scalarNode('lock_factory')
->info('The service ID of the lock factory used by this limiter (or null to disable locking).')
- ->defaultValue('lock.factory')
+ ->defaultValue('auto')
->end()
->scalarNode('cache_pool')
->info('The cache pool to use for storing the current limiter state.')
@@ -2517,7 +2539,12 @@ private function addRateLimiterSection(ArrayNodeDefinition $rootNode, callable $
->enumNode('policy')
->info('The algorithm to be used by this limiter.')
->isRequired()
- ->values(['fixed_window', 'token_bucket', 'sliding_window', 'no_limit'])
+ ->values(['fixed_window', 'token_bucket', 'sliding_window', 'compound', 'no_limit'])
+ ->end()
+ ->arrayNode('limiters')
+ ->info('The limiter names to use when using the "compound" policy.')
+ ->beforeNormalization()->castToArray()->end()
+ ->scalarPrototype()->end()
->end()
->integerNode('limit')
->info('The maximum allowed hits in a fixed interval or burst.')
@@ -2536,8 +2563,8 @@ private function addRateLimiterSection(ArrayNodeDefinition $rootNode, callable $
->end()
->end()
->validate()
- ->ifTrue(fn ($v) => 'no_limit' !== $v['policy'] && !isset($v['limit']))
- ->thenInvalid('A limit must be provided when using a policy different than "no_limit".')
+ ->ifTrue(static fn ($v) => !\in_array($v['policy'], ['no_limit', 'compound']) && !isset($v['limit']))
+ ->thenInvalid('A limit must be provided when using a policy different than "compound" or "no_limit".')
->end()
->end()
->end()
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 1a1bcdd162d5d..05504af2e15a7 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -59,6 +59,7 @@
use Symfony\Component\Console\Debug\CliRequest;
use Symfony\Component\Console\Messenger\RunCommandMessageHandler;
use Symfony\Component\DependencyInjection\Alias;
+use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
use Symfony\Component\DependencyInjection\ChildDefinition;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
@@ -105,6 +106,7 @@
use Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\HttpKernel\Log\DebugLoggerConfigurator;
+use Symfony\Component\HttpKernel\Profiler\ProfilerStateChecker;
use Symfony\Component\JsonStreamer\Attribute\JsonStreamable;
use Symfony\Component\JsonStreamer\JsonStreamWriter;
use Symfony\Component\JsonStreamer\StreamReaderInterface;
@@ -125,6 +127,7 @@
use Symfony\Component\Messenger\Attribute\AsMessage;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
use Symfony\Component\Messenger\Bridge as MessengerBridge;
+use Symfony\Component\Messenger\EventListener\ResetMemoryUsageListener;
use Symfony\Component\Messenger\Handler\BatchHandlerInterface;
use Symfony\Component\Messenger\MessageBus;
use Symfony\Component\Messenger\MessageBusInterface;
@@ -158,6 +161,7 @@
use Symfony\Component\PropertyInfo\PropertyInitializableExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyListExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyTypeExtractorInterface;
+use Symfony\Component\RateLimiter\CompoundRateLimiterFactory;
use Symfony\Component\RateLimiter\LimiterInterface;
use Symfony\Component\RateLimiter\RateLimiterFactory;
use Symfony\Component\RateLimiter\RateLimiterFactoryInterface;
@@ -298,6 +302,10 @@ public function load(array $configs, ContainerBuilder $container): void
// Load Cache configuration first as it is used by other components
$loader->load('cache.php');
+ if (!interface_exists(NamespacedPoolInterface::class)) {
+ $container->removeAlias(NamespacedPoolInterface::class);
+ }
+
$configuration = $this->getConfiguration($configs, $container);
$config = $this->processConfiguration($configuration, $configs);
@@ -565,9 +573,9 @@ public function load(array $configs, ContainerBuilder $container): void
$container->removeDefinition('console.command.scheduler_debug');
}
- // messenger depends on validation being registered
+ // messenger depends on validation, and lock being registered
if ($messengerEnabled) {
- $this->registerMessengerConfiguration($config['messenger'], $container, $loader, $this->readConfigEnabled('validation', $container, $config['validation']), $this->readConfigEnabled('lock', $container, $config['lock']));
+ $this->registerMessengerConfiguration($config['messenger'], $container, $loader, $this->readConfigEnabled('validation', $container, $config['validation']), $this->readConfigEnabled('lock', $container, $config['lock']) && ($config['lock']['resources']['default'] ?? false));
} else {
$container->removeDefinition('console.command.messenger_consume_messages');
$container->removeDefinition('console.command.messenger_stats');
@@ -638,6 +646,14 @@ public function load(array $configs, ContainerBuilder $container): void
$loader->load('mime_type.php');
}
+ if (ContainerBuilder::willBeAvailable('symfony/object-mapper', ObjectMapperInterface::class, ['symfony/framework-bundle'])) {
+ $loader->load('object_mapper.php');
+ $container->registerForAutoconfiguration(TransformCallableInterface::class)
+ ->addTag('object_mapper.transform_callable');
+ $container->registerForAutoconfiguration(ConditionCallableInterface::class)
+ ->addTag('object_mapper.condition_callable');
+ }
+
$container->registerForAutoconfiguration(PackageInterface::class)
->addTag('assets.package');
$container->registerForAutoconfiguration(AssetCompilerInterface::class)
@@ -787,34 +803,34 @@ static function (ChildDefinition $definition, AsPeriodicTask|AsCronTask $attribu
}
$container->registerForAutoconfiguration(CompilerPassInterface::class)
- ->addTag('container.excluded', ['source' => 'because it\'s a compiler pass'])->setAbstract(true);
+ ->addTag('container.excluded', ['source' => 'because it\'s a compiler pass']);
$container->registerForAutoconfiguration(Constraint::class)
- ->addTag('container.excluded', ['source' => 'because it\'s a validation constraint'])->setAbstract(true);
+ ->addTag('container.excluded', ['source' => 'because it\'s a validation constraint']);
$container->registerForAutoconfiguration(TestCase::class)
- ->addTag('container.excluded', ['source' => 'because it\'s a test case'])->setAbstract(true);
+ ->addTag('container.excluded', ['source' => 'because it\'s a test case']);
$container->registerForAutoconfiguration(\UnitEnum::class)
- ->addTag('container.excluded', ['source' => 'because it\'s an enum'])->setAbstract(true);
+ ->addTag('container.excluded', ['source' => 'because it\'s an enum']);
$container->registerAttributeForAutoconfiguration(AsMessage::class, static function (ChildDefinition $definition) {
- $definition->addTag('container.excluded', ['source' => 'because it\'s a messenger message'])->setAbstract(true);
+ $definition->addTag('container.excluded', ['source' => 'because it\'s a messenger message']);
});
$container->registerAttributeForAutoconfiguration(\Attribute::class, static function (ChildDefinition $definition) {
- $definition->addTag('container.excluded', ['source' => 'because it\'s an attribute'])->setAbstract(true);
+ $definition->addTag('container.excluded', ['source' => 'because it\'s a PHP attribute']);
});
$container->registerAttributeForAutoconfiguration(Entity::class, static function (ChildDefinition $definition) {
- $definition->addTag('container.excluded', ['source' => 'because it\'s a doctrine entity'])->setAbstract(true);
+ $definition->addTag('container.excluded', ['source' => 'because it\'s a Doctrine entity']);
});
$container->registerAttributeForAutoconfiguration(Embeddable::class, static function (ChildDefinition $definition) {
- $definition->addTag('container.excluded', ['source' => 'because it\'s a doctrine embeddable'])->setAbstract(true);
+ $definition->addTag('container.excluded', ['source' => 'because it\'s a Doctrine embeddable']);
});
$container->registerAttributeForAutoconfiguration(MappedSuperclass::class, static function (ChildDefinition $definition) {
- $definition->addTag('container.excluded', ['source' => 'because it\'s a doctrine mapped superclass'])->setAbstract(true);
+ $definition->addTag('container.excluded', ['source' => 'because it\'s a Doctrine mapped superclass']);
});
$container->registerAttributeForAutoconfiguration(JsonStreamable::class, static function (ChildDefinition $definition, JsonStreamable $attribute) {
$definition->addTag('json_streamer.streamable', [
'object' => $attribute->asObject,
'list' => $attribute->asList,
- ])->addTag('container.excluded', ['source' => 'because it\'s a streamable JSON'])->setAbstract(true);
+ ])->addTag('container.excluded', ['source' => 'because it\'s a streamable JSON']);
});
if (!$container->getParameter('kernel.debug')) {
@@ -822,7 +838,7 @@ static function (ChildDefinition $definition, AsPeriodicTask|AsCronTask $attribu
$container->getDefinition('config_cache_factory')->setArguments([]);
}
- if (!$config['disallow_search_engine_index'] ?? false) {
+ if (!$config['disallow_search_engine_index']) {
$container->removeDefinition('disallow_search_engine_index_response_listener');
}
@@ -876,14 +892,6 @@ private function registerFormConfiguration(array $config, ContainerBuilder $cont
if (!ContainerBuilder::willBeAvailable('symfony/translation', Translator::class, ['symfony/framework-bundle', 'symfony/form'])) {
$container->removeDefinition('form.type_extension.upload.validator');
}
-
- if (ContainerBuilder::willBeAvailable('symfony/object-mapper', ObjectMapperInterface::class, ['symfony/framework-bundle'])) {
- $loader->load('object_mapper.php');
- $container->registerForAutoconfiguration(TransformCallableInterface::class)
- ->addTag('object_mapper.transform_callable');
- $container->registerForAutoconfiguration(ConditionCallableInterface::class)
- ->addTag('object_mapper.condition_callable');
- }
}
private function registerHttpCacheConfiguration(array $config, ContainerBuilder $container, bool $httpMethodOverride): void
@@ -960,6 +968,11 @@ private function registerProfilerConfiguration(array $config, ContainerBuilder $
$loader->load('collectors.php');
$loader->load('cache_debug.php');
+ if (!class_exists(ProfilerStateChecker::class)) {
+ $container->removeDefinition('profiler.state_checker');
+ $container->removeDefinition('profiler.is_disabled_state_checker');
+ }
+
if ($this->isInitializedConfigEnabled('form')) {
$loader->load('form_debug.php');
}
@@ -1114,7 +1127,8 @@ private function registerWorkflowConfiguration(array $config, ContainerBuilder $
}
}
$metadataStoreDefinition->replaceArgument(2, $transitionsMetadataDefinition);
- $container->setDefinition(\sprintf('%s.metadata_store', $workflowId), $metadataStoreDefinition);
+ $metadataStoreId = \sprintf('%s.metadata_store', $workflowId);
+ $container->setDefinition($metadataStoreId, $metadataStoreDefinition);
// Create places
$places = array_column($workflow['places'], 'name');
@@ -1125,7 +1139,8 @@ private function registerWorkflowConfiguration(array $config, ContainerBuilder $
$definitionDefinition->addArgument($places);
$definitionDefinition->addArgument($transitions);
$definitionDefinition->addArgument($initialMarking);
- $definitionDefinition->addArgument(new Reference(\sprintf('%s.metadata_store', $workflowId)));
+ $definitionDefinition->addArgument(new Reference($metadataStoreId));
+ $definitionDefinitionId = \sprintf('%s.definition', $workflowId);
// Create MarkingStore
$markingStoreDefinition = null;
@@ -1139,14 +1154,26 @@ private function registerWorkflowConfiguration(array $config, ContainerBuilder $
$markingStoreDefinition = new Reference($workflow['marking_store']['service']);
}
+ // Validation
+ $workflow['definition_validators'][] = match ($workflow['type']) {
+ 'state_machine' => Workflow\Validator\StateMachineValidator::class,
+ 'workflow' => Workflow\Validator\WorkflowValidator::class,
+ default => throw new \LogicException(\sprintf('Invalid workflow type "%s".', $workflow['type'])),
+ };
+
// Create Workflow
$workflowDefinition = new ChildDefinition(\sprintf('%s.abstract', $type));
- $workflowDefinition->replaceArgument(0, new Reference(\sprintf('%s.definition', $workflowId)));
+ $workflowDefinition->replaceArgument(0, new Reference($definitionDefinitionId));
$workflowDefinition->replaceArgument(1, $markingStoreDefinition);
$workflowDefinition->replaceArgument(3, $name);
$workflowDefinition->replaceArgument(4, $workflow['events_to_dispatch']);
- $workflowDefinition->addTag('workflow', ['name' => $name, 'metadata' => $workflow['metadata']]);
+ $workflowDefinition->addTag('workflow', [
+ 'name' => $name,
+ 'metadata' => $workflow['metadata'],
+ 'definition_validators' => $workflow['definition_validators'],
+ 'definition_id' => $definitionDefinitionId,
+ ]);
if ('workflow' === $type) {
$workflowDefinition->addTag('workflow.workflow', ['name' => $name]);
} elseif ('state_machine' === $type) {
@@ -1155,21 +1182,10 @@ private function registerWorkflowConfiguration(array $config, ContainerBuilder $
// Store to container
$container->setDefinition($workflowId, $workflowDefinition);
- $container->setDefinition(\sprintf('%s.definition', $workflowId), $definitionDefinition);
+ $container->setDefinition($definitionDefinitionId, $definitionDefinition);
$container->registerAliasForArgument($workflowId, WorkflowInterface::class, $name.'.'.$type);
$container->registerAliasForArgument($workflowId, WorkflowInterface::class, $name);
- // Validate Workflow
- if ('state_machine' === $workflow['type']) {
- $validator = new Workflow\Validator\StateMachineValidator();
- } else {
- $validator = new Workflow\Validator\WorkflowValidator();
- }
-
- $trs = array_map(fn (Reference $ref): Workflow\Transition => $container->get((string) $ref), $transitions);
- $realDefinition = new Workflow\Definition($places, $trs, $initialMarking);
- $validator->validate($realDefinition, $name);
-
// Add workflow to Registry
if ($workflow['supports']) {
foreach ($workflow['supports'] as $supportedClassName) {
@@ -2281,7 +2297,7 @@ private function registerSchedulerConfiguration(ContainerBuilder $container, Php
}
// BC layer Scheduler < 7.3
- if (!class_exists(SchedulerTriggerNormalizer::class)) {
+ if (!ContainerBuilder::willBeAvailable('symfony/serializer', DenormalizerInterface::class, ['symfony/framework-bundle', 'symfony/scheduler']) || !class_exists(SchedulerTriggerNormalizer::class)) {
$container->removeDefinition('serializer.normalizer.scheduler_trigger');
}
}
@@ -2302,6 +2318,10 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
$container->removeDefinition('serializer.normalizer.flatten_exception');
}
+ if (!class_exists(ResetMemoryUsageListener::class)) {
+ $container->removeDefinition('messenger.listener.reset_memory_usage');
+ }
+
if (ContainerBuilder::willBeAvailable('symfony/amqp-messenger', MessengerBridge\Amqp\Transport\AmqpTransportFactory::class, ['symfony/framework-bundle', 'symfony/messenger'])) {
$container->getDefinition('messenger.transport.amqp.factory')->addTag('messenger.transport_factory');
}
@@ -3232,13 +3252,30 @@ private function registerRateLimiterConfiguration(array $config, ContainerBuilde
{
$loader->load('rate_limiter.php');
+ $limiters = [];
+ $compoundLimiters = [];
+
foreach ($config['limiters'] as $name => $limiterConfig) {
+ if ('compound' === $limiterConfig['policy']) {
+ $compoundLimiters[$name] = $limiterConfig;
+
+ continue;
+ }
+
+ unset($limiterConfig['limiters']);
+
+ $limiters[] = $name;
+
// default configuration (when used by other DI extensions)
$limiterConfig += ['lock_factory' => 'lock.factory', 'cache_pool' => 'cache.rate_limiter'];
$limiter = $container->setDefinition($limiterId = 'limiter.'.$name, new ChildDefinition('limiter'))
->addTag('rate_limiter', ['name' => $name]);
+ if ('auto' === $limiterConfig['lock_factory']) {
+ $limiterConfig['lock_factory'] = $this->isInitializedConfigEnabled('lock') ? 'lock.factory' : null;
+ }
+
if (null !== $limiterConfig['lock_factory']) {
if (!interface_exists(LockInterface::class)) {
throw new LogicException(\sprintf('Rate limiter "%s" requires the Lock component to be installed. Try running "composer require symfony/lock".', $name));
@@ -3262,11 +3299,36 @@ private function registerRateLimiterConfiguration(array $config, ContainerBuilde
$limiterConfig['id'] = $name;
$limiter->replaceArgument(0, $limiterConfig);
- $container->registerAliasForArgument($limiterId, RateLimiterFactory::class, $name.'.limiter');
+ $factoryAlias = $container->registerAliasForArgument($limiterId, RateLimiterFactory::class, $name.'.limiter');
if (interface_exists(RateLimiterFactoryInterface::class)) {
$container->registerAliasForArgument($limiterId, RateLimiterFactoryInterface::class, $name.'.limiter');
+ $factoryAlias->setDeprecated('symfony/dependency-injection', '7.3', 'The "%alias_id%" autowiring alias is deprecated and will be removed in 8.0, use "RateLimiterFactoryInterface" instead.');
+ }
+ }
+
+ if ($compoundLimiters && !class_exists(CompoundRateLimiterFactory::class)) {
+ throw new LogicException('Configuring compound rate limiters is only available in symfony/rate-limiter 7.3+.');
+ }
+
+ foreach ($compoundLimiters as $name => $limiterConfig) {
+ if (!$limiterConfig['limiters']) {
+ throw new LogicException(\sprintf('Compound rate limiter "%s" requires at least one sub-limiter.', $name));
}
+
+ if (\array_diff($limiterConfig['limiters'], $limiters)) {
+ throw new LogicException(\sprintf('Compound rate limiter "%s" requires at least one sub-limiter to be configured.', $name));
+ }
+
+ $container->register($limiterId = 'limiter.'.$name, CompoundRateLimiterFactory::class)
+ ->addTag('rate_limiter', ['name' => $name])
+ ->addArgument(new IteratorArgument(\array_map(
+ static fn (string $name) => new Reference('limiter.'.$name),
+ $limiterConfig['limiters']
+ )))
+ ;
+
+ $container->registerAliasForArgument($limiterId, RateLimiterFactoryInterface::class, $name.'.limiter');
}
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php
index faf2841f40105..300fe22fb37a9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php
+++ b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php
@@ -11,6 +11,7 @@
namespace Symfony\Bundle\FrameworkBundle;
+use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddDebugLogProcessorPass;
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AssetsContextPass;
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ContainerBuilderDebugDumpPass;
@@ -77,6 +78,7 @@
use Symfony\Component\VarExporter\Internal\Registry;
use Symfony\Component\Workflow\DependencyInjection\WorkflowDebugPass;
use Symfony\Component\Workflow\DependencyInjection\WorkflowGuardListenerPass;
+use Symfony\Component\Workflow\DependencyInjection\WorkflowValidatorPass;
// Help opcache.preload discover always-needed symbols
class_exists(ApcuAdapter::class);
@@ -173,6 +175,7 @@ public function build(ContainerBuilder $container): void
$container->addCompilerPass(new CachePoolPrunerPass(), PassConfig::TYPE_AFTER_REMOVING);
$this->addCompilerPassIfExists($container, FormPass::class);
$this->addCompilerPassIfExists($container, WorkflowGuardListenerPass::class);
+ $this->addCompilerPassIfExists($container, WorkflowValidatorPass::class);
$container->addCompilerPass(new ResettableServicePass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, -32);
$container->addCompilerPass(new RegisterLocaleAwareServicesPass());
$container->addCompilerPass(new TestServiceContainerWeakRefPass(), PassConfig::TYPE_BEFORE_REMOVING, -32);
@@ -200,6 +203,14 @@ public function build(ContainerBuilder $container): void
}
}
+ /**
+ * @internal
+ */
+ public static function considerProfilerEnabled(): bool
+ {
+ return !($GLOBALS['app'] ?? null) instanceof Application || empty($_GET) && \in_array('--profile', $_SERVER['argv'] ?? [], true);
+ }
+
private function addCompilerPassIfExists(ContainerBuilder $container, string $class, string $type = PassConfig::TYPE_BEFORE_OPTIMIZATION, int $priority = 0): void
{
$container->addResource(new ClassExistenceResource($class));
diff --git a/src/Symfony/Bundle/FrameworkBundle/Kernel/MicroKernelTrait.php b/src/Symfony/Bundle/FrameworkBundle/Kernel/MicroKernelTrait.php
index 28d616c13e1c1..f40373a302b45 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Kernel/MicroKernelTrait.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Kernel/MicroKernelTrait.php
@@ -165,7 +165,6 @@ public function registerContainerConfiguration(LoaderInterface $loader): void
->setPublic(true)
;
}
- $container->setAlias($kernelClass, 'kernel')->setPublic(true);
$kernelDefinition = $container->getDefinition('kernel');
$kernelDefinition->addTag('routing.route_loader');
@@ -198,6 +197,8 @@ public function registerContainerConfiguration(LoaderInterface $loader): void
$kernelLoader->registerAliasesForSinglyImplementedInterfaces();
AbstractConfigurator::$valuePreProcessor = $valuePreProcessor;
}
+
+ $container->setAlias($kernelClass, 'kernel')->setPublic(true);
});
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/cache.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/cache.php
index 3d96ba05994ca..ae9d426a498c6 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/cache.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/cache.php
@@ -28,6 +28,7 @@
use Symfony\Component\Cache\Messenger\EarlyExpirationHandler;
use Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer;
use Symfony\Contracts\Cache\CacheInterface;
+use Symfony\Contracts\Cache\NamespacedPoolInterface;
use Symfony\Contracts\Cache\TagAwareCacheInterface;
return static function (ContainerConfigurator $container) {
@@ -250,6 +251,8 @@
->alias(CacheInterface::class, 'cache.app')
+ ->alias(NamespacedPoolInterface::class, 'cache.app')
+
->alias(TagAwareCacheInterface::class, 'cache.app.taggable')
;
};
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.php
index 5c426653daeca..842f5b35b412a 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.php
@@ -25,6 +25,7 @@
service('debug.stopwatch'),
service('logger')->nullOnInvalid(),
service('.virtual_request_stack')->nullOnInvalid(),
+ service('profiler.is_disabled_state_checker')->nullOnInvalid(),
])
->tag('monolog.logger', ['channel' => 'event'])
->tag('kernel.reset', ['method' => 'reset'])
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.php
index 880adbb908ebf..43e7fb9a5e4cb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.php
@@ -50,7 +50,6 @@
tagged_iterator('mailer.transport_factory'),
])
- ->set('mailer.default_transport', TransportInterface::class)
->alias('mailer.default_transport', 'mailer.transports')
->alias(TransportInterface::class, 'mailer.default_transport')
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php
index 8798d5f2e5e3e..e02cd1ca34c0d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php
@@ -18,6 +18,7 @@
use Symfony\Component\Messenger\Bridge\Redis\Transport\RedisTransportFactory;
use Symfony\Component\Messenger\EventListener\AddErrorDetailsStampListener;
use Symfony\Component\Messenger\EventListener\DispatchPcntlSignalListener;
+use Symfony\Component\Messenger\EventListener\ResetMemoryUsageListener;
use Symfony\Component\Messenger\EventListener\ResetServicesListener;
use Symfony\Component\Messenger\EventListener\SendFailedMessageForRetryListener;
use Symfony\Component\Messenger\EventListener\SendFailedMessageToFailureTransportListener;
@@ -218,6 +219,9 @@
service('services_resetter'),
])
+ ->set('messenger.listener.reset_memory_usage', ResetMemoryUsageListener::class)
+ ->tag('kernel.event_subscriber')
+
->set('messenger.routable_message_bus', RoutableMessageBus::class)
->args([
abstract_arg('message bus locator'),
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.php
index 4ae34649b4aaf..a81c53a633461 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.php
@@ -12,10 +12,12 @@
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\EventListener\ConsoleProfilerListener;
+use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
use Symfony\Component\HttpKernel\Debug\VirtualRequestStack;
use Symfony\Component\HttpKernel\EventListener\ProfilerListener;
use Symfony\Component\HttpKernel\Profiler\FileProfilerStorage;
use Symfony\Component\HttpKernel\Profiler\Profiler;
+use Symfony\Component\HttpKernel\Profiler\ProfilerStateChecker;
return static function (ContainerConfigurator $container) {
$container->services()
@@ -56,5 +58,15 @@
->set('.virtual_request_stack', VirtualRequestStack::class)
->args([service('request_stack')])
->public()
+
+ ->set('profiler.state_checker', ProfilerStateChecker::class)
+ ->args([
+ service_locator(['profiler' => service('profiler')->ignoreOnUninitialized()]),
+ inline_service('bool')->factory([FrameworkBundle::class, 'considerProfilerEnabled']),
+ ])
+
+ ->set('profiler.is_disabled_state_checker', 'Closure')
+ ->factory(['Closure', 'fromCallable'])
+ ->args([[service('profiler.state_checker'), 'isProfilerDisabled']])
;
};
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/errors.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/errors.php
new file mode 100644
index 0000000000000..36a46dee407ea
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/errors.php
@@ -0,0 +1,31 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
+use Symfony\Component\Routing\Loader\XmlFileLoader;
+
+return function (RoutingConfigurator $routes): void {
+ foreach (debug_backtrace() as $trace) {
+ if (isset($trace['object']) && $trace['object'] instanceof XmlFileLoader && 'doImport' === $trace['function']) {
+ if (__DIR__ === dirname(realpath($trace['args'][3]))) {
+ trigger_deprecation('symfony/routing', '7.3', 'The "errors.xml" routing configuration file is deprecated, import "errors.php" instead.');
+
+ break;
+ }
+ }
+ }
+
+ $routes->add('_preview_error', '/{code}.{_format}')
+ ->controller('error_controller::preview')
+ ->defaults(['_format' => 'html'])
+ ->requirements(['code' => '\d+'])
+ ;
+};
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/errors.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/errors.xml
index 13a9cc4076c79..f890aef1e3365 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/errors.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/errors.xml
@@ -4,9 +4,5 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
-
- error_controller::preview
- html
- \d+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/webhook.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/webhook.php
new file mode 100644
index 0000000000000..177606b26214e
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/webhook.php
@@ -0,0 +1,30 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
+use Symfony\Component\Routing\Loader\XmlFileLoader;
+
+return function (RoutingConfigurator $routes): void {
+ foreach (debug_backtrace() as $trace) {
+ if (isset($trace['object']) && $trace['object'] instanceof XmlFileLoader && 'doImport' === $trace['function']) {
+ if (__DIR__ === dirname(realpath($trace['args'][3]))) {
+ trigger_deprecation('symfony/routing', '7.3', 'The "webhook.xml" routing configuration file is deprecated, import "webhook.php" instead.');
+
+ break;
+ }
+ }
+ }
+
+ $routes->add('_webhook_controller', '/{type}')
+ ->controller('webhook.controller::handle')
+ ->requirements(['type' => '.+'])
+ ;
+};
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/webhook.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/webhook.xml
index dfa95cfac555e..8cb64ebb74fd7 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/webhook.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/webhook.xml
@@ -4,8 +4,5 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
-
- webhook.controller::handle
- .+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
index c4ee3486dae87..7f4b48a18b296 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
@@ -80,7 +80,7 @@
-
+
@@ -449,6 +449,7 @@
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php
index 535b95a399248..e0a256bbe3640 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php
@@ -56,7 +56,7 @@
return static function (ContainerConfigurator $container) {
$container->parameters()
- ->set('serializer.mapping.cache.file', '%kernel.cache_dir%/serialization.php')
+ ->set('serializer.mapping.cache.file', '%kernel.build_dir%/serialization.php')
;
$container->services()
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.php
index 558c2b6d52334..936867d542afb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.php
@@ -158,6 +158,9 @@ class_exists(WorkflowEvents::class) ? WorkflowEvents::ALIASES : []
->set('uri_signer', UriSigner::class)
->args([
new Parameter('kernel.secret'),
+ '_hash',
+ '_expiration',
+ service('clock')->nullOnInvalid(),
])
->lazy()
->alias(UriSigner::class, 'uri_signer')
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.php
index adde2de238e05..535b42edc1bc3 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.php
@@ -28,7 +28,7 @@
return static function (ContainerConfigurator $container) {
$container->parameters()
- ->set('validator.mapping.cache.file', param('kernel.cache_dir').'/validation.php');
+ ->set('validator.mapping.cache.file', '%kernel.build_dir%/validation.php');
$validatorsDir = \dirname((new \ReflectionClass(EmailValidator::class))->getFileName());
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator_debug.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator_debug.php
index e9fe441140742..b195aea2b57b0 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator_debug.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator_debug.php
@@ -20,6 +20,7 @@
->decorate('validator', null, 255)
->args([
service('debug.validator.inner'),
+ service('profiler.is_disabled_state_checker')->nullOnInvalid(),
])
->tag('kernel.reset', [
'method' => 'reset',
diff --git a/src/Symfony/Bundle/FrameworkBundle/Secrets/AbstractVault.php b/src/Symfony/Bundle/FrameworkBundle/Secrets/AbstractVault.php
index 882ec78628839..788601d2e91ed 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Secrets/AbstractVault.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Secrets/AbstractVault.php
@@ -31,6 +31,9 @@ abstract public function reveal(string $name): ?string;
abstract public function remove(string $name): bool;
+ /**
+ * @return array
+ */
abstract public function list(bool $reveal = false): array;
protected function validateName(string $name): void
diff --git a/src/Symfony/Bundle/FrameworkBundle/Secrets/DotenvVault.php b/src/Symfony/Bundle/FrameworkBundle/Secrets/DotenvVault.php
index 15952611ac1a1..3fab5f4e28525 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Secrets/DotenvVault.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Secrets/DotenvVault.php
@@ -89,13 +89,13 @@ public function list(bool $reveal = false): array
foreach ($_ENV as $k => $v) {
if ('' !== ($v ?? '') && preg_match('/^\w+$/D', $k)) {
- $secrets[$k] = $reveal ? $v : null;
+ $secrets[$k] = \is_string($v) && $reveal ? $v : null;
}
}
foreach ($_SERVER as $k => $v) {
if ('' !== ($v ?? '') && preg_match('/^\w+$/D', $k)) {
- $secrets[$k] = $reveal ? $v : null;
+ $secrets[$k] = \is_string($v) && $reveal ? $v : null;
}
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php b/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php
index b2c2eb4d23089..87925f73c9b52 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php
@@ -39,6 +39,14 @@ protected function tearDown(): void
static::$booted = false;
}
+ public static function tearDownAfterClass(): void
+ {
+ static::ensureKernelShutdown();
+ static::$class = null;
+ static::$kernel = null;
+ static::$booted = false;
+ }
+
/**
* @throws \RuntimeException
* @throws \LogicException
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/SerializerCacheWarmerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/SerializerCacheWarmerTest.php
index 5feb0c8ec1bd7..9b765c36a18e6 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/SerializerCacheWarmerTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/SerializerCacheWarmerTest.php
@@ -30,9 +30,50 @@ public function testWarmUp(array $loaders)
@unlink($file);
$warmer = new SerializerCacheWarmer($loaders, $file);
- $warmer->warmUp(\dirname($file));
+ $warmer->warmUp(\dirname($file), \dirname($file));
+
+ $this->assertFileExists($file);
+
+ $arrayPool = new PhpArrayAdapter($file, new NullAdapter());
+
+ $this->assertTrue($arrayPool->getItem('Symfony_Bundle_FrameworkBundle_Tests_Fixtures_Serialization_Person')->isHit());
+ $this->assertTrue($arrayPool->getItem('Symfony_Bundle_FrameworkBundle_Tests_Fixtures_Serialization_Author')->isHit());
+ }
+
+ /**
+ * @dataProvider loaderProvider
+ */
+ public function testWarmUpAbsoluteFilePath(array $loaders)
+ {
+ $file = sys_get_temp_dir().'/0/cache-serializer.php';
+ @unlink($file);
+
+ $cacheDir = sys_get_temp_dir().'/1';
+
+ $warmer = new SerializerCacheWarmer($loaders, $file);
+ $warmer->warmUp($cacheDir, $cacheDir);
$this->assertFileExists($file);
+ $this->assertFileDoesNotExist($cacheDir.'/cache-serializer.php');
+
+ $arrayPool = new PhpArrayAdapter($file, new NullAdapter());
+
+ $this->assertTrue($arrayPool->getItem('Symfony_Bundle_FrameworkBundle_Tests_Fixtures_Serialization_Person')->isHit());
+ $this->assertTrue($arrayPool->getItem('Symfony_Bundle_FrameworkBundle_Tests_Fixtures_Serialization_Author')->isHit());
+ }
+
+ /**
+ * @dataProvider loaderProvider
+ */
+ public function testWarmUpWithoutBuildDir(array $loaders)
+ {
+ $file = sys_get_temp_dir().'/cache-serializer.php';
+ @unlink($file);
+
+ $warmer = new SerializerCacheWarmer($loaders, $file);
+ $warmer->warmUp(\dirname($file));
+
+ $this->assertFileDoesNotExist($file);
$arrayPool = new PhpArrayAdapter($file, new NullAdapter());
@@ -66,7 +107,7 @@ public function testWarmUpWithoutLoader()
@unlink($file);
$warmer = new SerializerCacheWarmer([], $file);
- $warmer->warmUp(\dirname($file));
+ $warmer->warmUp(\dirname($file), \dirname($file));
$this->assertFileExists($file);
}
@@ -79,7 +120,10 @@ public function testClassAutoloadException()
{
$this->assertFalse(class_exists($mappedClass = 'AClassThatDoesNotExist_FWB_CacheWarmer_SerializerCacheWarmerTest', false));
- $warmer = new SerializerCacheWarmer([new YamlFileLoader(__DIR__.'/../Fixtures/Serialization/Resources/does_not_exist.yaml')], tempnam(sys_get_temp_dir(), __FUNCTION__));
+ $file = tempnam(sys_get_temp_dir(), __FUNCTION__);
+ @unlink($file);
+
+ $warmer = new SerializerCacheWarmer([new YamlFileLoader(__DIR__.'/../Fixtures/Serialization/Resources/does_not_exist.yaml')], $file);
spl_autoload_register($classLoader = function ($class) use ($mappedClass) {
if ($class === $mappedClass) {
@@ -87,7 +131,8 @@ public function testClassAutoloadException()
}
}, true, true);
- $warmer->warmUp('foo');
+ $warmer->warmUp(\dirname($file), \dirname($file));
+ $this->assertFileExists($file);
spl_autoload_unregister($classLoader);
}
@@ -98,12 +143,12 @@ public function testClassAutoloadException()
*/
public function testClassAutoloadExceptionWithUnrelatedException()
{
- $this->expectException(\DomainException::class);
- $this->expectExceptionMessage('This exception should not be caught by the warmer.');
-
$this->assertFalse(class_exists($mappedClass = 'AClassThatDoesNotExist_FWB_CacheWarmer_SerializerCacheWarmerTest', false));
- $warmer = new SerializerCacheWarmer([new YamlFileLoader(__DIR__.'/../Fixtures/Serialization/Resources/does_not_exist.yaml')], tempnam(sys_get_temp_dir(), __FUNCTION__));
+ $file = tempnam(sys_get_temp_dir(), __FUNCTION__);
+ @unlink($file);
+
+ $warmer = new SerializerCacheWarmer([new YamlFileLoader(__DIR__.'/../Fixtures/Serialization/Resources/does_not_exist.yaml')], basename($file));
spl_autoload_register($classLoader = function ($class) use ($mappedClass) {
if ($class === $mappedClass) {
@@ -112,8 +157,17 @@ public function testClassAutoloadExceptionWithUnrelatedException()
}
}, true, true);
- $warmer->warmUp('foo');
+ $this->expectException(\DomainException::class);
+ $this->expectExceptionMessage('This exception should not be caught by the warmer.');
+
+ try {
+ $warmer->warmUp(\dirname($file), \dirname($file));
+ } catch (\DomainException $e) {
+ $this->assertFileDoesNotExist($file);
- spl_autoload_unregister($classLoader);
+ throw $e;
+ } finally {
+ spl_autoload_unregister($classLoader);
+ }
}
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ValidatorCacheWarmerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ValidatorCacheWarmerTest.php
index cc471e43fc685..af0bb1b50d3dd 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ValidatorCacheWarmerTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ValidatorCacheWarmerTest.php
@@ -32,7 +32,7 @@ public function testWarmUp()
@unlink($file);
$warmer = new ValidatorCacheWarmer($validatorBuilder, $file);
- $warmer->warmUp(\dirname($file));
+ $warmer->warmUp(\dirname($file), \dirname($file));
$this->assertFileExists($file);
@@ -42,6 +42,53 @@ public function testWarmUp()
$this->assertTrue($arrayPool->getItem('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Author')->isHit());
}
+ public function testWarmUpAbsoluteFilePath()
+ {
+ $validatorBuilder = new ValidatorBuilder();
+ $validatorBuilder->addXmlMapping(__DIR__.'/../Fixtures/Validation/Resources/person.xml');
+ $validatorBuilder->addYamlMapping(__DIR__.'/../Fixtures/Validation/Resources/author.yml');
+ $validatorBuilder->addMethodMapping('loadValidatorMetadata');
+ $validatorBuilder->enableAttributeMapping();
+
+ $file = sys_get_temp_dir().'/0/cache-validator.php';
+ @unlink($file);
+
+ $cacheDir = sys_get_temp_dir().'/1';
+
+ $warmer = new ValidatorCacheWarmer($validatorBuilder, $file);
+ $warmer->warmUp($cacheDir, $cacheDir);
+
+ $this->assertFileExists($file);
+ $this->assertFileDoesNotExist($cacheDir.'/cache-validator.php');
+
+ $arrayPool = new PhpArrayAdapter($file, new NullAdapter());
+
+ $this->assertTrue($arrayPool->getItem('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Person')->isHit());
+ $this->assertTrue($arrayPool->getItem('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Author')->isHit());
+ }
+
+ public function testWarmUpWithoutBuilDir()
+ {
+ $validatorBuilder = new ValidatorBuilder();
+ $validatorBuilder->addXmlMapping(__DIR__.'/../Fixtures/Validation/Resources/person.xml');
+ $validatorBuilder->addYamlMapping(__DIR__.'/../Fixtures/Validation/Resources/author.yml');
+ $validatorBuilder->addMethodMapping('loadValidatorMetadata');
+ $validatorBuilder->enableAttributeMapping();
+
+ $file = sys_get_temp_dir().'/cache-validator.php';
+ @unlink($file);
+
+ $warmer = new ValidatorCacheWarmer($validatorBuilder, $file);
+ $warmer->warmUp(\dirname($file));
+
+ $this->assertFileDoesNotExist($file);
+
+ $arrayPool = new PhpArrayAdapter($file, new NullAdapter());
+
+ $this->assertTrue($arrayPool->getItem('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Person')->isHit());
+ $this->assertTrue($arrayPool->getItem('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Author')->isHit());
+ }
+
public function testWarmUpWithAnnotations()
{
$validatorBuilder = new ValidatorBuilder();
@@ -52,7 +99,7 @@ public function testWarmUpWithAnnotations()
@unlink($file);
$warmer = new ValidatorCacheWarmer($validatorBuilder, $file);
- $warmer->warmUp(\dirname($file));
+ $warmer->warmUp(\dirname($file), \dirname($file));
$this->assertFileExists($file);
@@ -72,7 +119,7 @@ public function testWarmUpWithoutLoader()
@unlink($file);
$warmer = new ValidatorCacheWarmer($validatorBuilder, $file);
- $warmer->warmUp(\dirname($file));
+ $warmer->warmUp(\dirname($file), \dirname($file));
$this->assertFileExists($file);
}
@@ -85,9 +132,12 @@ public function testClassAutoloadException()
{
$this->assertFalse(class_exists($mappedClass = 'AClassThatDoesNotExist_FWB_CacheWarmer_ValidatorCacheWarmerTest', false));
+ $file = tempnam(sys_get_temp_dir(), __FUNCTION__);
+ @unlink($file);
+
$validatorBuilder = new ValidatorBuilder();
$validatorBuilder->addYamlMapping(__DIR__.'/../Fixtures/Validation/Resources/does_not_exist.yaml');
- $warmer = new ValidatorCacheWarmer($validatorBuilder, tempnam(sys_get_temp_dir(), __FUNCTION__));
+ $warmer = new ValidatorCacheWarmer($validatorBuilder, $file);
spl_autoload_register($classloader = function ($class) use ($mappedClass) {
if ($class === $mappedClass) {
@@ -95,7 +145,9 @@ public function testClassAutoloadException()
}
}, true, true);
- $warmer->warmUp('foo');
+ $warmer->warmUp(\dirname($file), \dirname($file));
+
+ $this->assertFileExists($file);
spl_autoload_unregister($classloader);
}
@@ -106,14 +158,14 @@ public function testClassAutoloadException()
*/
public function testClassAutoloadExceptionWithUnrelatedException()
{
- $this->expectException(\DomainException::class);
- $this->expectExceptionMessage('This exception should not be caught by the warmer.');
+ $file = tempnam(sys_get_temp_dir(), __FUNCTION__);
+ @unlink($file);
$this->assertFalse(class_exists($mappedClass = 'AClassThatDoesNotExist_FWB_CacheWarmer_ValidatorCacheWarmerTest', false));
$validatorBuilder = new ValidatorBuilder();
$validatorBuilder->addYamlMapping(__DIR__.'/../Fixtures/Validation/Resources/does_not_exist.yaml');
- $warmer = new ValidatorCacheWarmer($validatorBuilder, tempnam(sys_get_temp_dir(), __FUNCTION__));
+ $warmer = new ValidatorCacheWarmer($validatorBuilder, basename($file));
spl_autoload_register($classLoader = function ($class) use ($mappedClass) {
if ($class === $mappedClass) {
@@ -122,8 +174,17 @@ public function testClassAutoloadExceptionWithUnrelatedException()
}
}, true, true);
- $warmer->warmUp('foo');
+ $this->expectException(\DomainException::class);
+ $this->expectExceptionMessage('This exception should not be caught by the warmer.');
+
+ try {
+ $warmer->warmUp(\dirname($file), \dirname($file));
+ } catch (\DomainException $e) {
+ $this->assertFileDoesNotExist($file);
- spl_autoload_unregister($classLoader);
+ throw $e;
+ } finally {
+ spl_autoload_unregister($classLoader);
+ }
}
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/SecretsRevealCommandTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/SecretsRevealCommandTest.php
index 94643db2c92c5..d77d303d5c88b 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/SecretsRevealCommandTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/SecretsRevealCommandTest.php
@@ -46,6 +46,19 @@ public function testInvalidName()
$this->assertStringContainsString('The secret "undefinedKey" does not exist.', trim($tester->getDisplay(true)));
}
+ public function testFailedDecrypt()
+ {
+ $vault = $this->createMock(AbstractVault::class);
+ $vault->method('list')->willReturn(['secretKey' => null]);
+
+ $command = new SecretsRevealCommand($vault);
+
+ $tester = new CommandTester($command);
+ $this->assertSame(Command::INVALID, $tester->execute(['name' => 'secretKey']));
+
+ $this->assertStringContainsString('The secret "secretKey" could not be decrypted.', trim($tester->getDisplay(true)));
+ }
+
/**
* @backupGlobals enabled
*/
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/Workflow/Validator/DefinitionValidator.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/Workflow/Validator/DefinitionValidator.php
new file mode 100644
index 0000000000000..7244e927ca763
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/Workflow/Validator/DefinitionValidator.php
@@ -0,0 +1,16 @@
+loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'csrf_protection' => [
+ 'enabled' => true,
+ ],
+ 'form' => [
+ 'csrf_protection' => [
+ 'field-attr' => [
+ 'data-foo' => 'bar',
+ 'data-bar' => 'baz',
+ ],
+ ],
+ ],
+ 'session' => [
+ 'storage_factory_id' => 'session.storage.factory.native',
+ ],
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses_without_deduplicate_middleware.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses_without_deduplicate_middleware.php
index b8e7530bb3e01..fd4a008341cb4 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses_without_deduplicate_middleware.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses_without_deduplicate_middleware.php
@@ -5,6 +5,7 @@
'http_method_override' => false,
'handle_all_throwables' => true,
'php_errors' => ['log' => true],
+ 'lock' => false,
'messenger' => [
'default_bus' => 'messenger.bus.commands',
'buses' => [
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows.php
index 118a627c7c05b..2c29b848901eb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows.php
@@ -13,6 +13,9 @@
'supports' => [
FrameworkExtensionTestCase::class,
],
+ 'definition_validators' => [
+ Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Fixtures\Workflow\Validator\DefinitionValidator::class,
+ ],
'initial_marking' => ['draft'],
'metadata' => [
'title' => 'article workflow',
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_sets_field_name.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_field_attr.xml
similarity index 67%
rename from src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_sets_field_name.xml
rename to src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_field_attr.xml
index 4a05e9d33294e..1889703bec2a9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_sets_field_name.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_field_attr.xml
@@ -9,7 +9,13 @@
-
+
+
+
+ bar
+ baz
+
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_under_form_sets_field_name.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_under_form_sets_field_name.xml
deleted file mode 100644
index 09ef0ee167eb4..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_under_form_sets_field_name.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses_without_deduplicate_middleware.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses_without_deduplicate_middleware.xml
index dcf402e1a36ec..3f0d96249959e 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses_without_deduplicate_middleware.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses_without_deduplicate_middleware.xml
@@ -8,6 +8,7 @@
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows.xml
index 76b4f07a87a44..c5dae479d3d63 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows.xml
@@ -13,6 +13,7 @@
draft
Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTestCase
+ Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Fixtures\Workflow\Validator\DefinitionValidator
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_csrf_field_attr.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_csrf_field_attr.yml
new file mode 100644
index 0000000000000..db519977548c4
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_csrf_field_attr.yml
@@ -0,0 +1,16 @@
+framework:
+ annotations: false
+ http_method_override: false
+ handle_all_throwables: true
+ php_errors:
+ log: true
+ csrf_protection:
+ enabled: true
+ form:
+ csrf_protection:
+ enabled: true
+ field_attr:
+ data-foo: bar
+ data-bar: baz
+ session:
+ storage_factory_id: session.storage.factory.native
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses_without_deduplicate_middleware.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses_without_deduplicate_middleware.yml
index f06d534a55ec2..38fca57379fcb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses_without_deduplicate_middleware.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses_without_deduplicate_middleware.yml
@@ -4,6 +4,7 @@ framework:
handle_all_throwables: true
php_errors:
log: true
+ lock: false
messenger:
default_bus: messenger.bus.commands
buses:
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows.yml
index a9b427d89408a..cac5f6f230f92 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows.yml
@@ -9,6 +9,8 @@ framework:
type: workflow
supports:
- Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTestCase
+ definition_validators:
+ - Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Fixtures\Workflow\Validator\DefinitionValidator
initial_marking: [draft]
metadata:
title: article workflow
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php
index d942c122c826a..5ef658693d1a3 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php
@@ -15,6 +15,7 @@
use Psr\Log\LoggerAwareInterface;
use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension;
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
+use Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Fixtures\Workflow\Validator\DefinitionValidator;
use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyMessage;
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
use Symfony\Bundle\FullStack;
@@ -91,6 +92,7 @@
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Webhook\Client\RequestParser;
use Symfony\Component\Webhook\Controller\WebhookController;
+use Symfony\Component\Workflow\DependencyInjection\WorkflowValidatorPass;
use Symfony\Component\Workflow\Exception\InvalidDefinitionException;
use Symfony\Component\Workflow\Metadata\InMemoryMetadataStore;
use Symfony\Component\Workflow\WorkflowEvents;
@@ -287,7 +289,11 @@ public function testProfilerCollectSerializerDataEnabled()
public function testWorkflows()
{
- $container = $this->createContainerFromFile('workflows');
+ DefinitionValidator::$called = false;
+
+ $container = $this->createContainerFromFile('workflows', compile: false);
+ $container->addCompilerPass(new WorkflowValidatorPass());
+ $container->compile();
$this->assertTrue($container->hasDefinition('workflow.article'), 'Workflow is registered as a service');
$this->assertSame('workflow.abstract', $container->getDefinition('workflow.article')->getParent());
@@ -310,6 +316,7 @@ public function testWorkflows()
], $tags['workflow'][0]['metadata'] ?? null);
$this->assertTrue($container->hasDefinition('workflow.article.definition'), 'Workflow definition is registered as a service');
+ $this->assertTrue(DefinitionValidator::$called, 'DefinitionValidator is called');
$workflowDefinition = $container->getDefinition('workflow.article.definition');
@@ -403,7 +410,9 @@ public function testWorkflowAreValidated()
{
$this->expectException(InvalidDefinitionException::class);
$this->expectExceptionMessage('A transition from a place/state must have an unique name. Multiple transitions named "go" from place/state "first" were found on StateMachine "my_workflow".');
- $this->createContainerFromFile('workflow_not_valid');
+ $container = $this->createContainerFromFile('workflow_not_valid', compile: false);
+ $container->addCompilerPass(new WorkflowValidatorPass());
+ $container->compile();
}
public function testWorkflowCannotHaveBothSupportsAndSupportStrategy()
@@ -1482,6 +1491,17 @@ public function testFormsCanBeEnabledWithoutCsrfProtection()
$this->assertFalse($container->getParameter('form.type_extension.csrf.enabled'));
}
+ public function testFormCsrfFieldAttr()
+ {
+ $container = $this->createContainerFromFile('form_csrf_field_attr');
+
+ $expected = [
+ 'data-foo' => 'bar',
+ 'data-bar' => 'baz',
+ ];
+ $this->assertSame($expected, $container->getParameter('form.type_extension.csrf.field_attr'));
+ }
+
public function testStopwatchEnabledWithDebugModeEnabled()
{
$container = $this->createContainerFromFile('default_config', [
@@ -2591,6 +2611,14 @@ public function testJsonStreamerEnabled()
$this->assertTrue($container->has('json_streamer.stream_writer'));
}
+ public function testObjectMapperEnabled()
+ {
+ $container = $this->createContainerFromClosure(function (ContainerBuilder $container) {
+ $container->loadFromExtension('framework', []);
+ });
+ $this->assertTrue($container->has('object_mapper'));
+ }
+
protected function createContainer(array $data = [])
{
return new ContainerBuilder(new EnvPlaceholderParameterBag(array_merge([
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php
index deac159b6f9b0..f69a53932711c 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php
@@ -17,7 +17,13 @@
use Symfony\Component\DependencyInjection\Exception\LogicException;
use Symfony\Component\DependencyInjection\Exception\OutOfBoundsException;
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
+use Symfony\Component\RateLimiter\CompoundRateLimiterFactory;
+use Symfony\Component\RateLimiter\RateLimiterFactoryInterface;
+use Symfony\Component\Validator\Constraints\Email;
+use Symfony\Component\Workflow\Definition;
+use Symfony\Component\Workflow\DependencyInjection\WorkflowValidatorPass;
use Symfony\Component\Workflow\Exception\InvalidDefinitionException;
+use Symfony\Component\Workflow\Validator\DefinitionValidatorInterface;
class PhpFrameworkExtensionTest extends FrameworkExtensionTestCase
{
@@ -99,7 +105,7 @@ public function testWorkflowValidationStateMachine()
{
$this->expectException(InvalidDefinitionException::class);
$this->expectExceptionMessage('A transition from a place/state must have an unique name. Multiple transitions named "a_to_b" from place/state "a" were found on StateMachine "article".');
- $this->createContainerFromClosure(function ($container) {
+ $this->createContainerFromClosure(function (ContainerBuilder $container) {
$container->loadFromExtension('framework', [
'annotations' => false,
'http_method_override' => false,
@@ -125,9 +131,57 @@ public function testWorkflowValidationStateMachine()
],
],
]);
+ $container->addCompilerPass(new WorkflowValidatorPass());
});
}
+ /**
+ * @dataProvider provideWorkflowValidationCustomTests
+ */
+ public function testWorkflowValidationCustomBroken(string $class, string $message)
+ {
+ $this->expectException(InvalidConfigurationException::class);
+ $this->expectExceptionMessage($message);
+ $this->createContainerFromClosure(function ($container) use ($class) {
+ $container->loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'workflows' => [
+ 'article' => [
+ 'type' => 'state_machine',
+ 'supports' => [
+ __CLASS__,
+ ],
+ 'places' => [
+ 'a',
+ 'b',
+ ],
+ 'transitions' => [
+ 'a_to_b' => [
+ 'from' => ['a'],
+ 'to' => ['b'],
+ ],
+ ],
+ 'definition_validators' => [
+ $class,
+ ],
+ ],
+ ],
+ ]);
+ });
+ }
+
+ public static function provideWorkflowValidationCustomTests()
+ {
+ yield ['classDoesNotExist', 'Invalid configuration for path "framework.workflows.workflows.article.definition_validators.0": The validation class "classDoesNotExist" does not exist.'];
+
+ yield [\DateTime::class, 'Invalid configuration for path "framework.workflows.workflows.article.definition_validators.0": The validation class "DateTime" is not an instance of "Symfony\Component\Workflow\Validator\DefinitionValidatorInterface".'];
+
+ yield [WorkflowValidatorWithConstructor::class, 'Invalid configuration for path "framework.workflows.workflows.article.definition_validators.0": The "Symfony\\\\Bundle\\\\FrameworkBundle\\\\Tests\\\\DependencyInjection\\\\WorkflowValidatorWithConstructor" validation class constructor must not have any arguments.'];
+ }
+
public function testWorkflowDefaultMarkingStoreDefinition()
{
$container = $this->createContainerFromClosure(function ($container) {
@@ -188,7 +242,7 @@ public function testWorkflowDefaultMarkingStoreDefinition()
$this->assertNull($argumentsB['index_1'], 'workflow_b marking_store argument is null');
}
- public function testRateLimiterWithLockFactory()
+ public function testRateLimiterLockFactoryWithLockDisabled()
{
try {
$this->createContainerFromClosure(function (ContainerBuilder $container) {
@@ -199,7 +253,7 @@ public function testRateLimiterWithLockFactory()
'php_errors' => ['log' => true],
'lock' => false,
'rate_limiter' => [
- 'with_lock' => ['policy' => 'fixed_window', 'limit' => 10, 'interval' => '1 hour'],
+ 'with_lock' => ['policy' => 'fixed_window', 'limit' => 10, 'interval' => '1 hour', 'lock_factory' => 'lock.factory'],
],
]);
});
@@ -208,7 +262,10 @@ public function testRateLimiterWithLockFactory()
} catch (LogicException $e) {
$this->assertEquals('Rate limiter "with_lock" requires the Lock component to be configured.', $e->getMessage());
}
+ }
+ public function testRateLimiterAutoLockFactoryWithLockEnabled()
+ {
$container = $this->createContainerFromClosure(function (ContainerBuilder $container) {
$container->loadFromExtension('framework', [
'annotations' => false,
@@ -226,13 +283,35 @@ public function testRateLimiterWithLockFactory()
$this->assertEquals('lock.factory', (string) $withLock->getArgument(2));
}
- public function testRateLimiterLockFactory()
+ public function testRateLimiterAutoLockFactoryWithLockDisabled()
{
$container = $this->createContainerFromClosure(function (ContainerBuilder $container) {
$container->loadFromExtension('framework', [
'annotations' => false,
'http_method_override' => false,
'handle_all_throwables' => true,
+ 'lock' => false,
+ 'php_errors' => ['log' => true],
+ 'rate_limiter' => [
+ 'without_lock' => ['policy' => 'fixed_window', 'limit' => 10, 'interval' => '1 hour'],
+ ],
+ ]);
+ });
+
+ $this->expectException(OutOfBoundsException::class);
+ $this->expectExceptionMessageMatches('/^The argument "2" doesn\'t exist.*\.$/');
+
+ $container->getDefinition('limiter.without_lock')->getArgument(2);
+ }
+
+ public function testRateLimiterDisableLockFactory()
+ {
+ $container = $this->createContainerFromClosure(function (ContainerBuilder $container) {
+ $container->loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'lock' => true,
'php_errors' => ['log' => true],
'rate_limiter' => [
'without_lock' => ['policy' => 'fixed_window', 'limit' => 10, 'interval' => '1 hour', 'lock_factory' => null],
@@ -265,4 +344,128 @@ public function testRateLimiterIsTagged()
$this->assertSame('first', $container->getDefinition('limiter.first')->getTag('rate_limiter')[0]['name']);
$this->assertSame('second', $container->getDefinition('limiter.second')->getTag('rate_limiter')[0]['name']);
}
+
+ public function testRateLimiterCompoundPolicy()
+ {
+ if (!class_exists(CompoundRateLimiterFactory::class)) {
+ $this->markTestSkipped('CompoundRateLimiterFactory is not available.');
+ }
+
+ $container = $this->createContainerFromClosure(function (ContainerBuilder $container) {
+ $container->loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'lock' => true,
+ 'rate_limiter' => [
+ 'first' => ['policy' => 'fixed_window', 'limit' => 10, 'interval' => '1 hour'],
+ 'second' => ['policy' => 'sliding_window', 'limit' => 10, 'interval' => '1 hour'],
+ 'compound' => ['policy' => 'compound', 'limiters' => ['first', 'second']],
+ ],
+ ]);
+ });
+
+ $this->assertSame([
+ 'policy' => 'fixed_window',
+ 'limit' => 10,
+ 'interval' => '1 hour',
+ 'id' => 'first',
+ ], $container->getDefinition('limiter.first')->getArgument(0));
+ $this->assertSame([
+ 'policy' => 'sliding_window',
+ 'limit' => 10,
+ 'interval' => '1 hour',
+ 'id' => 'second',
+ ], $container->getDefinition('limiter.second')->getArgument(0));
+
+ $definition = $container->getDefinition('limiter.compound');
+ $this->assertSame(CompoundRateLimiterFactory::class, $definition->getClass());
+ $this->assertEquals(
+ [
+ 'limiter.first',
+ 'limiter.second',
+ ],
+ $definition->getArgument(0)->getValues()
+ );
+ $this->assertSame('limiter.compound', (string) $container->getAlias(RateLimiterFactoryInterface::class.' $compoundLimiter'));
+ }
+
+ public function testRateLimiterCompoundPolicyNoLimiters()
+ {
+ if (!class_exists(CompoundRateLimiterFactory::class)) {
+ $this->markTestSkipped('CompoundRateLimiterFactory is not available.');
+ }
+
+ $this->expectException(\LogicException::class);
+ $this->createContainerFromClosure(function ($container) {
+ $container->loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'rate_limiter' => [
+ 'compound' => ['policy' => 'compound'],
+ ],
+ ]);
+ });
+ }
+
+ public function testRateLimiterCompoundPolicyInvalidLimiters()
+ {
+ if (!class_exists(CompoundRateLimiterFactory::class)) {
+ $this->markTestSkipped('CompoundRateLimiterFactory is not available.');
+ }
+
+ $this->expectException(\LogicException::class);
+ $this->createContainerFromClosure(function ($container) {
+ $container->loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'rate_limiter' => [
+ 'compound' => ['policy' => 'compound', 'limiters' => ['invalid1', 'invalid2']],
+ ],
+ ]);
+ });
+ }
+
+ /**
+ * @dataProvider emailValidationModeProvider
+ */
+ public function testValidatorEmailValidationMode(string $mode)
+ {
+ $this->expectNotToPerformAssertions();
+
+ $this->createContainerFromClosure(function (ContainerBuilder $container) use ($mode) {
+ $container->loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'validation' => [
+ 'email_validation_mode' => $mode,
+ ],
+ ]);
+ });
+ }
+
+ public static function emailValidationModeProvider()
+ {
+ foreach (Email::VALIDATION_MODES as $mode) {
+ yield [$mode];
+ }
+ }
+}
+
+class WorkflowValidatorWithConstructor implements DefinitionValidatorInterface
+{
+ public function __construct(bool $enabled)
+ {
+ }
+
+ public function validate(Definition $definition, string $name): void
+ {
+ }
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/ObjectMapper/TransformCallable.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/ObjectMapper/TransformCallable.php
index da4f26a2dd4e6..3321e28d1ac67 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/ObjectMapper/TransformCallable.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/ObjectMapper/TransformCallable.php
@@ -18,7 +18,7 @@
*/
final class TransformCallable implements TransformCallableInterface
{
- public function __invoke(mixed $value, object $object): mixed
+ public function __invoke(mixed $value, object $source, ?object $target): mixed
{
return 'transformed';
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ContainerDebugCommandTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ContainerDebugCommandTest.php
index 8d3f15ba61680..d21d4d113d2e6 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ContainerDebugCommandTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ContainerDebugCommandTest.php
@@ -53,7 +53,7 @@ public function testNoDebug()
public function testNoDumpedXML()
{
- static::bootKernel(['test_case' => 'ContainerDebug', 'root_config' => 'config.yml', 'debug' => true, 'debug.container.dump' => false]);
+ static::bootKernel(['test_case' => 'ContainerDebug', 'root_config' => 'no_dump.yml', 'debug' => true]);
$application = new Application(static::$kernel);
$application->setAutoExit(false);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ContainerDebug/no_dump.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ContainerDebug/no_dump.yml
new file mode 100644
index 0000000000000..a9c709e9a6425
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ContainerDebug/no_dump.yml
@@ -0,0 +1,5 @@
+imports:
+ - { resource: config.yml }
+
+parameters:
+ debug.container.dump: false
diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json
index 2ecedbc45660e..15a9496d11067 100644
--- a/src/Symfony/Bundle/FrameworkBundle/composer.json
+++ b/src/Symfony/Bundle/FrameworkBundle/composer.json
@@ -54,7 +54,7 @@
"symfony/messenger": "^6.4|^7.0",
"symfony/mime": "^6.4|^7.0",
"symfony/notifier": "^6.4|^7.0",
- "symfony/object-mapper": "^7.3",
+ "symfony/object-mapper": "^v7.3.0-beta2",
"symfony/process": "^6.4|^7.0",
"symfony/rate-limiter": "^6.4|^7.0",
"symfony/scheduler": "^6.4.4|^7.0.4",
@@ -67,7 +67,7 @@
"symfony/twig-bundle": "^6.4|^7.0",
"symfony/type-info": "^7.1",
"symfony/validator": "^6.4|^7.0",
- "symfony/workflow": "^6.4|^7.0",
+ "symfony/workflow": "^7.3",
"symfony/yaml": "^6.4|^7.0",
"symfony/property-info": "^6.4|^7.0",
"symfony/json-streamer": "7.3.*",
@@ -94,6 +94,7 @@
"symfony/mailer": "<6.4",
"symfony/messenger": "<6.4",
"symfony/mime": "<6.4",
+ "symfony/object-mapper": ">=7.4",
"symfony/property-info": "<6.4",
"symfony/property-access": "<6.4",
"symfony/runtime": "<6.4.13|>=7.0,<7.1.6",
@@ -108,7 +109,7 @@
"symfony/validator": "<6.4",
"symfony/web-profiler-bundle": "<6.4",
"symfony/webhook": "<7.2",
- "symfony/workflow": "<6.4"
+ "symfony/workflow": "<7.3.0-beta2"
},
"autoload": {
"psr-4": { "Symfony\\Bundle\\FrameworkBundle\\": "" },
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php
index 9854a1f047a7a..0a2d32c9f3f4d 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php
@@ -55,9 +55,14 @@ public function getConfigTreeBuilder(): TreeBuilder
$rootNode = $tb->getRootNode();
$rootNode
+ ->docUrl('https://symfony.com/doc/{version:major}.{version:minor}/reference/configuration/security.html', 'symfony/security-bundle')
->beforeNormalization()
->always()
->then(function ($v) {
+ if (isset($v['hide_user_not_found']) && isset($v['expose_security_errors'])) {
+ throw new InvalidConfigurationException('You cannot use both "hide_user_not_found" and "expose_security_errors" at the same time.');
+ }
+
if (isset($v['hide_user_not_found']) && !isset($v['expose_security_errors'])) {
$v['expose_security_errors'] = $v['hide_user_not_found'] ? ExposeSecurityLevel::None : ExposeSecurityLevel::All;
}
@@ -75,7 +80,7 @@ public function getConfigTreeBuilder(): TreeBuilder
->setDeprecated('symfony/security-bundle', '7.3', 'The "%node%" option is deprecated and will be removed in 8.0. Use the "expose_security_errors" option instead.')
->end()
->enumNode('expose_security_errors')
- ->beforeNormalization()->ifString()->then(fn ($v) => ['value' => ExposeSecurityLevel::tryFrom($v)])->end()
+ ->beforeNormalization()->ifString()->then(fn ($v) => ExposeSecurityLevel::tryFrom($v))->end()
->values(ExposeSecurityLevel::cases())
->defaultValue(ExposeSecurityLevel::None)
->end()
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
index dd1b8cdb490cc..1711964b3472f 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
@@ -11,6 +11,7 @@
namespace Symfony\Bundle\SecurityBundle\DependencyInjection;
+use Composer\InstalledVersions;
use Symfony\Bridge\Twig\Extension\LogoutUrlExtension;
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\AuthenticatorFactoryInterface;
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\FirewallListenerFactoryInterface;
@@ -62,7 +63,6 @@
use Symfony\Component\Security\Http\Authenticator\Debug\TraceableAuthenticator;
use Symfony\Component\Security\Http\Authenticator\Debug\TraceableAuthenticatorManagerListener;
use Symfony\Component\Security\Http\Event\CheckPassportEvent;
-use Symfony\Flex\Command\InstallRecipesCommand;
/**
* SecurityExtension.
@@ -93,7 +93,7 @@ public function prepend(ContainerBuilder $container): void
public function load(array $configs, ContainerBuilder $container): void
{
if (!array_filter($configs)) {
- $hint = class_exists(InstallRecipesCommand::class) ? 'Try running "composer symfony:recipes:install symfony/security-bundle".' : 'Please define your settings for the "security" config section.';
+ $hint = class_exists(InstalledVersions::class) && InstalledVersions::isInstalled('symfony/flex') ? 'Try running "composer symfony:recipes:install symfony/security-bundle".' : 'Please define your settings for the "security" config section.';
throw new InvalidConfigurationException('The SecurityBundle is enabled but is not configured. '.$hint);
}
@@ -321,7 +321,7 @@ private function createFirewalls(array $config, ContainerBuilder $container): vo
$authenticators[$name] = ServiceLocatorTagPass::register($container, $firewallAuthenticatorRefs);
}
$contextId = 'security.firewall.map.context.'.$name;
- $isLazy = !$firewall['stateless'] && (!empty($firewall['anonymous']['lazy']) || $firewall['lazy']);
+ $isLazy = !$firewall['stateless'] && $firewall['lazy'];
$context = new ChildDefinition($isLazy ? 'security.firewall.lazy_context' : 'security.firewall.context');
$context = $container->setDefinition($contextId, $context);
$context
@@ -683,7 +683,7 @@ private function getUserProvider(ContainerBuilder $container, string $id, array
return $this->createMissingUserProvider($container, $id, $factoryKey);
}
- if ('remember_me' === $factoryKey || 'anonymous' === $factoryKey) {
+ if ('remember_me' === $factoryKey) {
return 'security.user_providers';
}
diff --git a/src/Symfony/Bundle/SecurityBundle/Security.php b/src/Symfony/Bundle/SecurityBundle/Security.php
index 7f311f68d7d2b..2efbb67fc3de0 100644
--- a/src/Symfony/Bundle/SecurityBundle/Security.php
+++ b/src/Symfony/Bundle/SecurityBundle/Security.php
@@ -171,8 +171,7 @@ private function getAuthenticator(?string $authenticatorName, string $firewallNa
$firewallAuthenticatorLocator = $this->authenticators[$firewallName];
if (!$authenticatorName) {
- $authenticatorIds = array_keys($firewallAuthenticatorLocator->getProvidedServices());
-
+ $authenticatorIds = array_filter(array_keys($firewallAuthenticatorLocator->getProvidedServices()), fn (string $authenticatorId) => $authenticatorId !== \sprintf('security.authenticator.remember_me.%s', $firewallName));
if (!$authenticatorIds) {
throw new LogicException(\sprintf('No authenticator was found for the firewall "%s".', $firewallName));
}
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/MainConfigurationTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/MainConfigurationTest.php
index 6479e56a668e7..6904a21b18113 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/MainConfigurationTest.php
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/MainConfigurationTest.php
@@ -254,6 +254,9 @@ public static function provideHideUserNotFoundData(): iterable
yield [['expose_security_errors' => ExposeSecurityLevel::None], ExposeSecurityLevel::None];
yield [['expose_security_errors' => ExposeSecurityLevel::AccountStatus], ExposeSecurityLevel::AccountStatus];
yield [['expose_security_errors' => ExposeSecurityLevel::All], ExposeSecurityLevel::All];
+ yield [['expose_security_errors' => 'none'], ExposeSecurityLevel::None];
+ yield [['expose_security_errors' => 'account_status'], ExposeSecurityLevel::AccountStatus];
+ yield [['expose_security_errors' => 'all'], ExposeSecurityLevel::All];
}
/**
@@ -280,4 +283,18 @@ public static function provideHideUserNotFoundLegacyData(): iterable
yield [['hide_user_not_found' => true], ExposeSecurityLevel::None, true];
yield [['hide_user_not_found' => false], ExposeSecurityLevel::All, false];
}
+
+ public function testCannotUseHideUserNotFoundAndExposeSecurityErrorsAtTheSameTime()
+ {
+ $processor = new Processor();
+ $configuration = new MainConfiguration([], []);
+
+ $this->expectException(InvalidConfigurationException::class);
+ $this->expectExceptionMessage('You cannot use both "hide_user_not_found" and "expose_security_errors" at the same time.');
+
+ $processor->processConfiguration($configuration, [static::$minimalConfig + [
+ 'hide_user_not_found' => true,
+ 'expose_security_errors' => ExposeSecurityLevel::None,
+ ]]);
+ }
}
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AccessTokenTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AccessTokenTest.php
index 0be67a56f55c9..75adf296110da 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AccessTokenTest.php
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AccessTokenTest.php
@@ -353,9 +353,17 @@ public function testCustomUserLoader()
/**
* @dataProvider validAccessTokens
+ *
+ * @requires extension openssl
*/
- public function testOidcSuccess(string $token)
+ public function testOidcSuccess(callable $tokenFactory)
{
+ try {
+ $token = $tokenFactory();
+ } catch (\RuntimeException $e) {
+ $this->markTestSkipped($e->getMessage());
+ }
+
$client = $this->createClient(['test_case' => 'AccessToken', 'root_config' => 'config_oidc.yml']);
$client->request('GET', '/foo', [], [], ['HTTP_AUTHORIZATION' => \sprintf('Bearer %s', $token)]);
$response = $client->getResponse();
@@ -367,9 +375,17 @@ public function testOidcSuccess(string $token)
/**
* @dataProvider invalidAccessTokens
+ *
+ * @requires extension openssl
*/
- public function testOidcFailure(string $token)
+ public function testOidcFailure(callable $tokenFactory)
{
+ try {
+ $token = $tokenFactory();
+ } catch (\RuntimeException $e) {
+ $this->markTestSkipped($e->getMessage());
+ }
+
$client = $this->createClient(['test_case' => 'AccessToken', 'root_config' => 'config_oidc.yml']);
$client->request('GET', '/foo', [], [], ['HTTP_AUTHORIZATION' => \sprintf('Bearer %s', $token)]);
$response = $client->getResponse();
@@ -440,12 +456,10 @@ public static function validAccessTokens(): array
'sub' => 'e21bf182-1538-406e-8ccb-e25a17aba39f',
'username' => 'dunglas',
];
- $jws = self::createJws($claims);
- $jwe = self::createJwe($jws);
return [
- [$jws],
- [$jwe],
+ [fn () => self::createJws($claims)],
+ [fn () => self::createJwe(self::createJws($claims))],
];
}
@@ -466,14 +480,14 @@ public static function invalidAccessTokens(): array
];
return [
- [self::createJws([...$claims, 'aud' => 'Invalid Audience'])],
- [self::createJws([...$claims, 'iss' => 'Invalid Issuer'])],
- [self::createJws([...$claims, 'exp' => $time - 3600])],
- [self::createJws([...$claims, 'nbf' => $time + 3600])],
- [self::createJws([...$claims, 'iat' => $time + 3600])],
- [self::createJws([...$claims, 'username' => 'Invalid Username'])],
- [self::createJwe(self::createJws($claims), ['exp' => $time - 3600])],
- [self::createJwe(self::createJws($claims), ['cty' => 'x-specific'])],
+ [fn () => self::createJws([...$claims, 'aud' => 'Invalid Audience'])],
+ [fn () => self::createJws([...$claims, 'iss' => 'Invalid Issuer'])],
+ [fn () => self::createJws([...$claims, 'exp' => $time - 3600])],
+ [fn () => self::createJws([...$claims, 'nbf' => $time + 3600])],
+ [fn () => self::createJws([...$claims, 'iat' => $time + 3600])],
+ [fn () => self::createJws([...$claims, 'username' => 'Invalid Username'])],
+ [fn () => self::createJwe(self::createJws($claims), ['exp' => $time - 3600])],
+ [fn () => self::createJwe(self::createJws($claims), ['cty' => 'x-specific'])],
];
}
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/SecurityTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/SecurityTest.php
index d4b336b4eaa70..82a444ef10358 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/SecurityTest.php
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/SecurityTest.php
@@ -152,7 +152,10 @@ public function testLogin()
$firewallAuthenticatorLocator
->expects($this->once())
->method('getProvidedServices')
- ->willReturn(['security.authenticator.custom.dev' => $authenticator])
+ ->willReturn([
+ 'security.authenticator.custom.dev' => $authenticator,
+ 'security.authenticator.remember_me.main' => $authenticator
+ ])
;
$firewallAuthenticatorLocator
->expects($this->once())
@@ -252,6 +255,49 @@ public function testLoginWithoutRequestContext()
$security->login($user);
}
+ public function testLoginFailsWhenTooManyAuthenticatorsFound()
+ {
+ $request = new Request();
+ $authenticator = $this->createMock(AuthenticatorInterface::class);
+ $requestStack = $this->createMock(RequestStack::class);
+ $firewallMap = $this->createMock(FirewallMap::class);
+ $firewall = new FirewallConfig('main', 'main');
+ $userAuthenticator = $this->createMock(UserAuthenticatorInterface::class);
+ $user = $this->createMock(UserInterface::class);
+ $userChecker = $this->createMock(UserCheckerInterface::class);
+
+ $container = $this->createMock(ContainerInterface::class);
+ $container
+ ->expects($this->atLeastOnce())
+ ->method('get')
+ ->willReturnMap([
+ ['request_stack', $requestStack],
+ ['security.firewall.map', $firewallMap],
+ ['security.authenticator.managers_locator', $this->createContainer('main', $userAuthenticator)],
+ ['security.user_checker_locator', $this->createContainer('main', $userChecker)],
+ ])
+ ;
+
+ $requestStack->expects($this->once())->method('getCurrentRequest')->willReturn($request);
+ $firewallMap->expects($this->once())->method('getFirewallConfig')->willReturn($firewall);
+
+ $firewallAuthenticatorLocator = $this->createMock(ServiceProviderInterface::class);
+ $firewallAuthenticatorLocator
+ ->expects($this->once())
+ ->method('getProvidedServices')
+ ->willReturn([
+ 'security.authenticator.custom.main' => $authenticator,
+ 'security.authenticator.other.main' => $authenticator
+ ])
+ ;
+
+ $security = new Security($container, ['main' => $firewallAuthenticatorLocator]);
+
+ $this->expectException(\LogicException::class);
+ $this->expectExceptionMessage('Too many authenticators were found for the current firewall "main". You must provide an instance of "Symfony\Component\Security\Http\Authenticator\AuthenticatorInterface" to login programmatically. The available authenticators for the firewall "main" are "security.authenticator.custom.main" ,"security.authenticator.other.main');
+ $security->login($user);
+ }
+
public function testLogout()
{
$request = new Request();
diff --git a/src/Symfony/Bundle/SecurityBundle/composer.json b/src/Symfony/Bundle/SecurityBundle/composer.json
index fa5cb52ff04b5..7459b0175b95f 100644
--- a/src/Symfony/Bundle/SecurityBundle/composer.json
+++ b/src/Symfony/Bundle/SecurityBundle/composer.json
@@ -20,7 +20,7 @@
"composer-runtime-api": ">=2.1",
"ext-xml": "*",
"symfony/clock": "^6.4|^7.0",
- "symfony/config": "^6.4|^7.0",
+ "symfony/config": "^7.3",
"symfony/dependency-injection": "^6.4.11|^7.1.4",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
diff --git a/src/Symfony/Bundle/TwigBundle/CHANGELOG.md b/src/Symfony/Bundle/TwigBundle/CHANGELOG.md
index 32a1c9aef64e5..40d5be350afe7 100644
--- a/src/Symfony/Bundle/TwigBundle/CHANGELOG.md
+++ b/src/Symfony/Bundle/TwigBundle/CHANGELOG.md
@@ -7,6 +7,8 @@ CHANGELOG
* Enable `#[AsTwigFilter]`, `#[AsTwigFunction]` and `#[AsTwigTest]` attributes
to configure extensions on runtime classes
* Add support for a `twig` validator
+ * Use `ChainCache` to store warmed-up cache in `kernel.build_dir` and runtime cache in `kernel.cache_dir`
+ * Make `TemplateCacheWarmer` use `kernel.build_dir` instead of `kernel.cache_dir`
7.1
---
diff --git a/src/Symfony/Bundle/TwigBundle/CacheWarmer/TemplateCacheWarmer.php b/src/Symfony/Bundle/TwigBundle/CacheWarmer/TemplateCacheWarmer.php
index 868dc076cfd9e..3bb89760f3a6f 100644
--- a/src/Symfony/Bundle/TwigBundle/CacheWarmer/TemplateCacheWarmer.php
+++ b/src/Symfony/Bundle/TwigBundle/CacheWarmer/TemplateCacheWarmer.php
@@ -14,6 +14,8 @@
use Psr\Container\ContainerInterface;
use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface;
use Symfony\Contracts\Service\ServiceSubscriberInterface;
+use Twig\Cache\CacheInterface;
+use Twig\Cache\NullCache;
use Twig\Environment;
use Twig\Error\Error;
@@ -34,6 +36,7 @@ class TemplateCacheWarmer implements CacheWarmerInterface, ServiceSubscriberInte
public function __construct(
private ContainerInterface $container,
private iterable $iterator,
+ private ?CacheInterface $cache = null,
) {
}
@@ -41,19 +44,40 @@ public function warmUp(string $cacheDir, ?string $buildDir = null): array
{
$this->twig ??= $this->container->get('twig');
- foreach ($this->iterator as $template) {
- try {
- $this->twig->load($template);
- } catch (Error) {
+ $originalCache = $this->twig->getCache();
+ if ($originalCache instanceof NullCache) {
+ // There's no point to warm up a cache that won't be used afterward
+ return [];
+ }
+
+ if (null !== $this->cache) {
+ if (!$buildDir) {
/*
- * Problem during compilation, give up for this template (e.g. syntax errors).
- * Failing silently here allows to ignore templates that rely on functions that aren't available in
- * the current environment. For example, the WebProfilerBundle shouldn't be available in the prod
- * environment, but some templates that are never used in prod might rely on functions the bundle provides.
- * As we can't detect which templates are "really" important, we try to load all of them and ignore
- * errors. Error checks may be performed by calling the lint:twig command.
+ * The cache has already been warmup during the build of the container, when $buildDir was set.
*/
+ return [];
+ }
+ // Swap the cache for the warmup as the Twig Environment has the ChainCache injected
+ $this->twig->setCache($this->cache);
+ }
+
+ try {
+ foreach ($this->iterator as $template) {
+ try {
+ $this->twig->load($template);
+ } catch (Error) {
+ /*
+ * Problem during compilation, give up for this template (e.g. syntax errors).
+ * Failing silently here allows to ignore templates that rely on functions that aren't available in
+ * the current environment. For example, the WebProfilerBundle shouldn't be available in the prod
+ * environment, but some templates that are never used in prod might rely on functions the bundle provides.
+ * As we can't detect which templates are "really" important, we try to load all of them and ignore
+ * errors. Error checks may be performed by calling the lint:twig command.
+ */
+ }
}
+ } finally {
+ $this->twig->setCache($originalCache);
}
return [];
diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/AttributeExtensionPass.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/AttributeExtensionPass.php
index 24f760802bc94..354874866a0ae 100644
--- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/AttributeExtensionPass.php
+++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/AttributeExtensionPass.php
@@ -14,10 +14,13 @@
use Symfony\Component\DependencyInjection\ChildDefinition;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Exception\LogicException;
use Twig\Attribute\AsTwigFilter;
use Twig\Attribute\AsTwigFunction;
use Twig\Attribute\AsTwigTest;
+use Twig\Extension\AbstractExtension;
use Twig\Extension\AttributeExtension;
+use Twig\Extension\ExtensionInterface;
/**
* Register an instance of AttributeExtension for each service using the
@@ -33,6 +36,14 @@ final class AttributeExtensionPass implements CompilerPassInterface
public static function autoconfigureFromAttribute(ChildDefinition $definition, AsTwigFilter|AsTwigFunction|AsTwigTest $attribute, \ReflectionMethod $reflector): void
{
+ $class = $reflector->getDeclaringClass();
+ if ($class->implementsInterface(ExtensionInterface::class)) {
+ if ($class->isSubclassOf(AbstractExtension::class)) {
+ throw new LogicException(\sprintf('The class "%s" cannot extend "%s" and use the "#[%s]" attribute on method "%s()", choose one or the other.', $class->name, AbstractExtension::class, $attribute::class, $reflector->name));
+ }
+ throw new LogicException(\sprintf('The class "%s" cannot implement "%s" and use the "#[%s]" attribute on method "%s()", choose one or the other.', $class->name, ExtensionInterface::class, $attribute::class, $reflector->name));
+ }
+
$definition->addTag(self::TAG);
// The service must be tagged as a runtime to call non-static methods
diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Configuration.php
index 32a4bb318fea4..354e1a4e85a0a 100644
--- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Configuration.php
@@ -32,7 +32,9 @@ public function getConfigTreeBuilder(): TreeBuilder
$treeBuilder = new TreeBuilder('twig');
$rootNode = $treeBuilder->getRootNode();
- $rootNode->beforeNormalization()
+ $rootNode
+ ->docUrl('https://symfony.com/doc/{version:major}.{version:minor}/reference/configuration/twig.html', 'symfony/twig-bundle')
+ ->beforeNormalization()
->ifTrue(fn ($v) => \is_array($v) && \array_key_exists('exception_controller', $v))
->then(function ($v) {
if (isset($v['exception_controller'])) {
@@ -134,7 +136,7 @@ private function addTwigOptions(ArrayNodeDefinition $rootNode): void
->example('Twig\Template')
->cannotBeEmpty()
->end()
- ->scalarNode('cache')->defaultValue('%kernel.cache_dir%/twig')->end()
+ ->scalarNode('cache')->defaultTrue()->end()
->scalarNode('charset')->defaultValue('%kernel.charset%')->end()
->booleanNode('debug')->defaultValue('%kernel.debug%')->end()
->booleanNode('strict_variables')->defaultValue('%kernel.debug%')->end()
diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php
index db508873387b2..418172956391b 100644
--- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php
+++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php
@@ -30,6 +30,7 @@
use Twig\Attribute\AsTwigFilter;
use Twig\Attribute\AsTwigFunction;
use Twig\Attribute\AsTwigTest;
+use Twig\Cache\FilesystemCache;
use Twig\Environment;
use Twig\Extension\ExtensionInterface;
use Twig\Extension\RuntimeExtensionInterface;
@@ -167,6 +168,31 @@ public function load(array $configs, ContainerBuilder $container): void
}
}
+ if (true === $config['cache']) {
+ $autoReloadOrDefault = $container->getParameterBag()->resolveValue($config['auto_reload'] ?? $config['debug']);
+ $buildDir = $container->getParameter('kernel.build_dir');
+ $cacheDir = $container->getParameter('kernel.cache_dir');
+
+ if ($autoReloadOrDefault || $cacheDir === $buildDir) {
+ $config['cache'] = '%kernel.cache_dir%/twig';
+ }
+ }
+
+ if (true === $config['cache']) {
+ $config['cache'] = new Reference('twig.template_cache.chain');
+ } else {
+ $container->removeDefinition('twig.template_cache.chain');
+ $container->removeDefinition('twig.template_cache.runtime_cache');
+ $container->removeDefinition('twig.template_cache.readonly_cache');
+ $container->removeDefinition('twig.template_cache.warmup_cache');
+
+ if (false === $config['cache']) {
+ $container->removeDefinition('twig.template_cache_warmer');
+ } else {
+ $container->getDefinition('twig.template_cache_warmer')->replaceArgument(2, null);
+ }
+ }
+
if (isset($config['autoescape_service'])) {
$config['autoescape'] = [new Reference($config['autoescape_service']), $config['autoescape_service_method'] ?? '__invoke'];
} else {
@@ -191,10 +217,6 @@ public function load(array $configs, ContainerBuilder $container): void
$container->registerAttributeForAutoconfiguration(AsTwigFilter::class, AttributeExtensionPass::autoconfigureFromAttribute(...));
$container->registerAttributeForAutoconfiguration(AsTwigFunction::class, AttributeExtensionPass::autoconfigureFromAttribute(...));
$container->registerAttributeForAutoconfiguration(AsTwigTest::class, AttributeExtensionPass::autoconfigureFromAttribute(...));
-
- if (false === $config['cache']) {
- $container->removeDefinition('twig.template_cache_warmer');
- }
}
private function getBundleTemplatePaths(ContainerBuilder $container, array $config): array
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.php b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.php
index 02631d28c39a4..812ac1f666978 100644
--- a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.php
+++ b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.php
@@ -36,7 +36,9 @@
use Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheWarmer;
use Symfony\Bundle\TwigBundle\DependencyInjection\Configurator\EnvironmentConfigurator;
use Symfony\Bundle\TwigBundle\TemplateIterator;
+use Twig\Cache\ChainCache;
use Twig\Cache\FilesystemCache;
+use Twig\Cache\ReadOnlyFilesystemCache;
use Twig\Environment;
use Twig\Extension\CoreExtension;
use Twig\Extension\DebugExtension;
@@ -79,8 +81,24 @@
->set('twig.template_iterator', TemplateIterator::class)
->args([service('kernel'), abstract_arg('Twig paths'), param('twig.default_path'), abstract_arg('File name pattern')])
+ ->set('twig.template_cache.runtime_cache', FilesystemCache::class)
+ ->args([param('kernel.cache_dir').'/twig'])
+
+ ->set('twig.template_cache.readonly_cache', ReadOnlyFilesystemCache::class)
+ ->args([param('kernel.build_dir').'/twig'])
+
+ ->set('twig.template_cache.warmup_cache', FilesystemCache::class)
+ ->args([param('kernel.build_dir').'/twig'])
+
+ ->set('twig.template_cache.chain', ChainCache::class)
+ ->args([[service('twig.template_cache.readonly_cache'), service('twig.template_cache.runtime_cache')]])
+
->set('twig.template_cache_warmer', TemplateCacheWarmer::class)
- ->args([service(ContainerInterface::class), service('twig.template_iterator')])
+ ->args([
+ service(ContainerInterface::class),
+ service('twig.template_iterator'),
+ service('twig.template_cache.warmup_cache'),
+ ])
->tag('kernel.cache_warmer')
->tag('container.service_subscriber', ['id' => 'twig'])
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/full.php b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/full.php
index f87af5a1baba4..68c7f5a304218 100644
--- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/full.php
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/full.php
@@ -10,8 +10,7 @@
'pi' => 3.14,
'bad' => ['key' => 'foo'],
],
- 'auto_reload' => true,
- 'cache' => '/tmp',
+ 'auto_reload' => false,
'charset' => 'ISO-8859-1',
'debug' => true,
'strict_variables' => true,
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/no-cache.php b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/no-cache.php
new file mode 100644
index 0000000000000..df1ae5c6bd63b
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/no-cache.php
@@ -0,0 +1,5 @@
+loadFromExtension('twig', [
+ 'cache' => false,
+]);
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/path-cache.php b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/path-cache.php
new file mode 100644
index 0000000000000..f0701a57d8c88
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/path-cache.php
@@ -0,0 +1,5 @@
+loadFromExtension('twig', [
+ 'cache' => 'random-path',
+]);
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/prod-cache.php b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/prod-cache.php
new file mode 100644
index 0000000000000..628854601a960
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/prod-cache.php
@@ -0,0 +1,6 @@
+loadFromExtension('twig', [
+ 'cache' => true,
+ 'auto_reload' => false,
+]);
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/extra.xml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/extra.xml
index f1cf8985329d0..df02c9dc05f91 100644
--- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/extra.xml
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/extra.xml
@@ -6,7 +6,7 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/twig https://symfony.com/schema/dic/twig/twig-1.0.xsd">
-
+
namespaced_path3
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/full.xml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/full.xml
index 528a466b0452c..3349e0d5fa744 100644
--- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/full.xml
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/full.xml
@@ -6,7 +6,7 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/twig https://symfony.com/schema/dic/twig/twig-1.0.xsd">
-
+
MyBundle::form.html.twig
@@qux
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/no-cache.xml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/no-cache.xml
new file mode 100644
index 0000000000000..f6fa72c747893
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/no-cache.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/path-cache.xml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/path-cache.xml
new file mode 100644
index 0000000000000..9caf2fc0452b0
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/path-cache.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/prod-cache.xml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/prod-cache.xml
new file mode 100644
index 0000000000000..6ee9f38506252
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/prod-cache.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/full.yml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/full.yml
index 6c249d378ff22..ab19cbf0bff8f 100644
--- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/full.yml
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/full.yml
@@ -6,8 +6,7 @@ twig:
baz: "@@qux"
pi: 3.14
bad: {key: foo}
- auto_reload: true
- cache: /tmp
+ auto_reload: false
charset: ISO-8859-1
debug: true
strict_variables: true
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/no-cache.yml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/no-cache.yml
new file mode 100644
index 0000000000000..c1e9f184bd336
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/no-cache.yml
@@ -0,0 +1,2 @@
+twig:
+ cache: false
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/path-cache.yml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/path-cache.yml
new file mode 100644
index 0000000000000..04e9d1dc61b06
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/path-cache.yml
@@ -0,0 +1,2 @@
+twig:
+ cache: random-path
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/prod-cache.yml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/prod-cache.yml
new file mode 100644
index 0000000000000..82a1dd9e100d3
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/prod-cache.yml
@@ -0,0 +1,3 @@
+twig:
+ cache: true
+ auto_reload: false
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php
index ffe772a28861d..086a4cdd6e1e8 100644
--- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php
+++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php
@@ -28,6 +28,7 @@
use Symfony\Component\Form\FormRenderer;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Stopwatch\Stopwatch;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
use Twig\Environment;
class TwigExtensionTest extends TestCase
@@ -54,14 +55,20 @@ public function testLoadEmptyConfiguration()
if (class_exists(Mailer::class)) {
$this->assertCount(2, $container->getDefinition('twig.mime_body_renderer')->getArguments());
}
+
+ if (interface_exists(ValidatorInterface::class)) {
+ $this->assertTrue($container->hasDefinition('twig.validator'));
+ } else {
+ $this->assertFalse($container->hasDefinition('twig.validator'));
+ }
}
/**
- * @dataProvider getFormats
+ * @dataProvider getFormatsAndBuildDir
*/
- public function testLoadFullConfiguration(string $format)
+ public function testLoadFullConfiguration(string $format, ?string $buildDir)
{
- $container = $this->createContainer();
+ $container = $this->createContainer($buildDir);
$container->registerExtension(new TwigExtension());
$this->loadFromFile($container, 'full', $format);
$this->compileContainer($container);
@@ -92,13 +99,64 @@ public function testLoadFullConfiguration(string $format)
// Twig options
$options = $container->getDefinition('twig')->getArgument(1);
- $this->assertTrue($options['auto_reload'], '->load() sets the auto_reload option');
+ $this->assertFalse($options['auto_reload'], '->load() sets the auto_reload option');
$this->assertSame('name', $options['autoescape'], '->load() sets the autoescape option');
$this->assertArrayNotHasKey('base_template_class', $options, '->load() does not set the base_template_class if none is provided');
- $this->assertEquals('/tmp', $options['cache'], '->load() sets the cache option');
$this->assertEquals('ISO-8859-1', $options['charset'], '->load() sets the charset option');
$this->assertTrue($options['debug'], '->load() sets the debug option');
$this->assertTrue($options['strict_variables'], '->load() sets the strict_variables option');
+ $this->assertEquals($buildDir !== null ? new Reference('twig.template_cache.chain') : '%kernel.cache_dir%/twig', $options['cache'], '->load() sets the cache option');
+ }
+
+ /**
+ * @dataProvider getFormatsAndBuildDir
+ */
+ public function testLoadNoCacheConfiguration(string $format, ?string $buildDir)
+ {
+ $container = $this->createContainer($buildDir);
+ $container->registerExtension(new TwigExtension());
+ $this->loadFromFile($container, 'no-cache', $format);
+ $this->compileContainer($container);
+
+ $this->assertEquals(Environment::class, $container->getDefinition('twig')->getClass(), '->load() loads the twig.xml file');
+
+ // Twig options
+ $options = $container->getDefinition('twig')->getArgument(1);
+ $this->assertFalse($options['cache'], '->load() sets cache option to false');
+ }
+
+ /**
+ * @dataProvider getFormatsAndBuildDir
+ */
+ public function testLoadPathCacheConfiguration(string $format, ?string $buildDir)
+ {
+ $container = $this->createContainer($buildDir);
+ $container->registerExtension(new TwigExtension());
+ $this->loadFromFile($container, 'path-cache', $format);
+ $this->compileContainer($container);
+
+ $this->assertEquals(Environment::class, $container->getDefinition('twig')->getClass(), '->load() loads the twig.xml file');
+
+ // Twig options
+ $options = $container->getDefinition('twig')->getArgument(1);
+ $this->assertSame('random-path', $options['cache'], '->load() sets cache option to string path');
+ }
+
+ /**
+ * @dataProvider getFormatsAndBuildDir
+ */
+ public function testLoadProdCacheConfiguration(string $format, ?string $buildDir)
+ {
+ $container = $this->createContainer($buildDir);
+ $container->registerExtension(new TwigExtension());
+ $this->loadFromFile($container, 'prod-cache', $format);
+ $this->compileContainer($container);
+
+ $this->assertEquals(Environment::class, $container->getDefinition('twig')->getClass(), '->load() loads the twig.xml file');
+
+ // Twig options
+ $options = $container->getDefinition('twig')->getArgument(1);
+ $this->assertEquals($buildDir !== null ? new Reference('twig.template_cache.chain') : '%kernel.cache_dir%/twig', $options['cache'], '->load() sets cache option to CacheChain reference');
}
/**
@@ -238,6 +296,19 @@ public static function getFormats(): array
];
}
+ public static function getFormatsAndBuildDir(): array
+ {
+ return [
+ ['php', null],
+ ['php', __DIR__.'/build'],
+ ['yml', null],
+ ['yml', __DIR__.'/build'],
+ ['xml', null],
+ ['xml', __DIR__.'/build'],
+ ];
+ }
+
+
/**
* @dataProvider stopwatchExtensionAvailabilityProvider
*/
@@ -312,10 +383,11 @@ public function testCustomHtmlToTextConverterService(string $format)
$this->assertEquals(new Reference('my_converter'), $bodyRenderer->getArgument('$converter'));
}
- private function createContainer(): ContainerBuilder
+ private function createContainer(?string $buildDir = null): ContainerBuilder
{
$container = new ContainerBuilder(new ParameterBag([
'kernel.cache_dir' => __DIR__,
+ 'kernel.build_dir' => $buildDir ?? __DIR__,
'kernel.project_dir' => __DIR__,
'kernel.charset' => 'UTF-8',
'kernel.debug' => false,
diff --git a/src/Symfony/Bundle/TwigBundle/Tests/Functional/AttributeExtensionTest.php b/src/Symfony/Bundle/TwigBundle/Tests/Functional/AttributeExtensionTest.php
index e9bd8e2e93a90..8b4e4555f36a0 100644
--- a/src/Symfony/Bundle/TwigBundle/Tests/Functional/AttributeExtensionTest.php
+++ b/src/Symfony/Bundle/TwigBundle/Tests/Functional/AttributeExtensionTest.php
@@ -11,11 +11,15 @@
namespace Symfony\Bundle\TwigBundle\Tests\Functional;
+use PHPUnit\Framework\Attributes\After;
+use PHPUnit\Framework\Attributes\Before;
+use PHPUnit\Framework\Attributes\BeforeClass;
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
use Symfony\Bundle\TwigBundle\Tests\TestCase;
use Symfony\Bundle\TwigBundle\TwigBundle;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Exception\LogicException;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpKernel\Kernel;
use Twig\Attribute\AsTwigFilter;
@@ -23,26 +27,27 @@
use Twig\Attribute\AsTwigTest;
use Twig\Environment;
use Twig\Error\RuntimeError;
+use Twig\Extension\AbstractExtension;
use Twig\Extension\AttributeExtension;
class AttributeExtensionTest extends TestCase
{
- public function testExtensionWithAttributes()
+ /** @beforeClass */
+ #[BeforeClass]
+ public static function assertTwigVersion(): void
{
if (!class_exists(AttributeExtension::class)) {
self::markTestSkipped('Twig 3.21 is required.');
}
+ }
- $kernel = new class('test', true) extends Kernel
- {
- public function registerBundles(): iterable
- {
- return [new FrameworkBundle(), new TwigBundle()];
- }
-
+ public function testExtensionWithAttributes()
+ {
+ $kernel = new class extends AttributeExtensionKernel {
public function registerContainerConfiguration(LoaderInterface $loader): void
{
$loader->load(static function (ContainerBuilder $container) {
+ $container->setParameter('kernel.secret', 'secret');
$container->register(StaticExtensionWithAttributes::class, StaticExtensionWithAttributes::class)
->setAutoconfigured(true);
$container->register(RuntimeExtensionWithAttributes::class, RuntimeExtensionWithAttributes::class)
@@ -52,11 +57,6 @@ public function registerContainerConfiguration(LoaderInterface $loader): void
$container->setAlias('twig_test', 'twig')->setPublic(true);
});
}
-
- public function getProjectDir(): string
- {
- return sys_get_temp_dir().'/'.Kernel::VERSION.'/AttributeExtension';
- }
};
$kernel->boot();
@@ -72,10 +72,30 @@ public function getProjectDir(): string
$twig->getRuntime(StaticExtensionWithAttributes::class);
}
+ public function testInvalidExtensionClass()
+ {
+ $kernel = new class extends AttributeExtensionKernel {
+ public function registerContainerConfiguration(LoaderInterface $loader): void
+ {
+ $loader->load(static function (ContainerBuilder $container) {
+ $container->register(InvalidExtensionWithAttributes::class, InvalidExtensionWithAttributes::class)
+ ->setAutoconfigured(true);
+ });
+ }
+ };
+
+ $this->expectException(LogicException::class);
+ $this->expectExceptionMessage('The class "Symfony\Bundle\TwigBundle\Tests\Functional\InvalidExtensionWithAttributes" cannot extend "Twig\Extension\AbstractExtension" and use the "#[Twig\Attribute\AsTwigFilter]" attribute on method "funFilter()", choose one or the other.');
+
+ $kernel->boot();
+ }
+
+
/**
* @before
* @after
*/
+ #[Before, After]
protected function deleteTempDir()
{
if (file_exists($dir = sys_get_temp_dir().'/'.Kernel::VERSION.'/AttributeExtension')) {
@@ -84,6 +104,24 @@ protected function deleteTempDir()
}
}
+abstract class AttributeExtensionKernel extends Kernel
+{
+ public function __construct()
+ {
+ parent::__construct('test', true);
+ }
+
+ public function registerBundles(): iterable
+ {
+ return [new FrameworkBundle(), new TwigBundle()];
+ }
+
+ public function getProjectDir(): string
+ {
+ return sys_get_temp_dir().'/'.Kernel::VERSION.'/AttributeExtension';
+ }
+}
+
class StaticExtensionWithAttributes
{
#[AsTwigFilter('foo')]
@@ -111,10 +149,19 @@ public function __construct(private bool $prefix)
{
}
- #[AsTwigFilter('foo')]
- #[AsTwigFunction('foo')]
+ #[AsTwigFilter('prefix_foo')]
+ #[AsTwigFunction('prefix_foo')]
public function prefix(string $value): string
{
return $this->prefix.$value;
}
}
+
+class InvalidExtensionWithAttributes extends AbstractExtension
+{
+ #[AsTwigFilter('fun')]
+ public function funFilter(): string
+ {
+ return 'fun';
+ }
+}
diff --git a/src/Symfony/Bundle/TwigBundle/composer.json b/src/Symfony/Bundle/TwigBundle/composer.json
index f6e0e110cc686..221a7f471290e 100644
--- a/src/Symfony/Bundle/TwigBundle/composer.json
+++ b/src/Symfony/Bundle/TwigBundle/composer.json
@@ -18,9 +18,9 @@
"require": {
"php": ">=8.2",
"composer-runtime-api": ">=2.1",
- "symfony/config": "^6.4|^7.0",
+ "symfony/config": "^7.3",
"symfony/dependency-injection": "^6.4|^7.0",
- "symfony/twig-bridge": "^6.4|^7.0",
+ "symfony/twig-bridge": "^7.3",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"twig/twig": "^3.12"
diff --git a/src/Symfony/Bundle/WebProfilerBundle/CHANGELOG.md b/src/Symfony/Bundle/WebProfilerBundle/CHANGELOG.md
index 539d814d2a438..5e5e8db36e233 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/CHANGELOG.md
+++ b/src/Symfony/Bundle/WebProfilerBundle/CHANGELOG.md
@@ -4,6 +4,34 @@ CHANGELOG
7.3
---
+ * Add `profiler.php` and `wdt.php` routing configuration files (use them instead of their XML equivalent)
+
+ Before:
+
+ ```yaml
+ when@dev:
+ web_profiler_wdt:
+ resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
+ prefix: /_wdt
+
+ web_profiler_profiler:
+ resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
+ prefix: /_profiler
+ ```
+
+ After:
+
+ ```yaml
+ when@dev:
+ web_profiler_wdt:
+ resource: '@WebProfilerBundle/Resources/config/routing/wdt.php'
+ prefix: /_wdt
+
+ web_profiler_profiler:
+ resource: '@WebProfilerBundle/Resources/config/routing/profiler.php
+ prefix: /_profiler
+ ```
+
* Add `ajax_replace` option for replacing toolbar on AJAX requests
7.2
diff --git a/src/Symfony/Bundle/WebProfilerBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/WebProfilerBundle/DependencyInjection/Configuration.php
index d9ca50a27af21..649bf459e8fed 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/WebProfilerBundle/DependencyInjection/Configuration.php
@@ -31,7 +31,9 @@ public function getConfigTreeBuilder(): TreeBuilder
{
$treeBuilder = new TreeBuilder('web_profiler');
- $treeBuilder->getRootNode()
+ $treeBuilder
+ ->getRootNode()
+ ->docUrl('https://symfony.com/doc/{version:major}.{version:minor}/reference/configuration/web_profiler.html', 'symfony/web-profiler-bundle')
->children()
->arrayNode('toolbar')
->info('Profiler toolbar configuration')
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/profiler.php b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/profiler.php
new file mode 100644
index 0000000000000..09e022be922b0
--- /dev/null
+++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/profiler.php
@@ -0,0 +1,62 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
+use Symfony\Component\Routing\Loader\XmlFileLoader;
+
+return function (RoutingConfigurator $routes): void {
+ foreach (debug_backtrace(\DEBUG_BACKTRACE_PROVIDE_OBJECT) as $trace) {
+ if (isset($trace['object']) && $trace['object'] instanceof XmlFileLoader && 'doImport' === $trace['function']) {
+ if (__DIR__ === dirname(realpath($trace['args'][3]))) {
+ trigger_deprecation('symfony/routing', '7.3', 'The "profiler.xml" routing configuration file is deprecated, import "profiler.php" instead.');
+
+ break;
+ }
+ }
+ }
+
+ $routes->add('_profiler_home', '/')
+ ->controller('web_profiler.controller.profiler::homeAction')
+ ;
+ $routes->add('_profiler_search', '/search')
+ ->controller('web_profiler.controller.profiler::searchAction')
+ ;
+ $routes->add('_profiler_search_bar', '/search_bar')
+ ->controller('web_profiler.controller.profiler::searchBarAction')
+ ;
+ $routes->add('_profiler_phpinfo', '/phpinfo')
+ ->controller('web_profiler.controller.profiler::phpinfoAction')
+ ;
+ $routes->add('_profiler_xdebug', '/xdebug')
+ ->controller('web_profiler.controller.profiler::xdebugAction')
+ ;
+ $routes->add('_profiler_font', '/font/{fontName}.woff2')
+ ->controller('web_profiler.controller.profiler::fontAction')
+ ;
+ $routes->add('_profiler_search_results', '/{token}/search/results')
+ ->controller('web_profiler.controller.profiler::searchResultsAction')
+ ;
+ $routes->add('_profiler_open_file', '/open')
+ ->controller('web_profiler.controller.profiler::openAction')
+ ;
+ $routes->add('_profiler', '/{token}')
+ ->controller('web_profiler.controller.profiler::panelAction')
+ ;
+ $routes->add('_profiler_router', '/{token}/router')
+ ->controller('web_profiler.controller.router::panelAction')
+ ;
+ $routes->add('_profiler_exception', '/{token}/exception')
+ ->controller('web_profiler.controller.exception_panel::body')
+ ;
+ $routes->add('_profiler_exception_css', '/{token}/exception.css')
+ ->controller('web_profiler.controller.exception_panel::stylesheet')
+ ;
+};
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/profiler.xml b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/profiler.xml
index 363b15d872b0c..8712f38774a74 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/profiler.xml
+++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/profiler.xml
@@ -4,52 +4,5 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
-
- web_profiler.controller.profiler::homeAction
-
-
-
- web_profiler.controller.profiler::searchAction
-
-
-
- web_profiler.controller.profiler::searchBarAction
-
-
-
- web_profiler.controller.profiler::phpinfoAction
-
-
-
- web_profiler.controller.profiler::xdebugAction
-
-
-
- web_profiler.controller.profiler::fontAction
-
-
-
- web_profiler.controller.profiler::searchResultsAction
-
-
-
- web_profiler.controller.profiler::openAction
-
-
-
- web_profiler.controller.profiler::panelAction
-
-
-
- web_profiler.controller.router::panelAction
-
-
-
- web_profiler.controller.exception_panel::body
-
-
-
- web_profiler.controller.exception_panel::stylesheet
-
-
+
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/wdt.php b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/wdt.php
new file mode 100644
index 0000000000000..d0383ee8fbef9
--- /dev/null
+++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/wdt.php
@@ -0,0 +1,32 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
+use Symfony\Component\Routing\Loader\XmlFileLoader;
+
+return function (RoutingConfigurator $routes): void {
+ foreach (debug_backtrace(\DEBUG_BACKTRACE_PROVIDE_OBJECT) as $trace) {
+ if (isset($trace['object']) && $trace['object'] instanceof XmlFileLoader && 'doImport' === $trace['function']) {
+ if (__DIR__ === dirname(realpath($trace['args'][3]))) {
+ trigger_deprecation('symfony/routing', '7.3', 'The "wdt.xml" routing configuration file is deprecated, import "wdt.php" instead.');
+
+ break;
+ }
+ }
+ }
+
+ $routes->add('_wdt_stylesheet', '/styles')
+ ->controller('web_profiler.controller.profiler::toolbarStylesheetAction')
+ ;
+ $routes->add('_wdt', '/{token}')
+ ->controller('web_profiler.controller.profiler::toolbarAction')
+ ;
+};
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/wdt.xml b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/wdt.xml
index 9f45f1b7490ae..04bddb4f3a1b9 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/wdt.xml
+++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/routing/wdt.xml
@@ -4,11 +4,5 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
-
- web_profiler.controller.profiler::toolbarStylesheetAction
-
-
-
- web_profiler.controller.profiler::toolbarAction
-
+
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/workflow.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/workflow.html.twig
index 6f09b36355056..dfe7beac0932f 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/workflow.html.twig
+++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/workflow.html.twig
@@ -137,20 +137,22 @@
{{ source('@WebProfiler/Script/Mermaid/mermaid-flowchart-v2.min.js') }}
const isDarkMode = document.querySelector('body').classList.contains('theme-dark');
mermaid.initialize({
- flowchart: { useMaxWidth: false },
+ flowchart: {
+ useMaxWidth: true,
+ },
securityLevel: 'loose',
- 'theme': 'base',
- 'themeVariables': {
+ theme: 'base',
+ themeVariables: {
darkMode: isDarkMode,
- 'fontFamily': 'var(--font-family-system)',
- 'fontSize': 'var(--font-size-body)',
+ fontFamily: 'var(--font-family-system)',
+ fontSize: 'var(--font-size-body)',
// the properties below don't support CSS variables
- 'primaryColor': isDarkMode ? 'lightsteelblue' : 'aliceblue',
- 'primaryTextColor': isDarkMode ? '#000' : '#000',
- 'primaryBorderColor': isDarkMode ? 'steelblue' : 'lightsteelblue',
- 'lineColor': isDarkMode ? '#939393' : '#d4d4d4',
- 'secondaryColor': isDarkMode ? 'lightyellow' : 'lightyellow',
- 'tertiaryColor': isDarkMode ? 'lightSalmon' : 'lightSalmon',
+ primaryColor: isDarkMode ? 'lightsteelblue' : 'aliceblue',
+ primaryTextColor: isDarkMode ? '#000' : '#000',
+ primaryBorderColor: isDarkMode ? 'steelblue' : 'lightsteelblue',
+ lineColor: isDarkMode ? '#939393' : '#d4d4d4',
+ secondaryColor: isDarkMode ? 'lightyellow' : 'lightyellow',
+ tertiaryColor: isDarkMode ? 'lightSalmon' : 'lightSalmon',
}
});
@@ -275,6 +277,7 @@
click {{ nodeId }} showNodeDetails{{ collector.hash(name) }}
{% endfor %}
+ View on mermaid.live
Calls
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/toolbar_js.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/toolbar_js.html.twig
index 91e6dc05e658c..5adfd27796acf 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/toolbar_js.html.twig
+++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/toolbar_js.html.twig
@@ -144,7 +144,7 @@
var ajaxToolbarPanel = document.querySelector('.sf-toolbar-block-ajax');
if (requestStack.length) {
- ajaxToolbarPanel.style.display = 'block';
+ ajaxToolbarPanel.style.display = '';
} else {
ajaxToolbarPanel.style.display = 'none';
}
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Tests/Functional/WebProfilerBundleKernel.php b/src/Symfony/Bundle/WebProfilerBundle/Tests/Functional/WebProfilerBundleKernel.php
index f4a9f939e274b..0447e5787401e 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Tests/Functional/WebProfilerBundleKernel.php
+++ b/src/Symfony/Bundle/WebProfilerBundle/Tests/Functional/WebProfilerBundleKernel.php
@@ -43,8 +43,8 @@ public function registerBundles(): iterable
protected function configureRoutes(RoutingConfigurator $routes): void
{
- $routes->import(__DIR__.'/../../Resources/config/routing/profiler.xml')->prefix('/_profiler');
- $routes->import(__DIR__.'/../../Resources/config/routing/wdt.xml')->prefix('/_wdt');
+ $routes->import(__DIR__.'/../../Resources/config/routing/profiler.php')->prefix('/_profiler');
+ $routes->import(__DIR__.'/../../Resources/config/routing/wdt.php')->prefix('/_wdt');
$routes->add('_', '/')->controller('kernel::homepageController');
}
diff --git a/src/Symfony/Bundle/WebProfilerBundle/composer.json b/src/Symfony/Bundle/WebProfilerBundle/composer.json
index ce94b4b62ebbb..00269dd279d45 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/composer.json
+++ b/src/Symfony/Bundle/WebProfilerBundle/composer.json
@@ -17,7 +17,9 @@
],
"require": {
"php": ">=8.2",
- "symfony/config": "^6.4|^7.0",
+ "composer-runtime-api": ">=2.1",
+ "symfony/config": "^7.3",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/framework-bundle": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/routing": "^6.4|^7.0",
@@ -34,7 +36,8 @@
"symfony/form": "<6.4",
"symfony/mailer": "<6.4",
"symfony/messenger": "<6.4",
- "symfony/serializer": "<7.2"
+ "symfony/serializer": "<7.2",
+ "symfony/workflow": "<7.3"
},
"autoload": {
"psr-4": { "Symfony\\Bundle\\WebProfilerBundle\\": "" },
diff --git a/src/Symfony/Component/AssetMapper/Compiler/Parser/JavascriptSequenceParser.php b/src/Symfony/Component/AssetMapper/Compiler/Parser/JavascriptSequenceParser.php
index 943c0eea14f51..7531221a8e5ee 100644
--- a/src/Symfony/Component/AssetMapper/Compiler/Parser/JavascriptSequenceParser.php
+++ b/src/Symfony/Component/AssetMapper/Compiler/Parser/JavascriptSequenceParser.php
@@ -133,36 +133,35 @@ public function parseUntil(int $position): void
continue;
}
- // Single-line string
- if ('"' === $matchChar || "'" === $matchChar) {
- if (false === $endPos = strpos($this->content, $matchChar, $matchPos + 1)) {
- $this->endsWithSequence(self::STATE_STRING, $position);
-
- return;
- }
- while (false !== $endPos && '\\' == $this->content[$endPos - 1]) {
- $endPos = strpos($this->content, $matchChar, $endPos + 1);
+ if ('"' === $matchChar || "'" === $matchChar || '`' === $matchChar) {
+ $endPos = $matchPos + 1;
+ while (false !== $endPos = strpos($this->content, $matchChar, $endPos)) {
+ $backslashes = 0;
+ $i = $endPos - 1;
+ while ($i >= 0 && $this->content[$i] === '\\') {
+ $backslashes++;
+ $i--;
+ }
+
+ if (0 === $backslashes % 2) {
+ break;
+ }
+
+ $endPos++;
}
- $this->cursor = min($endPos + 1, $position);
- $this->setSequence(self::STATE_STRING, $endPos + 1);
- continue;
- }
-
- // Multi-line string
- if ('`' === $matchChar) {
- if (false === $endPos = strpos($this->content, $matchChar, $matchPos + 1)) {
+ if (false === $endPos) {
$this->endsWithSequence(self::STATE_STRING, $position);
-
return;
}
- while (false !== $endPos && '\\' == $this->content[$endPos - 1]) {
- $endPos = strpos($this->content, $matchChar, $endPos + 1);
- }
$this->cursor = min($endPos + 1, $position);
$this->setSequence(self::STATE_STRING, $endPos + 1);
+ continue;
}
+
+ // Fallback
+ $this->cursor = $matchPos + 1;
}
}
diff --git a/src/Symfony/Component/AssetMapper/Tests/Compiler/Parser/JavascriptSequenceParserTest.php b/src/Symfony/Component/AssetMapper/Tests/Compiler/Parser/JavascriptSequenceParserTest.php
index cd9c88ff72593..794b7bbf61d94 100644
--- a/src/Symfony/Component/AssetMapper/Tests/Compiler/Parser/JavascriptSequenceParserTest.php
+++ b/src/Symfony/Component/AssetMapper/Tests/Compiler/Parser/JavascriptSequenceParserTest.php
@@ -230,5 +230,10 @@ public static function provideStringCases(): iterable
3,
false,
];
+ yield 'after unclosed string' => [
+ '"hello',
+ 6,
+ true,
+ ];
}
}
diff --git a/src/Symfony/Component/Cache/Adapter/ApcuAdapter.php b/src/Symfony/Component/Cache/Adapter/ApcuAdapter.php
index ddb7210057df8..b234909fdadff 100644
--- a/src/Symfony/Component/Cache/Adapter/ApcuAdapter.php
+++ b/src/Symfony/Component/Cache/Adapter/ApcuAdapter.php
@@ -98,19 +98,10 @@ protected function doSave(array $values, int $lifetime): array|bool
return $failed;
}
- try {
- if (false === $failures = apcu_store($values, null, $lifetime)) {
- $failures = $values;
- }
-
- return array_keys($failures);
- } catch (\Throwable $e) {
- if (1 === \count($values)) {
- // Workaround https://github.com/krakjoe/apcu/issues/170
- apcu_delete(array_key_first($values));
- }
-
- throw $e;
+ if (false === $failures = apcu_store($values, null, $lifetime)) {
+ $failures = $values;
}
+
+ return array_keys($failures);
}
}
diff --git a/src/Symfony/Component/Cache/Adapter/ArrayAdapter.php b/src/Symfony/Component/Cache/Adapter/ArrayAdapter.php
index 7deb9dc6e2187..c9ee94ee9c922 100644
--- a/src/Symfony/Component/Cache/Adapter/ArrayAdapter.php
+++ b/src/Symfony/Component/Cache/Adapter/ArrayAdapter.php
@@ -338,7 +338,9 @@ private function freeze($value, string $key): string|int|float|bool|array|\UnitE
try {
$serialized = serialize($value);
} catch (\Exception $e) {
- unset($this->values[$key], $this->tags[$key]);
+ if (!isset($this->expiries[$key])) {
+ unset($this->values[$key]);
+ }
$type = get_debug_type($value);
$message = \sprintf('Failed to save key "{key}" of type %s: %s', $type, $e->getMessage());
CacheItem::log($this->logger, $message, ['key' => $key, 'exception' => $e, 'cache-adapter' => get_debug_type($this)]);
diff --git a/src/Symfony/Component/Cache/Adapter/DoctrineDbalAdapter.php b/src/Symfony/Component/Cache/Adapter/DoctrineDbalAdapter.php
index c3a4909e211df..8e52dfee240a0 100644
--- a/src/Symfony/Component/Cache/Adapter/DoctrineDbalAdapter.php
+++ b/src/Symfony/Component/Cache/Adapter/DoctrineDbalAdapter.php
@@ -359,9 +359,16 @@ private function getPlatformName(): string
$platform = $this->conn->getDatabasePlatform();
+ if (interface_exists(DBALException::class)) {
+ // DBAL 4+
+ $sqlitePlatformClass = 'Doctrine\DBAL\Platforms\SQLitePlatform';
+ } else {
+ $sqlitePlatformClass = 'Doctrine\DBAL\Platforms\SqlitePlatform';
+ }
+
return $this->platformName = match (true) {
$platform instanceof \Doctrine\DBAL\Platforms\AbstractMySQLPlatform => 'mysql',
- $platform instanceof \Doctrine\DBAL\Platforms\SqlitePlatform => 'sqlite',
+ $platform instanceof $sqlitePlatformClass => 'sqlite',
$platform instanceof \Doctrine\DBAL\Platforms\PostgreSQLPlatform => 'pgsql',
$platform instanceof \Doctrine\DBAL\Platforms\OraclePlatform => 'oci',
$platform instanceof \Doctrine\DBAL\Platforms\SQLServerPlatform => 'sqlsrv',
diff --git a/src/Symfony/Component/Cache/Adapter/TraceableAdapter.php b/src/Symfony/Component/Cache/Adapter/TraceableAdapter.php
index 43628e4cedbf0..3e1bf2bf7a9a9 100644
--- a/src/Symfony/Component/Cache/Adapter/TraceableAdapter.php
+++ b/src/Symfony/Component/Cache/Adapter/TraceableAdapter.php
@@ -34,6 +34,7 @@ class TraceableAdapter implements AdapterInterface, CacheInterface, NamespacedPo
public function __construct(
protected AdapterInterface $pool,
+ protected readonly ?\Closure $disabled = null,
) {
}
@@ -45,6 +46,9 @@ public function get(string $key, callable $callback, ?float $beta = null, ?array
if (!$this->pool instanceof CacheInterface) {
throw new BadMethodCallException(\sprintf('Cannot call "%s::get()": this class doesn\'t implement "%s".', get_debug_type($this->pool), CacheInterface::class));
}
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->get($key, $callback, $beta, $metadata);
+ }
$isHit = true;
$callback = function (CacheItem $item, bool &$save) use ($callback, &$isHit) {
@@ -71,6 +75,9 @@ public function get(string $key, callable $callback, ?float $beta = null, ?array
public function getItem(mixed $key): CacheItem
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->getItem($key);
+ }
$event = $this->start(__FUNCTION__);
try {
$item = $this->pool->getItem($key);
@@ -88,6 +95,9 @@ public function getItem(mixed $key): CacheItem
public function hasItem(mixed $key): bool
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->hasItem($key);
+ }
$event = $this->start(__FUNCTION__);
try {
return $event->result[$key] = $this->pool->hasItem($key);
@@ -98,6 +108,9 @@ public function hasItem(mixed $key): bool
public function deleteItem(mixed $key): bool
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->deleteItem($key);
+ }
$event = $this->start(__FUNCTION__);
try {
return $event->result[$key] = $this->pool->deleteItem($key);
@@ -108,6 +121,9 @@ public function deleteItem(mixed $key): bool
public function save(CacheItemInterface $item): bool
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->save($item);
+ }
$event = $this->start(__FUNCTION__);
try {
return $event->result[$item->getKey()] = $this->pool->save($item);
@@ -118,6 +134,9 @@ public function save(CacheItemInterface $item): bool
public function saveDeferred(CacheItemInterface $item): bool
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->saveDeferred($item);
+ }
$event = $this->start(__FUNCTION__);
try {
return $event->result[$item->getKey()] = $this->pool->saveDeferred($item);
@@ -128,6 +147,9 @@ public function saveDeferred(CacheItemInterface $item): bool
public function getItems(array $keys = []): iterable
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->getItems($keys);
+ }
$event = $this->start(__FUNCTION__);
try {
$result = $this->pool->getItems($keys);
@@ -151,6 +173,9 @@ public function getItems(array $keys = []): iterable
public function clear(string $prefix = ''): bool
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->clear($prefix);
+ }
$event = $this->start(__FUNCTION__);
try {
if ($this->pool instanceof AdapterInterface) {
@@ -165,6 +190,9 @@ public function clear(string $prefix = ''): bool
public function deleteItems(array $keys): bool
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->deleteItems($keys);
+ }
$event = $this->start(__FUNCTION__);
$event->result['keys'] = $keys;
try {
@@ -176,6 +204,9 @@ public function deleteItems(array $keys): bool
public function commit(): bool
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->commit();
+ }
$event = $this->start(__FUNCTION__);
try {
return $event->result = $this->pool->commit();
@@ -189,6 +220,9 @@ public function prune(): bool
if (!$this->pool instanceof PruneableInterface) {
return false;
}
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->prune();
+ }
$event = $this->start(__FUNCTION__);
try {
return $event->result = $this->pool->prune();
@@ -208,6 +242,9 @@ public function reset(): void
public function delete(string $key): bool
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->deleteItem($key);
+ }
$event = $this->start(__FUNCTION__);
try {
return $event->result[$key] = $this->pool->deleteItem($key);
diff --git a/src/Symfony/Component/Cache/Adapter/TraceableTagAwareAdapter.php b/src/Symfony/Component/Cache/Adapter/TraceableTagAwareAdapter.php
index c85d199e49cb6..bde27c68a740f 100644
--- a/src/Symfony/Component/Cache/Adapter/TraceableTagAwareAdapter.php
+++ b/src/Symfony/Component/Cache/Adapter/TraceableTagAwareAdapter.php
@@ -18,13 +18,16 @@
*/
class TraceableTagAwareAdapter extends TraceableAdapter implements TagAwareAdapterInterface, TagAwareCacheInterface
{
- public function __construct(TagAwareAdapterInterface $pool)
+ public function __construct(TagAwareAdapterInterface $pool, ?\Closure $disabled = null)
{
- parent::__construct($pool);
+ parent::__construct($pool, $disabled);
}
public function invalidateTags(array $tags): bool
{
+ if ($this->disabled?->__invoke()) {
+ return $this->pool->invalidateTags($tags);
+ }
$event = $this->start(__FUNCTION__);
try {
return $event->result = $this->pool->invalidateTags($tags);
diff --git a/src/Symfony/Component/Cache/CacheItem.php b/src/Symfony/Component/Cache/CacheItem.php
index ec2c0c5c470d6..4ce8e0cd1948a 100644
--- a/src/Symfony/Component/Cache/CacheItem.php
+++ b/src/Symfony/Component/Cache/CacheItem.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\Cache;
+use Psr\Cache\CacheItemInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\Cache\Exception\InvalidArgumentException;
use Symfony\Component\Cache\Exception\LogicException;
@@ -30,7 +31,7 @@ final class CacheItem implements ItemInterface
protected float|int|null $expiry = null;
protected array $metadata = [];
protected array $newMetadata = [];
- protected ?ItemInterface $innerItem = null;
+ protected ?CacheItemInterface $innerItem = null;
protected ?string $poolHash = null;
protected bool $isTaggable = false;
diff --git a/src/Symfony/Component/Cache/DependencyInjection/CacheCollectorPass.php b/src/Symfony/Component/Cache/DependencyInjection/CacheCollectorPass.php
index ed957406dafbe..0b8d6aed569dc 100644
--- a/src/Symfony/Component/Cache/DependencyInjection/CacheCollectorPass.php
+++ b/src/Symfony/Component/Cache/DependencyInjection/CacheCollectorPass.php
@@ -52,7 +52,7 @@ private function addToCollector(string $id, string $name, ContainerBuilder $cont
if (!$definition->isPublic() || !$definition->isPrivate()) {
$recorder->setPublic($definition->isPublic());
}
- $recorder->setArguments([new Reference($innerId = $id.'.recorder_inner')]);
+ $recorder->setArguments([new Reference($innerId = $id.'.recorder_inner'), new Reference('profiler.is_disabled_state_checker', ContainerBuilder::IGNORE_ON_INVALID_REFERENCE)]);
foreach ($definition->getMethodCalls() as [$method, $args]) {
if ('setCallbackWrapper' !== $method || !$args[0] instanceof Definition || !($args[0]->getArguments()[2] ?? null) instanceof Definition) {
diff --git a/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php b/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php
index 35eefb501b5a6..896ca94a1425b 100644
--- a/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php
+++ b/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php
@@ -352,6 +352,23 @@ public function testNumericKeysWorkAfterMemoryLeakPrevention()
$this->assertEquals('value-50', $cache->getItem((string) 50)->get());
}
+ public function testErrorsDontInvalidate()
+ {
+ if (isset($this->skippedTests[__FUNCTION__])) {
+ $this->markTestSkipped($this->skippedTests[__FUNCTION__]);
+ }
+
+ $cache = $this->createCachePool(0, __FUNCTION__);
+
+ $item = $cache->getItem('foo');
+ $this->assertTrue($cache->save($item->set('bar')));
+ $this->assertTrue($cache->hasItem('foo'));
+
+ $item->set(static fn () => null);
+ $this->assertFalse($cache->save($item));
+ $this->assertSame('bar', $cache->getItem('foo')->get());
+ }
+
public function testNamespaces()
{
if (isset($this->skippedTests[__FUNCTION__])) {
diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php
index 5bc2bfeb1fedd..0c856e6f5770c 100644
--- a/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php
+++ b/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php
@@ -42,6 +42,7 @@ class PhpArrayAdapterTest extends AdapterTestCase
'testSaveDeferredWhenChangingValues' => 'PhpArrayAdapter is read-only.',
'testSaveDeferredOverwrite' => 'PhpArrayAdapter is read-only.',
'testIsHitDeferred' => 'PhpArrayAdapter is read-only.',
+ 'testErrorsDontInvalidate' => 'PhpArrayAdapter is read-only.',
'testExpiresAt' => 'PhpArrayAdapter does not support expiration.',
'testExpiresAtWithNull' => 'PhpArrayAdapter does not support expiration.',
diff --git a/src/Symfony/Component/Cache/Traits/Relay/BgsaveTrait.php b/src/Symfony/Component/Cache/Traits/Relay/BgsaveTrait.php
new file mode 100644
index 0000000000000..367f82f7bb2b6
--- /dev/null
+++ b/src/Symfony/Component/Cache/Traits/Relay/BgsaveTrait.php
@@ -0,0 +1,36 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Cache\Traits\Relay;
+
+if (version_compare(phpversion('relay'), '0.11', '>=')) {
+ /**
+ * @internal
+ */
+ trait BgsaveTrait
+ {
+ public function bgsave($arg = null): \Relay\Relay|bool
+ {
+ return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgsave(...\func_get_args());
+ }
+ }
+} else {
+ /**
+ * @internal
+ */
+ trait BgsaveTrait
+ {
+ public function bgsave($schedule = false): \Relay\Relay|bool
+ {
+ return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgsave(...\func_get_args());
+ }
+ }
+}
diff --git a/src/Symfony/Component/Cache/Traits/RelayProxy.php b/src/Symfony/Component/Cache/Traits/RelayProxy.php
index e0ca8873a0182..b6d48dd543dba 100644
--- a/src/Symfony/Component/Cache/Traits/RelayProxy.php
+++ b/src/Symfony/Component/Cache/Traits/RelayProxy.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\Cache\Traits;
+use Symfony\Component\Cache\Traits\Relay\BgsaveTrait;
use Symfony\Component\Cache\Traits\Relay\CopyTrait;
use Symfony\Component\Cache\Traits\Relay\GeosearchTrait;
use Symfony\Component\Cache\Traits\Relay\GetrangeTrait;
@@ -31,6 +32,7 @@ class_exists(\Symfony\Component\VarExporter\Internal\LazyObjectState::class);
*/
class RelayProxy extends \Relay\Relay implements ResetInterface, LazyObjectInterface
{
+ use BgsaveTrait;
use CopyTrait;
use GeosearchTrait;
use GetrangeTrait;
@@ -338,11 +340,6 @@ public function lcs($key1, $key2, $options = null): mixed
return $this->initializeLazyObject()->lcs(...\func_get_args());
}
- public function bgsave($schedule = false): \Relay\Relay|bool
- {
- return $this->initializeLazyObject()->bgsave(...\func_get_args());
- }
-
public function save(): \Relay\Relay|bool
{
return $this->initializeLazyObject()->save(...\func_get_args());
diff --git a/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php b/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php
index 08e91c2d11105..ddd6dbb291051 100644
--- a/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php
+++ b/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php
@@ -412,39 +412,39 @@ private function getComment(BaseNode $node): string
{
$comment = '';
if ('' !== $info = (string) $node->getInfo()) {
- $comment .= ' * '.$info."\n";
+ $comment .= $info."\n";
}
if (!$node instanceof ArrayNode) {
foreach ((array) ($node->getExample() ?? []) as $example) {
- $comment .= ' * @example '.$example."\n";
+ $comment .= '@example '.$example."\n";
}
if ('' !== $default = $node->getDefaultValue()) {
- $comment .= ' * @default '.(null === $default ? 'null' : var_export($default, true))."\n";
+ $comment .= '@default '.(null === $default ? 'null' : var_export($default, true))."\n";
}
if ($node instanceof EnumNode) {
- $comment .= \sprintf(' * @param ParamConfigurator|%s $value', implode('|', array_unique(array_map(fn ($a) => !$a instanceof \UnitEnum ? var_export($a, true) : '\\'.ltrim(var_export($a, true), '\\'), $node->getValues()))))."\n";
+ $comment .= \sprintf('@param ParamConfigurator|%s $value', implode('|', array_unique(array_map(fn ($a) => !$a instanceof \UnitEnum ? var_export($a, true) : '\\'.ltrim(var_export($a, true), '\\'), $node->getValues()))))."\n";
} else {
$parameterTypes = $this->getParameterTypes($node);
- $comment .= ' * @param ParamConfigurator|'.implode('|', $parameterTypes).' $value'."\n";
+ $comment .= '@param ParamConfigurator|'.implode('|', $parameterTypes).' $value'."\n";
}
} else {
foreach ((array) ($node->getExample() ?? []) as $example) {
- $comment .= ' * @example '.json_encode($example)."\n";
+ $comment .= '@example '.json_encode($example)."\n";
}
if ($node->hasDefaultValue() && [] != $default = $node->getDefaultValue()) {
- $comment .= ' * @default '.json_encode($default)."\n";
+ $comment .= '@default '.json_encode($default)."\n";
}
}
if ($node->isDeprecated()) {
- $comment .= ' * @deprecated '.$node->getDeprecation($node->getName(), $node->getParent()->getName())['message']."\n";
+ $comment .= '@deprecated '.$node->getDeprecation($node->getName(), $node->getParent()->getName())['message']."\n";
}
- return $comment;
+ return $comment ? ' * '.str_replace("\n", "\n * ", rtrim($comment, "\n"))."\n" : '';
}
/**
diff --git a/src/Symfony/Component/Config/CHANGELOG.md b/src/Symfony/Component/Config/CHANGELOG.md
index 0a9a6c0e08372..6ee63f82c72ff 100644
--- a/src/Symfony/Component/Config/CHANGELOG.md
+++ b/src/Symfony/Component/Config/CHANGELOG.md
@@ -7,6 +7,7 @@ CHANGELOG
* Add `ExprBuilder::ifFalse()`
* Add support for info on `ArrayNodeDefinition::canBeEnabled()` and `ArrayNodeDefinition::canBeDisabled()`
* Allow using an enum FQCN with `EnumNode`
+ * Add `NodeDefinition::docUrl()`
7.2
---
diff --git a/src/Symfony/Component/Config/Definition/Builder/NodeDefinition.php b/src/Symfony/Component/Config/Definition/Builder/NodeDefinition.php
index 54e976e246ec6..fdfbdabd29ad0 100644
--- a/src/Symfony/Component/Config/Definition/Builder/NodeDefinition.php
+++ b/src/Symfony/Component/Config/Definition/Builder/NodeDefinition.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\Config\Definition\Builder;
+use Composer\InstalledVersions;
use Symfony\Component\Config\Definition\BaseNode;
use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException;
use Symfony\Component\Config\Definition\NodeInterface;
@@ -76,6 +77,26 @@ public function example(string|array $example): static
return $this->attribute('example', $example);
}
+ /**
+ * Sets the documentation URI, as usually put in the "@see" tag of a doc block. This
+ * can either be a URL or a file path. You can use the placeholders {package},
+ * {version:major} and {version:minor} in the URI.
+ *
+ * @return $this
+ */
+ public function docUrl(string $uri, ?string $package = null): static
+ {
+ if ($package) {
+ preg_match('/^(\d+)\.(\d+)\.(\d+)/', InstalledVersions::getVersion($package) ?? '', $m);
+ }
+
+ return $this->attribute('docUrl', strtr($uri, [
+ '{package}' => $package ?? '',
+ '{version:major}' => $m[1] ?? '',
+ '{version:minor}' => $m[2] ?? '',
+ ]));
+ }
+
/**
* Sets an attribute on the node.
*
diff --git a/src/Symfony/Component/Config/ResourceCheckerConfigCache.php b/src/Symfony/Component/Config/ResourceCheckerConfigCache.php
index 5e2cc1f3c75c0..955aee7e575ad 100644
--- a/src/Symfony/Component/Config/ResourceCheckerConfigCache.php
+++ b/src/Symfony/Component/Config/ResourceCheckerConfigCache.php
@@ -127,7 +127,7 @@ public function write(string $content, ?array $metadata = null): void
$ser = preg_replace_callback('/;O:(\d+):"/', static fn ($m) => ';O:'.(9 + $m[1]).':"Tracking\\', $ser);
$ser = preg_replace_callback('/s:(\d+):"\0[^\0]++\0/', static fn ($m) => 's:'.($m[1] - \strlen($m[0]) + 6).':"', $ser);
- $ser = unserialize($ser);
+ $ser = unserialize($ser, ['allowed_classes' => false]);
$ser = @json_encode($ser, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE) ?: [];
$ser = str_replace('"__PHP_Incomplete_Class_Name":"Tracking\\\\', '"@type":"', $ser);
$ser = \sprintf('{"resources":%s}', $ser);
diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.php
index 153af57be9b5b..5c1259c20edd8 100644
--- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.php
+++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.php
@@ -38,7 +38,13 @@ public function getConfigTreeBuilder(): TreeBuilder
->arrayPrototype()
->fixXmlConfig('option')
->children()
- ->scalarNode('dsn')->end()
+ ->scalarNode('dsn')
+ ->info(<<<'INFO'
+ The DSN to use. This is a required option.
+ The info is used to describe the DSN,
+ it can be multi-line.
+ INFO)
+ ->end()
->scalarNode('serializer')->defaultNull()->end()
->arrayNode('options')
->normalizeKeys(false)
diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/Messenger/TransportsConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/Messenger/TransportsConfig.php
index b9d8b48db3556..6a98166eccc94 100644
--- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/Messenger/TransportsConfig.php
+++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/Messenger/TransportsConfig.php
@@ -16,6 +16,9 @@ class TransportsConfig
private $_usedProperties = [];
/**
+ * The DSN to use. This is a required option.
+ * The info is used to describe the DSN,
+ * it can be multi-line.
* @default null
* @param ParamConfigurator|mixed $value
* @return $this
diff --git a/src/Symfony/Component/Config/Tests/Definition/Builder/NodeDefinitionTest.php b/src/Symfony/Component/Config/Tests/Definition/Builder/NodeDefinitionTest.php
index 68c1ddff00d91..baa4518006bb6 100644
--- a/src/Symfony/Component/Config/Tests/Definition/Builder/NodeDefinitionTest.php
+++ b/src/Symfony/Component/Config/Tests/Definition/Builder/NodeDefinitionTest.php
@@ -35,4 +35,35 @@ public function testSetPathSeparatorChangesChildren()
$parentNode->setPathSeparator('/');
}
+
+ public function testDocUrl()
+ {
+ $node = new ArrayNodeDefinition('node');
+ $node->docUrl('https://example.com/doc/{package}/{version:major}.{version:minor}', 'phpunit/phpunit');
+
+ $r = new \ReflectionObject($node);
+ $p = $r->getProperty('attributes');
+
+ $this->assertMatchesRegularExpression('~^https://example.com/doc/phpunit/phpunit/\d+\.\d+$~', $p->getValue($node)['docUrl']);
+ }
+
+ public function testDocUrlWithoutPackage()
+ {
+ $node = new ArrayNodeDefinition('node');
+ $node->docUrl('https://example.com/doc/empty{version:major}.empty{version:minor}');
+
+ $r = new \ReflectionObject($node);
+ $p = $r->getProperty('attributes');
+
+ $this->assertSame('https://example.com/doc/empty.empty', $p->getValue($node)['docUrl']);
+ }
+
+ public function testUnknownPackageThrowsException()
+ {
+ $this->expectException(\OutOfBoundsException::class);
+ $this->expectExceptionMessage('Package "phpunit/invalid" is not installed');
+
+ $node = new ArrayNodeDefinition('node');
+ $node->docUrl('https://example.com/doc/{package}/{version:major}.{version:minor}', 'phpunit/invalid');
+ }
}
diff --git a/src/Symfony/Component/Console/Application.php b/src/Symfony/Component/Console/Application.php
index 78d885d2597a9..b4539fa1eeb50 100644
--- a/src/Symfony/Component/Console/Application.php
+++ b/src/Symfony/Component/Console/Application.php
@@ -17,7 +17,6 @@
use Symfony\Component\Console\Command\HelpCommand;
use Symfony\Component\Console\Command\LazyCommand;
use Symfony\Component\Console\Command\ListCommand;
-use Symfony\Component\Console\Command\SignalableCommandInterface;
use Symfony\Component\Console\CommandLoader\CommandLoaderInterface;
use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions;
@@ -1005,8 +1004,7 @@ protected function doRunCommand(Command $command, InputInterface $input, OutputI
}
}
- $commandSignals = $command instanceof SignalableCommandInterface ? $command->getSubscribedSignals() : [];
- if ($commandSignals || $this->dispatcher && $this->signalsToDispatchEvent) {
+ if (($commandSignals = $command->getSubscribedSignals()) || $this->dispatcher && $this->signalsToDispatchEvent) {
$signalRegistry = $this->getSignalRegistry();
if (Terminal::hasSttyAvailable()) {
diff --git a/src/Symfony/Component/Console/Attribute/Argument.php b/src/Symfony/Component/Console/Attribute/Argument.php
index 099d49676e033..e6a94d2f10e4c 100644
--- a/src/Symfony/Component/Console/Attribute/Argument.php
+++ b/src/Symfony/Component/Console/Attribute/Argument.php
@@ -16,6 +16,7 @@
use Symfony\Component\Console\Exception\LogicException;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\String\UnicodeString;
#[\Attribute(\Attribute::TARGET_PARAMETER)]
class Argument
@@ -25,6 +26,7 @@ class Argument
private string|bool|int|float|array|null $default = null;
private array|\Closure $suggestedValues;
private ?int $mode = null;
+ private string $function = '';
/**
* Represents a console command definition.
@@ -34,8 +36,8 @@ class Argument
* @param array|callable(CompletionInput):list $suggestedValues The values used for input completion
*/
public function __construct(
- public string $name = '',
public string $description = '',
+ public string $name = '',
array|callable $suggestedValues = [],
) {
$this->suggestedValues = \is_callable($suggestedValues) ? $suggestedValues(...) : $suggestedValues;
@@ -51,21 +53,27 @@ public static function tryFrom(\ReflectionParameter $parameter): ?self
return null;
}
+ if (($function = $parameter->getDeclaringFunction()) instanceof \ReflectionMethod) {
+ $self->function = $function->class.'::'.$function->name;
+ } else {
+ $self->function = $function->name;
+ }
+
$type = $parameter->getType();
$name = $parameter->getName();
if (!$type instanceof \ReflectionNamedType) {
- throw new LogicException(\sprintf('The parameter "$%s" must have a named type. Untyped, Union or Intersection types are not supported for command arguments.', $name));
+ throw new LogicException(\sprintf('The parameter "$%s" of "%s()" must have a named type. Untyped, Union or Intersection types are not supported for command arguments.', $name, $self->function));
}
$parameterTypeName = $type->getName();
if (!\in_array($parameterTypeName, self::ALLOWED_TYPES, true)) {
- throw new LogicException(\sprintf('The type "%s" of parameter "$%s" is not supported as a command argument. Only "%s" types are allowed.', $parameterTypeName, $name, implode('", "', self::ALLOWED_TYPES)));
+ throw new LogicException(\sprintf('The type "%s" on parameter "$%s" of "%s()" is not supported as a command argument. Only "%s" types are allowed.', $parameterTypeName, $name, $self->function, implode('", "', self::ALLOWED_TYPES)));
}
if (!$self->name) {
- $self->name = $name;
+ $self->name = (new UnicodeString($name))->kebab();
}
$self->default = $parameter->isDefaultValueAvailable() ? $parameter->getDefaultValue() : null;
diff --git a/src/Symfony/Component/Console/Attribute/Option.php b/src/Symfony/Component/Console/Attribute/Option.php
index 02002a5ad1256..2f0256b177658 100644
--- a/src/Symfony/Component/Console/Attribute/Option.php
+++ b/src/Symfony/Component/Console/Attribute/Option.php
@@ -16,17 +16,20 @@
use Symfony\Component\Console\Exception\LogicException;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\String\UnicodeString;
#[\Attribute(\Attribute::TARGET_PARAMETER)]
class Option
{
private const ALLOWED_TYPES = ['string', 'bool', 'int', 'float', 'array'];
+ private const ALLOWED_UNION_TYPES = ['bool|string', 'bool|int', 'bool|float'];
private string|bool|int|float|array|null $default = null;
private array|\Closure $suggestedValues;
private ?int $mode = null;
private string $typeName = '';
private bool $allowNull = false;
+ private string $function = '';
/**
* Represents a console command --option definition.
@@ -37,9 +40,9 @@ class Option
* @param array|callable(CompletionInput):list $suggestedValues The values used for input completion
*/
public function __construct(
+ public string $description = '',
public string $name = '',
public array|string|null $shortcut = null,
- public string $description = '',
array|callable $suggestedValues = [],
) {
$this->suggestedValues = \is_callable($suggestedValues) ? $suggestedValues(...) : $suggestedValues;
@@ -55,40 +58,57 @@ public static function tryFrom(\ReflectionParameter $parameter): ?self
return null;
}
- $type = $parameter->getType();
+ if (($function = $parameter->getDeclaringFunction()) instanceof \ReflectionMethod) {
+ $self->function = $function->class.'::'.$function->name;
+ } else {
+ $self->function = $function->name;
+ }
+
$name = $parameter->getName();
+ $type = $parameter->getType();
+
+ if (!$parameter->isDefaultValueAvailable()) {
+ throw new LogicException(\sprintf('The option parameter "$%s" of "%s()" must declare a default value.', $name, $self->function));
+ }
+
+ if (!$self->name) {
+ $self->name = (new UnicodeString($name))->kebab();
+ }
+
+ $self->default = $parameter->getDefaultValue();
+ $self->allowNull = $parameter->allowsNull();
+
+ if ($type instanceof \ReflectionUnionType) {
+ return $self->handleUnion($type);
+ }
if (!$type instanceof \ReflectionNamedType) {
- throw new LogicException(\sprintf('The parameter "$%s" must have a named type. Untyped, Union or Intersection types are not supported for command options.', $name));
+ throw new LogicException(\sprintf('The parameter "$%s" of "%s()" must have a named type. Untyped or Intersection types are not supported for command options.', $name, $self->function));
}
$self->typeName = $type->getName();
if (!\in_array($self->typeName, self::ALLOWED_TYPES, true)) {
- throw new LogicException(\sprintf('The type "%s" of parameter "$%s" is not supported as a command option. Only "%s" types are allowed.', $self->typeName, $name, implode('", "', self::ALLOWED_TYPES)));
+ throw new LogicException(\sprintf('The type "%s" on parameter "$%s" of "%s()" is not supported as a command option. Only "%s" types are allowed.', $self->typeName, $name, $self->function, implode('", "', self::ALLOWED_TYPES)));
}
- if (!$parameter->isDefaultValueAvailable()) {
- throw new LogicException(\sprintf('The option parameter "$%s" must declare a default value.', $name));
+ if ('bool' === $self->typeName && $self->allowNull && \in_array($self->default, [true, false], true)) {
+ throw new LogicException(\sprintf('The option parameter "$%s" of "%s()" must not be nullable when it has a default boolean value.', $name, $self->function));
}
- if (!$self->name) {
- $self->name = $name;
+ if ($self->allowNull && null !== $self->default) {
+ throw new LogicException(\sprintf('The option parameter "$%s" of "%s()" must either be not-nullable or have a default of null.', $name, $self->function));
}
- $self->default = $parameter->getDefaultValue();
- $self->allowNull = $parameter->allowsNull();
-
if ('bool' === $self->typeName) {
$self->mode = InputOption::VALUE_NONE;
if (false !== $self->default) {
$self->mode |= InputOption::VALUE_NEGATABLE;
}
+ } elseif ('array' === $self->typeName) {
+ $self->mode = InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY;
} else {
- $self->mode = $self->allowNull ? InputOption::VALUE_OPTIONAL : InputOption::VALUE_REQUIRED;
- if ('array' === $self->typeName) {
- $self->mode |= InputOption::VALUE_IS_ARRAY;
- }
+ $self->mode = InputOption::VALUE_REQUIRED;
}
if (\is_array($self->suggestedValues) && !\is_callable($self->suggestedValues) && 2 === \count($self->suggestedValues) && ($instance = $parameter->getDeclaringFunction()->getClosureThis()) && $instance::class === $self->suggestedValues[0] && \is_callable([$instance, $self->suggestedValues[1]])) {
@@ -116,6 +136,14 @@ public function resolveValue(InputInterface $input): mixed
{
$value = $input->getOption($this->name);
+ if (null === $value && \in_array($this->typeName, self::ALLOWED_UNION_TYPES, true)) {
+ return true;
+ }
+
+ if ('array' === $this->typeName && $this->allowNull && [] === $value) {
+ return null;
+ }
+
if ('bool' !== $this->typeName) {
return $value;
}
@@ -126,4 +154,28 @@ public function resolveValue(InputInterface $input): mixed
return $value ?? $this->default;
}
+
+ private function handleUnion(\ReflectionUnionType $type): self
+ {
+ $types = array_map(
+ static fn(\ReflectionType $t) => $t instanceof \ReflectionNamedType ? $t->getName() : null,
+ $type->getTypes(),
+ );
+
+ sort($types);
+
+ $this->typeName = implode('|', array_filter($types));
+
+ if (!\in_array($this->typeName, self::ALLOWED_UNION_TYPES, true)) {
+ throw new LogicException(\sprintf('The union type for parameter "$%s" of "%s()" is not supported as a command option. Only "%s" types are allowed.', $this->name, $this->function, implode('", "', self::ALLOWED_UNION_TYPES)));
+ }
+
+ if (false !== $this->default) {
+ throw new LogicException(\sprintf('The option parameter "$%s" of "%s()" must have a default value of false.', $this->name, $this->function));
+ }
+
+ $this->mode = InputOption::VALUE_OPTIONAL;
+
+ return $this;
+ }
}
diff --git a/src/Symfony/Component/Console/CHANGELOG.md b/src/Symfony/Component/Console/CHANGELOG.md
index b84099a1d0e10..9f3ae3d7d2326 100644
--- a/src/Symfony/Component/Console/CHANGELOG.md
+++ b/src/Symfony/Component/Console/CHANGELOG.md
@@ -14,6 +14,7 @@ CHANGELOG
* Add support for `LockableTrait` in invokable commands
* Deprecate returning a non-integer value from a `\Closure` function set via `Command::setCode()`
* Mark `#[AsCommand]` attribute as `@final`
+ * Add support for `SignalableCommandInterface` with invokable commands
7.2
---
diff --git a/src/Symfony/Component/Console/Command/Command.php b/src/Symfony/Component/Console/Command/Command.php
index f79475d56be73..f6cd8499791f1 100644
--- a/src/Symfony/Component/Console/Command/Command.php
+++ b/src/Symfony/Component/Console/Command/Command.php
@@ -32,7 +32,7 @@
*
* @author Fabien Potencier
*/
-class Command
+class Command implements SignalableCommandInterface
{
// see https://tldp.org/LDP/abs/html/exitcodes.html
public const SUCCESS = 0;
@@ -134,7 +134,7 @@ public function __construct(?string $name = null)
$this->setHelp($attribute?->help ?? '');
}
- if (\is_callable($this)) {
+ if (\is_callable($this) && (new \ReflectionMethod($this, 'execute'))->getDeclaringClass()->name === self::class) {
$this->code = new InvokableCommand($this, $this(...));
}
@@ -674,6 +674,16 @@ public function getHelper(string $name): HelperInterface
return $this->helperSet->get($name);
}
+ public function getSubscribedSignals(): array
+ {
+ return $this->code?->getSubscribedSignals() ?? [];
+ }
+
+ public function handleSignal(int $signal, int|false $previousExitCode = 0): int|false
+ {
+ return $this->code?->handleSignal($signal, $previousExitCode) ?? false;
+ }
+
/**
* Validates a command name.
*
diff --git a/src/Symfony/Component/Console/Command/InvokableCommand.php b/src/Symfony/Component/Console/Command/InvokableCommand.php
index 329d8b253cfb8..72ff407c81fdf 100644
--- a/src/Symfony/Component/Console/Command/InvokableCommand.php
+++ b/src/Symfony/Component/Console/Command/InvokableCommand.php
@@ -28,9 +28,10 @@
*
* @internal
*/
-class InvokableCommand
+class InvokableCommand implements SignalableCommandInterface
{
private readonly \Closure $code;
+ private readonly ?SignalableCommandInterface $signalableCommand;
private readonly \ReflectionFunction $reflection;
private bool $triggerDeprecations = false;
@@ -39,6 +40,7 @@ public function __construct(
callable $code,
) {
$this->code = $this->getClosure($code);
+ $this->signalableCommand = $code instanceof SignalableCommandInterface ? $code : null;
$this->reflection = new \ReflectionFunction($this->code);
}
@@ -142,4 +144,14 @@ private function getParameters(InputInterface $input, OutputInterface $output):
return $parameters ?: [$input, $output];
}
+
+ public function getSubscribedSignals(): array
+ {
+ return $this->signalableCommand?->getSubscribedSignals() ?? [];
+ }
+
+ public function handleSignal(int $signal, int|false $previousExitCode = 0): int|false
+ {
+ return $this->signalableCommand?->handleSignal($signal, $previousExitCode) ?? false;
+ }
}
diff --git a/src/Symfony/Component/Console/Command/TraceableCommand.php b/src/Symfony/Component/Console/Command/TraceableCommand.php
index 659798e651c46..315f385de9aa2 100644
--- a/src/Symfony/Component/Console/Command/TraceableCommand.php
+++ b/src/Symfony/Component/Console/Command/TraceableCommand.php
@@ -27,7 +27,7 @@
*
* @author Jules Pietri
*/
-final class TraceableCommand extends Command implements SignalableCommandInterface
+final class TraceableCommand extends Command
{
public readonly Command $command;
public int $exitCode;
@@ -89,15 +89,11 @@ public function __call(string $name, array $arguments): mixed
public function getSubscribedSignals(): array
{
- return $this->command instanceof SignalableCommandInterface ? $this->command->getSubscribedSignals() : [];
+ return $this->command->getSubscribedSignals();
}
public function handleSignal(int $signal, int|false $previousExitCode = 0): int|false
{
- if (!$this->command instanceof SignalableCommandInterface) {
- return false;
- }
-
$event = $this->stopwatch->start($this->getName().'.handle_signal');
$exit = $this->command->handleSignal($signal, $previousExitCode);
diff --git a/src/Symfony/Component/Console/SignalRegistry/SignalMap.php b/src/Symfony/Component/Console/SignalRegistry/SignalMap.php
index de419bda79821..2f9aa67c156db 100644
--- a/src/Symfony/Component/Console/SignalRegistry/SignalMap.php
+++ b/src/Symfony/Component/Console/SignalRegistry/SignalMap.php
@@ -27,7 +27,7 @@ public static function getSignalName(int $signal): ?string
if (!isset(self::$map)) {
$r = new \ReflectionExtension('pcntl');
$c = $r->getConstants();
- $map = array_filter($c, fn ($k) => str_starts_with($k, 'SIG') && !str_starts_with($k, 'SIG_'), \ARRAY_FILTER_USE_KEY);
+ $map = array_filter($c, fn ($k) => str_starts_with($k, 'SIG') && !str_starts_with($k, 'SIG_') && 'SIGBABY' !== $k, \ARRAY_FILTER_USE_KEY);
self::$map = array_flip($map);
}
diff --git a/src/Symfony/Component/Console/Tests/ApplicationTest.php b/src/Symfony/Component/Console/Tests/ApplicationTest.php
index c5c796517c17a..268f8ba501a9e 100644
--- a/src/Symfony/Component/Console/Tests/ApplicationTest.php
+++ b/src/Symfony/Component/Console/Tests/ApplicationTest.php
@@ -2255,6 +2255,41 @@ public function testSignalableRestoresStty()
$this->assertSame($previousSttyMode, $sttyMode);
}
+ /**
+ * @requires extension pcntl
+ */
+ public function testSignalableInvokableCommand()
+ {
+ $command = new Command();
+ $command->setName('signal-invokable');
+ $command->setCode($invokable = new class implements SignalableCommandInterface {
+ use SignalableInvokableCommandTrait;
+ });
+
+ $application = $this->createSignalableApplication($command, null);
+ $application->setSignalsToDispatchEvent(\SIGUSR1);
+
+ $this->assertSame(1, $application->run(new ArrayInput(['signal-invokable'])));
+ $this->assertTrue($invokable->signaled);
+ }
+
+ /**
+ * @requires extension pcntl
+ */
+ public function testSignalableInvokableCommandThatExtendsBaseCommand()
+ {
+ $command = new class extends Command implements SignalableCommandInterface {
+ use SignalableInvokableCommandTrait;
+ };
+ $command->setName('signal-invokable');
+
+ $application = $this->createSignalableApplication($command, null);
+ $application->setSignalsToDispatchEvent(\SIGUSR1);
+
+ $this->assertSame(1, $application->run(new ArrayInput(['signal-invokable'])));
+ $this->assertTrue($command->signaled);
+ }
+
/**
* @requires extension pcntl
*/
@@ -2514,7 +2549,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
}
#[AsCommand(name: 'signal')]
-class SignableCommand extends BaseSignableCommand implements SignalableCommandInterface
+class SignableCommand extends BaseSignableCommand
{
public function getSubscribedSignals(): array
{
@@ -2531,7 +2566,7 @@ public function handleSignal(int $signal, int|false $previousExitCode = 0): int|
}
#[AsCommand(name: 'signal')]
-class TerminatableCommand extends BaseSignableCommand implements SignalableCommandInterface
+class TerminatableCommand extends BaseSignableCommand
{
public function getSubscribedSignals(): array
{
@@ -2548,7 +2583,7 @@ public function handleSignal(int $signal, int|false $previousExitCode = 0): int|
}
#[AsCommand(name: 'signal')]
-class TerminatableWithEventCommand extends Command implements SignalableCommandInterface, EventSubscriberInterface
+class TerminatableWithEventCommand extends Command implements EventSubscriberInterface
{
private bool $shouldContinue = true;
private OutputInterface $output;
@@ -2615,8 +2650,39 @@ public static function getSubscribedEvents(): array
}
}
+trait SignalableInvokableCommandTrait
+{
+ public bool $signaled = false;
+
+ public function __invoke(): int
+ {
+ posix_kill(posix_getpid(), \SIGUSR1);
+
+ for ($i = 0; $i < 1000; ++$i) {
+ usleep(100);
+ if ($this->signaled) {
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+
+ public function getSubscribedSignals(): array
+ {
+ return SignalRegistry::isSupported() ? [\SIGUSR1] : [];
+ }
+
+ public function handleSignal(int $signal, int|false $previousExitCode = 0): int|false
+ {
+ $this->signaled = true;
+
+ return false;
+ }
+}
+
#[AsCommand(name: 'alarm')]
-class AlarmableCommand extends BaseSignableCommand implements SignalableCommandInterface
+class AlarmableCommand extends BaseSignableCommand
{
public function __construct(private int $alarmInterval)
{
diff --git a/src/Symfony/Component/Console/Tests/Command/CommandTest.php b/src/Symfony/Component/Console/Tests/Command/CommandTest.php
index 64d32b2cb6e76..0db3572fc3476 100644
--- a/src/Symfony/Component/Console/Tests/Command/CommandTest.php
+++ b/src/Symfony/Component/Console/Tests/Command/CommandTest.php
@@ -12,7 +12,7 @@
namespace Symfony\Component\Console\Tests\Command;
use PHPUnit\Framework\TestCase;
-use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
+use Symfony\Bridge\PhpUnit\ExpectUserDeprecationMessageTrait;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
@@ -30,7 +30,7 @@
class CommandTest extends TestCase
{
- use ExpectDeprecationTrait;
+ use ExpectUserDeprecationMessageTrait;
protected static string $fixturesPath;
@@ -453,8 +453,8 @@ public function testCommandAttribute()
*/
public function testCommandAttributeWithDeprecatedMethods()
{
- $this->expectDeprecation('Since symfony/console 7.3: Method "Symfony\Component\Console\Command\Command::getDefaultName()" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
- $this->expectDeprecation('Since symfony/console 7.3: Method "Symfony\Component\Console\Command\Command::getDefaultDescription()" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
+ $this->expectUserDeprecationMessage('Since symfony/console 7.3: Method "Symfony\Component\Console\Command\Command::getDefaultName()" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
+ $this->expectUserDeprecationMessage('Since symfony/console 7.3: Method "Symfony\Component\Console\Command\Command::getDefaultDescription()" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
$this->assertSame('|foo|f', Php8Command::getDefaultName());
$this->assertSame('desc', Php8Command::getDefaultDescription());
@@ -473,8 +473,8 @@ public function testAttributeOverridesProperty()
*/
public function testAttributeOverridesPropertyWithDeprecatedMethods()
{
- $this->expectDeprecation('Since symfony/console 7.3: Method "Symfony\Component\Console\Command\Command::getDefaultName()" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
- $this->expectDeprecation('Since symfony/console 7.3: Method "Symfony\Component\Console\Command\Command::getDefaultDescription()" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
+ $this->expectUserDeprecationMessage('Since symfony/console 7.3: Method "Symfony\Component\Console\Command\Command::getDefaultName()" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
+ $this->expectUserDeprecationMessage('Since symfony/console 7.3: Method "Symfony\Component\Console\Command\Command::getDefaultDescription()" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
$this->assertSame('my:command', MyAnnotatedCommand::getDefaultName());
$this->assertSame('This is a command I wrote all by myself', MyAnnotatedCommand::getDefaultDescription());
@@ -499,8 +499,8 @@ public function testDefaultCommand()
*/
public function testDeprecatedMethods()
{
- $this->expectDeprecation('Since symfony/console 7.3: Overriding "Command::getDefaultName()" in "Symfony\Component\Console\Tests\Command\FooCommand" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
- $this->expectDeprecation('Since symfony/console 7.3: Overriding "Command::getDefaultDescription()" in "Symfony\Component\Console\Tests\Command\FooCommand" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
+ $this->expectUserDeprecationMessage('Since symfony/console 7.3: Overriding "Command::getDefaultName()" in "Symfony\Component\Console\Tests\Command\FooCommand" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
+ $this->expectUserDeprecationMessage('Since symfony/console 7.3: Overriding "Command::getDefaultDescription()" in "Symfony\Component\Console\Tests\Command\FooCommand" is deprecated and will be removed in Symfony 8.0, use the #[AsCommand] attribute instead.');
new FooCommand();
}
@@ -510,7 +510,7 @@ public function testDeprecatedMethods()
*/
public function testDeprecatedNonIntegerReturnTypeFromClosureCode()
{
- $this->expectDeprecation('Since symfony/console 7.3: Returning a non-integer value from the command "foo" is deprecated and will throw an exception in Symfony 8.0.');
+ $this->expectUserDeprecationMessage('Since symfony/console 7.3: Returning a non-integer value from the command "foo" is deprecated and will throw an exception in Symfony 8.0.');
$command = new Command('foo');
$command->setCode(function () {});
diff --git a/src/Symfony/Component/Console/Tests/Command/InvokableCommandTest.php b/src/Symfony/Component/Console/Tests/Command/InvokableCommandTest.php
index b0a337fb0a64b..5ab7951e7f575 100644
--- a/src/Symfony/Component/Console/Tests/Command/InvokableCommandTest.php
+++ b/src/Symfony/Component/Console/Tests/Command/InvokableCommandTest.php
@@ -21,7 +21,9 @@
use Symfony\Component\Console\Exception\InvalidOptionException;
use Symfony\Component\Console\Exception\LogicException;
use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\NullOutput;
+use Symfony\Component\Console\Output\OutputInterface;
class InvokableCommandTest extends TestCase
{
@@ -29,7 +31,7 @@ public function testCommandInputArgumentDefinition()
{
$command = new Command('foo');
$command->setCode(function (
- #[Argument(name: 'first-name')] string $name,
+ #[Argument(name: 'very-first-name')] string $name,
#[Argument] ?string $firstName,
#[Argument] string $lastName = '',
#[Argument(description: 'Short argument description')] string $bio = '',
@@ -38,17 +40,17 @@ public function testCommandInputArgumentDefinition()
return 0;
});
- $nameInputArgument = $command->getDefinition()->getArgument('first-name');
- self::assertSame('first-name', $nameInputArgument->getName());
+ $nameInputArgument = $command->getDefinition()->getArgument('very-first-name');
+ self::assertSame('very-first-name', $nameInputArgument->getName());
self::assertTrue($nameInputArgument->isRequired());
- $lastNameInputArgument = $command->getDefinition()->getArgument('firstName');
- self::assertSame('firstName', $lastNameInputArgument->getName());
+ $lastNameInputArgument = $command->getDefinition()->getArgument('first-name');
+ self::assertSame('first-name', $lastNameInputArgument->getName());
self::assertFalse($lastNameInputArgument->isRequired());
self::assertNull($lastNameInputArgument->getDefault());
- $lastNameInputArgument = $command->getDefinition()->getArgument('lastName');
- self::assertSame('lastName', $lastNameInputArgument->getName());
+ $lastNameInputArgument = $command->getDefinition()->getArgument('last-name');
+ self::assertSame('last-name', $lastNameInputArgument->getName());
self::assertFalse($lastNameInputArgument->isRequired());
self::assertSame('', $lastNameInputArgument->getDefault());
@@ -77,6 +79,7 @@ public function testCommandInputOptionDefinition()
#[Option(shortcut: 'v')] bool $verbose = false,
#[Option(description: 'User groups')] array $groups = [],
#[Option(suggestedValues: [self::class, 'getSuggestedRoles'])] array $roles = ['ROLE_USER'],
+ #[Option] string|bool $opt = false,
): int {
return 0;
});
@@ -84,7 +87,8 @@ public function testCommandInputOptionDefinition()
$timeoutInputOption = $command->getDefinition()->getOption('idle');
self::assertSame('idle', $timeoutInputOption->getName());
self::assertNull($timeoutInputOption->getShortcut());
- self::assertTrue($timeoutInputOption->isValueOptional());
+ self::assertTrue($timeoutInputOption->isValueRequired());
+ self::assertFalse($timeoutInputOption->isValueOptional());
self::assertFalse($timeoutInputOption->isNegatable());
self::assertNull($timeoutInputOption->getDefault());
@@ -118,6 +122,14 @@ public function testCommandInputOptionDefinition()
self::assertTrue($rolesInputOption->hasCompletion());
$rolesInputOption->complete(new CompletionInput(), $suggestions = new CompletionSuggestions());
self::assertSame(['ROLE_ADMIN', 'ROLE_USER'], array_map(static fn (Suggestion $s) => $s->getValue(), $suggestions->getValueSuggestions()));
+
+ $optInputOption = $command->getDefinition()->getOption('opt');
+ self::assertSame('opt', $optInputOption->getName());
+ self::assertNull($optInputOption->getShortcut());
+ self::assertFalse($optInputOption->isValueRequired());
+ self::assertTrue($optInputOption->isValueOptional());
+ self::assertFalse($optInputOption->isNegatable());
+ self::assertFalse($optInputOption->getDefault());
}
public function testInvalidArgumentType()
@@ -126,7 +138,6 @@ public function testInvalidArgumentType()
$command->setCode(function (#[Argument] object $any) {});
$this->expectException(LogicException::class);
- $this->expectExceptionMessage('The type "object" of parameter "$any" is not supported as a command argument. Only "string", "bool", "int", "float", "array" types are allowed.');
$command->getDefinition();
}
@@ -134,14 +145,52 @@ public function testInvalidArgumentType()
public function testInvalidOptionType()
{
$command = new Command('foo');
- $command->setCode(function (#[Option] object $any) {});
+ $command->setCode(function (#[Option] ?object $any = null) {});
$this->expectException(LogicException::class);
- $this->expectExceptionMessage('The type "object" of parameter "$any" is not supported as a command option. Only "string", "bool", "int", "float", "array" types are allowed.');
$command->getDefinition();
}
+ public function testExecuteHasPriorityOverInvokeMethod()
+ {
+ $command = new class extends Command {
+ public string $called;
+ protected function execute(InputInterface $input, OutputInterface $output): int
+ {
+ $this->called = __FUNCTION__;
+
+ return 0;
+ }
+
+ public function __invoke(): int
+ {
+ $this->called = __FUNCTION__;
+
+ return 0;
+ }
+ };
+
+ $command->run(new ArrayInput([]), new NullOutput());
+ $this->assertSame('execute', $command->called);
+ }
+
+ public function testCallInvokeMethodWhenExtendingCommandClass()
+ {
+ $command = new class extends Command {
+ public string $called;
+ public function __invoke(): int
+ {
+ $this->called = __FUNCTION__;
+
+ return 0;
+ }
+ };
+
+ $command->run(new ArrayInput([]), new NullOutput());
+ $this->assertSame('__invoke', $command->called);
+ }
+
public function testInvalidReturnType()
{
$command = new Command('foo');
@@ -220,13 +269,31 @@ public function testNonBinaryInputOptions(array $parameters, array $expected)
{
$command = new Command('foo');
$command->setCode(function (
- #[Option] ?string $a = null,
- #[Option] ?string $b = 'b',
- #[Option] ?array $c = [],
+ #[Option] string $a = '',
+ #[Option] array $b = [],
+ #[Option] array $c = ['a', 'b'],
+ #[Option] bool|string $d = false,
+ #[Option] ?string $e = null,
+ #[Option] ?array $f = null,
+ #[Option] int $g = 0,
+ #[Option] ?int $h = null,
+ #[Option] float $i = 0.0,
+ #[Option] ?float $j = null,
+ #[Option] bool|int $k = false,
+ #[Option] bool|float $l = false,
) use ($expected): int {
$this->assertSame($expected[0], $a);
$this->assertSame($expected[1], $b);
$this->assertSame($expected[2], $c);
+ $this->assertSame($expected[3], $d);
+ $this->assertSame($expected[4], $e);
+ $this->assertSame($expected[5], $f);
+ $this->assertSame($expected[6], $g);
+ $this->assertSame($expected[7], $h);
+ $this->assertSame($expected[8], $i);
+ $this->assertSame($expected[9], $j);
+ $this->assertSame($expected[10], $k);
+ $this->assertSame($expected[11], $l);
return 0;
});
@@ -236,22 +303,64 @@ public function testNonBinaryInputOptions(array $parameters, array $expected)
public static function provideNonBinaryInputOptions(): \Generator
{
- yield 'defaults' => [[], [null, 'b', []]];
- yield 'with-value' => [['--a' => 'x', '--b' => 'y', '--c' => ['z']], ['x', 'y', ['z']]];
- yield 'without-value' => [['--a' => null, '--b' => null, '--c' => null], [null, null, null]];
+ yield 'defaults' => [
+ [],
+ ['', [], ['a', 'b'], false, null, null, 0, null, 0.0, null, false, false],
+ ];
+ yield 'with-value' => [
+ ['--a' => 'x', '--b' => ['z'], '--c' => ['c', 'd'], '--d' => 'v', '--e' => 'w', '--f' => ['q'], '--g' => 1, '--h' => 2, '--i' => 3.1, '--j' => 4.2, '--k' => 5, '--l' => 6.3],
+ ['x', ['z'], ['c', 'd'], 'v', 'w', ['q'], 1, 2, 3.1, 4.2, 5, 6.3],
+ ];
+ yield 'without-value' => [
+ ['--d' => null, '--k' => null, '--l' => null],
+ ['', [], ['a', 'b'], true, null, null, 0, null, 0.0, null, true, true],
+ ];
}
- public function testInvalidOptionDefinition()
+ /**
+ * @dataProvider provideInvalidOptionDefinitions
+ */
+ public function testInvalidOptionDefinition(callable $code)
{
$command = new Command('foo');
- $command->setCode(function (#[Option] string $a) {});
+ $command->setCode($code);
$this->expectException(LogicException::class);
- $this->expectExceptionMessage('The option parameter "$a" must declare a default value.');
$command->getDefinition();
}
+ public static function provideInvalidOptionDefinitions(): \Generator
+ {
+ yield 'no-default' => [
+ function (#[Option] string $a) {}
+ ];
+ yield 'nullable-bool-default-true' => [
+ function (#[Option] ?bool $a = true) {}
+ ];
+ yield 'nullable-bool-default-false' => [
+ function (#[Option] ?bool $a = false) {}
+ ];
+ yield 'invalid-union-type' => [
+ function (#[Option] array|bool $a = false) {}
+ ];
+ yield 'union-type-cannot-allow-null' => [
+ function (#[Option] string|bool|null $a = null) {},
+ ];
+ yield 'union-type-default-true' => [
+ function (#[Option] string|bool $a = true) {},
+ ];
+ yield 'union-type-default-string' => [
+ function (#[Option] string|bool $a = 'foo') {},
+ ];
+ yield 'nullable-string-not-null-default' => [
+ function (#[Option] ?string $a = 'foo') {},
+ ];
+ yield 'nullable-array-not-null-default' => [
+ function (#[Option] ?array $a = []) {},
+ ];
+ }
+
public function testInvalidRequiredValueOptionEvenWithDefault()
{
$command = new Command('foo');
diff --git a/src/Symfony/Component/Console/Tests/DependencyInjection/AddConsoleCommandPassTest.php b/src/Symfony/Component/Console/Tests/DependencyInjection/AddConsoleCommandPassTest.php
index 8a0c1e6b2bbf5..9ac660100ea0d 100644
--- a/src/Symfony/Component/Console/Tests/DependencyInjection/AddConsoleCommandPassTest.php
+++ b/src/Symfony/Component/Console/Tests/DependencyInjection/AddConsoleCommandPassTest.php
@@ -15,6 +15,7 @@
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Command\LazyCommand;
+use Symfony\Component\Console\Command\SignalableCommandInterface;
use Symfony\Component\Console\CommandLoader\ContainerCommandLoader;
use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass;
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
@@ -325,6 +326,27 @@ public function testProcessInvokableCommand()
self::assertSame('The command description', $command->getDescription());
self::assertSame('The %command.name% command help content.', $command->getHelp());
}
+
+ public function testProcessInvokableSignalableCommand()
+ {
+ $container = new ContainerBuilder();
+ $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
+
+ $definition = new Definition(InvokableSignalableCommand::class);
+ $definition->addTag('console.command', [
+ 'command' => 'invokable-signalable',
+ 'description' => 'The command description',
+ 'help' => 'The %command.name% command help content.',
+ ]);
+ $container->setDefinition('invokable_signalable_command', $definition);
+
+ $container->compile();
+ $command = $container->get('console.command_loader')->get('invokable-signalable');
+
+ self::assertTrue($container->has('invokable_signalable_command.command'));
+ self::assertSame('The command description', $command->getDescription());
+ self::assertSame('The %command.name% command help content.', $command->getHelp());
+ }
}
class MyCommand extends Command
@@ -361,3 +383,21 @@ public function __invoke(): void
{
}
}
+
+#[AsCommand(name: 'invokable-signalable', description: 'Just testing', help: 'The %command.name% help content.')]
+class InvokableSignalableCommand implements SignalableCommandInterface
+{
+ public function __invoke(): void
+ {
+ }
+
+ public function getSubscribedSignals(): array
+ {
+ return [];
+ }
+
+ public function handleSignal(int $signal, false|int $previousExitCode = 0): int|false
+ {
+ return false;
+ }
+}
diff --git a/src/Symfony/Component/Console/Tests/Fixtures/application_signalable.php b/src/Symfony/Component/Console/Tests/Fixtures/application_signalable.php
index c737ba1bf79c7..cc1bae6acdf7f 100644
--- a/src/Symfony/Component/Console/Tests/Fixtures/application_signalable.php
+++ b/src/Symfony/Component/Console/Tests/Fixtures/application_signalable.php
@@ -1,6 +1,5 @@
assertSame($expected, SignalMap::getSignalName($signal));
+ $this->assertSame('SIGINT', SignalMap::getSignalName(\SIGINT));
+ $this->assertSame('SIGKILL', SignalMap::getSignalName(\SIGKILL));
+ $this->assertSame('SIGTERM', SignalMap::getSignalName(\SIGTERM));
+ $this->assertSame('SIGSYS', SignalMap::getSignalName(\SIGSYS));
}
public function testSignalDoesNotExist()
diff --git a/src/Symfony/Component/Console/Tests/phpt/alarm/command_exit.phpt b/src/Symfony/Component/Console/Tests/phpt/alarm/command_exit.phpt
index d3015ad9dbcf6..c2cf3edc7d1c0 100644
--- a/src/Symfony/Component/Console/Tests/phpt/alarm/command_exit.phpt
+++ b/src/Symfony/Component/Console/Tests/phpt/alarm/command_exit.phpt
@@ -7,7 +7,6 @@ Test command that exits
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
-use Symfony\Component\Console\Command\SignalableCommandInterface;
use Symfony\Component\Console\Helper\QuestionHelper;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@@ -19,7 +18,7 @@ while (!file_exists($vendor.'/vendor')) {
}
require $vendor.'/vendor/autoload.php';
-class MyCommand extends Command implements SignalableCommandInterface
+class MyCommand extends Command
{
protected function initialize(InputInterface $input, OutputInterface $output): void
{
diff --git a/src/Symfony/Component/Console/Tests/phpt/signal/command_exit.phpt b/src/Symfony/Component/Console/Tests/phpt/signal/command_exit.phpt
index 379476189d4b4..e14f80c47afee 100644
--- a/src/Symfony/Component/Console/Tests/phpt/signal/command_exit.phpt
+++ b/src/Symfony/Component/Console/Tests/phpt/signal/command_exit.phpt
@@ -7,7 +7,6 @@ Test command that exits
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
-use Symfony\Component\Console\Command\SignalableCommandInterface;
use Symfony\Component\Console\Helper\QuestionHelper;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@@ -19,7 +18,7 @@ while (!file_exists($vendor.'/vendor')) {
}
require $vendor.'/vendor/autoload.php';
-class MyCommand extends Command implements SignalableCommandInterface
+class MyCommand extends Command
{
protected function execute(InputInterface $input, OutputInterface $output): int
{
diff --git a/src/Symfony/Component/Console/composer.json b/src/Symfony/Component/Console/composer.json
index 6247ee94e9a1d..65d69913aa218 100644
--- a/src/Symfony/Component/Console/composer.json
+++ b/src/Symfony/Component/Console/composer.json
@@ -20,7 +20,7 @@
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^6.4|^7.0"
+ "symfony/string": "^7.2"
},
"require-dev": {
"symfony/config": "^6.4|^7.0",
@@ -43,8 +43,7 @@
"symfony/dotenv": "<6.4",
"symfony/event-dispatcher": "<6.4",
"symfony/lock": "<6.4",
- "symfony/process": "<6.4",
- "symfony/runtime": "<7.3"
+ "symfony/process": "<6.4"
},
"autoload": {
"psr-4": { "Symfony\\Component\\Console\\": "" },
diff --git a/src/Symfony/Component/DependencyInjection/Attribute/AsAlias.php b/src/Symfony/Component/DependencyInjection/Attribute/AsAlias.php
index 2f03e5fcdf4e2..0839afa48ff44 100644
--- a/src/Symfony/Component/DependencyInjection/Attribute/AsAlias.php
+++ b/src/Symfony/Component/DependencyInjection/Attribute/AsAlias.php
@@ -20,12 +20,20 @@
final class AsAlias
{
/**
- * @param string|null $id The id of the alias
- * @param bool $public Whether to declare the alias public
+ * @var list
+ */
+ public array $when = [];
+
+ /**
+ * @param string|null $id The id of the alias
+ * @param bool $public Whether to declare the alias public
+ * @param string|list $when The environments under which the class will be registered as a service (i.e. "dev", "test", "prod")
*/
public function __construct(
public ?string $id = null,
public bool $public = false,
+ string|array $when = [],
) {
+ $this->when = (array) $when;
}
}
diff --git a/src/Symfony/Component/DependencyInjection/Attribute/AsTaggedItem.php b/src/Symfony/Component/DependencyInjection/Attribute/AsTaggedItem.php
index cc3306c739638..de751213acad5 100644
--- a/src/Symfony/Component/DependencyInjection/Attribute/AsTaggedItem.php
+++ b/src/Symfony/Component/DependencyInjection/Attribute/AsTaggedItem.php
@@ -20,8 +20,8 @@
class AsTaggedItem
{
/**
- * @param string|null $index The property or method to use to index the item in the locator
- * @param int|null $priority The priority of the item; the higher the number, the earlier the tagged service will be located in the locator
+ * @param string|null $index The property or method to use to index the item in the iterator/locator
+ * @param int|null $priority The priority of the item; the higher the number, the earlier the tagged service will be located in the iterator/locator
*/
public function __construct(
public ?string $index = null,
diff --git a/src/Symfony/Component/DependencyInjection/CHANGELOG.md b/src/Symfony/Component/DependencyInjection/CHANGELOG.md
index 07521bc863e42..df3486a9dc867 100644
--- a/src/Symfony/Component/DependencyInjection/CHANGELOG.md
+++ b/src/Symfony/Component/DependencyInjection/CHANGELOG.md
@@ -11,6 +11,7 @@ CHANGELOG
for auto-configuration of classes excluded from the service container
* Accept multiple auto-configuration callbacks for the same attribute class
* Leverage native lazy objects when possible for lazy services
+ * Add `when` argument to `#[AsAlias]`
7.2
---
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/DefinitionErrorExceptionPass.php b/src/Symfony/Component/DependencyInjection/Compiler/DefinitionErrorExceptionPass.php
index 26ab135b1a99c..2d6ad689443e8 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/DefinitionErrorExceptionPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/DefinitionErrorExceptionPass.php
@@ -62,7 +62,10 @@ protected function processValue(mixed $value, bool $isRoot = false): mixed
}
if ($value instanceof Reference && $this->currentId !== $targetId = (string) $value) {
- if (ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE === $value->getInvalidBehavior()) {
+ if (
+ ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE === $value->getInvalidBehavior()
+ || ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE === $value->getInvalidBehavior()
+ ) {
$this->sourceReferences[$targetId][$this->currentId] ??= true;
} else {
$this->sourceReferences[$targetId][$this->currentId] = false;
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/PriorityTaggedServiceTrait.php b/src/Symfony/Component/DependencyInjection/Compiler/PriorityTaggedServiceTrait.php
index 4befef860a66e..8c6b5b582770d 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/PriorityTaggedServiceTrait.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/PriorityTaggedServiceTrait.php
@@ -88,8 +88,7 @@ private function findAndSortTaggedServices(string|TaggedIteratorArgument $tagNam
if (null === $index && null === $defaultIndex && $defaultPriorityMethod && $reflector) {
$defaultIndex = PriorityTaggedServiceUtil::getDefault($serviceId, $reflector, $defaultIndexMethod ?? 'getDefaultName', $tagName, $indexAttribute, $checkTaggedItem);
}
- $decorated = $definition->getTag('container.decorator')[0]['id'] ?? null;
- $index = $index ?? $defaultIndex ?? $defaultIndex = $decorated ?? $serviceId;
+ $index ??= $defaultIndex ??= $definition->getTag('container.decorator')[0]['id'] ?? $serviceId;
$services[] = [$priority, ++$i, $index, $serviceId, $class];
}
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/RegisterServiceSubscribersPass.php b/src/Symfony/Component/DependencyInjection/Compiler/RegisterServiceSubscribersPass.php
index 87470c39894e4..89b822bc53b44 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/RegisterServiceSubscribersPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/RegisterServiceSubscribersPass.php
@@ -20,6 +20,7 @@
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\TypedReference;
use Symfony\Contracts\Service\Attribute\SubscribedService;
+use Symfony\Contracts\Service\ServiceCollectionInterface;
use Symfony\Contracts\Service\ServiceProviderInterface;
use Symfony\Contracts\Service\ServiceSubscriberInterface;
@@ -134,6 +135,7 @@ protected function processValue(mixed $value, bool $isRoot = false): mixed
$value->setBindings([
PsrContainerInterface::class => new BoundArgument($locatorRef, false),
ServiceProviderInterface::class => new BoundArgument($locatorRef, false),
+ ServiceCollectionInterface::class => new BoundArgument($locatorRef, false),
] + $value->getBindings());
return parent::processValue($value);
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php
index 90d4569c42bc4..52dc56c0f371b 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php
@@ -112,8 +112,8 @@ private function processDefinition(ContainerBuilder $container, string $id, Defi
$definition = substr_replace($definition, '53', 2, 2);
$definition = substr_replace($definition, 'Child', 44, 0);
}
- /** @var ChildDefinition $definition */
$definition = unserialize($definition);
+ /** @var ChildDefinition $definition */
$definition->setParent($parent);
if (null !== $shared && !isset($definition->getChanges()['shared'])) {
@@ -149,6 +149,11 @@ private function processDefinition(ContainerBuilder $container, string $id, Defi
->setAbstract(true);
}
+ if ($definition->isSynthetic()) {
+ // Ignore container.excluded tag on synthetic services
+ $definition->clearTag('container.excluded');
+ }
+
return $definition;
}
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ServiceLocatorTagPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ServiceLocatorTagPass.php
index 81c14ac5cc4d0..eedc0f484243c 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/ServiceLocatorTagPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/ServiceLocatorTagPass.php
@@ -54,17 +54,41 @@ protected function processValue(mixed $value, bool $isRoot = false): mixed
$value->setClass(ServiceLocator::class);
}
- $services = $value->getArguments()[0] ?? null;
+ $values = $value->getArguments()[0] ?? null;
+ $services = [];
- if ($services instanceof TaggedIteratorArgument) {
- $services = $this->findAndSortTaggedServices($services, $this->container);
- }
-
- if (!\is_array($services)) {
+ if ($values instanceof TaggedIteratorArgument) {
+ foreach ($this->findAndSortTaggedServices($values, $this->container) as $k => $v) {
+ $services[$k] = new ServiceClosureArgument($v);
+ }
+ } elseif (!\is_array($values)) {
throw new InvalidArgumentException(\sprintf('Invalid definition for service "%s": an array of references is expected as first argument when the "container.service_locator" tag is set.', $this->currentId));
+ } else {
+ $i = 0;
+
+ foreach ($values as $k => $v) {
+ if ($v instanceof ServiceClosureArgument) {
+ $services[$k] = $v;
+ continue;
+ }
+
+ if ($i === $k) {
+ if ($v instanceof Reference) {
+ $k = (string) $v;
+ }
+ ++$i;
+ } elseif (\is_int($k)) {
+ $i = null;
+ }
+
+ $services[$k] = new ServiceClosureArgument($v);
+ }
+ if (\count($services) === $i) {
+ ksort($services);
+ }
}
- $value->setArgument(0, self::map($services));
+ $value->setArgument(0, $services);
$id = '.service_locator.'.ContainerBuilder::hash($value);
@@ -83,8 +107,12 @@ protected function processValue(mixed $value, bool $isRoot = false): mixed
public static function register(ContainerBuilder $container, array $map, ?string $callerId = null): Reference
{
+ foreach ($map as $k => $v) {
+ $map[$k] = new ServiceClosureArgument($v);
+ }
+
$locator = (new Definition(ServiceLocator::class))
- ->addArgument(self::map($map))
+ ->addArgument($map)
->addTag('container.service_locator');
if (null !== $callerId && $container->hasDefinition($callerId)) {
@@ -109,29 +137,4 @@ public static function register(ContainerBuilder $container, array $map, ?string
return new Reference($id);
}
-
- public static function map(array $services): array
- {
- $i = 0;
-
- foreach ($services as $k => $v) {
- if ($v instanceof ServiceClosureArgument) {
- continue;
- }
-
- if ($i === $k) {
- if ($v instanceof Reference) {
- unset($services[$k]);
- $k = (string) $v;
- }
- ++$i;
- } elseif (\is_int($k)) {
- $i = null;
- }
-
- $services[$k] = new ServiceClosureArgument($v);
- }
-
- return $services;
- }
}
diff --git a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php
index 47202cf7d9e9a..0389003d20856 100644
--- a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php
+++ b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php
@@ -790,10 +790,11 @@ public function parameterCannotBeEmpty(string $name, string $message): void
* * The parameter bag is frozen;
* * Extension loading is disabled.
*
- * @param bool $resolveEnvPlaceholders Whether %env()% parameters should be resolved using the current
- * env vars or be replaced by uniquely identifiable placeholders.
- * Set to "true" when you want to use the current ContainerBuilder
- * directly, keep to "false" when the container is dumped instead.
+ * @param bool $resolveEnvPlaceholders Whether %env()% parameters should be resolved at build time using
+ * the current env var values (true), or be resolved at runtime based
+ * on the environment (false). In general, this should be set to "true"
+ * when you want to use the current ContainerBuilder directly, and to
+ * "false" when the container is dumped instead.
*/
public function compile(bool $resolveEnvPlaceholders = false): void
{
diff --git a/src/Symfony/Component/DependencyInjection/ContainerInterface.php b/src/Symfony/Component/DependencyInjection/ContainerInterface.php
index 39fd080c336c3..6d6f6d3bf0bfe 100644
--- a/src/Symfony/Component/DependencyInjection/ContainerInterface.php
+++ b/src/Symfony/Component/DependencyInjection/ContainerInterface.php
@@ -33,11 +33,13 @@ interface ContainerInterface extends PsrContainerInterface
public function set(string $id, ?object $service): void;
/**
+ * @template C of object
* @template B of self::*_REFERENCE
*
- * @param B $invalidBehavior
+ * @param string|class-string $id
+ * @param B $invalidBehavior
*
- * @psalm-return (B is self::EXCEPTION_ON_INVALID_REFERENCE|self::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE ? object : object|null)
+ * @return ($id is class-string ? (B is 0|1 ? C|object : C|object|null) : (B is 0|1 ? object : object|null))
*
* @throws ServiceCircularReferenceException When a circular reference is detected
* @throws ServiceNotFoundException When the service is not defined
diff --git a/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php
index ec115500bb0cf..d79e7b90408b2 100644
--- a/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php
+++ b/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php
@@ -50,18 +50,18 @@ public function dump(array $options = []): string
$this->dumper ??= new YmlDumper();
- return $this->container->resolveEnvPlaceholders($this->addParameters()."\n".$this->addServices());
+ return $this->addParameters()."\n".$this->addServices();
}
private function addService(string $id, Definition $definition): string
{
- $code = " $id:\n";
+ $code = " {$this->dumper->dump($id)}:\n";
if ($class = $definition->getClass()) {
if (str_starts_with($class, '\\')) {
$class = substr($class, 1);
}
- $code .= \sprintf(" class: %s\n", $this->dumper->dump($class));
+ $code .= \sprintf(" class: %s\n", $this->dumper->dump($this->container->resolveEnvPlaceholders($class)));
}
if (!$definition->isPrivate()) {
@@ -87,7 +87,7 @@ private function addService(string $id, Definition $definition): string
}
if ($definition->getFile()) {
- $code .= \sprintf(" file: %s\n", $this->dumper->dump($definition->getFile()));
+ $code .= \sprintf(" file: %s\n", $this->dumper->dump($this->container->resolveEnvPlaceholders($definition->getFile())));
}
if ($definition->isSynthetic()) {
@@ -238,7 +238,7 @@ private function dumpCallable(mixed $callable): mixed
}
}
- return $callable;
+ return $this->container->resolveEnvPlaceholders($callable);
}
/**
@@ -299,7 +299,7 @@ private function dumpValue(mixed $value): mixed
if (\is_array($value)) {
$code = [];
foreach ($value as $k => $v) {
- $code[$k] = $this->dumpValue($v);
+ $code[$this->container->resolveEnvPlaceholders($k)] = $this->dumpValue($v);
}
return $code;
@@ -319,7 +319,7 @@ private function dumpValue(mixed $value): mixed
throw new RuntimeException(\sprintf('Unable to dump a service container if a parameter is an object or a resource, got "%s".', get_debug_type($value)));
}
- return $value;
+ return $this->container->resolveEnvPlaceholders($value);
}
private function getServiceCall(string $id, ?Reference $reference = null): string
@@ -359,7 +359,7 @@ private function prepareParameters(array $parameters, bool $escape = true): arra
$filtered[$key] = $value;
}
- return $escape ? $this->escape($filtered) : $filtered;
+ return $escape ? $this->container->resolveEnvPlaceholders($this->escape($filtered)) : $filtered;
}
private function escape(array $arguments): array
diff --git a/src/Symfony/Component/DependencyInjection/Loader/FileLoader.php b/src/Symfony/Component/DependencyInjection/Loader/FileLoader.php
index 9e17bc424a2a9..bc38767bcb546 100644
--- a/src/Symfony/Component/DependencyInjection/Loader/FileLoader.php
+++ b/src/Symfony/Component/DependencyInjection/Loader/FileLoader.php
@@ -224,10 +224,14 @@ public function registerClasses(Definition $prototype, string $namespace, string
if (null === $alias) {
throw new LogicException(\sprintf('Alias cannot be automatically determined for class "%s". If you have used the #[AsAlias] attribute with a class implementing multiple interfaces, add the interface you want to alias to the first parameter of #[AsAlias].', $class));
}
- if (isset($this->aliases[$alias])) {
- throw new LogicException(\sprintf('The "%s" alias has already been defined with the #[AsAlias] attribute in "%s".', $alias, $this->aliases[$alias]));
+
+ if (!$attribute->when || \in_array($this->env, $attribute->when, true)) {
+ if (isset($this->aliases[$alias])) {
+ throw new LogicException(\sprintf('The "%s" alias has already been defined with the #[AsAlias] attribute in "%s".', $alias, $this->aliases[$alias]));
+ }
+
+ $this->aliases[$alias] = new Alias($class, $public);
}
- $this->aliases[$alias] = new Alias($class, $public);
}
}
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/DefinitionErrorExceptionPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/DefinitionErrorExceptionPassTest.php
index 9ab5c27fcf763..5ed7be315114a 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/DefinitionErrorExceptionPassTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/DefinitionErrorExceptionPassTest.php
@@ -64,6 +64,9 @@ public function testSkipNestedErrors()
$container->register('foo', 'stdClass')
->addArgument(new Reference('bar', ContainerBuilder::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE));
+ $container->register('baz', 'stdClass')
+ ->addArgument(new Reference('bar', ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE));
+
$pass = new DefinitionErrorExceptionPass();
$pass->process($container);
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php
index 76143fc9b91cb..b4e50d39f2eae 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php
@@ -376,6 +376,21 @@ public function testDecoratorsKeepBehaviorDescribingTags()
], $container->getDefinition('decorator')->getTags());
$this->assertFalse($container->hasParameter('container.behavior_describing_tags'));
}
+
+ public function testSyntheticService()
+ {
+ $container = new ContainerBuilder();
+ $container->register('kernel', \stdClass::class)
+ ->setInstanceofConditionals([
+ \stdClass::class => (new ChildDefinition(''))
+ ->addTag('container.excluded'),
+ ])
+ ->setSynthetic(true);
+
+ (new ResolveInstanceofConditionalsPass())->process($container);
+
+ $this->assertSame([], $container->getDefinition('kernel')->getTags());
+ }
}
class DecoratorWithBehavior implements ResetInterface, ResourceCheckerInterface, ServiceSubscriberInterface
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ServiceLocatorTagPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ServiceLocatorTagPassTest.php
index 812b47c7a6f1f..9a93067756d50 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ServiceLocatorTagPassTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ServiceLocatorTagPassTest.php
@@ -86,6 +86,26 @@ public function testProcessValue()
$this->assertSame(CustomDefinition::class, \get_class($locator('inlines.service')));
}
+ public function testServiceListIsOrdered()
+ {
+ $container = new ContainerBuilder();
+
+ $container->register('bar', CustomDefinition::class);
+ $container->register('baz', CustomDefinition::class);
+
+ $container->register('foo', ServiceLocator::class)
+ ->setArguments([[
+ new Reference('baz'),
+ new Reference('bar'),
+ ]])
+ ->addTag('container.service_locator')
+ ;
+
+ (new ServiceLocatorTagPass())->process($container);
+
+ $this->assertSame(['bar', 'baz'], array_keys($container->getDefinition('foo')->getArgument(0)));
+ }
+
public function testServiceWithKeyOverwritesPreviousInheritedKey()
{
$container = new ContainerBuilder();
@@ -170,6 +190,27 @@ public function testTaggedServices()
$this->assertSame(TestDefinition2::class, $locator('baz')::class);
}
+ public function testTaggedServicesKeysAreKept()
+ {
+ $container = new ContainerBuilder();
+
+ $container->register('bar', TestDefinition1::class)->addTag('test_tag', ['index' => 0]);
+ $container->register('baz', TestDefinition2::class)->addTag('test_tag', ['index' => 1]);
+
+ $container->register('foo', ServiceLocator::class)
+ ->setArguments([new TaggedIteratorArgument('test_tag', 'index', null, true)])
+ ->addTag('container.service_locator')
+ ;
+
+ (new ServiceLocatorTagPass())->process($container);
+
+ /** @var ServiceLocator $locator */
+ $locator = $container->get('foo');
+
+ $this->assertSame(TestDefinition1::class, $locator(0)::class);
+ $this->assertSame(TestDefinition2::class, $locator(1)::class);
+ }
+
public function testIndexedByServiceIdWithDecoration()
{
$container = new ContainerBuilder();
@@ -201,15 +242,33 @@ public function testIndexedByServiceIdWithDecoration()
static::assertInstanceOf(DecoratedService::class, $locator->get(Service::class));
}
- public function testDefinitionOrderIsTheSame()
+ public function testServicesKeysAreKept()
{
$container = new ContainerBuilder();
$container->register('service-1');
$container->register('service-2');
+ $container->register('service-3');
$locator = ServiceLocatorTagPass::register($container, [
- new Reference('service-2'),
new Reference('service-1'),
+ 'service-2' => new Reference('service-2'),
+ 'foo' => new Reference('service-3'),
+ ]);
+ $locator = $container->getDefinition($locator);
+ $factories = $locator->getArguments()[0];
+
+ static::assertSame([0, 'service-2', 'foo'], array_keys($factories));
+ }
+
+ public function testDefinitionOrderIsTheSame()
+ {
+ $container = new ContainerBuilder();
+ $container->register('service-1');
+ $container->register('service-2');
+
+ $locator = ServiceLocatorTagPass::register($container, [
+ 'service-2' => new Reference('service-2'),
+ 'service-1' => new Reference('service-1'),
]);
$locator = $container->getDefinition($locator);
$factories = $locator->getArguments()[0];
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php b/src/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php
index f9ff3fff786a3..3a21d7aa9a9c5 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php
@@ -215,6 +215,26 @@ public function testDumpNonScalarTags()
$this->assertEquals(file_get_contents(self::$fixturesPath.'/yaml/services_with_array_tags.yml'), $dumper->dump());
}
+ public function testDumpResolvedEnvPlaceholders()
+ {
+ $container = new ContainerBuilder();
+ $container->setParameter('%env(PARAMETER_NAME)%', '%env(PARAMETER_VALUE)%');
+ $container
+ ->register('service', '%env(SERVICE_CLASS)%')
+ ->setFile('%env(SERVICE_FILE)%')
+ ->addArgument('%env(SERVICE_ARGUMENT)%')
+ ->setProperty('%env(SERVICE_PROPERTY_NAME)%', '%env(SERVICE_PROPERTY_VALUE)%')
+ ->addMethodCall('%env(SERVICE_METHOD_NAME)%', ['%env(SERVICE_METHOD_ARGUMENT)%'])
+ ->setFactory('%env(SERVICE_FACTORY)%')
+ ->setConfigurator('%env(SERVICE_CONFIGURATOR)%')
+ ->setPublic(true)
+ ;
+ $container->compile();
+ $dumper = new YamlDumper($container);
+
+ $this->assertEquals(file_get_contents(self::$fixturesPath.'/yaml/container_with_env_placeholders.yml'), $dumper->dump());
+ }
+
private function assertEqualYamlStructure(string $expected, string $yaml, string $message = '')
{
$parser = new Parser();
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/PrototypeAsAlias/WithAsAliasBothEnv.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/PrototypeAsAlias/WithAsAliasBothEnv.php
new file mode 100644
index 0000000000000..252842be35ff2
--- /dev/null
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/PrototypeAsAlias/WithAsAliasBothEnv.php
@@ -0,0 +1,10 @@
+registerClasses(
(new Definition())->setAutoconfigured(true),
'Symfony\Component\DependencyInjection\Tests\Fixtures\PrototypeAsAlias\\',
@@ -374,6 +377,15 @@ public static function provideResourcesWithAsAliasAttributes(): iterable
AliasBarInterface::class => new Alias(WithAsAliasIdMultipleInterface::class),
AliasFooInterface::class => new Alias(WithAsAliasIdMultipleInterface::class),
]];
+ yield 'Dev-env specific' => ['PrototypeAsAlias/WithAsAlias*Env.php', [
+ AliasFooInterface::class => new Alias(WithAsAliasDevEnv::class),
+ AliasBarInterface::class => new Alias(WithAsAliasBothEnv::class),
+ ], 'dev'];
+ yield 'Prod-env specific' => ['PrototypeAsAlias/WithAsAlias*Env.php', [
+ AliasFooInterface::class => new Alias(WithAsAliasProdEnv::class),
+ AliasBarInterface::class => new Alias(WithAsAliasBothEnv::class),
+ ], 'prod'];
+ yield 'Test-env specific' => ['PrototypeAsAlias/WithAsAlias*Env.php', [], 'test'];
}
/**
diff --git a/src/Symfony/Component/DomCrawler/Crawler.php b/src/Symfony/Component/DomCrawler/Crawler.php
index e41875e268203..7550da83d4fdb 100644
--- a/src/Symfony/Component/DomCrawler/Crawler.php
+++ b/src/Symfony/Component/DomCrawler/Crawler.php
@@ -747,12 +747,12 @@ public function selectImage(string $value): static
}
/**
- * Selects a button by name or alt value for images.
+ * Selects a button by its text content, id, value, name or alt attribute.
*/
public function selectButton(string $value): static
{
return $this->filterRelativeXPath(
- \sprintf('descendant-or-self::input[((contains(%1$s, "submit") or contains(%1$s, "button")) and contains(concat(\' \', normalize-space(string(@value)), \' \'), %2$s)) or (contains(%1$s, "image") and contains(concat(\' \', normalize-space(string(@alt)), \' \'), %2$s)) or @id=%3$s or @name=%3$s] | descendant-or-self::button[contains(concat(\' \', normalize-space(string(.)), \' \'), %2$s) or @id=%3$s or @name=%3$s]', 'translate(@type, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")', static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value))
+ \sprintf('descendant-or-self::input[((contains(%1$s, "submit") or contains(%1$s, "button")) and contains(concat(\' \', normalize-space(string(@value)), \' \'), %2$s)) or (contains(%1$s, "image") and contains(concat(\' \', normalize-space(string(@alt)), \' \'), %2$s)) or @id=%3$s or @name=%3$s] | descendant-or-self::button[contains(concat(\' \', normalize-space(string(.)), \' \'), %2$s) or contains(concat(\' \', normalize-space(string(@value)), \' \'), %2$s) or @id=%3$s or @name=%3$s]', 'translate(@type, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")', static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value))
);
}
diff --git a/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php b/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php
index 5cdbbbf45870d..53169efcab8e5 100644
--- a/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php
+++ b/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php
@@ -452,10 +452,10 @@ public function testFilterXpathComplexQueries()
$this->assertCount(0, $crawler->filterXPath('/body'));
$this->assertCount(1, $crawler->filterXPath('./body'));
$this->assertCount(1, $crawler->filterXPath('.//body'));
- $this->assertCount(5, $crawler->filterXPath('.//input'));
+ $this->assertCount(6, $crawler->filterXPath('.//input'));
$this->assertCount(4, $crawler->filterXPath('//form')->filterXPath('//button | //input'));
$this->assertCount(1, $crawler->filterXPath('body'));
- $this->assertCount(6, $crawler->filterXPath('//button | //input'));
+ $this->assertCount(8, $crawler->filterXPath('//button | //input'));
$this->assertCount(1, $crawler->filterXPath('//body'));
$this->assertCount(1, $crawler->filterXPath('descendant-or-self::body'));
$this->assertCount(1, $crawler->filterXPath('//div[@id="parent"]')->filterXPath('./div'), 'A child selection finds only the current div');
@@ -723,16 +723,23 @@ public function testSelectButton()
$this->assertNotSame($crawler, $crawler->selectButton('FooValue'), '->selectButton() returns a new instance of a crawler');
$this->assertInstanceOf(Crawler::class, $crawler->selectButton('FooValue'), '->selectButton() returns a new instance of a crawler');
- $this->assertEquals(1, $crawler->selectButton('FooValue')->count(), '->selectButton() selects buttons');
- $this->assertEquals(1, $crawler->selectButton('FooName')->count(), '->selectButton() selects buttons');
- $this->assertEquals(1, $crawler->selectButton('FooId')->count(), '->selectButton() selects buttons');
+ $this->assertCount(1, $crawler->selectButton('FooValue'), '->selectButton() selects type-submit inputs by value');
+ $this->assertCount(1, $crawler->selectButton('FooName'), '->selectButton() selects type-submit inputs by name');
+ $this->assertCount(1, $crawler->selectButton('FooId'), '->selectButton() selects type-submit inputs by id');
- $this->assertEquals(1, $crawler->selectButton('BarValue')->count(), '->selectButton() selects buttons');
- $this->assertEquals(1, $crawler->selectButton('BarName')->count(), '->selectButton() selects buttons');
- $this->assertEquals(1, $crawler->selectButton('BarId')->count(), '->selectButton() selects buttons');
+ $this->assertCount(1, $crawler->selectButton('BarValue'), '->selectButton() selects type-button inputs by value');
+ $this->assertCount(1, $crawler->selectButton('BarName'), '->selectButton() selects type-button inputs by name');
+ $this->assertCount(1, $crawler->selectButton('BarId'), '->selectButton() selects type-button inputs by id');
- $this->assertEquals(1, $crawler->selectButton('FooBarValue')->count(), '->selectButton() selects buttons with form attribute too');
- $this->assertEquals(1, $crawler->selectButton('FooBarName')->count(), '->selectButton() selects buttons with form attribute too');
+ $this->assertCount(1, $crawler->selectButton('ImageAlt'), '->selectButton() selects type-image inputs by alt');
+
+ $this->assertCount(1, $crawler->selectButton('ButtonValue'), '->selectButton() selects buttons by value');
+ $this->assertCount(1, $crawler->selectButton('ButtonName'), '->selectButton() selects buttons by name');
+ $this->assertCount(1, $crawler->selectButton('ButtonId'), '->selectButton() selects buttons by id');
+ $this->assertCount(1, $crawler->selectButton('ButtonText'), '->selectButton() selects buttons by text content');
+
+ $this->assertCount(1, $crawler->selectButton('FooBarValue'), '->selectButton() selects buttons with form attribute too');
+ $this->assertCount(1, $crawler->selectButton('FooBarName'), '->selectButton() selects buttons with form attribute too');
}
public function testSelectButtonWithSingleQuotesInNameAttribute()
@@ -1322,6 +1329,9 @@ public function createTestCrawler($uri = null)
+
+
+
- One
- Two
diff --git a/src/Symfony/Component/Emoji/EmojiTransliterator.php b/src/Symfony/Component/Emoji/EmojiTransliterator.php
index 03fe1bd61a7d6..67dfe3fb3f56c 100644
--- a/src/Symfony/Component/Emoji/EmojiTransliterator.php
+++ b/src/Symfony/Component/Emoji/EmojiTransliterator.php
@@ -83,14 +83,22 @@ public function createInverse(): self
return self::create($this->id, \Transliterator::REVERSE);
}
+ /**
+ * @return int
+ */
+ #[\ReturnTypeWillChange]
public function getErrorCode(): int|false
{
return isset($this->transliterator) ? $this->transliterator->getErrorCode() : 0;
}
+ /**
+ * @return string
+ */
+ #[\ReturnTypeWillChange]
public function getErrorMessage(): string|false
{
- return isset($this->transliterator) ? $this->transliterator->getErrorMessage() : false;
+ return isset($this->transliterator) ? $this->transliterator->getErrorMessage() : '';
}
public static function listIDs(): array
diff --git a/src/Symfony/Component/Emoji/Resources/bin/Makefile b/src/Symfony/Component/Emoji/Resources/bin/Makefile
index 5ae726c112574..49e9e76e9a414 100644
--- a/src/Symfony/Component/Emoji/Resources/bin/Makefile
+++ b/src/Symfony/Component/Emoji/Resources/bin/Makefile
@@ -4,7 +4,7 @@
update: ## Update sources
@composer update
@curl https://api.github.com/emojis > vendor/github-emojis.json
- @curl https://gitlab.com/gitlab-org/gitlab/-/raw/master/fixtures/emojis/index.json > vendor/gitlab-emojis.json
+ @curl https://gitlab.com/gitlab-org/gitlab/-/raw/master/fixtures/emojis/digests.json > vendor/gitlab-emojis.json
@curl https://raw.githubusercontent.com/iamcal/emoji-data/master/emoji.json > vendor/slack-emojis.json
@curl -L https://unicode.org/Public/emoji/latest/emoji-test.txt > vendor/emoji-test.txt
diff --git a/src/Symfony/Component/Emoji/Resources/bin/build.php b/src/Symfony/Component/Emoji/Resources/bin/build.php
index 93d8f97f7b87c..0b1475bb32923 100755
--- a/src/Symfony/Component/Emoji/Resources/bin/build.php
+++ b/src/Symfony/Component/Emoji/Resources/bin/build.php
@@ -149,14 +149,10 @@ public static function buildGitlabMaps(array $emojisCodePoints): array
$emojis = json_decode((new Filesystem())->readFile(__DIR__.'/vendor/gitlab-emojis.json'), true, flags: JSON_THROW_ON_ERROR);
$maps = [];
- foreach ($emojis as $emojiItem) {
+ foreach ($emojis as $shortName => $emojiItem) {
$emoji = $emojiItem['moji'];
$emojiPriority = mb_strlen($emoji) << 1;
- $maps[$emojiPriority + 1][$emojiItem['shortname']] = $emoji;
-
- foreach ($emojiItem['aliases'] as $alias) {
- $maps[$emojiPriority][$alias] = $emoji;
- }
+ $maps[$emojiPriority + 1][":$shortName:"] = $emoji;
}
return $maps;
diff --git a/src/Symfony/Component/Emoji/Resources/data/emoji-gitlab.php b/src/Symfony/Component/Emoji/Resources/data/emoji-gitlab.php
index da33e8ecd964b..c303e4fa4cd51 100644
--- a/src/Symfony/Component/Emoji/Resources/data/emoji-gitlab.php
+++ b/src/Symfony/Component/Emoji/Resources/data/emoji-gitlab.php
@@ -1,8 +1,230 @@
':kiss_man_man_dark_skin_tone:',
+ '👨🏿❤️💋👨🏻' => ':kiss_man_man_dark_skin_tone_light_skin_tone:',
+ '👨🏿❤️💋👨🏾' => ':kiss_man_man_dark_skin_tone_medium_dark_skin_tone:',
+ '👨🏿❤️💋👨🏼' => ':kiss_man_man_dark_skin_tone_medium_light_skin_tone:',
+ '👨🏿❤️💋👨🏽' => ':kiss_man_man_dark_skin_tone_medium_skin_tone:',
+ '👨🏻❤️💋👨🏻' => ':kiss_man_man_light_skin_tone:',
+ '👨🏻❤️💋👨🏿' => ':kiss_man_man_light_skin_tone_dark_skin_tone:',
+ '👨🏻❤️💋👨🏾' => ':kiss_man_man_light_skin_tone_medium_dark_skin_tone:',
+ '👨🏻❤️💋👨🏼' => ':kiss_man_man_light_skin_tone_medium_light_skin_tone:',
+ '👨🏻❤️💋👨🏽' => ':kiss_man_man_light_skin_tone_medium_skin_tone:',
+ '👨🏾❤️💋👨🏾' => ':kiss_man_man_medium_dark_skin_tone:',
+ '👨🏾❤️💋👨🏿' => ':kiss_man_man_medium_dark_skin_tone_dark_skin_tone:',
+ '👨🏾❤️💋👨🏻' => ':kiss_man_man_medium_dark_skin_tone_light_skin_tone:',
+ '👨🏾❤️💋👨🏼' => ':kiss_man_man_medium_dark_skin_tone_medium_light_skin_tone:',
+ '👨🏾❤️💋👨🏽' => ':kiss_man_man_medium_dark_skin_tone_medium_skin_tone:',
+ '👨🏼❤️💋👨🏼' => ':kiss_man_man_medium_light_skin_tone:',
+ '👨🏼❤️💋👨🏿' => ':kiss_man_man_medium_light_skin_tone_dark_skin_tone:',
+ '👨🏼❤️💋👨🏻' => ':kiss_man_man_medium_light_skin_tone_light_skin_tone:',
+ '👨🏼❤️💋👨🏾' => ':kiss_man_man_medium_light_skin_tone_medium_dark_skin_tone:',
+ '👨🏼❤️💋👨🏽' => ':kiss_man_man_medium_light_skin_tone_medium_skin_tone:',
+ '👨🏽❤️💋👨🏽' => ':kiss_man_man_medium_skin_tone:',
+ '👨🏽❤️💋👨🏿' => ':kiss_man_man_medium_skin_tone_dark_skin_tone:',
+ '👨🏽❤️💋👨🏻' => ':kiss_man_man_medium_skin_tone_light_skin_tone:',
+ '👨🏽❤️💋👨🏾' => ':kiss_man_man_medium_skin_tone_medium_dark_skin_tone:',
+ '👨🏽❤️💋👨🏼' => ':kiss_man_man_medium_skin_tone_medium_light_skin_tone:',
+ '🧑🏿❤️💋🧑🏻' => ':kiss_person_person_dark_skin_tone_light_skin_tone:',
+ '🧑🏿❤️💋🧑🏾' => ':kiss_person_person_dark_skin_tone_medium_dark_skin_tone:',
+ '🧑🏿❤️💋🧑🏼' => ':kiss_person_person_dark_skin_tone_medium_light_skin_tone:',
+ '🧑🏿❤️💋🧑🏽' => ':kiss_person_person_dark_skin_tone_medium_skin_tone:',
+ '🧑🏻❤️💋🧑🏿' => ':kiss_person_person_light_skin_tone_dark_skin_tone:',
+ '🧑🏻❤️💋🧑🏾' => ':kiss_person_person_light_skin_tone_medium_dark_skin_tone:',
+ '🧑🏻❤️💋🧑🏼' => ':kiss_person_person_light_skin_tone_medium_light_skin_tone:',
+ '🧑🏻❤️💋🧑🏽' => ':kiss_person_person_light_skin_tone_medium_skin_tone:',
+ '🧑🏾❤️💋🧑🏿' => ':kiss_person_person_medium_dark_skin_tone_dark_skin_tone:',
+ '🧑🏾❤️💋🧑🏻' => ':kiss_person_person_medium_dark_skin_tone_light_skin_tone:',
+ '🧑🏾❤️💋🧑🏼' => ':kiss_person_person_medium_dark_skin_tone_medium_light_skin_tone:',
+ '🧑🏾❤️💋🧑🏽' => ':kiss_person_person_medium_dark_skin_tone_medium_skin_tone:',
+ '🧑🏼❤️💋🧑🏿' => ':kiss_person_person_medium_light_skin_tone_dark_skin_tone:',
+ '🧑🏼❤️💋🧑🏻' => ':kiss_person_person_medium_light_skin_tone_light_skin_tone:',
+ '🧑🏼❤️💋🧑🏾' => ':kiss_person_person_medium_light_skin_tone_medium_dark_skin_tone:',
+ '🧑🏼❤️💋🧑🏽' => ':kiss_person_person_medium_light_skin_tone_medium_skin_tone:',
+ '🧑🏽❤️💋🧑🏿' => ':kiss_person_person_medium_skin_tone_dark_skin_tone:',
+ '🧑🏽❤️💋🧑🏻' => ':kiss_person_person_medium_skin_tone_light_skin_tone:',
+ '🧑🏽❤️💋🧑🏾' => ':kiss_person_person_medium_skin_tone_medium_dark_skin_tone:',
+ '🧑🏽❤️💋🧑🏼' => ':kiss_person_person_medium_skin_tone_medium_light_skin_tone:',
+ '👩🏿❤️💋👨🏿' => ':kiss_woman_man_dark_skin_tone:',
+ '👩🏿❤️💋👨🏻' => ':kiss_woman_man_dark_skin_tone_light_skin_tone:',
+ '👩🏿❤️💋👨🏾' => ':kiss_woman_man_dark_skin_tone_medium_dark_skin_tone:',
+ '👩🏿❤️💋👨🏼' => ':kiss_woman_man_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏿❤️💋👨🏽' => ':kiss_woman_man_dark_skin_tone_medium_skin_tone:',
+ '👩🏻❤️💋👨🏻' => ':kiss_woman_man_light_skin_tone:',
+ '👩🏻❤️💋👨🏿' => ':kiss_woman_man_light_skin_tone_dark_skin_tone:',
+ '👩🏻❤️💋👨🏾' => ':kiss_woman_man_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏻❤️💋👨🏼' => ':kiss_woman_man_light_skin_tone_medium_light_skin_tone:',
+ '👩🏻❤️💋👨🏽' => ':kiss_woman_man_light_skin_tone_medium_skin_tone:',
+ '👩🏾❤️💋👨🏾' => ':kiss_woman_man_medium_dark_skin_tone:',
+ '👩🏾❤️💋👨🏿' => ':kiss_woman_man_medium_dark_skin_tone_dark_skin_tone:',
+ '👩🏾❤️💋👨🏻' => ':kiss_woman_man_medium_dark_skin_tone_light_skin_tone:',
+ '👩🏾❤️💋👨🏼' => ':kiss_woman_man_medium_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏾❤️💋👨🏽' => ':kiss_woman_man_medium_dark_skin_tone_medium_skin_tone:',
+ '👩🏼❤️💋👨🏼' => ':kiss_woman_man_medium_light_skin_tone:',
+ '👩🏼❤️💋👨🏿' => ':kiss_woman_man_medium_light_skin_tone_dark_skin_tone:',
+ '👩🏼❤️💋👨🏻' => ':kiss_woman_man_medium_light_skin_tone_light_skin_tone:',
+ '👩🏼❤️💋👨🏾' => ':kiss_woman_man_medium_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏼❤️💋👨🏽' => ':kiss_woman_man_medium_light_skin_tone_medium_skin_tone:',
+ '👩🏽❤️💋👨🏽' => ':kiss_woman_man_medium_skin_tone:',
+ '👩🏽❤️💋👨🏿' => ':kiss_woman_man_medium_skin_tone_dark_skin_tone:',
+ '👩🏽❤️💋👨🏻' => ':kiss_woman_man_medium_skin_tone_light_skin_tone:',
+ '👩🏽❤️💋👨🏾' => ':kiss_woman_man_medium_skin_tone_medium_dark_skin_tone:',
+ '👩🏽❤️💋👨🏼' => ':kiss_woman_man_medium_skin_tone_medium_light_skin_tone:',
+ '👩🏿❤️💋👩🏿' => ':kiss_woman_woman_dark_skin_tone:',
+ '👩🏿❤️💋👩🏻' => ':kiss_woman_woman_dark_skin_tone_light_skin_tone:',
+ '👩🏿❤️💋👩🏾' => ':kiss_woman_woman_dark_skin_tone_medium_dark_skin_tone:',
+ '👩🏿❤️💋👩🏼' => ':kiss_woman_woman_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏿❤️💋👩🏽' => ':kiss_woman_woman_dark_skin_tone_medium_skin_tone:',
+ '👩🏻❤️💋👩🏻' => ':kiss_woman_woman_light_skin_tone:',
+ '👩🏻❤️💋👩🏿' => ':kiss_woman_woman_light_skin_tone_dark_skin_tone:',
+ '👩🏻❤️💋👩🏾' => ':kiss_woman_woman_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏻❤️💋👩🏼' => ':kiss_woman_woman_light_skin_tone_medium_light_skin_tone:',
+ '👩🏻❤️💋👩🏽' => ':kiss_woman_woman_light_skin_tone_medium_skin_tone:',
+ '👩🏾❤️💋👩🏾' => ':kiss_woman_woman_medium_dark_skin_tone:',
+ '👩🏾❤️💋👩🏿' => ':kiss_woman_woman_medium_dark_skin_tone_dark_skin_tone:',
+ '👩🏾❤️💋👩🏻' => ':kiss_woman_woman_medium_dark_skin_tone_light_skin_tone:',
+ '👩🏾❤️💋👩🏼' => ':kiss_woman_woman_medium_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏾❤️💋👩🏽' => ':kiss_woman_woman_medium_dark_skin_tone_medium_skin_tone:',
+ '👩🏼❤️💋👩🏼' => ':kiss_woman_woman_medium_light_skin_tone:',
+ '👩🏼❤️💋👩🏿' => ':kiss_woman_woman_medium_light_skin_tone_dark_skin_tone:',
+ '👩🏼❤️💋👩🏻' => ':kiss_woman_woman_medium_light_skin_tone_light_skin_tone:',
+ '👩🏼❤️💋👩🏾' => ':kiss_woman_woman_medium_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏼❤️💋👩🏽' => ':kiss_woman_woman_medium_light_skin_tone_medium_skin_tone:',
+ '👩🏽❤️💋👩🏽' => ':kiss_woman_woman_medium_skin_tone:',
+ '👩🏽❤️💋👩🏿' => ':kiss_woman_woman_medium_skin_tone_dark_skin_tone:',
+ '👩🏽❤️💋👩🏻' => ':kiss_woman_woman_medium_skin_tone_light_skin_tone:',
+ '👩🏽❤️💋👩🏾' => ':kiss_woman_woman_medium_skin_tone_medium_dark_skin_tone:',
+ '👩🏽❤️💋👩🏼' => ':kiss_woman_woman_medium_skin_tone_medium_light_skin_tone:',
+ '👨🏿❤️👨🏿' => ':couple_with_heart_man_man_dark_skin_tone:',
+ '👨🏿❤️👨🏻' => ':couple_with_heart_man_man_dark_skin_tone_light_skin_tone:',
+ '👨🏿❤️👨🏾' => ':couple_with_heart_man_man_dark_skin_tone_medium_dark_skin_tone:',
+ '👨🏿❤️👨🏼' => ':couple_with_heart_man_man_dark_skin_tone_medium_light_skin_tone:',
+ '👨🏿❤️👨🏽' => ':couple_with_heart_man_man_dark_skin_tone_medium_skin_tone:',
+ '👨🏻❤️👨🏻' => ':couple_with_heart_man_man_light_skin_tone:',
+ '👨🏻❤️👨🏿' => ':couple_with_heart_man_man_light_skin_tone_dark_skin_tone:',
+ '👨🏻❤️👨🏾' => ':couple_with_heart_man_man_light_skin_tone_medium_dark_skin_tone:',
+ '👨🏻❤️👨🏼' => ':couple_with_heart_man_man_light_skin_tone_medium_light_skin_tone:',
+ '👨🏻❤️👨🏽' => ':couple_with_heart_man_man_light_skin_tone_medium_skin_tone:',
+ '👨🏾❤️👨🏾' => ':couple_with_heart_man_man_medium_dark_skin_tone:',
+ '👨🏾❤️👨🏿' => ':couple_with_heart_man_man_medium_dark_skin_tone_dark_skin_tone:',
+ '👨🏾❤️👨🏻' => ':couple_with_heart_man_man_medium_dark_skin_tone_light_skin_tone:',
+ '👨🏾❤️👨🏼' => ':couple_with_heart_man_man_medium_dark_skin_tone_medium_light_skin_tone:',
+ '👨🏾❤️👨🏽' => ':couple_with_heart_man_man_medium_dark_skin_tone_medium_skin_tone:',
+ '👨🏼❤️👨🏼' => ':couple_with_heart_man_man_medium_light_skin_tone:',
+ '👨🏼❤️👨🏿' => ':couple_with_heart_man_man_medium_light_skin_tone_dark_skin_tone:',
+ '👨🏼❤️👨🏻' => ':couple_with_heart_man_man_medium_light_skin_tone_light_skin_tone:',
+ '👨🏼❤️👨🏾' => ':couple_with_heart_man_man_medium_light_skin_tone_medium_dark_skin_tone:',
+ '👨🏼❤️👨🏽' => ':couple_with_heart_man_man_medium_light_skin_tone_medium_skin_tone:',
+ '👨🏽❤️👨🏽' => ':couple_with_heart_man_man_medium_skin_tone:',
+ '👨🏽❤️👨🏿' => ':couple_with_heart_man_man_medium_skin_tone_dark_skin_tone:',
+ '👨🏽❤️👨🏻' => ':couple_with_heart_man_man_medium_skin_tone_light_skin_tone:',
+ '👨🏽❤️👨🏾' => ':couple_with_heart_man_man_medium_skin_tone_medium_dark_skin_tone:',
+ '👨🏽❤️👨🏼' => ':couple_with_heart_man_man_medium_skin_tone_medium_light_skin_tone:',
+ '🧑🏿❤️🧑🏻' => ':couple_with_heart_person_person_dark_skin_tone_light_skin_tone:',
+ '🧑🏿❤️🧑🏾' => ':couple_with_heart_person_person_dark_skin_tone_medium_dark_skin_tone:',
+ '🧑🏿❤️🧑🏼' => ':couple_with_heart_person_person_dark_skin_tone_medium_light_skin_tone:',
+ '🧑🏿❤️🧑🏽' => ':couple_with_heart_person_person_dark_skin_tone_medium_skin_tone:',
+ '🧑🏻❤️🧑🏿' => ':couple_with_heart_person_person_light_skin_tone_dark_skin_tone:',
+ '🧑🏻❤️🧑🏾' => ':couple_with_heart_person_person_light_skin_tone_medium_dark_skin_tone:',
+ '🧑🏻❤️🧑🏼' => ':couple_with_heart_person_person_light_skin_tone_medium_light_skin_tone:',
+ '🧑🏻❤️🧑🏽' => ':couple_with_heart_person_person_light_skin_tone_medium_skin_tone:',
+ '🧑🏾❤️🧑🏿' => ':couple_with_heart_person_person_medium_dark_skin_tone_dark_skin_tone:',
+ '🧑🏾❤️🧑🏻' => ':couple_with_heart_person_person_medium_dark_skin_tone_light_skin_tone:',
+ '🧑🏾❤️🧑🏼' => ':couple_with_heart_person_person_medium_dark_skin_tone_medium_light_skin_tone:',
+ '🧑🏾❤️🧑🏽' => ':couple_with_heart_person_person_medium_dark_skin_tone_medium_skin_tone:',
+ '🧑🏼❤️🧑🏿' => ':couple_with_heart_person_person_medium_light_skin_tone_dark_skin_tone:',
+ '🧑🏼❤️🧑🏻' => ':couple_with_heart_person_person_medium_light_skin_tone_light_skin_tone:',
+ '🧑🏼❤️🧑🏾' => ':couple_with_heart_person_person_medium_light_skin_tone_medium_dark_skin_tone:',
+ '🧑🏼❤️🧑🏽' => ':couple_with_heart_person_person_medium_light_skin_tone_medium_skin_tone:',
+ '🧑🏽❤️🧑🏿' => ':couple_with_heart_person_person_medium_skin_tone_dark_skin_tone:',
+ '🧑🏽❤️🧑🏻' => ':couple_with_heart_person_person_medium_skin_tone_light_skin_tone:',
+ '🧑🏽❤️🧑🏾' => ':couple_with_heart_person_person_medium_skin_tone_medium_dark_skin_tone:',
+ '🧑🏽❤️🧑🏼' => ':couple_with_heart_person_person_medium_skin_tone_medium_light_skin_tone:',
+ '👩🏿❤️👨🏿' => ':couple_with_heart_woman_man_dark_skin_tone:',
+ '👩🏿❤️👨🏻' => ':couple_with_heart_woman_man_dark_skin_tone_light_skin_tone:',
+ '👩🏿❤️👨🏾' => ':couple_with_heart_woman_man_dark_skin_tone_medium_dark_skin_tone:',
+ '👩🏿❤️👨🏼' => ':couple_with_heart_woman_man_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏿❤️👨🏽' => ':couple_with_heart_woman_man_dark_skin_tone_medium_skin_tone:',
+ '👩🏻❤️👨🏻' => ':couple_with_heart_woman_man_light_skin_tone:',
+ '👩🏻❤️👨🏿' => ':couple_with_heart_woman_man_light_skin_tone_dark_skin_tone:',
+ '👩🏻❤️👨🏾' => ':couple_with_heart_woman_man_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏻❤️👨🏼' => ':couple_with_heart_woman_man_light_skin_tone_medium_light_skin_tone:',
+ '👩🏻❤️👨🏽' => ':couple_with_heart_woman_man_light_skin_tone_medium_skin_tone:',
+ '👩🏾❤️👨🏾' => ':couple_with_heart_woman_man_medium_dark_skin_tone:',
+ '👩🏾❤️👨🏿' => ':couple_with_heart_woman_man_medium_dark_skin_tone_dark_skin_tone:',
+ '👩🏾❤️👨🏻' => ':couple_with_heart_woman_man_medium_dark_skin_tone_light_skin_tone:',
+ '👩🏾❤️👨🏼' => ':couple_with_heart_woman_man_medium_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏾❤️👨🏽' => ':couple_with_heart_woman_man_medium_dark_skin_tone_medium_skin_tone:',
+ '👩🏼❤️👨🏼' => ':couple_with_heart_woman_man_medium_light_skin_tone:',
+ '👩🏼❤️👨🏿' => ':couple_with_heart_woman_man_medium_light_skin_tone_dark_skin_tone:',
+ '👩🏼❤️👨🏻' => ':couple_with_heart_woman_man_medium_light_skin_tone_light_skin_tone:',
+ '👩🏼❤️👨🏾' => ':couple_with_heart_woman_man_medium_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏼❤️👨🏽' => ':couple_with_heart_woman_man_medium_light_skin_tone_medium_skin_tone:',
+ '👩🏽❤️👨🏽' => ':couple_with_heart_woman_man_medium_skin_tone:',
+ '👩🏽❤️👨🏿' => ':couple_with_heart_woman_man_medium_skin_tone_dark_skin_tone:',
+ '👩🏽❤️👨🏻' => ':couple_with_heart_woman_man_medium_skin_tone_light_skin_tone:',
+ '👩🏽❤️👨🏾' => ':couple_with_heart_woman_man_medium_skin_tone_medium_dark_skin_tone:',
+ '👩🏽❤️👨🏼' => ':couple_with_heart_woman_man_medium_skin_tone_medium_light_skin_tone:',
+ '👩🏿❤️👩🏿' => ':couple_with_heart_woman_woman_dark_skin_tone:',
+ '👩🏿❤️👩🏻' => ':couple_with_heart_woman_woman_dark_skin_tone_light_skin_tone:',
+ '👩🏿❤️👩🏾' => ':couple_with_heart_woman_woman_dark_skin_tone_medium_dark_skin_tone:',
+ '👩🏿❤️👩🏼' => ':couple_with_heart_woman_woman_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏿❤️👩🏽' => ':couple_with_heart_woman_woman_dark_skin_tone_medium_skin_tone:',
+ '👩🏻❤️👩🏻' => ':couple_with_heart_woman_woman_light_skin_tone:',
+ '👩🏻❤️👩🏿' => ':couple_with_heart_woman_woman_light_skin_tone_dark_skin_tone:',
+ '👩🏻❤️👩🏾' => ':couple_with_heart_woman_woman_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏻❤️👩🏼' => ':couple_with_heart_woman_woman_light_skin_tone_medium_light_skin_tone:',
+ '👩🏻❤️👩🏽' => ':couple_with_heart_woman_woman_light_skin_tone_medium_skin_tone:',
+ '👩🏾❤️👩🏾' => ':couple_with_heart_woman_woman_medium_dark_skin_tone:',
+ '👩🏾❤️👩🏿' => ':couple_with_heart_woman_woman_medium_dark_skin_tone_dark_skin_tone:',
+ '👩🏾❤️👩🏻' => ':couple_with_heart_woman_woman_medium_dark_skin_tone_light_skin_tone:',
+ '👩🏾❤️👩🏼' => ':couple_with_heart_woman_woman_medium_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏾❤️👩🏽' => ':couple_with_heart_woman_woman_medium_dark_skin_tone_medium_skin_tone:',
+ '👩🏼❤️👩🏼' => ':couple_with_heart_woman_woman_medium_light_skin_tone:',
+ '👩🏼❤️👩🏿' => ':couple_with_heart_woman_woman_medium_light_skin_tone_dark_skin_tone:',
+ '👩🏼❤️👩🏻' => ':couple_with_heart_woman_woman_medium_light_skin_tone_light_skin_tone:',
+ '👩🏼❤️👩🏾' => ':couple_with_heart_woman_woman_medium_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏼❤️👩🏽' => ':couple_with_heart_woman_woman_medium_light_skin_tone_medium_skin_tone:',
+ '👩🏽❤️👩🏽' => ':couple_with_heart_woman_woman_medium_skin_tone:',
+ '👩🏽❤️👩🏿' => ':couple_with_heart_woman_woman_medium_skin_tone_dark_skin_tone:',
+ '👩🏽❤️👩🏻' => ':couple_with_heart_woman_woman_medium_skin_tone_light_skin_tone:',
+ '👩🏽❤️👩🏾' => ':couple_with_heart_woman_woman_medium_skin_tone_medium_dark_skin_tone:',
+ '👩🏽❤️👩🏼' => ':couple_with_heart_woman_woman_medium_skin_tone_medium_light_skin_tone:',
'👨❤️💋👨' => ':kiss_mm:',
+ '👩❤️💋👨' => ':kiss_woman_man:',
'👩❤️💋👩' => ':kiss_ww:',
+ '🧎🏿♂️➡️' => ':man_kneeling_facing_right_dark_skin_tone:',
+ '🧎🏻♂️➡️' => ':man_kneeling_facing_right_light_skin_tone:',
+ '🧎🏾♂️➡️' => ':man_kneeling_facing_right_medium_dark_skin_tone:',
+ '🧎🏼♂️➡️' => ':man_kneeling_facing_right_medium_light_skin_tone:',
+ '🧎🏽♂️➡️' => ':man_kneeling_facing_right_medium_skin_tone:',
+ '🏃🏿♂️➡️' => ':man_running_facing_right_dark_skin_tone:',
+ '🏃🏻♂️➡️' => ':man_running_facing_right_light_skin_tone:',
+ '🏃🏾♂️➡️' => ':man_running_facing_right_medium_dark_skin_tone:',
+ '🏃🏼♂️➡️' => ':man_running_facing_right_medium_light_skin_tone:',
+ '🏃🏽♂️➡️' => ':man_running_facing_right_medium_skin_tone:',
+ '🚶🏿♂️➡️' => ':man_walking_facing_right_dark_skin_tone:',
+ '🚶🏻♂️➡️' => ':man_walking_facing_right_light_skin_tone:',
+ '🚶🏾♂️➡️' => ':man_walking_facing_right_medium_dark_skin_tone:',
+ '🚶🏼♂️➡️' => ':man_walking_facing_right_medium_light_skin_tone:',
+ '🚶🏽♂️➡️' => ':man_walking_facing_right_medium_skin_tone:',
+ '🧎🏿♀️➡️' => ':woman_kneeling_facing_right_dark_skin_tone:',
+ '🧎🏻♀️➡️' => ':woman_kneeling_facing_right_light_skin_tone:',
+ '🧎🏾♀️➡️' => ':woman_kneeling_facing_right_medium_dark_skin_tone:',
+ '🧎🏼♀️➡️' => ':woman_kneeling_facing_right_medium_light_skin_tone:',
+ '🧎🏽♀️➡️' => ':woman_kneeling_facing_right_medium_skin_tone:',
+ '🏃🏿♀️➡️' => ':woman_running_facing_right_dark_skin_tone:',
+ '🏃🏻♀️➡️' => ':woman_running_facing_right_light_skin_tone:',
+ '🏃🏾♀️➡️' => ':woman_running_facing_right_medium_dark_skin_tone:',
+ '🏃🏼♀️➡️' => ':woman_running_facing_right_medium_light_skin_tone:',
+ '🏃🏽♀️➡️' => ':woman_running_facing_right_medium_skin_tone:',
+ '🚶🏿♀️➡️' => ':woman_walking_facing_right_dark_skin_tone:',
+ '🚶🏻♀️➡️' => ':woman_walking_facing_right_light_skin_tone:',
+ '🚶🏾♀️➡️' => ':woman_walking_facing_right_medium_dark_skin_tone:',
+ '🚶🏼♀️➡️' => ':woman_walking_facing_right_medium_light_skin_tone:',
+ '🚶🏽♀️➡️' => ':woman_walking_facing_right_medium_skin_tone:',
+ '🧑🧑🧒🧒' => ':family_adult_adult_child_child:',
'👨👨👦👦' => ':family_mmbb:',
'👨👨👧👦' => ':family_mmgb:',
'👨👨👧👧' => ':family_mmgg:',
@@ -12,35 +234,1291 @@
'👩👩👦👦' => ':family_wwbb:',
'👩👩👧👦' => ':family_wwgb:',
'👩👩👧👧' => ':family_wwgg:',
+ '🏴' => ':flag_england:',
+ '🏴' => ':flag_scotland:',
+ '🏴' => ':flag_wales:',
+ '👨🏿🦽➡️' => ':man_in_manual_wheelchair_facing_right_dark_skin_tone:',
+ '👨🏻🦽➡️' => ':man_in_manual_wheelchair_facing_right_light_skin_tone:',
+ '👨🏾🦽➡️' => ':man_in_manual_wheelchair_facing_right_medium_dark_skin_tone:',
+ '👨🏼🦽➡️' => ':man_in_manual_wheelchair_facing_right_medium_light_skin_tone:',
+ '👨🏽🦽➡️' => ':man_in_manual_wheelchair_facing_right_medium_skin_tone:',
+ '👨🏿🦼➡️' => ':man_in_motorized_wheelchair_facing_right_dark_skin_tone:',
+ '👨🏻🦼➡️' => ':man_in_motorized_wheelchair_facing_right_light_skin_tone:',
+ '👨🏾🦼➡️' => ':man_in_motorized_wheelchair_facing_right_medium_dark_skin_tone:',
+ '👨🏼🦼➡️' => ':man_in_motorized_wheelchair_facing_right_medium_light_skin_tone:',
+ '👨🏽🦼➡️' => ':man_in_motorized_wheelchair_facing_right_medium_skin_tone:',
+ '🧎♂️➡️' => ':man_kneeling_facing_right:',
+ '🏃♂️➡️' => ':man_running_facing_right:',
+ '🚶♂️➡️' => ':man_walking_facing_right:',
+ '👨🏿🦯➡️' => ':man_with_white_cane_facing_right_dark_skin_tone:',
+ '👨🏻🦯➡️' => ':man_with_white_cane_facing_right_light_skin_tone:',
+ '👨🏾🦯➡️' => ':man_with_white_cane_facing_right_medium_dark_skin_tone:',
+ '👨🏼🦯➡️' => ':man_with_white_cane_facing_right_medium_light_skin_tone:',
+ '👨🏽🦯➡️' => ':man_with_white_cane_facing_right_medium_skin_tone:',
+ '👨🏿🤝👨🏻' => ':men_holding_hands_dark_skin_tone_light_skin_tone:',
+ '👨🏿🤝👨🏾' => ':men_holding_hands_dark_skin_tone_medium_dark_skin_tone:',
+ '👨🏿🤝👨🏼' => ':men_holding_hands_dark_skin_tone_medium_light_skin_tone:',
+ '👨🏿🤝👨🏽' => ':men_holding_hands_dark_skin_tone_medium_skin_tone:',
+ '👨🏻🤝👨🏿' => ':men_holding_hands_light_skin_tone_dark_skin_tone:',
+ '👨🏻🤝👨🏾' => ':men_holding_hands_light_skin_tone_medium_dark_skin_tone:',
+ '👨🏻🤝👨🏼' => ':men_holding_hands_light_skin_tone_medium_light_skin_tone:',
+ '👨🏻🤝👨🏽' => ':men_holding_hands_light_skin_tone_medium_skin_tone:',
+ '👨🏾🤝👨🏿' => ':men_holding_hands_medium_dark_skin_tone_dark_skin_tone:',
+ '👨🏾🤝👨🏻' => ':men_holding_hands_medium_dark_skin_tone_light_skin_tone:',
+ '👨🏾🤝👨🏼' => ':men_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:',
+ '👨🏾🤝👨🏽' => ':men_holding_hands_medium_dark_skin_tone_medium_skin_tone:',
+ '👨🏼🤝👨🏿' => ':men_holding_hands_medium_light_skin_tone_dark_skin_tone:',
+ '👨🏼🤝👨🏻' => ':men_holding_hands_medium_light_skin_tone_light_skin_tone:',
+ '👨🏼🤝👨🏾' => ':men_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:',
+ '👨🏼🤝👨🏽' => ':men_holding_hands_medium_light_skin_tone_medium_skin_tone:',
+ '👨🏽🤝👨🏿' => ':men_holding_hands_medium_skin_tone_dark_skin_tone:',
+ '👨🏽🤝👨🏻' => ':men_holding_hands_medium_skin_tone_light_skin_tone:',
+ '👨🏽🤝👨🏾' => ':men_holding_hands_medium_skin_tone_medium_dark_skin_tone:',
+ '👨🏽🤝👨🏼' => ':men_holding_hands_medium_skin_tone_medium_light_skin_tone:',
+ '🧑🏿🤝🧑🏿' => ':people_holding_hands_dark_skin_tone:',
+ '🧑🏿🤝🧑🏻' => ':people_holding_hands_dark_skin_tone_light_skin_tone:',
+ '🧑🏿🤝🧑🏾' => ':people_holding_hands_dark_skin_tone_medium_dark_skin_tone:',
+ '🧑🏿🤝🧑🏼' => ':people_holding_hands_dark_skin_tone_medium_light_skin_tone:',
+ '🧑🏿🤝🧑🏽' => ':people_holding_hands_dark_skin_tone_medium_skin_tone:',
+ '🧑🏻🤝🧑🏻' => ':people_holding_hands_light_skin_tone:',
+ '🧑🏻🤝🧑🏿' => ':people_holding_hands_light_skin_tone_dark_skin_tone:',
+ '🧑🏻🤝🧑🏾' => ':people_holding_hands_light_skin_tone_medium_dark_skin_tone:',
+ '🧑🏻🤝🧑🏼' => ':people_holding_hands_light_skin_tone_medium_light_skin_tone:',
+ '🧑🏻🤝🧑🏽' => ':people_holding_hands_light_skin_tone_medium_skin_tone:',
+ '🧑🏾🤝🧑🏾' => ':people_holding_hands_medium_dark_skin_tone:',
+ '🧑🏾🤝🧑🏿' => ':people_holding_hands_medium_dark_skin_tone_dark_skin_tone:',
+ '🧑🏾🤝🧑🏻' => ':people_holding_hands_medium_dark_skin_tone_light_skin_tone:',
+ '🧑🏾🤝🧑🏼' => ':people_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:',
+ '🧑🏾🤝🧑🏽' => ':people_holding_hands_medium_dark_skin_tone_medium_skin_tone:',
+ '🧑🏼🤝🧑🏼' => ':people_holding_hands_medium_light_skin_tone:',
+ '🧑🏼🤝🧑🏿' => ':people_holding_hands_medium_light_skin_tone_dark_skin_tone:',
+ '🧑🏼🤝🧑🏻' => ':people_holding_hands_medium_light_skin_tone_light_skin_tone:',
+ '🧑🏼🤝🧑🏾' => ':people_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:',
+ '🧑🏼🤝🧑🏽' => ':people_holding_hands_medium_light_skin_tone_medium_skin_tone:',
+ '🧑🏽🤝🧑🏽' => ':people_holding_hands_medium_skin_tone:',
+ '🧑🏽🤝🧑🏿' => ':people_holding_hands_medium_skin_tone_dark_skin_tone:',
+ '🧑🏽🤝🧑🏻' => ':people_holding_hands_medium_skin_tone_light_skin_tone:',
+ '🧑🏽🤝🧑🏾' => ':people_holding_hands_medium_skin_tone_medium_dark_skin_tone:',
+ '🧑🏽🤝🧑🏼' => ':people_holding_hands_medium_skin_tone_medium_light_skin_tone:',
+ '🧑🏿🦽➡️' => ':person_in_manual_wheelchair_facing_right_dark_skin_tone:',
+ '🧑🏻🦽➡️' => ':person_in_manual_wheelchair_facing_right_light_skin_tone:',
+ '🧑🏾🦽➡️' => ':person_in_manual_wheelchair_facing_right_medium_dark_skin_tone:',
+ '🧑🏼🦽➡️' => ':person_in_manual_wheelchair_facing_right_medium_light_skin_tone:',
+ '🧑🏽🦽➡️' => ':person_in_manual_wheelchair_facing_right_medium_skin_tone:',
+ '🧑🏿🦼➡️' => ':person_in_motorized_wheelchair_facing_right_dark_skin_tone:',
+ '🧑🏻🦼➡️' => ':person_in_motorized_wheelchair_facing_right_light_skin_tone:',
+ '🧑🏾🦼➡️' => ':person_in_motorized_wheelchair_facing_right_medium_dark_skin_tone:',
+ '🧑🏼🦼➡️' => ':person_in_motorized_wheelchair_facing_right_medium_light_skin_tone:',
+ '🧑🏽🦼➡️' => ':person_in_motorized_wheelchair_facing_right_medium_skin_tone:',
+ '🧑🏿🦯➡️' => ':person_with_white_cane_facing_right_dark_skin_tone:',
+ '🧑🏻🦯➡️' => ':person_with_white_cane_facing_right_light_skin_tone:',
+ '🧑🏾🦯➡️' => ':person_with_white_cane_facing_right_medium_dark_skin_tone:',
+ '🧑🏼🦯➡️' => ':person_with_white_cane_facing_right_medium_light_skin_tone:',
+ '🧑🏽🦯➡️' => ':person_with_white_cane_facing_right_medium_skin_tone:',
+ '👩🏿🤝👨🏻' => ':woman_and_man_holding_hands_dark_skin_tone_light_skin_tone:',
+ '👩🏿🤝👨🏾' => ':woman_and_man_holding_hands_dark_skin_tone_medium_dark_skin_tone:',
+ '👩🏿🤝👨🏼' => ':woman_and_man_holding_hands_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏿🤝👨🏽' => ':woman_and_man_holding_hands_dark_skin_tone_medium_skin_tone:',
+ '👩🏻🤝👨🏿' => ':woman_and_man_holding_hands_light_skin_tone_dark_skin_tone:',
+ '👩🏻🤝👨🏾' => ':woman_and_man_holding_hands_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏻🤝👨🏼' => ':woman_and_man_holding_hands_light_skin_tone_medium_light_skin_tone:',
+ '👩🏻🤝👨🏽' => ':woman_and_man_holding_hands_light_skin_tone_medium_skin_tone:',
+ '👩🏾🤝👨🏿' => ':woman_and_man_holding_hands_medium_dark_skin_tone_dark_skin_tone:',
+ '👩🏾🤝👨🏻' => ':woman_and_man_holding_hands_medium_dark_skin_tone_light_skin_tone:',
+ '👩🏾🤝👨🏼' => ':woman_and_man_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏾🤝👨🏽' => ':woman_and_man_holding_hands_medium_dark_skin_tone_medium_skin_tone:',
+ '👩🏼🤝👨🏿' => ':woman_and_man_holding_hands_medium_light_skin_tone_dark_skin_tone:',
+ '👩🏼🤝👨🏻' => ':woman_and_man_holding_hands_medium_light_skin_tone_light_skin_tone:',
+ '👩🏼🤝👨🏾' => ':woman_and_man_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏼🤝👨🏽' => ':woman_and_man_holding_hands_medium_light_skin_tone_medium_skin_tone:',
+ '👩🏽🤝👨🏿' => ':woman_and_man_holding_hands_medium_skin_tone_dark_skin_tone:',
+ '👩🏽🤝👨🏻' => ':woman_and_man_holding_hands_medium_skin_tone_light_skin_tone:',
+ '👩🏽🤝👨🏾' => ':woman_and_man_holding_hands_medium_skin_tone_medium_dark_skin_tone:',
+ '👩🏽🤝👨🏼' => ':woman_and_man_holding_hands_medium_skin_tone_medium_light_skin_tone:',
+ '👩🏿🦽➡️' => ':woman_in_manual_wheelchair_facing_right_dark_skin_tone:',
+ '👩🏻🦽➡️' => ':woman_in_manual_wheelchair_facing_right_light_skin_tone:',
+ '👩🏾🦽➡️' => ':woman_in_manual_wheelchair_facing_right_medium_dark_skin_tone:',
+ '👩🏼🦽➡️' => ':woman_in_manual_wheelchair_facing_right_medium_light_skin_tone:',
+ '👩🏽🦽➡️' => ':woman_in_manual_wheelchair_facing_right_medium_skin_tone:',
+ '👩🏿🦼➡️' => ':woman_in_motorized_wheelchair_facing_right_dark_skin_tone:',
+ '👩🏻🦼➡️' => ':woman_in_motorized_wheelchair_facing_right_light_skin_tone:',
+ '👩🏾🦼➡️' => ':woman_in_motorized_wheelchair_facing_right_medium_dark_skin_tone:',
+ '👩🏼🦼➡️' => ':woman_in_motorized_wheelchair_facing_right_medium_light_skin_tone:',
+ '👩🏽🦼➡️' => ':woman_in_motorized_wheelchair_facing_right_medium_skin_tone:',
+ '🧎♀️➡️' => ':woman_kneeling_facing_right:',
+ '🏃♀️➡️' => ':woman_running_facing_right:',
+ '🚶♀️➡️' => ':woman_walking_facing_right:',
+ '👩🏿🦯➡️' => ':woman_with_white_cane_facing_right_dark_skin_tone:',
+ '👩🏻🦯➡️' => ':woman_with_white_cane_facing_right_light_skin_tone:',
+ '👩🏾🦯➡️' => ':woman_with_white_cane_facing_right_medium_dark_skin_tone:',
+ '👩🏼🦯➡️' => ':woman_with_white_cane_facing_right_medium_light_skin_tone:',
+ '👩🏽🦯➡️' => ':woman_with_white_cane_facing_right_medium_skin_tone:',
+ '👩🏿🤝👩🏻' => ':women_holding_hands_dark_skin_tone_light_skin_tone:',
+ '👩🏿🤝👩🏾' => ':women_holding_hands_dark_skin_tone_medium_dark_skin_tone:',
+ '👩🏿🤝👩🏼' => ':women_holding_hands_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏿🤝👩🏽' => ':women_holding_hands_dark_skin_tone_medium_skin_tone:',
+ '👩🏻🤝👩🏿' => ':women_holding_hands_light_skin_tone_dark_skin_tone:',
+ '👩🏻🤝👩🏾' => ':women_holding_hands_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏻🤝👩🏼' => ':women_holding_hands_light_skin_tone_medium_light_skin_tone:',
+ '👩🏻🤝👩🏽' => ':women_holding_hands_light_skin_tone_medium_skin_tone:',
+ '👩🏾🤝👩🏿' => ':women_holding_hands_medium_dark_skin_tone_dark_skin_tone:',
+ '👩🏾🤝👩🏻' => ':women_holding_hands_medium_dark_skin_tone_light_skin_tone:',
+ '👩🏾🤝👩🏼' => ':women_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:',
+ '👩🏾🤝👩🏽' => ':women_holding_hands_medium_dark_skin_tone_medium_skin_tone:',
+ '👩🏼🤝👩🏿' => ':women_holding_hands_medium_light_skin_tone_dark_skin_tone:',
+ '👩🏼🤝👩🏻' => ':women_holding_hands_medium_light_skin_tone_light_skin_tone:',
+ '👩🏼🤝👩🏾' => ':women_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:',
+ '👩🏼🤝👩🏽' => ':women_holding_hands_medium_light_skin_tone_medium_skin_tone:',
+ '👩🏽🤝👩🏿' => ':women_holding_hands_medium_skin_tone_dark_skin_tone:',
+ '👩🏽🤝👩🏻' => ':women_holding_hands_medium_skin_tone_light_skin_tone:',
+ '👩🏽🤝👩🏾' => ':women_holding_hands_medium_skin_tone_medium_dark_skin_tone:',
+ '👩🏽🤝👩🏼' => ':women_holding_hands_medium_skin_tone_medium_light_skin_tone:',
'👨❤️👨' => ':couple_mm:',
+ '👩❤️👨' => ':couple_with_heart_woman_man:',
'👩❤️👩' => ':couple_ww:',
+ '👨🦽➡️' => ':man_in_manual_wheelchair_facing_right:',
+ '👨🦼➡️' => ':man_in_motorized_wheelchair_facing_right:',
+ '👨🦯➡️' => ':man_with_white_cane_facing_right:',
+ '🧑🦽➡️' => ':person_in_manual_wheelchair_facing_right:',
+ '🧑🦼➡️' => ':person_in_motorized_wheelchair_facing_right:',
+ '🧑🦯➡️' => ':person_with_white_cane_facing_right:',
+ '👩🦽➡️' => ':woman_in_manual_wheelchair_facing_right:',
+ '👩🦼➡️' => ':woman_in_motorized_wheelchair_facing_right:',
+ '👩🦯➡️' => ':woman_with_white_cane_facing_right:',
+ '🧏🏿♂️' => ':deaf_man_dark_skin_tone:',
+ '🧏🏻♂️' => ':deaf_man_light_skin_tone:',
+ '🧏🏾♂️' => ':deaf_man_medium_dark_skin_tone:',
+ '🧏🏼♂️' => ':deaf_man_medium_light_skin_tone:',
+ '🧏🏽♂️' => ':deaf_man_medium_skin_tone:',
+ '🧏🏿♀️' => ':deaf_woman_dark_skin_tone:',
+ '🧏🏻♀️' => ':deaf_woman_light_skin_tone:',
+ '🧏🏾♀️' => ':deaf_woman_medium_dark_skin_tone:',
+ '🧏🏼♀️' => ':deaf_woman_medium_light_skin_tone:',
+ '🧏🏽♀️' => ':deaf_woman_medium_skin_tone:',
+ '👁️🗨️' => ':eye_in_speech_bubble:',
+ '🧑🧑🧒' => ':family_adult_adult_child:',
+ '🧑🧒🧒' => ':family_adult_child_child:',
+ '👨👦👦' => ':family_man_boy_boy:',
+ '👨👧👦' => ':family_man_girl_boy:',
+ '👨👧👧' => ':family_man_girl_girl:',
+ '👨👩👦' => ':family_man_woman_boy:',
'👨👨👦' => ':family_mmb:',
'👨👨👧' => ':family_mmg:',
'👨👩👧' => ':family_mwg:',
+ '👩👦👦' => ':family_woman_boy_boy:',
+ '👩👧👦' => ':family_woman_girl_boy:',
+ '👩👧👧' => ':family_woman_girl_girl:',
'👩👩👦' => ':family_wwb:',
'👩👩👧' => ':family_wwg:',
+ '🫱🏿🫲🏻' => ':handshake_dark_skin_tone_light_skin_tone:',
+ '🫱🏿🫲🏾' => ':handshake_dark_skin_tone_medium_dark_skin_tone:',
+ '🫱🏿🫲🏼' => ':handshake_dark_skin_tone_medium_light_skin_tone:',
+ '🫱🏿🫲🏽' => ':handshake_dark_skin_tone_medium_skin_tone:',
+ '🫱🏻🫲🏿' => ':handshake_light_skin_tone_dark_skin_tone:',
+ '🫱🏻🫲🏾' => ':handshake_light_skin_tone_medium_dark_skin_tone:',
+ '🫱🏻🫲🏼' => ':handshake_light_skin_tone_medium_light_skin_tone:',
+ '🫱🏻🫲🏽' => ':handshake_light_skin_tone_medium_skin_tone:',
+ '🫱🏾🫲🏿' => ':handshake_medium_dark_skin_tone_dark_skin_tone:',
+ '🫱🏾🫲🏻' => ':handshake_medium_dark_skin_tone_light_skin_tone:',
+ '🫱🏾🫲🏼' => ':handshake_medium_dark_skin_tone_medium_light_skin_tone:',
+ '🫱🏾🫲🏽' => ':handshake_medium_dark_skin_tone_medium_skin_tone:',
+ '🫱🏼🫲🏿' => ':handshake_medium_light_skin_tone_dark_skin_tone:',
+ '🫱🏼🫲🏻' => ':handshake_medium_light_skin_tone_light_skin_tone:',
+ '🫱🏼🫲🏾' => ':handshake_medium_light_skin_tone_medium_dark_skin_tone:',
+ '🫱🏼🫲🏽' => ':handshake_medium_light_skin_tone_medium_skin_tone:',
+ '🫱🏽🫲🏿' => ':handshake_medium_skin_tone_dark_skin_tone:',
+ '🫱🏽🫲🏻' => ':handshake_medium_skin_tone_light_skin_tone:',
+ '🫱🏽🫲🏾' => ':handshake_medium_skin_tone_medium_dark_skin_tone:',
+ '🫱🏽🫲🏼' => ':handshake_medium_skin_tone_medium_light_skin_tone:',
+ '🧑🏿⚕️' => ':health_worker_dark_skin_tone:',
+ '🧑🏻⚕️' => ':health_worker_light_skin_tone:',
+ '🧑🏾⚕️' => ':health_worker_medium_dark_skin_tone:',
+ '🧑🏼⚕️' => ':health_worker_medium_light_skin_tone:',
+ '🧑🏽⚕️' => ':health_worker_medium_skin_tone:',
+ '🧑🏿⚖️' => ':judge_dark_skin_tone:',
+ '🧑🏻⚖️' => ':judge_light_skin_tone:',
+ '🧑🏾⚖️' => ':judge_medium_dark_skin_tone:',
+ '🧑🏼⚖️' => ':judge_medium_light_skin_tone:',
+ '🧑🏽⚖️' => ':judge_medium_skin_tone:',
+ '🚴🏿♂️' => ':man_biking_dark_skin_tone:',
+ '🚴🏻♂️' => ':man_biking_light_skin_tone:',
+ '🚴🏾♂️' => ':man_biking_medium_dark_skin_tone:',
+ '🚴🏼♂️' => ':man_biking_medium_light_skin_tone:',
+ '🚴🏽♂️' => ':man_biking_medium_skin_tone:',
+ '⛹️♂️' => ':man_bouncing_ball:',
+ '⛹🏿♂️' => ':man_bouncing_ball_dark_skin_tone:',
+ '⛹🏻♂️' => ':man_bouncing_ball_light_skin_tone:',
+ '⛹🏾♂️' => ':man_bouncing_ball_medium_dark_skin_tone:',
+ '⛹🏼♂️' => ':man_bouncing_ball_medium_light_skin_tone:',
+ '⛹🏽♂️' => ':man_bouncing_ball_medium_skin_tone:',
+ '🙇🏿♂️' => ':man_bowing_dark_skin_tone:',
+ '🙇🏻♂️' => ':man_bowing_light_skin_tone:',
+ '🙇🏾♂️' => ':man_bowing_medium_dark_skin_tone:',
+ '🙇🏼♂️' => ':man_bowing_medium_light_skin_tone:',
+ '🙇🏽♂️' => ':man_bowing_medium_skin_tone:',
+ '🤸🏿♂️' => ':man_cartwheeling_dark_skin_tone:',
+ '🤸🏻♂️' => ':man_cartwheeling_light_skin_tone:',
+ '🤸🏾♂️' => ':man_cartwheeling_medium_dark_skin_tone:',
+ '🤸🏼♂️' => ':man_cartwheeling_medium_light_skin_tone:',
+ '🤸🏽♂️' => ':man_cartwheeling_medium_skin_tone:',
+ '🧗🏿♂️' => ':man_climbing_dark_skin_tone:',
+ '🧗🏻♂️' => ':man_climbing_light_skin_tone:',
+ '🧗🏾♂️' => ':man_climbing_medium_dark_skin_tone:',
+ '🧗🏼♂️' => ':man_climbing_medium_light_skin_tone:',
+ '🧗🏽♂️' => ':man_climbing_medium_skin_tone:',
+ '👷🏿♂️' => ':man_construction_worker_dark_skin_tone:',
+ '👷🏻♂️' => ':man_construction_worker_light_skin_tone:',
+ '👷🏾♂️' => ':man_construction_worker_medium_dark_skin_tone:',
+ '👷🏼♂️' => ':man_construction_worker_medium_light_skin_tone:',
+ '👷🏽♂️' => ':man_construction_worker_medium_skin_tone:',
+ '🧔🏿♂️' => ':man_dark_skin_tone_beard:',
+ '👱🏿♂️' => ':man_dark_skin_tone_blond_hair:',
+ '🕵️♂️' => ':man_detective:',
+ '🕵🏿♂️' => ':man_detective_dark_skin_tone:',
+ '🕵🏻♂️' => ':man_detective_light_skin_tone:',
+ '🕵🏾♂️' => ':man_detective_medium_dark_skin_tone:',
+ '🕵🏼♂️' => ':man_detective_medium_light_skin_tone:',
+ '🕵🏽♂️' => ':man_detective_medium_skin_tone:',
+ '🧝🏿♂️' => ':man_elf_dark_skin_tone:',
+ '🧝🏻♂️' => ':man_elf_light_skin_tone:',
+ '🧝🏾♂️' => ':man_elf_medium_dark_skin_tone:',
+ '🧝🏼♂️' => ':man_elf_medium_light_skin_tone:',
+ '🧝🏽♂️' => ':man_elf_medium_skin_tone:',
+ '🤦🏿♂️' => ':man_facepalming_dark_skin_tone:',
+ '🤦🏻♂️' => ':man_facepalming_light_skin_tone:',
+ '🤦🏾♂️' => ':man_facepalming_medium_dark_skin_tone:',
+ '🤦🏼♂️' => ':man_facepalming_medium_light_skin_tone:',
+ '🤦🏽♂️' => ':man_facepalming_medium_skin_tone:',
+ '🧚🏿♂️' => ':man_fairy_dark_skin_tone:',
+ '🧚🏻♂️' => ':man_fairy_light_skin_tone:',
+ '🧚🏾♂️' => ':man_fairy_medium_dark_skin_tone:',
+ '🧚🏼♂️' => ':man_fairy_medium_light_skin_tone:',
+ '🧚🏽♂️' => ':man_fairy_medium_skin_tone:',
+ '🙍🏿♂️' => ':man_frowning_dark_skin_tone:',
+ '🙍🏻♂️' => ':man_frowning_light_skin_tone:',
+ '🙍🏾♂️' => ':man_frowning_medium_dark_skin_tone:',
+ '🙍🏼♂️' => ':man_frowning_medium_light_skin_tone:',
+ '🙍🏽♂️' => ':man_frowning_medium_skin_tone:',
+ '🙅🏿♂️' => ':man_gesturing_no_dark_skin_tone:',
+ '🙅🏻♂️' => ':man_gesturing_no_light_skin_tone:',
+ '🙅🏾♂️' => ':man_gesturing_no_medium_dark_skin_tone:',
+ '🙅🏼♂️' => ':man_gesturing_no_medium_light_skin_tone:',
+ '🙅🏽♂️' => ':man_gesturing_no_medium_skin_tone:',
+ '🙆🏿♂️' => ':man_gesturing_ok_dark_skin_tone:',
+ '🙆🏻♂️' => ':man_gesturing_ok_light_skin_tone:',
+ '🙆🏾♂️' => ':man_gesturing_ok_medium_dark_skin_tone:',
+ '🙆🏼♂️' => ':man_gesturing_ok_medium_light_skin_tone:',
+ '🙆🏽♂️' => ':man_gesturing_ok_medium_skin_tone:',
+ '💇🏿♂️' => ':man_getting_haircut_dark_skin_tone:',
+ '💇🏻♂️' => ':man_getting_haircut_light_skin_tone:',
+ '💇🏾♂️' => ':man_getting_haircut_medium_dark_skin_tone:',
+ '💇🏼♂️' => ':man_getting_haircut_medium_light_skin_tone:',
+ '💇🏽♂️' => ':man_getting_haircut_medium_skin_tone:',
+ '💆🏿♂️' => ':man_getting_massage_dark_skin_tone:',
+ '💆🏻♂️' => ':man_getting_massage_light_skin_tone:',
+ '💆🏾♂️' => ':man_getting_massage_medium_dark_skin_tone:',
+ '💆🏼♂️' => ':man_getting_massage_medium_light_skin_tone:',
+ '💆🏽♂️' => ':man_getting_massage_medium_skin_tone:',
+ '🏌️♂️' => ':man_golfing:',
+ '🏌🏿♂️' => ':man_golfing_dark_skin_tone:',
+ '🏌🏻♂️' => ':man_golfing_light_skin_tone:',
+ '🏌🏾♂️' => ':man_golfing_medium_dark_skin_tone:',
+ '🏌🏼♂️' => ':man_golfing_medium_light_skin_tone:',
+ '🏌🏽♂️' => ':man_golfing_medium_skin_tone:',
+ '💂🏿♂️' => ':man_guard_dark_skin_tone:',
+ '💂🏻♂️' => ':man_guard_light_skin_tone:',
+ '💂🏾♂️' => ':man_guard_medium_dark_skin_tone:',
+ '💂🏼♂️' => ':man_guard_medium_light_skin_tone:',
+ '💂🏽♂️' => ':man_guard_medium_skin_tone:',
+ '👨🏿⚕️' => ':man_health_worker_dark_skin_tone:',
+ '👨🏻⚕️' => ':man_health_worker_light_skin_tone:',
+ '👨🏾⚕️' => ':man_health_worker_medium_dark_skin_tone:',
+ '👨🏼⚕️' => ':man_health_worker_medium_light_skin_tone:',
+ '👨🏽⚕️' => ':man_health_worker_medium_skin_tone:',
+ '🧘🏿♂️' => ':man_in_lotus_position_dark_skin_tone:',
+ '🧘🏻♂️' => ':man_in_lotus_position_light_skin_tone:',
+ '🧘🏾♂️' => ':man_in_lotus_position_medium_dark_skin_tone:',
+ '🧘🏼♂️' => ':man_in_lotus_position_medium_light_skin_tone:',
+ '🧘🏽♂️' => ':man_in_lotus_position_medium_skin_tone:',
+ '🧖🏿♂️' => ':man_in_steamy_room_dark_skin_tone:',
+ '🧖🏻♂️' => ':man_in_steamy_room_light_skin_tone:',
+ '🧖🏾♂️' => ':man_in_steamy_room_medium_dark_skin_tone:',
+ '🧖🏼♂️' => ':man_in_steamy_room_medium_light_skin_tone:',
+ '🧖🏽♂️' => ':man_in_steamy_room_medium_skin_tone:',
+ '🤵🏿♂️' => ':man_in_tuxedo_dark_skin_tone:',
+ '🤵🏻♂️' => ':man_in_tuxedo_light_skin_tone:',
+ '🤵🏾♂️' => ':man_in_tuxedo_medium_dark_skin_tone:',
+ '🤵🏼♂️' => ':man_in_tuxedo_medium_light_skin_tone:',
+ '🤵🏽♂️' => ':man_in_tuxedo_medium_skin_tone:',
+ '👨🏿⚖️' => ':man_judge_dark_skin_tone:',
+ '👨🏻⚖️' => ':man_judge_light_skin_tone:',
+ '👨🏾⚖️' => ':man_judge_medium_dark_skin_tone:',
+ '👨🏼⚖️' => ':man_judge_medium_light_skin_tone:',
+ '👨🏽⚖️' => ':man_judge_medium_skin_tone:',
+ '🤹🏿♂️' => ':man_juggling_dark_skin_tone:',
+ '🤹🏻♂️' => ':man_juggling_light_skin_tone:',
+ '🤹🏾♂️' => ':man_juggling_medium_dark_skin_tone:',
+ '🤹🏼♂️' => ':man_juggling_medium_light_skin_tone:',
+ '🤹🏽♂️' => ':man_juggling_medium_skin_tone:',
+ '🧎🏿♂️' => ':man_kneeling_dark_skin_tone:',
+ '🧎🏻♂️' => ':man_kneeling_light_skin_tone:',
+ '🧎🏾♂️' => ':man_kneeling_medium_dark_skin_tone:',
+ '🧎🏼♂️' => ':man_kneeling_medium_light_skin_tone:',
+ '🧎🏽♂️' => ':man_kneeling_medium_skin_tone:',
+ '🏋️♂️' => ':man_lifting_weights:',
+ '🏋🏿♂️' => ':man_lifting_weights_dark_skin_tone:',
+ '🏋🏻♂️' => ':man_lifting_weights_light_skin_tone:',
+ '🏋🏾♂️' => ':man_lifting_weights_medium_dark_skin_tone:',
+ '🏋🏼♂️' => ':man_lifting_weights_medium_light_skin_tone:',
+ '🏋🏽♂️' => ':man_lifting_weights_medium_skin_tone:',
+ '🧔🏻♂️' => ':man_light_skin_tone_beard:',
+ '👱🏻♂️' => ':man_light_skin_tone_blond_hair:',
+ '🧙🏿♂️' => ':man_mage_dark_skin_tone:',
+ '🧙🏻♂️' => ':man_mage_light_skin_tone:',
+ '🧙🏾♂️' => ':man_mage_medium_dark_skin_tone:',
+ '🧙🏼♂️' => ':man_mage_medium_light_skin_tone:',
+ '🧙🏽♂️' => ':man_mage_medium_skin_tone:',
+ '🧔🏾♂️' => ':man_medium_dark_skin_tone_beard:',
+ '👱🏾♂️' => ':man_medium_dark_skin_tone_blond_hair:',
+ '🧔🏼♂️' => ':man_medium_light_skin_tone_beard:',
+ '👱🏼♂️' => ':man_medium_light_skin_tone_blond_hair:',
+ '🧔🏽♂️' => ':man_medium_skin_tone_beard:',
+ '👱🏽♂️' => ':man_medium_skin_tone_blond_hair:',
+ '🚵🏿♂️' => ':man_mountain_biking_dark_skin_tone:',
+ '🚵🏻♂️' => ':man_mountain_biking_light_skin_tone:',
+ '🚵🏾♂️' => ':man_mountain_biking_medium_dark_skin_tone:',
+ '🚵🏼♂️' => ':man_mountain_biking_medium_light_skin_tone:',
+ '🚵🏽♂️' => ':man_mountain_biking_medium_skin_tone:',
+ '👨🏿✈️' => ':man_pilot_dark_skin_tone:',
+ '👨🏻✈️' => ':man_pilot_light_skin_tone:',
+ '👨🏾✈️' => ':man_pilot_medium_dark_skin_tone:',
+ '👨🏼✈️' => ':man_pilot_medium_light_skin_tone:',
+ '👨🏽✈️' => ':man_pilot_medium_skin_tone:',
+ '🤾🏿♂️' => ':man_playing_handball_dark_skin_tone:',
+ '🤾🏻♂️' => ':man_playing_handball_light_skin_tone:',
+ '🤾🏾♂️' => ':man_playing_handball_medium_dark_skin_tone:',
+ '🤾🏼♂️' => ':man_playing_handball_medium_light_skin_tone:',
+ '🤾🏽♂️' => ':man_playing_handball_medium_skin_tone:',
+ '🤽🏿♂️' => ':man_playing_water_polo_dark_skin_tone:',
+ '🤽🏻♂️' => ':man_playing_water_polo_light_skin_tone:',
+ '🤽🏾♂️' => ':man_playing_water_polo_medium_dark_skin_tone:',
+ '🤽🏼♂️' => ':man_playing_water_polo_medium_light_skin_tone:',
+ '🤽🏽♂️' => ':man_playing_water_polo_medium_skin_tone:',
+ '👮🏿♂️' => ':man_police_officer_dark_skin_tone:',
+ '👮🏻♂️' => ':man_police_officer_light_skin_tone:',
+ '👮🏾♂️' => ':man_police_officer_medium_dark_skin_tone:',
+ '👮🏼♂️' => ':man_police_officer_medium_light_skin_tone:',
+ '👮🏽♂️' => ':man_police_officer_medium_skin_tone:',
+ '🙎🏿♂️' => ':man_pouting_dark_skin_tone:',
+ '🙎🏻♂️' => ':man_pouting_light_skin_tone:',
+ '🙎🏾♂️' => ':man_pouting_medium_dark_skin_tone:',
+ '🙎🏼♂️' => ':man_pouting_medium_light_skin_tone:',
+ '🙎🏽♂️' => ':man_pouting_medium_skin_tone:',
+ '🙋🏿♂️' => ':man_raising_hand_dark_skin_tone:',
+ '🙋🏻♂️' => ':man_raising_hand_light_skin_tone:',
+ '🙋🏾♂️' => ':man_raising_hand_medium_dark_skin_tone:',
+ '🙋🏼♂️' => ':man_raising_hand_medium_light_skin_tone:',
+ '🙋🏽♂️' => ':man_raising_hand_medium_skin_tone:',
+ '🚣🏿♂️' => ':man_rowing_boat_dark_skin_tone:',
+ '🚣🏻♂️' => ':man_rowing_boat_light_skin_tone:',
+ '🚣🏾♂️' => ':man_rowing_boat_medium_dark_skin_tone:',
+ '🚣🏼♂️' => ':man_rowing_boat_medium_light_skin_tone:',
+ '🚣🏽♂️' => ':man_rowing_boat_medium_skin_tone:',
+ '🏃🏿♂️' => ':man_running_dark_skin_tone:',
+ '🏃🏻♂️' => ':man_running_light_skin_tone:',
+ '🏃🏾♂️' => ':man_running_medium_dark_skin_tone:',
+ '🏃🏼♂️' => ':man_running_medium_light_skin_tone:',
+ '🏃🏽♂️' => ':man_running_medium_skin_tone:',
+ '🤷🏿♂️' => ':man_shrugging_dark_skin_tone:',
+ '🤷🏻♂️' => ':man_shrugging_light_skin_tone:',
+ '🤷🏾♂️' => ':man_shrugging_medium_dark_skin_tone:',
+ '🤷🏼♂️' => ':man_shrugging_medium_light_skin_tone:',
+ '🤷🏽♂️' => ':man_shrugging_medium_skin_tone:',
+ '🧍🏿♂️' => ':man_standing_dark_skin_tone:',
+ '🧍🏻♂️' => ':man_standing_light_skin_tone:',
+ '🧍🏾♂️' => ':man_standing_medium_dark_skin_tone:',
+ '🧍🏼♂️' => ':man_standing_medium_light_skin_tone:',
+ '🧍🏽♂️' => ':man_standing_medium_skin_tone:',
+ '🦸🏿♂️' => ':man_superhero_dark_skin_tone:',
+ '🦸🏻♂️' => ':man_superhero_light_skin_tone:',
+ '🦸🏾♂️' => ':man_superhero_medium_dark_skin_tone:',
+ '🦸🏼♂️' => ':man_superhero_medium_light_skin_tone:',
+ '🦸🏽♂️' => ':man_superhero_medium_skin_tone:',
+ '🦹🏿♂️' => ':man_supervillain_dark_skin_tone:',
+ '🦹🏻♂️' => ':man_supervillain_light_skin_tone:',
+ '🦹🏾♂️' => ':man_supervillain_medium_dark_skin_tone:',
+ '🦹🏼♂️' => ':man_supervillain_medium_light_skin_tone:',
+ '🦹🏽♂️' => ':man_supervillain_medium_skin_tone:',
+ '🏄🏿♂️' => ':man_surfing_dark_skin_tone:',
+ '🏄🏻♂️' => ':man_surfing_light_skin_tone:',
+ '🏄🏾♂️' => ':man_surfing_medium_dark_skin_tone:',
+ '🏄🏼♂️' => ':man_surfing_medium_light_skin_tone:',
+ '🏄🏽♂️' => ':man_surfing_medium_skin_tone:',
+ '🏊🏿♂️' => ':man_swimming_dark_skin_tone:',
+ '🏊🏻♂️' => ':man_swimming_light_skin_tone:',
+ '🏊🏾♂️' => ':man_swimming_medium_dark_skin_tone:',
+ '🏊🏼♂️' => ':man_swimming_medium_light_skin_tone:',
+ '🏊🏽♂️' => ':man_swimming_medium_skin_tone:',
+ '💁🏿♂️' => ':man_tipping_hand_dark_skin_tone:',
+ '💁🏻♂️' => ':man_tipping_hand_light_skin_tone:',
+ '💁🏾♂️' => ':man_tipping_hand_medium_dark_skin_tone:',
+ '💁🏼♂️' => ':man_tipping_hand_medium_light_skin_tone:',
+ '💁🏽♂️' => ':man_tipping_hand_medium_skin_tone:',
+ '🧛🏿♂️' => ':man_vampire_dark_skin_tone:',
+ '🧛🏻♂️' => ':man_vampire_light_skin_tone:',
+ '🧛🏾♂️' => ':man_vampire_medium_dark_skin_tone:',
+ '🧛🏼♂️' => ':man_vampire_medium_light_skin_tone:',
+ '🧛🏽♂️' => ':man_vampire_medium_skin_tone:',
+ '🚶🏿♂️' => ':man_walking_dark_skin_tone:',
+ '🚶🏻♂️' => ':man_walking_light_skin_tone:',
+ '🚶🏾♂️' => ':man_walking_medium_dark_skin_tone:',
+ '🚶🏼♂️' => ':man_walking_medium_light_skin_tone:',
+ '🚶🏽♂️' => ':man_walking_medium_skin_tone:',
+ '👳🏿♂️' => ':man_wearing_turban_dark_skin_tone:',
+ '👳🏻♂️' => ':man_wearing_turban_light_skin_tone:',
+ '👳🏾♂️' => ':man_wearing_turban_medium_dark_skin_tone:',
+ '👳🏼♂️' => ':man_wearing_turban_medium_light_skin_tone:',
+ '👳🏽♂️' => ':man_wearing_turban_medium_skin_tone:',
+ '👰🏿♂️' => ':man_with_veil_dark_skin_tone:',
+ '👰🏻♂️' => ':man_with_veil_light_skin_tone:',
+ '👰🏾♂️' => ':man_with_veil_medium_dark_skin_tone:',
+ '👰🏼♂️' => ':man_with_veil_medium_light_skin_tone:',
+ '👰🏽♂️' => ':man_with_veil_medium_skin_tone:',
+ '🧜🏿♀️' => ':mermaid_dark_skin_tone:',
+ '🧜🏻♀️' => ':mermaid_light_skin_tone:',
+ '🧜🏾♀️' => ':mermaid_medium_dark_skin_tone:',
+ '🧜🏼♀️' => ':mermaid_medium_light_skin_tone:',
+ '🧜🏽♀️' => ':mermaid_medium_skin_tone:',
+ '🧜🏿♂️' => ':merman_dark_skin_tone:',
+ '🧜🏻♂️' => ':merman_light_skin_tone:',
+ '🧜🏾♂️' => ':merman_medium_dark_skin_tone:',
+ '🧜🏼♂️' => ':merman_medium_light_skin_tone:',
+ '🧜🏽♂️' => ':merman_medium_skin_tone:',
+ '🧑🤝🧑' => ':people_holding_hands:',
+ '🧎🏿➡️' => ':person_kneeling_facing_right_dark_skin_tone:',
+ '🧎🏻➡️' => ':person_kneeling_facing_right_light_skin_tone:',
+ '🧎🏾➡️' => ':person_kneeling_facing_right_medium_dark_skin_tone:',
+ '🧎🏼➡️' => ':person_kneeling_facing_right_medium_light_skin_tone:',
+ '🧎🏽➡️' => ':person_kneeling_facing_right_medium_skin_tone:',
+ '🏃🏿➡️' => ':person_running_facing_right_dark_skin_tone:',
+ '🏃🏻➡️' => ':person_running_facing_right_light_skin_tone:',
+ '🏃🏾➡️' => ':person_running_facing_right_medium_dark_skin_tone:',
+ '🏃🏼➡️' => ':person_running_facing_right_medium_light_skin_tone:',
+ '🏃🏽➡️' => ':person_running_facing_right_medium_skin_tone:',
+ '🚶🏿➡️' => ':person_walking_facing_right_dark_skin_tone:',
+ '🚶🏻➡️' => ':person_walking_facing_right_light_skin_tone:',
+ '🚶🏾➡️' => ':person_walking_facing_right_medium_dark_skin_tone:',
+ '🚶🏼➡️' => ':person_walking_facing_right_medium_light_skin_tone:',
+ '🚶🏽➡️' => ':person_walking_facing_right_medium_skin_tone:',
+ '🧑🏿✈️' => ':pilot_dark_skin_tone:',
+ '🧑🏻✈️' => ':pilot_light_skin_tone:',
+ '🧑🏾✈️' => ':pilot_medium_dark_skin_tone:',
+ '🧑🏼✈️' => ':pilot_medium_light_skin_tone:',
+ '🧑🏽✈️' => ':pilot_medium_skin_tone:',
+ '🏳️⚧️' => ':transgender_flag:',
+ '🚴🏿♀️' => ':woman_biking_dark_skin_tone:',
+ '🚴🏻♀️' => ':woman_biking_light_skin_tone:',
+ '🚴🏾♀️' => ':woman_biking_medium_dark_skin_tone:',
+ '🚴🏼♀️' => ':woman_biking_medium_light_skin_tone:',
+ '🚴🏽♀️' => ':woman_biking_medium_skin_tone:',
+ '⛹️♀️' => ':woman_bouncing_ball:',
+ '⛹🏿♀️' => ':woman_bouncing_ball_dark_skin_tone:',
+ '⛹🏻♀️' => ':woman_bouncing_ball_light_skin_tone:',
+ '⛹🏾♀️' => ':woman_bouncing_ball_medium_dark_skin_tone:',
+ '⛹🏼♀️' => ':woman_bouncing_ball_medium_light_skin_tone:',
+ '⛹🏽♀️' => ':woman_bouncing_ball_medium_skin_tone:',
+ '🙇🏿♀️' => ':woman_bowing_dark_skin_tone:',
+ '🙇🏻♀️' => ':woman_bowing_light_skin_tone:',
+ '🙇🏾♀️' => ':woman_bowing_medium_dark_skin_tone:',
+ '🙇🏼♀️' => ':woman_bowing_medium_light_skin_tone:',
+ '🙇🏽♀️' => ':woman_bowing_medium_skin_tone:',
+ '🤸🏿♀️' => ':woman_cartwheeling_dark_skin_tone:',
+ '🤸🏻♀️' => ':woman_cartwheeling_light_skin_tone:',
+ '🤸🏾♀️' => ':woman_cartwheeling_medium_dark_skin_tone:',
+ '🤸🏼♀️' => ':woman_cartwheeling_medium_light_skin_tone:',
+ '🤸🏽♀️' => ':woman_cartwheeling_medium_skin_tone:',
+ '🧗🏿♀️' => ':woman_climbing_dark_skin_tone:',
+ '🧗🏻♀️' => ':woman_climbing_light_skin_tone:',
+ '🧗🏾♀️' => ':woman_climbing_medium_dark_skin_tone:',
+ '🧗🏼♀️' => ':woman_climbing_medium_light_skin_tone:',
+ '🧗🏽♀️' => ':woman_climbing_medium_skin_tone:',
+ '👷🏿♀️' => ':woman_construction_worker_dark_skin_tone:',
+ '👷🏻♀️' => ':woman_construction_worker_light_skin_tone:',
+ '👷🏾♀️' => ':woman_construction_worker_medium_dark_skin_tone:',
+ '👷🏼♀️' => ':woman_construction_worker_medium_light_skin_tone:',
+ '👷🏽♀️' => ':woman_construction_worker_medium_skin_tone:',
+ '🧔🏿♀️' => ':woman_dark_skin_tone_beard:',
+ '👱🏿♀️' => ':woman_dark_skin_tone_blond_hair:',
+ '🕵️♀️' => ':woman_detective:',
+ '🕵🏿♀️' => ':woman_detective_dark_skin_tone:',
+ '🕵🏻♀️' => ':woman_detective_light_skin_tone:',
+ '🕵🏾♀️' => ':woman_detective_medium_dark_skin_tone:',
+ '🕵🏼♀️' => ':woman_detective_medium_light_skin_tone:',
+ '🕵🏽♀️' => ':woman_detective_medium_skin_tone:',
+ '🧝🏿♀️' => ':woman_elf_dark_skin_tone:',
+ '🧝🏻♀️' => ':woman_elf_light_skin_tone:',
+ '🧝🏾♀️' => ':woman_elf_medium_dark_skin_tone:',
+ '🧝🏼♀️' => ':woman_elf_medium_light_skin_tone:',
+ '🧝🏽♀️' => ':woman_elf_medium_skin_tone:',
+ '🤦🏿♀️' => ':woman_facepalming_dark_skin_tone:',
+ '🤦🏻♀️' => ':woman_facepalming_light_skin_tone:',
+ '🤦🏾♀️' => ':woman_facepalming_medium_dark_skin_tone:',
+ '🤦🏼♀️' => ':woman_facepalming_medium_light_skin_tone:',
+ '🤦🏽♀️' => ':woman_facepalming_medium_skin_tone:',
+ '🧚🏿♀️' => ':woman_fairy_dark_skin_tone:',
+ '🧚🏻♀️' => ':woman_fairy_light_skin_tone:',
+ '🧚🏾♀️' => ':woman_fairy_medium_dark_skin_tone:',
+ '🧚🏼♀️' => ':woman_fairy_medium_light_skin_tone:',
+ '🧚🏽♀️' => ':woman_fairy_medium_skin_tone:',
+ '🙍🏿♀️' => ':woman_frowning_dark_skin_tone:',
+ '🙍🏻♀️' => ':woman_frowning_light_skin_tone:',
+ '🙍🏾♀️' => ':woman_frowning_medium_dark_skin_tone:',
+ '🙍🏼♀️' => ':woman_frowning_medium_light_skin_tone:',
+ '🙍🏽♀️' => ':woman_frowning_medium_skin_tone:',
+ '🙅🏿♀️' => ':woman_gesturing_no_dark_skin_tone:',
+ '🙅🏻♀️' => ':woman_gesturing_no_light_skin_tone:',
+ '🙅🏾♀️' => ':woman_gesturing_no_medium_dark_skin_tone:',
+ '🙅🏼♀️' => ':woman_gesturing_no_medium_light_skin_tone:',
+ '🙅🏽♀️' => ':woman_gesturing_no_medium_skin_tone:',
+ '🙆🏿♀️' => ':woman_gesturing_ok_dark_skin_tone:',
+ '🙆🏻♀️' => ':woman_gesturing_ok_light_skin_tone:',
+ '🙆🏾♀️' => ':woman_gesturing_ok_medium_dark_skin_tone:',
+ '🙆🏼♀️' => ':woman_gesturing_ok_medium_light_skin_tone:',
+ '🙆🏽♀️' => ':woman_gesturing_ok_medium_skin_tone:',
+ '💇🏿♀️' => ':woman_getting_haircut_dark_skin_tone:',
+ '💇🏻♀️' => ':woman_getting_haircut_light_skin_tone:',
+ '💇🏾♀️' => ':woman_getting_haircut_medium_dark_skin_tone:',
+ '💇🏼♀️' => ':woman_getting_haircut_medium_light_skin_tone:',
+ '💇🏽♀️' => ':woman_getting_haircut_medium_skin_tone:',
+ '💆🏿♀️' => ':woman_getting_massage_dark_skin_tone:',
+ '💆🏻♀️' => ':woman_getting_massage_light_skin_tone:',
+ '💆🏾♀️' => ':woman_getting_massage_medium_dark_skin_tone:',
+ '💆🏼♀️' => ':woman_getting_massage_medium_light_skin_tone:',
+ '💆🏽♀️' => ':woman_getting_massage_medium_skin_tone:',
+ '🏌️♀️' => ':woman_golfing:',
+ '🏌🏿♀️' => ':woman_golfing_dark_skin_tone:',
+ '🏌🏻♀️' => ':woman_golfing_light_skin_tone:',
+ '🏌🏾♀️' => ':woman_golfing_medium_dark_skin_tone:',
+ '🏌🏼♀️' => ':woman_golfing_medium_light_skin_tone:',
+ '🏌🏽♀️' => ':woman_golfing_medium_skin_tone:',
+ '💂🏿♀️' => ':woman_guard_dark_skin_tone:',
+ '💂🏻♀️' => ':woman_guard_light_skin_tone:',
+ '💂🏾♀️' => ':woman_guard_medium_dark_skin_tone:',
+ '💂🏼♀️' => ':woman_guard_medium_light_skin_tone:',
+ '💂🏽♀️' => ':woman_guard_medium_skin_tone:',
+ '👩🏿⚕️' => ':woman_health_worker_dark_skin_tone:',
+ '👩🏻⚕️' => ':woman_health_worker_light_skin_tone:',
+ '👩🏾⚕️' => ':woman_health_worker_medium_dark_skin_tone:',
+ '👩🏼⚕️' => ':woman_health_worker_medium_light_skin_tone:',
+ '👩🏽⚕️' => ':woman_health_worker_medium_skin_tone:',
+ '🧘🏿♀️' => ':woman_in_lotus_position_dark_skin_tone:',
+ '🧘🏻♀️' => ':woman_in_lotus_position_light_skin_tone:',
+ '🧘🏾♀️' => ':woman_in_lotus_position_medium_dark_skin_tone:',
+ '🧘🏼♀️' => ':woman_in_lotus_position_medium_light_skin_tone:',
+ '🧘🏽♀️' => ':woman_in_lotus_position_medium_skin_tone:',
+ '🧖🏿♀️' => ':woman_in_steamy_room_dark_skin_tone:',
+ '🧖🏻♀️' => ':woman_in_steamy_room_light_skin_tone:',
+ '🧖🏾♀️' => ':woman_in_steamy_room_medium_dark_skin_tone:',
+ '🧖🏼♀️' => ':woman_in_steamy_room_medium_light_skin_tone:',
+ '🧖🏽♀️' => ':woman_in_steamy_room_medium_skin_tone:',
+ '🤵🏿♀️' => ':woman_in_tuxedo_dark_skin_tone:',
+ '🤵🏻♀️' => ':woman_in_tuxedo_light_skin_tone:',
+ '🤵🏾♀️' => ':woman_in_tuxedo_medium_dark_skin_tone:',
+ '🤵🏼♀️' => ':woman_in_tuxedo_medium_light_skin_tone:',
+ '🤵🏽♀️' => ':woman_in_tuxedo_medium_skin_tone:',
+ '👩🏿⚖️' => ':woman_judge_dark_skin_tone:',
+ '👩🏻⚖️' => ':woman_judge_light_skin_tone:',
+ '👩🏾⚖️' => ':woman_judge_medium_dark_skin_tone:',
+ '👩🏼⚖️' => ':woman_judge_medium_light_skin_tone:',
+ '👩🏽⚖️' => ':woman_judge_medium_skin_tone:',
+ '🤹🏿♀️' => ':woman_juggling_dark_skin_tone:',
+ '🤹🏻♀️' => ':woman_juggling_light_skin_tone:',
+ '🤹🏾♀️' => ':woman_juggling_medium_dark_skin_tone:',
+ '🤹🏼♀️' => ':woman_juggling_medium_light_skin_tone:',
+ '🤹🏽♀️' => ':woman_juggling_medium_skin_tone:',
+ '🧎🏿♀️' => ':woman_kneeling_dark_skin_tone:',
+ '🧎🏻♀️' => ':woman_kneeling_light_skin_tone:',
+ '🧎🏾♀️' => ':woman_kneeling_medium_dark_skin_tone:',
+ '🧎🏼♀️' => ':woman_kneeling_medium_light_skin_tone:',
+ '🧎🏽♀️' => ':woman_kneeling_medium_skin_tone:',
+ '🏋️♀️' => ':woman_lifting_weights:',
+ '🏋🏿♀️' => ':woman_lifting_weights_dark_skin_tone:',
+ '🏋🏻♀️' => ':woman_lifting_weights_light_skin_tone:',
+ '🏋🏾♀️' => ':woman_lifting_weights_medium_dark_skin_tone:',
+ '🏋🏼♀️' => ':woman_lifting_weights_medium_light_skin_tone:',
+ '🏋🏽♀️' => ':woman_lifting_weights_medium_skin_tone:',
+ '🧔🏻♀️' => ':woman_light_skin_tone_beard:',
+ '👱🏻♀️' => ':woman_light_skin_tone_blond_hair:',
+ '🧙🏿♀️' => ':woman_mage_dark_skin_tone:',
+ '🧙🏻♀️' => ':woman_mage_light_skin_tone:',
+ '🧙🏾♀️' => ':woman_mage_medium_dark_skin_tone:',
+ '🧙🏼♀️' => ':woman_mage_medium_light_skin_tone:',
+ '🧙🏽♀️' => ':woman_mage_medium_skin_tone:',
+ '🧔🏾♀️' => ':woman_medium_dark_skin_tone_beard:',
+ '👱🏾♀️' => ':woman_medium_dark_skin_tone_blond_hair:',
+ '🧔🏼♀️' => ':woman_medium_light_skin_tone_beard:',
+ '👱🏼♀️' => ':woman_medium_light_skin_tone_blond_hair:',
+ '🧔🏽♀️' => ':woman_medium_skin_tone_beard:',
+ '👱🏽♀️' => ':woman_medium_skin_tone_blond_hair:',
+ '🚵🏿♀️' => ':woman_mountain_biking_dark_skin_tone:',
+ '🚵🏻♀️' => ':woman_mountain_biking_light_skin_tone:',
+ '🚵🏾♀️' => ':woman_mountain_biking_medium_dark_skin_tone:',
+ '🚵🏼♀️' => ':woman_mountain_biking_medium_light_skin_tone:',
+ '🚵🏽♀️' => ':woman_mountain_biking_medium_skin_tone:',
+ '👩🏿✈️' => ':woman_pilot_dark_skin_tone:',
+ '👩🏻✈️' => ':woman_pilot_light_skin_tone:',
+ '👩🏾✈️' => ':woman_pilot_medium_dark_skin_tone:',
+ '👩🏼✈️' => ':woman_pilot_medium_light_skin_tone:',
+ '👩🏽✈️' => ':woman_pilot_medium_skin_tone:',
+ '🤾🏿♀️' => ':woman_playing_handball_dark_skin_tone:',
+ '🤾🏻♀️' => ':woman_playing_handball_light_skin_tone:',
+ '🤾🏾♀️' => ':woman_playing_handball_medium_dark_skin_tone:',
+ '🤾🏼♀️' => ':woman_playing_handball_medium_light_skin_tone:',
+ '🤾🏽♀️' => ':woman_playing_handball_medium_skin_tone:',
+ '🤽🏿♀️' => ':woman_playing_water_polo_dark_skin_tone:',
+ '🤽🏻♀️' => ':woman_playing_water_polo_light_skin_tone:',
+ '🤽🏾♀️' => ':woman_playing_water_polo_medium_dark_skin_tone:',
+ '🤽🏼♀️' => ':woman_playing_water_polo_medium_light_skin_tone:',
+ '🤽🏽♀️' => ':woman_playing_water_polo_medium_skin_tone:',
+ '👮🏿♀️' => ':woman_police_officer_dark_skin_tone:',
+ '👮🏻♀️' => ':woman_police_officer_light_skin_tone:',
+ '👮🏾♀️' => ':woman_police_officer_medium_dark_skin_tone:',
+ '👮🏼♀️' => ':woman_police_officer_medium_light_skin_tone:',
+ '👮🏽♀️' => ':woman_police_officer_medium_skin_tone:',
+ '🙎🏿♀️' => ':woman_pouting_dark_skin_tone:',
+ '🙎🏻♀️' => ':woman_pouting_light_skin_tone:',
+ '🙎🏾♀️' => ':woman_pouting_medium_dark_skin_tone:',
+ '🙎🏼♀️' => ':woman_pouting_medium_light_skin_tone:',
+ '🙎🏽♀️' => ':woman_pouting_medium_skin_tone:',
+ '🙋🏿♀️' => ':woman_raising_hand_dark_skin_tone:',
+ '🙋🏻♀️' => ':woman_raising_hand_light_skin_tone:',
+ '🙋🏾♀️' => ':woman_raising_hand_medium_dark_skin_tone:',
+ '🙋🏼♀️' => ':woman_raising_hand_medium_light_skin_tone:',
+ '🙋🏽♀️' => ':woman_raising_hand_medium_skin_tone:',
+ '🚣🏿♀️' => ':woman_rowing_boat_dark_skin_tone:',
+ '🚣🏻♀️' => ':woman_rowing_boat_light_skin_tone:',
+ '🚣🏾♀️' => ':woman_rowing_boat_medium_dark_skin_tone:',
+ '🚣🏼♀️' => ':woman_rowing_boat_medium_light_skin_tone:',
+ '🚣🏽♀️' => ':woman_rowing_boat_medium_skin_tone:',
+ '🏃🏿♀️' => ':woman_running_dark_skin_tone:',
+ '🏃🏻♀️' => ':woman_running_light_skin_tone:',
+ '🏃🏾♀️' => ':woman_running_medium_dark_skin_tone:',
+ '🏃🏼♀️' => ':woman_running_medium_light_skin_tone:',
+ '🏃🏽♀️' => ':woman_running_medium_skin_tone:',
+ '🤷🏿♀️' => ':woman_shrugging_dark_skin_tone:',
+ '🤷🏻♀️' => ':woman_shrugging_light_skin_tone:',
+ '🤷🏾♀️' => ':woman_shrugging_medium_dark_skin_tone:',
+ '🤷🏼♀️' => ':woman_shrugging_medium_light_skin_tone:',
+ '🤷🏽♀️' => ':woman_shrugging_medium_skin_tone:',
+ '🧍🏿♀️' => ':woman_standing_dark_skin_tone:',
+ '🧍🏻♀️' => ':woman_standing_light_skin_tone:',
+ '🧍🏾♀️' => ':woman_standing_medium_dark_skin_tone:',
+ '🧍🏼♀️' => ':woman_standing_medium_light_skin_tone:',
+ '🧍🏽♀️' => ':woman_standing_medium_skin_tone:',
+ '🦸🏿♀️' => ':woman_superhero_dark_skin_tone:',
+ '🦸🏻♀️' => ':woman_superhero_light_skin_tone:',
+ '🦸🏾♀️' => ':woman_superhero_medium_dark_skin_tone:',
+ '🦸🏼♀️' => ':woman_superhero_medium_light_skin_tone:',
+ '🦸🏽♀️' => ':woman_superhero_medium_skin_tone:',
+ '🦹🏿♀️' => ':woman_supervillain_dark_skin_tone:',
+ '🦹🏻♀️' => ':woman_supervillain_light_skin_tone:',
+ '🦹🏾♀️' => ':woman_supervillain_medium_dark_skin_tone:',
+ '🦹🏼♀️' => ':woman_supervillain_medium_light_skin_tone:',
+ '🦹🏽♀️' => ':woman_supervillain_medium_skin_tone:',
+ '🏄🏿♀️' => ':woman_surfing_dark_skin_tone:',
+ '🏄🏻♀️' => ':woman_surfing_light_skin_tone:',
+ '🏄🏾♀️' => ':woman_surfing_medium_dark_skin_tone:',
+ '🏄🏼♀️' => ':woman_surfing_medium_light_skin_tone:',
+ '🏄🏽♀️' => ':woman_surfing_medium_skin_tone:',
+ '🏊🏿♀️' => ':woman_swimming_dark_skin_tone:',
+ '🏊🏻♀️' => ':woman_swimming_light_skin_tone:',
+ '🏊🏾♀️' => ':woman_swimming_medium_dark_skin_tone:',
+ '🏊🏼♀️' => ':woman_swimming_medium_light_skin_tone:',
+ '🏊🏽♀️' => ':woman_swimming_medium_skin_tone:',
+ '💁🏿♀️' => ':woman_tipping_hand_dark_skin_tone:',
+ '💁🏻♀️' => ':woman_tipping_hand_light_skin_tone:',
+ '💁🏾♀️' => ':woman_tipping_hand_medium_dark_skin_tone:',
+ '💁🏼♀️' => ':woman_tipping_hand_medium_light_skin_tone:',
+ '💁🏽♀️' => ':woman_tipping_hand_medium_skin_tone:',
+ '🧛🏿♀️' => ':woman_vampire_dark_skin_tone:',
+ '🧛🏻♀️' => ':woman_vampire_light_skin_tone:',
+ '🧛🏾♀️' => ':woman_vampire_medium_dark_skin_tone:',
+ '🧛🏼♀️' => ':woman_vampire_medium_light_skin_tone:',
+ '🧛🏽♀️' => ':woman_vampire_medium_skin_tone:',
+ '🚶🏿♀️' => ':woman_walking_dark_skin_tone:',
+ '🚶🏻♀️' => ':woman_walking_light_skin_tone:',
+ '🚶🏾♀️' => ':woman_walking_medium_dark_skin_tone:',
+ '🚶🏼♀️' => ':woman_walking_medium_light_skin_tone:',
+ '🚶🏽♀️' => ':woman_walking_medium_skin_tone:',
+ '👳🏿♀️' => ':woman_wearing_turban_dark_skin_tone:',
+ '👳🏻♀️' => ':woman_wearing_turban_light_skin_tone:',
+ '👳🏾♀️' => ':woman_wearing_turban_medium_dark_skin_tone:',
+ '👳🏼♀️' => ':woman_wearing_turban_medium_light_skin_tone:',
+ '👳🏽♀️' => ':woman_wearing_turban_medium_skin_tone:',
+ '👰🏿♀️' => ':woman_with_veil_dark_skin_tone:',
+ '👰🏻♀️' => ':woman_with_veil_light_skin_tone:',
+ '👰🏾♀️' => ':woman_with_veil_medium_dark_skin_tone:',
+ '👰🏼♀️' => ':woman_with_veil_medium_light_skin_tone:',
+ '👰🏽♀️' => ':woman_with_veil_medium_skin_tone:',
+ '🧑🏿🎨' => ':artist_dark_skin_tone:',
+ '🧑🏻🎨' => ':artist_light_skin_tone:',
+ '🧑🏾🎨' => ':artist_medium_dark_skin_tone:',
+ '🧑🏼🎨' => ':artist_medium_light_skin_tone:',
+ '🧑🏽🎨' => ':artist_medium_skin_tone:',
+ '🧑🏿🚀' => ':astronaut_dark_skin_tone:',
+ '🧑🏻🚀' => ':astronaut_light_skin_tone:',
+ '🧑🏾🚀' => ':astronaut_medium_dark_skin_tone:',
+ '🧑🏼🚀' => ':astronaut_medium_light_skin_tone:',
+ '🧑🏽🚀' => ':astronaut_medium_skin_tone:',
+ '⛓️💥' => ':broken_chain:',
+ '🧑🏿🍳' => ':cook_dark_skin_tone:',
+ '🧑🏻🍳' => ':cook_light_skin_tone:',
+ '🧑🏾🍳' => ':cook_medium_dark_skin_tone:',
+ '🧑🏼🍳' => ':cook_medium_light_skin_tone:',
+ '🧑🏽🍳' => ':cook_medium_skin_tone:',
+ '🧏♂️' => ':deaf_man:',
+ '🧏♀️' => ':deaf_woman:',
+ '😶🌫️' => ':face_in_clouds:',
+ '🧑🏿🏭' => ':factory_worker_dark_skin_tone:',
+ '🧑🏻🏭' => ':factory_worker_light_skin_tone:',
+ '🧑🏾🏭' => ':factory_worker_medium_dark_skin_tone:',
+ '🧑🏼🏭' => ':factory_worker_medium_light_skin_tone:',
+ '🧑🏽🏭' => ':factory_worker_medium_skin_tone:',
+ '🧑🏿🌾' => ':farmer_dark_skin_tone:',
+ '🧑🏻🌾' => ':farmer_light_skin_tone:',
+ '🧑🏾🌾' => ':farmer_medium_dark_skin_tone:',
+ '🧑🏼🌾' => ':farmer_medium_light_skin_tone:',
+ '🧑🏽🌾' => ':farmer_medium_skin_tone:',
+ '🧑🏿🚒' => ':firefighter_dark_skin_tone:',
+ '🧑🏻🚒' => ':firefighter_light_skin_tone:',
+ '🧑🏾🚒' => ':firefighter_medium_dark_skin_tone:',
+ '🧑🏼🚒' => ':firefighter_medium_light_skin_tone:',
+ '🧑🏽🚒' => ':firefighter_medium_skin_tone:',
+ '🏳️🌈' => ':gay_pride_flag:',
+ '🙂↔️' => ':head_shaking_horizontally:',
+ '🙂↕️' => ':head_shaking_vertically:',
+ '🧑⚕️' => ':health_worker:',
+ '❤️🔥' => ':heart_on_fire:',
+ '🧑⚖️' => ':judge:',
+ '👨🏿🎨' => ':man_artist_dark_skin_tone:',
+ '👨🏻🎨' => ':man_artist_light_skin_tone:',
+ '👨🏾🎨' => ':man_artist_medium_dark_skin_tone:',
+ '👨🏼🎨' => ':man_artist_medium_light_skin_tone:',
+ '👨🏽🎨' => ':man_artist_medium_skin_tone:',
+ '👨🏿🚀' => ':man_astronaut_dark_skin_tone:',
+ '👨🏻🚀' => ':man_astronaut_light_skin_tone:',
+ '👨🏾🚀' => ':man_astronaut_medium_dark_skin_tone:',
+ '👨🏼🚀' => ':man_astronaut_medium_light_skin_tone:',
+ '👨🏽🚀' => ':man_astronaut_medium_skin_tone:',
+ '🧔♂️' => ':man_beard:',
+ '🚴♂️' => ':man_biking:',
+ '👱♂️' => ':man_blond_hair:',
+ '🙇♂️' => ':man_bowing:',
+ '🤸♂️' => ':man_cartwheeling:',
+ '🧗♂️' => ':man_climbing:',
+ '👷♂️' => ':man_construction_worker:',
+ '👨🏿🍳' => ':man_cook_dark_skin_tone:',
+ '👨🏻🍳' => ':man_cook_light_skin_tone:',
+ '👨🏾🍳' => ':man_cook_medium_dark_skin_tone:',
+ '👨🏼🍳' => ':man_cook_medium_light_skin_tone:',
+ '👨🏽🍳' => ':man_cook_medium_skin_tone:',
+ '👨🏿🦲' => ':man_dark_skin_tone_bald:',
+ '👨🏿🦱' => ':man_dark_skin_tone_curly_hair:',
+ '👨🏿🦰' => ':man_dark_skin_tone_red_hair:',
+ '👨🏿🦳' => ':man_dark_skin_tone_white_hair:',
+ '🧝♂️' => ':man_elf:',
+ '🤦♂️' => ':man_facepalming:',
+ '👨🏿🏭' => ':man_factory_worker_dark_skin_tone:',
+ '👨🏻🏭' => ':man_factory_worker_light_skin_tone:',
+ '👨🏾🏭' => ':man_factory_worker_medium_dark_skin_tone:',
+ '👨🏼🏭' => ':man_factory_worker_medium_light_skin_tone:',
+ '👨🏽🏭' => ':man_factory_worker_medium_skin_tone:',
+ '🧚♂️' => ':man_fairy:',
+ '👨🏿🌾' => ':man_farmer_dark_skin_tone:',
+ '👨🏻🌾' => ':man_farmer_light_skin_tone:',
+ '👨🏾🌾' => ':man_farmer_medium_dark_skin_tone:',
+ '👨🏼🌾' => ':man_farmer_medium_light_skin_tone:',
+ '👨🏽🌾' => ':man_farmer_medium_skin_tone:',
+ '👨🏿🍼' => ':man_feeding_baby_dark_skin_tone:',
+ '👨🏻🍼' => ':man_feeding_baby_light_skin_tone:',
+ '👨🏾🍼' => ':man_feeding_baby_medium_dark_skin_tone:',
+ '👨🏼🍼' => ':man_feeding_baby_medium_light_skin_tone:',
+ '👨🏽🍼' => ':man_feeding_baby_medium_skin_tone:',
+ '👨🏿🚒' => ':man_firefighter_dark_skin_tone:',
+ '👨🏻🚒' => ':man_firefighter_light_skin_tone:',
+ '👨🏾🚒' => ':man_firefighter_medium_dark_skin_tone:',
+ '👨🏼🚒' => ':man_firefighter_medium_light_skin_tone:',
+ '👨🏽🚒' => ':man_firefighter_medium_skin_tone:',
+ '🙍♂️' => ':man_frowning:',
+ '🧞♂️' => ':man_genie:',
+ '🙅♂️' => ':man_gesturing_no:',
+ '🙆♂️' => ':man_gesturing_ok:',
+ '💇♂️' => ':man_getting_haircut:',
+ '💆♂️' => ':man_getting_massage:',
+ '💂♂️' => ':man_guard:',
+ '👨⚕️' => ':man_health_worker:',
+ '🧘♂️' => ':man_in_lotus_position:',
+ '👨🏿🦽' => ':man_in_manual_wheelchair_dark_skin_tone:',
+ '👨🏻🦽' => ':man_in_manual_wheelchair_light_skin_tone:',
+ '👨🏾🦽' => ':man_in_manual_wheelchair_medium_dark_skin_tone:',
+ '👨🏼🦽' => ':man_in_manual_wheelchair_medium_light_skin_tone:',
+ '👨🏽🦽' => ':man_in_manual_wheelchair_medium_skin_tone:',
+ '👨🏿🦼' => ':man_in_motorized_wheelchair_dark_skin_tone:',
+ '👨🏻🦼' => ':man_in_motorized_wheelchair_light_skin_tone:',
+ '👨🏾🦼' => ':man_in_motorized_wheelchair_medium_dark_skin_tone:',
+ '👨🏼🦼' => ':man_in_motorized_wheelchair_medium_light_skin_tone:',
+ '👨🏽🦼' => ':man_in_motorized_wheelchair_medium_skin_tone:',
+ '🧖♂️' => ':man_in_steamy_room:',
+ '🤵♂️' => ':man_in_tuxedo:',
+ '👨⚖️' => ':man_judge:',
+ '🤹♂️' => ':man_juggling:',
+ '🧎♂️' => ':man_kneeling:',
+ '👨🏻🦲' => ':man_light_skin_tone_bald:',
+ '👨🏻🦱' => ':man_light_skin_tone_curly_hair:',
+ '👨🏻🦰' => ':man_light_skin_tone_red_hair:',
+ '👨🏻🦳' => ':man_light_skin_tone_white_hair:',
+ '🧙♂️' => ':man_mage:',
+ '👨🏿🔧' => ':man_mechanic_dark_skin_tone:',
+ '👨🏻🔧' => ':man_mechanic_light_skin_tone:',
+ '👨🏾🔧' => ':man_mechanic_medium_dark_skin_tone:',
+ '👨🏼🔧' => ':man_mechanic_medium_light_skin_tone:',
+ '👨🏽🔧' => ':man_mechanic_medium_skin_tone:',
+ '👨🏾🦲' => ':man_medium_dark_skin_tone_bald:',
+ '👨🏾🦱' => ':man_medium_dark_skin_tone_curly_hair:',
+ '👨🏾🦰' => ':man_medium_dark_skin_tone_red_hair:',
+ '👨🏾🦳' => ':man_medium_dark_skin_tone_white_hair:',
+ '👨🏼🦲' => ':man_medium_light_skin_tone_bald:',
+ '👨🏼🦱' => ':man_medium_light_skin_tone_curly_hair:',
+ '👨🏼🦰' => ':man_medium_light_skin_tone_red_hair:',
+ '👨🏼🦳' => ':man_medium_light_skin_tone_white_hair:',
+ '👨🏽🦲' => ':man_medium_skin_tone_bald:',
+ '👨🏽🦱' => ':man_medium_skin_tone_curly_hair:',
+ '👨🏽🦰' => ':man_medium_skin_tone_red_hair:',
+ '👨🏽🦳' => ':man_medium_skin_tone_white_hair:',
+ '🚵♂️' => ':man_mountain_biking:',
+ '👨🏿💼' => ':man_office_worker_dark_skin_tone:',
+ '👨🏻💼' => ':man_office_worker_light_skin_tone:',
+ '👨🏾💼' => ':man_office_worker_medium_dark_skin_tone:',
+ '👨🏼💼' => ':man_office_worker_medium_light_skin_tone:',
+ '👨🏽💼' => ':man_office_worker_medium_skin_tone:',
+ '👨✈️' => ':man_pilot:',
+ '🤾♂️' => ':man_playing_handball:',
+ '🤽♂️' => ':man_playing_water_polo:',
+ '👮♂️' => ':man_police_officer:',
+ '🙎♂️' => ':man_pouting:',
+ '🙋♂️' => ':man_raising_hand:',
+ '🚣♂️' => ':man_rowing_boat:',
+ '🏃♂️' => ':man_running:',
+ '👨🏿🔬' => ':man_scientist_dark_skin_tone:',
+ '👨🏻🔬' => ':man_scientist_light_skin_tone:',
+ '👨🏾🔬' => ':man_scientist_medium_dark_skin_tone:',
+ '👨🏼🔬' => ':man_scientist_medium_light_skin_tone:',
+ '👨🏽🔬' => ':man_scientist_medium_skin_tone:',
+ '🤷♂️' => ':man_shrugging:',
+ '👨🏿🎤' => ':man_singer_dark_skin_tone:',
+ '👨🏻🎤' => ':man_singer_light_skin_tone:',
+ '👨🏾🎤' => ':man_singer_medium_dark_skin_tone:',
+ '👨🏼🎤' => ':man_singer_medium_light_skin_tone:',
+ '👨🏽🎤' => ':man_singer_medium_skin_tone:',
+ '🧍♂️' => ':man_standing:',
+ '👨🏿🎓' => ':man_student_dark_skin_tone:',
+ '👨🏻🎓' => ':man_student_light_skin_tone:',
+ '👨🏾🎓' => ':man_student_medium_dark_skin_tone:',
+ '👨🏼🎓' => ':man_student_medium_light_skin_tone:',
+ '👨🏽🎓' => ':man_student_medium_skin_tone:',
+ '🦸♂️' => ':man_superhero:',
+ '🦹♂️' => ':man_supervillain:',
+ '🏄♂️' => ':man_surfing:',
+ '🏊♂️' => ':man_swimming:',
+ '👨🏿🏫' => ':man_teacher_dark_skin_tone:',
+ '👨🏻🏫' => ':man_teacher_light_skin_tone:',
+ '👨🏾🏫' => ':man_teacher_medium_dark_skin_tone:',
+ '👨🏼🏫' => ':man_teacher_medium_light_skin_tone:',
+ '👨🏽🏫' => ':man_teacher_medium_skin_tone:',
+ '👨🏿💻' => ':man_technologist_dark_skin_tone:',
+ '👨🏻💻' => ':man_technologist_light_skin_tone:',
+ '👨🏾💻' => ':man_technologist_medium_dark_skin_tone:',
+ '👨🏼💻' => ':man_technologist_medium_light_skin_tone:',
+ '👨🏽💻' => ':man_technologist_medium_skin_tone:',
+ '💁♂️' => ':man_tipping_hand:',
+ '🧛♂️' => ':man_vampire:',
+ '🚶♂️' => ':man_walking:',
+ '👳♂️' => ':man_wearing_turban:',
+ '👰♂️' => ':man_with_veil:',
+ '👨🏿🦯' => ':man_with_white_cane_dark_skin_tone:',
+ '👨🏻🦯' => ':man_with_white_cane_light_skin_tone:',
+ '👨🏾🦯' => ':man_with_white_cane_medium_dark_skin_tone:',
+ '👨🏼🦯' => ':man_with_white_cane_medium_light_skin_tone:',
+ '👨🏽🦯' => ':man_with_white_cane_medium_skin_tone:',
+ '🧟♂️' => ':man_zombie:',
+ '🧑🏿🔧' => ':mechanic_dark_skin_tone:',
+ '🧑🏻🔧' => ':mechanic_light_skin_tone:',
+ '🧑🏾🔧' => ':mechanic_medium_dark_skin_tone:',
+ '🧑🏼🔧' => ':mechanic_medium_light_skin_tone:',
+ '🧑🏽🔧' => ':mechanic_medium_skin_tone:',
+ '👯♂️' => ':men_with_bunny_ears:',
+ '🤼♂️' => ':men_wrestling:',
+ '❤️🩹' => ':mending_heart:',
+ '🧜♀️' => ':mermaid:',
+ '🧜♂️' => ':merman:',
+ '🧑🏿🎄' => ':mx_claus_dark_skin_tone:',
+ '🧑🏻🎄' => ':mx_claus_light_skin_tone:',
+ '🧑🏾🎄' => ':mx_claus_medium_dark_skin_tone:',
+ '🧑🏼🎄' => ':mx_claus_medium_light_skin_tone:',
+ '🧑🏽🎄' => ':mx_claus_medium_skin_tone:',
+ '🧑🏿💼' => ':office_worker_dark_skin_tone:',
+ '🧑🏻💼' => ':office_worker_light_skin_tone:',
+ '🧑🏾💼' => ':office_worker_medium_dark_skin_tone:',
+ '🧑🏼💼' => ':office_worker_medium_light_skin_tone:',
+ '🧑🏽💼' => ':office_worker_medium_skin_tone:',
+ '🧑🏿🦲' => ':person_dark_skin_tone_bald:',
+ '🧑🏿🦱' => ':person_dark_skin_tone_curly_hair:',
+ '🧑🏿🦰' => ':person_dark_skin_tone_red_hair:',
+ '🧑🏿🦳' => ':person_dark_skin_tone_white_hair:',
+ '🧑🏿🍼' => ':person_feeding_baby_dark_skin_tone:',
+ '🧑🏻🍼' => ':person_feeding_baby_light_skin_tone:',
+ '🧑🏾🍼' => ':person_feeding_baby_medium_dark_skin_tone:',
+ '🧑🏼🍼' => ':person_feeding_baby_medium_light_skin_tone:',
+ '🧑🏽🍼' => ':person_feeding_baby_medium_skin_tone:',
+ '🧑🏿🦽' => ':person_in_manual_wheelchair_dark_skin_tone:',
+ '🧑🏻🦽' => ':person_in_manual_wheelchair_light_skin_tone:',
+ '🧑🏾🦽' => ':person_in_manual_wheelchair_medium_dark_skin_tone:',
+ '🧑🏼🦽' => ':person_in_manual_wheelchair_medium_light_skin_tone:',
+ '🧑🏽🦽' => ':person_in_manual_wheelchair_medium_skin_tone:',
+ '🧑🏿🦼' => ':person_in_motorized_wheelchair_dark_skin_tone:',
+ '🧑🏻🦼' => ':person_in_motorized_wheelchair_light_skin_tone:',
+ '🧑🏾🦼' => ':person_in_motorized_wheelchair_medium_dark_skin_tone:',
+ '🧑🏼🦼' => ':person_in_motorized_wheelchair_medium_light_skin_tone:',
+ '🧑🏽🦼' => ':person_in_motorized_wheelchair_medium_skin_tone:',
+ '🧎➡️' => ':person_kneeling_facing_right:',
+ '🧑🏻🦲' => ':person_light_skin_tone_bald:',
+ '🧑🏻🦱' => ':person_light_skin_tone_curly_hair:',
+ '🧑🏻🦰' => ':person_light_skin_tone_red_hair:',
+ '🧑🏻🦳' => ':person_light_skin_tone_white_hair:',
+ '🧑🏾🦲' => ':person_medium_dark_skin_tone_bald:',
+ '🧑🏾🦱' => ':person_medium_dark_skin_tone_curly_hair:',
+ '🧑🏾🦰' => ':person_medium_dark_skin_tone_red_hair:',
+ '🧑🏾🦳' => ':person_medium_dark_skin_tone_white_hair:',
+ '🧑🏼🦲' => ':person_medium_light_skin_tone_bald:',
+ '🧑🏼🦱' => ':person_medium_light_skin_tone_curly_hair:',
+ '🧑🏼🦰' => ':person_medium_light_skin_tone_red_hair:',
+ '🧑🏼🦳' => ':person_medium_light_skin_tone_white_hair:',
+ '🧑🏽🦲' => ':person_medium_skin_tone_bald:',
+ '🧑🏽🦱' => ':person_medium_skin_tone_curly_hair:',
+ '🧑🏽🦰' => ':person_medium_skin_tone_red_hair:',
+ '🧑🏽🦳' => ':person_medium_skin_tone_white_hair:',
+ '🏃➡️' => ':person_running_facing_right:',
+ '🚶➡️' => ':person_walking_facing_right:',
+ '🧑🏿🦯' => ':person_with_white_cane_dark_skin_tone:',
+ '🧑🏻🦯' => ':person_with_white_cane_light_skin_tone:',
+ '🧑🏾🦯' => ':person_with_white_cane_medium_dark_skin_tone:',
+ '🧑🏼🦯' => ':person_with_white_cane_medium_light_skin_tone:',
+ '🧑🏽🦯' => ':person_with_white_cane_medium_skin_tone:',
+ '🧑✈️' => ':pilot:',
+ '🏴☠️' => ':pirate_flag:',
+ '🐻❄️' => ':polar_bear:',
+ '🧑🏿🔬' => ':scientist_dark_skin_tone:',
+ '🧑🏻🔬' => ':scientist_light_skin_tone:',
+ '🧑🏾🔬' => ':scientist_medium_dark_skin_tone:',
+ '🧑🏼🔬' => ':scientist_medium_light_skin_tone:',
+ '🧑🏽🔬' => ':scientist_medium_skin_tone:',
+ '🧑🏿🎤' => ':singer_dark_skin_tone:',
+ '🧑🏻🎤' => ':singer_light_skin_tone:',
+ '🧑🏾🎤' => ':singer_medium_dark_skin_tone:',
+ '🧑🏼🎤' => ':singer_medium_light_skin_tone:',
+ '🧑🏽🎤' => ':singer_medium_skin_tone:',
+ '🧑🏿🎓' => ':student_dark_skin_tone:',
+ '🧑🏻🎓' => ':student_light_skin_tone:',
+ '🧑🏾🎓' => ':student_medium_dark_skin_tone:',
+ '🧑🏼🎓' => ':student_medium_light_skin_tone:',
+ '🧑🏽🎓' => ':student_medium_skin_tone:',
+ '🧑🏿🏫' => ':teacher_dark_skin_tone:',
+ '🧑🏻🏫' => ':teacher_light_skin_tone:',
+ '🧑🏾🏫' => ':teacher_medium_dark_skin_tone:',
+ '🧑🏼🏫' => ':teacher_medium_light_skin_tone:',
+ '🧑🏽🏫' => ':teacher_medium_skin_tone:',
+ '🧑🏿💻' => ':technologist_dark_skin_tone:',
+ '🧑🏻💻' => ':technologist_light_skin_tone:',
+ '🧑🏾💻' => ':technologist_medium_dark_skin_tone:',
+ '🧑🏼💻' => ':technologist_medium_light_skin_tone:',
+ '🧑🏽💻' => ':technologist_medium_skin_tone:',
+ '👩🏿🎨' => ':woman_artist_dark_skin_tone:',
+ '👩🏻🎨' => ':woman_artist_light_skin_tone:',
+ '👩🏾🎨' => ':woman_artist_medium_dark_skin_tone:',
+ '👩🏼🎨' => ':woman_artist_medium_light_skin_tone:',
+ '👩🏽🎨' => ':woman_artist_medium_skin_tone:',
+ '👩🏿🚀' => ':woman_astronaut_dark_skin_tone:',
+ '👩🏻🚀' => ':woman_astronaut_light_skin_tone:',
+ '👩🏾🚀' => ':woman_astronaut_medium_dark_skin_tone:',
+ '👩🏼🚀' => ':woman_astronaut_medium_light_skin_tone:',
+ '👩🏽🚀' => ':woman_astronaut_medium_skin_tone:',
+ '🧔♀️' => ':woman_beard:',
+ '🚴♀️' => ':woman_biking:',
+ '👱♀️' => ':woman_blond_hair:',
+ '🙇♀️' => ':woman_bowing:',
+ '🤸♀️' => ':woman_cartwheeling:',
+ '🧗♀️' => ':woman_climbing:',
+ '👷♀️' => ':woman_construction_worker:',
+ '👩🏿🍳' => ':woman_cook_dark_skin_tone:',
+ '👩🏻🍳' => ':woman_cook_light_skin_tone:',
+ '👩🏾🍳' => ':woman_cook_medium_dark_skin_tone:',
+ '👩🏼🍳' => ':woman_cook_medium_light_skin_tone:',
+ '👩🏽🍳' => ':woman_cook_medium_skin_tone:',
+ '👩🏿🦲' => ':woman_dark_skin_tone_bald:',
+ '👩🏿🦱' => ':woman_dark_skin_tone_curly_hair:',
+ '👩🏿🦰' => ':woman_dark_skin_tone_red_hair:',
+ '👩🏿🦳' => ':woman_dark_skin_tone_white_hair:',
+ '🧝♀️' => ':woman_elf:',
+ '🤦♀️' => ':woman_facepalming:',
+ '👩🏿🏭' => ':woman_factory_worker_dark_skin_tone:',
+ '👩🏻🏭' => ':woman_factory_worker_light_skin_tone:',
+ '👩🏾🏭' => ':woman_factory_worker_medium_dark_skin_tone:',
+ '👩🏼🏭' => ':woman_factory_worker_medium_light_skin_tone:',
+ '👩🏽🏭' => ':woman_factory_worker_medium_skin_tone:',
+ '🧚♀️' => ':woman_fairy:',
+ '👩🏿🌾' => ':woman_farmer_dark_skin_tone:',
+ '👩🏻🌾' => ':woman_farmer_light_skin_tone:',
+ '👩🏾🌾' => ':woman_farmer_medium_dark_skin_tone:',
+ '👩🏼🌾' => ':woman_farmer_medium_light_skin_tone:',
+ '👩🏽🌾' => ':woman_farmer_medium_skin_tone:',
+ '👩🏿🍼' => ':woman_feeding_baby_dark_skin_tone:',
+ '👩🏻🍼' => ':woman_feeding_baby_light_skin_tone:',
+ '👩🏾🍼' => ':woman_feeding_baby_medium_dark_skin_tone:',
+ '👩🏼🍼' => ':woman_feeding_baby_medium_light_skin_tone:',
+ '👩🏽🍼' => ':woman_feeding_baby_medium_skin_tone:',
+ '👩🏿🚒' => ':woman_firefighter_dark_skin_tone:',
+ '👩🏻🚒' => ':woman_firefighter_light_skin_tone:',
+ '👩🏾🚒' => ':woman_firefighter_medium_dark_skin_tone:',
+ '👩🏼🚒' => ':woman_firefighter_medium_light_skin_tone:',
+ '👩🏽🚒' => ':woman_firefighter_medium_skin_tone:',
+ '🙍♀️' => ':woman_frowning:',
+ '🧞♀️' => ':woman_genie:',
+ '🙅♀️' => ':woman_gesturing_no:',
+ '🙆♀️' => ':woman_gesturing_ok:',
+ '💇♀️' => ':woman_getting_haircut:',
+ '💆♀️' => ':woman_getting_massage:',
+ '💂♀️' => ':woman_guard:',
+ '👩⚕️' => ':woman_health_worker:',
+ '🧘♀️' => ':woman_in_lotus_position:',
+ '👩🏿🦽' => ':woman_in_manual_wheelchair_dark_skin_tone:',
+ '👩🏻🦽' => ':woman_in_manual_wheelchair_light_skin_tone:',
+ '👩🏾🦽' => ':woman_in_manual_wheelchair_medium_dark_skin_tone:',
+ '👩🏼🦽' => ':woman_in_manual_wheelchair_medium_light_skin_tone:',
+ '👩🏽🦽' => ':woman_in_manual_wheelchair_medium_skin_tone:',
+ '👩🏿🦼' => ':woman_in_motorized_wheelchair_dark_skin_tone:',
+ '👩🏻🦼' => ':woman_in_motorized_wheelchair_light_skin_tone:',
+ '👩🏾🦼' => ':woman_in_motorized_wheelchair_medium_dark_skin_tone:',
+ '👩🏼🦼' => ':woman_in_motorized_wheelchair_medium_light_skin_tone:',
+ '👩🏽🦼' => ':woman_in_motorized_wheelchair_medium_skin_tone:',
+ '🧖♀️' => ':woman_in_steamy_room:',
+ '🤵♀️' => ':woman_in_tuxedo:',
+ '👩⚖️' => ':woman_judge:',
+ '🤹♀️' => ':woman_juggling:',
+ '🧎♀️' => ':woman_kneeling:',
+ '👩🏻🦲' => ':woman_light_skin_tone_bald:',
+ '👩🏻🦱' => ':woman_light_skin_tone_curly_hair:',
+ '👩🏻🦰' => ':woman_light_skin_tone_red_hair:',
+ '👩🏻🦳' => ':woman_light_skin_tone_white_hair:',
+ '🧙♀️' => ':woman_mage:',
+ '👩🏿🔧' => ':woman_mechanic_dark_skin_tone:',
+ '👩🏻🔧' => ':woman_mechanic_light_skin_tone:',
+ '👩🏾🔧' => ':woman_mechanic_medium_dark_skin_tone:',
+ '👩🏼🔧' => ':woman_mechanic_medium_light_skin_tone:',
+ '👩🏽🔧' => ':woman_mechanic_medium_skin_tone:',
+ '👩🏾🦲' => ':woman_medium_dark_skin_tone_bald:',
+ '👩🏾🦱' => ':woman_medium_dark_skin_tone_curly_hair:',
+ '👩🏾🦰' => ':woman_medium_dark_skin_tone_red_hair:',
+ '👩🏾🦳' => ':woman_medium_dark_skin_tone_white_hair:',
+ '👩🏼🦲' => ':woman_medium_light_skin_tone_bald:',
+ '👩🏼🦱' => ':woman_medium_light_skin_tone_curly_hair:',
+ '👩🏼🦰' => ':woman_medium_light_skin_tone_red_hair:',
+ '👩🏼🦳' => ':woman_medium_light_skin_tone_white_hair:',
+ '👩🏽🦲' => ':woman_medium_skin_tone_bald:',
+ '👩🏽🦱' => ':woman_medium_skin_tone_curly_hair:',
+ '👩🏽🦰' => ':woman_medium_skin_tone_red_hair:',
+ '👩🏽🦳' => ':woman_medium_skin_tone_white_hair:',
+ '🚵♀️' => ':woman_mountain_biking:',
+ '👩🏿💼' => ':woman_office_worker_dark_skin_tone:',
+ '👩🏻💼' => ':woman_office_worker_light_skin_tone:',
+ '👩🏾💼' => ':woman_office_worker_medium_dark_skin_tone:',
+ '👩🏼💼' => ':woman_office_worker_medium_light_skin_tone:',
+ '👩🏽💼' => ':woman_office_worker_medium_skin_tone:',
+ '👩✈️' => ':woman_pilot:',
+ '🤾♀️' => ':woman_playing_handball:',
+ '🤽♀️' => ':woman_playing_water_polo:',
+ '👮♀️' => ':woman_police_officer:',
+ '🙎♀️' => ':woman_pouting:',
+ '🙋♀️' => ':woman_raising_hand:',
+ '🚣♀️' => ':woman_rowing_boat:',
+ '🏃♀️' => ':woman_running:',
+ '👩🏿🔬' => ':woman_scientist_dark_skin_tone:',
+ '👩🏻🔬' => ':woman_scientist_light_skin_tone:',
+ '👩🏾🔬' => ':woman_scientist_medium_dark_skin_tone:',
+ '👩🏼🔬' => ':woman_scientist_medium_light_skin_tone:',
+ '👩🏽🔬' => ':woman_scientist_medium_skin_tone:',
+ '🤷♀️' => ':woman_shrugging:',
+ '👩🏿🎤' => ':woman_singer_dark_skin_tone:',
+ '👩🏻🎤' => ':woman_singer_light_skin_tone:',
+ '👩🏾🎤' => ':woman_singer_medium_dark_skin_tone:',
+ '👩🏼🎤' => ':woman_singer_medium_light_skin_tone:',
+ '👩🏽🎤' => ':woman_singer_medium_skin_tone:',
+ '🧍♀️' => ':woman_standing:',
+ '👩🏿🎓' => ':woman_student_dark_skin_tone:',
+ '👩🏻🎓' => ':woman_student_light_skin_tone:',
+ '👩🏾🎓' => ':woman_student_medium_dark_skin_tone:',
+ '👩🏼🎓' => ':woman_student_medium_light_skin_tone:',
+ '👩🏽🎓' => ':woman_student_medium_skin_tone:',
+ '🦸♀️' => ':woman_superhero:',
+ '🦹♀️' => ':woman_supervillain:',
+ '🏄♀️' => ':woman_surfing:',
+ '🏊♀️' => ':woman_swimming:',
+ '👩🏿🏫' => ':woman_teacher_dark_skin_tone:',
+ '👩🏻🏫' => ':woman_teacher_light_skin_tone:',
+ '👩🏾🏫' => ':woman_teacher_medium_dark_skin_tone:',
+ '👩🏼🏫' => ':woman_teacher_medium_light_skin_tone:',
+ '👩🏽🏫' => ':woman_teacher_medium_skin_tone:',
+ '👩🏿💻' => ':woman_technologist_dark_skin_tone:',
+ '👩🏻💻' => ':woman_technologist_light_skin_tone:',
+ '👩🏾💻' => ':woman_technologist_medium_dark_skin_tone:',
+ '👩🏼💻' => ':woman_technologist_medium_light_skin_tone:',
+ '👩🏽💻' => ':woman_technologist_medium_skin_tone:',
+ '💁♀️' => ':woman_tipping_hand:',
+ '🧛♀️' => ':woman_vampire:',
+ '🚶♀️' => ':woman_walking:',
+ '👳♀️' => ':woman_wearing_turban:',
+ '👰♀️' => ':woman_with_veil:',
+ '👩🏿🦯' => ':woman_with_white_cane_dark_skin_tone:',
+ '👩🏻🦯' => ':woman_with_white_cane_light_skin_tone:',
+ '👩🏾🦯' => ':woman_with_white_cane_medium_dark_skin_tone:',
+ '👩🏼🦯' => ':woman_with_white_cane_medium_light_skin_tone:',
+ '👩🏽🦯' => ':woman_with_white_cane_medium_skin_tone:',
+ '🧟♀️' => ':woman_zombie:',
+ '👯♀️' => ':women_with_bunny_ears:',
+ '🤼♀️' => ':women_wrestling:',
+ '🧑🎨' => ':artist:',
+ '*️⃣' => ':asterisk:',
+ '🧑🚀' => ':astronaut:',
+ '🐦⬛' => ':black_bird:',
+ '🐈⬛' => ':black_cat:',
+ '🍄🟫' => ':brown_mushroom:',
+ '🧑🍳' => ':cook:',
'8️⃣' => ':eight:',
- '👁🗨' => ':eye_in_speech_bubble:',
+ '😮💨' => ':face_exhaling:',
+ '😵💫' => ':face_with_spiral_eyes:',
+ '🧑🏭' => ':factory_worker:',
+ '🧑🧒' => ':family_adult_child:',
+ '👨👦' => ':family_man_boy:',
+ '👨👧' => ':family_man_girl:',
+ '👩👦' => ':family_woman_boy:',
+ '👩👧' => ':family_woman_girl:',
+ '🧑🌾' => ':farmer:',
+ '🧑🚒' => ':firefighter:',
'5️⃣' => ':five:',
'4️⃣' => ':four:',
+ '#️⃣' => ':hash:',
+ '🍋🟩' => ':lime:',
+ '👨🎨' => ':man_artist:',
+ '👨🚀' => ':man_astronaut:',
+ '👨🦲' => ':man_bald:',
+ '👨🍳' => ':man_cook:',
+ '👨🦱' => ':man_curly_hair:',
+ '👨🏭' => ':man_factory_worker:',
+ '👨🌾' => ':man_farmer:',
+ '👨🍼' => ':man_feeding_baby:',
+ '👨🚒' => ':man_firefighter:',
+ '👨🦽' => ':man_in_manual_wheelchair:',
+ '👨🦼' => ':man_in_motorized_wheelchair:',
+ '👨🔧' => ':man_mechanic:',
+ '👨💼' => ':man_office_worker:',
+ '👨🦰' => ':man_red_hair:',
+ '👨🔬' => ':man_scientist:',
+ '👨🎤' => ':man_singer:',
+ '👨🎓' => ':man_student:',
+ '👨🏫' => ':man_teacher:',
+ '👨💻' => ':man_technologist:',
+ '👨🦳' => ':man_white_hair:',
+ '👨🦯' => ':man_with_white_cane:',
+ '🧑🔧' => ':mechanic:',
+ '🧑🎄' => ':mx_claus:',
'9️⃣' => ':nine:',
+ '🧑💼' => ':office_worker:',
'1️⃣' => ':one:',
+ '🧑🦲' => ':person_bald:',
+ '🧑🦱' => ':person_curly_hair:',
+ '🧑🍼' => ':person_feeding_baby:',
+ '🧑🦽' => ':person_in_manual_wheelchair:',
+ '🧑🦼' => ':person_in_motorized_wheelchair:',
+ '🧑🦰' => ':person_red_hair:',
+ '🧑🦳' => ':person_white_hair:',
+ '🧑🦯' => ':person_with_white_cane:',
+ '🐦🔥' => ':phoenix:',
+ '🧑🔬' => ':scientist:',
+ '🐕🦺' => ':service_dog:',
'7️⃣' => ':seven:',
+ '🧑🎤' => ':singer:',
'6️⃣' => ':six:',
+ '🧑🎓' => ':student:',
+ '🧑🏫' => ':teacher:',
+ '🧑💻' => ':technologist:',
'3️⃣' => ':three:',
'2️⃣' => ':two:',
+ '👩🎨' => ':woman_artist:',
+ '👩🚀' => ':woman_astronaut:',
+ '👩🦲' => ':woman_bald:',
+ '👩🍳' => ':woman_cook:',
+ '👩🦱' => ':woman_curly_hair:',
+ '👩🏭' => ':woman_factory_worker:',
+ '👩🌾' => ':woman_farmer:',
+ '👩🍼' => ':woman_feeding_baby:',
+ '👩🚒' => ':woman_firefighter:',
+ '👩🦽' => ':woman_in_manual_wheelchair:',
+ '👩🦼' => ':woman_in_motorized_wheelchair:',
+ '👩🔧' => ':woman_mechanic:',
+ '👩💼' => ':woman_office_worker:',
+ '👩🦰' => ':woman_red_hair:',
+ '👩🔬' => ':woman_scientist:',
+ '👩🎤' => ':woman_singer:',
+ '👩🎓' => ':woman_student:',
+ '👩🏫' => ':woman_teacher:',
+ '👩💻' => ':woman_technologist:',
+ '👩🦳' => ':woman_white_hair:',
+ '👩🦯' => ':woman_with_white_cane:',
'0️⃣' => ':zero:',
+ '🅰️' => ':a:',
+ '✈️' => ':airplane:',
+ '🛩️' => ':airplane_small:',
+ '⚗️' => ':alembic:',
'👼🏻' => ':angel_tone1:',
'👼🏼' => ':angel_tone2:',
'👼🏽' => ':angel_tone3:',
'👼🏾' => ':angel_tone4:',
'👼🏿' => ':angel_tone5:',
- '*⃣' => ':asterisk:',
+ '🗯️' => ':anger_right:',
+ '◀️' => ':arrow_backward:',
+ '⬇️' => ':arrow_down:',
+ '▶️' => ':arrow_forward:',
+ '⤵️' => ':arrow_heading_down:',
+ '⤴️' => ':arrow_heading_up:',
+ '⬅️' => ':arrow_left:',
+ '↙️' => ':arrow_lower_left:',
+ '↘️' => ':arrow_lower_right:',
+ '➡️' => ':arrow_right:',
+ '↪️' => ':arrow_right_hook:',
+ '⬆️' => ':arrow_up:',
+ '↕️' => ':arrow_up_down:',
+ '↖️' => ':arrow_upper_left:',
+ '↗️' => ':arrow_upper_right:',
+ '⚛️' => ':atom:',
+ '🅱️' => ':b:',
'👶🏻' => ':baby_tone1:',
'👶🏼' => ':baby_tone2:',
'👶🏽' => ':baby_tone3:',
'👶🏾' => ':baby_tone4:',
'👶🏿' => ':baby_tone5:',
+ '🗳️' => ':ballot_box:',
+ '☑️' => ':ballot_box_with_check:',
+ '‼️' => ':bangbang:',
+ '⛹️' => ':basketball_player:',
'⛹🏻' => ':basketball_player_tone1:',
'⛹🏼' => ':basketball_player_tone2:',
'⛹🏽' => ':basketball_player_tone3:',
@@ -51,11 +1529,19 @@
'🛀🏽' => ':bath_tone3:',
'🛀🏾' => ':bath_tone4:',
'🛀🏿' => ':bath_tone5:',
+ '🏖️' => ':beach:',
+ '⛱️' => ':beach_umbrella:',
+ '🛏️' => ':bed:',
+ '🛎️' => ':bellhop:',
'🚴🏻' => ':bicyclist_tone1:',
'🚴🏼' => ':bicyclist_tone2:',
'🚴🏽' => ':bicyclist_tone3:',
'🚴🏾' => ':bicyclist_tone4:',
'🚴🏿' => ':bicyclist_tone5:',
+ '☣️' => ':biohazard:',
+ '◼️' => ':black_medium_square:',
+ '✒️' => ':black_nib:',
+ '▪️' => ':black_small_square:',
'🙇🏻' => ':bow_tone1:',
'🙇🏼' => ':bow_tone2:',
'🙇🏽' => ':bow_tone3:',
@@ -66,51 +1552,130 @@
'👦🏽' => ':boy_tone3:',
'👦🏾' => ':boy_tone4:',
'👦🏿' => ':boy_tone5:',
+ '🤱🏿' => ':breast_feeding_dark_skin_tone:',
+ '🤱🏻' => ':breast_feeding_light_skin_tone:',
+ '🤱🏾' => ':breast_feeding_medium_dark_skin_tone:',
+ '🤱🏼' => ':breast_feeding_medium_light_skin_tone:',
+ '🤱🏽' => ':breast_feeding_medium_skin_tone:',
'👰🏻' => ':bride_with_veil_tone1:',
'👰🏼' => ':bride_with_veil_tone2:',
'👰🏽' => ':bride_with_veil_tone3:',
'👰🏾' => ':bride_with_veil_tone4:',
'👰🏿' => ':bride_with_veil_tone5:',
+ '🗓️' => ':calendar_spiral:',
'🤙🏻' => ':call_me_tone1:',
'🤙🏼' => ':call_me_tone2:',
'🤙🏽' => ':call_me_tone3:',
'🤙🏾' => ':call_me_tone4:',
'🤙🏿' => ':call_me_tone5:',
+ '🏕️' => ':camping:',
+ '🕯️' => ':candle:',
+ '🗃️' => ':card_box:',
'🤸🏻' => ':cartwheel_tone1:',
'🤸🏼' => ':cartwheel_tone2:',
'🤸🏽' => ':cartwheel_tone3:',
'🤸🏾' => ':cartwheel_tone4:',
'🤸🏿' => ':cartwheel_tone5:',
+ '⛓️' => ':chains:',
+ '♟️' => ':chess_pawn:',
+ '🧒🏿' => ':child_dark_skin_tone:',
+ '🧒🏻' => ':child_light_skin_tone:',
+ '🧒🏾' => ':child_medium_dark_skin_tone:',
+ '🧒🏼' => ':child_medium_light_skin_tone:',
+ '🧒🏽' => ':child_medium_skin_tone:',
+ '🐿️' => ':chipmunk:',
+ '🏙️' => ':cityscape:',
'👏🏻' => ':clap_tone1:',
'👏🏼' => ':clap_tone2:',
'👏🏽' => ':clap_tone3:',
'👏🏾' => ':clap_tone4:',
'👏🏿' => ':clap_tone5:',
+ '🏛️' => ':classical_building:',
+ '🕰️' => ':clock:',
+ '☁️' => ':cloud:',
+ '🌩️' => ':cloud_lightning:',
+ '🌧️' => ':cloud_rain:',
+ '🌨️' => ':cloud_snow:',
+ '🌪️' => ':cloud_tornado:',
+ '♣️' => ':clubs:',
+ '⚰️' => ':coffin:',
+ '☄️' => ':comet:',
+ '🗜️' => ':compression:',
+ '㊗️' => ':congratulations:',
+ '🏗️' => ':construction_site:',
'👷🏻' => ':construction_worker_tone1:',
'👷🏼' => ':construction_worker_tone2:',
'👷🏽' => ':construction_worker_tone3:',
'👷🏾' => ':construction_worker_tone4:',
'👷🏿' => ':construction_worker_tone5:',
+ '🎛️' => ':control_knobs:',
'👮🏻' => ':cop_tone1:',
'👮🏼' => ':cop_tone2:',
'👮🏽' => ':cop_tone3:',
'👮🏾' => ':cop_tone4:',
'👮🏿' => ':cop_tone5:',
+ '©️' => ':copyright:',
+ '🛋️' => ':couch:',
+ '💑🏿' => ':couple_with_heart_dark_skin_tone:',
+ '💑🏻' => ':couple_with_heart_light_skin_tone:',
+ '💑🏾' => ':couple_with_heart_medium_dark_skin_tone:',
+ '💑🏼' => ':couple_with_heart_medium_light_skin_tone:',
+ '💑🏽' => ':couple_with_heart_medium_skin_tone:',
+ '🖍️' => ':crayon:',
+ '✝️' => ':cross:',
+ '⚔️' => ':crossed_swords:',
+ '🛳️' => ':cruise_ship:',
+ '🗡️' => ':dagger:',
'💃🏻' => ':dancer_tone1:',
'💃🏼' => ':dancer_tone2:',
'💃🏽' => ':dancer_tone3:',
'💃🏾' => ':dancer_tone4:',
'💃🏿' => ':dancer_tone5:',
+ '🕶️' => ':dark_sunglasses:',
+ '🧏🏿' => ':deaf_person_dark_skin_tone:',
+ '🧏🏻' => ':deaf_person_light_skin_tone:',
+ '🧏🏾' => ':deaf_person_medium_dark_skin_tone:',
+ '🧏🏼' => ':deaf_person_medium_light_skin_tone:',
+ '🧏🏽' => ':deaf_person_medium_skin_tone:',
+ '🏜️' => ':desert:',
+ '🖥️' => ':desktop:',
+ '♦️' => ':diamonds:',
+ '🗂️' => ':dividers:',
+ '🕊️' => ':dove:',
'👂🏻' => ':ear_tone1:',
'👂🏼' => ':ear_tone2:',
'👂🏽' => ':ear_tone3:',
'👂🏾' => ':ear_tone4:',
'👂🏿' => ':ear_tone5:',
+ '🦻🏿' => ':ear_with_hearing_aid_dark_skin_tone:',
+ '🦻🏻' => ':ear_with_hearing_aid_light_skin_tone:',
+ '🦻🏾' => ':ear_with_hearing_aid_medium_dark_skin_tone:',
+ '🦻🏼' => ':ear_with_hearing_aid_medium_light_skin_tone:',
+ '🦻🏽' => ':ear_with_hearing_aid_medium_skin_tone:',
+ '✴️' => ':eight_pointed_black_star:',
+ '✳️' => ':eight_spoked_asterisk:',
+ '⏏️' => ':eject:',
+ '🧝🏿' => ':elf_dark_skin_tone:',
+ '🧝🏻' => ':elf_light_skin_tone:',
+ '🧝🏾' => ':elf_medium_dark_skin_tone:',
+ '🧝🏼' => ':elf_medium_light_skin_tone:',
+ '🧝🏽' => ':elf_medium_skin_tone:',
+ '✉️' => ':envelope:',
+ '👁️' => ':eye:',
'🤦🏻' => ':face_palm_tone1:',
'🤦🏼' => ':face_palm_tone2:',
'🤦🏽' => ':face_palm_tone3:',
'🤦🏾' => ':face_palm_tone4:',
'🤦🏿' => ':face_palm_tone5:',
+ '🧚🏿' => ':fairy_dark_skin_tone:',
+ '🧚🏻' => ':fairy_light_skin_tone:',
+ '🧚🏾' => ':fairy_medium_dark_skin_tone:',
+ '🧚🏼' => ':fairy_medium_light_skin_tone:',
+ '🧚🏽' => ':fairy_medium_skin_tone:',
+ '♀️' => ':female_sign:',
+ '⛴️' => ':ferry:',
+ '🗄️' => ':file_cabinet:',
+ '🎞️' => ':film_frames:',
'🤞🏻' => ':fingers_crossed_tone1:',
'🤞🏼' => ':fingers_crossed_tone2:',
'🤞🏽' => ':fingers_crossed_tone3:',
@@ -360,6 +1925,7 @@
'🇺🇦' => ':flag_ua:',
'🇺🇬' => ':flag_ug:',
'🇺🇲' => ':flag_um:',
+ '🇺🇳' => ':flag_united_nations:',
'🇺🇸' => ':flag_us:',
'🇺🇾' => ':flag_uy:',
'🇺🇿' => ':flag_uz:',
@@ -371,6 +1937,7 @@
'🇻🇳' => ':flag_vn:',
'🇻🇺' => ':flag_vu:',
'🇼🇫' => ':flag_wf:',
+ '🏳️' => ':flag_white:',
'🇼🇸' => ':flag_ws:',
'🇽🇰' => ':flag_xk:',
'🇾🇪' => ':flag_ye:',
@@ -378,12 +1945,23 @@
'🇿🇦' => ':flag_za:',
'🇿🇲' => ':flag_zm:',
'🇿🇼' => ':flag_zw:',
- '🏳🌈' => ':gay_pride_flag:',
+ '⚜️' => ':fleur-de-lis:',
+ '🌫️' => ':fog:',
+ '🦶🏿' => ':foot_dark_skin_tone:',
+ '🦶🏻' => ':foot_light_skin_tone:',
+ '🦶🏾' => ':foot_medium_dark_skin_tone:',
+ '🦶🏼' => ':foot_medium_light_skin_tone:',
+ '🦶🏽' => ':foot_medium_skin_tone:',
+ '🍽️' => ':fork_knife_plate:',
+ '🖼️' => ':frame_photo:',
+ '☹️' => ':frowning2:',
+ '⚙️' => ':gear:',
'👧🏻' => ':girl_tone1:',
'👧🏼' => ':girl_tone2:',
'👧🏽' => ':girl_tone3:',
'👧🏾' => ':girl_tone4:',
'👧🏿' => ':girl_tone5:',
+ '🏌️' => ':golfer:',
'💂🏻' => ':guardsman_tone1:',
'💂🏼' => ':guardsman_tone2:',
'💂🏽' => ':guardsman_tone3:',
@@ -394,11 +1972,18 @@
'💇🏽' => ':haircut_tone3:',
'💇🏾' => ':haircut_tone4:',
'💇🏿' => ':haircut_tone5:',
+ '⚒️' => ':hammer_pick:',
+ '🖐️' => ':hand_splayed:',
'🖐🏻' => ':hand_splayed_tone1:',
'🖐🏼' => ':hand_splayed_tone2:',
'🖐🏽' => ':hand_splayed_tone3:',
'🖐🏾' => ':hand_splayed_tone4:',
'🖐🏿' => ':hand_splayed_tone5:',
+ '🫰🏿' => ':hand_with_index_finger_and_thumb_crossed_dark_skin_tone:',
+ '🫰🏻' => ':hand_with_index_finger_and_thumb_crossed_light_skin_tone:',
+ '🫰🏾' => ':hand_with_index_finger_and_thumb_crossed_medium_dark_skin_tone:',
+ '🫰🏼' => ':hand_with_index_finger_and_thumb_crossed_medium_light_skin_tone:',
+ '🫰🏽' => ':hand_with_index_finger_and_thumb_crossed_medium_skin_tone:',
'🤾🏻' => ':handball_tone1:',
'🤾🏼' => ':handball_tone2:',
'🤾🏽' => ':handball_tone3:',
@@ -409,32 +1994,98 @@
'🤝🏽' => ':handshake_tone3:',
'🤝🏾' => ':handshake_tone4:',
'🤝🏿' => ':handshake_tone5:',
- '#⃣' => ':hash:',
+ '❤️' => ':heart:',
+ '❣️' => ':heart_exclamation:',
+ '🫶🏿' => ':heart_hands_dark_skin_tone:',
+ '🫶🏻' => ':heart_hands_light_skin_tone:',
+ '🫶🏾' => ':heart_hands_medium_dark_skin_tone:',
+ '🫶🏼' => ':heart_hands_medium_light_skin_tone:',
+ '🫶🏽' => ':heart_hands_medium_skin_tone:',
+ '♥️' => ':hearts:',
+ '✔️' => ':heavy_check_mark:',
+ '✖️' => ':heavy_multiplication_x:',
+ '⛑️' => ':helmet_with_cross:',
+ '🕳️' => ':hole:',
+ '🏘️' => ':homes:',
'🏇🏻' => ':horse_racing_tone1:',
'🏇🏼' => ':horse_racing_tone2:',
'🏇🏽' => ':horse_racing_tone3:',
'🏇🏾' => ':horse_racing_tone4:',
'🏇🏿' => ':horse_racing_tone5:',
+ '🌶️' => ':hot_pepper:',
+ '♨️' => ':hotsprings:',
+ '🏚️' => ':house_abandoned:',
+ '⛸️' => ':ice_skate:',
+ '🫵🏿' => ':index_pointing_at_the_viewer_dark_skin_tone:',
+ '🫵🏻' => ':index_pointing_at_the_viewer_light_skin_tone:',
+ '🫵🏾' => ':index_pointing_at_the_viewer_medium_dark_skin_tone:',
+ '🫵🏼' => ':index_pointing_at_the_viewer_medium_light_skin_tone:',
+ '🫵🏽' => ':index_pointing_at_the_viewer_medium_skin_tone:',
+ '♾️' => ':infinity:',
'💁🏻' => ':information_desk_person_tone1:',
'💁🏼' => ':information_desk_person_tone2:',
'💁🏽' => ':information_desk_person_tone3:',
'💁🏾' => ':information_desk_person_tone4:',
'💁🏿' => ':information_desk_person_tone5:',
+ 'ℹ️' => ':information_source:',
+ '⁉️' => ':interrobang:',
+ '🏝️' => ':island:',
+ '🕹️' => ':joystick:',
'🤹🏻' => ':juggling_tone1:',
'🤹🏼' => ':juggling_tone2:',
'🤹🏽' => ':juggling_tone3:',
'🤹🏾' => ':juggling_tone4:',
'🤹🏿' => ':juggling_tone5:',
+ '🗝️' => ':key2:',
+ '⌨️' => ':keyboard:',
+ '💏🏿' => ':kiss_dark_skin_tone:',
+ '💏🏻' => ':kiss_light_skin_tone:',
+ '💏🏾' => ':kiss_medium_dark_skin_tone:',
+ '💏🏼' => ':kiss_medium_light_skin_tone:',
+ '💏🏽' => ':kiss_medium_skin_tone:',
+ '🏷️' => ':label:',
'🤛🏻' => ':left_facing_fist_tone1:',
'🤛🏼' => ':left_facing_fist_tone2:',
'🤛🏽' => ':left_facing_fist_tone3:',
'🤛🏾' => ':left_facing_fist_tone4:',
'🤛🏿' => ':left_facing_fist_tone5:',
+ '↔️' => ':left_right_arrow:',
+ '↩️' => ':leftwards_arrow_with_hook:',
+ '🫲🏿' => ':leftwards_hand_dark_skin_tone:',
+ '🫲🏻' => ':leftwards_hand_light_skin_tone:',
+ '🫲🏾' => ':leftwards_hand_medium_dark_skin_tone:',
+ '🫲🏼' => ':leftwards_hand_medium_light_skin_tone:',
+ '🫲🏽' => ':leftwards_hand_medium_skin_tone:',
+ '🫷🏿' => ':leftwards_pushing_hand_dark_skin_tone:',
+ '🫷🏻' => ':leftwards_pushing_hand_light_skin_tone:',
+ '🫷🏾' => ':leftwards_pushing_hand_medium_dark_skin_tone:',
+ '🫷🏼' => ':leftwards_pushing_hand_medium_light_skin_tone:',
+ '🫷🏽' => ':leftwards_pushing_hand_medium_skin_tone:',
+ '🦵🏿' => ':leg_dark_skin_tone:',
+ '🦵🏻' => ':leg_light_skin_tone:',
+ '🦵🏾' => ':leg_medium_dark_skin_tone:',
+ '🦵🏼' => ':leg_medium_light_skin_tone:',
+ '🦵🏽' => ':leg_medium_skin_tone:',
+ '🎚️' => ':level_slider:',
+ '🕴️' => ':levitate:',
+ '🏋️' => ':lifter:',
'🏋🏻' => ':lifter_tone1:',
'🏋🏼' => ':lifter_tone2:',
'🏋🏽' => ':lifter_tone3:',
'🏋🏾' => ':lifter_tone4:',
'🏋🏿' => ':lifter_tone5:',
+ '🤟🏿' => ':love_you_gesture_dark_skin_tone:',
+ '🤟🏻' => ':love_you_gesture_light_skin_tone:',
+ '🤟🏾' => ':love_you_gesture_medium_dark_skin_tone:',
+ '🤟🏼' => ':love_you_gesture_medium_light_skin_tone:',
+ '🤟🏽' => ':love_you_gesture_medium_skin_tone:',
+ 'Ⓜ️' => ':m:',
+ '🧙🏿' => ':mage_dark_skin_tone:',
+ '🧙🏻' => ':mage_light_skin_tone:',
+ '🧙🏾' => ':mage_medium_dark_skin_tone:',
+ '🧙🏼' => ':mage_medium_light_skin_tone:',
+ '🧙🏽' => ':mage_medium_skin_tone:',
+ '♂️' => ':male_sign:',
'🕺🏻' => ':man_dancing_tone1:',
'🕺🏼' => ':man_dancing_tone2:',
'🕺🏽' => ':man_dancing_tone3:',
@@ -460,26 +2111,46 @@
'👳🏽' => ':man_with_turban_tone3:',
'👳🏾' => ':man_with_turban_tone4:',
'👳🏿' => ':man_with_turban_tone5:',
+ '🗺️' => ':map:',
'💆🏻' => ':massage_tone1:',
'💆🏼' => ':massage_tone2:',
'💆🏽' => ':massage_tone3:',
'💆🏾' => ':massage_tone4:',
'💆🏿' => ':massage_tone5:',
+ '⚕️' => ':medical_symbol:',
+ '👬🏿' => ':men_holding_hands_dark_skin_tone:',
+ '👬🏻' => ':men_holding_hands_light_skin_tone:',
+ '👬🏾' => ':men_holding_hands_medium_dark_skin_tone:',
+ '👬🏼' => ':men_holding_hands_medium_light_skin_tone:',
+ '👬🏽' => ':men_holding_hands_medium_skin_tone:',
+ '🧜🏿' => ':merperson_dark_skin_tone:',
+ '🧜🏻' => ':merperson_light_skin_tone:',
+ '🧜🏾' => ':merperson_medium_dark_skin_tone:',
+ '🧜🏼' => ':merperson_medium_light_skin_tone:',
+ '🧜🏽' => ':merperson_medium_skin_tone:',
'🤘🏻' => ':metal_tone1:',
'🤘🏼' => ':metal_tone2:',
'🤘🏽' => ':metal_tone3:',
'🤘🏾' => ':metal_tone4:',
'🤘🏿' => ':metal_tone5:',
+ '🎙️' => ':microphone2:',
'🖕🏻' => ':middle_finger_tone1:',
'🖕🏼' => ':middle_finger_tone2:',
'🖕🏽' => ':middle_finger_tone3:',
'🖕🏾' => ':middle_finger_tone4:',
'🖕🏿' => ':middle_finger_tone5:',
+ '🎖️' => ':military_medal:',
+ '🛥️' => ':motorboat:',
+ '🏍️' => ':motorcycle:',
+ '🛣️' => ':motorway:',
+ '⛰️' => ':mountain:',
'🚵🏻' => ':mountain_bicyclist_tone1:',
'🚵🏼' => ':mountain_bicyclist_tone2:',
'🚵🏽' => ':mountain_bicyclist_tone3:',
'🚵🏾' => ':mountain_bicyclist_tone4:',
'🚵🏿' => ':mountain_bicyclist_tone5:',
+ '🏔️' => ':mountain_snow:',
+ '🖱️' => ':mouse_three_button:',
'🤶🏻' => ':mrs_claus_tone1:',
'🤶🏼' => ':mrs_claus_tone2:',
'🤶🏽' => ':mrs_claus_tone3:',
@@ -495,6 +2166,12 @@
'💅🏽' => ':nail_care_tone3:',
'💅🏾' => ':nail_care_tone4:',
'💅🏿' => ':nail_care_tone5:',
+ '🗞️' => ':newspaper2:',
+ '🥷🏿' => ':ninja_dark_skin_tone:',
+ '🥷🏻' => ':ninja_light_skin_tone:',
+ '🥷🏾' => ':ninja_medium_dark_skin_tone:',
+ '🥷🏼' => ':ninja_medium_light_skin_tone:',
+ '🥷🏽' => ':ninja_medium_skin_tone:',
'🙅🏻' => ':no_good_tone1:',
'🙅🏼' => ':no_good_tone2:',
'🙅🏽' => ':no_good_tone3:',
@@ -505,6 +2182,9 @@
'👃🏽' => ':nose_tone3:',
'👃🏾' => ':nose_tone4:',
'👃🏿' => ':nose_tone5:',
+ '🗒️' => ':notepad_spiral:',
+ '🅾️' => ':o2:',
+ '🛢️' => ':oil:',
'👌🏻' => ':ok_hand_tone1:',
'👌🏼' => ':ok_hand_tone2:',
'👌🏽' => ':ok_hand_tone3:',
@@ -520,31 +2200,130 @@
'👴🏽' => ':older_man_tone3:',
'👴🏾' => ':older_man_tone4:',
'👴🏿' => ':older_man_tone5:',
+ '🧓🏿' => ':older_person_dark_skin_tone:',
+ '🧓🏻' => ':older_person_light_skin_tone:',
+ '🧓🏾' => ':older_person_medium_dark_skin_tone:',
+ '🧓🏼' => ':older_person_medium_light_skin_tone:',
+ '🧓🏽' => ':older_person_medium_skin_tone:',
'👵🏻' => ':older_woman_tone1:',
'👵🏼' => ':older_woman_tone2:',
'👵🏽' => ':older_woman_tone3:',
'👵🏾' => ':older_woman_tone4:',
'👵🏿' => ':older_woman_tone5:',
+ '🕉️' => ':om_symbol:',
'👐🏻' => ':open_hands_tone1:',
'👐🏼' => ':open_hands_tone2:',
'👐🏽' => ':open_hands_tone3:',
'👐🏾' => ':open_hands_tone4:',
'👐🏿' => ':open_hands_tone5:',
+ '☦️' => ':orthodox_cross:',
+ '🖌️' => ':paintbrush:',
+ '🫳🏿' => ':palm_down_hand_dark_skin_tone:',
+ '🫳🏻' => ':palm_down_hand_light_skin_tone:',
+ '🫳🏾' => ':palm_down_hand_medium_dark_skin_tone:',
+ '🫳🏼' => ':palm_down_hand_medium_light_skin_tone:',
+ '🫳🏽' => ':palm_down_hand_medium_skin_tone:',
+ '🫴🏿' => ':palm_up_hand_dark_skin_tone:',
+ '🫴🏻' => ':palm_up_hand_light_skin_tone:',
+ '🫴🏾' => ':palm_up_hand_medium_dark_skin_tone:',
+ '🫴🏼' => ':palm_up_hand_medium_light_skin_tone:',
+ '🫴🏽' => ':palm_up_hand_medium_skin_tone:',
+ '🤲🏿' => ':palms_up_together_dark_skin_tone:',
+ '🤲🏻' => ':palms_up_together_light_skin_tone:',
+ '🤲🏾' => ':palms_up_together_medium_dark_skin_tone:',
+ '🤲🏼' => ':palms_up_together_medium_light_skin_tone:',
+ '🤲🏽' => ':palms_up_together_medium_skin_tone:',
+ '🖇️' => ':paperclips:',
+ '🏞️' => ':park:',
+ '🅿️' => ':parking:',
+ '〽️' => ':part_alternation_mark:',
+ '⏸️' => ':pause_button:',
+ '☮️' => ':peace:',
+ '🖊️' => ':pen_ballpoint:',
+ '🖋️' => ':pen_fountain:',
+ '✏️' => ':pencil2:',
+ '🧗🏿' => ':person_climbing_dark_skin_tone:',
+ '🧗🏻' => ':person_climbing_light_skin_tone:',
+ '🧗🏾' => ':person_climbing_medium_dark_skin_tone:',
+ '🧗🏼' => ':person_climbing_medium_light_skin_tone:',
+ '🧗🏽' => ':person_climbing_medium_skin_tone:',
+ '🧑🏿' => ':person_dark_skin_tone:',
+ '🧔🏿' => ':person_dark_skin_tone_beard:',
'🙍🏻' => ':person_frowning_tone1:',
'🙍🏼' => ':person_frowning_tone2:',
'🙍🏽' => ':person_frowning_tone3:',
'🙍🏾' => ':person_frowning_tone4:',
'🙍🏿' => ':person_frowning_tone5:',
+ '🏌🏿' => ':person_golfing_dark_skin_tone:',
+ '🏌🏻' => ':person_golfing_light_skin_tone:',
+ '🏌🏾' => ':person_golfing_medium_dark_skin_tone:',
+ '🏌🏼' => ':person_golfing_medium_light_skin_tone:',
+ '🏌🏽' => ':person_golfing_medium_skin_tone:',
+ '🛌🏿' => ':person_in_bed_dark_skin_tone:',
+ '🛌🏻' => ':person_in_bed_light_skin_tone:',
+ '🛌🏾' => ':person_in_bed_medium_dark_skin_tone:',
+ '🛌🏼' => ':person_in_bed_medium_light_skin_tone:',
+ '🛌🏽' => ':person_in_bed_medium_skin_tone:',
+ '🧘🏿' => ':person_in_lotus_position_dark_skin_tone:',
+ '🧘🏻' => ':person_in_lotus_position_light_skin_tone:',
+ '🧘🏾' => ':person_in_lotus_position_medium_dark_skin_tone:',
+ '🧘🏼' => ':person_in_lotus_position_medium_light_skin_tone:',
+ '🧘🏽' => ':person_in_lotus_position_medium_skin_tone:',
+ '🧖🏿' => ':person_in_steamy_room_dark_skin_tone:',
+ '🧖🏻' => ':person_in_steamy_room_light_skin_tone:',
+ '🧖🏾' => ':person_in_steamy_room_medium_dark_skin_tone:',
+ '🧖🏼' => ':person_in_steamy_room_medium_light_skin_tone:',
+ '🧖🏽' => ':person_in_steamy_room_medium_skin_tone:',
+ '🕴🏿' => ':person_in_suit_levitating_dark_skin_tone:',
+ '🕴🏻' => ':person_in_suit_levitating_light_skin_tone:',
+ '🕴🏾' => ':person_in_suit_levitating_medium_dark_skin_tone:',
+ '🕴🏼' => ':person_in_suit_levitating_medium_light_skin_tone:',
+ '🕴🏽' => ':person_in_suit_levitating_medium_skin_tone:',
+ '🧎🏿' => ':person_kneeling_dark_skin_tone:',
+ '🧎🏻' => ':person_kneeling_light_skin_tone:',
+ '🧎🏾' => ':person_kneeling_medium_dark_skin_tone:',
+ '🧎🏼' => ':person_kneeling_medium_light_skin_tone:',
+ '🧎🏽' => ':person_kneeling_medium_skin_tone:',
+ '🧑🏻' => ':person_light_skin_tone:',
+ '🧔🏻' => ':person_light_skin_tone_beard:',
+ '🧑🏾' => ':person_medium_dark_skin_tone:',
+ '🧔🏾' => ':person_medium_dark_skin_tone_beard:',
+ '🧑🏼' => ':person_medium_light_skin_tone:',
+ '🧔🏼' => ':person_medium_light_skin_tone_beard:',
+ '🧑🏽' => ':person_medium_skin_tone:',
+ '🧔🏽' => ':person_medium_skin_tone_beard:',
+ '🧍🏿' => ':person_standing_dark_skin_tone:',
+ '🧍🏻' => ':person_standing_light_skin_tone:',
+ '🧍🏾' => ':person_standing_medium_dark_skin_tone:',
+ '🧍🏼' => ':person_standing_medium_light_skin_tone:',
+ '🧍🏽' => ':person_standing_medium_skin_tone:',
'👱🏻' => ':person_with_blond_hair_tone1:',
'👱🏼' => ':person_with_blond_hair_tone2:',
'👱🏽' => ':person_with_blond_hair_tone3:',
'👱🏾' => ':person_with_blond_hair_tone4:',
'👱🏿' => ':person_with_blond_hair_tone5:',
+ '🫅🏿' => ':person_with_crown_dark_skin_tone:',
+ '🫅🏻' => ':person_with_crown_light_skin_tone:',
+ '🫅🏾' => ':person_with_crown_medium_dark_skin_tone:',
+ '🫅🏼' => ':person_with_crown_medium_light_skin_tone:',
+ '🫅🏽' => ':person_with_crown_medium_skin_tone:',
'🙎🏻' => ':person_with_pouting_face_tone1:',
'🙎🏼' => ':person_with_pouting_face_tone2:',
'🙎🏽' => ':person_with_pouting_face_tone3:',
'🙎🏾' => ':person_with_pouting_face_tone4:',
'🙎🏿' => ':person_with_pouting_face_tone5:',
+ '⛏️' => ':pick:',
+ '🤌🏿' => ':pinched_fingers_dark_skin_tone:',
+ '🤌🏻' => ':pinched_fingers_light_skin_tone:',
+ '🤌🏾' => ':pinched_fingers_medium_dark_skin_tone:',
+ '🤌🏼' => ':pinched_fingers_medium_light_skin_tone:',
+ '🤌🏽' => ':pinched_fingers_medium_skin_tone:',
+ '🤏🏿' => ':pinching_hand_dark_skin_tone:',
+ '🤏🏻' => ':pinching_hand_light_skin_tone:',
+ '🤏🏾' => ':pinching_hand_medium_dark_skin_tone:',
+ '🤏🏼' => ':pinching_hand_medium_light_skin_tone:',
+ '🤏🏽' => ':pinching_hand_medium_skin_tone:',
+ '⏯️' => ':play_pause:',
'👇🏻' => ':point_down_tone1:',
'👇🏼' => ':point_down_tone2:',
'👇🏽' => ':point_down_tone3:',
@@ -560,6 +2339,7 @@
'👉🏽' => ':point_right_tone3:',
'👉🏾' => ':point_right_tone4:',
'👉🏿' => ':point_right_tone5:',
+ '☝️' => ':point_up:',
'👆🏻' => ':point_up_2_tone1:',
'👆🏼' => ':point_up_2_tone2:',
'👆🏽' => ':point_up_2_tone3:',
@@ -575,6 +2355,16 @@
'🙏🏽' => ':pray_tone3:',
'🙏🏾' => ':pray_tone4:',
'🙏🏿' => ':pray_tone5:',
+ '🫃🏿' => ':pregnant_man_dark_skin_tone:',
+ '🫃🏻' => ':pregnant_man_light_skin_tone:',
+ '🫃🏾' => ':pregnant_man_medium_dark_skin_tone:',
+ '🫃🏼' => ':pregnant_man_medium_light_skin_tone:',
+ '🫃🏽' => ':pregnant_man_medium_skin_tone:',
+ '🫄🏿' => ':pregnant_person_dark_skin_tone:',
+ '🫄🏻' => ':pregnant_person_light_skin_tone:',
+ '🫄🏾' => ':pregnant_person_medium_dark_skin_tone:',
+ '🫄🏼' => ':pregnant_person_medium_light_skin_tone:',
+ '🫄🏽' => ':pregnant_person_medium_skin_tone:',
'🤰🏻' => ':pregnant_woman_tone1:',
'🤰🏼' => ':pregnant_woman_tone2:',
'🤰🏽' => ':pregnant_woman_tone3:',
@@ -590,11 +2380,16 @@
'👸🏽' => ':princess_tone3:',
'👸🏾' => ':princess_tone4:',
'👸🏿' => ':princess_tone5:',
+ '🖨️' => ':printer:',
+ '📽️' => ':projector:',
'👊🏻' => ':punch_tone1:',
'👊🏼' => ':punch_tone2:',
'👊🏽' => ':punch_tone3:',
'👊🏾' => ':punch_tone4:',
'👊🏿' => ':punch_tone5:',
+ '🏎️' => ':race_car:',
+ '☢️' => ':radioactive:',
+ '🛤️' => ':railway_track:',
'🤚🏻' => ':raised_back_of_hand_tone1:',
'🤚🏼' => ':raised_back_of_hand_tone2:',
'🤚🏽' => ':raised_back_of_hand_tone3:',
@@ -615,11 +2410,27 @@
'🙋🏽' => ':raising_hand_tone3:',
'🙋🏾' => ':raising_hand_tone4:',
'🙋🏿' => ':raising_hand_tone5:',
+ '⏺️' => ':record_button:',
+ '♻️' => ':recycle:',
+ '®️' => ':registered:',
+ '☺️' => ':relaxed:',
+ '🎗️' => ':reminder_ribbon:',
'🤜🏻' => ':right_facing_fist_tone1:',
'🤜🏼' => ':right_facing_fist_tone2:',
'🤜🏽' => ':right_facing_fist_tone3:',
'🤜🏾' => ':right_facing_fist_tone4:',
'🤜🏿' => ':right_facing_fist_tone5:',
+ '🫱🏿' => ':rightwards_hand_dark_skin_tone:',
+ '🫱🏻' => ':rightwards_hand_light_skin_tone:',
+ '🫱🏾' => ':rightwards_hand_medium_dark_skin_tone:',
+ '🫱🏼' => ':rightwards_hand_medium_light_skin_tone:',
+ '🫱🏽' => ':rightwards_hand_medium_skin_tone:',
+ '🫸🏿' => ':rightwards_pushing_hand_dark_skin_tone:',
+ '🫸🏻' => ':rightwards_pushing_hand_light_skin_tone:',
+ '🫸🏾' => ':rightwards_pushing_hand_medium_dark_skin_tone:',
+ '🫸🏼' => ':rightwards_pushing_hand_medium_light_skin_tone:',
+ '🫸🏽' => ':rightwards_pushing_hand_medium_skin_tone:',
+ '🏵️' => ':rosette:',
'🚣🏻' => ':rowboat_tone1:',
'🚣🏼' => ':rowboat_tone2:',
'🚣🏽' => ':rowboat_tone3:',
@@ -630,26 +2441,67 @@
'🏃🏽' => ':runner_tone3:',
'🏃🏾' => ':runner_tone4:',
'🏃🏿' => ':runner_tone5:',
+ '🈂️' => ':sa:',
'🎅🏻' => ':santa_tone1:',
'🎅🏼' => ':santa_tone2:',
'🎅🏽' => ':santa_tone3:',
'🎅🏾' => ':santa_tone4:',
'🎅🏿' => ':santa_tone5:',
+ '🛰️' => ':satellite_orbital:',
+ '⚖️' => ':scales:',
+ '✂️' => ':scissors:',
+ '㊙️' => ':secret:',
'🤳🏻' => ':selfie_tone1:',
'🤳🏼' => ':selfie_tone2:',
'🤳🏽' => ':selfie_tone3:',
'🤳🏾' => ':selfie_tone4:',
'🤳🏿' => ':selfie_tone5:',
+ '☘️' => ':shamrock:',
+ '🛡️' => ':shield:',
+ '⛩️' => ':shinto_shrine:',
+ '🛍️' => ':shopping_bags:',
'🤷🏻' => ':shrug_tone1:',
'🤷🏼' => ':shrug_tone2:',
'🤷🏽' => ':shrug_tone3:',
'🤷🏾' => ':shrug_tone4:',
'🤷🏿' => ':shrug_tone5:',
+ '⛷️' => ':skier:',
+ '☠️' => ':skull_crossbones:',
+ '🏂🏿' => ':snowboarder_dark_skin_tone:',
+ '🏂🏻' => ':snowboarder_light_skin_tone:',
+ '🏂🏾' => ':snowboarder_medium_dark_skin_tone:',
+ '🏂🏼' => ':snowboarder_medium_light_skin_tone:',
+ '🏂🏽' => ':snowboarder_medium_skin_tone:',
+ '❄️' => ':snowflake:',
+ '☃️' => ':snowman2:',
+ '♠️' => ':spades:',
+ '❇️' => ':sparkle:',
+ '🗣️' => ':speaking_head:',
+ '🗨️' => ':speech_left:',
+ '🕷️' => ':spider:',
+ '🕸️' => ':spider_web:',
+ '🕵️' => ':spy:',
'🕵🏻' => ':spy_tone1:',
'🕵🏼' => ':spy_tone2:',
'🕵🏽' => ':spy_tone3:',
'🕵🏾' => ':spy_tone4:',
'🕵🏿' => ':spy_tone5:',
+ '🏟️' => ':stadium:',
+ '☪️' => ':star_and_crescent:',
+ '✡️' => ':star_of_david:',
+ '⏹️' => ':stop_button:',
+ '⏱️' => ':stopwatch:',
+ '☀️' => ':sunny:',
+ '🦸🏿' => ':superhero_dark_skin_tone:',
+ '🦸🏻' => ':superhero_light_skin_tone:',
+ '🦸🏾' => ':superhero_medium_dark_skin_tone:',
+ '🦸🏼' => ':superhero_medium_light_skin_tone:',
+ '🦸🏽' => ':superhero_medium_skin_tone:',
+ '🦹🏿' => ':supervillain_dark_skin_tone:',
+ '🦹🏻' => ':supervillain_light_skin_tone:',
+ '🦹🏾' => ':supervillain_medium_dark_skin_tone:',
+ '🦹🏼' => ':supervillain_medium_light_skin_tone:',
+ '🦹🏽' => ':supervillain_medium_skin_tone:',
'🏄🏻' => ':surfer_tone1:',
'🏄🏼' => ':surfer_tone2:',
'🏄🏽' => ':surfer_tone3:',
@@ -660,6 +2512,8 @@
'🏊🏽' => ':swimmer_tone3:',
'🏊🏾' => ':swimmer_tone4:',
'🏊🏿' => ':swimmer_tone5:',
+ '☎️' => ':telephone:',
+ '🌡️' => ':thermometer:',
'👎🏻' => ':thumbsdown_tone1:',
'👎🏼' => ':thumbsdown_tone2:',
'👎🏽' => ':thumbsdown_tone3:',
@@ -670,11 +2524,29 @@
'👍🏽' => ':thumbsup_tone3:',
'👍🏾' => ':thumbsup_tone4:',
'👍🏿' => ':thumbsup_tone5:',
+ '⛈️' => ':thunder_cloud_rain:',
+ '🎟️' => ':tickets:',
+ '⏲️' => ':timer:',
+ '™️' => ':tm:',
+ '🛠️' => ':tools:',
+ '⏭️' => ':track_next:',
+ '⏮️' => ':track_previous:',
+ '🖲️' => ':trackball:',
+ '⚧️' => ':transgender_symbol:',
+ '🈷️' => ':u6708:',
+ '☂️' => ':umbrella2:',
+ '⚱️' => ':urn:',
+ '✌️' => ':v:',
'✌🏻' => ':v_tone1:',
'✌🏼' => ':v_tone2:',
'✌🏽' => ':v_tone3:',
'✌🏾' => ':v_tone4:',
'✌🏿' => ':v_tone5:',
+ '🧛🏿' => ':vampire_dark_skin_tone:',
+ '🧛🏻' => ':vampire_light_skin_tone:',
+ '🧛🏾' => ':vampire_medium_dark_skin_tone:',
+ '🧛🏼' => ':vampire_medium_light_skin_tone:',
+ '🧛🏽' => ':vampire_medium_skin_tone:',
'🖖🏻' => ':vulcan_tone1:',
'🖖🏼' => ':vulcan_tone2:',
'🖖🏽' => ':vulcan_tone3:',
@@ -685,6 +2557,8 @@
'🚶🏽' => ':walking_tone3:',
'🚶🏾' => ':walking_tone4:',
'🚶🏿' => ':walking_tone5:',
+ '⚠️' => ':warning:',
+ '🗑️' => ':wastebasket:',
'🤽🏻' => ':water_polo_tone1:',
'🤽🏼' => ':water_polo_tone2:',
'🤽🏽' => ':water_polo_tone3:',
@@ -695,67 +2569,72 @@
'👋🏽' => ':wave_tone3:',
'👋🏾' => ':wave_tone4:',
'👋🏿' => ':wave_tone5:',
+ '〰️' => ':wavy_dash:',
+ '☸️' => ':wheel_of_dharma:',
+ '◻️' => ':white_medium_square:',
+ '▫️' => ':white_small_square:',
+ '🌥️' => ':white_sun_cloud:',
+ '🌦️' => ':white_sun_rain_cloud:',
+ '🌤️' => ':white_sun_small_cloud:',
+ '🌬️' => ':wind_blowing_face:',
+ '👫🏿' => ':woman_and_man_holding_hands_dark_skin_tone:',
+ '👫🏻' => ':woman_and_man_holding_hands_light_skin_tone:',
+ '👫🏾' => ':woman_and_man_holding_hands_medium_dark_skin_tone:',
+ '👫🏼' => ':woman_and_man_holding_hands_medium_light_skin_tone:',
+ '👫🏽' => ':woman_and_man_holding_hands_medium_skin_tone:',
'👩🏻' => ':woman_tone1:',
'👩🏼' => ':woman_tone2:',
'👩🏽' => ':woman_tone3:',
'👩🏾' => ':woman_tone4:',
'👩🏿' => ':woman_tone5:',
- '🤼🏻' => ':wrestlers_tone1:',
- '🤼🏼' => ':wrestlers_tone2:',
- '🤼🏽' => ':wrestlers_tone3:',
- '🤼🏾' => ':wrestlers_tone4:',
- '🤼🏿' => ':wrestlers_tone5:',
+ '🧕🏿' => ':woman_with_headscarf_dark_skin_tone:',
+ '🧕🏻' => ':woman_with_headscarf_light_skin_tone:',
+ '🧕🏾' => ':woman_with_headscarf_medium_dark_skin_tone:',
+ '🧕🏼' => ':woman_with_headscarf_medium_light_skin_tone:',
+ '🧕🏽' => ':woman_with_headscarf_medium_skin_tone:',
+ '👭🏿' => ':women_holding_hands_dark_skin_tone:',
+ '👭🏻' => ':women_holding_hands_light_skin_tone:',
+ '👭🏾' => ':women_holding_hands_medium_dark_skin_tone:',
+ '👭🏼' => ':women_holding_hands_medium_light_skin_tone:',
+ '👭🏽' => ':women_holding_hands_medium_skin_tone:',
+ '✍️' => ':writing_hand:',
'✍🏻' => ':writing_hand_tone1:',
'✍🏼' => ':writing_hand_tone2:',
'✍🏽' => ':writing_hand_tone3:',
'✍🏾' => ':writing_hand_tone4:',
'✍🏿' => ':writing_hand_tone5:',
+ '☯️' => ':yin_yang:',
'🎱' => ':8ball:',
'💯' => ':100:',
'🔢' => ':1234:',
- '🅰' => ':a:',
'🆎' => ':ab:',
+ '🧮' => ':abacus:',
'🔤' => ':abc:',
'🔡' => ':abcd:',
'🉑' => ':accept:',
+ '🪗' => ':accordion:',
+ '🩹' => ':adhesive_bandage:',
'🚡' => ':aerial_tramway:',
- '✈' => ':airplane:',
'🛬' => ':airplane_arriving:',
'🛫' => ':airplane_departure:',
- '🛩' => ':airplane_small:',
'⏰' => ':alarm_clock:',
- '⚗' => ':alembic:',
'👽' => ':alien:',
'🚑' => ':ambulance:',
'🏺' => ':amphora:',
+ '🫀' => ':anatomical_heart:',
'⚓' => ':anchor:',
'👼' => ':angel:',
'💢' => ':anger:',
- '🗯' => ':anger_right:',
'😠' => ':angry:',
'😧' => ':anguished:',
'🐜' => ':ant:',
'🍎' => ':apple:',
'♒' => ':aquarius:',
'♈' => ':aries:',
- '◀' => ':arrow_backward:',
'⏬' => ':arrow_double_down:',
'⏫' => ':arrow_double_up:',
- '⬇' => ':arrow_down:',
'🔽' => ':arrow_down_small:',
- '▶' => ':arrow_forward:',
- '⤵' => ':arrow_heading_down:',
- '⤴' => ':arrow_heading_up:',
- '⬅' => ':arrow_left:',
- '↙' => ':arrow_lower_left:',
- '↘' => ':arrow_lower_right:',
- '➡' => ':arrow_right:',
- '↪' => ':arrow_right_hook:',
- '⬆' => ':arrow_up:',
- '↕' => ':arrow_up_down:',
'🔼' => ':arrow_up_small:',
- '↖' => ':arrow_upper_left:',
- '↗' => ':arrow_upper_right:',
'🔃' => ':arrows_clockwise:',
'🔄' => ':arrows_counterclockwise:',
'🎨' => ':art:',
@@ -763,85 +2642,103 @@
'😲' => ':astonished:',
'👟' => ':athletic_shoe:',
'🏧' => ':atm:',
- '⚛' => ':atom:',
+ '🛺' => ':auto_rickshaw:',
'🥑' => ':avocado:',
- '🅱' => ':b:',
+ '🪓' => ':axe:',
'👶' => ':baby:',
'🍼' => ':baby_bottle:',
'🐤' => ':baby_chick:',
'🚼' => ':baby_symbol:',
'🔙' => ':back:',
'🥓' => ':bacon:',
+ '🦡' => ':badger:',
'🏸' => ':badminton:',
+ '🥯' => ':bagel:',
'🛄' => ':baggage_claim:',
+ '🦲' => ':bald:',
+ '🩰' => ':ballet_shoes:',
'🎈' => ':balloon:',
- '🗳' => ':ballot_box:',
- '☑' => ':ballot_box_with_check:',
'🎍' => ':bamboo:',
'🍌' => ':banana:',
- '‼' => ':bangbang:',
+ '🪕' => ':banjo:',
'🏦' => ':bank:',
'📊' => ':bar_chart:',
'💈' => ':barber:',
'⚾' => ':baseball:',
+ '🧺' => ':basket:',
'🏀' => ':basketball:',
- '⛹' => ':basketball_player:',
'🦇' => ':bat:',
'🛀' => ':bath:',
'🛁' => ':bathtub:',
'🔋' => ':battery:',
- '🏖' => ':beach:',
- '⛱' => ':beach_umbrella:',
+ '🫘' => ':beans:',
'🐻' => ':bear:',
- '🛏' => ':bed:',
+ '🦫' => ':beaver:',
'🐝' => ':bee:',
'🍺' => ':beer:',
'🍻' => ':beers:',
'🐞' => ':beetle:',
'🔰' => ':beginner:',
'🔔' => ':bell:',
- '🛎' => ':bellhop:',
+ '🫑' => ':bell_pepper:',
'🍱' => ':bento:',
+ '🧃' => ':beverage_box:',
'🚴' => ':bicyclist:',
'🚲' => ':bike:',
'👙' => ':bikini:',
- '☣' => ':biohazard:',
+ '🧢' => ':billed_cap:',
'🐦' => ':bird:',
'🎂' => ':birthday:',
+ '🦬' => ':bison:',
+ '🫦' => ':biting_lip:',
'⚫' => ':black_circle:',
'🖤' => ':black_heart:',
'🃏' => ':black_joker:',
'⬛' => ':black_large_square:',
'◾' => ':black_medium_small_square:',
- '◼' => ':black_medium_square:',
- '✒' => ':black_nib:',
- '▪' => ':black_small_square:',
'🔲' => ':black_square_button:',
'🌼' => ':blossom:',
'🐡' => ':blowfish:',
'📘' => ':blue_book:',
'🚙' => ':blue_car:',
'💙' => ':blue_heart:',
+ '🟦' => ':blue_square:',
+ '🫐' => ':blueberries:',
'😊' => ':blush:',
'🐗' => ':boar:',
'💣' => ':bomb:',
+ '🦴' => ':bone:',
'📖' => ':book:',
'🔖' => ':bookmark:',
'📑' => ':bookmark_tabs:',
'📚' => ':books:',
'💥' => ':boom:',
+ '🪃' => ':boomerang:',
'👢' => ':boot:',
'💐' => ':bouquet:',
'🙇' => ':bow:',
'🏹' => ':bow_and_arrow:',
+ '🥣' => ':bowl_with_spoon:',
'🎳' => ':bowling:',
'🥊' => ':boxing_glove:',
'👦' => ':boy:',
+ '🧠' => ':brain:',
'🍞' => ':bread:',
+ '🤱' => ':breast_feeding:',
+ '🧱' => ':brick:',
'👰' => ':bride_with_veil:',
'🌉' => ':bridge_at_night:',
'💼' => ':briefcase:',
+ '🩲' => ':briefs:',
+ '🥦' => ':broccoli:',
'💔' => ':broken_heart:',
+ '🧹' => ':broom:',
+ '🟤' => ':brown_circle:',
+ '🤎' => ':brown_heart:',
+ '🟫' => ':brown_square:',
+ '🧋' => ':bubble_tea:',
+ '🫧' => ':bubbles:',
+ '🪣' => ':bucket:',
'🐛' => ':bug:',
'💡' => ':bulb:',
'🚅' => ':bullettrain_front:',
@@ -851,32 +2748,31 @@
'🚏' => ':busstop:',
'👤' => ':bust_in_silhouette:',
'👥' => ':busts_in_silhouette:',
+ '🧈' => ':butter:',
'🦋' => ':butterfly:',
'🌵' => ':cactus:',
'🍰' => ':cake:',
'📆' => ':calendar:',
- '🗓' => ':calendar_spiral:',
'🤙' => ':call_me:',
'📲' => ':calling:',
'🐫' => ':camel:',
'📷' => ':camera:',
'📸' => ':camera_with_flash:',
- '🏕' => ':camping:',
'♋' => ':cancer:',
- '🕯' => ':candle:',
'🍬' => ':candy:',
+ '🥫' => ':canned_food:',
'🛶' => ':canoe:',
'🔠' => ':capital_abcd:',
'♑' => ':capricorn:',
- '🗃' => ':card_box:',
'📇' => ':card_index:',
'🎠' => ':carousel_horse:',
+ '🪚' => ':carpentry_saw:',
'🥕' => ':carrot:',
'🤸' => ':cartwheel:',
'🐱' => ':cat:',
'🐈' => ':cat2:',
'💿' => ':cd:',
- '⛓' => ':chains:',
+ '🪑' => ':chair:',
'🍾' => ':champagne:',
'🥂' => ':champagne_glass:',
'💹' => ':chart:',
@@ -888,22 +2784,20 @@
'🌸' => ':cherry_blossom:',
'🌰' => ':chestnut:',
'🐔' => ':chicken:',
+ '🧒' => ':child:',
'🚸' => ':children_crossing:',
- '🐿' => ':chipmunk:',
'🍫' => ':chocolate_bar:',
+ '🥢' => ':chopsticks:',
'🎄' => ':christmas_tree:',
'⛪' => ':church:',
'🎦' => ':cinema:',
'🎪' => ':circus_tent:',
'🌆' => ':city_dusk:',
'🌇' => ':city_sunset:',
- '🏙' => ':cityscape:',
'🆑' => ':cl:',
'👏' => ':clap:',
'🎬' => ':clapper:',
- '🏛' => ':classical_building:',
'📋' => ':clipboard:',
- '🕰' => ':clock:',
'🕐' => ':clock1:',
'🕑' => ':clock2:',
'🕒' => ':clock3:',
@@ -931,36 +2825,29 @@
'📕' => ':closed_book:',
'🔐' => ':closed_lock_with_key:',
'🌂' => ':closed_umbrella:',
- '☁' => ':cloud:',
- '🌩' => ':cloud_lightning:',
- '🌧' => ':cloud_rain:',
- '🌨' => ':cloud_snow:',
- '🌪' => ':cloud_tornado:',
'🤡' => ':clown:',
- '♣' => ':clubs:',
+ '🧥' => ':coat:',
+ '🪳' => ':cockroach:',
'🍸' => ':cocktail:',
+ '🥥' => ':coconut:',
'☕' => ':coffee:',
- '⚰' => ':coffin:',
+ '🪙' => ':coin:',
+ '🥶' => ':cold_face:',
'😰' => ':cold_sweat:',
- '☄' => ':comet:',
- '🗜' => ':compression:',
+ '🧭' => ':compass:',
'💻' => ':computer:',
'🎊' => ':confetti_ball:',
'😖' => ':confounded:',
'😕' => ':confused:',
- '㊗' => ':congratulations:',
'🚧' => ':construction:',
- '🏗' => ':construction_site:',
'👷' => ':construction_worker:',
- '🎛' => ':control_knobs:',
'🏪' => ':convenience_store:',
'🍪' => ':cookie:',
'🍳' => ':cooking:',
'🆒' => ':cool:',
'👮' => ':cop:',
- '©' => ':copyright:',
+ '🪸' => ':coral:',
'🌽' => ':corn:',
- '🛋' => ':couch:',
'👫' => ':couple:',
'💑' => ':couple_with_heart:',
'💏' => ':couplekiss:',
@@ -968,110 +2855,126 @@
'🐄' => ':cow2:',
'🤠' => ':cowboy:',
'🦀' => ':crab:',
- '🖍' => ':crayon:',
'💳' => ':credit_card:',
'🌙' => ':crescent_moon:',
'🏏' => ':cricket:',
'🐊' => ':crocodile:',
'🥐' => ':croissant:',
- '✝' => ':cross:',
'🎌' => ':crossed_flags:',
- '⚔' => ':crossed_swords:',
'👑' => ':crown:',
- '🛳' => ':cruise_ship:',
+ '🩼' => ':crutch:',
'😢' => ':cry:',
'😿' => ':crying_cat_face:',
'🔮' => ':crystal_ball:',
'🥒' => ':cucumber:',
+ '🥤' => ':cup_with_straw:',
+ '🧁' => ':cupcake:',
'💘' => ':cupid:',
+ '🥌' => ':curling_stone:',
+ '🦱' => ':curly_hair:',
'➰' => ':curly_loop:',
'💱' => ':currency_exchange:',
'🍛' => ':curry:',
'🍮' => ':custard:',
'🛃' => ':customs:',
+ '🥩' => ':cut_of_meat:',
'🌀' => ':cyclone:',
- '🗡' => ':dagger:',
'💃' => ':dancer:',
'👯' => ':dancers:',
'🍡' => ':dango:',
- '🕶' => ':dark_sunglasses:',
'🎯' => ':dart:',
'💨' => ':dash:',
'📅' => ':date:',
+ '🧏' => ':deaf_person:',
'🌳' => ':deciduous_tree:',
'🦌' => ':deer:',
'🏬' => ':department_store:',
- '🏜' => ':desert:',
- '🖥' => ':desktop:',
'💠' => ':diamond_shape_with_a_dot_inside:',
- '♦' => ':diamonds:',
'😞' => ':disappointed:',
'😥' => ':disappointed_relieved:',
- '🗂' => ':dividers:',
+ '🥸' => ':disguised_face:',
+ '🤿' => ':diving_mask:',
+ '🪔' => ':diya_lamp:',
'💫' => ':dizzy:',
'😵' => ':dizzy_face:',
+ '🧬' => ':dna:',
'🚯' => ':do_not_litter:',
+ '🦤' => ':dodo:',
'🐶' => ':dog:',
'🐕' => ':dog2:',
'💵' => ':dollar:',
'🎎' => ':dolls:',
'🐬' => ':dolphin:',
+ '🫏' => ':donkey:',
'🚪' => ':door:',
+ '🫥' => ':dotted_line_face:',
'🍩' => ':doughnut:',
- '🕊' => ':dove:',
'🐉' => ':dragon:',
'🐲' => ':dragon_face:',
'👗' => ':dress:',
'🐪' => ':dromedary_camel:',
'🤤' => ':drooling_face:',
+ '🩸' => ':drop_of_blood:',
'💧' => ':droplet:',
'🥁' => ':drum:',
'🦆' => ':duck:',
+ '🥟' => ':dumpling:',
'📀' => ':dvd:',
'📧' => ':e-mail:',
'🦅' => ':eagle:',
'👂' => ':ear:',
'🌾' => ':ear_of_rice:',
+ '🦻' => ':ear_with_hearing_aid:',
'🌍' => ':earth_africa:',
'🌎' => ':earth_americas:',
'🌏' => ':earth_asia:',
'🥚' => ':egg:',
'🍆' => ':eggplant:',
- '✴' => ':eight_pointed_black_star:',
- '✳' => ':eight_spoked_asterisk:',
- '⏏' => ':eject:',
'🔌' => ':electric_plug:',
'🐘' => ':elephant:',
+ '🛗' => ':elevator:',
+ '🧝' => ':elf:',
+ '🪹' => ':empty_nest:',
'🔚' => ':end:',
- '✉' => ':envelope:',
'📩' => ':envelope_with_arrow:',
'💶' => ':euro:',
'🏰' => ':european_castle:',
'🏤' => ':european_post_office:',
'🌲' => ':evergreen_tree:',
'❗' => ':exclamation:',
+ '🤯' => ':exploding_head:',
'😑' => ':expressionless:',
- '👁' => ':eye:',
'👓' => ':eyeglasses:',
'👀' => ':eyes:',
+ '🥹' => ':face_holding_back_tears:',
'🤦' => ':face_palm:',
+ '🤮' => ':face_vomiting:',
+ '🫤' => ':face_with_diagonal_mouth:',
+ '🤭' => ':face_with_hand_over_mouth:',
+ '🧐' => ':face_with_monocle:',
+ '🫢' => ':face_with_open_eyes_and_hand_over_mouth:',
+ '🫣' => ':face_with_peeking_eye:',
+ '🤨' => ':face_with_raised_eyebrow:',
+ '🤬' => ':face_with_symbols_on_mouth:',
'🏭' => ':factory:',
+ '🧚' => ':fairy:',
+ '🧆' => ':falafel:',
'🍂' => ':fallen_leaf:',
'👪' => ':family:',
'⏩' => ':fast_forward:',
'📠' => ':fax:',
'😨' => ':fearful:',
+ '🪶' => ':feather:',
'🐾' => ':feet:',
'🤺' => ':fencer:',
'🎡' => ':ferris_wheel:',
- '⛴' => ':ferry:',
'🏑' => ':field_hockey:',
- '🗄' => ':file_cabinet:',
'📁' => ':file_folder:',
- '🎞' => ':film_frames:',
'🤞' => ':fingers_crossed:',
'🔥' => ':fire:',
'🚒' => ':fire_engine:',
+ '🧯' => ':fire_extinguisher:',
+ '🧨' => ':firecracker:',
'🎆' => ':fireworks:',
'🥇' => ':first_place:',
'🌓' => ':first_quarter_moon:',
@@ -1081,65 +2984,80 @@
'🎣' => ':fishing_pole_and_fish:',
'✊' => ':fist:',
'🏴' => ':flag_black:',
- '🏳' => ':flag_white:',
'🎏' => ':flags:',
+ '🦩' => ':flamingo:',
'🔦' => ':flashlight:',
- '⚜' => ':fleur-de-lis:',
+ '🥿' => ':flat_shoe:',
+ '🫓' => ':flatbread:',
'💾' => ':floppy_disk:',
'🎴' => ':flower_playing_cards:',
'😳' => ':flushed:',
- '🌫' => ':fog:',
+ '🪈' => ':flute:',
+ '🪰' => ':fly:',
+ '🥏' => ':flying_disc:',
+ '🛸' => ':flying_saucer:',
'🌁' => ':foggy:',
+ '🪭' => ':folding_hand_fan:',
+ '🫕' => ':fondue:',
+ '🦶' => ':foot:',
'🏈' => ':football:',
'👣' => ':footprints:',
'🍴' => ':fork_and_knife:',
- '🍽' => ':fork_knife_plate:',
+ '🥠' => ':fortune_cookie:',
'⛲' => ':fountain:',
'🍀' => ':four_leaf_clover:',
'🦊' => ':fox:',
- '🖼' => ':frame_photo:',
'🆓' => ':free:',
'🥖' => ':french_bread:',
'🍤' => ':fried_shrimp:',
'🍟' => ':fries:',
'🐸' => ':frog:',
'😦' => ':frowning:',
- '☹' => ':frowning2:',
'⛽' => ':fuelpump:',
'🌕' => ':full_moon:',
'🌝' => ':full_moon_with_face:',
'🎲' => ':game_die:',
- '⚙' => ':gear:',
+ '🧄' => ':garlic:',
'💎' => ':gem:',
'♊' => ':gemini:',
+ '🧞' => ':genie:',
'👻' => ':ghost:',
'🎁' => ':gift:',
'💝' => ':gift_heart:',
+ '🫚' => ':ginger_root:',
+ '🦒' => ':giraffe:',
'👧' => ':girl:',
'🌐' => ':globe_with_meridians:',
+ '🧤' => ':gloves:',
'🥅' => ':goal:',
'🐐' => ':goat:',
+ '🥽' => ':goggles:',
'⛳' => ':golf:',
- '🏌' => ':golfer:',
+ '🪿' => ':goose:',
'🦍' => ':gorilla:',
'🍇' => ':grapes:',
'🍏' => ':green_apple:',
'📗' => ':green_book:',
+ '🟢' => ':green_circle:',
'💚' => ':green_heart:',
+ '🟩' => ':green_square:',
'❕' => ':grey_exclamation:',
+ '🩶' => ':grey_heart:',
'❔' => ':grey_question:',
'😬' => ':grimacing:',
'😁' => ':grin:',
'😀' => ':grinning:',
'💂' => ':guardsman:',
+ '🦮' => ':guide_dog:',
'🎸' => ':guitar:',
'🔫' => ':gun:',
+ '🪮' => ':hair_pick:',
'💇' => ':haircut:',
'🍔' => ':hamburger:',
'🔨' => ':hammer:',
- '⚒' => ':hammer_pick:',
+ '🪬' => ':hamsa:',
'🐹' => ':hamster:',
- '🖐' => ':hand_splayed:',
+ '🫰' => ':hand_with_index_finger_and_thumb_crossed:',
'👜' => ':handbag:',
'🤾' => ':handball:',
'🤝' => ':handshake:',
@@ -1147,74 +3065,74 @@
'🐣' => ':hatching_chick:',
'🤕' => ':head_bandage:',
'🎧' => ':headphones:',
+ '🪦' => ':headstone:',
'🙉' => ':hear_no_evil:',
- '❤' => ':heart:',
'💟' => ':heart_decoration:',
- '❣' => ':heart_exclamation:',
'😍' => ':heart_eyes:',
'😻' => ':heart_eyes_cat:',
+ '🫶' => ':heart_hands:',
'💓' => ':heartbeat:',
'💗' => ':heartpulse:',
- '♥' => ':hearts:',
- '✔' => ':heavy_check_mark:',
'➗' => ':heavy_division_sign:',
'💲' => ':heavy_dollar_sign:',
+ '🟰' => ':heavy_equals_sign:',
'➖' => ':heavy_minus_sign:',
- '✖' => ':heavy_multiplication_x:',
'➕' => ':heavy_plus_sign:',
+ '🦔' => ':hedgehog:',
'🚁' => ':helicopter:',
- '⛑' => ':helmet_with_cross:',
'🌿' => ':herb:',
'🌺' => ':hibiscus:',
'🔆' => ':high_brightness:',
'👠' => ':high_heel:',
+ '🥾' => ':hiking_boot:',
+ '🛕' => ':hindu_temple:',
+ '🦛' => ':hippopotamus:',
'🏒' => ':hockey:',
- '🕳' => ':hole:',
- '🏘' => ':homes:',
'🍯' => ':honey_pot:',
+ '🪝' => ':hook:',
'🐴' => ':horse:',
'🏇' => ':horse_racing:',
'🏥' => ':hospital:',
- '🌶' => ':hot_pepper:',
+ '🥵' => ':hot_face:',
'🌭' => ':hotdog:',
'🏨' => ':hotel:',
- '♨' => ':hotsprings:',
'⌛' => ':hourglass:',
'⏳' => ':hourglass_flowing_sand:',
'🏠' => ':house:',
- '🏚' => ':house_abandoned:',
'🏡' => ':house_with_garden:',
'🤗' => ':hugging:',
'😯' => ':hushed:',
+ '🛖' => ':hut:',
+ '🪻' => ':hyacinth:',
+ '🧊' => ':ice:',
'🍨' => ':ice_cream:',
- '⛸' => ':ice_skate:',
'🍦' => ':icecream:',
'🆔' => ':id:',
+ '🪪' => ':identification_card:',
'🉐' => ':ideograph_advantage:',
'👿' => ':imp:',
'📥' => ':inbox_tray:',
'📨' => ':incoming_envelope:',
+ '🫵' => ':index_pointing_at_the_viewer:',
'💁' => ':information_desk_person:',
- 'ℹ' => ':information_source:',
'😇' => ':innocent:',
- '⁉' => ':interrobang:',
'📱' => ':iphone:',
- '🏝' => ':island:',
'🏮' => ':izakaya_lantern:',
'🎃' => ':jack_o_lantern:',
'🗾' => ':japan:',
'🏯' => ':japanese_castle:',
'👺' => ':japanese_goblin:',
'👹' => ':japanese_ogre:',
+ '🫙' => ':jar:',
'👖' => ':jeans:',
+ '🪼' => ':jellyfish:',
'😂' => ':joy:',
'😹' => ':joy_cat:',
- '🕹' => ':joystick:',
'🤹' => ':juggling:',
'🕋' => ':kaaba:',
+ '🦘' => ':kangaroo:',
'🔑' => ':key:',
- '🗝' => ':key2:',
- '⌨' => ':keyboard:',
+ '🪯' => ':khanda:',
'👘' => ':kimono:',
'💋' => ':kiss:',
'😗' => ':kissing:',
@@ -1222,82 +3140,106 @@
'😚' => ':kissing_closed_eyes:',
'😘' => ':kissing_heart:',
'😙' => ':kissing_smiling_eyes:',
+ '🪁' => ':kite:',
'🥝' => ':kiwi:',
'🔪' => ':knife:',
+ '🪢' => ':knot:',
'🐨' => ':koala:',
'🈁' => ':koko:',
- '🏷' => ':label:',
+ '🥼' => ':lab_coat:',
+ '🥍' => ':lacrosse:',
+ '🪜' => ':ladder:',
'🔵' => ':large_blue_circle:',
'🔷' => ':large_blue_diamond:',
'🔶' => ':large_orange_diamond:',
'🌗' => ':last_quarter_moon:',
'🌜' => ':last_quarter_moon_with_face:',
'😆' => ':laughing:',
+ '🥬' => ':leafy_green:',
'🍃' => ':leaves:',
'📒' => ':ledger:',
'🤛' => ':left_facing_fist:',
'🛅' => ':left_luggage:',
- '↔' => ':left_right_arrow:',
- '↩' => ':leftwards_arrow_with_hook:',
+ '🫲' => ':leftwards_hand:',
+ '🫷' => ':leftwards_pushing_hand:',
+ '🦵' => ':leg:',
'🍋' => ':lemon:',
'♌' => ':leo:',
'🐆' => ':leopard:',
- '🎚' => ':level_slider:',
- '🕴' => ':levitate:',
'♎' => ':libra:',
- '🏋' => ':lifter:',
+ '🩵' => ':light_blue_heart:',
'🚈' => ':light_rail:',
'🔗' => ':link:',
'🦁' => ':lion_face:',
'👄' => ':lips:',
'💄' => ':lipstick:',
'🦎' => ':lizard:',
+ '🦙' => ':llama:',
+ '🦞' => ':lobster:',
'🔒' => ':lock:',
'🔏' => ':lock_with_ink_pen:',
'🍭' => ':lollipop:',
+ '🪘' => ':long_drum:',
'➿' => ':loop:',
+ '🧴' => ':lotion_bottle:',
+ '🪷' => ':lotus:',
'🔊' => ':loud_sound:',
'📢' => ':loudspeaker:',
'🏩' => ':love_hotel:',
'💌' => ':love_letter:',
+ '🤟' => ':love_you_gesture:',
+ '🪫' => ':low_battery:',
'🔅' => ':low_brightness:',
+ '🧳' => ':luggage:',
+ '🫁' => ':lungs:',
'🤥' => ':lying_face:',
- 'Ⓜ' => ':m:',
'🔍' => ':mag:',
'🔎' => ':mag_right:',
+ '🧙' => ':mage:',
+ '🪄' => ':magic_wand:',
+ '🧲' => ':magnet:',
'🀄' => ':mahjong:',
'📫' => ':mailbox:',
'📪' => ':mailbox_closed:',
'📬' => ':mailbox_with_mail:',
'📭' => ':mailbox_with_no_mail:',
+ '🦣' => ':mammoth:',
'👨' => ':man:',
'🕺' => ':man_dancing:',
- '🤵' => ':man_in_tuxedo:',
'👲' => ':man_with_gua_pi_mao:',
'👳' => ':man_with_turban:',
+ '🥭' => ':mango:',
'👞' => ':mans_shoe:',
- '🗺' => ':map:',
+ '🦽' => ':manual_wheelchair:',
'🍁' => ':maple_leaf:',
+ '🪇' => ':maracas:',
'🥋' => ':martial_arts_uniform:',
'😷' => ':mask:',
'💆' => ':massage:',
+ '🧉' => ':mate:',
'🍖' => ':meat_on_bone:',
+ '🦾' => ':mechanical_arm:',
+ '🦿' => ':mechanical_leg:',
'🏅' => ':medal:',
'📣' => ':mega:',
'🍈' => ':melon:',
+ '🫠' => ':melting_face:',
'🕎' => ':menorah:',
'🚹' => ':mens:',
+ '🧜' => ':merperson:',
'🤘' => ':metal:',
'🚇' => ':metro:',
+ '🦠' => ':microbe:',
'🎤' => ':microphone:',
- '🎙' => ':microphone2:',
'🔬' => ':microscope:',
'🖕' => ':middle_finger:',
- '🎖' => ':military_medal:',
+ '🪖' => ':military_helmet:',
'🥛' => ':milk:',
'🌌' => ':milky_way:',
'🚐' => ':minibus:',
'💽' => ':minidisc:',
+ '🪞' => ':mirror:',
+ '🪩' => ':mirror_ball:',
'📴' => ':mobile_phone_off:',
'🤑' => ':money_mouth:',
'💸' => ':money_with_wings:',
@@ -1305,21 +3247,20 @@
'🐒' => ':monkey:',
'🐵' => ':monkey_face:',
'🚝' => ':monorail:',
+ '🥮' => ':moon_cake:',
+ '🫎' => ':moose:',
'🎓' => ':mortar_board:',
'🕌' => ':mosque:',
+ '🦟' => ':mosquito:',
'🛵' => ':motor_scooter:',
- '🛥' => ':motorboat:',
- '🏍' => ':motorcycle:',
- '🛣' => ':motorway:',
+ '🦼' => ':motorized_wheelchair:',
'🗻' => ':mount_fuji:',
- '⛰' => ':mountain:',
'🚵' => ':mountain_bicyclist:',
'🚠' => ':mountain_cableway:',
'🚞' => ':mountain_railway:',
- '🏔' => ':mountain_snow:',
'🐭' => ':mouse:',
'🐁' => ':mouse2:',
- '🖱' => ':mouse_three_button:',
+ '🪤' => ':mouse_trap:',
'🎥' => ':movie_camera:',
'🗿' => ':moyai:',
'🤶' => ':mrs_claus:',
@@ -1332,17 +3273,20 @@
'💅' => ':nail_care:',
'📛' => ':name_badge:',
'🤢' => ':nauseated_face:',
+ '🧿' => ':nazar_amulet:',
'👔' => ':necktie:',
'❎' => ':negative_squared_cross_mark:',
'🤓' => ':nerd:',
+ '🪺' => ':nest_with_eggs:',
+ '🪆' => ':nesting_dolls:',
'😐' => ':neutral_face:',
'🆕' => ':new:',
'🌑' => ':new_moon:',
'🌚' => ':new_moon_with_face:',
'📰' => ':newspaper:',
- '🗞' => ':newspaper2:',
'🆖' => ':ng:',
'🌃' => ':night_with_stars:',
+ '🥷' => ':ninja:',
'🔕' => ':no_bell:',
'🚳' => ':no_bicycles:',
'⛔' => ':no_entry:',
@@ -1356,83 +3300,103 @@
'👃' => ':nose:',
'📓' => ':notebook:',
'📔' => ':notebook_with_decorative_cover:',
- '🗒' => ':notepad_spiral:',
'🎶' => ':notes:',
'🔩' => ':nut_and_bolt:',
'⭕' => ':o:',
- '🅾' => ':o2:',
'🌊' => ':ocean:',
'🛑' => ':octagonal_sign:',
'🐙' => ':octopus:',
'🍢' => ':oden:',
'🏢' => ':office:',
- '🛢' => ':oil:',
'🆗' => ':ok:',
'👌' => ':ok_hand:',
'🙆' => ':ok_woman:',
'👴' => ':older_man:',
+ '🧓' => ':older_person:',
'👵' => ':older_woman:',
- '🕉' => ':om_symbol:',
+ '🫒' => ':olive:',
'🔛' => ':on:',
'🚘' => ':oncoming_automobile:',
'🚍' => ':oncoming_bus:',
'🚔' => ':oncoming_police_car:',
'🚖' => ':oncoming_taxi:',
+ '🩱' => ':one_piece_swimsuit:',
+ '🧅' => ':onion:',
'📂' => ':open_file_folder:',
'👐' => ':open_hands:',
'😮' => ':open_mouth:',
'⛎' => ':ophiuchus:',
'📙' => ':orange_book:',
- '☦' => ':orthodox_cross:',
+ '🟠' => ':orange_circle:',
+ '🧡' => ':orange_heart:',
+ '🟧' => ':orange_square:',
+ '🦧' => ':orangutan:',
+ '🦦' => ':otter:',
'📤' => ':outbox_tray:',
'🦉' => ':owl:',
'🐂' => ':ox:',
+ '🦪' => ':oyster:',
'📦' => ':package:',
'📄' => ':page_facing_up:',
'📃' => ':page_with_curl:',
'📟' => ':pager:',
- '🖌' => ':paintbrush:',
+ '🫳' => ':palm_down_hand:',
'🌴' => ':palm_tree:',
+ '🫴' => ':palm_up_hand:',
+ '🤲' => ':palms_up_together:',
'🥞' => ':pancakes:',
'🐼' => ':panda_face:',
'📎' => ':paperclip:',
- '🖇' => ':paperclips:',
- '🏞' => ':park:',
- '🅿' => ':parking:',
- '〽' => ':part_alternation_mark:',
+ '🪂' => ':parachute:',
+ '🦜' => ':parrot:',
'⛅' => ':partly_sunny:',
+ '🥳' => ':partying_face:',
'🛂' => ':passport_control:',
- '⏸' => ':pause_button:',
- '☮' => ':peace:',
+ '🫛' => ':pea_pod:',
'🍑' => ':peach:',
+ '🦚' => ':peacock:',
'🥜' => ':peanuts:',
'🍐' => ':pear:',
- '🖊' => ':pen_ballpoint:',
- '🖋' => ':pen_fountain:',
'📝' => ':pencil:',
- '✏' => ':pencil2:',
'🐧' => ':penguin:',
'😔' => ':pensive:',
+ '🫂' => ':people_hugging:',
'🎭' => ':performing_arts:',
'😣' => ':persevere:',
+ '🧑' => ':person:',
+ '🧔' => ':person_beard:',
+ '🧗' => ':person_climbing:',
'🙍' => ':person_frowning:',
+ '🧘' => ':person_in_lotus_position:',
+ '🧖' => ':person_in_steamy_room:',
+ '🧎' => ':person_kneeling:',
+ '🧍' => ':person_standing:',
'👱' => ':person_with_blond_hair:',
+ '🫅' => ':person_with_crown:',
'🙎' => ':person_with_pouting_face:',
- '⛏' => ':pick:',
+ '🧫' => ':petri_dish:',
+ '🛻' => ':pickup_truck:',
+ '🥧' => ':pie:',
'🐷' => ':pig:',
'🐖' => ':pig2:',
'🐽' => ':pig_nose:',
'💊' => ':pill:',
+ '🪅' => ':pinata:',
+ '🤌' => ':pinched_fingers:',
+ '🤏' => ':pinching_hand:',
'🍍' => ':pineapple:',
'🏓' => ':ping_pong:',
+ '🩷' => ':pink_heart:',
'♓' => ':pisces:',
'🍕' => ':pizza:',
+ '🪧' => ':placard:',
'🛐' => ':place_of_worship:',
- '⏯' => ':play_pause:',
+ '🛝' => ':playground_slide:',
+ '🥺' => ':pleading_face:',
+ '🪠' => ':plunger:',
'👇' => ':point_down:',
'👈' => ':point_left:',
'👉' => ':point_right:',
- '☝' => ':point_up:',
'👆' => ':point_up_2:',
'🚓' => ':police_car:',
'🐩' => ':poodle:',
@@ -1443,33 +3407,37 @@
'📮' => ':postbox:',
'🚰' => ':potable_water:',
'🥔' => ':potato:',
+ '🪴' => ':potted_plant:',
'👝' => ':pouch:',
'🍗' => ':poultry_leg:',
'💷' => ':pound:',
+ '🫗' => ':pouring_liquid:',
'😾' => ':pouting_cat:',
'🙏' => ':pray:',
'📿' => ':prayer_beads:',
+ '🫃' => ':pregnant_man:',
+ '🫄' => ':pregnant_person:',
'🤰' => ':pregnant_woman:',
+ '🥨' => ':pretzel:',
'🤴' => ':prince:',
'👸' => ':princess:',
- '🖨' => ':printer:',
- '📽' => ':projector:',
'👊' => ':punch:',
+ '🟣' => ':purple_circle:',
'💜' => ':purple_heart:',
+ '🟪' => ':purple_square:',
'👛' => ':purse:',
'📌' => ':pushpin:',
'🚮' => ':put_litter_in_its_place:',
+ '🧩' => ':puzzle_piece:',
'❓' => ':question:',
'🐰' => ':rabbit:',
'🐇' => ':rabbit2:',
- '🏎' => ':race_car:',
+ '🦝' => ':raccoon:',
'🐎' => ':racehorse:',
'📻' => ':radio:',
'🔘' => ':radio_button:',
- '☢' => ':radioactive:',
'😡' => ':rage:',
'🚃' => ':railway_car:',
- '🛤' => ':railway_track:',
'🌈' => ':rainbow:',
'🤚' => ':raised_back_of_hand:',
'✋' => ':raised_hand:',
@@ -1478,14 +3446,14 @@
'🐏' => ':ram:',
'🍜' => ':ramen:',
'🐀' => ':rat:',
- '⏺' => ':record_button:',
- '♻' => ':recycle:',
+ '🪒' => ':razor:',
+ '🧾' => ':receipt:',
'🚗' => ':red_car:',
'🔴' => ':red_circle:',
- '®' => ':registered:',
- '☺' => ':relaxed:',
+ '🧧' => ':red_envelope:',
+ '🦰' => ':red_hair:',
+ '🟥' => ':red_square:',
'😌' => ':relieved:',
- '🎗' => ':reminder_ribbon:',
'🔁' => ':repeat:',
'🔂' => ':repeat_one:',
'🚻' => ':restroom:',
@@ -1498,74 +3466,87 @@
'🍘' => ':rice_cracker:',
'🎑' => ':rice_scene:',
'🤜' => ':right_facing_fist:',
+ '🫱' => ':rightwards_hand:',
+ '🫸' => ':rightwards_pushing_hand:',
'💍' => ':ring:',
+ '🛟' => ':ring_buoy:',
+ '🪐' => ':ringed_planet:',
'🤖' => ':robot:',
+ '🪨' => ':rock:',
'🚀' => ':rocket:',
'🤣' => ':rofl:',
+ '🧻' => ':roll_of_paper:',
'🎢' => ':roller_coaster:',
+ '🛼' => ':roller_skate:',
'🙄' => ':rolling_eyes:',
'🐓' => ':rooster:',
'🌹' => ':rose:',
- '🏵' => ':rosette:',
'🚨' => ':rotating_light:',
'📍' => ':round_pushpin:',
'🚣' => ':rowboat:',
'🏉' => ':rugby_football:',
'🏃' => ':runner:',
'🎽' => ':running_shirt_with_sash:',
- '🈂' => ':sa:',
+ '🧷' => ':safety_pin:',
+ '🦺' => ':safety_vest:',
'♐' => ':sagittarius:',
'⛵' => ':sailboat:',
'🍶' => ':sake:',
'🥗' => ':salad:',
+ '🧂' => ':salt:',
+ '🫡' => ':saluting_face:',
'👡' => ':sandal:',
+ '🥪' => ':sandwich:',
'🎅' => ':santa:',
+ '🥻' => ':sari:',
'📡' => ':satellite:',
- '🛰' => ':satellite_orbital:',
+ '🦕' => ':sauropod:',
'🎷' => ':saxophone:',
- '⚖' => ':scales:',
+ '🧣' => ':scarf:',
'🏫' => ':school:',
'🎒' => ':school_satchel:',
- '✂' => ':scissors:',
'🛴' => ':scooter:',
'🦂' => ':scorpion:',
'♏' => ':scorpius:',
'😱' => ':scream:',
'🙀' => ':scream_cat:',
+ '🪛' => ':screwdriver:',
'📜' => ':scroll:',
+ '🦭' => ':seal:',
'💺' => ':seat:',
'🥈' => ':second_place:',
- '㊙' => ':secret:',
'🙈' => ':see_no_evil:',
'🌱' => ':seedling:',
'🤳' => ':selfie:',
+ '🪡' => ':sewing_needle:',
+ '🫨' => ':shaking_face:',
'🥘' => ':shallow_pan_of_food:',
- '☘' => ':shamrock:',
'🦈' => ':shark:',
'🍧' => ':shaved_ice:',
'🐑' => ':sheep:',
'🐚' => ':shell:',
- '🛡' => ':shield:',
- '⛩' => ':shinto_shrine:',
'🚢' => ':ship:',
'👕' => ':shirt:',
- '🛍' => ':shopping_bags:',
'🛒' => ':shopping_cart:',
+ '🩳' => ':shorts:',
'🚿' => ':shower:',
'🦐' => ':shrimp:',
'🤷' => ':shrug:',
+ '🤫' => ':shushing_face:',
'📶' => ':signal_strength:',
'🔯' => ':six_pointed_star:',
+ '🛹' => ':skateboard:',
'🎿' => ':ski:',
- '⛷' => ':skier:',
'💀' => ':skull:',
- '☠' => ':skull_crossbones:',
+ '🦨' => ':skunk:',
+ '🛷' => ':sled:',
'😴' => ':sleeping:',
'🛌' => ':sleeping_accommodation:',
'😪' => ':sleepy:',
'🙁' => ':slight_frown:',
'🙂' => ':slight_smile:',
'🎰' => ':slot_machine:',
+ '🦥' => ':sloth:',
'🔹' => ':small_blue_diamond:',
'🔸' => ':small_orange_diamond:',
'🔺' => ':small_red_triangle:',
@@ -1574,6 +3555,8 @@
'😸' => ':smile_cat:',
'😃' => ':smiley:',
'😺' => ':smiley_cat:',
+ '🥰' => ':smiling_face_with_hearts:',
+ '🥲' => ':smiling_face_with_tear:',
'😈' => ':smiling_imp:',
'😏' => ':smirk:',
'😼' => ':smirk_cat:',
@@ -1582,44 +3565,36 @@
'🐍' => ':snake:',
'🤧' => ':sneezing_face:',
'🏂' => ':snowboarder:',
- '❄' => ':snowflake:',
'⛄' => ':snowman:',
- '☃' => ':snowman2:',
+ '🧼' => ':soap:',
'😭' => ':sob:',
'⚽' => ':soccer:',
+ '🧦' => ':socks:',
+ '🥎' => ':softball:',
'🔜' => ':soon:',
'🆘' => ':sos:',
'🔉' => ':sound:',
'👾' => ':space_invader:',
- '♠' => ':spades:',
'🍝' => ':spaghetti:',
- '❇' => ':sparkle:',
'🎇' => ':sparkler:',
'✨' => ':sparkles:',
'💖' => ':sparkling_heart:',
'🙊' => ':speak_no_evil:',
'🔈' => ':speaker:',
- '🗣' => ':speaking_head:',
'💬' => ':speech_balloon:',
- '🗨' => ':speech_left:',
'🚤' => ':speedboat:',
- '🕷' => ':spider:',
- '🕸' => ':spider_web:',
+ '🧽' => ':sponge:',
'🥄' => ':spoon:',
- '🕵' => ':spy:',
'🦑' => ':squid:',
- '🏟' => ':stadium:',
'⭐' => ':star:',
'🌟' => ':star2:',
- '☪' => ':star_and_crescent:',
- '✡' => ':star_of_david:',
+ '🤩' => ':star_struck:',
'🌠' => ':stars:',
'🚉' => ':station:',
'🗽' => ':statue_of_liberty:',
'🚂' => ':steam_locomotive:',
+ '🩺' => ':stethoscope:',
'🍲' => ':stew:',
- '⏹' => ':stop_button:',
- '⏱' => ':stopwatch:',
'📏' => ':straight_ruler:',
'🍓' => ':strawberry:',
'😛' => ':stuck_out_tongue:',
@@ -1629,12 +3604,14 @@
'🌞' => ':sun_with_face:',
'🌻' => ':sunflower:',
'😎' => ':sunglasses:',
- '☀' => ':sunny:',
'🌅' => ':sunrise:',
'🌄' => ':sunrise_over_mountains:',
+ '🦸' => ':superhero:',
+ '🦹' => ':supervillain:',
'🏄' => ':surfer:',
'🍣' => ':sushi:',
'🚟' => ':suspension_railway:',
+ '🦢' => ':swan:',
'😓' => ':sweat:',
'💦' => ':sweat_drops:',
'😅' => ':sweat_smile:',
@@ -1643,34 +3620,36 @@
'🔣' => ':symbols:',
'🕍' => ':synagogue:',
'💉' => ':syringe:',
+ '🦖' => ':t_rex:',
'🌮' => ':taco:',
'🎉' => ':tada:',
+ '🥡' => ':takeout_box:',
+ '🫔' => ':tamale:',
'🎋' => ':tanabata_tree:',
'🍊' => ':tangerine:',
'♉' => ':taurus:',
'🚕' => ':taxi:',
'🍵' => ':tea:',
- '☎' => ':telephone:',
+ '🫖' => ':teapot:',
+ '🧸' => ':teddy_bear:',
'📞' => ':telephone_receiver:',
'🔭' => ':telescope:',
'🔟' => ':ten:',
'🎾' => ':tennis:',
'⛺' => ':tent:',
- '🌡' => ':thermometer:',
+ '🧪' => ':test_tube:',
'🤒' => ':thermometer_face:',
'🤔' => ':thinking:',
'🥉' => ':third_place:',
+ '🩴' => ':thong_sandal:',
'💭' => ':thought_balloon:',
+ '🧵' => ':thread:',
'👎' => ':thumbsdown:',
'👍' => ':thumbsup:',
- '⛈' => ':thunder_cloud_rain:',
'🎫' => ':ticket:',
- '🎟' => ':tickets:',
'🐯' => ':tiger:',
'🐅' => ':tiger2:',
- '⏲' => ':timer:',
'😫' => ':tired_face:',
- '™' => ':tm:',
'🚽' => ':toilet:',
'🗼' => ':tokyo_tower:',
'🍅' => ':tomato:',
@@ -1680,12 +3659,11 @@
'🏾' => ':tone4:',
'🏿' => ':tone5:',
'👅' => ':tongue:',
- '🛠' => ':tools:',
+ '🧰' => ':toolbox:',
+ '🦷' => ':tooth:',
+ '🪥' => ':toothbrush:',
'🔝' => ':top:',
'🎩' => ':tophat:',
- '⏭' => ':track_next:',
- '⏮' => ':track_previous:',
- '🖲' => ':trackball:',
'🚜' => ':tractor:',
'🚥' => ':traffic_light:',
'🚋' => ':train:',
@@ -1695,6 +3673,7 @@
'📐' => ':triangular_ruler:',
'🔱' => ':trident:',
'😤' => ':triumph:',
+ '🧌' => ':troll:',
'🚎' => ':trolleybus:',
'🏆' => ':trophy:',
'🍹' => ':tropical_drink:',
@@ -1716,21 +3695,18 @@
'🈹' => ':u5272:',
'🈴' => ':u5408:',
'🈯' => ':u6307:',
- '🈷' => ':u6708:',
'🈶' => ':u6709:',
'🈚' => ':u7121:',
'🈸' => ':u7533:',
'🈲' => ':u7981:',
'☔' => ':umbrella:',
- '☂' => ':umbrella2:',
'😒' => ':unamused:',
'🔞' => ':underage:',
'🦄' => ':unicorn:',
'🔓' => ':unlock:',
'🆙' => ':up:',
'🙃' => ':upside_down:',
- '⚱' => ':urn:',
- '✌' => ':v:',
+ '🧛' => ':vampire:',
'🚦' => ':vertical_traffic_light:',
'📼' => ':vhs:',
'📳' => ':vibration_mode:',
@@ -1742,17 +3718,15 @@
'🏐' => ':volleyball:',
'🆚' => ':vs:',
'🖖' => ':vulcan:',
+ '🧇' => ':waffle:',
'🚶' => ':walking:',
'🌘' => ':waning_crescent_moon:',
'🌖' => ':waning_gibbous_moon:',
- '⚠' => ':warning:',
- '🗑' => ':wastebasket:',
'⌚' => ':watch:',
'🐃' => ':water_buffalo:',
'🤽' => ':water_polo:',
'🍉' => ':watermelon:',
'👋' => ':wave:',
- '〰' => ':wavy_dash:',
'🌒' => ':waxing_crescent_moon:',
'🌔' => ':waxing_gibbous_moon:',
'🚾' => ':wc:',
@@ -1760,39 +3734,50 @@
'💒' => ':wedding:',
'🐳' => ':whale:',
'🐋' => ':whale2:',
- '☸' => ':wheel_of_dharma:',
+ '🛞' => ':wheel:',
'♿' => ':wheelchair:',
+ '🦯' => ':white_cane:',
'✅' => ':white_check_mark:',
'⚪' => ':white_circle:',
'💮' => ':white_flower:',
+ '🦳' => ':white_hair:',
+ '🤍' => ':white_heart:',
'⬜' => ':white_large_square:',
'◽' => ':white_medium_small_square:',
- '◻' => ':white_medium_square:',
- '▫' => ':white_small_square:',
'🔳' => ':white_square_button:',
- '🌥' => ':white_sun_cloud:',
- '🌦' => ':white_sun_rain_cloud:',
- '🌤' => ':white_sun_small_cloud:',
'🥀' => ':wilted_rose:',
- '🌬' => ':wind_blowing_face:',
'🎐' => ':wind_chime:',
+ '🪟' => ':window:',
'🍷' => ':wine_glass:',
+ '🪽' => ':wing:',
'😉' => ':wink:',
+ '🛜' => ':wireless:',
'🐺' => ':wolf:',
'👩' => ':woman:',
+ '🧕' => ':woman_with_headscarf:',
'👚' => ':womans_clothes:',
'👒' => ':womans_hat:',
'🚺' => ':womens:',
+ '🪵' => ':wood:',
+ '🥴' => ':woozy_face:',
+ '🪱' => ':worm:',
'😟' => ':worried:',
'🔧' => ':wrench:',
'🤼' => ':wrestlers:',
- '✍' => ':writing_hand:',
'❌' => ':x:',
+ '🩻' => ':x_ray:',
+ '🧶' => ':yarn:',
+ '🥱' => ':yawning_face:',
+ '🟡' => ':yellow_circle:',
'💛' => ':yellow_heart:',
+ '🟨' => ':yellow_square:',
'💴' => ':yen:',
- '☯' => ':yin_yang:',
+ '🪀' => ':yo_yo:',
'😋' => ':yum:',
+ '🤪' => ':zany_face:',
'⚡' => ':zap:',
+ '🦓' => ':zebra:',
'🤐' => ':zipper_mouth:',
+ '🧟' => ':zombie:',
'💤' => ':zzz:',
];
diff --git a/src/Symfony/Component/Emoji/Resources/data/emoji-text.php b/src/Symfony/Component/Emoji/Resources/data/emoji-text.php
index 6173fd4edbb7b..217df8e8350f1 100644
--- a/src/Symfony/Component/Emoji/Resources/data/emoji-text.php
+++ b/src/Symfony/Component/Emoji/Resources/data/emoji-text.php
@@ -1,9 +1,229 @@
':kiss-man-man-dark-skin-tone:',
+ '👨🏿❤️💋👨🏻' => ':kiss-man-man-dark-skin-tone-light-skin-tone:',
+ '👨🏿❤️💋👨🏾' => ':kiss-man-man-dark-skin-tone-medium-dark-skin-tone:',
+ '👨🏿❤️💋👨🏼' => ':kiss-man-man-dark-skin-tone-medium-light-skin-tone:',
+ '👨🏿❤️💋👨🏽' => ':kiss-man-man-dark-skin-tone-medium-skin-tone:',
+ '👨🏻❤️💋👨🏻' => ':kiss-man-man-light-skin-tone:',
+ '👨🏻❤️💋👨🏿' => ':kiss-man-man-light-skin-tone-dark-skin-tone:',
+ '👨🏻❤️💋👨🏾' => ':kiss-man-man-light-skin-tone-medium-dark-skin-tone:',
+ '👨🏻❤️💋👨🏼' => ':kiss-man-man-light-skin-tone-medium-light-skin-tone:',
+ '👨🏻❤️💋👨🏽' => ':kiss-man-man-light-skin-tone-medium-skin-tone:',
+ '👨🏾❤️💋👨🏾' => ':kiss-man-man-medium-dark-skin-tone:',
+ '👨🏾❤️💋👨🏿' => ':kiss-man-man-medium-dark-skin-tone-dark-skin-tone:',
+ '👨🏾❤️💋👨🏻' => ':kiss-man-man-medium-dark-skin-tone-light-skin-tone:',
+ '👨🏾❤️💋👨🏼' => ':kiss-man-man-medium-dark-skin-tone-medium-light-skin-tone:',
+ '👨🏾❤️💋👨🏽' => ':kiss-man-man-medium-dark-skin-tone-medium-skin-tone:',
+ '👨🏼❤️💋👨🏼' => ':kiss-man-man-medium-light-skin-tone:',
+ '👨🏼❤️💋👨🏿' => ':kiss-man-man-medium-light-skin-tone-dark-skin-tone:',
+ '👨🏼❤️💋👨🏻' => ':kiss-man-man-medium-light-skin-tone-light-skin-tone:',
+ '👨🏼❤️💋👨🏾' => ':kiss-man-man-medium-light-skin-tone-medium-dark-skin-tone:',
+ '👨🏼❤️💋👨🏽' => ':kiss-man-man-medium-light-skin-tone-medium-skin-tone:',
+ '👨🏽❤️💋👨🏽' => ':kiss-man-man-medium-skin-tone:',
+ '👨🏽❤️💋👨🏿' => ':kiss-man-man-medium-skin-tone-dark-skin-tone:',
+ '👨🏽❤️💋👨🏻' => ':kiss-man-man-medium-skin-tone-light-skin-tone:',
+ '👨🏽❤️💋👨🏾' => ':kiss-man-man-medium-skin-tone-medium-dark-skin-tone:',
+ '👨🏽❤️💋👨🏼' => ':kiss-man-man-medium-skin-tone-medium-light-skin-tone:',
+ '🧑🏿❤️💋🧑🏻' => ':kiss-person-person-dark-skin-tone-light-skin-tone:',
+ '🧑🏿❤️💋🧑🏾' => ':kiss-person-person-dark-skin-tone-medium-dark-skin-tone:',
+ '🧑🏿❤️💋🧑🏼' => ':kiss-person-person-dark-skin-tone-medium-light-skin-tone:',
+ '🧑🏿❤️💋🧑🏽' => ':kiss-person-person-dark-skin-tone-medium-skin-tone:',
+ '🧑🏻❤️💋🧑🏿' => ':kiss-person-person-light-skin-tone-dark-skin-tone:',
+ '🧑🏻❤️💋🧑🏾' => ':kiss-person-person-light-skin-tone-medium-dark-skin-tone:',
+ '🧑🏻❤️💋🧑🏼' => ':kiss-person-person-light-skin-tone-medium-light-skin-tone:',
+ '🧑🏻❤️💋🧑🏽' => ':kiss-person-person-light-skin-tone-medium-skin-tone:',
+ '🧑🏾❤️💋🧑🏿' => ':kiss-person-person-medium-dark-skin-tone-dark-skin-tone:',
+ '🧑🏾❤️💋🧑🏻' => ':kiss-person-person-medium-dark-skin-tone-light-skin-tone:',
+ '🧑🏾❤️💋🧑🏼' => ':kiss-person-person-medium-dark-skin-tone-medium-light-skin-tone:',
+ '🧑🏾❤️💋🧑🏽' => ':kiss-person-person-medium-dark-skin-tone-medium-skin-tone:',
+ '🧑🏼❤️💋🧑🏿' => ':kiss-person-person-medium-light-skin-tone-dark-skin-tone:',
+ '🧑🏼❤️💋🧑🏻' => ':kiss-person-person-medium-light-skin-tone-light-skin-tone:',
+ '🧑🏼❤️💋🧑🏾' => ':kiss-person-person-medium-light-skin-tone-medium-dark-skin-tone:',
+ '🧑🏼❤️💋🧑🏽' => ':kiss-person-person-medium-light-skin-tone-medium-skin-tone:',
+ '🧑🏽❤️💋🧑🏿' => ':kiss-person-person-medium-skin-tone-dark-skin-tone:',
+ '🧑🏽❤️💋🧑🏻' => ':kiss-person-person-medium-skin-tone-light-skin-tone:',
+ '🧑🏽❤️💋🧑🏾' => ':kiss-person-person-medium-skin-tone-medium-dark-skin-tone:',
+ '🧑🏽❤️💋🧑🏼' => ':kiss-person-person-medium-skin-tone-medium-light-skin-tone:',
+ '👩🏿❤️💋👨🏿' => ':kiss-woman-man-dark-skin-tone:',
+ '👩🏿❤️💋👨🏻' => ':kiss-woman-man-dark-skin-tone-light-skin-tone:',
+ '👩🏿❤️💋👨🏾' => ':kiss-woman-man-dark-skin-tone-medium-dark-skin-tone:',
+ '👩🏿❤️💋👨🏼' => ':kiss-woman-man-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏿❤️💋👨🏽' => ':kiss-woman-man-dark-skin-tone-medium-skin-tone:',
+ '👩🏻❤️💋👨🏻' => ':kiss-woman-man-light-skin-tone:',
+ '👩🏻❤️💋👨🏿' => ':kiss-woman-man-light-skin-tone-dark-skin-tone:',
+ '👩🏻❤️💋👨🏾' => ':kiss-woman-man-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏻❤️💋👨🏼' => ':kiss-woman-man-light-skin-tone-medium-light-skin-tone:',
+ '👩🏻❤️💋👨🏽' => ':kiss-woman-man-light-skin-tone-medium-skin-tone:',
+ '👩🏾❤️💋👨🏾' => ':kiss-woman-man-medium-dark-skin-tone:',
+ '👩🏾❤️💋👨🏿' => ':kiss-woman-man-medium-dark-skin-tone-dark-skin-tone:',
+ '👩🏾❤️💋👨🏻' => ':kiss-woman-man-medium-dark-skin-tone-light-skin-tone:',
+ '👩🏾❤️💋👨🏼' => ':kiss-woman-man-medium-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏾❤️💋👨🏽' => ':kiss-woman-man-medium-dark-skin-tone-medium-skin-tone:',
+ '👩🏼❤️💋👨🏼' => ':kiss-woman-man-medium-light-skin-tone:',
+ '👩🏼❤️💋👨🏿' => ':kiss-woman-man-medium-light-skin-tone-dark-skin-tone:',
+ '👩🏼❤️💋👨🏻' => ':kiss-woman-man-medium-light-skin-tone-light-skin-tone:',
+ '👩🏼❤️💋👨🏾' => ':kiss-woman-man-medium-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏼❤️💋👨🏽' => ':kiss-woman-man-medium-light-skin-tone-medium-skin-tone:',
+ '👩🏽❤️💋👨🏽' => ':kiss-woman-man-medium-skin-tone:',
+ '👩🏽❤️💋👨🏿' => ':kiss-woman-man-medium-skin-tone-dark-skin-tone:',
+ '👩🏽❤️💋👨🏻' => ':kiss-woman-man-medium-skin-tone-light-skin-tone:',
+ '👩🏽❤️💋👨🏾' => ':kiss-woman-man-medium-skin-tone-medium-dark-skin-tone:',
+ '👩🏽❤️💋👨🏼' => ':kiss-woman-man-medium-skin-tone-medium-light-skin-tone:',
+ '👩🏿❤️💋👩🏿' => ':kiss-woman-woman-dark-skin-tone:',
+ '👩🏿❤️💋👩🏻' => ':kiss-woman-woman-dark-skin-tone-light-skin-tone:',
+ '👩🏿❤️💋👩🏾' => ':kiss-woman-woman-dark-skin-tone-medium-dark-skin-tone:',
+ '👩🏿❤️💋👩🏼' => ':kiss-woman-woman-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏿❤️💋👩🏽' => ':kiss-woman-woman-dark-skin-tone-medium-skin-tone:',
+ '👩🏻❤️💋👩🏻' => ':kiss-woman-woman-light-skin-tone:',
+ '👩🏻❤️💋👩🏿' => ':kiss-woman-woman-light-skin-tone-dark-skin-tone:',
+ '👩🏻❤️💋👩🏾' => ':kiss-woman-woman-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏻❤️💋👩🏼' => ':kiss-woman-woman-light-skin-tone-medium-light-skin-tone:',
+ '👩🏻❤️💋👩🏽' => ':kiss-woman-woman-light-skin-tone-medium-skin-tone:',
+ '👩🏾❤️💋👩🏾' => ':kiss-woman-woman-medium-dark-skin-tone:',
+ '👩🏾❤️💋👩🏿' => ':kiss-woman-woman-medium-dark-skin-tone-dark-skin-tone:',
+ '👩🏾❤️💋👩🏻' => ':kiss-woman-woman-medium-dark-skin-tone-light-skin-tone:',
+ '👩🏾❤️💋👩🏼' => ':kiss-woman-woman-medium-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏾❤️💋👩🏽' => ':kiss-woman-woman-medium-dark-skin-tone-medium-skin-tone:',
+ '👩🏼❤️💋👩🏼' => ':kiss-woman-woman-medium-light-skin-tone:',
+ '👩🏼❤️💋👩🏿' => ':kiss-woman-woman-medium-light-skin-tone-dark-skin-tone:',
+ '👩🏼❤️💋👩🏻' => ':kiss-woman-woman-medium-light-skin-tone-light-skin-tone:',
+ '👩🏼❤️💋👩🏾' => ':kiss-woman-woman-medium-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏼❤️💋👩🏽' => ':kiss-woman-woman-medium-light-skin-tone-medium-skin-tone:',
+ '👩🏽❤️💋👩🏽' => ':kiss-woman-woman-medium-skin-tone:',
+ '👩🏽❤️💋👩🏿' => ':kiss-woman-woman-medium-skin-tone-dark-skin-tone:',
+ '👩🏽❤️💋👩🏻' => ':kiss-woman-woman-medium-skin-tone-light-skin-tone:',
+ '👩🏽❤️💋👩🏾' => ':kiss-woman-woman-medium-skin-tone-medium-dark-skin-tone:',
+ '👩🏽❤️💋👩🏼' => ':kiss-woman-woman-medium-skin-tone-medium-light-skin-tone:',
+ '👨🏿❤️👨🏿' => ':couple-with-heart-man-man-dark-skin-tone:',
+ '👨🏿❤️👨🏻' => ':couple-with-heart-man-man-dark-skin-tone-light-skin-tone:',
+ '👨🏿❤️👨🏾' => ':couple-with-heart-man-man-dark-skin-tone-medium-dark-skin-tone:',
+ '👨🏿❤️👨🏼' => ':couple-with-heart-man-man-dark-skin-tone-medium-light-skin-tone:',
+ '👨🏿❤️👨🏽' => ':couple-with-heart-man-man-dark-skin-tone-medium-skin-tone:',
+ '👨🏻❤️👨🏻' => ':couple-with-heart-man-man-light-skin-tone:',
+ '👨🏻❤️👨🏿' => ':couple-with-heart-man-man-light-skin-tone-dark-skin-tone:',
+ '👨🏻❤️👨🏾' => ':couple-with-heart-man-man-light-skin-tone-medium-dark-skin-tone:',
+ '👨🏻❤️👨🏼' => ':couple-with-heart-man-man-light-skin-tone-medium-light-skin-tone:',
+ '👨🏻❤️👨🏽' => ':couple-with-heart-man-man-light-skin-tone-medium-skin-tone:',
+ '👨🏾❤️👨🏾' => ':couple-with-heart-man-man-medium-dark-skin-tone:',
+ '👨🏾❤️👨🏿' => ':couple-with-heart-man-man-medium-dark-skin-tone-dark-skin-tone:',
+ '👨🏾❤️👨🏻' => ':couple-with-heart-man-man-medium-dark-skin-tone-light-skin-tone:',
+ '👨🏾❤️👨🏼' => ':couple-with-heart-man-man-medium-dark-skin-tone-medium-light-skin-tone:',
+ '👨🏾❤️👨🏽' => ':couple-with-heart-man-man-medium-dark-skin-tone-medium-skin-tone:',
+ '👨🏼❤️👨🏼' => ':couple-with-heart-man-man-medium-light-skin-tone:',
+ '👨🏼❤️👨🏿' => ':couple-with-heart-man-man-medium-light-skin-tone-dark-skin-tone:',
+ '👨🏼❤️👨🏻' => ':couple-with-heart-man-man-medium-light-skin-tone-light-skin-tone:',
+ '👨🏼❤️👨🏾' => ':couple-with-heart-man-man-medium-light-skin-tone-medium-dark-skin-tone:',
+ '👨🏼❤️👨🏽' => ':couple-with-heart-man-man-medium-light-skin-tone-medium-skin-tone:',
+ '👨🏽❤️👨🏽' => ':couple-with-heart-man-man-medium-skin-tone:',
+ '👨🏽❤️👨🏿' => ':couple-with-heart-man-man-medium-skin-tone-dark-skin-tone:',
+ '👨🏽❤️👨🏻' => ':couple-with-heart-man-man-medium-skin-tone-light-skin-tone:',
+ '👨🏽❤️👨🏾' => ':couple-with-heart-man-man-medium-skin-tone-medium-dark-skin-tone:',
+ '👨🏽❤️👨🏼' => ':couple-with-heart-man-man-medium-skin-tone-medium-light-skin-tone:',
+ '🧑🏿❤️🧑🏻' => ':couple-with-heart-person-person-dark-skin-tone-light-skin-tone:',
+ '🧑🏿❤️🧑🏾' => ':couple-with-heart-person-person-dark-skin-tone-medium-dark-skin-tone:',
+ '🧑🏿❤️🧑🏼' => ':couple-with-heart-person-person-dark-skin-tone-medium-light-skin-tone:',
+ '🧑🏿❤️🧑🏽' => ':couple-with-heart-person-person-dark-skin-tone-medium-skin-tone:',
+ '🧑🏻❤️🧑🏿' => ':couple-with-heart-person-person-light-skin-tone-dark-skin-tone:',
+ '🧑🏻❤️🧑🏾' => ':couple-with-heart-person-person-light-skin-tone-medium-dark-skin-tone:',
+ '🧑🏻❤️🧑🏼' => ':couple-with-heart-person-person-light-skin-tone-medium-light-skin-tone:',
+ '🧑🏻❤️🧑🏽' => ':couple-with-heart-person-person-light-skin-tone-medium-skin-tone:',
+ '🧑🏾❤️🧑🏿' => ':couple-with-heart-person-person-medium-dark-skin-tone-dark-skin-tone:',
+ '🧑🏾❤️🧑🏻' => ':couple-with-heart-person-person-medium-dark-skin-tone-light-skin-tone:',
+ '🧑🏾❤️🧑🏼' => ':couple-with-heart-person-person-medium-dark-skin-tone-medium-light-skin-tone:',
+ '🧑🏾❤️🧑🏽' => ':couple-with-heart-person-person-medium-dark-skin-tone-medium-skin-tone:',
+ '🧑🏼❤️🧑🏿' => ':couple-with-heart-person-person-medium-light-skin-tone-dark-skin-tone:',
+ '🧑🏼❤️🧑🏻' => ':couple-with-heart-person-person-medium-light-skin-tone-light-skin-tone:',
+ '🧑🏼❤️🧑🏾' => ':couple-with-heart-person-person-medium-light-skin-tone-medium-dark-skin-tone:',
+ '🧑🏼❤️🧑🏽' => ':couple-with-heart-person-person-medium-light-skin-tone-medium-skin-tone:',
+ '🧑🏽❤️🧑🏿' => ':couple-with-heart-person-person-medium-skin-tone-dark-skin-tone:',
+ '🧑🏽❤️🧑🏻' => ':couple-with-heart-person-person-medium-skin-tone-light-skin-tone:',
+ '🧑🏽❤️🧑🏾' => ':couple-with-heart-person-person-medium-skin-tone-medium-dark-skin-tone:',
+ '🧑🏽❤️🧑🏼' => ':couple-with-heart-person-person-medium-skin-tone-medium-light-skin-tone:',
+ '👩🏿❤️👨🏿' => ':couple-with-heart-woman-man-dark-skin-tone:',
+ '👩🏿❤️👨🏻' => ':couple-with-heart-woman-man-dark-skin-tone-light-skin-tone:',
+ '👩🏿❤️👨🏾' => ':couple-with-heart-woman-man-dark-skin-tone-medium-dark-skin-tone:',
+ '👩🏿❤️👨🏼' => ':couple-with-heart-woman-man-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏿❤️👨🏽' => ':couple-with-heart-woman-man-dark-skin-tone-medium-skin-tone:',
+ '👩🏻❤️👨🏻' => ':couple-with-heart-woman-man-light-skin-tone:',
+ '👩🏻❤️👨🏿' => ':couple-with-heart-woman-man-light-skin-tone-dark-skin-tone:',
+ '👩🏻❤️👨🏾' => ':couple-with-heart-woman-man-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏻❤️👨🏼' => ':couple-with-heart-woman-man-light-skin-tone-medium-light-skin-tone:',
+ '👩🏻❤️👨🏽' => ':couple-with-heart-woman-man-light-skin-tone-medium-skin-tone:',
+ '👩🏾❤️👨🏾' => ':couple-with-heart-woman-man-medium-dark-skin-tone:',
+ '👩🏾❤️👨🏿' => ':couple-with-heart-woman-man-medium-dark-skin-tone-dark-skin-tone:',
+ '👩🏾❤️👨🏻' => ':couple-with-heart-woman-man-medium-dark-skin-tone-light-skin-tone:',
+ '👩🏾❤️👨🏼' => ':couple-with-heart-woman-man-medium-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏾❤️👨🏽' => ':couple-with-heart-woman-man-medium-dark-skin-tone-medium-skin-tone:',
+ '👩🏼❤️👨🏼' => ':couple-with-heart-woman-man-medium-light-skin-tone:',
+ '👩🏼❤️👨🏿' => ':couple-with-heart-woman-man-medium-light-skin-tone-dark-skin-tone:',
+ '👩🏼❤️👨🏻' => ':couple-with-heart-woman-man-medium-light-skin-tone-light-skin-tone:',
+ '👩🏼❤️👨🏾' => ':couple-with-heart-woman-man-medium-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏼❤️👨🏽' => ':couple-with-heart-woman-man-medium-light-skin-tone-medium-skin-tone:',
+ '👩🏽❤️👨🏽' => ':couple-with-heart-woman-man-medium-skin-tone:',
+ '👩🏽❤️👨🏿' => ':couple-with-heart-woman-man-medium-skin-tone-dark-skin-tone:',
+ '👩🏽❤️👨🏻' => ':couple-with-heart-woman-man-medium-skin-tone-light-skin-tone:',
+ '👩🏽❤️👨🏾' => ':couple-with-heart-woman-man-medium-skin-tone-medium-dark-skin-tone:',
+ '👩🏽❤️👨🏼' => ':couple-with-heart-woman-man-medium-skin-tone-medium-light-skin-tone:',
+ '👩🏿❤️👩🏿' => ':couple-with-heart-woman-woman-dark-skin-tone:',
+ '👩🏿❤️👩🏻' => ':couple-with-heart-woman-woman-dark-skin-tone-light-skin-tone:',
+ '👩🏿❤️👩🏾' => ':couple-with-heart-woman-woman-dark-skin-tone-medium-dark-skin-tone:',
+ '👩🏿❤️👩🏼' => ':couple-with-heart-woman-woman-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏿❤️👩🏽' => ':couple-with-heart-woman-woman-dark-skin-tone-medium-skin-tone:',
+ '👩🏻❤️👩🏻' => ':couple-with-heart-woman-woman-light-skin-tone:',
+ '👩🏻❤️👩🏿' => ':couple-with-heart-woman-woman-light-skin-tone-dark-skin-tone:',
+ '👩🏻❤️👩🏾' => ':couple-with-heart-woman-woman-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏻❤️👩🏼' => ':couple-with-heart-woman-woman-light-skin-tone-medium-light-skin-tone:',
+ '👩🏻❤️👩🏽' => ':couple-with-heart-woman-woman-light-skin-tone-medium-skin-tone:',
+ '👩🏾❤️👩🏾' => ':couple-with-heart-woman-woman-medium-dark-skin-tone:',
+ '👩🏾❤️👩🏿' => ':couple-with-heart-woman-woman-medium-dark-skin-tone-dark-skin-tone:',
+ '👩🏾❤️👩🏻' => ':couple-with-heart-woman-woman-medium-dark-skin-tone-light-skin-tone:',
+ '👩🏾❤️👩🏼' => ':couple-with-heart-woman-woman-medium-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏾❤️👩🏽' => ':couple-with-heart-woman-woman-medium-dark-skin-tone-medium-skin-tone:',
+ '👩🏼❤️👩🏼' => ':couple-with-heart-woman-woman-medium-light-skin-tone:',
+ '👩🏼❤️👩🏿' => ':couple-with-heart-woman-woman-medium-light-skin-tone-dark-skin-tone:',
+ '👩🏼❤️👩🏻' => ':couple-with-heart-woman-woman-medium-light-skin-tone-light-skin-tone:',
+ '👩🏼❤️👩🏾' => ':couple-with-heart-woman-woman-medium-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏼❤️👩🏽' => ':couple-with-heart-woman-woman-medium-light-skin-tone-medium-skin-tone:',
+ '👩🏽❤️👩🏽' => ':couple-with-heart-woman-woman-medium-skin-tone:',
+ '👩🏽❤️👩🏿' => ':couple-with-heart-woman-woman-medium-skin-tone-dark-skin-tone:',
+ '👩🏽❤️👩🏻' => ':couple-with-heart-woman-woman-medium-skin-tone-light-skin-tone:',
+ '👩🏽❤️👩🏾' => ':couple-with-heart-woman-woman-medium-skin-tone-medium-dark-skin-tone:',
+ '👩🏽❤️👩🏼' => ':couple-with-heart-woman-woman-medium-skin-tone-medium-light-skin-tone:',
'👨❤️💋👨' => ':man-kiss-man:',
- '👩❤️💋👩' => ':woman-kiss-woman:',
'👩❤️💋👨' => ':woman-kiss-man:',
+ '👩❤️💋👩' => ':woman-kiss-woman:',
+ '🧎🏿♂️➡️' => ':man-kneeling-facing-right-dark-skin-tone:',
+ '🧎🏻♂️➡️' => ':man-kneeling-facing-right-light-skin-tone:',
+ '🧎🏾♂️➡️' => ':man-kneeling-facing-right-medium-dark-skin-tone:',
+ '🧎🏼♂️➡️' => ':man-kneeling-facing-right-medium-light-skin-tone:',
+ '🧎🏽♂️➡️' => ':man-kneeling-facing-right-medium-skin-tone:',
+ '🏃🏿♂️➡️' => ':man-running-facing-right-dark-skin-tone:',
+ '🏃🏻♂️➡️' => ':man-running-facing-right-light-skin-tone:',
+ '🏃🏾♂️➡️' => ':man-running-facing-right-medium-dark-skin-tone:',
+ '🏃🏼♂️➡️' => ':man-running-facing-right-medium-light-skin-tone:',
+ '🏃🏽♂️➡️' => ':man-running-facing-right-medium-skin-tone:',
+ '🚶🏿♂️➡️' => ':man-walking-facing-right-dark-skin-tone:',
+ '🚶🏻♂️➡️' => ':man-walking-facing-right-light-skin-tone:',
+ '🚶🏾♂️➡️' => ':man-walking-facing-right-medium-dark-skin-tone:',
+ '🚶🏼♂️➡️' => ':man-walking-facing-right-medium-light-skin-tone:',
+ '🚶🏽♂️➡️' => ':man-walking-facing-right-medium-skin-tone:',
+ '🧎🏿♀️➡️' => ':woman-kneeling-facing-right-dark-skin-tone:',
+ '🧎🏻♀️➡️' => ':woman-kneeling-facing-right-light-skin-tone:',
+ '🧎🏾♀️➡️' => ':woman-kneeling-facing-right-medium-dark-skin-tone:',
+ '🧎🏼♀️➡️' => ':woman-kneeling-facing-right-medium-light-skin-tone:',
+ '🧎🏽♀️➡️' => ':woman-kneeling-facing-right-medium-skin-tone:',
+ '🏃🏿♀️➡️' => ':woman-running-facing-right-dark-skin-tone:',
+ '🏃🏻♀️➡️' => ':woman-running-facing-right-light-skin-tone:',
+ '🏃🏾♀️➡️' => ':woman-running-facing-right-medium-dark-skin-tone:',
+ '🏃🏼♀️➡️' => ':woman-running-facing-right-medium-light-skin-tone:',
+ '🏃🏽♀️➡️' => ':woman-running-facing-right-medium-skin-tone:',
+ '🚶🏿♀️➡️' => ':woman-walking-facing-right-dark-skin-tone:',
+ '🚶🏻♀️➡️' => ':woman-walking-facing-right-light-skin-tone:',
+ '🚶🏾♀️➡️' => ':woman-walking-facing-right-medium-dark-skin-tone:',
+ '🚶🏼♀️➡️' => ':woman-walking-facing-right-medium-light-skin-tone:',
+ '🚶🏽♀️➡️' => ':woman-walking-facing-right-medium-skin-tone:',
'👨❤💋👨' => ':couplekiss-man-man:',
'👩❤💋👨' => ':couplekiss-man-woman:',
'👩❤💋👩' => ':couplekiss-woman-woman:',
@@ -20,13 +240,144 @@
'👩👩👧👧' => ':woman-woman-girl-girl:',
'🏴' => ':scotland:',
'🏴' => ':wales:',
+ '👨🏿🦽➡️' => ':man-in-manual-wheelchair-facing-right-dark-skin-tone:',
+ '👨🏻🦽➡️' => ':man-in-manual-wheelchair-facing-right-light-skin-tone:',
+ '👨🏾🦽➡️' => ':man-in-manual-wheelchair-facing-right-medium-dark-skin-tone:',
+ '👨🏼🦽➡️' => ':man-in-manual-wheelchair-facing-right-medium-light-skin-tone:',
+ '👨🏽🦽➡️' => ':man-in-manual-wheelchair-facing-right-medium-skin-tone:',
+ '👨🏿🦼➡️' => ':man-in-motorized-wheelchair-facing-right-dark-skin-tone:',
+ '👨🏻🦼➡️' => ':man-in-motorized-wheelchair-facing-right-light-skin-tone:',
+ '👨🏾🦼➡️' => ':man-in-motorized-wheelchair-facing-right-medium-dark-skin-tone:',
+ '👨🏼🦼➡️' => ':man-in-motorized-wheelchair-facing-right-medium-light-skin-tone:',
+ '👨🏽🦼➡️' => ':man-in-motorized-wheelchair-facing-right-medium-skin-tone:',
'🧎♂️➡️' => ':man-kneeling-facing-right:',
'🏃♂️➡️' => ':man-running-facing-right:',
'🚶♂️➡️' => ':man-walking-facing-right:',
+ '👨🏿🦯➡️' => ':man-with-white-cane-facing-right-dark-skin-tone:',
+ '👨🏻🦯➡️' => ':man-with-white-cane-facing-right-light-skin-tone:',
+ '👨🏾🦯➡️' => ':man-with-white-cane-facing-right-medium-dark-skin-tone:',
+ '👨🏼🦯➡️' => ':man-with-white-cane-facing-right-medium-light-skin-tone:',
+ '👨🏽🦯➡️' => ':man-with-white-cane-facing-right-medium-skin-tone:',
+ '👨🏿🤝👨🏻' => ':men-holding-hands-dark-skin-tone-light-skin-tone:',
+ '👨🏿🤝👨🏾' => ':men-holding-hands-dark-skin-tone-medium-dark-skin-tone:',
+ '👨🏿🤝👨🏼' => ':men-holding-hands-dark-skin-tone-medium-light-skin-tone:',
+ '👨🏿🤝👨🏽' => ':men-holding-hands-dark-skin-tone-medium-skin-tone:',
+ '👨🏻🤝👨🏿' => ':men-holding-hands-light-skin-tone-dark-skin-tone:',
+ '👨🏻🤝👨🏾' => ':men-holding-hands-light-skin-tone-medium-dark-skin-tone:',
+ '👨🏻🤝👨🏼' => ':men-holding-hands-light-skin-tone-medium-light-skin-tone:',
+ '👨🏻🤝👨🏽' => ':men-holding-hands-light-skin-tone-medium-skin-tone:',
+ '👨🏾🤝👨🏿' => ':men-holding-hands-medium-dark-skin-tone-dark-skin-tone:',
+ '👨🏾🤝👨🏻' => ':men-holding-hands-medium-dark-skin-tone-light-skin-tone:',
+ '👨🏾🤝👨🏼' => ':men-holding-hands-medium-dark-skin-tone-medium-light-skin-tone:',
+ '👨🏾🤝👨🏽' => ':men-holding-hands-medium-dark-skin-tone-medium-skin-tone:',
+ '👨🏼🤝👨🏿' => ':men-holding-hands-medium-light-skin-tone-dark-skin-tone:',
+ '👨🏼🤝👨🏻' => ':men-holding-hands-medium-light-skin-tone-light-skin-tone:',
+ '👨🏼🤝👨🏾' => ':men-holding-hands-medium-light-skin-tone-medium-dark-skin-tone:',
+ '👨🏼🤝👨🏽' => ':men-holding-hands-medium-light-skin-tone-medium-skin-tone:',
+ '👨🏽🤝👨🏿' => ':men-holding-hands-medium-skin-tone-dark-skin-tone:',
+ '👨🏽🤝👨🏻' => ':men-holding-hands-medium-skin-tone-light-skin-tone:',
+ '👨🏽🤝👨🏾' => ':men-holding-hands-medium-skin-tone-medium-dark-skin-tone:',
+ '👨🏽🤝👨🏼' => ':men-holding-hands-medium-skin-tone-medium-light-skin-tone:',
+ '🧑🏿🤝🧑🏿' => ':people-holding-hands-dark-skin-tone:',
+ '🧑🏿🤝🧑🏻' => ':people-holding-hands-dark-skin-tone-light-skin-tone:',
+ '🧑🏿🤝🧑🏾' => ':people-holding-hands-dark-skin-tone-medium-dark-skin-tone:',
+ '🧑🏿🤝🧑🏼' => ':people-holding-hands-dark-skin-tone-medium-light-skin-tone:',
+ '🧑🏿🤝🧑🏽' => ':people-holding-hands-dark-skin-tone-medium-skin-tone:',
+ '🧑🏻🤝🧑🏻' => ':people-holding-hands-light-skin-tone:',
+ '🧑🏻🤝🧑🏿' => ':people-holding-hands-light-skin-tone-dark-skin-tone:',
+ '🧑🏻🤝🧑🏾' => ':people-holding-hands-light-skin-tone-medium-dark-skin-tone:',
+ '🧑🏻🤝🧑🏼' => ':people-holding-hands-light-skin-tone-medium-light-skin-tone:',
+ '🧑🏻🤝🧑🏽' => ':people-holding-hands-light-skin-tone-medium-skin-tone:',
+ '🧑🏾🤝🧑🏾' => ':people-holding-hands-medium-dark-skin-tone:',
+ '🧑🏾🤝🧑🏿' => ':people-holding-hands-medium-dark-skin-tone-dark-skin-tone:',
+ '🧑🏾🤝🧑🏻' => ':people-holding-hands-medium-dark-skin-tone-light-skin-tone:',
+ '🧑🏾🤝🧑🏼' => ':people-holding-hands-medium-dark-skin-tone-medium-light-skin-tone:',
+ '🧑🏾🤝🧑🏽' => ':people-holding-hands-medium-dark-skin-tone-medium-skin-tone:',
+ '🧑🏼🤝🧑🏼' => ':people-holding-hands-medium-light-skin-tone:',
+ '🧑🏼🤝🧑🏿' => ':people-holding-hands-medium-light-skin-tone-dark-skin-tone:',
+ '🧑🏼🤝🧑🏻' => ':people-holding-hands-medium-light-skin-tone-light-skin-tone:',
+ '🧑🏼🤝🧑🏾' => ':people-holding-hands-medium-light-skin-tone-medium-dark-skin-tone:',
+ '🧑🏼🤝🧑🏽' => ':people-holding-hands-medium-light-skin-tone-medium-skin-tone:',
+ '🧑🏽🤝🧑🏽' => ':people-holding-hands-medium-skin-tone:',
+ '🧑🏽🤝🧑🏿' => ':people-holding-hands-medium-skin-tone-dark-skin-tone:',
+ '🧑🏽🤝🧑🏻' => ':people-holding-hands-medium-skin-tone-light-skin-tone:',
+ '🧑🏽🤝🧑🏾' => ':people-holding-hands-medium-skin-tone-medium-dark-skin-tone:',
+ '🧑🏽🤝🧑🏼' => ':people-holding-hands-medium-skin-tone-medium-light-skin-tone:',
+ '🧑🏿🦽➡️' => ':person-in-manual-wheelchair-facing-right-dark-skin-tone:',
+ '🧑🏻🦽➡️' => ':person-in-manual-wheelchair-facing-right-light-skin-tone:',
+ '🧑🏾🦽➡️' => ':person-in-manual-wheelchair-facing-right-medium-dark-skin-tone:',
+ '🧑🏼🦽➡️' => ':person-in-manual-wheelchair-facing-right-medium-light-skin-tone:',
+ '🧑🏽🦽➡️' => ':person-in-manual-wheelchair-facing-right-medium-skin-tone:',
+ '🧑🏿🦼➡️' => ':person-in-motorized-wheelchair-facing-right-dark-skin-tone:',
+ '🧑🏻🦼➡️' => ':person-in-motorized-wheelchair-facing-right-light-skin-tone:',
+ '🧑🏾🦼➡️' => ':person-in-motorized-wheelchair-facing-right-medium-dark-skin-tone:',
+ '🧑🏼🦼➡️' => ':person-in-motorized-wheelchair-facing-right-medium-light-skin-tone:',
+ '🧑🏽🦼➡️' => ':person-in-motorized-wheelchair-facing-right-medium-skin-tone:',
+ '🧑🏿🦯➡️' => ':person-with-white-cane-facing-right-dark-skin-tone:',
+ '🧑🏻🦯➡️' => ':person-with-white-cane-facing-right-light-skin-tone:',
+ '🧑🏾🦯➡️' => ':person-with-white-cane-facing-right-medium-dark-skin-tone:',
+ '🧑🏼🦯➡️' => ':person-with-white-cane-facing-right-medium-light-skin-tone:',
+ '🧑🏽🦯➡️' => ':person-with-white-cane-facing-right-medium-skin-tone:',
+ '👩🏿🤝👨🏻' => ':woman-and-man-holding-hands-dark-skin-tone-light-skin-tone:',
+ '👩🏿🤝👨🏾' => ':woman-and-man-holding-hands-dark-skin-tone-medium-dark-skin-tone:',
+ '👩🏿🤝👨🏼' => ':woman-and-man-holding-hands-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏿🤝👨🏽' => ':woman-and-man-holding-hands-dark-skin-tone-medium-skin-tone:',
+ '👩🏻🤝👨🏿' => ':woman-and-man-holding-hands-light-skin-tone-dark-skin-tone:',
+ '👩🏻🤝👨🏾' => ':woman-and-man-holding-hands-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏻🤝👨🏼' => ':woman-and-man-holding-hands-light-skin-tone-medium-light-skin-tone:',
+ '👩🏻🤝👨🏽' => ':woman-and-man-holding-hands-light-skin-tone-medium-skin-tone:',
+ '👩🏾🤝👨🏿' => ':woman-and-man-holding-hands-medium-dark-skin-tone-dark-skin-tone:',
+ '👩🏾🤝👨🏻' => ':woman-and-man-holding-hands-medium-dark-skin-tone-light-skin-tone:',
+ '👩🏾🤝👨🏼' => ':woman-and-man-holding-hands-medium-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏾🤝👨🏽' => ':woman-and-man-holding-hands-medium-dark-skin-tone-medium-skin-tone:',
+ '👩🏼🤝👨🏿' => ':woman-and-man-holding-hands-medium-light-skin-tone-dark-skin-tone:',
+ '👩🏼🤝👨🏻' => ':woman-and-man-holding-hands-medium-light-skin-tone-light-skin-tone:',
+ '👩🏼🤝👨🏾' => ':woman-and-man-holding-hands-medium-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏼🤝👨🏽' => ':woman-and-man-holding-hands-medium-light-skin-tone-medium-skin-tone:',
+ '👩🏽🤝👨🏿' => ':woman-and-man-holding-hands-medium-skin-tone-dark-skin-tone:',
+ '👩🏽🤝👨🏻' => ':woman-and-man-holding-hands-medium-skin-tone-light-skin-tone:',
+ '👩🏽🤝👨🏾' => ':woman-and-man-holding-hands-medium-skin-tone-medium-dark-skin-tone:',
+ '👩🏽🤝👨🏼' => ':woman-and-man-holding-hands-medium-skin-tone-medium-light-skin-tone:',
+ '👩🏿🦽➡️' => ':woman-in-manual-wheelchair-facing-right-dark-skin-tone:',
+ '👩🏻🦽➡️' => ':woman-in-manual-wheelchair-facing-right-light-skin-tone:',
+ '👩🏾🦽➡️' => ':woman-in-manual-wheelchair-facing-right-medium-dark-skin-tone:',
+ '👩🏼🦽➡️' => ':woman-in-manual-wheelchair-facing-right-medium-light-skin-tone:',
+ '👩🏽🦽➡️' => ':woman-in-manual-wheelchair-facing-right-medium-skin-tone:',
+ '👩🏿🦼➡️' => ':woman-in-motorized-wheelchair-facing-right-dark-skin-tone:',
+ '👩🏻🦼➡️' => ':woman-in-motorized-wheelchair-facing-right-light-skin-tone:',
+ '👩🏾🦼➡️' => ':woman-in-motorized-wheelchair-facing-right-medium-dark-skin-tone:',
+ '👩🏼🦼➡️' => ':woman-in-motorized-wheelchair-facing-right-medium-light-skin-tone:',
+ '👩🏽🦼➡️' => ':woman-in-motorized-wheelchair-facing-right-medium-skin-tone:',
'🧎♀️➡️' => ':woman-kneeling-facing-right:',
'🏃♀️➡️' => ':woman-running-facing-right:',
'🚶♀️➡️' => ':woman-walking-facing-right:',
+ '👩🏿🦯➡️' => ':woman-with-white-cane-facing-right-dark-skin-tone:',
+ '👩🏻🦯➡️' => ':woman-with-white-cane-facing-right-light-skin-tone:',
+ '👩🏾🦯➡️' => ':woman-with-white-cane-facing-right-medium-dark-skin-tone:',
+ '👩🏼🦯➡️' => ':woman-with-white-cane-facing-right-medium-light-skin-tone:',
+ '👩🏽🦯➡️' => ':woman-with-white-cane-facing-right-medium-skin-tone:',
+ '👩🏿🤝👩🏻' => ':women-holding-hands-dark-skin-tone-light-skin-tone:',
+ '👩🏿🤝👩🏾' => ':women-holding-hands-dark-skin-tone-medium-dark-skin-tone:',
+ '👩🏿🤝👩🏼' => ':women-holding-hands-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏿🤝👩🏽' => ':women-holding-hands-dark-skin-tone-medium-skin-tone:',
+ '👩🏻🤝👩🏿' => ':women-holding-hands-light-skin-tone-dark-skin-tone:',
+ '👩🏻🤝👩🏾' => ':women-holding-hands-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏻🤝👩🏼' => ':women-holding-hands-light-skin-tone-medium-light-skin-tone:',
+ '👩🏻🤝👩🏽' => ':women-holding-hands-light-skin-tone-medium-skin-tone:',
+ '👩🏾🤝👩🏿' => ':women-holding-hands-medium-dark-skin-tone-dark-skin-tone:',
+ '👩🏾🤝👩🏻' => ':women-holding-hands-medium-dark-skin-tone-light-skin-tone:',
+ '👩🏾🤝👩🏼' => ':women-holding-hands-medium-dark-skin-tone-medium-light-skin-tone:',
+ '👩🏾🤝👩🏽' => ':women-holding-hands-medium-dark-skin-tone-medium-skin-tone:',
+ '👩🏼🤝👩🏿' => ':women-holding-hands-medium-light-skin-tone-dark-skin-tone:',
+ '👩🏼🤝👩🏻' => ':women-holding-hands-medium-light-skin-tone-light-skin-tone:',
+ '👩🏼🤝👩🏾' => ':women-holding-hands-medium-light-skin-tone-medium-dark-skin-tone:',
+ '👩🏼🤝👩🏽' => ':women-holding-hands-medium-light-skin-tone-medium-skin-tone:',
+ '👩🏽🤝👩🏿' => ':women-holding-hands-medium-skin-tone-dark-skin-tone:',
+ '👩🏽🤝👩🏻' => ':women-holding-hands-medium-skin-tone-light-skin-tone:',
+ '👩🏽🤝👩🏾' => ':women-holding-hands-medium-skin-tone-medium-dark-skin-tone:',
+ '👩🏽🤝👩🏼' => ':women-holding-hands-medium-skin-tone-medium-light-skin-tone:',
'👨❤️👨' => ':man-heart-man:',
+ '👩❤️👨' => ':woman-heart-man:',
'👩❤️👩' => ':woman-heart-woman:',
'👨🦽➡️' => ':man-in-manual-wheelchair-facing-right:',
'👨🦼➡️' => ':man-in-motorized-wheelchair-facing-right:',
@@ -34,13 +385,22 @@
'🧑🦽➡️' => ':person-in-manual-wheelchair-facing-right:',
'🧑🦼➡️' => ':person-in-motorized-wheelchair-facing-right:',
'🧑🦯➡️' => ':person-with-white-cane-facing-right:',
- '👩❤️👨' => ':woman-heart-man:',
'👩🦽➡️' => ':woman-in-manual-wheelchair-facing-right:',
'👩🦼➡️' => ':woman-in-motorized-wheelchair-facing-right:',
'👩🦯➡️' => ':woman-with-white-cane-facing-right:',
'👨❤👨' => ':couple-with-heart-man-man:',
'👩❤👨' => ':couple-with-heart-woman-man:',
'👩❤👩' => ':couple-with-heart-woman-woman:',
+ '🧏🏿♂️' => ':deaf-man-dark-skin-tone:',
+ '🧏🏻♂️' => ':deaf-man-light-skin-tone:',
+ '🧏🏾♂️' => ':deaf-man-medium-dark-skin-tone:',
+ '🧏🏼♂️' => ':deaf-man-medium-light-skin-tone:',
+ '🧏🏽♂️' => ':deaf-man-medium-skin-tone:',
+ '🧏🏿♀️' => ':deaf-woman-dark-skin-tone:',
+ '🧏🏻♀️' => ':deaf-woman-light-skin-tone:',
+ '🧏🏾♀️' => ':deaf-woman-medium-dark-skin-tone:',
+ '🧏🏼♀️' => ':deaf-woman-medium-light-skin-tone:',
+ '🧏🏽♀️' => ':deaf-woman-medium-skin-tone:',
'👁️🗨️' => ':eye-in-speech-bubble:',
'🧑🧑🧒' => ':family-adult-adult-child:',
'🧑🧒🧒' => ':family-adult-child-child:',
@@ -56,136 +416,997 @@
'👩👧👧' => ':woman-girl-girl:',
'👩👩👦' => ':woman-woman-boy:',
'👩👩👧' => ':woman-woman-girl:',
- '🕵️♀️' => ':female-detective:',
- '🕵️♂️' => ':male-detective:',
+ '🕵️♀️' => ':woman-detective:',
+ '🫱🏿🫲🏻' => ':handshake-dark-skin-tone-light-skin-tone:',
+ '🫱🏿🫲🏾' => ':handshake-dark-skin-tone-medium-dark-skin-tone:',
+ '🫱🏿🫲🏼' => ':handshake-dark-skin-tone-medium-light-skin-tone:',
+ '🫱🏿🫲🏽' => ':handshake-dark-skin-tone-medium-skin-tone:',
+ '🫱🏻🫲🏿' => ':handshake-light-skin-tone-dark-skin-tone:',
+ '🫱🏻🫲🏾' => ':handshake-light-skin-tone-medium-dark-skin-tone:',
+ '🫱🏻🫲🏼' => ':handshake-light-skin-tone-medium-light-skin-tone:',
+ '🫱🏻🫲🏽' => ':handshake-light-skin-tone-medium-skin-tone:',
+ '🫱🏾🫲🏿' => ':handshake-medium-dark-skin-tone-dark-skin-tone:',
+ '🫱🏾🫲🏻' => ':handshake-medium-dark-skin-tone-light-skin-tone:',
+ '🫱🏾🫲🏼' => ':handshake-medium-dark-skin-tone-medium-light-skin-tone:',
+ '🫱🏾🫲🏽' => ':handshake-medium-dark-skin-tone-medium-skin-tone:',
+ '🫱🏼🫲🏿' => ':handshake-medium-light-skin-tone-dark-skin-tone:',
+ '🫱🏼🫲🏻' => ':handshake-medium-light-skin-tone-light-skin-tone:',
+ '🫱🏼🫲🏾' => ':handshake-medium-light-skin-tone-medium-dark-skin-tone:',
+ '🫱🏼🫲🏽' => ':handshake-medium-light-skin-tone-medium-skin-tone:',
+ '🫱🏽🫲🏿' => ':handshake-medium-skin-tone-dark-skin-tone:',
+ '🫱🏽🫲🏻' => ':handshake-medium-skin-tone-light-skin-tone:',
+ '🫱🏽🫲🏾' => ':handshake-medium-skin-tone-medium-dark-skin-tone:',
+ '🫱🏽🫲🏼' => ':handshake-medium-skin-tone-medium-light-skin-tone:',
+ '🧑🏿⚕️' => ':health-worker-dark-skin-tone:',
+ '🧑🏻⚕️' => ':health-worker-light-skin-tone:',
+ '🧑🏾⚕️' => ':health-worker-medium-dark-skin-tone:',
+ '🧑🏼⚕️' => ':health-worker-medium-light-skin-tone:',
+ '🧑🏽⚕️' => ':health-worker-medium-skin-tone:',
+ '🧑🏿⚖️' => ':judge-dark-skin-tone:',
+ '🧑🏻⚖️' => ':judge-light-skin-tone:',
+ '🧑🏾⚖️' => ':judge-medium-dark-skin-tone:',
+ '🧑🏼⚖️' => ':judge-medium-light-skin-tone:',
+ '🧑🏽⚖️' => ':judge-medium-skin-tone:',
+ '🕵️♂️' => ':man-detective:',
+ '🚴🏿♂️' => ':man-biking-dark-skin-tone:',
+ '🚴🏻♂️' => ':man-biking-light-skin-tone:',
+ '🚴🏾♂️' => ':man-biking-medium-dark-skin-tone:',
+ '🚴🏼♂️' => ':man-biking-medium-light-skin-tone:',
+ '🚴🏽♂️' => ':man-biking-medium-skin-tone:',
'⛹️♂️' => ':man-bouncing-ball:',
+ '⛹🏿♂️' => ':man-bouncing-ball-dark-skin-tone:',
+ '⛹🏻♂️' => ':man-bouncing-ball-light-skin-tone:',
+ '⛹🏾♂️' => ':man-bouncing-ball-medium-dark-skin-tone:',
+ '⛹🏼♂️' => ':man-bouncing-ball-medium-light-skin-tone:',
+ '⛹🏽♂️' => ':man-bouncing-ball-medium-skin-tone:',
+ '🙇🏿♂️' => ':man-bowing-dark-skin-tone:',
+ '🙇🏻♂️' => ':man-bowing-light-skin-tone:',
+ '🙇🏾♂️' => ':man-bowing-medium-dark-skin-tone:',
+ '🙇🏼♂️' => ':man-bowing-medium-light-skin-tone:',
+ '🙇🏽♂️' => ':man-bowing-medium-skin-tone:',
+ '🤸🏿♂️' => ':man-cartwheeling-dark-skin-tone:',
+ '🤸🏻♂️' => ':man-cartwheeling-light-skin-tone:',
+ '🤸🏾♂️' => ':man-cartwheeling-medium-dark-skin-tone:',
+ '🤸🏼♂️' => ':man-cartwheeling-medium-light-skin-tone:',
+ '🤸🏽♂️' => ':man-cartwheeling-medium-skin-tone:',
+ '🧗🏿♂️' => ':man-climbing-dark-skin-tone:',
+ '🧗🏻♂️' => ':man-climbing-light-skin-tone:',
+ '🧗🏾♂️' => ':man-climbing-medium-dark-skin-tone:',
+ '🧗🏼♂️' => ':man-climbing-medium-light-skin-tone:',
+ '🧗🏽♂️' => ':man-climbing-medium-skin-tone:',
+ '👷🏿♂️' => ':man-construction-worker-dark-skin-tone:',
+ '👷🏻♂️' => ':man-construction-worker-light-skin-tone:',
+ '👷🏾♂️' => ':man-construction-worker-medium-dark-skin-tone:',
+ '👷🏼♂️' => ':man-construction-worker-medium-light-skin-tone:',
+ '👷🏽♂️' => ':man-construction-worker-medium-skin-tone:',
+ '🧔🏿♂️' => ':man-dark-skin-tone-beard:',
+ '👱🏿♂️' => ':man-dark-skin-tone-blond-hair:',
+ '🕵🏿♂️' => ':man-detective-dark-skin-tone:',
+ '🕵🏻♂️' => ':man-detective-light-skin-tone:',
+ '🕵🏾♂️' => ':man-detective-medium-dark-skin-tone:',
+ '🕵🏼♂️' => ':man-detective-medium-light-skin-tone:',
+ '🕵🏽♂️' => ':man-detective-medium-skin-tone:',
+ '🧝🏿♂️' => ':man-elf-dark-skin-tone:',
+ '🧝🏻♂️' => ':man-elf-light-skin-tone:',
+ '🧝🏾♂️' => ':man-elf-medium-dark-skin-tone:',
+ '🧝🏼♂️' => ':man-elf-medium-light-skin-tone:',
+ '🧝🏽♂️' => ':man-elf-medium-skin-tone:',
+ '🤦🏿♂️' => ':man-facepalming-dark-skin-tone:',
+ '🤦🏻♂️' => ':man-facepalming-light-skin-tone:',
+ '🤦🏾♂️' => ':man-facepalming-medium-dark-skin-tone:',
+ '🤦🏼♂️' => ':man-facepalming-medium-light-skin-tone:',
+ '🤦🏽♂️' => ':man-facepalming-medium-skin-tone:',
+ '🧚🏿♂️' => ':man-fairy-dark-skin-tone:',
+ '🧚🏻♂️' => ':man-fairy-light-skin-tone:',
+ '🧚🏾♂️' => ':man-fairy-medium-dark-skin-tone:',
+ '🧚🏼♂️' => ':man-fairy-medium-light-skin-tone:',
+ '🧚🏽♂️' => ':man-fairy-medium-skin-tone:',
+ '🙍🏿♂️' => ':man-frowning-dark-skin-tone:',
+ '🙍🏻♂️' => ':man-frowning-light-skin-tone:',
+ '🙍🏾♂️' => ':man-frowning-medium-dark-skin-tone:',
+ '🙍🏼♂️' => ':man-frowning-medium-light-skin-tone:',
+ '🙍🏽♂️' => ':man-frowning-medium-skin-tone:',
+ '🙅🏿♂️' => ':man-gesturing-no-dark-skin-tone:',
+ '🙅🏻♂️' => ':man-gesturing-no-light-skin-tone:',
+ '🙅🏾♂️' => ':man-gesturing-no-medium-dark-skin-tone:',
+ '🙅🏼♂️' => ':man-gesturing-no-medium-light-skin-tone:',
+ '🙅🏽♂️' => ':man-gesturing-no-medium-skin-tone:',
+ '🙆🏿♂️' => ':man-gesturing-ok-dark-skin-tone:',
+ '🙆🏻♂️' => ':man-gesturing-ok-light-skin-tone:',
+ '🙆🏾♂️' => ':man-gesturing-ok-medium-dark-skin-tone:',
+ '🙆🏼♂️' => ':man-gesturing-ok-medium-light-skin-tone:',
+ '🙆🏽♂️' => ':man-gesturing-ok-medium-skin-tone:',
+ '💇🏿♂️' => ':man-getting-haircut-dark-skin-tone:',
+ '💇🏻♂️' => ':man-getting-haircut-light-skin-tone:',
+ '💇🏾♂️' => ':man-getting-haircut-medium-dark-skin-tone:',
+ '💇🏼♂️' => ':man-getting-haircut-medium-light-skin-tone:',
+ '💇🏽♂️' => ':man-getting-haircut-medium-skin-tone:',
+ '💆🏿♂️' => ':man-getting-massage-dark-skin-tone:',
+ '💆🏻♂️' => ':man-getting-massage-light-skin-tone:',
+ '💆🏾♂️' => ':man-getting-massage-medium-dark-skin-tone:',
+ '💆🏼♂️' => ':man-getting-massage-medium-light-skin-tone:',
+ '💆🏽♂️' => ':man-getting-massage-medium-skin-tone:',
'🏌️♂️' => ':man-golfing:',
+ '🏌🏿♂️' => ':man-golfing-dark-skin-tone:',
+ '🏌🏻♂️' => ':man-golfing-light-skin-tone:',
+ '🏌🏾♂️' => ':man-golfing-medium-dark-skin-tone:',
+ '🏌🏼♂️' => ':man-golfing-medium-light-skin-tone:',
+ '🏌🏽♂️' => ':man-golfing-medium-skin-tone:',
+ '💂🏿♂️' => ':man-guard-dark-skin-tone:',
+ '💂🏻♂️' => ':man-guard-light-skin-tone:',
+ '💂🏾♂️' => ':man-guard-medium-dark-skin-tone:',
+ '💂🏼♂️' => ':man-guard-medium-light-skin-tone:',
+ '💂🏽♂️' => ':man-guard-medium-skin-tone:',
+ '👨🏿⚕️' => ':man-health-worker-dark-skin-tone:',
+ '👨🏻⚕️' => ':man-health-worker-light-skin-tone:',
+ '👨🏾⚕️' => ':man-health-worker-medium-dark-skin-tone:',
+ '👨🏼⚕️' => ':man-health-worker-medium-light-skin-tone:',
+ '👨🏽⚕️' => ':man-health-worker-medium-skin-tone:',
+ '🧘🏿♂️' => ':man-in-lotus-position-dark-skin-tone:',
+ '🧘🏻♂️' => ':man-in-lotus-position-light-skin-tone:',
+ '🧘🏾♂️' => ':man-in-lotus-position-medium-dark-skin-tone:',
+ '🧘🏼♂️' => ':man-in-lotus-position-medium-light-skin-tone:',
+ '🧘🏽♂️' => ':man-in-lotus-position-medium-skin-tone:',
+ '🧖🏿♂️' => ':man-in-steamy-room-dark-skin-tone:',
+ '🧖🏻♂️' => ':man-in-steamy-room-light-skin-tone:',
+ '🧖🏾♂️' => ':man-in-steamy-room-medium-dark-skin-tone:',
+ '🧖🏼♂️' => ':man-in-steamy-room-medium-light-skin-tone:',
+ '🧖🏽♂️' => ':man-in-steamy-room-medium-skin-tone:',
+ '🤵🏿♂️' => ':man-in-tuxedo-dark-skin-tone:',
+ '🤵🏻♂️' => ':man-in-tuxedo-light-skin-tone:',
+ '🤵🏾♂️' => ':man-in-tuxedo-medium-dark-skin-tone:',
+ '🤵🏼♂️' => ':man-in-tuxedo-medium-light-skin-tone:',
+ '🤵🏽♂️' => ':man-in-tuxedo-medium-skin-tone:',
+ '👨🏿⚖️' => ':man-judge-dark-skin-tone:',
+ '👨🏻⚖️' => ':man-judge-light-skin-tone:',
+ '👨🏾⚖️' => ':man-judge-medium-dark-skin-tone:',
+ '👨🏼⚖️' => ':man-judge-medium-light-skin-tone:',
+ '👨🏽⚖️' => ':man-judge-medium-skin-tone:',
+ '🤹🏿♂️' => ':man-juggling-dark-skin-tone:',
+ '🤹🏻♂️' => ':man-juggling-light-skin-tone:',
+ '🤹🏾♂️' => ':man-juggling-medium-dark-skin-tone:',
+ '🤹🏼♂️' => ':man-juggling-medium-light-skin-tone:',
+ '🤹🏽♂️' => ':man-juggling-medium-skin-tone:',
+ '🧎🏿♂️' => ':man-kneeling-dark-skin-tone:',
+ '🧎🏻♂️' => ':man-kneeling-light-skin-tone:',
+ '🧎🏾♂️' => ':man-kneeling-medium-dark-skin-tone:',
+ '🧎🏼♂️' => ':man-kneeling-medium-light-skin-tone:',
+ '🧎🏽♂️' => ':man-kneeling-medium-skin-tone:',
'🏋️♂️' => ':man-lifting-weights:',
+ '🏋🏿♂️' => ':man-lifting-weights-dark-skin-tone:',
+ '🏋🏻♂️' => ':man-lifting-weights-light-skin-tone:',
+ '🏋🏾♂️' => ':man-lifting-weights-medium-dark-skin-tone:',
+ '🏋🏼♂️' => ':man-lifting-weights-medium-light-skin-tone:',
+ '🏋🏽♂️' => ':man-lifting-weights-medium-skin-tone:',
+ '🧔🏻♂️' => ':man-light-skin-tone-beard:',
+ '👱🏻♂️' => ':man-light-skin-tone-blond-hair:',
+ '🧙🏿♂️' => ':man-mage-dark-skin-tone:',
+ '🧙🏻♂️' => ':man-mage-light-skin-tone:',
+ '🧙🏾♂️' => ':man-mage-medium-dark-skin-tone:',
+ '🧙🏼♂️' => ':man-mage-medium-light-skin-tone:',
+ '🧙🏽♂️' => ':man-mage-medium-skin-tone:',
+ '🧔🏾♂️' => ':man-medium-dark-skin-tone-beard:',
+ '👱🏾♂️' => ':man-medium-dark-skin-tone-blond-hair:',
+ '🧔🏼♂️' => ':man-medium-light-skin-tone-beard:',
+ '👱🏼♂️' => ':man-medium-light-skin-tone-blond-hair:',
+ '🧔🏽♂️' => ':man-medium-skin-tone-beard:',
+ '👱🏽♂️' => ':man-medium-skin-tone-blond-hair:',
+ '🚵🏿♂️' => ':man-mountain-biking-dark-skin-tone:',
+ '🚵🏻♂️' => ':man-mountain-biking-light-skin-tone:',
+ '🚵🏾♂️' => ':man-mountain-biking-medium-dark-skin-tone:',
+ '🚵🏼♂️' => ':man-mountain-biking-medium-light-skin-tone:',
+ '🚵🏽♂️' => ':man-mountain-biking-medium-skin-tone:',
+ '👨🏿✈️' => ':man-pilot-dark-skin-tone:',
+ '👨🏻✈️' => ':man-pilot-light-skin-tone:',
+ '👨🏾✈️' => ':man-pilot-medium-dark-skin-tone:',
+ '👨🏼✈️' => ':man-pilot-medium-light-skin-tone:',
+ '👨🏽✈️' => ':man-pilot-medium-skin-tone:',
+ '🤾🏿♂️' => ':man-playing-handball-dark-skin-tone:',
+ '🤾🏻♂️' => ':man-playing-handball-light-skin-tone:',
+ '🤾🏾♂️' => ':man-playing-handball-medium-dark-skin-tone:',
+ '🤾🏼♂️' => ':man-playing-handball-medium-light-skin-tone:',
+ '🤾🏽♂️' => ':man-playing-handball-medium-skin-tone:',
+ '🤽🏿♂️' => ':man-playing-water-polo-dark-skin-tone:',
+ '🤽🏻♂️' => ':man-playing-water-polo-light-skin-tone:',
+ '🤽🏾♂️' => ':man-playing-water-polo-medium-dark-skin-tone:',
+ '🤽🏼♂️' => ':man-playing-water-polo-medium-light-skin-tone:',
+ '🤽🏽♂️' => ':man-playing-water-polo-medium-skin-tone:',
+ '👮🏿♂️' => ':man-police-officer-dark-skin-tone:',
+ '👮🏻♂️' => ':man-police-officer-light-skin-tone:',
+ '👮🏾♂️' => ':man-police-officer-medium-dark-skin-tone:',
+ '👮🏼♂️' => ':man-police-officer-medium-light-skin-tone:',
+ '👮🏽♂️' => ':man-police-officer-medium-skin-tone:',
+ '🙎🏿♂️' => ':man-pouting-dark-skin-tone:',
+ '🙎🏻♂️' => ':man-pouting-light-skin-tone:',
+ '🙎🏾♂️' => ':man-pouting-medium-dark-skin-tone:',
+ '🙎🏼♂️' => ':man-pouting-medium-light-skin-tone:',
+ '🙎🏽♂️' => ':man-pouting-medium-skin-tone:',
+ '🙋🏿♂️' => ':man-raising-hand-dark-skin-tone:',
+ '🙋🏻♂️' => ':man-raising-hand-light-skin-tone:',
+ '🙋🏾♂️' => ':man-raising-hand-medium-dark-skin-tone:',
+ '🙋🏼♂️' => ':man-raising-hand-medium-light-skin-tone:',
+ '🙋🏽♂️' => ':man-raising-hand-medium-skin-tone:',
+ '🚣🏿♂️' => ':man-rowing-boat-dark-skin-tone:',
+ '🚣🏻♂️' => ':man-rowing-boat-light-skin-tone:',
+ '🚣🏾♂️' => ':man-rowing-boat-medium-dark-skin-tone:',
+ '🚣🏼♂️' => ':man-rowing-boat-medium-light-skin-tone:',
+ '🚣🏽♂️' => ':man-rowing-boat-medium-skin-tone:',
+ '🏃🏿♂️' => ':man-running-dark-skin-tone:',
+ '🏃🏻♂️' => ':man-running-light-skin-tone:',
+ '🏃🏾♂️' => ':man-running-medium-dark-skin-tone:',
+ '🏃🏼♂️' => ':man-running-medium-light-skin-tone:',
+ '🏃🏽♂️' => ':man-running-medium-skin-tone:',
+ '🤷🏿♂️' => ':man-shrugging-dark-skin-tone:',
+ '🤷🏻♂️' => ':man-shrugging-light-skin-tone:',
+ '🤷🏾♂️' => ':man-shrugging-medium-dark-skin-tone:',
+ '🤷🏼♂️' => ':man-shrugging-medium-light-skin-tone:',
+ '🤷🏽♂️' => ':man-shrugging-medium-skin-tone:',
+ '🧍🏿♂️' => ':man-standing-dark-skin-tone:',
+ '🧍🏻♂️' => ':man-standing-light-skin-tone:',
+ '🧍🏾♂️' => ':man-standing-medium-dark-skin-tone:',
+ '🧍🏼♂️' => ':man-standing-medium-light-skin-tone:',
+ '🧍🏽♂️' => ':man-standing-medium-skin-tone:',
+ '🦸🏿♂️' => ':man-superhero-dark-skin-tone:',
+ '🦸🏻♂️' => ':man-superhero-light-skin-tone:',
+ '🦸🏾♂️' => ':man-superhero-medium-dark-skin-tone:',
+ '🦸🏼♂️' => ':man-superhero-medium-light-skin-tone:',
+ '🦸🏽♂️' => ':man-superhero-medium-skin-tone:',
+ '🦹🏿♂️' => ':man-supervillain-dark-skin-tone:',
+ '🦹🏻♂️' => ':man-supervillain-light-skin-tone:',
+ '🦹🏾♂️' => ':man-supervillain-medium-dark-skin-tone:',
+ '🦹🏼♂️' => ':man-supervillain-medium-light-skin-tone:',
+ '🦹🏽♂️' => ':man-supervillain-medium-skin-tone:',
+ '🏄🏿♂️' => ':man-surfing-dark-skin-tone:',
+ '🏄🏻♂️' => ':man-surfing-light-skin-tone:',
+ '🏄🏾♂️' => ':man-surfing-medium-dark-skin-tone:',
+ '🏄🏼♂️' => ':man-surfing-medium-light-skin-tone:',
+ '🏄🏽♂️' => ':man-surfing-medium-skin-tone:',
+ '🏊🏿♂️' => ':man-swimming-dark-skin-tone:',
+ '🏊🏻♂️' => ':man-swimming-light-skin-tone:',
+ '🏊🏾♂️' => ':man-swimming-medium-dark-skin-tone:',
+ '🏊🏼♂️' => ':man-swimming-medium-light-skin-tone:',
+ '🏊🏽♂️' => ':man-swimming-medium-skin-tone:',
+ '💁🏿♂️' => ':man-tipping-hand-dark-skin-tone:',
+ '💁🏻♂️' => ':man-tipping-hand-light-skin-tone:',
+ '💁🏾♂️' => ':man-tipping-hand-medium-dark-skin-tone:',
+ '💁🏼♂️' => ':man-tipping-hand-medium-light-skin-tone:',
+ '💁🏽♂️' => ':man-tipping-hand-medium-skin-tone:',
+ '🧛🏿♂️' => ':man-vampire-dark-skin-tone:',
+ '🧛🏻♂️' => ':man-vampire-light-skin-tone:',
+ '🧛🏾♂️' => ':man-vampire-medium-dark-skin-tone:',
+ '🧛🏼♂️' => ':man-vampire-medium-light-skin-tone:',
+ '🧛🏽♂️' => ':man-vampire-medium-skin-tone:',
+ '🚶🏿♂️' => ':man-walking-dark-skin-tone:',
+ '🚶🏻♂️' => ':man-walking-light-skin-tone:',
+ '🚶🏾♂️' => ':man-walking-medium-dark-skin-tone:',
+ '🚶🏼♂️' => ':man-walking-medium-light-skin-tone:',
+ '🚶🏽♂️' => ':man-walking-medium-skin-tone:',
+ '👳🏿♂️' => ':man-wearing-turban-dark-skin-tone:',
+ '👳🏻♂️' => ':man-wearing-turban-light-skin-tone:',
+ '👳🏾♂️' => ':man-wearing-turban-medium-dark-skin-tone:',
+ '👳🏼♂️' => ':man-wearing-turban-medium-light-skin-tone:',
+ '👳🏽♂️' => ':man-wearing-turban-medium-skin-tone:',
+ '👰🏿♂️' => ':man-with-veil-dark-skin-tone:',
+ '👰🏻♂️' => ':man-with-veil-light-skin-tone:',
+ '👰🏾♂️' => ':man-with-veil-medium-dark-skin-tone:',
+ '👰🏼♂️' => ':man-with-veil-medium-light-skin-tone:',
+ '👰🏽♂️' => ':man-with-veil-medium-skin-tone:',
+ '🧜🏿♀️' => ':mermaid-dark-skin-tone:',
+ '🧜🏻♀️' => ':mermaid-light-skin-tone:',
+ '🧜🏾♀️' => ':mermaid-medium-dark-skin-tone:',
+ '🧜🏼♀️' => ':mermaid-medium-light-skin-tone:',
+ '🧜🏽♀️' => ':mermaid-medium-skin-tone:',
+ '🧜🏿♂️' => ':merman-dark-skin-tone:',
+ '🧜🏻♂️' => ':merman-light-skin-tone:',
+ '🧜🏾♂️' => ':merman-medium-dark-skin-tone:',
+ '🧜🏼♂️' => ':merman-medium-light-skin-tone:',
+ '🧜🏽♂️' => ':merman-medium-skin-tone:',
'🧑🤝🧑' => ':people-holding-hands:',
+ '🧎🏿➡️' => ':person-kneeling-facing-right-dark-skin-tone:',
+ '🧎🏻➡️' => ':person-kneeling-facing-right-light-skin-tone:',
+ '🧎🏾➡️' => ':person-kneeling-facing-right-medium-dark-skin-tone:',
+ '🧎🏼➡️' => ':person-kneeling-facing-right-medium-light-skin-tone:',
+ '🧎🏽➡️' => ':person-kneeling-facing-right-medium-skin-tone:',
+ '🏃🏿➡️' => ':person-running-facing-right-dark-skin-tone:',
+ '🏃🏻➡️' => ':person-running-facing-right-light-skin-tone:',
+ '🏃🏾➡️' => ':person-running-facing-right-medium-dark-skin-tone:',
+ '🏃🏼➡️' => ':person-running-facing-right-medium-light-skin-tone:',
+ '🏃🏽➡️' => ':person-running-facing-right-medium-skin-tone:',
+ '🚶🏿➡️' => ':person-walking-facing-right-dark-skin-tone:',
+ '🚶🏻➡️' => ':person-walking-facing-right-light-skin-tone:',
+ '🚶🏾➡️' => ':person-walking-facing-right-medium-dark-skin-tone:',
+ '🚶🏼➡️' => ':person-walking-facing-right-medium-light-skin-tone:',
+ '🚶🏽➡️' => ':person-walking-facing-right-medium-skin-tone:',
+ '🧑🏿✈️' => ':pilot-dark-skin-tone:',
+ '🧑🏻✈️' => ':pilot-light-skin-tone:',
+ '🧑🏾✈️' => ':pilot-medium-dark-skin-tone:',
+ '🧑🏼✈️' => ':pilot-medium-light-skin-tone:',
+ '🧑🏽✈️' => ':pilot-medium-skin-tone:',
'🏳️⚧️' => ':transgender-flag:',
+ '🚴🏿♀️' => ':woman-biking-dark-skin-tone:',
+ '🚴🏻♀️' => ':woman-biking-light-skin-tone:',
+ '🚴🏾♀️' => ':woman-biking-medium-dark-skin-tone:',
+ '🚴🏼♀️' => ':woman-biking-medium-light-skin-tone:',
+ '🚴🏽♀️' => ':woman-biking-medium-skin-tone:',
'⛹️♀️' => ':woman-bouncing-ball:',
+ '⛹🏿♀️' => ':woman-bouncing-ball-dark-skin-tone:',
+ '⛹🏻♀️' => ':woman-bouncing-ball-light-skin-tone:',
+ '⛹🏾♀️' => ':woman-bouncing-ball-medium-dark-skin-tone:',
+ '⛹🏼♀️' => ':woman-bouncing-ball-medium-light-skin-tone:',
+ '⛹🏽♀️' => ':woman-bouncing-ball-medium-skin-tone:',
+ '🙇🏿♀️' => ':woman-bowing-dark-skin-tone:',
+ '🙇🏻♀️' => ':woman-bowing-light-skin-tone:',
+ '🙇🏾♀️' => ':woman-bowing-medium-dark-skin-tone:',
+ '🙇🏼♀️' => ':woman-bowing-medium-light-skin-tone:',
+ '🙇🏽♀️' => ':woman-bowing-medium-skin-tone:',
+ '🤸🏿♀️' => ':woman-cartwheeling-dark-skin-tone:',
+ '🤸🏻♀️' => ':woman-cartwheeling-light-skin-tone:',
+ '🤸🏾♀️' => ':woman-cartwheeling-medium-dark-skin-tone:',
+ '🤸🏼♀️' => ':woman-cartwheeling-medium-light-skin-tone:',
+ '🤸🏽♀️' => ':woman-cartwheeling-medium-skin-tone:',
+ '🧗🏿♀️' => ':woman-climbing-dark-skin-tone:',
+ '🧗🏻♀️' => ':woman-climbing-light-skin-tone:',
+ '🧗🏾♀️' => ':woman-climbing-medium-dark-skin-tone:',
+ '🧗🏼♀️' => ':woman-climbing-medium-light-skin-tone:',
+ '🧗🏽♀️' => ':woman-climbing-medium-skin-tone:',
+ '👷🏿♀️' => ':woman-construction-worker-dark-skin-tone:',
+ '👷🏻♀️' => ':woman-construction-worker-light-skin-tone:',
+ '👷🏾♀️' => ':woman-construction-worker-medium-dark-skin-tone:',
+ '👷🏼♀️' => ':woman-construction-worker-medium-light-skin-tone:',
+ '👷🏽♀️' => ':woman-construction-worker-medium-skin-tone:',
+ '🧔🏿♀️' => ':woman-dark-skin-tone-beard:',
+ '👱🏿♀️' => ':woman-dark-skin-tone-blond-hair:',
+ '🕵🏿♀️' => ':woman-detective-dark-skin-tone:',
+ '🕵🏻♀️' => ':woman-detective-light-skin-tone:',
+ '🕵🏾♀️' => ':woman-detective-medium-dark-skin-tone:',
+ '🕵🏼♀️' => ':woman-detective-medium-light-skin-tone:',
+ '🕵🏽♀️' => ':woman-detective-medium-skin-tone:',
+ '🧝🏿♀️' => ':woman-elf-dark-skin-tone:',
+ '🧝🏻♀️' => ':woman-elf-light-skin-tone:',
+ '🧝🏾♀️' => ':woman-elf-medium-dark-skin-tone:',
+ '🧝🏼♀️' => ':woman-elf-medium-light-skin-tone:',
+ '🧝🏽♀️' => ':woman-elf-medium-skin-tone:',
+ '🤦🏿♀️' => ':woman-facepalming-dark-skin-tone:',
+ '🤦🏻♀️' => ':woman-facepalming-light-skin-tone:',
+ '🤦🏾♀️' => ':woman-facepalming-medium-dark-skin-tone:',
+ '🤦🏼♀️' => ':woman-facepalming-medium-light-skin-tone:',
+ '🤦🏽♀️' => ':woman-facepalming-medium-skin-tone:',
+ '🧚🏿♀️' => ':woman-fairy-dark-skin-tone:',
+ '🧚🏻♀️' => ':woman-fairy-light-skin-tone:',
+ '🧚🏾♀️' => ':woman-fairy-medium-dark-skin-tone:',
+ '🧚🏼♀️' => ':woman-fairy-medium-light-skin-tone:',
+ '🧚🏽♀️' => ':woman-fairy-medium-skin-tone:',
+ '🙍🏿♀️' => ':woman-frowning-dark-skin-tone:',
+ '🙍🏻♀️' => ':woman-frowning-light-skin-tone:',
+ '🙍🏾♀️' => ':woman-frowning-medium-dark-skin-tone:',
+ '🙍🏼♀️' => ':woman-frowning-medium-light-skin-tone:',
+ '🙍🏽♀️' => ':woman-frowning-medium-skin-tone:',
+ '🙅🏿♀️' => ':woman-gesturing-no-dark-skin-tone:',
+ '🙅🏻♀️' => ':woman-gesturing-no-light-skin-tone:',
+ '🙅🏾♀️' => ':woman-gesturing-no-medium-dark-skin-tone:',
+ '🙅🏼♀️' => ':woman-gesturing-no-medium-light-skin-tone:',
+ '🙅🏽♀️' => ':woman-gesturing-no-medium-skin-tone:',
+ '🙆🏿♀️' => ':woman-gesturing-ok-dark-skin-tone:',
+ '🙆🏻♀️' => ':woman-gesturing-ok-light-skin-tone:',
+ '🙆🏾♀️' => ':woman-gesturing-ok-medium-dark-skin-tone:',
+ '🙆🏼♀️' => ':woman-gesturing-ok-medium-light-skin-tone:',
+ '🙆🏽♀️' => ':woman-gesturing-ok-medium-skin-tone:',
+ '💇🏿♀️' => ':woman-getting-haircut-dark-skin-tone:',
+ '💇🏻♀️' => ':woman-getting-haircut-light-skin-tone:',
+ '💇🏾♀️' => ':woman-getting-haircut-medium-dark-skin-tone:',
+ '💇🏼♀️' => ':woman-getting-haircut-medium-light-skin-tone:',
+ '💇🏽♀️' => ':woman-getting-haircut-medium-skin-tone:',
+ '💆🏿♀️' => ':woman-getting-massage-dark-skin-tone:',
+ '💆🏻♀️' => ':woman-getting-massage-light-skin-tone:',
+ '💆🏾♀️' => ':woman-getting-massage-medium-dark-skin-tone:',
+ '💆🏼♀️' => ':woman-getting-massage-medium-light-skin-tone:',
+ '💆🏽♀️' => ':woman-getting-massage-medium-skin-tone:',
'🏌️♀️' => ':woman-golfing:',
+ '🏌🏿♀️' => ':woman-golfing-dark-skin-tone:',
+ '🏌🏻♀️' => ':woman-golfing-light-skin-tone:',
+ '🏌🏾♀️' => ':woman-golfing-medium-dark-skin-tone:',
+ '🏌🏼♀️' => ':woman-golfing-medium-light-skin-tone:',
+ '🏌🏽♀️' => ':woman-golfing-medium-skin-tone:',
+ '💂🏿♀️' => ':woman-guard-dark-skin-tone:',
+ '💂🏻♀️' => ':woman-guard-light-skin-tone:',
+ '💂🏾♀️' => ':woman-guard-medium-dark-skin-tone:',
+ '💂🏼♀️' => ':woman-guard-medium-light-skin-tone:',
+ '💂🏽♀️' => ':woman-guard-medium-skin-tone:',
+ '👩🏿⚕️' => ':woman-health-worker-dark-skin-tone:',
+ '👩🏻⚕️' => ':woman-health-worker-light-skin-tone:',
+ '👩🏾⚕️' => ':woman-health-worker-medium-dark-skin-tone:',
+ '👩🏼⚕️' => ':woman-health-worker-medium-light-skin-tone:',
+ '👩🏽⚕️' => ':woman-health-worker-medium-skin-tone:',
+ '🧘🏿♀️' => ':woman-in-lotus-position-dark-skin-tone:',
+ '🧘🏻♀️' => ':woman-in-lotus-position-light-skin-tone:',
+ '🧘🏾♀️' => ':woman-in-lotus-position-medium-dark-skin-tone:',
+ '🧘🏼♀️' => ':woman-in-lotus-position-medium-light-skin-tone:',
+ '🧘🏽♀️' => ':woman-in-lotus-position-medium-skin-tone:',
+ '🧖🏿♀️' => ':woman-in-steamy-room-dark-skin-tone:',
+ '🧖🏻♀️' => ':woman-in-steamy-room-light-skin-tone:',
+ '🧖🏾♀️' => ':woman-in-steamy-room-medium-dark-skin-tone:',
+ '🧖🏼♀️' => ':woman-in-steamy-room-medium-light-skin-tone:',
+ '🧖🏽♀️' => ':woman-in-steamy-room-medium-skin-tone:',
+ '🤵🏿♀️' => ':woman-in-tuxedo-dark-skin-tone:',
+ '🤵🏻♀️' => ':woman-in-tuxedo-light-skin-tone:',
+ '🤵🏾♀️' => ':woman-in-tuxedo-medium-dark-skin-tone:',
+ '🤵🏼♀️' => ':woman-in-tuxedo-medium-light-skin-tone:',
+ '🤵🏽♀️' => ':woman-in-tuxedo-medium-skin-tone:',
+ '👩🏿⚖️' => ':woman-judge-dark-skin-tone:',
+ '👩🏻⚖️' => ':woman-judge-light-skin-tone:',
+ '👩🏾⚖️' => ':woman-judge-medium-dark-skin-tone:',
+ '👩🏼⚖️' => ':woman-judge-medium-light-skin-tone:',
+ '👩🏽⚖️' => ':woman-judge-medium-skin-tone:',
+ '🤹🏿♀️' => ':woman-juggling-dark-skin-tone:',
+ '🤹🏻♀️' => ':woman-juggling-light-skin-tone:',
+ '🤹🏾♀️' => ':woman-juggling-medium-dark-skin-tone:',
+ '🤹🏼♀️' => ':woman-juggling-medium-light-skin-tone:',
+ '🤹🏽♀️' => ':woman-juggling-medium-skin-tone:',
+ '🧎🏿♀️' => ':woman-kneeling-dark-skin-tone:',
+ '🧎🏻♀️' => ':woman-kneeling-light-skin-tone:',
+ '🧎🏾♀️' => ':woman-kneeling-medium-dark-skin-tone:',
+ '🧎🏼♀️' => ':woman-kneeling-medium-light-skin-tone:',
+ '🧎🏽♀️' => ':woman-kneeling-medium-skin-tone:',
'🏋️♀️' => ':woman-lifting-weights:',
- '👱♂️' => ':blond-haired-man:',
- '👱♀️' => ':blond-haired-woman:',
+ '🏋🏿♀️' => ':woman-lifting-weights-dark-skin-tone:',
+ '🏋🏻♀️' => ':woman-lifting-weights-light-skin-tone:',
+ '🏋🏾♀️' => ':woman-lifting-weights-medium-dark-skin-tone:',
+ '🏋🏼♀️' => ':woman-lifting-weights-medium-light-skin-tone:',
+ '🏋🏽♀️' => ':woman-lifting-weights-medium-skin-tone:',
+ '🧔🏻♀️' => ':woman-light-skin-tone-beard:',
+ '👱🏻♀️' => ':woman-light-skin-tone-blond-hair:',
+ '🧙🏿♀️' => ':woman-mage-dark-skin-tone:',
+ '🧙🏻♀️' => ':woman-mage-light-skin-tone:',
+ '🧙🏾♀️' => ':woman-mage-medium-dark-skin-tone:',
+ '🧙🏼♀️' => ':woman-mage-medium-light-skin-tone:',
+ '🧙🏽♀️' => ':woman-mage-medium-skin-tone:',
+ '🧔🏾♀️' => ':woman-medium-dark-skin-tone-beard:',
+ '👱🏾♀️' => ':woman-medium-dark-skin-tone-blond-hair:',
+ '🧔🏼♀️' => ':woman-medium-light-skin-tone-beard:',
+ '👱🏼♀️' => ':woman-medium-light-skin-tone-blond-hair:',
+ '🧔🏽♀️' => ':woman-medium-skin-tone-beard:',
+ '👱🏽♀️' => ':woman-medium-skin-tone-blond-hair:',
+ '🚵🏿♀️' => ':woman-mountain-biking-dark-skin-tone:',
+ '🚵🏻♀️' => ':woman-mountain-biking-light-skin-tone:',
+ '🚵🏾♀️' => ':woman-mountain-biking-medium-dark-skin-tone:',
+ '🚵🏼♀️' => ':woman-mountain-biking-medium-light-skin-tone:',
+ '🚵🏽♀️' => ':woman-mountain-biking-medium-skin-tone:',
+ '👩🏿✈️' => ':woman-pilot-dark-skin-tone:',
+ '👩🏻✈️' => ':woman-pilot-light-skin-tone:',
+ '👩🏾✈️' => ':woman-pilot-medium-dark-skin-tone:',
+ '👩🏼✈️' => ':woman-pilot-medium-light-skin-tone:',
+ '👩🏽✈️' => ':woman-pilot-medium-skin-tone:',
+ '🤾🏿♀️' => ':woman-playing-handball-dark-skin-tone:',
+ '🤾🏻♀️' => ':woman-playing-handball-light-skin-tone:',
+ '🤾🏾♀️' => ':woman-playing-handball-medium-dark-skin-tone:',
+ '🤾🏼♀️' => ':woman-playing-handball-medium-light-skin-tone:',
+ '🤾🏽♀️' => ':woman-playing-handball-medium-skin-tone:',
+ '🤽🏿♀️' => ':woman-playing-water-polo-dark-skin-tone:',
+ '🤽🏻♀️' => ':woman-playing-water-polo-light-skin-tone:',
+ '🤽🏾♀️' => ':woman-playing-water-polo-medium-dark-skin-tone:',
+ '🤽🏼♀️' => ':woman-playing-water-polo-medium-light-skin-tone:',
+ '🤽🏽♀️' => ':woman-playing-water-polo-medium-skin-tone:',
+ '👮🏿♀️' => ':woman-police-officer-dark-skin-tone:',
+ '👮🏻♀️' => ':woman-police-officer-light-skin-tone:',
+ '👮🏾♀️' => ':woman-police-officer-medium-dark-skin-tone:',
+ '👮🏼♀️' => ':woman-police-officer-medium-light-skin-tone:',
+ '👮🏽♀️' => ':woman-police-officer-medium-skin-tone:',
+ '🙎🏿♀️' => ':woman-pouting-dark-skin-tone:',
+ '🙎🏻♀️' => ':woman-pouting-light-skin-tone:',
+ '🙎🏾♀️' => ':woman-pouting-medium-dark-skin-tone:',
+ '🙎🏼♀️' => ':woman-pouting-medium-light-skin-tone:',
+ '🙎🏽♀️' => ':woman-pouting-medium-skin-tone:',
+ '🙋🏿♀️' => ':woman-raising-hand-dark-skin-tone:',
+ '🙋🏻♀️' => ':woman-raising-hand-light-skin-tone:',
+ '🙋🏾♀️' => ':woman-raising-hand-medium-dark-skin-tone:',
+ '🙋🏼♀️' => ':woman-raising-hand-medium-light-skin-tone:',
+ '🙋🏽♀️' => ':woman-raising-hand-medium-skin-tone:',
+ '🚣🏿♀️' => ':woman-rowing-boat-dark-skin-tone:',
+ '🚣🏻♀️' => ':woman-rowing-boat-light-skin-tone:',
+ '🚣🏾♀️' => ':woman-rowing-boat-medium-dark-skin-tone:',
+ '🚣🏼♀️' => ':woman-rowing-boat-medium-light-skin-tone:',
+ '🚣🏽♀️' => ':woman-rowing-boat-medium-skin-tone:',
+ '🏃🏿♀️' => ':woman-running-dark-skin-tone:',
+ '🏃🏻♀️' => ':woman-running-light-skin-tone:',
+ '🏃🏾♀️' => ':woman-running-medium-dark-skin-tone:',
+ '🏃🏼♀️' => ':woman-running-medium-light-skin-tone:',
+ '🏃🏽♀️' => ':woman-running-medium-skin-tone:',
+ '🤷🏿♀️' => ':woman-shrugging-dark-skin-tone:',
+ '🤷🏻♀️' => ':woman-shrugging-light-skin-tone:',
+ '🤷🏾♀️' => ':woman-shrugging-medium-dark-skin-tone:',
+ '🤷🏼♀️' => ':woman-shrugging-medium-light-skin-tone:',
+ '🤷🏽♀️' => ':woman-shrugging-medium-skin-tone:',
+ '🧍🏿♀️' => ':woman-standing-dark-skin-tone:',
+ '🧍🏻♀️' => ':woman-standing-light-skin-tone:',
+ '🧍🏾♀️' => ':woman-standing-medium-dark-skin-tone:',
+ '🧍🏼♀️' => ':woman-standing-medium-light-skin-tone:',
+ '🧍🏽♀️' => ':woman-standing-medium-skin-tone:',
+ '🦸🏿♀️' => ':woman-superhero-dark-skin-tone:',
+ '🦸🏻♀️' => ':woman-superhero-light-skin-tone:',
+ '🦸🏾♀️' => ':woman-superhero-medium-dark-skin-tone:',
+ '🦸🏼♀️' => ':woman-superhero-medium-light-skin-tone:',
+ '🦸🏽♀️' => ':woman-superhero-medium-skin-tone:',
+ '🦹🏿♀️' => ':woman-supervillain-dark-skin-tone:',
+ '🦹🏻♀️' => ':woman-supervillain-light-skin-tone:',
+ '🦹🏾♀️' => ':woman-supervillain-medium-dark-skin-tone:',
+ '🦹🏼♀️' => ':woman-supervillain-medium-light-skin-tone:',
+ '🦹🏽♀️' => ':woman-supervillain-medium-skin-tone:',
+ '🏄🏿♀️' => ':woman-surfing-dark-skin-tone:',
+ '🏄🏻♀️' => ':woman-surfing-light-skin-tone:',
+ '🏄🏾♀️' => ':woman-surfing-medium-dark-skin-tone:',
+ '🏄🏼♀️' => ':woman-surfing-medium-light-skin-tone:',
+ '🏄🏽♀️' => ':woman-surfing-medium-skin-tone:',
+ '🏊🏿♀️' => ':woman-swimming-dark-skin-tone:',
+ '🏊🏻♀️' => ':woman-swimming-light-skin-tone:',
+ '🏊🏾♀️' => ':woman-swimming-medium-dark-skin-tone:',
+ '🏊🏼♀️' => ':woman-swimming-medium-light-skin-tone:',
+ '🏊🏽♀️' => ':woman-swimming-medium-skin-tone:',
+ '💁🏿♀️' => ':woman-tipping-hand-dark-skin-tone:',
+ '💁🏻♀️' => ':woman-tipping-hand-light-skin-tone:',
+ '💁🏾♀️' => ':woman-tipping-hand-medium-dark-skin-tone:',
+ '💁🏼♀️' => ':woman-tipping-hand-medium-light-skin-tone:',
+ '💁🏽♀️' => ':woman-tipping-hand-medium-skin-tone:',
+ '🧛🏿♀️' => ':woman-vampire-dark-skin-tone:',
+ '🧛🏻♀️' => ':woman-vampire-light-skin-tone:',
+ '🧛🏾♀️' => ':woman-vampire-medium-dark-skin-tone:',
+ '🧛🏼♀️' => ':woman-vampire-medium-light-skin-tone:',
+ '🧛🏽♀️' => ':woman-vampire-medium-skin-tone:',
+ '🚶🏿♀️' => ':woman-walking-dark-skin-tone:',
+ '🚶🏻♀️' => ':woman-walking-light-skin-tone:',
+ '🚶🏾♀️' => ':woman-walking-medium-dark-skin-tone:',
+ '🚶🏼♀️' => ':woman-walking-medium-light-skin-tone:',
+ '🚶🏽♀️' => ':woman-walking-medium-skin-tone:',
+ '👳🏿♀️' => ':woman-wearing-turban-dark-skin-tone:',
+ '👳🏻♀️' => ':woman-wearing-turban-light-skin-tone:',
+ '👳🏾♀️' => ':woman-wearing-turban-medium-dark-skin-tone:',
+ '👳🏼♀️' => ':woman-wearing-turban-medium-light-skin-tone:',
+ '👳🏽♀️' => ':woman-wearing-turban-medium-skin-tone:',
+ '👰🏿♀️' => ':woman-with-veil-dark-skin-tone:',
+ '👰🏻♀️' => ':woman-with-veil-light-skin-tone:',
+ '👰🏾♀️' => ':woman-with-veil-medium-dark-skin-tone:',
+ '👰🏼♀️' => ':woman-with-veil-medium-light-skin-tone:',
+ '👰🏽♀️' => ':woman-with-veil-medium-skin-tone:',
+ '🧑🏿🎨' => ':artist-dark-skin-tone:',
+ '🧑🏻🎨' => ':artist-light-skin-tone:',
+ '🧑🏾🎨' => ':artist-medium-dark-skin-tone:',
+ '🧑🏼🎨' => ':artist-medium-light-skin-tone:',
+ '🧑🏽🎨' => ':artist-medium-skin-tone:',
+ '🧑🏿🚀' => ':astronaut-dark-skin-tone:',
+ '🧑🏻🚀' => ':astronaut-light-skin-tone:',
+ '🧑🏾🚀' => ':astronaut-medium-dark-skin-tone:',
+ '🧑🏼🚀' => ':astronaut-medium-light-skin-tone:',
+ '🧑🏽🚀' => ':astronaut-medium-skin-tone:',
+ '👱♂️' => ':man-blond-hair:',
+ '👱♀️' => ':woman-blond-hair:',
'⛓️💥' => ':broken-chain:',
+ '🧑🏿🍳' => ':cook-dark-skin-tone:',
+ '🧑🏻🍳' => ':cook-light-skin-tone:',
+ '🧑🏾🍳' => ':cook-medium-dark-skin-tone:',
+ '🧑🏼🍳' => ':cook-medium-light-skin-tone:',
+ '🧑🏽🍳' => ':cook-medium-skin-tone:',
'🧏♂️' => ':deaf-man:',
'🧏♀️' => ':deaf-woman:',
'😶🌫️' => ':face-in-clouds:',
- '👷♀️' => ':female-construction-worker:',
- '👩⚕️' => ':female-doctor:',
- '🧝♀️' => ':female-elf:',
- '🧚♀️' => ':female-fairy:',
- '🧞♀️' => ':female-genie:',
- '💂♀️' => ':female-guard:',
- '👩⚖️' => ':female-judge:',
- '🧙♀️' => ':female-mage:',
- '👩✈️' => ':female-pilot:',
- '👮♀️' => ':female-police-officer:',
- '🦸♀️' => ':female-superhero:',
- '🦹♀️' => ':female-supervillain:',
- '🧛♀️' => ':female-vampire:',
- '🧟♀️' => ':female-zombie:',
+ '🧑🏿🏭' => ':factory-worker-dark-skin-tone:',
+ '🧑🏻🏭' => ':factory-worker-light-skin-tone:',
+ '🧑🏾🏭' => ':factory-worker-medium-dark-skin-tone:',
+ '🧑🏼🏭' => ':factory-worker-medium-light-skin-tone:',
+ '🧑🏽🏭' => ':factory-worker-medium-skin-tone:',
+ '🧑🏿🌾' => ':farmer-dark-skin-tone:',
+ '🧑🏻🌾' => ':farmer-light-skin-tone:',
+ '🧑🏾🌾' => ':farmer-medium-dark-skin-tone:',
+ '🧑🏼🌾' => ':farmer-medium-light-skin-tone:',
+ '🧑🏽🌾' => ':farmer-medium-skin-tone:',
+ '👷♀️' => ':woman-construction-worker:',
+ '👩⚕️' => ':woman-health-worker:',
+ '🧝♀️' => ':woman-elf:',
+ '🧚♀️' => ':woman-fairy:',
+ '🧞♀️' => ':woman-genie:',
+ '💂♀️' => ':woman-guard:',
+ '👩⚖️' => ':woman-judge:',
+ '🧙♀️' => ':woman-mage:',
+ '👩✈️' => ':woman-pilot:',
+ '👮♀️' => ':woman-police-officer:',
+ '🦸♀️' => ':woman-superhero:',
+ '🦹♀️' => ':woman-supervillain:',
+ '🧛♀️' => ':woman-vampire:',
+ '🧟♀️' => ':woman-zombie:',
+ '🧑🏿🚒' => ':firefighter-dark-skin-tone:',
+ '🧑🏻🚒' => ':firefighter-light-skin-tone:',
+ '🧑🏾🚒' => ':firefighter-medium-dark-skin-tone:',
+ '🧑🏼🚒' => ':firefighter-medium-light-skin-tone:',
+ '🧑🏽🚒' => ':firefighter-medium-skin-tone:',
+ '🏳️🌈' => ':rainbow-flag:',
'🙂↔️' => ':head-shaking-horizontally:',
'🙂↕️' => ':head-shaking-vertically:',
'🧑⚕️' => ':health-worker:',
'❤️🔥' => ':heart-on-fire:',
'🧑⚖️' => ':judge:',
- '👷♂️' => ':male-construction-worker:',
- '👨⚕️' => ':male-doctor:',
- '🧝♂️' => ':male-elf:',
- '🧚♂️' => ':male-fairy:',
- '🧞♂️' => ':male-genie:',
- '💂♂️' => ':male-guard:',
- '👨⚖️' => ':male-judge:',
- '🧙♂️' => ':male-mage:',
- '👨✈️' => ':male-pilot:',
- '👮♂️' => ':male-police-officer:',
- '🦸♂️' => ':male-superhero:',
- '🦹♂️' => ':male-supervillain:',
- '🧛♂️' => ':male-vampire:',
- '🧟♂️' => ':male-zombie:',
+ '👷♂️' => ':man-construction-worker:',
+ '👨⚕️' => ':man-health-worker:',
+ '🧝♂️' => ':man-elf:',
+ '🧚♂️' => ':man-fairy:',
+ '🧞♂️' => ':man-genie:',
+ '💂♂️' => ':man-guard:',
+ '👨⚖️' => ':man-judge:',
+ '🧙♂️' => ':man-mage:',
+ '👨✈️' => ':man-pilot:',
+ '👮♂️' => ':man-police-officer:',
+ '🦸♂️' => ':man-superhero:',
+ '🦹♂️' => ':man-supervillain:',
+ '🧛♂️' => ':man-vampire:',
+ '🧟♂️' => ':man-zombie:',
+ '👨🏿🎨' => ':man-artist-dark-skin-tone:',
+ '👨🏻🎨' => ':man-artist-light-skin-tone:',
+ '👨🏾🎨' => ':man-artist-medium-dark-skin-tone:',
+ '👨🏼🎨' => ':man-artist-medium-light-skin-tone:',
+ '👨🏽🎨' => ':man-artist-medium-skin-tone:',
+ '👨🏿🚀' => ':man-astronaut-dark-skin-tone:',
+ '👨🏻🚀' => ':man-astronaut-light-skin-tone:',
+ '👨🏾🚀' => ':man-astronaut-medium-dark-skin-tone:',
+ '👨🏼🚀' => ':man-astronaut-medium-light-skin-tone:',
+ '👨🏽🚀' => ':man-astronaut-medium-skin-tone:',
+ '🧔♂️' => ':man-with-beard:',
'🚴♂️' => ':man-biking:',
'🙇♂️' => ':man-bowing:',
'🤸♂️' => ':man-cartwheeling:',
'🧗♂️' => ':man-climbing:',
+ '👨🏿🍳' => ':man-cook-dark-skin-tone:',
+ '👨🏻🍳' => ':man-cook-light-skin-tone:',
+ '👨🏾🍳' => ':man-cook-medium-dark-skin-tone:',
+ '👨🏼🍳' => ':man-cook-medium-light-skin-tone:',
+ '👨🏽🍳' => ':man-cook-medium-skin-tone:',
+ '👨🏿🦲' => ':man-dark-skin-tone-bald:',
+ '👨🏿🦱' => ':man-dark-skin-tone-curly-hair:',
+ '👨🏿🦰' => ':man-dark-skin-tone-red-hair:',
+ '👨🏿🦳' => ':man-dark-skin-tone-white-hair:',
'🤦♂️' => ':man-facepalming:',
+ '👨🏿🏭' => ':man-factory-worker-dark-skin-tone:',
+ '👨🏻🏭' => ':man-factory-worker-light-skin-tone:',
+ '👨🏾🏭' => ':man-factory-worker-medium-dark-skin-tone:',
+ '👨🏼🏭' => ':man-factory-worker-medium-light-skin-tone:',
+ '👨🏽🏭' => ':man-factory-worker-medium-skin-tone:',
+ '👨🏿🌾' => ':man-farmer-dark-skin-tone:',
+ '👨🏻🌾' => ':man-farmer-light-skin-tone:',
+ '👨🏾🌾' => ':man-farmer-medium-dark-skin-tone:',
+ '👨🏼🌾' => ':man-farmer-medium-light-skin-tone:',
+ '👨🏽🌾' => ':man-farmer-medium-skin-tone:',
+ '👨🏿🍼' => ':man-feeding-baby-dark-skin-tone:',
+ '👨🏻🍼' => ':man-feeding-baby-light-skin-tone:',
+ '👨🏾🍼' => ':man-feeding-baby-medium-dark-skin-tone:',
+ '👨🏼🍼' => ':man-feeding-baby-medium-light-skin-tone:',
+ '👨🏽🍼' => ':man-feeding-baby-medium-skin-tone:',
+ '👨🏿🚒' => ':man-firefighter-dark-skin-tone:',
+ '👨🏻🚒' => ':man-firefighter-light-skin-tone:',
+ '👨🏾🚒' => ':man-firefighter-medium-dark-skin-tone:',
+ '👨🏼🚒' => ':man-firefighter-medium-light-skin-tone:',
+ '👨🏽🚒' => ':man-firefighter-medium-skin-tone:',
'🙍♂️' => ':man-frowning:',
'🙅♂️' => ':man-gesturing-no:',
'🙆♂️' => ':man-gesturing-ok:',
'💇♂️' => ':man-getting-haircut:',
'💆♂️' => ':man-getting-massage:',
'🧘♂️' => ':man-in-lotus-position:',
+ '👨🏿🦽' => ':man-in-manual-wheelchair-dark-skin-tone:',
+ '👨🏻🦽' => ':man-in-manual-wheelchair-light-skin-tone:',
+ '👨🏾🦽' => ':man-in-manual-wheelchair-medium-dark-skin-tone:',
+ '👨🏼🦽' => ':man-in-manual-wheelchair-medium-light-skin-tone:',
+ '👨🏽🦽' => ':man-in-manual-wheelchair-medium-skin-tone:',
+ '👨🏿🦼' => ':man-in-motorized-wheelchair-dark-skin-tone:',
+ '👨🏻🦼' => ':man-in-motorized-wheelchair-light-skin-tone:',
+ '👨🏾🦼' => ':man-in-motorized-wheelchair-medium-dark-skin-tone:',
+ '👨🏼🦼' => ':man-in-motorized-wheelchair-medium-light-skin-tone:',
+ '👨🏽🦼' => ':man-in-motorized-wheelchair-medium-skin-tone:',
'🧖♂️' => ':man-in-steamy-room:',
'🤵♂️' => ':man-in-tuxedo:',
'🤹♂️' => ':man-juggling:',
'🧎♂️' => ':man-kneeling:',
+ '👨🏻🦲' => ':man-light-skin-tone-bald:',
+ '👨🏻🦱' => ':man-light-skin-tone-curly-hair:',
+ '👨🏻🦰' => ':man-light-skin-tone-red-hair:',
+ '👨🏻🦳' => ':man-light-skin-tone-white-hair:',
+ '👨🏿🔧' => ':man-mechanic-dark-skin-tone:',
+ '👨🏻🔧' => ':man-mechanic-light-skin-tone:',
+ '👨🏾🔧' => ':man-mechanic-medium-dark-skin-tone:',
+ '👨🏼🔧' => ':man-mechanic-medium-light-skin-tone:',
+ '👨🏽🔧' => ':man-mechanic-medium-skin-tone:',
+ '👨🏾🦲' => ':man-medium-dark-skin-tone-bald:',
+ '👨🏾🦱' => ':man-medium-dark-skin-tone-curly-hair:',
+ '👨🏾🦰' => ':man-medium-dark-skin-tone-red-hair:',
+ '👨🏾🦳' => ':man-medium-dark-skin-tone-white-hair:',
+ '👨🏼🦲' => ':man-medium-light-skin-tone-bald:',
+ '👨🏼🦱' => ':man-medium-light-skin-tone-curly-hair:',
+ '👨🏼🦰' => ':man-medium-light-skin-tone-red-hair:',
+ '👨🏼🦳' => ':man-medium-light-skin-tone-white-hair:',
+ '👨🏽🦲' => ':man-medium-skin-tone-bald:',
+ '👨🏽🦱' => ':man-medium-skin-tone-curly-hair:',
+ '👨🏽🦰' => ':man-medium-skin-tone-red-hair:',
+ '👨🏽🦳' => ':man-medium-skin-tone-white-hair:',
'🚵♂️' => ':man-mountain-biking:',
+ '👨🏿💼' => ':man-office-worker-dark-skin-tone:',
+ '👨🏻💼' => ':man-office-worker-light-skin-tone:',
+ '👨🏾💼' => ':man-office-worker-medium-dark-skin-tone:',
+ '👨🏼💼' => ':man-office-worker-medium-light-skin-tone:',
+ '👨🏽💼' => ':man-office-worker-medium-skin-tone:',
'🤾♂️' => ':man-playing-handball:',
'🤽♂️' => ':man-playing-water-polo:',
'🙎♂️' => ':man-pouting:',
'🙋♂️' => ':man-raising-hand:',
'🚣♂️' => ':man-rowing-boat:',
'🏃♂️' => ':man-running:',
+ '👨🏿🔬' => ':man-scientist-dark-skin-tone:',
+ '👨🏻🔬' => ':man-scientist-light-skin-tone:',
+ '👨🏾🔬' => ':man-scientist-medium-dark-skin-tone:',
+ '👨🏼🔬' => ':man-scientist-medium-light-skin-tone:',
+ '👨🏽🔬' => ':man-scientist-medium-skin-tone:',
'🤷♂️' => ':man-shrugging:',
+ '👨🏿🎤' => ':man-singer-dark-skin-tone:',
+ '👨🏻🎤' => ':man-singer-light-skin-tone:',
+ '👨🏾🎤' => ':man-singer-medium-dark-skin-tone:',
+ '👨🏼🎤' => ':man-singer-medium-light-skin-tone:',
+ '👨🏽🎤' => ':man-singer-medium-skin-tone:',
'🧍♂️' => ':man-standing:',
+ '👨🏿🎓' => ':man-student-dark-skin-tone:',
+ '👨🏻🎓' => ':man-student-light-skin-tone:',
+ '👨🏾🎓' => ':man-student-medium-dark-skin-tone:',
+ '👨🏼🎓' => ':man-student-medium-light-skin-tone:',
+ '👨🏽🎓' => ':man-student-medium-skin-tone:',
'🏄♂️' => ':man-surfing:',
'🏊♂️' => ':man-swimming:',
+ '👨🏿🏫' => ':man-teacher-dark-skin-tone:',
+ '👨🏻🏫' => ':man-teacher-light-skin-tone:',
+ '👨🏾🏫' => ':man-teacher-medium-dark-skin-tone:',
+ '👨🏼🏫' => ':man-teacher-medium-light-skin-tone:',
+ '👨🏽🏫' => ':man-teacher-medium-skin-tone:',
+ '👨🏿💻' => ':man-technologist-dark-skin-tone:',
+ '👨🏻💻' => ':man-technologist-light-skin-tone:',
+ '👨🏾💻' => ':man-technologist-medium-dark-skin-tone:',
+ '👨🏼💻' => ':man-technologist-medium-light-skin-tone:',
+ '👨🏽💻' => ':man-technologist-medium-skin-tone:',
'💁♂️' => ':man-tipping-hand:',
'🚶♂️' => ':man-walking:',
'👳♂️' => ':man-wearing-turban:',
- '🧔♂️' => ':man-with-beard:',
'👰♂️' => ':man-with-veil:',
- '🤼♂️' => ':man-wrestling:',
+ '👨🏿🦯' => ':man-with-white-cane-dark-skin-tone:',
+ '👨🏻🦯' => ':man-with-white-cane-light-skin-tone:',
+ '👨🏾🦯' => ':man-with-white-cane-medium-dark-skin-tone:',
+ '👨🏼🦯' => ':man-with-white-cane-medium-light-skin-tone:',
+ '👨🏽🦯' => ':man-with-white-cane-medium-skin-tone:',
+ '🤼♂️' => ':men-wrestling:',
+ '🧑🏿🔧' => ':mechanic-dark-skin-tone:',
+ '🧑🏻🔧' => ':mechanic-light-skin-tone:',
+ '🧑🏾🔧' => ':mechanic-medium-dark-skin-tone:',
+ '🧑🏼🔧' => ':mechanic-medium-light-skin-tone:',
+ '🧑🏽🔧' => ':mechanic-medium-skin-tone:',
'👯♂️' => ':men-with-bunny-ears-partying:',
'❤️🩹' => ':mending-heart:',
'🧜♀️' => ':mermaid:',
'🧜♂️' => ':merman:',
+ '🧑🏿🎄' => ':mx-claus-dark-skin-tone:',
+ '🧑🏻🎄' => ':mx-claus-light-skin-tone:',
+ '🧑🏾🎄' => ':mx-claus-medium-dark-skin-tone:',
+ '🧑🏼🎄' => ':mx-claus-medium-light-skin-tone:',
+ '🧑🏽🎄' => ':mx-claus-medium-skin-tone:',
+ '🧑🏿💼' => ':office-worker-dark-skin-tone:',
+ '🧑🏻💼' => ':office-worker-light-skin-tone:',
+ '🧑🏾💼' => ':office-worker-medium-dark-skin-tone:',
+ '🧑🏼💼' => ':office-worker-medium-light-skin-tone:',
+ '🧑🏽💼' => ':office-worker-medium-skin-tone:',
+ '🧑🏿🦲' => ':person-dark-skin-tone-bald:',
+ '🧑🏿🦱' => ':person-dark-skin-tone-curly-hair:',
+ '🧑🏿🦰' => ':person-dark-skin-tone-red-hair:',
+ '🧑🏿🦳' => ':person-dark-skin-tone-white-hair:',
+ '🧑🏿🍼' => ':person-feeding-baby-dark-skin-tone:',
+ '🧑🏻🍼' => ':person-feeding-baby-light-skin-tone:',
+ '🧑🏾🍼' => ':person-feeding-baby-medium-dark-skin-tone:',
+ '🧑🏼🍼' => ':person-feeding-baby-medium-light-skin-tone:',
+ '🧑🏽🍼' => ':person-feeding-baby-medium-skin-tone:',
+ '🧑🏿🦽' => ':person-in-manual-wheelchair-dark-skin-tone:',
+ '🧑🏻🦽' => ':person-in-manual-wheelchair-light-skin-tone:',
+ '🧑🏾🦽' => ':person-in-manual-wheelchair-medium-dark-skin-tone:',
+ '🧑🏼🦽' => ':person-in-manual-wheelchair-medium-light-skin-tone:',
+ '🧑🏽🦽' => ':person-in-manual-wheelchair-medium-skin-tone:',
+ '🧑🏿🦼' => ':person-in-motorized-wheelchair-dark-skin-tone:',
+ '🧑🏻🦼' => ':person-in-motorized-wheelchair-light-skin-tone:',
+ '🧑🏾🦼' => ':person-in-motorized-wheelchair-medium-dark-skin-tone:',
+ '🧑🏼🦼' => ':person-in-motorized-wheelchair-medium-light-skin-tone:',
+ '🧑🏽🦼' => ':person-in-motorized-wheelchair-medium-skin-tone:',
'🧎➡️' => ':person-kneeling-facing-right:',
+ '🧑🏻🦲' => ':person-light-skin-tone-bald:',
+ '🧑🏻🦱' => ':person-light-skin-tone-curly-hair:',
+ '🧑🏻🦰' => ':person-light-skin-tone-red-hair:',
+ '🧑🏻🦳' => ':person-light-skin-tone-white-hair:',
+ '🧑🏾🦲' => ':person-medium-dark-skin-tone-bald:',
+ '🧑🏾🦱' => ':person-medium-dark-skin-tone-curly-hair:',
+ '🧑🏾🦰' => ':person-medium-dark-skin-tone-red-hair:',
+ '🧑🏾🦳' => ':person-medium-dark-skin-tone-white-hair:',
+ '🧑🏼🦲' => ':person-medium-light-skin-tone-bald:',
+ '🧑🏼🦱' => ':person-medium-light-skin-tone-curly-hair:',
+ '🧑🏼🦰' => ':person-medium-light-skin-tone-red-hair:',
+ '🧑🏼🦳' => ':person-medium-light-skin-tone-white-hair:',
+ '🧑🏽🦲' => ':person-medium-skin-tone-bald:',
+ '🧑🏽🦱' => ':person-medium-skin-tone-curly-hair:',
+ '🧑🏽🦰' => ':person-medium-skin-tone-red-hair:',
+ '🧑🏽🦳' => ':person-medium-skin-tone-white-hair:',
'🏃➡️' => ':person-running-facing-right:',
'🚶➡️' => ':person-walking-facing-right:',
+ '🧑🏿🦯' => ':person-with-white-cane-dark-skin-tone:',
+ '🧑🏻🦯' => ':person-with-white-cane-light-skin-tone:',
+ '🧑🏾🦯' => ':person-with-white-cane-medium-dark-skin-tone:',
+ '🧑🏼🦯' => ':person-with-white-cane-medium-light-skin-tone:',
+ '🧑🏽🦯' => ':person-with-white-cane-medium-skin-tone:',
'🧑✈️' => ':pilot:',
'🏴☠️' => ':pirate-flag:',
'🐻❄️' => ':polar-bear:',
- '🏳️🌈' => ':rainbow-flag:',
+ '🧑🏿🔬' => ':scientist-dark-skin-tone:',
+ '🧑🏻🔬' => ':scientist-light-skin-tone:',
+ '🧑🏾🔬' => ':scientist-medium-dark-skin-tone:',
+ '🧑🏼🔬' => ':scientist-medium-light-skin-tone:',
+ '🧑🏽🔬' => ':scientist-medium-skin-tone:',
+ '🧑🏿🎤' => ':singer-dark-skin-tone:',
+ '🧑🏻🎤' => ':singer-light-skin-tone:',
+ '🧑🏾🎤' => ':singer-medium-dark-skin-tone:',
+ '🧑🏼🎤' => ':singer-medium-light-skin-tone:',
+ '🧑🏽🎤' => ':singer-medium-skin-tone:',
+ '🧑🏿🎓' => ':student-dark-skin-tone:',
+ '🧑🏻🎓' => ':student-light-skin-tone:',
+ '🧑🏾🎓' => ':student-medium-dark-skin-tone:',
+ '🧑🏼🎓' => ':student-medium-light-skin-tone:',
+ '🧑🏽🎓' => ':student-medium-skin-tone:',
+ '🧑🏿🏫' => ':teacher-dark-skin-tone:',
+ '🧑🏻🏫' => ':teacher-light-skin-tone:',
+ '🧑🏾🏫' => ':teacher-medium-dark-skin-tone:',
+ '🧑🏼🏫' => ':teacher-medium-light-skin-tone:',
+ '🧑🏽🏫' => ':teacher-medium-skin-tone:',
+ '🧑🏿💻' => ':technologist-dark-skin-tone:',
+ '🧑🏻💻' => ':technologist-light-skin-tone:',
+ '🧑🏾💻' => ':technologist-medium-dark-skin-tone:',
+ '🧑🏼💻' => ':technologist-medium-light-skin-tone:',
+ '🧑🏽💻' => ':technologist-medium-skin-tone:',
+ '👩🏿🎨' => ':woman-artist-dark-skin-tone:',
+ '👩🏻🎨' => ':woman-artist-light-skin-tone:',
+ '👩🏾🎨' => ':woman-artist-medium-dark-skin-tone:',
+ '👩🏼🎨' => ':woman-artist-medium-light-skin-tone:',
+ '👩🏽🎨' => ':woman-artist-medium-skin-tone:',
+ '👩🏿🚀' => ':woman-astronaut-dark-skin-tone:',
+ '👩🏻🚀' => ':woman-astronaut-light-skin-tone:',
+ '👩🏾🚀' => ':woman-astronaut-medium-dark-skin-tone:',
+ '👩🏼🚀' => ':woman-astronaut-medium-light-skin-tone:',
+ '👩🏽🚀' => ':woman-astronaut-medium-skin-tone:',
+ '🧔♀️' => ':woman-with-beard:',
'🚴♀️' => ':woman-biking:',
'🙇♀️' => ':woman-bowing:',
'🤸♀️' => ':woman-cartwheeling:',
'🧗♀️' => ':woman-climbing:',
+ '👩🏿🍳' => ':woman-cook-dark-skin-tone:',
+ '👩🏻🍳' => ':woman-cook-light-skin-tone:',
+ '👩🏾🍳' => ':woman-cook-medium-dark-skin-tone:',
+ '👩🏼🍳' => ':woman-cook-medium-light-skin-tone:',
+ '👩🏽🍳' => ':woman-cook-medium-skin-tone:',
+ '👩🏿🦲' => ':woman-dark-skin-tone-bald:',
+ '👩🏿🦱' => ':woman-dark-skin-tone-curly-hair:',
+ '👩🏿🦰' => ':woman-dark-skin-tone-red-hair:',
+ '👩🏿🦳' => ':woman-dark-skin-tone-white-hair:',
'🤦♀️' => ':woman-facepalming:',
+ '👩🏿🏭' => ':woman-factory-worker-dark-skin-tone:',
+ '👩🏻🏭' => ':woman-factory-worker-light-skin-tone:',
+ '👩🏾🏭' => ':woman-factory-worker-medium-dark-skin-tone:',
+ '👩🏼🏭' => ':woman-factory-worker-medium-light-skin-tone:',
+ '👩🏽🏭' => ':woman-factory-worker-medium-skin-tone:',
+ '👩🏿🌾' => ':woman-farmer-dark-skin-tone:',
+ '👩🏻🌾' => ':woman-farmer-light-skin-tone:',
+ '👩🏾🌾' => ':woman-farmer-medium-dark-skin-tone:',
+ '👩🏼🌾' => ':woman-farmer-medium-light-skin-tone:',
+ '👩🏽🌾' => ':woman-farmer-medium-skin-tone:',
+ '👩🏿🍼' => ':woman-feeding-baby-dark-skin-tone:',
+ '👩🏻🍼' => ':woman-feeding-baby-light-skin-tone:',
+ '👩🏾🍼' => ':woman-feeding-baby-medium-dark-skin-tone:',
+ '👩🏼🍼' => ':woman-feeding-baby-medium-light-skin-tone:',
+ '👩🏽🍼' => ':woman-feeding-baby-medium-skin-tone:',
+ '👩🏿🚒' => ':woman-firefighter-dark-skin-tone:',
+ '👩🏻🚒' => ':woman-firefighter-light-skin-tone:',
+ '👩🏾🚒' => ':woman-firefighter-medium-dark-skin-tone:',
+ '👩🏼🚒' => ':woman-firefighter-medium-light-skin-tone:',
+ '👩🏽🚒' => ':woman-firefighter-medium-skin-tone:',
'🙍♀️' => ':woman-frowning:',
'🙅♀️' => ':woman-gesturing-no:',
'🙆♀️' => ':woman-gesturing-ok:',
'💇♀️' => ':woman-getting-haircut:',
'💆♀️' => ':woman-getting-massage:',
'🧘♀️' => ':woman-in-lotus-position:',
+ '👩🏿🦽' => ':woman-in-manual-wheelchair-dark-skin-tone:',
+ '👩🏻🦽' => ':woman-in-manual-wheelchair-light-skin-tone:',
+ '👩🏾🦽' => ':woman-in-manual-wheelchair-medium-dark-skin-tone:',
+ '👩🏼🦽' => ':woman-in-manual-wheelchair-medium-light-skin-tone:',
+ '👩🏽🦽' => ':woman-in-manual-wheelchair-medium-skin-tone:',
+ '👩🏿🦼' => ':woman-in-motorized-wheelchair-dark-skin-tone:',
+ '👩🏻🦼' => ':woman-in-motorized-wheelchair-light-skin-tone:',
+ '👩🏾🦼' => ':woman-in-motorized-wheelchair-medium-dark-skin-tone:',
+ '👩🏼🦼' => ':woman-in-motorized-wheelchair-medium-light-skin-tone:',
+ '👩🏽🦼' => ':woman-in-motorized-wheelchair-medium-skin-tone:',
'🧖♀️' => ':woman-in-steamy-room:',
'🤵♀️' => ':woman-in-tuxedo:',
'🤹♀️' => ':woman-juggling:',
'🧎♀️' => ':woman-kneeling:',
+ '👩🏻🦲' => ':woman-light-skin-tone-bald:',
+ '👩🏻🦱' => ':woman-light-skin-tone-curly-hair:',
+ '👩🏻🦰' => ':woman-light-skin-tone-red-hair:',
+ '👩🏻🦳' => ':woman-light-skin-tone-white-hair:',
+ '👩🏿🔧' => ':woman-mechanic-dark-skin-tone:',
+ '👩🏻🔧' => ':woman-mechanic-light-skin-tone:',
+ '👩🏾🔧' => ':woman-mechanic-medium-dark-skin-tone:',
+ '👩🏼🔧' => ':woman-mechanic-medium-light-skin-tone:',
+ '👩🏽🔧' => ':woman-mechanic-medium-skin-tone:',
+ '👩🏾🦲' => ':woman-medium-dark-skin-tone-bald:',
+ '👩🏾🦱' => ':woman-medium-dark-skin-tone-curly-hair:',
+ '👩🏾🦰' => ':woman-medium-dark-skin-tone-red-hair:',
+ '👩🏾🦳' => ':woman-medium-dark-skin-tone-white-hair:',
+ '👩🏼🦲' => ':woman-medium-light-skin-tone-bald:',
+ '👩🏼🦱' => ':woman-medium-light-skin-tone-curly-hair:',
+ '👩🏼🦰' => ':woman-medium-light-skin-tone-red-hair:',
+ '👩🏼🦳' => ':woman-medium-light-skin-tone-white-hair:',
+ '👩🏽🦲' => ':woman-medium-skin-tone-bald:',
+ '👩🏽🦱' => ':woman-medium-skin-tone-curly-hair:',
+ '👩🏽🦰' => ':woman-medium-skin-tone-red-hair:',
+ '👩🏽🦳' => ':woman-medium-skin-tone-white-hair:',
'🚵♀️' => ':woman-mountain-biking:',
+ '👩🏿💼' => ':woman-office-worker-dark-skin-tone:',
+ '👩🏻💼' => ':woman-office-worker-light-skin-tone:',
+ '👩🏾💼' => ':woman-office-worker-medium-dark-skin-tone:',
+ '👩🏼💼' => ':woman-office-worker-medium-light-skin-tone:',
+ '👩🏽💼' => ':woman-office-worker-medium-skin-tone:',
'🤾♀️' => ':woman-playing-handball:',
'🤽♀️' => ':woman-playing-water-polo:',
'🙎♀️' => ':woman-pouting:',
'🙋♀️' => ':woman-raising-hand:',
'🚣♀️' => ':woman-rowing-boat:',
'🏃♀️' => ':woman-running:',
+ '👩🏿🔬' => ':woman-scientist-dark-skin-tone:',
+ '👩🏻🔬' => ':woman-scientist-light-skin-tone:',
+ '👩🏾🔬' => ':woman-scientist-medium-dark-skin-tone:',
+ '👩🏼🔬' => ':woman-scientist-medium-light-skin-tone:',
+ '👩🏽🔬' => ':woman-scientist-medium-skin-tone:',
'🤷♀️' => ':woman-shrugging:',
+ '👩🏿🎤' => ':woman-singer-dark-skin-tone:',
+ '👩🏻🎤' => ':woman-singer-light-skin-tone:',
+ '👩🏾🎤' => ':woman-singer-medium-dark-skin-tone:',
+ '👩🏼🎤' => ':woman-singer-medium-light-skin-tone:',
+ '👩🏽🎤' => ':woman-singer-medium-skin-tone:',
'🧍♀️' => ':woman-standing:',
+ '👩🏿🎓' => ':woman-student-dark-skin-tone:',
+ '👩🏻🎓' => ':woman-student-light-skin-tone:',
+ '👩🏾🎓' => ':woman-student-medium-dark-skin-tone:',
+ '👩🏼🎓' => ':woman-student-medium-light-skin-tone:',
+ '👩🏽🎓' => ':woman-student-medium-skin-tone:',
'🏄♀️' => ':woman-surfing:',
'🏊♀️' => ':woman-swimming:',
+ '👩🏿🏫' => ':woman-teacher-dark-skin-tone:',
+ '👩🏻🏫' => ':woman-teacher-light-skin-tone:',
+ '👩🏾🏫' => ':woman-teacher-medium-dark-skin-tone:',
+ '👩🏼🏫' => ':woman-teacher-medium-light-skin-tone:',
+ '👩🏽🏫' => ':woman-teacher-medium-skin-tone:',
+ '👩🏿💻' => ':woman-technologist-dark-skin-tone:',
+ '👩🏻💻' => ':woman-technologist-light-skin-tone:',
+ '👩🏾💻' => ':woman-technologist-medium-dark-skin-tone:',
+ '👩🏼💻' => ':woman-technologist-medium-light-skin-tone:',
+ '👩🏽💻' => ':woman-technologist-medium-skin-tone:',
'💁♀️' => ':woman-tipping-hand:',
'🚶♀️' => ':woman-walking:',
'👳♀️' => ':woman-wearing-turban:',
- '🧔♀️' => ':woman-with-beard:',
'👰♀️' => ':woman-with-veil:',
- '🤼♀️' => ':woman-wrestling:',
+ '👩🏿🦯' => ':woman-with-white-cane-dark-skin-tone:',
+ '👩🏻🦯' => ':woman-with-white-cane-light-skin-tone:',
+ '👩🏾🦯' => ':woman-with-white-cane-medium-dark-skin-tone:',
+ '👩🏼🦯' => ':woman-with-white-cane-medium-light-skin-tone:',
+ '👩🏽🦯' => ':woman-with-white-cane-medium-skin-tone:',
+ '🤼♀️' => ':women-wrestling:',
'👯♀️' => ':women-with-bunny-ears-partying:',
'🧑🎨' => ':artist:',
+ '*️⃣' => ':keycap-star:',
'🧑🚀' => ':astronaut:',
- '👨🦲' => ':bald-man:',
+ '👨🦲' => ':man-bald:',
'🧑🦲' => ':person-bald:',
- '👩🦲' => ':bald-woman:',
+ '👩🦲' => ':woman-bald:',
'⛹♂' => ':bouncing-ball-man:',
'⛹♀' => ':bouncing-ball-woman:',
'🚴♂' => ':biking-man:',
@@ -203,9 +1424,9 @@
'👷♂' => ':construction-worker-man:',
'👷♀' => ':construction-worker-woman:',
'🧑🍳' => ':cook:',
- '👨🦱' => ':curly-haired-man:',
+ '👨🦱' => ':man-curly-hair:',
'🧑🦱' => ':person-curly-hair:',
- '👩🦱' => ':curly-haired-woman:',
+ '👩🦱' => ':woman-curly-hair:',
'👯♂' => ':dancing-men:',
'👯♀' => ':dancing-women:',
'🧏♂' => ':deaf-man:',
@@ -257,7 +1478,6 @@
'🧑⚕' => ':health-worker:',
'❤🔥' => ':heart-on-fire:',
'🧑⚖' => ':judge:',
- '*️⃣' => ':keycap-star:',
'🧎♂' => ':kneeling-man:',
'🧎♀' => ':kneeling-woman:',
'🍋🟩' => ':lime:',
@@ -292,8 +1512,10 @@
'👨✈' => ':man-pilot:',
'🤾♂' => ':man-playing-handball:',
'🤽♂' => ':man-playing-water-polo:',
+ '👨🦰' => ':red-haired-man:',
'🤷♂' => ':man-shrugging:',
- '👨🦯' => ':man-with-probing-cane:',
+ '👨🦳' => ':white-haired-man:',
+ '👨🦯' => ':man-with-white-cane:',
'👳♂' => ':man-with-turban:',
'👰♂' => ':man-with-veil:',
'💆♂' => ':massage-man:',
@@ -318,7 +1540,7 @@
'🧑🦼' => ':person-in-motorized-wheelchair:',
'🧑🦰' => ':red-haired-person:',
'🧑🦳' => ':white-haired-person:',
- '🧑🦯' => ':person-with-probing-cane:',
+ '🧑🦯' => ':person-with-white-cane:',
'🐦🔥' => ':phoenix:',
'🧑✈' => ':pilot:',
'🏴☠' => ':pirate-flag:',
@@ -330,8 +1552,7 @@
'🏳🌈' => ':rainbow-flag:',
'🙋♂' => ':raising-hand-man:',
'🙋♀' => ':raising-hand-woman:',
- '👨🦰' => ':red-haired-man:',
- '👩🦰' => ':red-haired-woman:',
+ '👩🦰' => ':woman-red-hair:',
'🚣♂' => ':rowing-man:',
'🚣♀' => ':rowing-woman:',
'🏃♂' => ':running-man:',
@@ -367,8 +1588,7 @@
'🚶♀' => ':walking-woman:',
'🏋♂' => ':weight-lifting-man:',
'🏋♀' => ':weight-lifting-woman:',
- '👨🦳' => ':white-haired-man:',
- '👩🦳' => ':white-haired-woman:',
+ '👩🦳' => ':woman-white-hair:',
'🧔♀' => ':woman-beard:',
'🤸♀' => ':woman-cartwheeling:',
'🤦♀' => ':woman-facepalming:',
@@ -383,16 +1603,17 @@
'🤾♀' => ':woman-playing-handball:',
'🤽♀' => ':woman-playing-water-polo:',
'🤷♀' => ':woman-shrugging:',
- '👩🦯' => ':woman-with-probing-cane:',
+ '👩🦯' => ':woman-with-white-cane:',
'👳♀' => ':woman-with-turban:',
'🤼♀' => ':women-wrestling:',
'0️⃣' => ':zero:',
'🧟♂' => ':zombie-man:',
'🧟♀' => ':zombie-woman:',
'🅰️' => ':a:',
- '🎟️' => ':admission-tickets:',
+ '🎟️' => ':tickets:',
'🇦🇫' => ':flag-af:',
'✈️' => ':airplane:',
+ '🛩️' => ':small-airplane:',
'🇦🇽' => ':flag-ax:',
'🇦🇱' => ':flag-al:',
'⚗️' => ':alembic:',
@@ -404,6 +1625,7 @@
'👼🏽' => ':angel-tone3:',
'👼🏾' => ':angel-tone4:',
'👼🏿' => ':angel-tone5:',
+ '🗯️' => ':right-anger-bubble:',
'🇦🇴' => ':flag-ao:',
'🇦🇮' => ':flag-ai:',
'🇦🇶' => ':flag-aq:',
@@ -444,7 +1666,8 @@
'‼️' => ':bangbang:',
'🇧🇩' => ':flag-bd:',
'🇧🇧' => ':flag-bb:',
- '🌥️' => ':barely-sunny:',
+ '🌥️' => ':white-sun-cloud:',
+ '⛹️' => ':person-with-ball:',
'⛹🏻' => ':basketball-player-tone1:',
'⛹🏼' => ':basketball-player-tone2:',
'⛹🏽' => ':basketball-player-tone3:',
@@ -456,6 +1679,7 @@
'🛀🏾' => ':bath-tone4:',
'🛀🏿' => ':bath-tone5:',
'🏖️' => ':beach-with-umbrella:',
+ '⛱️' => ':umbrella-on-ground:',
'🛏️' => ':bed:',
'🇧🇾' => ':flag-by:',
'🇧🇪' => ':flag-be:',
@@ -470,14 +1694,14 @@
'🚴🏾' => ':bicyclist-tone4:',
'🚴🏿' => ':bicyclist-tone5:',
'☣️' => ':biohazard-sign:',
- '⏺️' => ':black-circle-for-record:',
- '⏮️' => ':black-left-pointing-double-triangle-with-vertical-bar:',
+ '⏺️' => ':record-button:',
+ '⏮️' => ':track-previous:',
'◼️' => ':black-medium-square:',
'✒️' => ':black-nib:',
- '⏭️' => ':black-right-pointing-double-triangle-with-vertical-bar:',
- '⏯️' => ':black-right-pointing-triangle-with-double-vertical-bar:',
+ '⏭️' => ':track-next:',
+ '⏯️' => ':play-pause:',
'▪️' => ':black-small-square:',
- '⏹️' => ':black-square-for-stop:',
+ '⏹️' => ':stop-button:',
'🇧🇴' => ':flag-bo:',
'🇧🇦' => ':flag-ba:',
'🇧🇼' => ':flag-bw:',
@@ -493,6 +1717,11 @@
'👦🏾' => ':boy-tone4:',
'👦🏿' => ':boy-tone5:',
'🇧🇷' => ':flag-br:',
+ '🤱🏿' => ':breast-feeding-dark-skin-tone:',
+ '🤱🏻' => ':breast-feeding-light-skin-tone:',
+ '🤱🏾' => ':breast-feeding-medium-dark-skin-tone:',
+ '🤱🏼' => ':breast-feeding-medium-light-skin-tone:',
+ '🤱🏽' => ':breast-feeding-medium-skin-tone:',
'👰🏻' => ':bride-with-veil-tone1:',
'👰🏼' => ':bride-with-veil-tone2:',
'👰🏽' => ':bride-with-veil-tone3:',
@@ -501,10 +1730,11 @@
'🇮🇴' => ':flag-io:',
'🇻🇬' => ':flag-vg:',
'🇧🇳' => ':flag-bn:',
- '🏗️' => ':building-construction:',
+ '🏗️' => ':construction-site:',
'🇧🇬' => ':flag-bg:',
'🇧🇫' => ':flag-bf:',
'🇧🇮' => ':flag-bi:',
+ '🗓️' => ':spiral-calendar-pad:',
'🤙🏻' => ':call-me-tone1:',
'🤙🏼' => ':call-me-tone2:',
'🤙🏽' => ':call-me-tone3:',
@@ -518,7 +1748,7 @@
'🕯️' => ':candle:',
'🇨🇻' => ':flag-cv:',
'🗃️' => ':card-file-box:',
- '🗂️' => ':card-index-dividers:',
+ '🗂️' => ':dividers:',
'🇧🇶' => ':flag-bq:',
'🤸🏻' => ':cartwheel-tone1:',
'🤸🏼' => ':cartwheel-tone2:',
@@ -531,6 +1761,11 @@
'🇹🇩' => ':flag-td:',
'⛓️' => ':chains:',
'♟️' => ':chess-pawn:',
+ '🧒🏿' => ':child-dark-skin-tone:',
+ '🧒🏻' => ':child-light-skin-tone:',
+ '🧒🏾' => ':child-medium-dark-skin-tone:',
+ '🧒🏼' => ':child-medium-light-skin-tone:',
+ '🧒🏽' => ':child-medium-skin-tone:',
'🇨🇱' => ':flag-cl:',
'🐿️' => ':chipmunk:',
'🇨🇽' => ':flag-cx:',
@@ -542,7 +1777,12 @@
'👏🏿' => ':clap-tone5:',
'🏛️' => ':classical-building:',
'🇨🇵' => ':flag-cp:',
+ '🕰️' => ':mantelpiece-clock:',
'☁️' => ':cloud:',
+ '🌩️' => ':lightning:',
+ '🌧️' => ':rain-cloud:',
+ '🌨️' => ':snow-cloud:',
+ '🌪️' => ':tornado:',
'♣️' => ':clubs:',
'🇨🇳' => ':flag-cn:',
'🇨🇨' => ':flag-cc:',
@@ -570,8 +1810,16 @@
'🇨🇷' => ':flag-cr:',
'🇨🇮' => ':flag-ci:',
'🛋️' => ':couch-and-lamp:',
+ '💑🏿' => ':couple-with-heart-dark-skin-tone:',
+ '💑🏻' => ':couple-with-heart-light-skin-tone:',
+ '💑🏾' => ':couple-with-heart-medium-dark-skin-tone:',
+ '💑🏼' => ':couple-with-heart-medium-light-skin-tone:',
+ '💑🏽' => ':couple-with-heart-medium-skin-tone:',
+ '🖍️' => ':lower-left-crayon:',
'🇭🇷' => ':flag-hr:',
+ '✝️' => ':latin-cross:',
'⚔️' => ':crossed-swords:',
+ '🛳️' => ':passenger-ship:',
'🇨🇺' => ':flag-cu:',
'🇨🇼' => ':flag-cw:',
'🇨🇾' => ':flag-cy:',
@@ -584,23 +1832,33 @@
'💃🏿' => ':dancer-tone5:',
'🕶️' => ':dark-sunglasses:',
'🇩🇪' => ':flag-de:',
+ '🧏🏿' => ':deaf-person-dark-skin-tone:',
+ '🧏🏻' => ':deaf-person-light-skin-tone:',
+ '🧏🏾' => ':deaf-person-medium-dark-skin-tone:',
+ '🧏🏼' => ':deaf-person-medium-light-skin-tone:',
+ '🧏🏽' => ':deaf-person-medium-skin-tone:',
'🇩🇰' => ':flag-dk:',
- '🏚️' => ':derelict-house-building:',
+ '🏚️' => ':house-abandoned:',
'🏜️' => ':desert:',
- '🏝️' => ':desert-island:',
+ '🏝️' => ':island:',
'🖥️' => ':desktop-computer:',
'♦️' => ':diamonds:',
'🇩🇬' => ':flag-dg:',
'🇩🇯' => ':flag-dj:',
'🇩🇲' => ':flag-dm:',
'🇩🇴' => ':flag-do:',
- '⏸️' => ':double-vertical-bar:',
+ '⏸️' => ':pause-button:',
'🕊️' => ':dove-of-peace:',
'👂🏻' => ':ear-tone1:',
'👂🏼' => ':ear-tone2:',
'👂🏽' => ':ear-tone3:',
'👂🏾' => ':ear-tone4:',
'👂🏿' => ':ear-tone5:',
+ '🦻🏿' => ':ear-with-hearing-aid-dark-skin-tone:',
+ '🦻🏻' => ':ear-with-hearing-aid-light-skin-tone:',
+ '🦻🏾' => ':ear-with-hearing-aid-medium-dark-skin-tone:',
+ '🦻🏼' => ':ear-with-hearing-aid-medium-light-skin-tone:',
+ '🦻🏽' => ':ear-with-hearing-aid-medium-skin-tone:',
'🇪🇨' => ':flag-ec:',
'🇪🇬' => ':flag-eg:',
'8⃣' => ':eight:',
@@ -608,7 +1866,12 @@
'✳️' => ':eight-spoked-asterisk:',
'⏏️' => ':eject:',
'🇸🇻' => ':flag-sv:',
- '✉️' => ':email:',
+ '🧝🏿' => ':elf-dark-skin-tone:',
+ '🧝🏻' => ':elf-light-skin-tone:',
+ '🧝🏾' => ':elf-medium-dark-skin-tone:',
+ '🧝🏼' => ':elf-medium-light-skin-tone:',
+ '🧝🏽' => ':elf-medium-skin-tone:',
+ '✉️' => ':envelope:',
'🇬🇶' => ':flag-gq:',
'🇪🇷' => ':flag-er:',
'🇪🇸' => ':flag-es:',
@@ -621,6 +1884,11 @@
'🤦🏽' => ':face-palm-tone3:',
'🤦🏾' => ':face-palm-tone4:',
'🤦🏿' => ':face-palm-tone5:',
+ '🧚🏿' => ':fairy-dark-skin-tone:',
+ '🧚🏻' => ':fairy-light-skin-tone:',
+ '🧚🏾' => ':fairy-medium-dark-skin-tone:',
+ '🧚🏼' => ':fairy-medium-light-skin-tone:',
+ '🧚🏽' => ':fairy-medium-skin-tone:',
'🇫🇰' => ':flag-fk:',
'🇫🇴' => ':flag-fo:',
'♀️' => ':female-sign:',
@@ -628,7 +1896,7 @@
'🇫🇯' => ':flag-fj:',
'🗄️' => ':file-cabinet:',
'🎞️' => ':film-frames:',
- '📽️' => ':film-projector:',
+ '📽️' => ':projector:',
'🤞🏻' => ':fingers-crossed-tone1:',
'🤞🏼' => ':fingers-crossed-tone2:',
'🤞🏽' => ':fingers-crossed-tone3:',
@@ -808,6 +2076,7 @@
'🇻🇳' => ':vietnam:',
'🇻🇺' => ':vanuatu:',
'🇼🇫' => ':wallis-futuna:',
+ '🏳️' => ':waving-white-flag:',
'🇼🇸' => ':samoa:',
'🇽🇰' => ':kosovo:',
'🇾🇪' => ':yemen:',
@@ -817,10 +2086,16 @@
'🇿🇼' => ':zimbabwe:',
'⚜️' => ':fleur-de-lis:',
'🌫️' => ':fog:',
+ '🦶🏿' => ':foot-dark-skin-tone:',
+ '🦶🏻' => ':foot-light-skin-tone:',
+ '🦶🏾' => ':foot-medium-dark-skin-tone:',
+ '🦶🏼' => ':foot-medium-light-skin-tone:',
+ '🦶🏽' => ':foot-medium-skin-tone:',
+ '🍽️' => ':knife-fork-plate:',
'4⃣' => ':four:',
'🖼️' => ':frame-with-picture:',
- '⚱️' => ':funeral-urn:',
- '🏳🌈' => ':gay-pride-flag:',
+ '☹️' => ':white-frowning-face:',
+ '⚱️' => ':urn:',
'⚙️' => ':gear:',
'👧🏻' => ':girl-tone1:',
'👧🏼' => ':girl-tone2:',
@@ -838,13 +2113,19 @@
'💇🏽' => ':haircut-tone3:',
'💇🏾' => ':haircut-tone4:',
'💇🏿' => ':haircut-tone5:',
- '⚒️' => ':hammer-and-pick:',
- '🛠️' => ':hammer-and-wrench:',
+ '⚒️' => ':hammer-pick:',
+ '🛠️' => ':tools:',
+ '🖐️' => ':raised-hand-with-fingers-splayed:',
'🖐🏻' => ':hand-splayed-tone1:',
'🖐🏼' => ':hand-splayed-tone2:',
'🖐🏽' => ':hand-splayed-tone3:',
'🖐🏾' => ':hand-splayed-tone4:',
'🖐🏿' => ':hand-splayed-tone5:',
+ '🫰🏿' => ':hand-with-index-finger-and-thumb-crossed-dark-skin-tone:',
+ '🫰🏻' => ':hand-with-index-finger-and-thumb-crossed-light-skin-tone:',
+ '🫰🏾' => ':hand-with-index-finger-and-thumb-crossed-medium-dark-skin-tone:',
+ '🫰🏼' => ':hand-with-index-finger-and-thumb-crossed-medium-light-skin-tone:',
+ '🫰🏽' => ':hand-with-index-finger-and-thumb-crossed-medium-skin-tone:',
'🤾🏻' => ':handball-tone1:',
'🤾🏼' => ':handball-tone2:',
'🤾🏽' => ':handball-tone3:',
@@ -857,12 +2138,18 @@
'🤝🏿' => ':handshake-tone5:',
'#⃣' => ':hash:',
'❤️' => ':heart:',
+ '❣️' => ':heavy-heart-exclamation-mark-ornament:',
+ '🫶🏿' => ':heart-hands-dark-skin-tone:',
+ '🫶🏻' => ':heart-hands-light-skin-tone:',
+ '🫶🏾' => ':heart-hands-medium-dark-skin-tone:',
+ '🫶🏼' => ':heart-hands-medium-light-skin-tone:',
+ '🫶🏽' => ':heart-hands-medium-skin-tone:',
'♥️' => ':hearts:',
'✔️' => ':heavy-check-mark:',
- '❣️' => ':heavy-heart-exclamation-mark-ornament:',
'✖️' => ':heavy-multiplication-x:',
'⛑️' => ':helmet-with-white-cross:',
'🕳️' => ':hole:',
+ '🏘️' => ':house-buildings:',
'🏇🏻' => ':horse-racing-tone1:',
'🏇🏼' => ':horse-racing-tone2:',
'🏇🏽' => ':horse-racing-tone3:',
@@ -870,8 +2157,12 @@
'🏇🏿' => ':horse-racing-tone5:',
'🌶️' => ':hot-pepper:',
'♨️' => ':hotsprings:',
- '🏘️' => ':house-buildings:',
'⛸️' => ':ice-skate:',
+ '🫵🏿' => ':index-pointing-at-the-viewer-dark-skin-tone:',
+ '🫵🏻' => ':index-pointing-at-the-viewer-light-skin-tone:',
+ '🫵🏾' => ':index-pointing-at-the-viewer-medium-dark-skin-tone:',
+ '🫵🏼' => ':index-pointing-at-the-viewer-medium-light-skin-tone:',
+ '🫵🏽' => ':index-pointing-at-the-viewer-medium-skin-tone:',
'♾️' => ':infinity:',
'💁🏻' => ':information-desk-person-tone1:',
'💁🏼' => ':information-desk-person-tone2:',
@@ -886,38 +2177,66 @@
'🤹🏽' => ':juggling-tone3:',
'🤹🏾' => ':juggling-tone4:',
'🤹🏿' => ':juggling-tone5:',
+ '🗝️' => ':old-key:',
'⌨️' => ':keyboard:',
- '🍽️' => ':knife-fork-plate:',
+ '💏🏿' => ':kiss-dark-skin-tone:',
+ '💏🏻' => ':kiss-light-skin-tone:',
+ '💏🏾' => ':kiss-medium-dark-skin-tone:',
+ '💏🏼' => ':kiss-medium-light-skin-tone:',
+ '💏🏽' => ':kiss-medium-skin-tone:',
'🏷️' => ':label:',
- '✝️' => ':latin-cross:',
'🤛🏻' => ':left-facing-fist-tone1:',
'🤛🏼' => ':left-facing-fist-tone2:',
'🤛🏽' => ':left-facing-fist-tone3:',
'🤛🏾' => ':left-facing-fist-tone4:',
'🤛🏿' => ':left-facing-fist-tone5:',
'↔️' => ':left-right-arrow:',
- '🗨️' => ':left-speech-bubble:',
+ '🗨️' => ':speech-left:',
'↩️' => ':leftwards-arrow-with-hook:',
+ '🫲🏿' => ':leftwards-hand-dark-skin-tone:',
+ '🫲🏻' => ':leftwards-hand-light-skin-tone:',
+ '🫲🏾' => ':leftwards-hand-medium-dark-skin-tone:',
+ '🫲🏼' => ':leftwards-hand-medium-light-skin-tone:',
+ '🫲🏽' => ':leftwards-hand-medium-skin-tone:',
+ '🫷🏿' => ':leftwards-pushing-hand-dark-skin-tone:',
+ '🫷🏻' => ':leftwards-pushing-hand-light-skin-tone:',
+ '🫷🏾' => ':leftwards-pushing-hand-medium-dark-skin-tone:',
+ '🫷🏼' => ':leftwards-pushing-hand-medium-light-skin-tone:',
+ '🫷🏽' => ':leftwards-pushing-hand-medium-skin-tone:',
+ '🦵🏿' => ':leg-dark-skin-tone:',
+ '🦵🏻' => ':leg-light-skin-tone:',
+ '🦵🏾' => ':leg-medium-dark-skin-tone:',
+ '🦵🏼' => ':leg-medium-light-skin-tone:',
+ '🦵🏽' => ':leg-medium-skin-tone:',
'🎚️' => ':level-slider:',
+ '🕴️' => ':man-in-business-suit-levitating:',
+ '🏋️' => ':weight-lifter:',
'🏋🏻' => ':lifter-tone1:',
'🏋🏼' => ':lifter-tone2:',
'🏋🏽' => ':lifter-tone3:',
'🏋🏾' => ':lifter-tone4:',
'🏋🏿' => ':lifter-tone5:',
- '🌩️' => ':lightning:',
- '🖇️' => ':linked-paperclips:',
- '🖊️' => ':lower-left-ballpoint-pen:',
- '🖍️' => ':lower-left-crayon:',
- '🖋️' => ':lower-left-fountain-pen:',
- '🖌️' => ':lower-left-paintbrush:',
+ '🖇️' => ':paperclips:',
+ '🤟🏿' => ':love-you-gesture-dark-skin-tone:',
+ '🤟🏻' => ':love-you-gesture-light-skin-tone:',
+ '🤟🏾' => ':love-you-gesture-medium-dark-skin-tone:',
+ '🤟🏼' => ':love-you-gesture-medium-light-skin-tone:',
+ '🤟🏽' => ':love-you-gesture-medium-skin-tone:',
+ '🖊️' => ':pen-ballpoint:',
+ '🖋️' => ':pen-fountain:',
+ '🖌️' => ':paintbrush:',
'Ⓜ️' => ':m:',
+ '🧙🏿' => ':mage-dark-skin-tone:',
+ '🧙🏻' => ':mage-light-skin-tone:',
+ '🧙🏾' => ':mage-medium-dark-skin-tone:',
+ '🧙🏼' => ':mage-medium-light-skin-tone:',
+ '🧙🏽' => ':mage-medium-skin-tone:',
'♂️' => ':male-sign:',
'🕺🏻' => ':man-dancing-tone1:',
'🕺🏼' => ':man-dancing-tone2:',
'🕺🏽' => ':man-dancing-tone3:',
'🕺🏾' => ':man-dancing-tone4:',
'🕺🏿' => ':man-dancing-tone5:',
- '🕴️' => ':man-in-business-suit-levitating:',
'🤵🏻' => ':man-in-tuxedo-tone1:',
'🤵🏼' => ':man-in-tuxedo-tone2:',
'🤵🏽' => ':man-in-tuxedo-tone3:',
@@ -938,26 +2257,38 @@
'👳🏽' => ':man-with-turban-tone3:',
'👳🏾' => ':man-with-turban-tone4:',
'👳🏿' => ':man-with-turban-tone5:',
- '🕰️' => ':mantelpiece-clock:',
+ '🗺️' => ':world-map:',
'💆🏻' => ':massage-tone1:',
'💆🏼' => ':massage-tone2:',
'💆🏽' => ':massage-tone3:',
'💆🏾' => ':massage-tone4:',
'💆🏿' => ':massage-tone5:',
- '🎖️' => ':medal:',
+ '🎖️' => ':military-medal:',
'⚕️' => ':medical-symbol:',
+ '👬🏿' => ':men-holding-hands-dark-skin-tone:',
+ '👬🏻' => ':men-holding-hands-light-skin-tone:',
+ '👬🏾' => ':men-holding-hands-medium-dark-skin-tone:',
+ '👬🏼' => ':men-holding-hands-medium-light-skin-tone:',
+ '👬🏽' => ':men-holding-hands-medium-skin-tone:',
+ '🧜🏿' => ':merperson-dark-skin-tone:',
+ '🧜🏻' => ':merperson-light-skin-tone:',
+ '🧜🏾' => ':merperson-medium-dark-skin-tone:',
+ '🧜🏼' => ':merperson-medium-light-skin-tone:',
+ '🧜🏽' => ':merperson-medium-skin-tone:',
'🤘🏻' => ':metal-tone1:',
'🤘🏼' => ':metal-tone2:',
'🤘🏽' => ':metal-tone3:',
'🤘🏾' => ':metal-tone4:',
'🤘🏿' => ':metal-tone5:',
+ '🎙️' => ':studio-microphone:',
'🖕🏻' => ':middle-finger-tone1:',
'🖕🏼' => ':middle-finger-tone2:',
'🖕🏽' => ':middle-finger-tone3:',
'🖕🏾' => ':middle-finger-tone4:',
'🖕🏿' => ':middle-finger-tone5:',
- '🌤️' => ':mostly-sunny:',
- '🛥️' => ':motor-boat:',
+ '🌤️' => ':white-sun-small-cloud:',
+ '🛥️' => ':motorboat:',
+ '🏍️' => ':racing-motorcycle:',
'🛣️' => ':motorway:',
'⛰️' => ':mountain:',
'🚵🏻' => ':mountain-bicyclist-tone1:',
@@ -965,6 +2296,8 @@
'🚵🏽' => ':mountain-bicyclist-tone3:',
'🚵🏾' => ':mountain-bicyclist-tone4:',
'🚵🏿' => ':mountain-bicyclist-tone5:',
+ '🏔️' => ':snow-capped-mountain:',
+ '🖱️' => ':three-button-mouse:',
'🤶🏻' => ':mrs-claus-tone1:',
'🤶🏼' => ':mrs-claus-tone2:',
'🤶🏽' => ':mrs-claus-tone3:',
@@ -980,8 +2313,14 @@
'💅🏽' => ':nail-care-tone3:',
'💅🏾' => ':nail-care-tone4:',
'💅🏿' => ':nail-care-tone5:',
- '🏞️' => ':national-park:',
+ '🏞️' => ':park:',
+ '🗞️' => ':rolled-up-newspaper:',
'9⃣' => ':nine:',
+ '🥷🏿' => ':ninja-dark-skin-tone:',
+ '🥷🏻' => ':ninja-light-skin-tone:',
+ '🥷🏾' => ':ninja-medium-dark-skin-tone:',
+ '🥷🏼' => ':ninja-medium-light-skin-tone:',
+ '🥷🏽' => ':ninja-medium-skin-tone:',
'🙅🏻' => ':no-good-tone1:',
'🙅🏼' => ':no-good-tone2:',
'🙅🏽' => ':no-good-tone3:',
@@ -992,6 +2331,7 @@
'👃🏽' => ':nose-tone3:',
'👃🏾' => ':nose-tone4:',
'👃🏿' => ':nose-tone5:',
+ '🗒️' => ':spiral-note-pad:',
'🅾️' => ':o2:',
'🛢️' => ':oil-drum:',
'👌🏻' => ':ok-hand-tone1:',
@@ -1004,12 +2344,16 @@
'🙆🏽' => ':ok-woman-tone3:',
'🙆🏾' => ':ok-woman-tone4:',
'🙆🏿' => ':ok-woman-tone5:',
- '🗝️' => ':old-key:',
'👴🏻' => ':older-man-tone1:',
'👴🏼' => ':older-man-tone2:',
'👴🏽' => ':older-man-tone3:',
'👴🏾' => ':older-man-tone4:',
'👴🏿' => ':older-man-tone5:',
+ '🧓🏿' => ':older-person-dark-skin-tone:',
+ '🧓🏻' => ':older-person-light-skin-tone:',
+ '🧓🏾' => ':older-person-medium-dark-skin-tone:',
+ '🧓🏼' => ':older-person-medium-light-skin-tone:',
+ '🧓🏽' => ':older-person-medium-skin-tone:',
'👵🏻' => ':older-woman-tone1:',
'👵🏼' => ':older-woman-tone2:',
'👵🏽' => ':older-woman-tone3:',
@@ -1023,30 +2367,108 @@
'👐🏾' => ':open-hands-tone4:',
'👐🏿' => ':open-hands-tone5:',
'☦️' => ':orthodox-cross:',
+ '🫳🏿' => ':palm-down-hand-dark-skin-tone:',
+ '🫳🏻' => ':palm-down-hand-light-skin-tone:',
+ '🫳🏾' => ':palm-down-hand-medium-dark-skin-tone:',
+ '🫳🏼' => ':palm-down-hand-medium-light-skin-tone:',
+ '🫳🏽' => ':palm-down-hand-medium-skin-tone:',
+ '🫴🏿' => ':palm-up-hand-dark-skin-tone:',
+ '🫴🏻' => ':palm-up-hand-light-skin-tone:',
+ '🫴🏾' => ':palm-up-hand-medium-dark-skin-tone:',
+ '🫴🏼' => ':palm-up-hand-medium-light-skin-tone:',
+ '🫴🏽' => ':palm-up-hand-medium-skin-tone:',
+ '🤲🏿' => ':palms-up-together-dark-skin-tone:',
+ '🤲🏻' => ':palms-up-together-light-skin-tone:',
+ '🤲🏾' => ':palms-up-together-medium-dark-skin-tone:',
+ '🤲🏼' => ':palms-up-together-medium-light-skin-tone:',
+ '🤲🏽' => ':palms-up-together-medium-skin-tone:',
'🅿️' => ':parking:',
'〽️' => ':part-alternation-mark:',
- '🌦️' => ':partly-sunny-rain:',
- '🛳️' => ':passenger-ship:',
+ '🌦️' => ':white-sun-rain-cloud:',
'☮️' => ':peace-symbol:',
'✏️' => ':pencil2:',
+ '🧗🏿' => ':person-climbing-dark-skin-tone:',
+ '🧗🏻' => ':person-climbing-light-skin-tone:',
+ '🧗🏾' => ':person-climbing-medium-dark-skin-tone:',
+ '🧗🏼' => ':person-climbing-medium-light-skin-tone:',
+ '🧗🏽' => ':person-climbing-medium-skin-tone:',
+ '🧑🏿' => ':person-dark-skin-tone:',
+ '🧔🏿' => ':person-dark-skin-tone-beard:',
'🙍🏻' => ':person-frowning-tone1:',
'🙍🏼' => ':person-frowning-tone2:',
'🙍🏽' => ':person-frowning-tone3:',
'🙍🏾' => ':person-frowning-tone4:',
'🙍🏿' => ':person-frowning-tone5:',
- '⛹️' => ':person-with-ball:',
+ '🏌🏿' => ':person-golfing-dark-skin-tone:',
+ '🏌🏻' => ':person-golfing-light-skin-tone:',
+ '🏌🏾' => ':person-golfing-medium-dark-skin-tone:',
+ '🏌🏼' => ':person-golfing-medium-light-skin-tone:',
+ '🏌🏽' => ':person-golfing-medium-skin-tone:',
+ '🛌🏿' => ':person-in-bed-dark-skin-tone:',
+ '🛌🏻' => ':person-in-bed-light-skin-tone:',
+ '🛌🏾' => ':person-in-bed-medium-dark-skin-tone:',
+ '🛌🏼' => ':person-in-bed-medium-light-skin-tone:',
+ '🛌🏽' => ':person-in-bed-medium-skin-tone:',
+ '🧘🏿' => ':person-in-lotus-position-dark-skin-tone:',
+ '🧘🏻' => ':person-in-lotus-position-light-skin-tone:',
+ '🧘🏾' => ':person-in-lotus-position-medium-dark-skin-tone:',
+ '🧘🏼' => ':person-in-lotus-position-medium-light-skin-tone:',
+ '🧘🏽' => ':person-in-lotus-position-medium-skin-tone:',
+ '🧖🏿' => ':person-in-steamy-room-dark-skin-tone:',
+ '🧖🏻' => ':person-in-steamy-room-light-skin-tone:',
+ '🧖🏾' => ':person-in-steamy-room-medium-dark-skin-tone:',
+ '🧖🏼' => ':person-in-steamy-room-medium-light-skin-tone:',
+ '🧖🏽' => ':person-in-steamy-room-medium-skin-tone:',
+ '🕴🏿' => ':person-in-suit-levitating-dark-skin-tone:',
+ '🕴🏻' => ':person-in-suit-levitating-light-skin-tone:',
+ '🕴🏾' => ':person-in-suit-levitating-medium-dark-skin-tone:',
+ '🕴🏼' => ':person-in-suit-levitating-medium-light-skin-tone:',
+ '🕴🏽' => ':person-in-suit-levitating-medium-skin-tone:',
+ '🧎🏿' => ':person-kneeling-dark-skin-tone:',
+ '🧎🏻' => ':person-kneeling-light-skin-tone:',
+ '🧎🏾' => ':person-kneeling-medium-dark-skin-tone:',
+ '🧎🏼' => ':person-kneeling-medium-light-skin-tone:',
+ '🧎🏽' => ':person-kneeling-medium-skin-tone:',
+ '🧑🏻' => ':person-light-skin-tone:',
+ '🧔🏻' => ':person-light-skin-tone-beard:',
+ '🧑🏾' => ':person-medium-dark-skin-tone:',
+ '🧔🏾' => ':person-medium-dark-skin-tone-beard:',
+ '🧑🏼' => ':person-medium-light-skin-tone:',
+ '🧔🏼' => ':person-medium-light-skin-tone-beard:',
+ '🧑🏽' => ':person-medium-skin-tone:',
+ '🧔🏽' => ':person-medium-skin-tone-beard:',
+ '🧍🏿' => ':person-standing-dark-skin-tone:',
+ '🧍🏻' => ':person-standing-light-skin-tone:',
+ '🧍🏾' => ':person-standing-medium-dark-skin-tone:',
+ '🧍🏼' => ':person-standing-medium-light-skin-tone:',
+ '🧍🏽' => ':person-standing-medium-skin-tone:',
'👱🏻' => ':person-with-blond-hair-tone1:',
'👱🏼' => ':person-with-blond-hair-tone2:',
'👱🏽' => ':person-with-blond-hair-tone3:',
'👱🏾' => ':person-with-blond-hair-tone4:',
'👱🏿' => ':person-with-blond-hair-tone5:',
+ '🫅🏿' => ':person-with-crown-dark-skin-tone:',
+ '🫅🏻' => ':person-with-crown-light-skin-tone:',
+ '🫅🏾' => ':person-with-crown-medium-dark-skin-tone:',
+ '🫅🏼' => ':person-with-crown-medium-light-skin-tone:',
+ '🫅🏽' => ':person-with-crown-medium-skin-tone:',
'🙎🏻' => ':person-with-pouting-face-tone1:',
'🙎🏼' => ':person-with-pouting-face-tone2:',
'🙎🏽' => ':person-with-pouting-face-tone3:',
'🙎🏾' => ':person-with-pouting-face-tone4:',
'🙎🏿' => ':person-with-pouting-face-tone5:',
- '☎️' => ':phone:',
+ '☎️' => ':telephone:',
'⛏️' => ':pick:',
+ '🤌🏿' => ':pinched-fingers-dark-skin-tone:',
+ '🤌🏻' => ':pinched-fingers-light-skin-tone:',
+ '🤌🏾' => ':pinched-fingers-medium-dark-skin-tone:',
+ '🤌🏼' => ':pinched-fingers-medium-light-skin-tone:',
+ '🤌🏽' => ':pinched-fingers-medium-skin-tone:',
+ '🤏🏿' => ':pinching-hand-dark-skin-tone:',
+ '🤏🏻' => ':pinching-hand-light-skin-tone:',
+ '🤏🏾' => ':pinching-hand-medium-dark-skin-tone:',
+ '🤏🏼' => ':pinching-hand-medium-light-skin-tone:',
+ '🤏🏽' => ':pinching-hand-medium-skin-tone:',
'👇🏻' => ':point-down-tone1:',
'👇🏼' => ':point-down-tone2:',
'👇🏽' => ':point-down-tone3:',
@@ -1078,6 +2500,16 @@
'🙏🏽' => ':pray-tone3:',
'🙏🏾' => ':pray-tone4:',
'🙏🏿' => ':pray-tone5:',
+ '🫃🏿' => ':pregnant-man-dark-skin-tone:',
+ '🫃🏻' => ':pregnant-man-light-skin-tone:',
+ '🫃🏾' => ':pregnant-man-medium-dark-skin-tone:',
+ '🫃🏼' => ':pregnant-man-medium-light-skin-tone:',
+ '🫃🏽' => ':pregnant-man-medium-skin-tone:',
+ '🫄🏿' => ':pregnant-person-dark-skin-tone:',
+ '🫄🏻' => ':pregnant-person-light-skin-tone:',
+ '🫄🏾' => ':pregnant-person-medium-dark-skin-tone:',
+ '🫄🏼' => ':pregnant-person-medium-light-skin-tone:',
+ '🫄🏽' => ':pregnant-person-medium-skin-tone:',
'🤰🏻' => ':pregnant-woman-tone1:',
'🤰🏼' => ':pregnant-woman-tone2:',
'🤰🏽' => ':pregnant-woman-tone3:',
@@ -1100,10 +2532,8 @@
'👊🏾' => ':punch-tone4:',
'👊🏿' => ':punch-tone5:',
'🏎️' => ':racing-car:',
- '🏍️' => ':racing-motorcycle:',
'☢️' => ':radioactive-sign:',
'🛤️' => ':railway-track:',
- '🌧️' => ':rain-cloud:',
'🤚🏻' => ':raised-back-of-hand-tone1:',
'🤚🏼' => ':raised-back-of-hand-tone2:',
'🤚🏽' => ':raised-back-of-hand-tone3:',
@@ -1114,7 +2544,6 @@
'✋🏽' => ':raised-hand-tone3:',
'✋🏾' => ':raised-hand-tone4:',
'✋🏿' => ':raised-hand-tone5:',
- '🖐️' => ':raised-hand-with-fingers-splayed:',
'🙌🏻' => ':raised-hands-tone1:',
'🙌🏼' => ':raised-hands-tone2:',
'🙌🏽' => ':raised-hands-tone3:',
@@ -1129,13 +2558,21 @@
'®️' => ':registered:',
'☺️' => ':relaxed:',
'🎗️' => ':reminder-ribbon:',
- '🗯️' => ':right-anger-bubble:',
'🤜🏻' => ':right-facing-fist-tone1:',
'🤜🏼' => ':right-facing-fist-tone2:',
'🤜🏽' => ':right-facing-fist-tone3:',
'🤜🏾' => ':right-facing-fist-tone4:',
'🤜🏿' => ':right-facing-fist-tone5:',
- '🗞️' => ':rolled-up-newspaper:',
+ '🫱🏿' => ':rightwards-hand-dark-skin-tone:',
+ '🫱🏻' => ':rightwards-hand-light-skin-tone:',
+ '🫱🏾' => ':rightwards-hand-medium-dark-skin-tone:',
+ '🫱🏼' => ':rightwards-hand-medium-light-skin-tone:',
+ '🫱🏽' => ':rightwards-hand-medium-skin-tone:',
+ '🫸🏿' => ':rightwards-pushing-hand-dark-skin-tone:',
+ '🫸🏻' => ':rightwards-pushing-hand-light-skin-tone:',
+ '🫸🏾' => ':rightwards-pushing-hand-medium-dark-skin-tone:',
+ '🫸🏼' => ':rightwards-pushing-hand-medium-light-skin-tone:',
+ '🫸🏽' => ':rightwards-pushing-hand-medium-skin-tone:',
'🏵️' => ':rosette:',
'🚣🏻' => ':rowboat-tone1:',
'🚣🏼' => ':rowboat-tone2:',
@@ -1153,7 +2590,7 @@
'🎅🏽' => ':santa-tone3:',
'🎅🏾' => ':santa-tone4:',
'🎅🏿' => ':santa-tone5:',
- '🛰️' => ':satellite:',
+ '🛰️' => ':satellite-orbital:',
'⚖️' => ':scales:',
'✂️' => ':scissors:',
'㊙️' => ':secret:',
@@ -1174,20 +2611,20 @@
'🤷🏿' => ':shrug-tone5:',
'6⃣' => ':six:',
'⛷️' => ':skier:',
- '☠️' => ':skull-and-crossbones:',
- '🕵️' => ':sleuth-or-spy:',
- '🛩️' => ':small-airplane:',
- '🏔️' => ':snow-capped-mountain:',
- '🌨️' => ':snow-cloud:',
+ '☠️' => ':skull-crossbones:',
+ '🕵️' => ':spy:',
+ '🏂🏿' => ':snowboarder-dark-skin-tone:',
+ '🏂🏻' => ':snowboarder-light-skin-tone:',
+ '🏂🏾' => ':snowboarder-medium-dark-skin-tone:',
+ '🏂🏼' => ':snowboarder-medium-light-skin-tone:',
+ '🏂🏽' => ':snowboarder-medium-skin-tone:',
'❄️' => ':snowflake:',
- '☃️' => ':snowman:',
+ '☃️' => ':snowman2:',
'♠️' => ':spades:',
'❇️' => ':sparkle:',
'🗣️' => ':speaking-head-in-silhouette:',
'🕷️' => ':spider:',
'🕸️' => ':spider-web:',
- '🗓️' => ':spiral-calendar-pad:',
- '🗒️' => ':spiral-note-pad:',
'🕵🏻' => ':spy-tone1:',
'🕵🏼' => ':spy-tone2:',
'🕵🏽' => ':spy-tone3:',
@@ -1197,8 +2634,17 @@
'☪️' => ':star-and-crescent:',
'✡️' => ':star-of-david:',
'⏱️' => ':stopwatch:',
- '🎙️' => ':studio-microphone:',
'☀️' => ':sunny:',
+ '🦸🏿' => ':superhero-dark-skin-tone:',
+ '🦸🏻' => ':superhero-light-skin-tone:',
+ '🦸🏾' => ':superhero-medium-dark-skin-tone:',
+ '🦸🏼' => ':superhero-medium-light-skin-tone:',
+ '🦸🏽' => ':superhero-medium-skin-tone:',
+ '🦹🏿' => ':supervillain-dark-skin-tone:',
+ '🦹🏻' => ':supervillain-light-skin-tone:',
+ '🦹🏾' => ':supervillain-medium-dark-skin-tone:',
+ '🦹🏼' => ':supervillain-medium-light-skin-tone:',
+ '🦹🏽' => ':supervillain-medium-skin-tone:',
'🏄🏻' => ':surfer-tone1:',
'🏄🏼' => ':surfer-tone2:',
'🏄🏽' => ':surfer-tone3:',
@@ -1211,7 +2657,6 @@
'🏊🏿' => ':swimmer-tone5:',
'🌡️' => ':thermometer:',
'3⃣' => ':three:',
- '🖱️' => ':three-button-mouse:',
'👎🏻' => ':thumbsdown-tone1:',
'👎🏼' => ':thumbsdown-tone2:',
'👎🏽' => ':thumbsdown-tone3:',
@@ -1222,22 +2667,25 @@
'👍🏽' => ':thumbsup-tone3:',
'👍🏾' => ':thumbsup-tone4:',
'👍🏿' => ':thumbsup-tone5:',
- '⛈️' => ':thunder-cloud-and-rain:',
+ '⛈️' => ':thunder-cloud-rain:',
'⏲️' => ':timer-clock:',
'™️' => ':tm:',
- '🌪️' => ':tornado:',
'🖲️' => ':trackball:',
'⚧️' => ':transgender-symbol:',
'2⃣' => ':two:',
'🈷️' => ':u6708:',
- '☂️' => ':umbrella:',
- '⛱️' => ':umbrella-on-ground:',
+ '☂️' => ':umbrella2:',
'✌️' => ':v:',
'✌🏻' => ':v-tone1:',
'✌🏼' => ':v-tone2:',
'✌🏽' => ':v-tone3:',
'✌🏾' => ':v-tone4:',
'✌🏿' => ':v-tone5:',
+ '🧛🏿' => ':vampire-dark-skin-tone:',
+ '🧛🏻' => ':vampire-light-skin-tone:',
+ '🧛🏾' => ':vampire-medium-dark-skin-tone:',
+ '🧛🏼' => ':vampire-medium-light-skin-tone:',
+ '🧛🏽' => ':vampire-medium-skin-tone:',
'🖖🏻' => ':vulcan-tone1:',
'🖖🏼' => ':vulcan-tone2:',
'🖖🏽' => ':vulcan-tone3:',
@@ -1260,25 +2708,31 @@
'👋🏽' => ':wave-tone3:',
'👋🏾' => ':wave-tone4:',
'👋🏿' => ':wave-tone5:',
- '🏳️' => ':waving-white-flag:',
'〰️' => ':wavy-dash:',
- '🏋️' => ':weight-lifter:',
'☸️' => ':wheel-of-dharma:',
- '☹️' => ':white-frowning-face:',
'◻️' => ':white-medium-square:',
'▫️' => ':white-small-square:',
'🌬️' => ':wind-blowing-face:',
+ '👫🏿' => ':woman-and-man-holding-hands-dark-skin-tone:',
+ '👫🏻' => ':woman-and-man-holding-hands-light-skin-tone:',
+ '👫🏾' => ':woman-and-man-holding-hands-medium-dark-skin-tone:',
+ '👫🏼' => ':woman-and-man-holding-hands-medium-light-skin-tone:',
+ '👫🏽' => ':woman-and-man-holding-hands-medium-skin-tone:',
'👩🏻' => ':woman-tone1:',
'👩🏼' => ':woman-tone2:',
'👩🏽' => ':woman-tone3:',
'👩🏾' => ':woman-tone4:',
'👩🏿' => ':woman-tone5:',
- '🗺️' => ':world-map:',
- '🤼🏻' => ':wrestlers-tone1:',
- '🤼🏼' => ':wrestlers-tone2:',
- '🤼🏽' => ':wrestlers-tone3:',
- '🤼🏾' => ':wrestlers-tone4:',
- '🤼🏿' => ':wrestlers-tone5:',
+ '🧕🏿' => ':woman-with-headscarf-dark-skin-tone:',
+ '🧕🏻' => ':woman-with-headscarf-light-skin-tone:',
+ '🧕🏾' => ':woman-with-headscarf-medium-dark-skin-tone:',
+ '🧕🏼' => ':woman-with-headscarf-medium-light-skin-tone:',
+ '🧕🏽' => ':woman-with-headscarf-medium-skin-tone:',
+ '👭🏿' => ':women-holding-hands-dark-skin-tone:',
+ '👭🏻' => ':women-holding-hands-light-skin-tone:',
+ '👭🏾' => ':women-holding-hands-medium-dark-skin-tone:',
+ '👭🏼' => ':women-holding-hands-medium-light-skin-tone:',
+ '👭🏽' => ':women-holding-hands-medium-skin-tone:',
'✍️' => ':writing-hand:',
'✍🏻' => ':writing-hand-tone1:',
'✍🏼' => ':writing-hand-tone2:',
@@ -1303,12 +2757,11 @@
'🉑' => ':accept:',
'🪗' => ':accordion:',
'🩹' => ':adhesive-bandage:',
- '🧑' => ':adult:',
+ '🧑' => ':person:',
'🚡' => ':aerial-tramway:',
'✈' => ':airplane:',
'🛬' => ':flight-arrival:',
'🛫' => ':flight-departure:',
- '🛩' => ':small-airplane:',
'⏰' => ':alarm-clock:',
'⚗' => ':alembic:',
'👽' => ':alien:',
@@ -1318,7 +2771,6 @@
'⚓' => ':anchor:',
'👼' => ':angel:',
'💢' => ':anger:',
- '🗯' => ':right-anger-bubble:',
'😠' => ':angry:',
'😧' => ':anguished:',
'🐜' => ':ant:',
@@ -1347,7 +2799,7 @@
'🔄' => ':arrows-counterclockwise:',
'🎨' => ':art:',
'🚛' => ':articulated-lorry:',
- '🛰' => ':satellite-orbital:',
+ '🛰' => ':artificial-satellite:',
'😲' => ':astonished:',
'👟' => ':athletic-shoe:',
'🏧' => ':atm:',
@@ -1367,7 +2819,8 @@
'🥯' => ':bagel:',
'🛄' => ':baggage-claim:',
'🥖' => ':french-bread:',
- '⚖' => ':scales:',
+ '⚖' => ':balance-scale:',
+ '🦲' => ':bald:',
'🩰' => ':ballet-shoes:',
'🎈' => ':balloon:',
'🗳' => ':ballot-box:',
@@ -1382,7 +2835,6 @@
'⚾' => ':baseball:',
'🧺' => ':basket:',
'🏀' => ':basketball:',
- '⛹' => ':bouncing-ball-person:',
'🦇' => ':bat:',
'🛀' => ':bath:',
'🛁' => ':bathtub:',
@@ -1390,7 +2842,7 @@
'🏖' => ':beach-umbrella:',
'🫘' => ':beans:',
'🐻' => ':bear:',
- '🧔' => ':bearded-person:',
+ '🧔' => ':person-beard:',
'🦫' => ':beaver:',
'🛏' => ':bed:',
'🐝' => ':honeybee:',
@@ -1442,6 +2894,7 @@
'💥' => ':collision:',
'🪃' => ':boomerang:',
'👢' => ':boot:',
+ '⛹' => ':bouncing-ball-person:',
'💐' => ':bouquet:',
'🙇' => ':bow:',
'🏹' => ':bow-and-arrow:',
@@ -1467,13 +2920,13 @@
'🫧' => ':bubbles:',
'🪣' => ':bucket:',
'🐛' => ':bug:',
- '🏗' => ':construction-site:',
+ '🏗' => ':building-construction:',
'💡' => ':bulb:',
'🚅' => ':bullettrain-front:',
'🚄' => ':bullettrain-side:',
'🌯' => ':burrito:',
'🚌' => ':bus:',
- '🕴' => ':levitate:',
+ '🕴' => ':business-suit-levitating:',
'🚏' => ':busstop:',
'👤' => ':bust-in-silhouette:',
'👥' => ':busts-in-silhouette:',
@@ -1482,7 +2935,6 @@
'🌵' => ':cactus:',
'🍰' => ':cake:',
'📆' => ':calendar:',
- '🗓' => ':spiral-calendar:',
'🤙' => ':call-me-hand:',
'📲' => ':calling:',
'🐫' => ':camel:',
@@ -1499,7 +2951,7 @@
'🚗' => ':red-car:',
'🗃' => ':card-file-box:',
'📇' => ':card-index:',
- '🗂' => ':dividers:',
+ '🗂' => ':card-index-dividers:',
'🎠' => ':carousel-horse:',
'🪚' => ':carpentry-saw:',
'🥕' => ':carrot:',
@@ -1534,13 +2986,12 @@
'🌇' => ':city-sunrise:',
'🏙' => ':cityscape:',
'🆑' => ':cl:',
- '🗜' => ':compression:',
+ '🗜' => ':clamp:',
'👏' => ':clap:',
'🎬' => ':clapper:',
'🏛' => ':classical-building:',
'🧗' => ':person-climbing:',
'📋' => ':clipboard:',
- '🕰' => ':mantelpiece-clock:',
'🕐' => ':clock1:',
'🕑' => ':clock2:',
'🕒' => ':clock3:',
@@ -1570,10 +3021,9 @@
'🌂' => ':closed-umbrella:',
'☁' => ':cloud:',
'🌩' => ':cloud-with-lightning:',
+ '⛈' => ':cloud-with-lightning-and-rain:',
'🌧' => ':cloud-with-rain:',
'🌨' => ':cloud-with-snow:',
- '🌪' => ':tornado:',
- '⛈' => ':thunder-cloud-rain:',
'🤡' => ':clown-face:',
'♣' => ':clubs:',
'🧥' => ':coat:',
@@ -1588,7 +3038,7 @@
'☄' => ':comet:',
'🧭' => ':compass:',
'💻' => ':computer:',
- '🖱' => ':mouse-three-button:',
+ '🖱' => ':computer-mouse:',
'🎊' => ':confetti-ball:',
'😖' => ':confounded:',
'😕' => ':confused:',
@@ -1619,12 +3069,10 @@
'🏏' => ':cricket-game:',
'🐊' => ':crocodile:',
'🥐' => ':croissant:',
- '✝' => ':latin-cross:',
'🤞' => ':fingers-crossed:',
'🎌' => ':crossed-flags:',
'⚔' => ':crossed-swords:',
'👑' => ':crown:',
- '🛳' => ':passenger-ship:',
'🩼' => ':crutch:',
'😢' => ':cry:',
'😿' => ':crying-cat-face:',
@@ -1634,6 +3082,7 @@
'🧁' => ':cupcake:',
'💘' => ':cupid:',
'🥌' => ':curling-stone:',
+ '🦱' => ':curly-hair:',
'➰' => ':curly-loop:',
'💱' => ':currency-exchange:',
'🍛' => ':curry:',
@@ -1654,11 +3103,11 @@
'🌳' => ':deciduous-tree:',
'🦌' => ':deer:',
'🏬' => ':department-store:',
- '🏚' => ':house-abandoned:',
+ '🏚' => ':derelict-house:',
'🏜' => ':desert:',
- '🏝' => ':island:',
+ '🏝' => ':desert-island:',
'🖥' => ':desktop-computer:',
- '🕵' => ':spy:',
+ '🕵' => ':detective:',
'💠' => ':diamond-shape-with-a-dot-inside:',
'♦' => ':diamonds:',
'😞' => ':disappointed:',
@@ -1753,8 +3202,8 @@
'🏑' => ':field-hockey-stick-and-ball:',
'🗄' => ':file-cabinet:',
'📁' => ':file-folder:',
+ '📽' => ':film-projector:',
'🎞' => ':film-strip:',
- '📽' => ':projector:',
'🔥' => ':fire:',
'🚒' => ':fire-engine:',
'🧯' => ':fire-extinguisher:',
@@ -1768,7 +3217,6 @@
'✊' => ':fist-raised:',
'🤛' => ':left-facing-fist:',
'🤜' => ':right-facing-fist:',
- '🏳' => ':white-flag:',
'🎏' => ':flags:',
'🦩' => ':flamingo:',
'🔦' => ':flashlight:',
@@ -1790,10 +3238,9 @@
'🏈' => ':football:',
'👣' => ':footprints:',
'🍴' => ':fork-and-knife:',
- '🍽' => ':plate-with-cutlery:',
'🥠' => ':fortune-cookie:',
'⛲' => ':fountain:',
- '🖋' => ':pen-fountain:',
+ '🖋' => ':fountain-pen:',
'🍀' => ':four-leaf-clover:',
'🦊' => ':fox-face:',
'🖼' => ':framed-picture:',
@@ -1802,13 +3249,13 @@
'🍟' => ':fries:',
'🐸' => ':frog:',
'😦' => ':frowning:',
- '☹' => ':frowning2:',
+ '☹' => ':frowning-face:',
'🙍' => ':person-frowning:',
'🖕' => ':middle-finger:',
'⛽' => ':fuelpump:',
'🌕' => ':full-moon:',
'🌝' => ':full-moon-with-face:',
- '⚱' => ':urn:',
+ '⚱' => ':funeral-urn:',
'🎲' => ':game-die:',
'🧄' => ':garlic:',
'⚙' => ':gear:',
@@ -1852,12 +3299,11 @@
'💇' => ':haircut:',
'🍔' => ':hamburger:',
'🔨' => ':hammer:',
- '⚒' => ':hammer-pick:',
- '🛠' => ':tools:',
+ '⚒' => ':hammer-and-pick:',
+ '🛠' => ':hammer-and-wrench:',
'🪬' => ':hamsa:',
'🐹' => ':hamster:',
'✋' => ':raised-hand:',
- '🖐' => ':raised-hand-with-fingers-splayed:',
'🫰' => ':hand-with-index-finger-and-thumb-crossed:',
'👜' => ':handbag:',
'🤾' => ':handball-person:',
@@ -1870,7 +3316,6 @@
'🙉' => ':hear-no-evil:',
'❤' => ':heart:',
'💟' => ':heart-decoration:',
- '❣' => ':heavy-heart-exclamation:',
'😍' => ':heart-eyes:',
'😻' => ':heart-eyes-cat:',
'🫶' => ':heart-hands:',
@@ -1881,12 +3326,12 @@
'➗' => ':heavy-division-sign:',
'💲' => ':heavy-dollar-sign:',
'🟰' => ':heavy-equals-sign:',
+ '❣' => ':heavy-heart-exclamation:',
'➖' => ':heavy-minus-sign:',
'✖' => ':heavy-multiplication-x:',
'➕' => ':heavy-plus-sign:',
'🦔' => ':hedgehog:',
'🚁' => ':helicopter:',
- '⛑' => ':rescue-worker-helmet:',
'🌿' => ':herb:',
'🌺' => ':hibiscus:',
'🔆' => ':high-brightness:',
@@ -1897,7 +3342,6 @@
'🔪' => ':knife:',
'🏒' => ':ice-hockey-stick-and-puck:',
'🕳' => ':hole:',
- '🏘' => ':houses:',
'🍯' => ':honey-pot:',
'🪝' => ':hook:',
'🐴' => ':horse:',
@@ -1912,13 +3356,14 @@
'⏳' => ':hourglass-flowing-sand:',
'🏠' => ':house:',
'🏡' => ':house-with-garden:',
+ '🏘' => ':houses:',
'🤗' => ':hugs:',
'😯' => ':hushed:',
'🛖' => ':hut:',
'🪻' => ':hyacinth:',
'🤟' => ':love-you-gesture:',
- '🍨' => ':ice-cream:',
'🧊' => ':ice-cube:',
+ '🍨' => ':ice-cream:',
'⛸' => ':ice-skate:',
'🍦' => ':icecream:',
'🆔' => ':id:',
@@ -1943,7 +3388,7 @@
'🫙' => ':jar:',
'👖' => ':jeans:',
'🪼' => ':jellyfish:',
- '🧩' => ':jigsaw:',
+ '🧩' => ':puzzle-piece:',
'😂' => ':joy:',
'😹' => ':joy-cat:',
'🕹' => ':joystick:',
@@ -1951,7 +3396,6 @@
'🕋' => ':kaaba:',
'🦘' => ':kangaroo:',
'🔑' => ':key:',
- '🗝' => ':old-key:',
'⌨' => ':keyboard:',
'🔟' => ':ten:',
'🪯' => ':khanda:',
@@ -1965,7 +3409,7 @@
'😙' => ':kissing-smiling-eyes:',
'🪁' => ':kite:',
'🥝' => ':kiwifruit:',
- '🧎' => ':kneeling-person:',
+ '🧎' => ':person-kneeling:',
'🪢' => ':knot:',
'🐨' => ':koala:',
'🈁' => ':koko:',
@@ -1986,13 +3430,14 @@
'🟨' => ':yellow-square:',
'🌗' => ':last-quarter-moon:',
'🌜' => ':last-quarter-moon-with-face:',
+ '✝' => ':latin-cross:',
'😆' => ':satisfied:',
'🥬' => ':leafy-green:',
'🍃' => ':leaves:',
'📒' => ':ledger:',
'🛅' => ':left-luggage:',
'↔' => ':left-right-arrow:',
- '🗨' => ':speech-left:',
+ '🗨' => ':left-speech-bubble:',
'↩' => ':leftwards-arrow-with-hook:',
'🫲' => ':leftwards-hand:',
'🫷' => ':leftwards-pushing-hand:',
@@ -2002,7 +3447,6 @@
'🐆' => ':leopard:',
'🎚' => ':level-slider:',
'♎' => ':libra:',
- '🏋' => ':weight-lifting:',
'🩵' => ':light-blue-heart:',
'🚈' => ':light-rail:',
'🔗' => ':link:',
@@ -2044,14 +3488,13 @@
'🦣' => ':mammoth:',
'👨' => ':man:',
'🕺' => ':man-dancing:',
- '🤵' => ':person-in-tuxedo:',
'👲' => ':man-with-gua-pi-mao:',
'👳' => ':person-with-turban:',
'🍊' => ':tangerine:',
'🥭' => ':mango:',
'👞' => ':shoe:',
+ '🕰' => ':mantelpiece-clock:',
'🦽' => ':manual-wheelchair:',
- '🗺' => ':world-map:',
'🍁' => ':maple-leaf:',
'🪇' => ':maracas:',
'🥋' => ':martial-arts-uniform:',
@@ -2062,7 +3505,7 @@
'🦾' => ':mechanical-arm:',
'🦿' => ':mechanical-leg:',
'🏅' => ':sports-medal:',
- '🎖' => ':military-medal:',
+ '🎖' => ':medal-military:',
'⚕' => ':medical-symbol:',
'📣' => ':mega:',
'🍈' => ':melon:',
@@ -2075,7 +3518,6 @@
'🚇' => ':metro:',
'🦠' => ':microbe:',
'🎤' => ':microphone:',
- '🎙' => ':studio-microphone:',
'🔬' => ':microscope:',
'🪖' => ':military-helmet:',
'🌌' => ':milky-way:',
@@ -2096,7 +3538,7 @@
'🎓' => ':mortar-board:',
'🕌' => ':mosque:',
'🦟' => ':mosquito:',
- '🛥' => ':motorboat:',
+ '🛥' => ':motor-boat:',
'🛵' => ':motor-scooter:',
'🏍' => ':motorcycle:',
'🦼' => ':motorized-wheelchair:',
@@ -2121,7 +3563,7 @@
'🔇' => ':mute:',
'💅' => ':nail-care:',
'📛' => ':name-badge:',
- '🏞' => ':park:',
+ '🏞' => ':national-park:',
'🤢' => ':nauseated-face:',
'🧿' => ':nazar-amulet:',
'👔' => ':necktie:',
@@ -2134,8 +3576,8 @@
'🌑' => ':new-moon:',
'🌚' => ':new-moon-with-face:',
'📰' => ':newspaper:',
- '🗞' => ':newspaper2:',
- '⏭' => ':track-next:',
+ '🗞' => ':newspaper-roll:',
+ '⏭' => ':next-track-button:',
'🆖' => ':ng:',
'🌃' => ':night-with-stars:',
'🥷' => ':ninja:',
@@ -2152,7 +3594,6 @@
'👃' => ':nose:',
'📓' => ':notebook:',
'📔' => ':notebook-with-decorative-cover:',
- '🗒' => ':spiral-notepad:',
'🎶' => ':notes:',
'🔩' => ':nut-and-bolt:',
'⭕' => ':o:',
@@ -2166,11 +3607,12 @@
'🆗' => ':ok:',
'👌' => ':ok-hand:',
'🙆' => ':ok-woman:',
- '🧓' => ':older-adult:',
+ '🗝' => ':old-key:',
+ '🧓' => ':older-person:',
'👴' => ':older-man:',
'👵' => ':older-woman:',
'🫒' => ':olive:',
- '🕉' => ':om-symbol:',
+ '🕉' => ':om:',
'🔛' => ':on:',
'🚘' => ':oncoming-automobile:',
'🚍' => ':oncoming-bus:',
@@ -2181,7 +3623,7 @@
'📂' => ':open-file-folder:',
'👐' => ':open-hands:',
'😮' => ':open-mouth:',
- '☂' => ':umbrella2:',
+ '☂' => ':open-umbrella:',
'⛎' => ':ophiuchus:',
'📙' => ':orange-book:',
'🧡' => ':orange-heart:',
@@ -2212,6 +3654,7 @@
'〽' => ':part-alternation-mark:',
'⛅' => ':partly-sunny:',
'🥳' => ':partying-face:',
+ '🛳' => ':passenger-ship:',
'🛂' => ':passport-control:',
'⏸' => ':pause-button:',
'🫛' => ':pea-pod:',
@@ -2220,7 +3663,7 @@
'🦚' => ':peacock:',
'🥜' => ':peanuts:',
'🍐' => ':pear:',
- '🖊' => ':pen-ballpoint:',
+ '🖊' => ':pen:',
'✏' => ':pencil2:',
'🐧' => ':penguin:',
'😔' => ':pensive:',
@@ -2228,6 +3671,8 @@
'🎭' => ':performing-arts:',
'😣' => ':persevere:',
'🧖' => ':sauna-person:',
+ '🤵' => ':person-in-tuxedo:',
+ '🧍' => ':standing-person:',
'🫅' => ':person-with-crown:',
'🧕' => ':woman-with-headscarf:',
'🙎' => ':pouting-face:',
@@ -2250,7 +3695,8 @@
'🍕' => ':pizza:',
'🪧' => ':placard:',
'🛐' => ':place-of-worship:',
- '⏯' => ':play-pause:',
+ '🍽' => ':plate-with-cutlery:',
+ '⏯' => ':play-or-pause-button:',
'🛝' => ':playground-slide:',
'🥺' => ':pleading-face:',
'🪠' => ':plunger:',
@@ -2280,11 +3726,11 @@
'🫄' => ':pregnant-person:',
'🤰' => ':pregnant-woman:',
'🥨' => ':pretzel:',
- '⏮' => ':track-previous:',
+ '⏮' => ':previous-track-button:',
'🤴' => ':prince:',
'👸' => ':princess:',
'🖨' => ':printer:',
- '🦯' => ':probing-cane:',
+ '🦯' => ':white-cane:',
'💜' => ':purple-heart:',
'👛' => ':purse:',
'📌' => ':pushpin:',
@@ -2293,8 +3739,8 @@
'🐰' => ':rabbit:',
'🐇' => ':rabbit2:',
'🦝' => ':raccoon:',
- '🏎' => ':racing-car:',
'🐎' => ':racehorse:',
+ '🏎' => ':racing-car:',
'📻' => ':radio:',
'🔘' => ':radio-button:',
'☢' => ':radioactive:',
@@ -2302,6 +3748,7 @@
'🛤' => ':railway-track:',
'🌈' => ':rainbow:',
'🤚' => ':raised-back-of-hand:',
+ '🖐' => ':raised-hand-with-fingers-splayed:',
'🙌' => ':raised-hands:',
'🙋' => ':raising-hand:',
'🐏' => ':ram:',
@@ -2313,12 +3760,14 @@
'♻' => ':recycle:',
'🔴' => ':red-circle:',
'🧧' => ':red-envelope:',
+ '🦰' => ':red-hair:',
'®' => ':registered:',
'☺' => ':relaxed:',
'😌' => ':relieved:',
'🎗' => ':reminder-ribbon:',
'🔁' => ':repeat:',
'🔂' => ':repeat-one:',
+ '⛑' => ':rescue-worker-helmet:',
'🚻' => ':restroom:',
'💞' => ':revolving-hearts:',
'⏪' => ':rewind:',
@@ -2328,6 +3777,7 @@
'🍙' => ':rice-ball:',
'🍘' => ':rice-cracker:',
'🎑' => ':rice-scene:',
+ '🗯' => ':right-anger-bubble:',
'🫱' => ':rightwards-hand:',
'🫸' => ':rightwards-pushing-hand:',
'💍' => ':ring:',
@@ -2391,7 +3841,7 @@
'⛩' => ':shinto-shrine:',
'🚢' => ':ship:',
'👕' => ':tshirt:',
- '🛍' => ':shopping-bags:',
+ '🛍' => ':shopping:',
'🛒' => ':shopping-trolley:',
'🩳' => ':shorts:',
'🚿' => ':shower:',
@@ -2409,7 +3859,7 @@
'🏾' => ':tone4:',
'🏿' => ':tone5:',
'💀' => ':skull:',
- '☠' => ':skull-crossbones:',
+ '☠' => ':skull-and-crossbones:',
'🦨' => ':skunk:',
'🛷' => ':sled:',
'😴' => ':sleeping:',
@@ -2419,6 +3869,7 @@
'🙂' => ':slightly-smiling-face:',
'🎰' => ':slot-machine:',
'🦥' => ':sloth:',
+ '🛩' => ':small-airplane:',
'🔹' => ':small-blue-diamond:',
'🔸' => ':small-orange-diamond:',
'🔺' => ':small-red-triangle:',
@@ -2439,7 +3890,7 @@
'🏂' => ':snowboarder:',
'❄' => ':snowflake:',
'⛄' => ':snowman-without-snow:',
- '☃' => ':snowman2:',
+ '☃' => ':snowman-with-snow:',
'🧼' => ':soap:',
'😭' => ':sob:',
'⚽' => ':soccer:',
@@ -2462,12 +3913,13 @@
'🚤' => ':speedboat:',
'🕷' => ':spider:',
'🕸' => ':spider-web:',
+ '🗓' => ':spiral-calendar:',
+ '🗒' => ':spiral-notepad:',
'🖖' => ':vulcan-salute:',
'🧽' => ':sponge:',
'🥄' => ':spoon:',
'🦑' => ':squid:',
'🏟' => ':stadium:',
- '🧍' => ':standing-person:',
'⭐' => ':star:',
'☪' => ':star-and-crescent:',
'✡' => ':star-of-david:',
@@ -2486,10 +3938,11 @@
'😛' => ':stuck-out-tongue:',
'😝' => ':stuck-out-tongue-closed-eyes:',
'😜' => ':stuck-out-tongue-winking-eye:',
+ '🎙' => ':studio-microphone:',
'🥙' => ':stuffed-flatbread:',
- '🌥' => ':white-sun-cloud:',
- '🌦' => ':white-sun-rain-cloud:',
- '🌤' => ':white-sun-small-cloud:',
+ '🌥' => ':sun-behind-large-cloud:',
+ '🌦' => ':sun-behind-rain-cloud:',
+ '🌤' => ':sun-behind-small-cloud:',
'🌞' => ':sun-with-face:',
'🌻' => ':sunflower:',
'😎' => ':sunglasses:',
@@ -2547,6 +4000,7 @@
'🪥' => ':toothbrush:',
'🔝' => ':top:',
'🎩' => ':tophat:',
+ '🌪' => ':tornado:',
'🖲' => ':trackball:',
'🚜' => ':tractor:',
'🚥' => ':traffic-light:',
@@ -2620,6 +4074,7 @@
'🚾' => ':wc:',
'😩' => ':weary:',
'💒' => ':wedding:',
+ '🏋' => ':weight-lifting:',
'🐳' => ':whale:',
'🐋' => ':whale2:',
'🛞' => ':wheel:',
@@ -2627,7 +4082,9 @@
'♿' => ':wheelchair:',
'✅' => ':white-check-mark:',
'⚪' => ':white-circle:',
+ '🏳' => ':white-flag:',
'💮' => ':white-flower:',
+ '🦳' => ':white-hair:',
'🤍' => ':white-heart:',
'⬜' => ':white-large-square:',
'◽' => ':white-medium-small-square:',
@@ -2635,8 +4092,8 @@
'▫' => ':white-small-square:',
'🔳' => ':white-square-button:',
'🥀' => ':wilted-rose:',
- '🌬' => ':wind-face:',
'🎐' => ':wind-chime:',
+ '🌬' => ':wind-face:',
'🪟' => ':window:',
'🍷' => ':wine-glass:',
'🪽' => ':wing:',
@@ -2649,6 +4106,7 @@
'🚺' => ':womens:',
'🪵' => ':wood:',
'🥴' => ':woozy-face:',
+ '🗺' => ':world-map:',
'🪱' => ':worm:',
'😟' => ':worried:',
'🔧' => ':wrench:',
diff --git a/src/Symfony/Component/Emoji/Resources/data/gitlab-emoji.php b/src/Symfony/Component/Emoji/Resources/data/gitlab-emoji.php
index 972f40abb9d13..3ef1c90e235f1 100644
--- a/src/Symfony/Component/Emoji/Resources/data/gitlab-emoji.php
+++ b/src/Symfony/Component/Emoji/Resources/data/gitlab-emoji.php
@@ -1,207 +1,37 @@
'👍',
- ':-1:' => '👎',
- ':admission_tickets:' => '🎟',
- ':anguished:' => '😧',
- ':archery:' => '🏹',
- ':atom_symbol:' => '⚛',
- ':back_of_hand:' => '🤚',
- ':baguette_bread:' => '🥖',
- ':ballot_box_with_ballot:' => '🗳',
- ':beach_with_umbrella:' => '🏖',
- ':bellhop_bell:' => '🛎',
- ':biohazard_sign:' => '☣',
- ':bottle_with_popping_cork:' => '🍾',
- ':boxing_gloves:' => '🥊',
- ':building_construction:' => '🏗',
- ':call_me_hand:' => '🤙',
- ':card_file_box:' => '🗃',
- ':card_index_dividers:' => '🗂',
- ':cheese_wedge:' => '🧀',
- ':city_sunrise:' => '🌇',
- ':clinking_glass:' => '🥂',
- ':cloud_with_lightning:' => '🌩',
- ':cloud_with_rain:' => '🌧',
- ':cloud_with_snow:' => '🌨',
- ':cloud_with_tornado:' => '🌪',
- ':clown_face:' => '🤡',
- ':couch_and_lamp:' => '🛋',
- ':cricket_bat_ball:' => '🏏',
- ':dagger_knife:' => '🗡',
- ':derelict_house_building:' => '🏚',
- ':desert_island:' => '🏝',
- ':desktop_computer:' => '🖥',
- ':double_vertical_bar:' => '⏸',
- ':dove_of_peace:' => '🕊',
- ':drool:' => '🤤',
- ':drum_with_drumsticks:' => '🥁',
- ':eject_symbol:' => '⏏',
- ':email:' => '📧',
- ':expecting_woman:' => '🤰',
- ':face_with_cowboy_hat:' => '🤠',
- ':face_with_head_bandage:' => '🤕',
- ':face_with_rolling_eyes:' => '🙄',
- ':face_with_thermometer:' => '🤒',
- ':facepalm:' => '🤦',
- ':fencing:' => '🤺',
- ':film_projector:' => '📽',
- ':first_place_medal:' => '🥇',
- ':flame:' => '🔥',
- ':fork_and_knife_with_plate:' => '🍽',
- ':fox_face:' => '🦊',
- ':frame_with_picture:' => '🖼',
- ':funeral_urn:' => '⚱',
- ':glass_of_milk:' => '🥛',
- ':goal_net:' => '🥅',
- ':grandma:' => '👵',
- ':green_salad:' => '🥗',
- ':hammer_and_pick:' => '⚒',
- ':hammer_and_wrench:' => '🛠',
- ':hand_with_index_and_middle_finger_crossed:' => '🤞',
- ':hankey:' => '💩',
- ':heavy_heart_exclamation_mark_ornament:' => '❣',
- ':helmet_with_white_cross:' => '⛑',
- ':hot_dog:' => '🌭',
- ':house_buildings:' => '🏘',
- ':hugging_face:' => '🤗',
- ':juggler:' => '🤹',
- ':karate_uniform:' => '🥋',
- ':kayak:' => '🛶',
- ':kiwifruit:' => '🥝',
- ':latin_cross:' => '✝',
- ':left_fist:' => '🤛',
- ':left_speech_bubble:' => '🗨',
- ':liar:' => '🤥',
- ':linked_paperclips:' => '🖇',
- ':lion:' => '🦁',
- ':lower_left_ballpoint_pen:' => '🖊',
- ':lower_left_crayon:' => '🖍',
- ':lower_left_fountain_pen:' => '🖋',
- ':lower_left_paintbrush:' => '🖌',
- ':male_dancer:' => '🕺',
- ':man_in_business_suit_levitating:' => '🕴',
- ':mantlepiece_clock:' => '🕰',
- ':memo:' => '📝',
- ':money_mouth_face:' => '🤑',
- ':mother_christmas:' => '🤶',
- ':motorbike:' => '🛵',
- ':national_park:' => '🏞',
- ':nerd_face:' => '🤓',
- ':next_track:' => '⏭',
- ':oil_drum:' => '🛢',
- ':old_key:' => '🗝',
- ':paella:' => '🥘',
- ':passenger_ship:' => '🛳',
- ':peace_symbol:' => '☮',
- ':person_doing_cartwheel:' => '🤸',
- ':person_with_ball:' => '⛹',
- ':poo:' => '💩',
- ':previous_track:' => '⏮',
- ':racing_car:' => '🏎',
- ':racing_motorcycle:' => '🏍',
- ':radioactive_sign:' => '☢',
- ':railroad_track:' => '🛤',
- ':raised_hand_with_fingers_splayed:' => '🖐',
- ':raised_hand_with_part_between_middle_and_ring_fingers:' => '🖖',
- ':reversed_hand_with_middle_finger_extended:' => '🖕',
- ':rhinoceros:' => '🦏',
- ':right_anger_bubble:' => '🗯',
- ':right_fist:' => '🤜',
- ':robot_face:' => '🤖',
- ':rolled_up_newspaper:' => '🗞',
- ':rolling_on_the_floor_laughing:' => '🤣',
- ':satisfied:' => '😆',
- ':second_place_medal:' => '🥈',
- ':shaking_hands:' => '🤝',
- ':shelled_peanut:' => '🥜',
- ':shit:' => '💩',
- ':shopping_trolley:' => '🛒',
- ':sick:' => '🤢',
- ':sign_of_the_horns:' => '🤘',
- ':skeleton:' => '💀',
- ':skull_and_crossbones:' => '☠',
- ':sleuth_or_spy:' => '🕵',
- ':slightly_frowning_face:' => '🙁',
- ':slightly_smiling_face:' => '🙂',
- ':small_airplane:' => '🛩',
- ':sneeze:' => '🤧',
- ':snow_capped_mountain:' => '🏔',
- ':speaking_head_in_silhouette:' => '🗣',
- ':spiral_calendar_pad:' => '🗓',
- ':spiral_note_pad:' => '🗒',
- ':sports_medal:' => '🏅',
- ':stop_sign:' => '🛑',
- ':studio_microphone:' => '🎙',
- ':stuffed_pita:' => '🥙',
- ':table_tennis:' => '🏓',
- ':thinking_face:' => '🤔',
- ':third_place_medal:' => '🥉',
- ':three_button_mouse:' => '🖱',
- ':thunder_cloud_and_rain:' => '⛈',
- ':timer_clock:' => '⏲',
- ':umbrella_on_ground:' => '⛱',
- ':unicorn_face:' => '🦄',
- ':upside_down_face:' => '🙃',
- ':waving_black_flag:' => '🏴',
- ':waving_white_flag:' => '🏳',
- ':weight_lifter:' => '🏋',
- ':whisky:' => '🥃',
- ':white_frowning_face:' => '☹',
- ':white_sun_behind_cloud:' => '🌥',
- ':white_sun_behind_cloud_with_rain:' => '🌦',
- ':white_sun_with_small_cloud:' => '🌤',
- ':wilted_flower:' => '🥀',
- ':world_map:' => '🗺',
- ':worship_symbol:' => '🛐',
- ':wrestling:' => '🤼',
- ':zipper_mouth_face:' => '🤐',
':8ball:' => '🎱',
':100:' => '💯',
':1234:' => '🔢',
- ':a:' => '🅰',
':ab:' => '🆎',
+ ':abacus:' => '🧮',
':abc:' => '🔤',
':abcd:' => '🔡',
':accept:' => '🉑',
+ ':accordion:' => '🪗',
+ ':adhesive_bandage:' => '🩹',
':aerial_tramway:' => '🚡',
- ':airplane:' => '✈',
':airplane_arriving:' => '🛬',
':airplane_departure:' => '🛫',
- ':airplane_small:' => '🛩',
':alarm_clock:' => '⏰',
- ':alembic:' => '⚗',
':alien:' => '👽',
':ambulance:' => '🚑',
':amphora:' => '🏺',
+ ':anatomical_heart:' => '🫀',
':anchor:' => '⚓',
':angel:' => '👼',
':anger:' => '💢',
- ':anger_right:' => '🗯',
':angry:' => '😠',
+ ':anguished:' => '😧',
':ant:' => '🐜',
':apple:' => '🍎',
':aquarius:' => '♒',
':aries:' => '♈',
- ':arrow_backward:' => '◀',
':arrow_double_down:' => '⏬',
':arrow_double_up:' => '⏫',
- ':arrow_down:' => '⬇',
':arrow_down_small:' => '🔽',
- ':arrow_forward:' => '▶',
- ':arrow_heading_down:' => '⤵',
- ':arrow_heading_up:' => '⤴',
- ':arrow_left:' => '⬅',
- ':arrow_lower_left:' => '↙',
- ':arrow_lower_right:' => '↘',
- ':arrow_right:' => '➡',
- ':arrow_right_hook:' => '↪',
- ':arrow_up:' => '⬆',
- ':arrow_up_down:' => '↕',
':arrow_up_small:' => '🔼',
- ':arrow_upper_left:' => '↖',
- ':arrow_upper_right:' => '↗',
':arrows_clockwise:' => '🔃',
':arrows_counterclockwise:' => '🔄',
':art:' => '🎨',
@@ -209,85 +39,103 @@
':astonished:' => '😲',
':athletic_shoe:' => '👟',
':atm:' => '🏧',
- ':atom:' => '⚛',
+ ':auto_rickshaw:' => '🛺',
':avocado:' => '🥑',
- ':b:' => '🅱',
+ ':axe:' => '🪓',
':baby:' => '👶',
':baby_bottle:' => '🍼',
':baby_chick:' => '🐤',
':baby_symbol:' => '🚼',
':back:' => '🔙',
':bacon:' => '🥓',
+ ':badger:' => '🦡',
':badminton:' => '🏸',
+ ':bagel:' => '🥯',
':baggage_claim:' => '🛄',
+ ':bald:' => '🦲',
+ ':ballet_shoes:' => '🩰',
':balloon:' => '🎈',
- ':ballot_box:' => '🗳',
- ':ballot_box_with_check:' => '☑',
':bamboo:' => '🎍',
':banana:' => '🍌',
- ':bangbang:' => '‼',
+ ':banjo:' => '🪕',
':bank:' => '🏦',
':bar_chart:' => '📊',
':barber:' => '💈',
':baseball:' => '⚾',
+ ':basket:' => '🧺',
':basketball:' => '🏀',
- ':basketball_player:' => '⛹',
':bat:' => '🦇',
':bath:' => '🛀',
':bathtub:' => '🛁',
':battery:' => '🔋',
- ':beach:' => '🏖',
- ':beach_umbrella:' => '⛱',
+ ':beans:' => '🫘',
':bear:' => '🐻',
- ':bed:' => '🛏',
+ ':beaver:' => '🦫',
':bee:' => '🐝',
':beer:' => '🍺',
':beers:' => '🍻',
':beetle:' => '🐞',
':beginner:' => '🔰',
':bell:' => '🔔',
- ':bellhop:' => '🛎',
+ ':bell_pepper:' => '🫑',
':bento:' => '🍱',
+ ':beverage_box:' => '🧃',
':bicyclist:' => '🚴',
':bike:' => '🚲',
':bikini:' => '👙',
- ':biohazard:' => '☣',
+ ':billed_cap:' => '🧢',
':bird:' => '🐦',
':birthday:' => '🎂',
+ ':bison:' => '🦬',
+ ':biting_lip:' => '🫦',
':black_circle:' => '⚫',
':black_heart:' => '🖤',
':black_joker:' => '🃏',
':black_large_square:' => '⬛',
':black_medium_small_square:' => '◾',
- ':black_medium_square:' => '◼',
- ':black_nib:' => '✒',
- ':black_small_square:' => '▪',
':black_square_button:' => '🔲',
':blossom:' => '🌼',
':blowfish:' => '🐡',
':blue_book:' => '📘',
':blue_car:' => '🚙',
':blue_heart:' => '💙',
+ ':blue_square:' => '🟦',
+ ':blueberries:' => '🫐',
':blush:' => '😊',
':boar:' => '🐗',
':bomb:' => '💣',
+ ':bone:' => '🦴',
':book:' => '📖',
':bookmark:' => '🔖',
':bookmark_tabs:' => '📑',
':books:' => '📚',
':boom:' => '💥',
+ ':boomerang:' => '🪃',
':boot:' => '👢',
':bouquet:' => '💐',
':bow:' => '🙇',
':bow_and_arrow:' => '🏹',
+ ':bowl_with_spoon:' => '🥣',
':bowling:' => '🎳',
':boxing_glove:' => '🥊',
':boy:' => '👦',
+ ':brain:' => '🧠',
':bread:' => '🍞',
+ ':breast_feeding:' => '🤱',
+ ':brick:' => '🧱',
':bride_with_veil:' => '👰',
':bridge_at_night:' => '🌉',
':briefcase:' => '💼',
+ ':briefs:' => '🩲',
+ ':broccoli:' => '🥦',
':broken_heart:' => '💔',
+ ':broom:' => '🧹',
+ ':brown_circle:' => '🟤',
+ ':brown_heart:' => '🤎',
+ ':brown_square:' => '🟫',
+ ':bubble_tea:' => '🧋',
+ ':bubbles:' => '🫧',
+ ':bucket:' => '🪣',
':bug:' => '🐛',
':bulb:' => '💡',
':bullettrain_front:' => '🚅',
@@ -297,32 +145,31 @@
':busstop:' => '🚏',
':bust_in_silhouette:' => '👤',
':busts_in_silhouette:' => '👥',
+ ':butter:' => '🧈',
':butterfly:' => '🦋',
':cactus:' => '🌵',
':cake:' => '🍰',
':calendar:' => '📆',
- ':calendar_spiral:' => '🗓',
':call_me:' => '🤙',
':calling:' => '📲',
':camel:' => '🐫',
':camera:' => '📷',
':camera_with_flash:' => '📸',
- ':camping:' => '🏕',
':cancer:' => '♋',
- ':candle:' => '🕯',
':candy:' => '🍬',
+ ':canned_food:' => '🥫',
':canoe:' => '🛶',
':capital_abcd:' => '🔠',
':capricorn:' => '♑',
- ':card_box:' => '🗃',
':card_index:' => '📇',
':carousel_horse:' => '🎠',
+ ':carpentry_saw:' => '🪚',
':carrot:' => '🥕',
':cartwheel:' => '🤸',
':cat:' => '🐱',
':cat2:' => '🐈',
':cd:' => '💿',
- ':chains:' => '⛓',
+ ':chair:' => '🪑',
':champagne:' => '🍾',
':champagne_glass:' => '🥂',
':chart:' => '💹',
@@ -334,22 +181,20 @@
':cherry_blossom:' => '🌸',
':chestnut:' => '🌰',
':chicken:' => '🐔',
+ ':child:' => '🧒',
':children_crossing:' => '🚸',
- ':chipmunk:' => '🐿',
':chocolate_bar:' => '🍫',
+ ':chopsticks:' => '🥢',
':christmas_tree:' => '🎄',
':church:' => '⛪',
':cinema:' => '🎦',
':circus_tent:' => '🎪',
':city_dusk:' => '🌆',
':city_sunset:' => '🌇',
- ':cityscape:' => '🏙',
':cl:' => '🆑',
':clap:' => '👏',
':clapper:' => '🎬',
- ':classical_building:' => '🏛',
':clipboard:' => '📋',
- ':clock:' => '🕰',
':clock1:' => '🕐',
':clock2:' => '🕑',
':clock3:' => '🕒',
@@ -377,36 +222,29 @@
':closed_book:' => '📕',
':closed_lock_with_key:' => '🔐',
':closed_umbrella:' => '🌂',
- ':cloud:' => '☁',
- ':cloud_lightning:' => '🌩',
- ':cloud_rain:' => '🌧',
- ':cloud_snow:' => '🌨',
- ':cloud_tornado:' => '🌪',
':clown:' => '🤡',
- ':clubs:' => '♣',
+ ':coat:' => '🧥',
+ ':cockroach:' => '🪳',
':cocktail:' => '🍸',
+ ':coconut:' => '🥥',
':coffee:' => '☕',
- ':coffin:' => '⚰',
+ ':coin:' => '🪙',
+ ':cold_face:' => '🥶',
':cold_sweat:' => '😰',
- ':comet:' => '☄',
- ':compression:' => '🗜',
+ ':compass:' => '🧭',
':computer:' => '💻',
':confetti_ball:' => '🎊',
':confounded:' => '😖',
':confused:' => '😕',
- ':congratulations:' => '㊗',
':construction:' => '🚧',
- ':construction_site:' => '🏗',
':construction_worker:' => '👷',
- ':control_knobs:' => '🎛',
':convenience_store:' => '🏪',
':cookie:' => '🍪',
':cooking:' => '🍳',
':cool:' => '🆒',
':cop:' => '👮',
- ':copyright:' => '©',
+ ':coral:' => '🪸',
':corn:' => '🌽',
- ':couch:' => '🛋',
':couple:' => '👫',
':couple_with_heart:' => '💑',
':couplekiss:' => '💏',
@@ -414,110 +252,126 @@
':cow2:' => '🐄',
':cowboy:' => '🤠',
':crab:' => '🦀',
- ':crayon:' => '🖍',
':credit_card:' => '💳',
':crescent_moon:' => '🌙',
':cricket:' => '🏏',
':crocodile:' => '🐊',
':croissant:' => '🥐',
- ':cross:' => '✝',
':crossed_flags:' => '🎌',
- ':crossed_swords:' => '⚔',
':crown:' => '👑',
- ':cruise_ship:' => '🛳',
+ ':crutch:' => '🩼',
':cry:' => '😢',
':crying_cat_face:' => '😿',
':crystal_ball:' => '🔮',
':cucumber:' => '🥒',
+ ':cup_with_straw:' => '🥤',
+ ':cupcake:' => '🧁',
':cupid:' => '💘',
+ ':curling_stone:' => '🥌',
+ ':curly_hair:' => '🦱',
':curly_loop:' => '➰',
':currency_exchange:' => '💱',
':curry:' => '🍛',
':custard:' => '🍮',
':customs:' => '🛃',
+ ':cut_of_meat:' => '🥩',
':cyclone:' => '🌀',
- ':dagger:' => '🗡',
':dancer:' => '💃',
':dancers:' => '👯',
':dango:' => '🍡',
- ':dark_sunglasses:' => '🕶',
':dart:' => '🎯',
':dash:' => '💨',
':date:' => '📅',
+ ':deaf_person:' => '🧏',
':deciduous_tree:' => '🌳',
':deer:' => '🦌',
':department_store:' => '🏬',
- ':desert:' => '🏜',
- ':desktop:' => '🖥',
':diamond_shape_with_a_dot_inside:' => '💠',
- ':diamonds:' => '♦',
':disappointed:' => '😞',
':disappointed_relieved:' => '😥',
- ':dividers:' => '🗂',
+ ':disguised_face:' => '🥸',
+ ':diving_mask:' => '🤿',
+ ':diya_lamp:' => '🪔',
':dizzy:' => '💫',
':dizzy_face:' => '😵',
+ ':dna:' => '🧬',
':do_not_litter:' => '🚯',
+ ':dodo:' => '🦤',
':dog:' => '🐶',
':dog2:' => '🐕',
':dollar:' => '💵',
':dolls:' => '🎎',
':dolphin:' => '🐬',
+ ':donkey:' => '🫏',
':door:' => '🚪',
+ ':dotted_line_face:' => '🫥',
':doughnut:' => '🍩',
- ':dove:' => '🕊',
':dragon:' => '🐉',
':dragon_face:' => '🐲',
':dress:' => '👗',
':dromedary_camel:' => '🐪',
':drooling_face:' => '🤤',
+ ':drop_of_blood:' => '🩸',
':droplet:' => '💧',
':drum:' => '🥁',
':duck:' => '🦆',
+ ':dumpling:' => '🥟',
':dvd:' => '📀',
':e-mail:' => '📧',
':eagle:' => '🦅',
':ear:' => '👂',
':ear_of_rice:' => '🌾',
+ ':ear_with_hearing_aid:' => '🦻',
':earth_africa:' => '🌍',
':earth_americas:' => '🌎',
':earth_asia:' => '🌏',
':egg:' => '🥚',
':eggplant:' => '🍆',
- ':eight_pointed_black_star:' => '✴',
- ':eight_spoked_asterisk:' => '✳',
- ':eject:' => '⏏',
':electric_plug:' => '🔌',
':elephant:' => '🐘',
+ ':elevator:' => '🛗',
+ ':elf:' => '🧝',
+ ':empty_nest:' => '🪹',
':end:' => '🔚',
- ':envelope:' => '✉',
':envelope_with_arrow:' => '📩',
':euro:' => '💶',
':european_castle:' => '🏰',
':european_post_office:' => '🏤',
':evergreen_tree:' => '🌲',
':exclamation:' => '❗',
+ ':exploding_head:' => '🤯',
':expressionless:' => '😑',
- ':eye:' => '👁',
':eyeglasses:' => '👓',
':eyes:' => '👀',
+ ':face_holding_back_tears:' => '🥹',
':face_palm:' => '🤦',
+ ':face_vomiting:' => '🤮',
+ ':face_with_diagonal_mouth:' => '🫤',
+ ':face_with_hand_over_mouth:' => '🤭',
+ ':face_with_monocle:' => '🧐',
+ ':face_with_open_eyes_and_hand_over_mouth:' => '🫢',
+ ':face_with_peeking_eye:' => '🫣',
+ ':face_with_raised_eyebrow:' => '🤨',
+ ':face_with_symbols_on_mouth:' => '🤬',
':factory:' => '🏭',
+ ':fairy:' => '🧚',
+ ':falafel:' => '🧆',
':fallen_leaf:' => '🍂',
':family:' => '👪',
':fast_forward:' => '⏩',
':fax:' => '📠',
':fearful:' => '😨',
+ ':feather:' => '🪶',
':feet:' => '🐾',
':fencer:' => '🤺',
':ferris_wheel:' => '🎡',
- ':ferry:' => '⛴',
':field_hockey:' => '🏑',
- ':file_cabinet:' => '🗄',
':file_folder:' => '📁',
- ':film_frames:' => '🎞',
':fingers_crossed:' => '🤞',
':fire:' => '🔥',
':fire_engine:' => '🚒',
+ ':fire_extinguisher:' => '🧯',
+ ':firecracker:' => '🧨',
':fireworks:' => '🎆',
':first_place:' => '🥇',
':first_quarter_moon:' => '🌓',
@@ -527,65 +381,80 @@
':fishing_pole_and_fish:' => '🎣',
':fist:' => '✊',
':flag_black:' => '🏴',
- ':flag_white:' => '🏳',
':flags:' => '🎏',
+ ':flamingo:' => '🦩',
':flashlight:' => '🔦',
- ':fleur-de-lis:' => '⚜',
+ ':flat_shoe:' => '🥿',
+ ':flatbread:' => '🫓',
':floppy_disk:' => '💾',
':flower_playing_cards:' => '🎴',
':flushed:' => '😳',
- ':fog:' => '🌫',
+ ':flute:' => '🪈',
+ ':fly:' => '🪰',
+ ':flying_disc:' => '🥏',
+ ':flying_saucer:' => '🛸',
':foggy:' => '🌁',
+ ':folding_hand_fan:' => '🪭',
+ ':fondue:' => '🫕',
+ ':foot:' => '🦶',
':football:' => '🏈',
':footprints:' => '👣',
':fork_and_knife:' => '🍴',
- ':fork_knife_plate:' => '🍽',
+ ':fortune_cookie:' => '🥠',
':fountain:' => '⛲',
':four_leaf_clover:' => '🍀',
':fox:' => '🦊',
- ':frame_photo:' => '🖼',
':free:' => '🆓',
':french_bread:' => '🥖',
':fried_shrimp:' => '🍤',
':fries:' => '🍟',
':frog:' => '🐸',
':frowning:' => '😦',
- ':frowning2:' => '☹',
':fuelpump:' => '⛽',
':full_moon:' => '🌕',
':full_moon_with_face:' => '🌝',
':game_die:' => '🎲',
- ':gear:' => '⚙',
+ ':garlic:' => '🧄',
':gem:' => '💎',
':gemini:' => '♊',
+ ':genie:' => '🧞',
':ghost:' => '👻',
':gift:' => '🎁',
':gift_heart:' => '💝',
+ ':ginger_root:' => '🫚',
+ ':giraffe:' => '🦒',
':girl:' => '👧',
':globe_with_meridians:' => '🌐',
+ ':gloves:' => '🧤',
':goal:' => '🥅',
':goat:' => '🐐',
+ ':goggles:' => '🥽',
':golf:' => '⛳',
- ':golfer:' => '🏌',
+ ':goose:' => '🪿',
':gorilla:' => '🦍',
':grapes:' => '🍇',
':green_apple:' => '🍏',
':green_book:' => '📗',
+ ':green_circle:' => '🟢',
':green_heart:' => '💚',
+ ':green_square:' => '🟩',
':grey_exclamation:' => '❕',
+ ':grey_heart:' => '🩶',
':grey_question:' => '❔',
':grimacing:' => '😬',
':grin:' => '😁',
':grinning:' => '😀',
':guardsman:' => '💂',
+ ':guide_dog:' => '🦮',
':guitar:' => '🎸',
':gun:' => '🔫',
+ ':hair_pick:' => '🪮',
':haircut:' => '💇',
':hamburger:' => '🍔',
':hammer:' => '🔨',
- ':hammer_pick:' => '⚒',
+ ':hamsa:' => '🪬',
':hamster:' => '🐹',
- ':hand_splayed:' => '🖐',
+ ':hand_with_index_finger_and_thumb_crossed:' => '🫰',
':handbag:' => '👜',
':handball:' => '🤾',
':handshake:' => '🤝',
@@ -593,74 +462,74 @@
':hatching_chick:' => '🐣',
':head_bandage:' => '🤕',
':headphones:' => '🎧',
+ ':headstone:' => '🪦',
':hear_no_evil:' => '🙉',
- ':heart:' => '❤',
':heart_decoration:' => '💟',
- ':heart_exclamation:' => '❣',
':heart_eyes:' => '😍',
':heart_eyes_cat:' => '😻',
+ ':heart_hands:' => '🫶',
':heartbeat:' => '💓',
':heartpulse:' => '💗',
- ':hearts:' => '♥',
- ':heavy_check_mark:' => '✔',
':heavy_division_sign:' => '➗',
':heavy_dollar_sign:' => '💲',
+ ':heavy_equals_sign:' => '🟰',
':heavy_minus_sign:' => '➖',
- ':heavy_multiplication_x:' => '✖',
':heavy_plus_sign:' => '➕',
+ ':hedgehog:' => '🦔',
':helicopter:' => '🚁',
- ':helmet_with_cross:' => '⛑',
':herb:' => '🌿',
':hibiscus:' => '🌺',
':high_brightness:' => '🔆',
':high_heel:' => '👠',
+ ':hiking_boot:' => '🥾',
+ ':hindu_temple:' => '🛕',
+ ':hippopotamus:' => '🦛',
':hockey:' => '🏒',
- ':hole:' => '🕳',
- ':homes:' => '🏘',
':honey_pot:' => '🍯',
+ ':hook:' => '🪝',
':horse:' => '🐴',
':horse_racing:' => '🏇',
':hospital:' => '🏥',
- ':hot_pepper:' => '🌶',
+ ':hot_face:' => '🥵',
':hotdog:' => '🌭',
':hotel:' => '🏨',
- ':hotsprings:' => '♨',
':hourglass:' => '⌛',
':hourglass_flowing_sand:' => '⏳',
':house:' => '🏠',
- ':house_abandoned:' => '🏚',
':house_with_garden:' => '🏡',
':hugging:' => '🤗',
':hushed:' => '😯',
+ ':hut:' => '🛖',
+ ':hyacinth:' => '🪻',
+ ':ice:' => '🧊',
':ice_cream:' => '🍨',
- ':ice_skate:' => '⛸',
':icecream:' => '🍦',
':id:' => '🆔',
+ ':identification_card:' => '🪪',
':ideograph_advantage:' => '🉐',
':imp:' => '👿',
':inbox_tray:' => '📥',
':incoming_envelope:' => '📨',
+ ':index_pointing_at_the_viewer:' => '🫵',
':information_desk_person:' => '💁',
- ':information_source:' => 'ℹ',
':innocent:' => '😇',
- ':interrobang:' => '⁉',
':iphone:' => '📱',
- ':island:' => '🏝',
':izakaya_lantern:' => '🏮',
':jack_o_lantern:' => '🎃',
':japan:' => '🗾',
':japanese_castle:' => '🏯',
':japanese_goblin:' => '👺',
':japanese_ogre:' => '👹',
+ ':jar:' => '🫙',
':jeans:' => '👖',
+ ':jellyfish:' => '🪼',
':joy:' => '😂',
':joy_cat:' => '😹',
- ':joystick:' => '🕹',
':juggling:' => '🤹',
':kaaba:' => '🕋',
+ ':kangaroo:' => '🦘',
':key:' => '🔑',
- ':key2:' => '🗝',
- ':keyboard:' => '⌨',
+ ':khanda:' => '🪯',
':kimono:' => '👘',
':kiss:' => '💋',
':kissing:' => '😗',
@@ -668,82 +537,106 @@
':kissing_closed_eyes:' => '😚',
':kissing_heart:' => '😘',
':kissing_smiling_eyes:' => '😙',
+ ':kite:' => '🪁',
':kiwi:' => '🥝',
':knife:' => '🔪',
+ ':knot:' => '🪢',
':koala:' => '🐨',
':koko:' => '🈁',
- ':label:' => '🏷',
+ ':lab_coat:' => '🥼',
+ ':lacrosse:' => '🥍',
+ ':ladder:' => '🪜',
':large_blue_circle:' => '🔵',
':large_blue_diamond:' => '🔷',
':large_orange_diamond:' => '🔶',
':last_quarter_moon:' => '🌗',
':last_quarter_moon_with_face:' => '🌜',
':laughing:' => '😆',
+ ':leafy_green:' => '🥬',
':leaves:' => '🍃',
':ledger:' => '📒',
':left_facing_fist:' => '🤛',
':left_luggage:' => '🛅',
- ':left_right_arrow:' => '↔',
- ':leftwards_arrow_with_hook:' => '↩',
+ ':leftwards_hand:' => '🫲',
+ ':leftwards_pushing_hand:' => '🫷',
+ ':leg:' => '🦵',
':lemon:' => '🍋',
':leo:' => '♌',
':leopard:' => '🐆',
- ':level_slider:' => '🎚',
- ':levitate:' => '🕴',
':libra:' => '♎',
- ':lifter:' => '🏋',
+ ':light_blue_heart:' => '🩵',
':light_rail:' => '🚈',
':link:' => '🔗',
':lion_face:' => '🦁',
':lips:' => '👄',
':lipstick:' => '💄',
':lizard:' => '🦎',
+ ':llama:' => '🦙',
+ ':lobster:' => '🦞',
':lock:' => '🔒',
':lock_with_ink_pen:' => '🔏',
':lollipop:' => '🍭',
+ ':long_drum:' => '🪘',
':loop:' => '➿',
+ ':lotion_bottle:' => '🧴',
+ ':lotus:' => '🪷',
':loud_sound:' => '🔊',
':loudspeaker:' => '📢',
':love_hotel:' => '🏩',
':love_letter:' => '💌',
+ ':love_you_gesture:' => '🤟',
+ ':low_battery:' => '🪫',
':low_brightness:' => '🔅',
+ ':luggage:' => '🧳',
+ ':lungs:' => '🫁',
':lying_face:' => '🤥',
- ':m:' => 'Ⓜ',
':mag:' => '🔍',
':mag_right:' => '🔎',
+ ':mage:' => '🧙',
+ ':magic_wand:' => '🪄',
+ ':magnet:' => '🧲',
':mahjong:' => '🀄',
':mailbox:' => '📫',
':mailbox_closed:' => '📪',
':mailbox_with_mail:' => '📬',
':mailbox_with_no_mail:' => '📭',
+ ':mammoth:' => '🦣',
':man:' => '👨',
':man_dancing:' => '🕺',
- ':man_in_tuxedo:' => '🤵',
':man_with_gua_pi_mao:' => '👲',
':man_with_turban:' => '👳',
+ ':mango:' => '🥭',
':mans_shoe:' => '👞',
- ':map:' => '🗺',
+ ':manual_wheelchair:' => '🦽',
':maple_leaf:' => '🍁',
+ ':maracas:' => '🪇',
':martial_arts_uniform:' => '🥋',
':mask:' => '😷',
':massage:' => '💆',
+ ':mate:' => '🧉',
':meat_on_bone:' => '🍖',
+ ':mechanical_arm:' => '🦾',
+ ':mechanical_leg:' => '🦿',
':medal:' => '🏅',
':mega:' => '📣',
':melon:' => '🍈',
+ ':melting_face:' => '🫠',
':menorah:' => '🕎',
':mens:' => '🚹',
+ ':merperson:' => '🧜',
':metal:' => '🤘',
':metro:' => '🚇',
+ ':microbe:' => '🦠',
':microphone:' => '🎤',
- ':microphone2:' => '🎙',
':microscope:' => '🔬',
':middle_finger:' => '🖕',
- ':military_medal:' => '🎖',
+ ':military_helmet:' => '🪖',
':milk:' => '🥛',
':milky_way:' => '🌌',
':minibus:' => '🚐',
':minidisc:' => '💽',
+ ':mirror:' => '🪞',
+ ':mirror_ball:' => '🪩',
':mobile_phone_off:' => '📴',
':money_mouth:' => '🤑',
':money_with_wings:' => '💸',
@@ -751,21 +644,20 @@
':monkey:' => '🐒',
':monkey_face:' => '🐵',
':monorail:' => '🚝',
+ ':moon_cake:' => '🥮',
+ ':moose:' => '🫎',
':mortar_board:' => '🎓',
':mosque:' => '🕌',
+ ':mosquito:' => '🦟',
':motor_scooter:' => '🛵',
- ':motorboat:' => '🛥',
- ':motorcycle:' => '🏍',
- ':motorway:' => '🛣',
+ ':motorized_wheelchair:' => '🦼',
':mount_fuji:' => '🗻',
- ':mountain:' => '⛰',
':mountain_bicyclist:' => '🚵',
':mountain_cableway:' => '🚠',
':mountain_railway:' => '🚞',
- ':mountain_snow:' => '🏔',
':mouse:' => '🐭',
':mouse2:' => '🐁',
- ':mouse_three_button:' => '🖱',
+ ':mouse_trap:' => '🪤',
':movie_camera:' => '🎥',
':moyai:' => '🗿',
':mrs_claus:' => '🤶',
@@ -778,17 +670,20 @@
':nail_care:' => '💅',
':name_badge:' => '📛',
':nauseated_face:' => '🤢',
+ ':nazar_amulet:' => '🧿',
':necktie:' => '👔',
':negative_squared_cross_mark:' => '❎',
':nerd:' => '🤓',
+ ':nest_with_eggs:' => '🪺',
+ ':nesting_dolls:' => '🪆',
':neutral_face:' => '😐',
':new:' => '🆕',
':new_moon:' => '🌑',
':new_moon_with_face:' => '🌚',
':newspaper:' => '📰',
- ':newspaper2:' => '🗞',
':ng:' => '🆖',
':night_with_stars:' => '🌃',
+ ':ninja:' => '🥷',
':no_bell:' => '🔕',
':no_bicycles:' => '🚳',
':no_entry:' => '⛔',
@@ -802,83 +697,103 @@
':nose:' => '👃',
':notebook:' => '📓',
':notebook_with_decorative_cover:' => '📔',
- ':notepad_spiral:' => '🗒',
':notes:' => '🎶',
':nut_and_bolt:' => '🔩',
':o:' => '⭕',
- ':o2:' => '🅾',
':ocean:' => '🌊',
':octagonal_sign:' => '🛑',
':octopus:' => '🐙',
':oden:' => '🍢',
':office:' => '🏢',
- ':oil:' => '🛢',
':ok:' => '🆗',
':ok_hand:' => '👌',
':ok_woman:' => '🙆',
':older_man:' => '👴',
+ ':older_person:' => '🧓',
':older_woman:' => '👵',
- ':om_symbol:' => '🕉',
+ ':olive:' => '🫒',
':on:' => '🔛',
':oncoming_automobile:' => '🚘',
':oncoming_bus:' => '🚍',
':oncoming_police_car:' => '🚔',
':oncoming_taxi:' => '🚖',
+ ':one_piece_swimsuit:' => '🩱',
+ ':onion:' => '🧅',
':open_file_folder:' => '📂',
':open_hands:' => '👐',
':open_mouth:' => '😮',
':ophiuchus:' => '⛎',
':orange_book:' => '📙',
- ':orthodox_cross:' => '☦',
+ ':orange_circle:' => '🟠',
+ ':orange_heart:' => '🧡',
+ ':orange_square:' => '🟧',
+ ':orangutan:' => '🦧',
+ ':otter:' => '🦦',
':outbox_tray:' => '📤',
':owl:' => '🦉',
':ox:' => '🐂',
+ ':oyster:' => '🦪',
':package:' => '📦',
':page_facing_up:' => '📄',
':page_with_curl:' => '📃',
':pager:' => '📟',
- ':paintbrush:' => '🖌',
+ ':palm_down_hand:' => '🫳',
':palm_tree:' => '🌴',
+ ':palm_up_hand:' => '🫴',
+ ':palms_up_together:' => '🤲',
':pancakes:' => '🥞',
':panda_face:' => '🐼',
':paperclip:' => '📎',
- ':paperclips:' => '🖇',
- ':park:' => '🏞',
- ':parking:' => '🅿',
- ':part_alternation_mark:' => '〽',
+ ':parachute:' => '🪂',
+ ':parrot:' => '🦜',
':partly_sunny:' => '⛅',
+ ':partying_face:' => '🥳',
':passport_control:' => '🛂',
- ':pause_button:' => '⏸',
- ':peace:' => '☮',
+ ':pea_pod:' => '🫛',
':peach:' => '🍑',
+ ':peacock:' => '🦚',
':peanuts:' => '🥜',
':pear:' => '🍐',
- ':pen_ballpoint:' => '🖊',
- ':pen_fountain:' => '🖋',
':pencil:' => '📝',
- ':pencil2:' => '✏',
':penguin:' => '🐧',
':pensive:' => '😔',
+ ':people_hugging:' => '🫂',
':performing_arts:' => '🎭',
':persevere:' => '😣',
+ ':person:' => '🧑',
+ ':person_beard:' => '🧔',
+ ':person_climbing:' => '🧗',
':person_frowning:' => '🙍',
+ ':person_in_lotus_position:' => '🧘',
+ ':person_in_steamy_room:' => '🧖',
+ ':person_kneeling:' => '🧎',
+ ':person_standing:' => '🧍',
':person_with_blond_hair:' => '👱',
+ ':person_with_crown:' => '🫅',
':person_with_pouting_face:' => '🙎',
- ':pick:' => '⛏',
+ ':petri_dish:' => '🧫',
+ ':pickup_truck:' => '🛻',
+ ':pie:' => '🥧',
':pig:' => '🐷',
':pig2:' => '🐖',
':pig_nose:' => '🐽',
':pill:' => '💊',
+ ':pinata:' => '🪅',
+ ':pinched_fingers:' => '🤌',
+ ':pinching_hand:' => '🤏',
':pineapple:' => '🍍',
':ping_pong:' => '🏓',
+ ':pink_heart:' => '🩷',
':pisces:' => '♓',
':pizza:' => '🍕',
+ ':placard:' => '🪧',
':place_of_worship:' => '🛐',
- ':play_pause:' => '⏯',
+ ':playground_slide:' => '🛝',
+ ':pleading_face:' => '🥺',
+ ':plunger:' => '🪠',
':point_down:' => '👇',
':point_left:' => '👈',
':point_right:' => '👉',
- ':point_up:' => '☝',
':point_up_2:' => '👆',
':police_car:' => '🚓',
':poodle:' => '🐩',
@@ -889,33 +804,37 @@
':postbox:' => '📮',
':potable_water:' => '🚰',
':potato:' => '🥔',
+ ':potted_plant:' => '🪴',
':pouch:' => '👝',
':poultry_leg:' => '🍗',
':pound:' => '💷',
+ ':pouring_liquid:' => '🫗',
':pouting_cat:' => '😾',
':pray:' => '🙏',
':prayer_beads:' => '📿',
+ ':pregnant_man:' => '🫃',
+ ':pregnant_person:' => '🫄',
':pregnant_woman:' => '🤰',
+ ':pretzel:' => '🥨',
':prince:' => '🤴',
':princess:' => '👸',
- ':printer:' => '🖨',
- ':projector:' => '📽',
':punch:' => '👊',
+ ':purple_circle:' => '🟣',
':purple_heart:' => '💜',
+ ':purple_square:' => '🟪',
':purse:' => '👛',
':pushpin:' => '📌',
':put_litter_in_its_place:' => '🚮',
+ ':puzzle_piece:' => '🧩',
':question:' => '❓',
':rabbit:' => '🐰',
':rabbit2:' => '🐇',
- ':race_car:' => '🏎',
+ ':raccoon:' => '🦝',
':racehorse:' => '🐎',
':radio:' => '📻',
':radio_button:' => '🔘',
- ':radioactive:' => '☢',
':rage:' => '😡',
':railway_car:' => '🚃',
- ':railway_track:' => '🛤',
':rainbow:' => '🌈',
':raised_back_of_hand:' => '🤚',
':raised_hand:' => '✋',
@@ -924,14 +843,14 @@
':ram:' => '🐏',
':ramen:' => '🍜',
':rat:' => '🐀',
- ':record_button:' => '⏺',
- ':recycle:' => '♻',
+ ':razor:' => '🪒',
+ ':receipt:' => '🧾',
':red_car:' => '🚗',
':red_circle:' => '🔴',
- ':registered:' => '®',
- ':relaxed:' => '☺',
+ ':red_envelope:' => '🧧',
+ ':red_hair:' => '🦰',
+ ':red_square:' => '🟥',
':relieved:' => '😌',
- ':reminder_ribbon:' => '🎗',
':repeat:' => '🔁',
':repeat_one:' => '🔂',
':restroom:' => '🚻',
@@ -944,74 +863,87 @@
':rice_cracker:' => '🍘',
':rice_scene:' => '🎑',
':right_facing_fist:' => '🤜',
+ ':rightwards_hand:' => '🫱',
+ ':rightwards_pushing_hand:' => '🫸',
':ring:' => '💍',
+ ':ring_buoy:' => '🛟',
+ ':ringed_planet:' => '🪐',
':robot:' => '🤖',
+ ':rock:' => '🪨',
':rocket:' => '🚀',
':rofl:' => '🤣',
+ ':roll_of_paper:' => '🧻',
':roller_coaster:' => '🎢',
+ ':roller_skate:' => '🛼',
':rolling_eyes:' => '🙄',
':rooster:' => '🐓',
':rose:' => '🌹',
- ':rosette:' => '🏵',
':rotating_light:' => '🚨',
':round_pushpin:' => '📍',
':rowboat:' => '🚣',
':rugby_football:' => '🏉',
':runner:' => '🏃',
':running_shirt_with_sash:' => '🎽',
- ':sa:' => '🈂',
+ ':safety_pin:' => '🧷',
+ ':safety_vest:' => '🦺',
':sagittarius:' => '♐',
':sailboat:' => '⛵',
':sake:' => '🍶',
':salad:' => '🥗',
+ ':salt:' => '🧂',
+ ':saluting_face:' => '🫡',
':sandal:' => '👡',
+ ':sandwich:' => '🥪',
':santa:' => '🎅',
+ ':sari:' => '🥻',
':satellite:' => '📡',
- ':satellite_orbital:' => '🛰',
+ ':sauropod:' => '🦕',
':saxophone:' => '🎷',
- ':scales:' => '⚖',
+ ':scarf:' => '🧣',
':school:' => '🏫',
':school_satchel:' => '🎒',
- ':scissors:' => '✂',
':scooter:' => '🛴',
':scorpion:' => '🦂',
':scorpius:' => '♏',
':scream:' => '😱',
':scream_cat:' => '🙀',
+ ':screwdriver:' => '🪛',
':scroll:' => '📜',
+ ':seal:' => '🦭',
':seat:' => '💺',
':second_place:' => '🥈',
- ':secret:' => '㊙',
':see_no_evil:' => '🙈',
':seedling:' => '🌱',
':selfie:' => '🤳',
+ ':sewing_needle:' => '🪡',
+ ':shaking_face:' => '🫨',
':shallow_pan_of_food:' => '🥘',
- ':shamrock:' => '☘',
':shark:' => '🦈',
':shaved_ice:' => '🍧',
':sheep:' => '🐑',
':shell:' => '🐚',
- ':shield:' => '🛡',
- ':shinto_shrine:' => '⛩',
':ship:' => '🚢',
':shirt:' => '👕',
- ':shopping_bags:' => '🛍',
':shopping_cart:' => '🛒',
+ ':shorts:' => '🩳',
':shower:' => '🚿',
':shrimp:' => '🦐',
':shrug:' => '🤷',
+ ':shushing_face:' => '🤫',
':signal_strength:' => '📶',
':six_pointed_star:' => '🔯',
+ ':skateboard:' => '🛹',
':ski:' => '🎿',
- ':skier:' => '⛷',
':skull:' => '💀',
- ':skull_crossbones:' => '☠',
+ ':skunk:' => '🦨',
+ ':sled:' => '🛷',
':sleeping:' => '😴',
':sleeping_accommodation:' => '🛌',
':sleepy:' => '😪',
':slight_frown:' => '🙁',
':slight_smile:' => '🙂',
':slot_machine:' => '🎰',
+ ':sloth:' => '🦥',
':small_blue_diamond:' => '🔹',
':small_orange_diamond:' => '🔸',
':small_red_triangle:' => '🔺',
@@ -1020,6 +952,8 @@
':smile_cat:' => '😸',
':smiley:' => '😃',
':smiley_cat:' => '😺',
+ ':smiling_face_with_hearts:' => '🥰',
+ ':smiling_face_with_tear:' => '🥲',
':smiling_imp:' => '😈',
':smirk:' => '😏',
':smirk_cat:' => '😼',
@@ -1028,44 +962,36 @@
':snake:' => '🐍',
':sneezing_face:' => '🤧',
':snowboarder:' => '🏂',
- ':snowflake:' => '❄',
':snowman:' => '⛄',
- ':snowman2:' => '☃',
+ ':soap:' => '🧼',
':sob:' => '😭',
':soccer:' => '⚽',
+ ':socks:' => '🧦',
+ ':softball:' => '🥎',
':soon:' => '🔜',
':sos:' => '🆘',
':sound:' => '🔉',
':space_invader:' => '👾',
- ':spades:' => '♠',
':spaghetti:' => '🍝',
- ':sparkle:' => '❇',
':sparkler:' => '🎇',
':sparkles:' => '✨',
':sparkling_heart:' => '💖',
':speak_no_evil:' => '🙊',
':speaker:' => '🔈',
- ':speaking_head:' => '🗣',
':speech_balloon:' => '💬',
- ':speech_left:' => '🗨',
':speedboat:' => '🚤',
- ':spider:' => '🕷',
- ':spider_web:' => '🕸',
+ ':sponge:' => '🧽',
':spoon:' => '🥄',
- ':spy:' => '🕵',
':squid:' => '🦑',
- ':stadium:' => '🏟',
':star:' => '⭐',
':star2:' => '🌟',
- ':star_and_crescent:' => '☪',
- ':star_of_david:' => '✡',
+ ':star_struck:' => '🤩',
':stars:' => '🌠',
':station:' => '🚉',
':statue_of_liberty:' => '🗽',
':steam_locomotive:' => '🚂',
+ ':stethoscope:' => '🩺',
':stew:' => '🍲',
- ':stop_button:' => '⏹',
- ':stopwatch:' => '⏱',
':straight_ruler:' => '📏',
':strawberry:' => '🍓',
':stuck_out_tongue:' => '😛',
@@ -1075,12 +1001,14 @@
':sun_with_face:' => '🌞',
':sunflower:' => '🌻',
':sunglasses:' => '😎',
- ':sunny:' => '☀',
':sunrise:' => '🌅',
':sunrise_over_mountains:' => '🌄',
+ ':superhero:' => '🦸',
+ ':supervillain:' => '🦹',
':surfer:' => '🏄',
':sushi:' => '🍣',
':suspension_railway:' => '🚟',
+ ':swan:' => '🦢',
':sweat:' => '😓',
':sweat_drops:' => '💦',
':sweat_smile:' => '😅',
@@ -1089,34 +1017,36 @@
':symbols:' => '🔣',
':synagogue:' => '🕍',
':syringe:' => '💉',
+ ':t_rex:' => '🦖',
':taco:' => '🌮',
':tada:' => '🎉',
+ ':takeout_box:' => '🥡',
+ ':tamale:' => '🫔',
':tanabata_tree:' => '🎋',
':tangerine:' => '🍊',
':taurus:' => '♉',
':taxi:' => '🚕',
':tea:' => '🍵',
- ':telephone:' => '☎',
+ ':teapot:' => '🫖',
+ ':teddy_bear:' => '🧸',
':telephone_receiver:' => '📞',
':telescope:' => '🔭',
':ten:' => '🔟',
':tennis:' => '🎾',
':tent:' => '⛺',
- ':thermometer:' => '🌡',
+ ':test_tube:' => '🧪',
':thermometer_face:' => '🤒',
':thinking:' => '🤔',
':third_place:' => '🥉',
+ ':thong_sandal:' => '🩴',
':thought_balloon:' => '💭',
+ ':thread:' => '🧵',
':thumbsdown:' => '👎',
':thumbsup:' => '👍',
- ':thunder_cloud_rain:' => '⛈',
':ticket:' => '🎫',
- ':tickets:' => '🎟',
':tiger:' => '🐯',
':tiger2:' => '🐅',
- ':timer:' => '⏲',
':tired_face:' => '😫',
- ':tm:' => '™',
':toilet:' => '🚽',
':tokyo_tower:' => '🗼',
':tomato:' => '🍅',
@@ -1126,12 +1056,11 @@
':tone4:' => '🏾',
':tone5:' => '🏿',
':tongue:' => '👅',
- ':tools:' => '🛠',
+ ':toolbox:' => '🧰',
+ ':tooth:' => '🦷',
+ ':toothbrush:' => '🪥',
':top:' => '🔝',
':tophat:' => '🎩',
- ':track_next:' => '⏭',
- ':track_previous:' => '⏮',
- ':trackball:' => '🖲',
':tractor:' => '🚜',
':traffic_light:' => '🚥',
':train:' => '🚋',
@@ -1141,6 +1070,7 @@
':triangular_ruler:' => '📐',
':trident:' => '🔱',
':triumph:' => '😤',
+ ':troll:' => '🧌',
':trolleybus:' => '🚎',
':trophy:' => '🏆',
':tropical_drink:' => '🍹',
@@ -1162,21 +1092,18 @@
':u5272:' => '🈹',
':u5408:' => '🈴',
':u6307:' => '🈯',
- ':u6708:' => '🈷',
':u6709:' => '🈶',
':u7121:' => '🈚',
':u7533:' => '🈸',
':u7981:' => '🈲',
':umbrella:' => '☔',
- ':umbrella2:' => '☂',
':unamused:' => '😒',
':underage:' => '🔞',
':unicorn:' => '🦄',
':unlock:' => '🔓',
':up:' => '🆙',
':upside_down:' => '🙃',
- ':urn:' => '⚱',
- ':v:' => '✌',
+ ':vampire:' => '🧛',
':vertical_traffic_light:' => '🚦',
':vhs:' => '📼',
':vibration_mode:' => '📳',
@@ -1188,17 +1115,15 @@
':volleyball:' => '🏐',
':vs:' => '🆚',
':vulcan:' => '🖖',
+ ':waffle:' => '🧇',
':walking:' => '🚶',
':waning_crescent_moon:' => '🌘',
':waning_gibbous_moon:' => '🌖',
- ':warning:' => '⚠',
- ':wastebasket:' => '🗑',
':watch:' => '⌚',
':water_buffalo:' => '🐃',
':water_polo:' => '🤽',
':watermelon:' => '🍉',
':wave:' => '👋',
- ':wavy_dash:' => '〰',
':waxing_crescent_moon:' => '🌒',
':waxing_gibbous_moon:' => '🌔',
':wc:' => '🚾',
@@ -1206,432 +1131,87 @@
':wedding:' => '💒',
':whale:' => '🐳',
':whale2:' => '🐋',
- ':wheel_of_dharma:' => '☸',
+ ':wheel:' => '🛞',
':wheelchair:' => '♿',
+ ':white_cane:' => '🦯',
':white_check_mark:' => '✅',
':white_circle:' => '⚪',
':white_flower:' => '💮',
+ ':white_hair:' => '🦳',
+ ':white_heart:' => '🤍',
':white_large_square:' => '⬜',
':white_medium_small_square:' => '◽',
- ':white_medium_square:' => '◻',
- ':white_small_square:' => '▫',
':white_square_button:' => '🔳',
- ':white_sun_cloud:' => '🌥',
- ':white_sun_rain_cloud:' => '🌦',
- ':white_sun_small_cloud:' => '🌤',
':wilted_rose:' => '🥀',
- ':wind_blowing_face:' => '🌬',
':wind_chime:' => '🎐',
+ ':window:' => '🪟',
':wine_glass:' => '🍷',
+ ':wing:' => '🪽',
':wink:' => '😉',
+ ':wireless:' => '🛜',
':wolf:' => '🐺',
':woman:' => '👩',
+ ':woman_with_headscarf:' => '🧕',
':womans_clothes:' => '👚',
':womans_hat:' => '👒',
':womens:' => '🚺',
+ ':wood:' => '🪵',
+ ':woozy_face:' => '🥴',
+ ':worm:' => '🪱',
':worried:' => '😟',
':wrench:' => '🔧',
':wrestlers:' => '🤼',
- ':writing_hand:' => '✍',
':x:' => '❌',
+ ':x_ray:' => '🩻',
+ ':yarn:' => '🧶',
+ ':yawning_face:' => '🥱',
+ ':yellow_circle:' => '🟡',
':yellow_heart:' => '💛',
+ ':yellow_square:' => '🟨',
':yen:' => '💴',
- ':yin_yang:' => '☯',
+ ':yo_yo:' => '🪀',
':yum:' => '😋',
+ ':zany_face:' => '🤪',
':zap:' => '⚡',
+ ':zebra:' => '🦓',
':zipper_mouth:' => '🤐',
+ ':zombie:' => '🧟',
':zzz:' => '💤',
- ':+1_tone1:' => '👍🏻',
- ':+1_tone2:' => '👍🏼',
- ':+1_tone3:' => '👍🏽',
- ':+1_tone4:' => '👍🏾',
- ':+1_tone5:' => '👍🏿',
- ':-1_tone1:' => '👎🏻',
- ':-1_tone2:' => '👎🏼',
- ':-1_tone3:' => '👎🏽',
- ':-1_tone4:' => '👎🏾',
- ':-1_tone5:' => '👎🏿',
- ':ac:' => '🇦🇨',
- ':ad:' => '🇦🇩',
- ':ae:' => '🇦🇪',
- ':af:' => '🇦🇫',
- ':ag:' => '🇦🇬',
- ':ai:' => '🇦🇮',
- ':al:' => '🇦🇱',
- ':am:' => '🇦🇲',
- ':ao:' => '🇦🇴',
- ':aq:' => '🇦🇶',
- ':ar:' => '🇦🇷',
- ':as:' => '🇦🇸',
- ':at:' => '🇦🇹',
- ':au:' => '🇦🇺',
- ':aw:' => '🇦🇼',
- ':ax:' => '🇦🇽',
- ':az:' => '🇦🇿',
- ':ba:' => '🇧🇦',
- ':back_of_hand_tone1:' => '🤚🏻',
- ':back_of_hand_tone2:' => '🤚🏼',
- ':back_of_hand_tone3:' => '🤚🏽',
- ':back_of_hand_tone4:' => '🤚🏾',
- ':back_of_hand_tone5:' => '🤚🏿',
- ':bb:' => '🇧🇧',
- ':bd:' => '🇧🇩',
- ':be:' => '🇧🇪',
- ':bf:' => '🇧🇫',
- ':bg:' => '🇧🇬',
- ':bh:' => '🇧🇭',
- ':bi:' => '🇧🇮',
- ':bj:' => '🇧🇯',
- ':bl:' => '🇧🇱',
- ':bm:' => '🇧🇲',
- ':bn:' => '🇧🇳',
- ':bo:' => '🇧🇴',
- ':bq:' => '🇧🇶',
- ':br:' => '🇧🇷',
- ':bs:' => '🇧🇸',
- ':bt:' => '🇧🇹',
- ':bv:' => '🇧🇻',
- ':bw:' => '🇧🇼',
- ':by:' => '🇧🇾',
- ':bz:' => '🇧🇿',
- ':ca:' => '🇨🇦',
- ':call_me_hand_tone1:' => '🤙🏻',
- ':call_me_hand_tone2:' => '🤙🏼',
- ':call_me_hand_tone3:' => '🤙🏽',
- ':call_me_hand_tone4:' => '🤙🏾',
- ':call_me_hand_tone5:' => '🤙🏿',
- ':cc:' => '🇨🇨',
- ':cf:' => '🇨🇫',
- ':cg:' => '🇨🇬',
- ':ch:' => '🇨🇭',
- ':chile:' => '🇨🇱',
- ':ci:' => '🇨🇮',
- ':ck:' => '🇨🇰',
- ':cm:' => '🇨🇲',
- ':cn:' => '🇨🇳',
- ':co:' => '🇨🇴',
- ':congo:' => '🇨🇩',
- ':cp:' => '🇨🇵',
- ':cr:' => '🇨🇷',
- ':cu:' => '🇨🇺',
- ':cv:' => '🇨🇻',
- ':cw:' => '🇨🇼',
- ':cx:' => '🇨🇽',
- ':cy:' => '🇨🇾',
- ':cz:' => '🇨🇿',
- ':de:' => '🇩🇪',
- ':dg:' => '🇩🇬',
- ':dj:' => '🇩🇯',
- ':dk:' => '🇩🇰',
- ':dm:' => '🇩🇲',
- ':do:' => '🇩🇴',
- ':dz:' => '🇩🇿',
- ':ea:' => '🇪🇦',
- ':ec:' => '🇪🇨',
- ':ee:' => '🇪🇪',
- ':eg:' => '🇪🇬',
- ':eh:' => '🇪🇭',
- ':er:' => '🇪🇷',
- ':es:' => '🇪🇸',
- ':et:' => '🇪🇹',
- ':eu:' => '🇪🇺',
- ':expecting_woman_tone1:' => '🤰🏻',
- ':expecting_woman_tone2:' => '🤰🏼',
- ':expecting_woman_tone3:' => '🤰🏽',
- ':expecting_woman_tone4:' => '🤰🏾',
- ':expecting_woman_tone5:' => '🤰🏿',
- ':facepalm_tone1:' => '🤦🏻',
- ':facepalm_tone2:' => '🤦🏼',
- ':facepalm_tone3:' => '🤦🏽',
- ':facepalm_tone4:' => '🤦🏾',
- ':facepalm_tone5:' => '🤦🏿',
- ':fi:' => '🇫🇮',
- ':fj:' => '🇫🇯',
- ':fk:' => '🇫🇰',
- ':fm:' => '🇫🇲',
- ':fo:' => '🇫🇴',
- ':fr:' => '🇫🇷',
- ':ga:' => '🇬🇦',
- ':gb:' => '🇬🇧',
- ':gd:' => '🇬🇩',
- ':ge:' => '🇬🇪',
- ':gf:' => '🇬🇫',
- ':gg:' => '🇬🇬',
- ':gh:' => '🇬🇭',
- ':gi:' => '🇬🇮',
- ':gl:' => '🇬🇱',
- ':gm:' => '🇬🇲',
- ':gn:' => '🇬🇳',
- ':gp:' => '🇬🇵',
- ':gq:' => '🇬🇶',
- ':gr:' => '🇬🇷',
- ':grandma_tone1:' => '👵🏻',
- ':grandma_tone2:' => '👵🏼',
- ':grandma_tone3:' => '👵🏽',
- ':grandma_tone4:' => '👵🏾',
- ':grandma_tone5:' => '👵🏿',
- ':gs:' => '🇬🇸',
- ':gt:' => '🇬🇹',
- ':gu:' => '🇬🇺',
- ':gw:' => '🇬🇼',
- ':gy:' => '🇬🇾',
- ':hand_with_index_and_middle_fingers_crossed_tone1:' => '🤞🏻',
- ':hand_with_index_and_middle_fingers_crossed_tone2:' => '🤞🏼',
- ':hand_with_index_and_middle_fingers_crossed_tone3:' => '🤞🏽',
- ':hand_with_index_and_middle_fingers_crossed_tone4:' => '🤞🏾',
- ':hand_with_index_and_middle_fingers_crossed_tone5:' => '🤞🏿',
- ':hk:' => '🇭🇰',
- ':hm:' => '🇭🇲',
- ':hn:' => '🇭🇳',
- ':hr:' => '🇭🇷',
- ':ht:' => '🇭🇹',
- ':hu:' => '🇭🇺',
- ':ic:' => '🇮🇨',
- ':ie:' => '🇮🇪',
- ':il:' => '🇮🇱',
- ':im:' => '🇮🇲',
- ':in:' => '🇮🇳',
- ':indonesia:' => '🇮🇩',
- ':io:' => '🇮🇴',
- ':iq:' => '🇮🇶',
- ':ir:' => '🇮🇷',
- ':is:' => '🇮🇸',
- ':it:' => '🇮🇹',
- ':je:' => '🇯🇪',
- ':jm:' => '🇯🇲',
- ':jo:' => '🇯🇴',
- ':jp:' => '🇯🇵',
- ':juggler_tone1:' => '🤹🏻',
- ':juggler_tone2:' => '🤹🏼',
- ':juggler_tone3:' => '🤹🏽',
- ':juggler_tone4:' => '🤹🏾',
- ':juggler_tone5:' => '🤹🏿',
- ':ke:' => '🇰🇪',
- ':keycap_asterisk:' => '*⃣',
- ':kg:' => '🇰🇬',
- ':kh:' => '🇰🇭',
- ':ki:' => '🇰🇮',
- ':km:' => '🇰🇲',
- ':kn:' => '🇰🇳',
- ':kp:' => '🇰🇵',
- ':kr:' => '🇰🇷',
- ':kw:' => '🇰🇼',
- ':ky:' => '🇰🇾',
- ':kz:' => '🇰🇿',
- ':la:' => '🇱🇦',
- ':lb:' => '🇱🇧',
- ':lc:' => '🇱🇨',
- ':left_fist_tone1:' => '🤛🏻',
- ':left_fist_tone2:' => '🤛🏼',
- ':left_fist_tone3:' => '🤛🏽',
- ':left_fist_tone4:' => '🤛🏾',
- ':left_fist_tone5:' => '🤛🏿',
- ':li:' => '🇱🇮',
- ':lk:' => '🇱🇰',
- ':lr:' => '🇱🇷',
- ':ls:' => '🇱🇸',
- ':lt:' => '🇱🇹',
- ':lu:' => '🇱🇺',
- ':lv:' => '🇱🇻',
- ':ly:' => '🇱🇾',
- ':ma:' => '🇲🇦',
- ':male_dancer_tone1:' => '🕺🏻',
- ':male_dancer_tone2:' => '🕺🏼',
- ':male_dancer_tone3:' => '🕺🏽',
- ':male_dancer_tone4:' => '🕺🏾',
- ':male_dancer_tone5:' => '🕺🏿',
- ':mc:' => '🇲🇨',
- ':md:' => '🇲🇩',
- ':me:' => '🇲🇪',
- ':mf:' => '🇲🇫',
- ':mg:' => '🇲🇬',
- ':mh:' => '🇲🇭',
- ':mk:' => '🇲🇰',
- ':ml:' => '🇲🇱',
- ':mm:' => '🇲🇲',
- ':mn:' => '🇲🇳',
- ':mo:' => '🇲🇴',
- ':mother_christmas_tone1:' => '🤶🏻',
- ':mother_christmas_tone2:' => '🤶🏼',
- ':mother_christmas_tone3:' => '🤶🏽',
- ':mother_christmas_tone4:' => '🤶🏾',
- ':mother_christmas_tone5:' => '🤶🏿',
- ':mp:' => '🇲🇵',
- ':mq:' => '🇲🇶',
- ':mr:' => '🇲🇷',
- ':ms:' => '🇲🇸',
- ':mt:' => '🇲🇹',
- ':mu:' => '🇲🇺',
- ':mv:' => '🇲🇻',
- ':mw:' => '🇲🇼',
- ':mx:' => '🇲🇽',
- ':my:' => '🇲🇾',
- ':mz:' => '🇲🇿',
- ':na:' => '🇳🇦',
- ':nc:' => '🇳🇨',
- ':ne:' => '🇳🇪',
- ':nf:' => '🇳🇫',
- ':ni:' => '🇳🇮',
- ':nigeria:' => '🇳🇬',
- ':nl:' => '🇳🇱',
- ':no:' => '🇳🇴',
- ':np:' => '🇳🇵',
- ':nr:' => '🇳🇷',
- ':nu:' => '🇳🇺',
- ':nz:' => '🇳🇿',
- ':om:' => '🇴🇲',
- ':pa:' => '🇵🇦',
- ':pe:' => '🇵🇪',
- ':person_doing_cartwheel_tone1:' => '🤸🏻',
- ':person_doing_cartwheel_tone2:' => '🤸🏼',
- ':person_doing_cartwheel_tone3:' => '🤸🏽',
- ':person_doing_cartwheel_tone4:' => '🤸🏾',
- ':person_doing_cartwheel_tone5:' => '🤸🏿',
- ':person_with_ball_tone1:' => '⛹🏻',
- ':person_with_ball_tone2:' => '⛹🏼',
- ':person_with_ball_tone3:' => '⛹🏽',
- ':person_with_ball_tone4:' => '⛹🏾',
- ':person_with_ball_tone5:' => '⛹🏿',
- ':pf:' => '🇵🇫',
- ':pg:' => '🇵🇬',
- ':ph:' => '🇵🇭',
- ':pk:' => '🇵🇰',
- ':pl:' => '🇵🇱',
- ':pm:' => '🇵🇲',
- ':pn:' => '🇵🇳',
- ':pr:' => '🇵🇷',
- ':ps:' => '🇵🇸',
- ':pt:' => '🇵🇹',
- ':pw:' => '🇵🇼',
- ':py:' => '🇵🇾',
- ':qa:' => '🇶🇦',
- ':rainbow_flag:' => '🏳🌈',
- ':raised_hand_with_fingers_splayed_tone1:' => '🖐🏻',
- ':raised_hand_with_fingers_splayed_tone2:' => '🖐🏼',
- ':raised_hand_with_fingers_splayed_tone3:' => '🖐🏽',
- ':raised_hand_with_fingers_splayed_tone4:' => '🖐🏾',
- ':raised_hand_with_fingers_splayed_tone5:' => '🖐🏿',
- ':raised_hand_with_part_between_middle_and_ring_fingers_tone1:' => '🖖🏻',
- ':raised_hand_with_part_between_middle_and_ring_fingers_tone2:' => '🖖🏼',
- ':raised_hand_with_part_between_middle_and_ring_fingers_tone3:' => '🖖🏽',
- ':raised_hand_with_part_between_middle_and_ring_fingers_tone4:' => '🖖🏾',
- ':raised_hand_with_part_between_middle_and_ring_fingers_tone5:' => '🖖🏿',
- ':re:' => '🇷🇪',
- ':reversed_hand_with_middle_finger_extended_tone1:' => '🖕🏻',
- ':reversed_hand_with_middle_finger_extended_tone2:' => '🖕🏼',
- ':reversed_hand_with_middle_finger_extended_tone3:' => '🖕🏽',
- ':reversed_hand_with_middle_finger_extended_tone4:' => '🖕🏾',
- ':reversed_hand_with_middle_finger_extended_tone5:' => '🖕🏿',
- ':right_fist_tone1:' => '🤜🏻',
- ':right_fist_tone2:' => '🤜🏼',
- ':right_fist_tone3:' => '🤜🏽',
- ':right_fist_tone4:' => '🤜🏾',
- ':right_fist_tone5:' => '🤜🏿',
- ':ro:' => '🇷🇴',
- ':rs:' => '🇷🇸',
- ':ru:' => '🇷🇺',
- ':rw:' => '🇷🇼',
- ':saudi:' => '🇸🇦',
- ':saudiarabia:' => '🇸🇦',
- ':sb:' => '🇸🇧',
- ':sc:' => '🇸🇨',
- ':sd:' => '🇸🇩',
- ':se:' => '🇸🇪',
- ':sg:' => '🇸🇬',
- ':sh:' => '🇸🇭',
- ':shaking_hands_tone1:' => '🤝🏻',
- ':shaking_hands_tone2:' => '🤝🏼',
- ':shaking_hands_tone3:' => '🤝🏽',
- ':shaking_hands_tone4:' => '🤝🏾',
- ':shaking_hands_tone5:' => '🤝🏿',
- ':si:' => '🇸🇮',
- ':sign_of_the_horns_tone1:' => '🤘🏻',
- ':sign_of_the_horns_tone2:' => '🤘🏼',
- ':sign_of_the_horns_tone3:' => '🤘🏽',
- ':sign_of_the_horns_tone4:' => '🤘🏾',
- ':sign_of_the_horns_tone5:' => '🤘🏿',
- ':sj:' => '🇸🇯',
- ':sk:' => '🇸🇰',
- ':sl:' => '🇸🇱',
- ':sleuth_or_spy_tone1:' => '🕵🏻',
- ':sleuth_or_spy_tone2:' => '🕵🏼',
- ':sleuth_or_spy_tone3:' => '🕵🏽',
- ':sleuth_or_spy_tone4:' => '🕵🏾',
- ':sleuth_or_spy_tone5:' => '🕵🏿',
- ':sm:' => '🇸🇲',
- ':sn:' => '🇸🇳',
- ':so:' => '🇸🇴',
- ':sr:' => '🇸🇷',
- ':ss:' => '🇸🇸',
- ':st:' => '🇸🇹',
- ':sv:' => '🇸🇻',
- ':sx:' => '🇸🇽',
- ':sy:' => '🇸🇾',
- ':sz:' => '🇸🇿',
- ':ta:' => '🇹🇦',
- ':tc:' => '🇹🇨',
- ':td:' => '🇹🇩',
- ':tf:' => '🇹🇫',
- ':tg:' => '🇹🇬',
- ':th:' => '🇹🇭',
- ':tj:' => '🇹🇯',
- ':tk:' => '🇹🇰',
- ':tl:' => '🇹🇱',
- ':tn:' => '🇹🇳',
- ':to:' => '🇹🇴',
- ':tr:' => '🇹🇷',
- ':tt:' => '🇹🇹',
- ':turkmenistan:' => '🇹🇲',
- ':tuvalu:' => '🇹🇻',
- ':tuxedo_tone1:' => '🤵🏻',
- ':tuxedo_tone2:' => '🤵🏼',
- ':tuxedo_tone3:' => '🤵🏽',
- ':tuxedo_tone4:' => '🤵🏾',
- ':tuxedo_tone5:' => '🤵🏿',
- ':tw:' => '🇹🇼',
- ':tz:' => '🇹🇿',
- ':ua:' => '🇺🇦',
- ':ug:' => '🇺🇬',
- ':um:' => '🇺🇲',
- ':us:' => '🇺🇸',
- ':uy:' => '🇺🇾',
- ':uz:' => '🇺🇿',
- ':va:' => '🇻🇦',
- ':vc:' => '🇻🇨',
- ':ve:' => '🇻🇪',
- ':vg:' => '🇻🇬',
- ':vi:' => '🇻🇮',
- ':vn:' => '🇻🇳',
- ':vu:' => '🇻🇺',
- ':weight_lifter_tone1:' => '🏋🏻',
- ':weight_lifter_tone2:' => '🏋🏼',
- ':weight_lifter_tone3:' => '🏋🏽',
- ':weight_lifter_tone4:' => '🏋🏾',
- ':weight_lifter_tone5:' => '🏋🏿',
- ':wf:' => '🇼🇫',
- ':wrestling_tone1:' => '🤼🏻',
- ':wrestling_tone2:' => '🤼🏼',
- ':wrestling_tone3:' => '🤼🏽',
- ':wrestling_tone4:' => '🤼🏾',
- ':wrestling_tone5:' => '🤼🏿',
- ':ws:' => '🇼🇸',
- ':xk:' => '🇽🇰',
- ':ye:' => '🇾🇪',
- ':yt:' => '🇾🇹',
- ':za:' => '🇿🇦',
- ':zm:' => '🇿🇲',
- ':zw:' => '🇿🇼',
+ ':a:' => '🅰️',
+ ':airplane:' => '✈️',
+ ':airplane_small:' => '🛩️',
+ ':alembic:' => '⚗️',
':angel_tone1:' => '👼🏻',
':angel_tone2:' => '👼🏼',
':angel_tone3:' => '👼🏽',
':angel_tone4:' => '👼🏾',
':angel_tone5:' => '👼🏿',
- ':asterisk:' => '*⃣',
+ ':anger_right:' => '🗯️',
+ ':arrow_backward:' => '◀️',
+ ':arrow_down:' => '⬇️',
+ ':arrow_forward:' => '▶️',
+ ':arrow_heading_down:' => '⤵️',
+ ':arrow_heading_up:' => '⤴️',
+ ':arrow_left:' => '⬅️',
+ ':arrow_lower_left:' => '↙️',
+ ':arrow_lower_right:' => '↘️',
+ ':arrow_right:' => '➡️',
+ ':arrow_right_hook:' => '↪️',
+ ':arrow_up:' => '⬆️',
+ ':arrow_up_down:' => '↕️',
+ ':arrow_upper_left:' => '↖️',
+ ':arrow_upper_right:' => '↗️',
+ ':atom:' => '⚛️',
+ ':b:' => '🅱️',
':baby_tone1:' => '👶🏻',
':baby_tone2:' => '👶🏼',
':baby_tone3:' => '👶🏽',
':baby_tone4:' => '👶🏾',
':baby_tone5:' => '👶🏿',
+ ':ballot_box:' => '🗳️',
+ ':ballot_box_with_check:' => '☑️',
+ ':bangbang:' => '‼️',
+ ':basketball_player:' => '⛹️',
':basketball_player_tone1:' => '⛹🏻',
':basketball_player_tone2:' => '⛹🏼',
':basketball_player_tone3:' => '⛹🏽',
@@ -1642,11 +1222,19 @@
':bath_tone3:' => '🛀🏽',
':bath_tone4:' => '🛀🏾',
':bath_tone5:' => '🛀🏿',
+ ':beach:' => '🏖️',
+ ':beach_umbrella:' => '⛱️',
+ ':bed:' => '🛏️',
+ ':bellhop:' => '🛎️',
':bicyclist_tone1:' => '🚴🏻',
':bicyclist_tone2:' => '🚴🏼',
':bicyclist_tone3:' => '🚴🏽',
':bicyclist_tone4:' => '🚴🏾',
':bicyclist_tone5:' => '🚴🏿',
+ ':biohazard:' => '☣️',
+ ':black_medium_square:' => '◼️',
+ ':black_nib:' => '✒️',
+ ':black_small_square:' => '▪️',
':bow_tone1:' => '🙇🏻',
':bow_tone2:' => '🙇🏼',
':bow_tone3:' => '🙇🏽',
@@ -1657,51 +1245,130 @@
':boy_tone3:' => '👦🏽',
':boy_tone4:' => '👦🏾',
':boy_tone5:' => '👦🏿',
+ ':breast_feeding_dark_skin_tone:' => '🤱🏿',
+ ':breast_feeding_light_skin_tone:' => '🤱🏻',
+ ':breast_feeding_medium_dark_skin_tone:' => '🤱🏾',
+ ':breast_feeding_medium_light_skin_tone:' => '🤱🏼',
+ ':breast_feeding_medium_skin_tone:' => '🤱🏽',
':bride_with_veil_tone1:' => '👰🏻',
':bride_with_veil_tone2:' => '👰🏼',
':bride_with_veil_tone3:' => '👰🏽',
':bride_with_veil_tone4:' => '👰🏾',
':bride_with_veil_tone5:' => '👰🏿',
+ ':calendar_spiral:' => '🗓️',
':call_me_tone1:' => '🤙🏻',
':call_me_tone2:' => '🤙🏼',
':call_me_tone3:' => '🤙🏽',
':call_me_tone4:' => '🤙🏾',
':call_me_tone5:' => '🤙🏿',
+ ':camping:' => '🏕️',
+ ':candle:' => '🕯️',
+ ':card_box:' => '🗃️',
':cartwheel_tone1:' => '🤸🏻',
':cartwheel_tone2:' => '🤸🏼',
':cartwheel_tone3:' => '🤸🏽',
':cartwheel_tone4:' => '🤸🏾',
':cartwheel_tone5:' => '🤸🏿',
+ ':chains:' => '⛓️',
+ ':chess_pawn:' => '♟️',
+ ':child_dark_skin_tone:' => '🧒🏿',
+ ':child_light_skin_tone:' => '🧒🏻',
+ ':child_medium_dark_skin_tone:' => '🧒🏾',
+ ':child_medium_light_skin_tone:' => '🧒🏼',
+ ':child_medium_skin_tone:' => '🧒🏽',
+ ':chipmunk:' => '🐿️',
+ ':cityscape:' => '🏙️',
':clap_tone1:' => '👏🏻',
':clap_tone2:' => '👏🏼',
':clap_tone3:' => '👏🏽',
':clap_tone4:' => '👏🏾',
':clap_tone5:' => '👏🏿',
+ ':classical_building:' => '🏛️',
+ ':clock:' => '🕰️',
+ ':cloud:' => '☁️',
+ ':cloud_lightning:' => '🌩️',
+ ':cloud_rain:' => '🌧️',
+ ':cloud_snow:' => '🌨️',
+ ':cloud_tornado:' => '🌪️',
+ ':clubs:' => '♣️',
+ ':coffin:' => '⚰️',
+ ':comet:' => '☄️',
+ ':compression:' => '🗜️',
+ ':congratulations:' => '㊗️',
+ ':construction_site:' => '🏗️',
':construction_worker_tone1:' => '👷🏻',
':construction_worker_tone2:' => '👷🏼',
':construction_worker_tone3:' => '👷🏽',
':construction_worker_tone4:' => '👷🏾',
':construction_worker_tone5:' => '👷🏿',
+ ':control_knobs:' => '🎛️',
':cop_tone1:' => '👮🏻',
':cop_tone2:' => '👮🏼',
':cop_tone3:' => '👮🏽',
':cop_tone4:' => '👮🏾',
':cop_tone5:' => '👮🏿',
+ ':copyright:' => '©️',
+ ':couch:' => '🛋️',
+ ':couple_with_heart_dark_skin_tone:' => '💑🏿',
+ ':couple_with_heart_light_skin_tone:' => '💑🏻',
+ ':couple_with_heart_medium_dark_skin_tone:' => '💑🏾',
+ ':couple_with_heart_medium_light_skin_tone:' => '💑🏼',
+ ':couple_with_heart_medium_skin_tone:' => '💑🏽',
+ ':crayon:' => '🖍️',
+ ':cross:' => '✝️',
+ ':crossed_swords:' => '⚔️',
+ ':cruise_ship:' => '🛳️',
+ ':dagger:' => '🗡️',
':dancer_tone1:' => '💃🏻',
':dancer_tone2:' => '💃🏼',
':dancer_tone3:' => '💃🏽',
':dancer_tone4:' => '💃🏾',
':dancer_tone5:' => '💃🏿',
+ ':dark_sunglasses:' => '🕶️',
+ ':deaf_person_dark_skin_tone:' => '🧏🏿',
+ ':deaf_person_light_skin_tone:' => '🧏🏻',
+ ':deaf_person_medium_dark_skin_tone:' => '🧏🏾',
+ ':deaf_person_medium_light_skin_tone:' => '🧏🏼',
+ ':deaf_person_medium_skin_tone:' => '🧏🏽',
+ ':desert:' => '🏜️',
+ ':desktop:' => '🖥️',
+ ':diamonds:' => '♦️',
+ ':dividers:' => '🗂️',
+ ':dove:' => '🕊️',
':ear_tone1:' => '👂🏻',
':ear_tone2:' => '👂🏼',
':ear_tone3:' => '👂🏽',
':ear_tone4:' => '👂🏾',
':ear_tone5:' => '👂🏿',
+ ':ear_with_hearing_aid_dark_skin_tone:' => '🦻🏿',
+ ':ear_with_hearing_aid_light_skin_tone:' => '🦻🏻',
+ ':ear_with_hearing_aid_medium_dark_skin_tone:' => '🦻🏾',
+ ':ear_with_hearing_aid_medium_light_skin_tone:' => '🦻🏼',
+ ':ear_with_hearing_aid_medium_skin_tone:' => '🦻🏽',
+ ':eight_pointed_black_star:' => '✴️',
+ ':eight_spoked_asterisk:' => '✳️',
+ ':eject:' => '⏏️',
+ ':elf_dark_skin_tone:' => '🧝🏿',
+ ':elf_light_skin_tone:' => '🧝🏻',
+ ':elf_medium_dark_skin_tone:' => '🧝🏾',
+ ':elf_medium_light_skin_tone:' => '🧝🏼',
+ ':elf_medium_skin_tone:' => '🧝🏽',
+ ':envelope:' => '✉️',
+ ':eye:' => '👁️',
':face_palm_tone1:' => '🤦🏻',
':face_palm_tone2:' => '🤦🏼',
':face_palm_tone3:' => '🤦🏽',
':face_palm_tone4:' => '🤦🏾',
':face_palm_tone5:' => '🤦🏿',
+ ':fairy_dark_skin_tone:' => '🧚🏿',
+ ':fairy_light_skin_tone:' => '🧚🏻',
+ ':fairy_medium_dark_skin_tone:' => '🧚🏾',
+ ':fairy_medium_light_skin_tone:' => '🧚🏼',
+ ':fairy_medium_skin_tone:' => '🧚🏽',
+ ':female_sign:' => '♀️',
+ ':ferry:' => '⛴️',
+ ':file_cabinet:' => '🗄️',
+ ':film_frames:' => '🎞️',
':fingers_crossed_tone1:' => '🤞🏻',
':fingers_crossed_tone2:' => '🤞🏼',
':fingers_crossed_tone3:' => '🤞🏽',
@@ -1951,6 +1618,7 @@
':flag_ua:' => '🇺🇦',
':flag_ug:' => '🇺🇬',
':flag_um:' => '🇺🇲',
+ ':flag_united_nations:' => '🇺🇳',
':flag_us:' => '🇺🇸',
':flag_uy:' => '🇺🇾',
':flag_uz:' => '🇺🇿',
@@ -1962,6 +1630,7 @@
':flag_vn:' => '🇻🇳',
':flag_vu:' => '🇻🇺',
':flag_wf:' => '🇼🇫',
+ ':flag_white:' => '🏳️',
':flag_ws:' => '🇼🇸',
':flag_xk:' => '🇽🇰',
':flag_ye:' => '🇾🇪',
@@ -1969,12 +1638,23 @@
':flag_za:' => '🇿🇦',
':flag_zm:' => '🇿🇲',
':flag_zw:' => '🇿🇼',
- ':gay_pride_flag:' => '🏳🌈',
+ ':fleur-de-lis:' => '⚜️',
+ ':fog:' => '🌫️',
+ ':foot_dark_skin_tone:' => '🦶🏿',
+ ':foot_light_skin_tone:' => '🦶🏻',
+ ':foot_medium_dark_skin_tone:' => '🦶🏾',
+ ':foot_medium_light_skin_tone:' => '🦶🏼',
+ ':foot_medium_skin_tone:' => '🦶🏽',
+ ':fork_knife_plate:' => '🍽️',
+ ':frame_photo:' => '🖼️',
+ ':frowning2:' => '☹️',
+ ':gear:' => '⚙️',
':girl_tone1:' => '👧🏻',
':girl_tone2:' => '👧🏼',
':girl_tone3:' => '👧🏽',
':girl_tone4:' => '👧🏾',
':girl_tone5:' => '👧🏿',
+ ':golfer:' => '🏌️',
':guardsman_tone1:' => '💂🏻',
':guardsman_tone2:' => '💂🏼',
':guardsman_tone3:' => '💂🏽',
@@ -1985,11 +1665,18 @@
':haircut_tone3:' => '💇🏽',
':haircut_tone4:' => '💇🏾',
':haircut_tone5:' => '💇🏿',
+ ':hammer_pick:' => '⚒️',
+ ':hand_splayed:' => '🖐️',
':hand_splayed_tone1:' => '🖐🏻',
':hand_splayed_tone2:' => '🖐🏼',
':hand_splayed_tone3:' => '🖐🏽',
':hand_splayed_tone4:' => '🖐🏾',
':hand_splayed_tone5:' => '🖐🏿',
+ ':hand_with_index_finger_and_thumb_crossed_dark_skin_tone:' => '🫰🏿',
+ ':hand_with_index_finger_and_thumb_crossed_light_skin_tone:' => '🫰🏻',
+ ':hand_with_index_finger_and_thumb_crossed_medium_dark_skin_tone:' => '🫰🏾',
+ ':hand_with_index_finger_and_thumb_crossed_medium_light_skin_tone:' => '🫰🏼',
+ ':hand_with_index_finger_and_thumb_crossed_medium_skin_tone:' => '🫰🏽',
':handball_tone1:' => '🤾🏻',
':handball_tone2:' => '🤾🏼',
':handball_tone3:' => '🤾🏽',
@@ -2000,32 +1687,98 @@
':handshake_tone3:' => '🤝🏽',
':handshake_tone4:' => '🤝🏾',
':handshake_tone5:' => '🤝🏿',
- ':hash:' => '#⃣',
+ ':heart:' => '❤️',
+ ':heart_exclamation:' => '❣️',
+ ':heart_hands_dark_skin_tone:' => '🫶🏿',
+ ':heart_hands_light_skin_tone:' => '🫶🏻',
+ ':heart_hands_medium_dark_skin_tone:' => '🫶🏾',
+ ':heart_hands_medium_light_skin_tone:' => '🫶🏼',
+ ':heart_hands_medium_skin_tone:' => '🫶🏽',
+ ':hearts:' => '♥️',
+ ':heavy_check_mark:' => '✔️',
+ ':heavy_multiplication_x:' => '✖️',
+ ':helmet_with_cross:' => '⛑️',
+ ':hole:' => '🕳️',
+ ':homes:' => '🏘️',
':horse_racing_tone1:' => '🏇🏻',
':horse_racing_tone2:' => '🏇🏼',
':horse_racing_tone3:' => '🏇🏽',
':horse_racing_tone4:' => '🏇🏾',
':horse_racing_tone5:' => '🏇🏿',
+ ':hot_pepper:' => '🌶️',
+ ':hotsprings:' => '♨️',
+ ':house_abandoned:' => '🏚️',
+ ':ice_skate:' => '⛸️',
+ ':index_pointing_at_the_viewer_dark_skin_tone:' => '🫵🏿',
+ ':index_pointing_at_the_viewer_light_skin_tone:' => '🫵🏻',
+ ':index_pointing_at_the_viewer_medium_dark_skin_tone:' => '🫵🏾',
+ ':index_pointing_at_the_viewer_medium_light_skin_tone:' => '🫵🏼',
+ ':index_pointing_at_the_viewer_medium_skin_tone:' => '🫵🏽',
+ ':infinity:' => '♾️',
':information_desk_person_tone1:' => '💁🏻',
':information_desk_person_tone2:' => '💁🏼',
':information_desk_person_tone3:' => '💁🏽',
':information_desk_person_tone4:' => '💁🏾',
':information_desk_person_tone5:' => '💁🏿',
+ ':information_source:' => 'ℹ️',
+ ':interrobang:' => '⁉️',
+ ':island:' => '🏝️',
+ ':joystick:' => '🕹️',
':juggling_tone1:' => '🤹🏻',
':juggling_tone2:' => '🤹🏼',
':juggling_tone3:' => '🤹🏽',
':juggling_tone4:' => '🤹🏾',
':juggling_tone5:' => '🤹🏿',
+ ':key2:' => '🗝️',
+ ':keyboard:' => '⌨️',
+ ':kiss_dark_skin_tone:' => '💏🏿',
+ ':kiss_light_skin_tone:' => '💏🏻',
+ ':kiss_medium_dark_skin_tone:' => '💏🏾',
+ ':kiss_medium_light_skin_tone:' => '💏🏼',
+ ':kiss_medium_skin_tone:' => '💏🏽',
+ ':label:' => '🏷️',
':left_facing_fist_tone1:' => '🤛🏻',
':left_facing_fist_tone2:' => '🤛🏼',
':left_facing_fist_tone3:' => '🤛🏽',
':left_facing_fist_tone4:' => '🤛🏾',
':left_facing_fist_tone5:' => '🤛🏿',
+ ':left_right_arrow:' => '↔️',
+ ':leftwards_arrow_with_hook:' => '↩️',
+ ':leftwards_hand_dark_skin_tone:' => '🫲🏿',
+ ':leftwards_hand_light_skin_tone:' => '🫲🏻',
+ ':leftwards_hand_medium_dark_skin_tone:' => '🫲🏾',
+ ':leftwards_hand_medium_light_skin_tone:' => '🫲🏼',
+ ':leftwards_hand_medium_skin_tone:' => '🫲🏽',
+ ':leftwards_pushing_hand_dark_skin_tone:' => '🫷🏿',
+ ':leftwards_pushing_hand_light_skin_tone:' => '🫷🏻',
+ ':leftwards_pushing_hand_medium_dark_skin_tone:' => '🫷🏾',
+ ':leftwards_pushing_hand_medium_light_skin_tone:' => '🫷🏼',
+ ':leftwards_pushing_hand_medium_skin_tone:' => '🫷🏽',
+ ':leg_dark_skin_tone:' => '🦵🏿',
+ ':leg_light_skin_tone:' => '🦵🏻',
+ ':leg_medium_dark_skin_tone:' => '🦵🏾',
+ ':leg_medium_light_skin_tone:' => '🦵🏼',
+ ':leg_medium_skin_tone:' => '🦵🏽',
+ ':level_slider:' => '🎚️',
+ ':levitate:' => '🕴️',
+ ':lifter:' => '🏋️',
':lifter_tone1:' => '🏋🏻',
':lifter_tone2:' => '🏋🏼',
':lifter_tone3:' => '🏋🏽',
':lifter_tone4:' => '🏋🏾',
':lifter_tone5:' => '🏋🏿',
+ ':love_you_gesture_dark_skin_tone:' => '🤟🏿',
+ ':love_you_gesture_light_skin_tone:' => '🤟🏻',
+ ':love_you_gesture_medium_dark_skin_tone:' => '🤟🏾',
+ ':love_you_gesture_medium_light_skin_tone:' => '🤟🏼',
+ ':love_you_gesture_medium_skin_tone:' => '🤟🏽',
+ ':m:' => 'Ⓜ️',
+ ':mage_dark_skin_tone:' => '🧙🏿',
+ ':mage_light_skin_tone:' => '🧙🏻',
+ ':mage_medium_dark_skin_tone:' => '🧙🏾',
+ ':mage_medium_light_skin_tone:' => '🧙🏼',
+ ':mage_medium_skin_tone:' => '🧙🏽',
+ ':male_sign:' => '♂️',
':man_dancing_tone1:' => '🕺🏻',
':man_dancing_tone2:' => '🕺🏼',
':man_dancing_tone3:' => '🕺🏽',
@@ -2051,26 +1804,46 @@
':man_with_turban_tone3:' => '👳🏽',
':man_with_turban_tone4:' => '👳🏾',
':man_with_turban_tone5:' => '👳🏿',
+ ':map:' => '🗺️',
':massage_tone1:' => '💆🏻',
':massage_tone2:' => '💆🏼',
':massage_tone3:' => '💆🏽',
':massage_tone4:' => '💆🏾',
':massage_tone5:' => '💆🏿',
+ ':medical_symbol:' => '⚕️',
+ ':men_holding_hands_dark_skin_tone:' => '👬🏿',
+ ':men_holding_hands_light_skin_tone:' => '👬🏻',
+ ':men_holding_hands_medium_dark_skin_tone:' => '👬🏾',
+ ':men_holding_hands_medium_light_skin_tone:' => '👬🏼',
+ ':men_holding_hands_medium_skin_tone:' => '👬🏽',
+ ':merperson_dark_skin_tone:' => '🧜🏿',
+ ':merperson_light_skin_tone:' => '🧜🏻',
+ ':merperson_medium_dark_skin_tone:' => '🧜🏾',
+ ':merperson_medium_light_skin_tone:' => '🧜🏼',
+ ':merperson_medium_skin_tone:' => '🧜🏽',
':metal_tone1:' => '🤘🏻',
':metal_tone2:' => '🤘🏼',
':metal_tone3:' => '🤘🏽',
':metal_tone4:' => '🤘🏾',
':metal_tone5:' => '🤘🏿',
+ ':microphone2:' => '🎙️',
':middle_finger_tone1:' => '🖕🏻',
':middle_finger_tone2:' => '🖕🏼',
':middle_finger_tone3:' => '🖕🏽',
':middle_finger_tone4:' => '🖕🏾',
':middle_finger_tone5:' => '🖕🏿',
+ ':military_medal:' => '🎖️',
+ ':motorboat:' => '🛥️',
+ ':motorcycle:' => '🏍️',
+ ':motorway:' => '🛣️',
+ ':mountain:' => '⛰️',
':mountain_bicyclist_tone1:' => '🚵🏻',
':mountain_bicyclist_tone2:' => '🚵🏼',
':mountain_bicyclist_tone3:' => '🚵🏽',
':mountain_bicyclist_tone4:' => '🚵🏾',
':mountain_bicyclist_tone5:' => '🚵🏿',
+ ':mountain_snow:' => '🏔️',
+ ':mouse_three_button:' => '🖱️',
':mrs_claus_tone1:' => '🤶🏻',
':mrs_claus_tone2:' => '🤶🏼',
':mrs_claus_tone3:' => '🤶🏽',
@@ -2086,6 +1859,12 @@
':nail_care_tone3:' => '💅🏽',
':nail_care_tone4:' => '💅🏾',
':nail_care_tone5:' => '💅🏿',
+ ':newspaper2:' => '🗞️',
+ ':ninja_dark_skin_tone:' => '🥷🏿',
+ ':ninja_light_skin_tone:' => '🥷🏻',
+ ':ninja_medium_dark_skin_tone:' => '🥷🏾',
+ ':ninja_medium_light_skin_tone:' => '🥷🏼',
+ ':ninja_medium_skin_tone:' => '🥷🏽',
':no_good_tone1:' => '🙅🏻',
':no_good_tone2:' => '🙅🏼',
':no_good_tone3:' => '🙅🏽',
@@ -2096,6 +1875,9 @@
':nose_tone3:' => '👃🏽',
':nose_tone4:' => '👃🏾',
':nose_tone5:' => '👃🏿',
+ ':notepad_spiral:' => '🗒️',
+ ':o2:' => '🅾️',
+ ':oil:' => '🛢️',
':ok_hand_tone1:' => '👌🏻',
':ok_hand_tone2:' => '👌🏼',
':ok_hand_tone3:' => '👌🏽',
@@ -2111,31 +1893,130 @@
':older_man_tone3:' => '👴🏽',
':older_man_tone4:' => '👴🏾',
':older_man_tone5:' => '👴🏿',
+ ':older_person_dark_skin_tone:' => '🧓🏿',
+ ':older_person_light_skin_tone:' => '🧓🏻',
+ ':older_person_medium_dark_skin_tone:' => '🧓🏾',
+ ':older_person_medium_light_skin_tone:' => '🧓🏼',
+ ':older_person_medium_skin_tone:' => '🧓🏽',
':older_woman_tone1:' => '👵🏻',
':older_woman_tone2:' => '👵🏼',
':older_woman_tone3:' => '👵🏽',
':older_woman_tone4:' => '👵🏾',
':older_woman_tone5:' => '👵🏿',
+ ':om_symbol:' => '🕉️',
':open_hands_tone1:' => '👐🏻',
':open_hands_tone2:' => '👐🏼',
':open_hands_tone3:' => '👐🏽',
':open_hands_tone4:' => '👐🏾',
':open_hands_tone5:' => '👐🏿',
+ ':orthodox_cross:' => '☦️',
+ ':paintbrush:' => '🖌️',
+ ':palm_down_hand_dark_skin_tone:' => '🫳🏿',
+ ':palm_down_hand_light_skin_tone:' => '🫳🏻',
+ ':palm_down_hand_medium_dark_skin_tone:' => '🫳🏾',
+ ':palm_down_hand_medium_light_skin_tone:' => '🫳🏼',
+ ':palm_down_hand_medium_skin_tone:' => '🫳🏽',
+ ':palm_up_hand_dark_skin_tone:' => '🫴🏿',
+ ':palm_up_hand_light_skin_tone:' => '🫴🏻',
+ ':palm_up_hand_medium_dark_skin_tone:' => '🫴🏾',
+ ':palm_up_hand_medium_light_skin_tone:' => '🫴🏼',
+ ':palm_up_hand_medium_skin_tone:' => '🫴🏽',
+ ':palms_up_together_dark_skin_tone:' => '🤲🏿',
+ ':palms_up_together_light_skin_tone:' => '🤲🏻',
+ ':palms_up_together_medium_dark_skin_tone:' => '🤲🏾',
+ ':palms_up_together_medium_light_skin_tone:' => '🤲🏼',
+ ':palms_up_together_medium_skin_tone:' => '🤲🏽',
+ ':paperclips:' => '🖇️',
+ ':park:' => '🏞️',
+ ':parking:' => '🅿️',
+ ':part_alternation_mark:' => '〽️',
+ ':pause_button:' => '⏸️',
+ ':peace:' => '☮️',
+ ':pen_ballpoint:' => '🖊️',
+ ':pen_fountain:' => '🖋️',
+ ':pencil2:' => '✏️',
+ ':person_climbing_dark_skin_tone:' => '🧗🏿',
+ ':person_climbing_light_skin_tone:' => '🧗🏻',
+ ':person_climbing_medium_dark_skin_tone:' => '🧗🏾',
+ ':person_climbing_medium_light_skin_tone:' => '🧗🏼',
+ ':person_climbing_medium_skin_tone:' => '🧗🏽',
+ ':person_dark_skin_tone:' => '🧑🏿',
+ ':person_dark_skin_tone_beard:' => '🧔🏿',
':person_frowning_tone1:' => '🙍🏻',
':person_frowning_tone2:' => '🙍🏼',
':person_frowning_tone3:' => '🙍🏽',
':person_frowning_tone4:' => '🙍🏾',
':person_frowning_tone5:' => '🙍🏿',
+ ':person_golfing_dark_skin_tone:' => '🏌🏿',
+ ':person_golfing_light_skin_tone:' => '🏌🏻',
+ ':person_golfing_medium_dark_skin_tone:' => '🏌🏾',
+ ':person_golfing_medium_light_skin_tone:' => '🏌🏼',
+ ':person_golfing_medium_skin_tone:' => '🏌🏽',
+ ':person_in_bed_dark_skin_tone:' => '🛌🏿',
+ ':person_in_bed_light_skin_tone:' => '🛌🏻',
+ ':person_in_bed_medium_dark_skin_tone:' => '🛌🏾',
+ ':person_in_bed_medium_light_skin_tone:' => '🛌🏼',
+ ':person_in_bed_medium_skin_tone:' => '🛌🏽',
+ ':person_in_lotus_position_dark_skin_tone:' => '🧘🏿',
+ ':person_in_lotus_position_light_skin_tone:' => '🧘🏻',
+ ':person_in_lotus_position_medium_dark_skin_tone:' => '🧘🏾',
+ ':person_in_lotus_position_medium_light_skin_tone:' => '🧘🏼',
+ ':person_in_lotus_position_medium_skin_tone:' => '🧘🏽',
+ ':person_in_steamy_room_dark_skin_tone:' => '🧖🏿',
+ ':person_in_steamy_room_light_skin_tone:' => '🧖🏻',
+ ':person_in_steamy_room_medium_dark_skin_tone:' => '🧖🏾',
+ ':person_in_steamy_room_medium_light_skin_tone:' => '🧖🏼',
+ ':person_in_steamy_room_medium_skin_tone:' => '🧖🏽',
+ ':person_in_suit_levitating_dark_skin_tone:' => '🕴🏿',
+ ':person_in_suit_levitating_light_skin_tone:' => '🕴🏻',
+ ':person_in_suit_levitating_medium_dark_skin_tone:' => '🕴🏾',
+ ':person_in_suit_levitating_medium_light_skin_tone:' => '🕴🏼',
+ ':person_in_suit_levitating_medium_skin_tone:' => '🕴🏽',
+ ':person_kneeling_dark_skin_tone:' => '🧎🏿',
+ ':person_kneeling_light_skin_tone:' => '🧎🏻',
+ ':person_kneeling_medium_dark_skin_tone:' => '🧎🏾',
+ ':person_kneeling_medium_light_skin_tone:' => '🧎🏼',
+ ':person_kneeling_medium_skin_tone:' => '🧎🏽',
+ ':person_light_skin_tone:' => '🧑🏻',
+ ':person_light_skin_tone_beard:' => '🧔🏻',
+ ':person_medium_dark_skin_tone:' => '🧑🏾',
+ ':person_medium_dark_skin_tone_beard:' => '🧔🏾',
+ ':person_medium_light_skin_tone:' => '🧑🏼',
+ ':person_medium_light_skin_tone_beard:' => '🧔🏼',
+ ':person_medium_skin_tone:' => '🧑🏽',
+ ':person_medium_skin_tone_beard:' => '🧔🏽',
+ ':person_standing_dark_skin_tone:' => '🧍🏿',
+ ':person_standing_light_skin_tone:' => '🧍🏻',
+ ':person_standing_medium_dark_skin_tone:' => '🧍🏾',
+ ':person_standing_medium_light_skin_tone:' => '🧍🏼',
+ ':person_standing_medium_skin_tone:' => '🧍🏽',
':person_with_blond_hair_tone1:' => '👱🏻',
':person_with_blond_hair_tone2:' => '👱🏼',
':person_with_blond_hair_tone3:' => '👱🏽',
':person_with_blond_hair_tone4:' => '👱🏾',
':person_with_blond_hair_tone5:' => '👱🏿',
+ ':person_with_crown_dark_skin_tone:' => '🫅🏿',
+ ':person_with_crown_light_skin_tone:' => '🫅🏻',
+ ':person_with_crown_medium_dark_skin_tone:' => '🫅🏾',
+ ':person_with_crown_medium_light_skin_tone:' => '🫅🏼',
+ ':person_with_crown_medium_skin_tone:' => '🫅🏽',
':person_with_pouting_face_tone1:' => '🙎🏻',
':person_with_pouting_face_tone2:' => '🙎🏼',
':person_with_pouting_face_tone3:' => '🙎🏽',
':person_with_pouting_face_tone4:' => '🙎🏾',
':person_with_pouting_face_tone5:' => '🙎🏿',
+ ':pick:' => '⛏️',
+ ':pinched_fingers_dark_skin_tone:' => '🤌🏿',
+ ':pinched_fingers_light_skin_tone:' => '🤌🏻',
+ ':pinched_fingers_medium_dark_skin_tone:' => '🤌🏾',
+ ':pinched_fingers_medium_light_skin_tone:' => '🤌🏼',
+ ':pinched_fingers_medium_skin_tone:' => '🤌🏽',
+ ':pinching_hand_dark_skin_tone:' => '🤏🏿',
+ ':pinching_hand_light_skin_tone:' => '🤏🏻',
+ ':pinching_hand_medium_dark_skin_tone:' => '🤏🏾',
+ ':pinching_hand_medium_light_skin_tone:' => '🤏🏼',
+ ':pinching_hand_medium_skin_tone:' => '🤏🏽',
+ ':play_pause:' => '⏯️',
':point_down_tone1:' => '👇🏻',
':point_down_tone2:' => '👇🏼',
':point_down_tone3:' => '👇🏽',
@@ -2151,6 +2032,7 @@
':point_right_tone3:' => '👉🏽',
':point_right_tone4:' => '👉🏾',
':point_right_tone5:' => '👉🏿',
+ ':point_up:' => '☝️',
':point_up_2_tone1:' => '👆🏻',
':point_up_2_tone2:' => '👆🏼',
':point_up_2_tone3:' => '👆🏽',
@@ -2166,6 +2048,16 @@
':pray_tone3:' => '🙏🏽',
':pray_tone4:' => '🙏🏾',
':pray_tone5:' => '🙏🏿',
+ ':pregnant_man_dark_skin_tone:' => '🫃🏿',
+ ':pregnant_man_light_skin_tone:' => '🫃🏻',
+ ':pregnant_man_medium_dark_skin_tone:' => '🫃🏾',
+ ':pregnant_man_medium_light_skin_tone:' => '🫃🏼',
+ ':pregnant_man_medium_skin_tone:' => '🫃🏽',
+ ':pregnant_person_dark_skin_tone:' => '🫄🏿',
+ ':pregnant_person_light_skin_tone:' => '🫄🏻',
+ ':pregnant_person_medium_dark_skin_tone:' => '🫄🏾',
+ ':pregnant_person_medium_light_skin_tone:' => '🫄🏼',
+ ':pregnant_person_medium_skin_tone:' => '🫄🏽',
':pregnant_woman_tone1:' => '🤰🏻',
':pregnant_woman_tone2:' => '🤰🏼',
':pregnant_woman_tone3:' => '🤰🏽',
@@ -2181,11 +2073,16 @@
':princess_tone3:' => '👸🏽',
':princess_tone4:' => '👸🏾',
':princess_tone5:' => '👸🏿',
+ ':printer:' => '🖨️',
+ ':projector:' => '📽️',
':punch_tone1:' => '👊🏻',
':punch_tone2:' => '👊🏼',
':punch_tone3:' => '👊🏽',
':punch_tone4:' => '👊🏾',
':punch_tone5:' => '👊🏿',
+ ':race_car:' => '🏎️',
+ ':radioactive:' => '☢️',
+ ':railway_track:' => '🛤️',
':raised_back_of_hand_tone1:' => '🤚🏻',
':raised_back_of_hand_tone2:' => '🤚🏼',
':raised_back_of_hand_tone3:' => '🤚🏽',
@@ -2206,11 +2103,27 @@
':raising_hand_tone3:' => '🙋🏽',
':raising_hand_tone4:' => '🙋🏾',
':raising_hand_tone5:' => '🙋🏿',
+ ':record_button:' => '⏺️',
+ ':recycle:' => '♻️',
+ ':registered:' => '®️',
+ ':relaxed:' => '☺️',
+ ':reminder_ribbon:' => '🎗️',
':right_facing_fist_tone1:' => '🤜🏻',
':right_facing_fist_tone2:' => '🤜🏼',
':right_facing_fist_tone3:' => '🤜🏽',
':right_facing_fist_tone4:' => '🤜🏾',
':right_facing_fist_tone5:' => '🤜🏿',
+ ':rightwards_hand_dark_skin_tone:' => '🫱🏿',
+ ':rightwards_hand_light_skin_tone:' => '🫱🏻',
+ ':rightwards_hand_medium_dark_skin_tone:' => '🫱🏾',
+ ':rightwards_hand_medium_light_skin_tone:' => '🫱🏼',
+ ':rightwards_hand_medium_skin_tone:' => '🫱🏽',
+ ':rightwards_pushing_hand_dark_skin_tone:' => '🫸🏿',
+ ':rightwards_pushing_hand_light_skin_tone:' => '🫸🏻',
+ ':rightwards_pushing_hand_medium_dark_skin_tone:' => '🫸🏾',
+ ':rightwards_pushing_hand_medium_light_skin_tone:' => '🫸🏼',
+ ':rightwards_pushing_hand_medium_skin_tone:' => '🫸🏽',
+ ':rosette:' => '🏵️',
':rowboat_tone1:' => '🚣🏻',
':rowboat_tone2:' => '🚣🏼',
':rowboat_tone3:' => '🚣🏽',
@@ -2221,26 +2134,67 @@
':runner_tone3:' => '🏃🏽',
':runner_tone4:' => '🏃🏾',
':runner_tone5:' => '🏃🏿',
+ ':sa:' => '🈂️',
':santa_tone1:' => '🎅🏻',
':santa_tone2:' => '🎅🏼',
':santa_tone3:' => '🎅🏽',
':santa_tone4:' => '🎅🏾',
':santa_tone5:' => '🎅🏿',
+ ':satellite_orbital:' => '🛰️',
+ ':scales:' => '⚖️',
+ ':scissors:' => '✂️',
+ ':secret:' => '㊙️',
':selfie_tone1:' => '🤳🏻',
':selfie_tone2:' => '🤳🏼',
':selfie_tone3:' => '🤳🏽',
':selfie_tone4:' => '🤳🏾',
':selfie_tone5:' => '🤳🏿',
+ ':shamrock:' => '☘️',
+ ':shield:' => '🛡️',
+ ':shinto_shrine:' => '⛩️',
+ ':shopping_bags:' => '🛍️',
':shrug_tone1:' => '🤷🏻',
':shrug_tone2:' => '🤷🏼',
':shrug_tone3:' => '🤷🏽',
':shrug_tone4:' => '🤷🏾',
':shrug_tone5:' => '🤷🏿',
+ ':skier:' => '⛷️',
+ ':skull_crossbones:' => '☠️',
+ ':snowboarder_dark_skin_tone:' => '🏂🏿',
+ ':snowboarder_light_skin_tone:' => '🏂🏻',
+ ':snowboarder_medium_dark_skin_tone:' => '🏂🏾',
+ ':snowboarder_medium_light_skin_tone:' => '🏂🏼',
+ ':snowboarder_medium_skin_tone:' => '🏂🏽',
+ ':snowflake:' => '❄️',
+ ':snowman2:' => '☃️',
+ ':spades:' => '♠️',
+ ':sparkle:' => '❇️',
+ ':speaking_head:' => '🗣️',
+ ':speech_left:' => '🗨️',
+ ':spider:' => '🕷️',
+ ':spider_web:' => '🕸️',
+ ':spy:' => '🕵️',
':spy_tone1:' => '🕵🏻',
':spy_tone2:' => '🕵🏼',
':spy_tone3:' => '🕵🏽',
':spy_tone4:' => '🕵🏾',
':spy_tone5:' => '🕵🏿',
+ ':stadium:' => '🏟️',
+ ':star_and_crescent:' => '☪️',
+ ':star_of_david:' => '✡️',
+ ':stop_button:' => '⏹️',
+ ':stopwatch:' => '⏱️',
+ ':sunny:' => '☀️',
+ ':superhero_dark_skin_tone:' => '🦸🏿',
+ ':superhero_light_skin_tone:' => '🦸🏻',
+ ':superhero_medium_dark_skin_tone:' => '🦸🏾',
+ ':superhero_medium_light_skin_tone:' => '🦸🏼',
+ ':superhero_medium_skin_tone:' => '🦸🏽',
+ ':supervillain_dark_skin_tone:' => '🦹🏿',
+ ':supervillain_light_skin_tone:' => '🦹🏻',
+ ':supervillain_medium_dark_skin_tone:' => '🦹🏾',
+ ':supervillain_medium_light_skin_tone:' => '🦹🏼',
+ ':supervillain_medium_skin_tone:' => '🦹🏽',
':surfer_tone1:' => '🏄🏻',
':surfer_tone2:' => '🏄🏼',
':surfer_tone3:' => '🏄🏽',
@@ -2251,6 +2205,8 @@
':swimmer_tone3:' => '🏊🏽',
':swimmer_tone4:' => '🏊🏾',
':swimmer_tone5:' => '🏊🏿',
+ ':telephone:' => '☎️',
+ ':thermometer:' => '🌡️',
':thumbsdown_tone1:' => '👎🏻',
':thumbsdown_tone2:' => '👎🏼',
':thumbsdown_tone3:' => '👎🏽',
@@ -2261,11 +2217,29 @@
':thumbsup_tone3:' => '👍🏽',
':thumbsup_tone4:' => '👍🏾',
':thumbsup_tone5:' => '👍🏿',
+ ':thunder_cloud_rain:' => '⛈️',
+ ':tickets:' => '🎟️',
+ ':timer:' => '⏲️',
+ ':tm:' => '™️',
+ ':tools:' => '🛠️',
+ ':track_next:' => '⏭️',
+ ':track_previous:' => '⏮️',
+ ':trackball:' => '🖲️',
+ ':transgender_symbol:' => '⚧️',
+ ':u6708:' => '🈷️',
+ ':umbrella2:' => '☂️',
+ ':urn:' => '⚱️',
+ ':v:' => '✌️',
':v_tone1:' => '✌🏻',
':v_tone2:' => '✌🏼',
':v_tone3:' => '✌🏽',
':v_tone4:' => '✌🏾',
':v_tone5:' => '✌🏿',
+ ':vampire_dark_skin_tone:' => '🧛🏿',
+ ':vampire_light_skin_tone:' => '🧛🏻',
+ ':vampire_medium_dark_skin_tone:' => '🧛🏾',
+ ':vampire_medium_light_skin_tone:' => '🧛🏼',
+ ':vampire_medium_skin_tone:' => '🧛🏽',
':vulcan_tone1:' => '🖖🏻',
':vulcan_tone2:' => '🖖🏼',
':vulcan_tone3:' => '🖖🏽',
@@ -2276,6 +2250,8 @@
':walking_tone3:' => '🚶🏽',
':walking_tone4:' => '🚶🏾',
':walking_tone5:' => '🚶🏿',
+ ':warning:' => '⚠️',
+ ':wastebasket:' => '🗑️',
':water_polo_tone1:' => '🤽🏻',
':water_polo_tone2:' => '🤽🏼',
':water_polo_tone3:' => '🤽🏽',
@@ -2286,41 +2262,1153 @@
':wave_tone3:' => '👋🏽',
':wave_tone4:' => '👋🏾',
':wave_tone5:' => '👋🏿',
+ ':wavy_dash:' => '〰️',
+ ':wheel_of_dharma:' => '☸️',
+ ':white_medium_square:' => '◻️',
+ ':white_small_square:' => '▫️',
+ ':white_sun_cloud:' => '🌥️',
+ ':white_sun_rain_cloud:' => '🌦️',
+ ':white_sun_small_cloud:' => '🌤️',
+ ':wind_blowing_face:' => '🌬️',
+ ':woman_and_man_holding_hands_dark_skin_tone:' => '👫🏿',
+ ':woman_and_man_holding_hands_light_skin_tone:' => '👫🏻',
+ ':woman_and_man_holding_hands_medium_dark_skin_tone:' => '👫🏾',
+ ':woman_and_man_holding_hands_medium_light_skin_tone:' => '👫🏼',
+ ':woman_and_man_holding_hands_medium_skin_tone:' => '👫🏽',
':woman_tone1:' => '👩🏻',
':woman_tone2:' => '👩🏼',
':woman_tone3:' => '👩🏽',
':woman_tone4:' => '👩🏾',
':woman_tone5:' => '👩🏿',
- ':wrestlers_tone1:' => '🤼🏻',
- ':wrestlers_tone2:' => '🤼🏼',
- ':wrestlers_tone3:' => '🤼🏽',
- ':wrestlers_tone4:' => '🤼🏾',
- ':wrestlers_tone5:' => '🤼🏿',
+ ':woman_with_headscarf_dark_skin_tone:' => '🧕🏿',
+ ':woman_with_headscarf_light_skin_tone:' => '🧕🏻',
+ ':woman_with_headscarf_medium_dark_skin_tone:' => '🧕🏾',
+ ':woman_with_headscarf_medium_light_skin_tone:' => '🧕🏼',
+ ':woman_with_headscarf_medium_skin_tone:' => '🧕🏽',
+ ':women_holding_hands_dark_skin_tone:' => '👭🏿',
+ ':women_holding_hands_light_skin_tone:' => '👭🏻',
+ ':women_holding_hands_medium_dark_skin_tone:' => '👭🏾',
+ ':women_holding_hands_medium_light_skin_tone:' => '👭🏼',
+ ':women_holding_hands_medium_skin_tone:' => '👭🏽',
+ ':writing_hand:' => '✍️',
':writing_hand_tone1:' => '✍🏻',
':writing_hand_tone2:' => '✍🏼',
':writing_hand_tone3:' => '✍🏽',
':writing_hand_tone4:' => '✍🏾',
':writing_hand_tone5:' => '✍🏿',
+ ':yin_yang:' => '☯️',
+ ':artist:' => '🧑🎨',
+ ':asterisk:' => '*️⃣',
+ ':astronaut:' => '🧑🚀',
+ ':black_bird:' => '🐦⬛',
+ ':black_cat:' => '🐈⬛',
+ ':brown_mushroom:' => '🍄🟫',
+ ':cook:' => '🧑🍳',
':eight:' => '8️⃣',
- ':eye_in_speech_bubble:' => '👁🗨',
+ ':face_exhaling:' => '😮💨',
+ ':face_with_spiral_eyes:' => '😵💫',
+ ':factory_worker:' => '🧑🏭',
+ ':family_adult_child:' => '🧑🧒',
+ ':family_man_boy:' => '👨👦',
+ ':family_man_girl:' => '👨👧',
+ ':family_woman_boy:' => '👩👦',
+ ':family_woman_girl:' => '👩👧',
+ ':farmer:' => '🧑🌾',
+ ':firefighter:' => '🧑🚒',
':five:' => '5️⃣',
':four:' => '4️⃣',
+ ':hash:' => '#️⃣',
+ ':lime:' => '🍋🟩',
+ ':man_artist:' => '👨🎨',
+ ':man_astronaut:' => '👨🚀',
+ ':man_bald:' => '👨🦲',
+ ':man_cook:' => '👨🍳',
+ ':man_curly_hair:' => '👨🦱',
+ ':man_factory_worker:' => '👨🏭',
+ ':man_farmer:' => '👨🌾',
+ ':man_feeding_baby:' => '👨🍼',
+ ':man_firefighter:' => '👨🚒',
+ ':man_in_manual_wheelchair:' => '👨🦽',
+ ':man_in_motorized_wheelchair:' => '👨🦼',
+ ':man_mechanic:' => '👨🔧',
+ ':man_office_worker:' => '👨💼',
+ ':man_red_hair:' => '👨🦰',
+ ':man_scientist:' => '👨🔬',
+ ':man_singer:' => '👨🎤',
+ ':man_student:' => '👨🎓',
+ ':man_teacher:' => '👨🏫',
+ ':man_technologist:' => '👨💻',
+ ':man_white_hair:' => '👨🦳',
+ ':man_with_white_cane:' => '👨🦯',
+ ':mechanic:' => '🧑🔧',
+ ':mx_claus:' => '🧑🎄',
':nine:' => '9️⃣',
+ ':office_worker:' => '🧑💼',
':one:' => '1️⃣',
+ ':person_bald:' => '🧑🦲',
+ ':person_curly_hair:' => '🧑🦱',
+ ':person_feeding_baby:' => '🧑🍼',
+ ':person_in_manual_wheelchair:' => '🧑🦽',
+ ':person_in_motorized_wheelchair:' => '🧑🦼',
+ ':person_red_hair:' => '🧑🦰',
+ ':person_white_hair:' => '🧑🦳',
+ ':person_with_white_cane:' => '🧑🦯',
+ ':phoenix:' => '🐦🔥',
+ ':scientist:' => '🧑🔬',
+ ':service_dog:' => '🐕🦺',
':seven:' => '7️⃣',
+ ':singer:' => '🧑🎤',
':six:' => '6️⃣',
+ ':student:' => '🧑🎓',
+ ':teacher:' => '🧑🏫',
+ ':technologist:' => '🧑💻',
':three:' => '3️⃣',
':two:' => '2️⃣',
+ ':woman_artist:' => '👩🎨',
+ ':woman_astronaut:' => '👩🚀',
+ ':woman_bald:' => '👩🦲',
+ ':woman_cook:' => '👩🍳',
+ ':woman_curly_hair:' => '👩🦱',
+ ':woman_factory_worker:' => '👩🏭',
+ ':woman_farmer:' => '👩🌾',
+ ':woman_feeding_baby:' => '👩🍼',
+ ':woman_firefighter:' => '👩🚒',
+ ':woman_in_manual_wheelchair:' => '👩🦽',
+ ':woman_in_motorized_wheelchair:' => '👩🦼',
+ ':woman_mechanic:' => '👩🔧',
+ ':woman_office_worker:' => '👩💼',
+ ':woman_red_hair:' => '👩🦰',
+ ':woman_scientist:' => '👩🔬',
+ ':woman_singer:' => '👩🎤',
+ ':woman_student:' => '👩🎓',
+ ':woman_teacher:' => '👩🏫',
+ ':woman_technologist:' => '👩💻',
+ ':woman_white_hair:' => '👩🦳',
+ ':woman_with_white_cane:' => '👩🦯',
':zero:' => '0️⃣',
+ ':artist_dark_skin_tone:' => '🧑🏿🎨',
+ ':artist_light_skin_tone:' => '🧑🏻🎨',
+ ':artist_medium_dark_skin_tone:' => '🧑🏾🎨',
+ ':artist_medium_light_skin_tone:' => '🧑🏼🎨',
+ ':artist_medium_skin_tone:' => '🧑🏽🎨',
+ ':astronaut_dark_skin_tone:' => '🧑🏿🚀',
+ ':astronaut_light_skin_tone:' => '🧑🏻🚀',
+ ':astronaut_medium_dark_skin_tone:' => '🧑🏾🚀',
+ ':astronaut_medium_light_skin_tone:' => '🧑🏼🚀',
+ ':astronaut_medium_skin_tone:' => '🧑🏽🚀',
+ ':broken_chain:' => '⛓️💥',
+ ':cook_dark_skin_tone:' => '🧑🏿🍳',
+ ':cook_light_skin_tone:' => '🧑🏻🍳',
+ ':cook_medium_dark_skin_tone:' => '🧑🏾🍳',
+ ':cook_medium_light_skin_tone:' => '🧑🏼🍳',
+ ':cook_medium_skin_tone:' => '🧑🏽🍳',
+ ':deaf_man:' => '🧏♂️',
+ ':deaf_woman:' => '🧏♀️',
+ ':face_in_clouds:' => '😶🌫️',
+ ':factory_worker_dark_skin_tone:' => '🧑🏿🏭',
+ ':factory_worker_light_skin_tone:' => '🧑🏻🏭',
+ ':factory_worker_medium_dark_skin_tone:' => '🧑🏾🏭',
+ ':factory_worker_medium_light_skin_tone:' => '🧑🏼🏭',
+ ':factory_worker_medium_skin_tone:' => '🧑🏽🏭',
+ ':farmer_dark_skin_tone:' => '🧑🏿🌾',
+ ':farmer_light_skin_tone:' => '🧑🏻🌾',
+ ':farmer_medium_dark_skin_tone:' => '🧑🏾🌾',
+ ':farmer_medium_light_skin_tone:' => '🧑🏼🌾',
+ ':farmer_medium_skin_tone:' => '🧑🏽🌾',
+ ':firefighter_dark_skin_tone:' => '🧑🏿🚒',
+ ':firefighter_light_skin_tone:' => '🧑🏻🚒',
+ ':firefighter_medium_dark_skin_tone:' => '🧑🏾🚒',
+ ':firefighter_medium_light_skin_tone:' => '🧑🏼🚒',
+ ':firefighter_medium_skin_tone:' => '🧑🏽🚒',
+ ':gay_pride_flag:' => '🏳️🌈',
+ ':head_shaking_horizontally:' => '🙂↔️',
+ ':head_shaking_vertically:' => '🙂↕️',
+ ':health_worker:' => '🧑⚕️',
+ ':heart_on_fire:' => '❤️🔥',
+ ':judge:' => '🧑⚖️',
+ ':man_artist_dark_skin_tone:' => '👨🏿🎨',
+ ':man_artist_light_skin_tone:' => '👨🏻🎨',
+ ':man_artist_medium_dark_skin_tone:' => '👨🏾🎨',
+ ':man_artist_medium_light_skin_tone:' => '👨🏼🎨',
+ ':man_artist_medium_skin_tone:' => '👨🏽🎨',
+ ':man_astronaut_dark_skin_tone:' => '👨🏿🚀',
+ ':man_astronaut_light_skin_tone:' => '👨🏻🚀',
+ ':man_astronaut_medium_dark_skin_tone:' => '👨🏾🚀',
+ ':man_astronaut_medium_light_skin_tone:' => '👨🏼🚀',
+ ':man_astronaut_medium_skin_tone:' => '👨🏽🚀',
+ ':man_beard:' => '🧔♂️',
+ ':man_biking:' => '🚴♂️',
+ ':man_blond_hair:' => '👱♂️',
+ ':man_bowing:' => '🙇♂️',
+ ':man_cartwheeling:' => '🤸♂️',
+ ':man_climbing:' => '🧗♂️',
+ ':man_construction_worker:' => '👷♂️',
+ ':man_cook_dark_skin_tone:' => '👨🏿🍳',
+ ':man_cook_light_skin_tone:' => '👨🏻🍳',
+ ':man_cook_medium_dark_skin_tone:' => '👨🏾🍳',
+ ':man_cook_medium_light_skin_tone:' => '👨🏼🍳',
+ ':man_cook_medium_skin_tone:' => '👨🏽🍳',
+ ':man_dark_skin_tone_bald:' => '👨🏿🦲',
+ ':man_dark_skin_tone_curly_hair:' => '👨🏿🦱',
+ ':man_dark_skin_tone_red_hair:' => '👨🏿🦰',
+ ':man_dark_skin_tone_white_hair:' => '👨🏿🦳',
+ ':man_elf:' => '🧝♂️',
+ ':man_facepalming:' => '🤦♂️',
+ ':man_factory_worker_dark_skin_tone:' => '👨🏿🏭',
+ ':man_factory_worker_light_skin_tone:' => '👨🏻🏭',
+ ':man_factory_worker_medium_dark_skin_tone:' => '👨🏾🏭',
+ ':man_factory_worker_medium_light_skin_tone:' => '👨🏼🏭',
+ ':man_factory_worker_medium_skin_tone:' => '👨🏽🏭',
+ ':man_fairy:' => '🧚♂️',
+ ':man_farmer_dark_skin_tone:' => '👨🏿🌾',
+ ':man_farmer_light_skin_tone:' => '👨🏻🌾',
+ ':man_farmer_medium_dark_skin_tone:' => '👨🏾🌾',
+ ':man_farmer_medium_light_skin_tone:' => '👨🏼🌾',
+ ':man_farmer_medium_skin_tone:' => '👨🏽🌾',
+ ':man_feeding_baby_dark_skin_tone:' => '👨🏿🍼',
+ ':man_feeding_baby_light_skin_tone:' => '👨🏻🍼',
+ ':man_feeding_baby_medium_dark_skin_tone:' => '👨🏾🍼',
+ ':man_feeding_baby_medium_light_skin_tone:' => '👨🏼🍼',
+ ':man_feeding_baby_medium_skin_tone:' => '👨🏽🍼',
+ ':man_firefighter_dark_skin_tone:' => '👨🏿🚒',
+ ':man_firefighter_light_skin_tone:' => '👨🏻🚒',
+ ':man_firefighter_medium_dark_skin_tone:' => '👨🏾🚒',
+ ':man_firefighter_medium_light_skin_tone:' => '👨🏼🚒',
+ ':man_firefighter_medium_skin_tone:' => '👨🏽🚒',
+ ':man_frowning:' => '🙍♂️',
+ ':man_genie:' => '🧞♂️',
+ ':man_gesturing_no:' => '🙅♂️',
+ ':man_gesturing_ok:' => '🙆♂️',
+ ':man_getting_haircut:' => '💇♂️',
+ ':man_getting_massage:' => '💆♂️',
+ ':man_guard:' => '💂♂️',
+ ':man_health_worker:' => '👨⚕️',
+ ':man_in_lotus_position:' => '🧘♂️',
+ ':man_in_manual_wheelchair_dark_skin_tone:' => '👨🏿🦽',
+ ':man_in_manual_wheelchair_light_skin_tone:' => '👨🏻🦽',
+ ':man_in_manual_wheelchair_medium_dark_skin_tone:' => '👨🏾🦽',
+ ':man_in_manual_wheelchair_medium_light_skin_tone:' => '👨🏼🦽',
+ ':man_in_manual_wheelchair_medium_skin_tone:' => '👨🏽🦽',
+ ':man_in_motorized_wheelchair_dark_skin_tone:' => '👨🏿🦼',
+ ':man_in_motorized_wheelchair_light_skin_tone:' => '👨🏻🦼',
+ ':man_in_motorized_wheelchair_medium_dark_skin_tone:' => '👨🏾🦼',
+ ':man_in_motorized_wheelchair_medium_light_skin_tone:' => '👨🏼🦼',
+ ':man_in_motorized_wheelchair_medium_skin_tone:' => '👨🏽🦼',
+ ':man_in_steamy_room:' => '🧖♂️',
+ ':man_in_tuxedo:' => '🤵♂️',
+ ':man_judge:' => '👨⚖️',
+ ':man_juggling:' => '🤹♂️',
+ ':man_kneeling:' => '🧎♂️',
+ ':man_light_skin_tone_bald:' => '👨🏻🦲',
+ ':man_light_skin_tone_curly_hair:' => '👨🏻🦱',
+ ':man_light_skin_tone_red_hair:' => '👨🏻🦰',
+ ':man_light_skin_tone_white_hair:' => '👨🏻🦳',
+ ':man_mage:' => '🧙♂️',
+ ':man_mechanic_dark_skin_tone:' => '👨🏿🔧',
+ ':man_mechanic_light_skin_tone:' => '👨🏻🔧',
+ ':man_mechanic_medium_dark_skin_tone:' => '👨🏾🔧',
+ ':man_mechanic_medium_light_skin_tone:' => '👨🏼🔧',
+ ':man_mechanic_medium_skin_tone:' => '👨🏽🔧',
+ ':man_medium_dark_skin_tone_bald:' => '👨🏾🦲',
+ ':man_medium_dark_skin_tone_curly_hair:' => '👨🏾🦱',
+ ':man_medium_dark_skin_tone_red_hair:' => '👨🏾🦰',
+ ':man_medium_dark_skin_tone_white_hair:' => '👨🏾🦳',
+ ':man_medium_light_skin_tone_bald:' => '👨🏼🦲',
+ ':man_medium_light_skin_tone_curly_hair:' => '👨🏼🦱',
+ ':man_medium_light_skin_tone_red_hair:' => '👨🏼🦰',
+ ':man_medium_light_skin_tone_white_hair:' => '👨🏼🦳',
+ ':man_medium_skin_tone_bald:' => '👨🏽🦲',
+ ':man_medium_skin_tone_curly_hair:' => '👨🏽🦱',
+ ':man_medium_skin_tone_red_hair:' => '👨🏽🦰',
+ ':man_medium_skin_tone_white_hair:' => '👨🏽🦳',
+ ':man_mountain_biking:' => '🚵♂️',
+ ':man_office_worker_dark_skin_tone:' => '👨🏿💼',
+ ':man_office_worker_light_skin_tone:' => '👨🏻💼',
+ ':man_office_worker_medium_dark_skin_tone:' => '👨🏾💼',
+ ':man_office_worker_medium_light_skin_tone:' => '👨🏼💼',
+ ':man_office_worker_medium_skin_tone:' => '👨🏽💼',
+ ':man_pilot:' => '👨✈️',
+ ':man_playing_handball:' => '🤾♂️',
+ ':man_playing_water_polo:' => '🤽♂️',
+ ':man_police_officer:' => '👮♂️',
+ ':man_pouting:' => '🙎♂️',
+ ':man_raising_hand:' => '🙋♂️',
+ ':man_rowing_boat:' => '🚣♂️',
+ ':man_running:' => '🏃♂️',
+ ':man_scientist_dark_skin_tone:' => '👨🏿🔬',
+ ':man_scientist_light_skin_tone:' => '👨🏻🔬',
+ ':man_scientist_medium_dark_skin_tone:' => '👨🏾🔬',
+ ':man_scientist_medium_light_skin_tone:' => '👨🏼🔬',
+ ':man_scientist_medium_skin_tone:' => '👨🏽🔬',
+ ':man_shrugging:' => '🤷♂️',
+ ':man_singer_dark_skin_tone:' => '👨🏿🎤',
+ ':man_singer_light_skin_tone:' => '👨🏻🎤',
+ ':man_singer_medium_dark_skin_tone:' => '👨🏾🎤',
+ ':man_singer_medium_light_skin_tone:' => '👨🏼🎤',
+ ':man_singer_medium_skin_tone:' => '👨🏽🎤',
+ ':man_standing:' => '🧍♂️',
+ ':man_student_dark_skin_tone:' => '👨🏿🎓',
+ ':man_student_light_skin_tone:' => '👨🏻🎓',
+ ':man_student_medium_dark_skin_tone:' => '👨🏾🎓',
+ ':man_student_medium_light_skin_tone:' => '👨🏼🎓',
+ ':man_student_medium_skin_tone:' => '👨🏽🎓',
+ ':man_superhero:' => '🦸♂️',
+ ':man_supervillain:' => '🦹♂️',
+ ':man_surfing:' => '🏄♂️',
+ ':man_swimming:' => '🏊♂️',
+ ':man_teacher_dark_skin_tone:' => '👨🏿🏫',
+ ':man_teacher_light_skin_tone:' => '👨🏻🏫',
+ ':man_teacher_medium_dark_skin_tone:' => '👨🏾🏫',
+ ':man_teacher_medium_light_skin_tone:' => '👨🏼🏫',
+ ':man_teacher_medium_skin_tone:' => '👨🏽🏫',
+ ':man_technologist_dark_skin_tone:' => '👨🏿💻',
+ ':man_technologist_light_skin_tone:' => '👨🏻💻',
+ ':man_technologist_medium_dark_skin_tone:' => '👨🏾💻',
+ ':man_technologist_medium_light_skin_tone:' => '👨🏼💻',
+ ':man_technologist_medium_skin_tone:' => '👨🏽💻',
+ ':man_tipping_hand:' => '💁♂️',
+ ':man_vampire:' => '🧛♂️',
+ ':man_walking:' => '🚶♂️',
+ ':man_wearing_turban:' => '👳♂️',
+ ':man_with_veil:' => '👰♂️',
+ ':man_with_white_cane_dark_skin_tone:' => '👨🏿🦯',
+ ':man_with_white_cane_light_skin_tone:' => '👨🏻🦯',
+ ':man_with_white_cane_medium_dark_skin_tone:' => '👨🏾🦯',
+ ':man_with_white_cane_medium_light_skin_tone:' => '👨🏼🦯',
+ ':man_with_white_cane_medium_skin_tone:' => '👨🏽🦯',
+ ':man_zombie:' => '🧟♂️',
+ ':mechanic_dark_skin_tone:' => '🧑🏿🔧',
+ ':mechanic_light_skin_tone:' => '🧑🏻🔧',
+ ':mechanic_medium_dark_skin_tone:' => '🧑🏾🔧',
+ ':mechanic_medium_light_skin_tone:' => '🧑🏼🔧',
+ ':mechanic_medium_skin_tone:' => '🧑🏽🔧',
+ ':men_with_bunny_ears:' => '👯♂️',
+ ':men_wrestling:' => '🤼♂️',
+ ':mending_heart:' => '❤️🩹',
+ ':mermaid:' => '🧜♀️',
+ ':merman:' => '🧜♂️',
+ ':mx_claus_dark_skin_tone:' => '🧑🏿🎄',
+ ':mx_claus_light_skin_tone:' => '🧑🏻🎄',
+ ':mx_claus_medium_dark_skin_tone:' => '🧑🏾🎄',
+ ':mx_claus_medium_light_skin_tone:' => '🧑🏼🎄',
+ ':mx_claus_medium_skin_tone:' => '🧑🏽🎄',
+ ':office_worker_dark_skin_tone:' => '🧑🏿💼',
+ ':office_worker_light_skin_tone:' => '🧑🏻💼',
+ ':office_worker_medium_dark_skin_tone:' => '🧑🏾💼',
+ ':office_worker_medium_light_skin_tone:' => '🧑🏼💼',
+ ':office_worker_medium_skin_tone:' => '🧑🏽💼',
+ ':person_dark_skin_tone_bald:' => '🧑🏿🦲',
+ ':person_dark_skin_tone_curly_hair:' => '🧑🏿🦱',
+ ':person_dark_skin_tone_red_hair:' => '🧑🏿🦰',
+ ':person_dark_skin_tone_white_hair:' => '🧑🏿🦳',
+ ':person_feeding_baby_dark_skin_tone:' => '🧑🏿🍼',
+ ':person_feeding_baby_light_skin_tone:' => '🧑🏻🍼',
+ ':person_feeding_baby_medium_dark_skin_tone:' => '🧑🏾🍼',
+ ':person_feeding_baby_medium_light_skin_tone:' => '🧑🏼🍼',
+ ':person_feeding_baby_medium_skin_tone:' => '🧑🏽🍼',
+ ':person_in_manual_wheelchair_dark_skin_tone:' => '🧑🏿🦽',
+ ':person_in_manual_wheelchair_light_skin_tone:' => '🧑🏻🦽',
+ ':person_in_manual_wheelchair_medium_dark_skin_tone:' => '🧑🏾🦽',
+ ':person_in_manual_wheelchair_medium_light_skin_tone:' => '🧑🏼🦽',
+ ':person_in_manual_wheelchair_medium_skin_tone:' => '🧑🏽🦽',
+ ':person_in_motorized_wheelchair_dark_skin_tone:' => '🧑🏿🦼',
+ ':person_in_motorized_wheelchair_light_skin_tone:' => '🧑🏻🦼',
+ ':person_in_motorized_wheelchair_medium_dark_skin_tone:' => '🧑🏾🦼',
+ ':person_in_motorized_wheelchair_medium_light_skin_tone:' => '🧑🏼🦼',
+ ':person_in_motorized_wheelchair_medium_skin_tone:' => '🧑🏽🦼',
+ ':person_kneeling_facing_right:' => '🧎➡️',
+ ':person_light_skin_tone_bald:' => '🧑🏻🦲',
+ ':person_light_skin_tone_curly_hair:' => '🧑🏻🦱',
+ ':person_light_skin_tone_red_hair:' => '🧑🏻🦰',
+ ':person_light_skin_tone_white_hair:' => '🧑🏻🦳',
+ ':person_medium_dark_skin_tone_bald:' => '🧑🏾🦲',
+ ':person_medium_dark_skin_tone_curly_hair:' => '🧑🏾🦱',
+ ':person_medium_dark_skin_tone_red_hair:' => '🧑🏾🦰',
+ ':person_medium_dark_skin_tone_white_hair:' => '🧑🏾🦳',
+ ':person_medium_light_skin_tone_bald:' => '🧑🏼🦲',
+ ':person_medium_light_skin_tone_curly_hair:' => '🧑🏼🦱',
+ ':person_medium_light_skin_tone_red_hair:' => '🧑🏼🦰',
+ ':person_medium_light_skin_tone_white_hair:' => '🧑🏼🦳',
+ ':person_medium_skin_tone_bald:' => '🧑🏽🦲',
+ ':person_medium_skin_tone_curly_hair:' => '🧑🏽🦱',
+ ':person_medium_skin_tone_red_hair:' => '🧑🏽🦰',
+ ':person_medium_skin_tone_white_hair:' => '🧑🏽🦳',
+ ':person_running_facing_right:' => '🏃➡️',
+ ':person_walking_facing_right:' => '🚶➡️',
+ ':person_with_white_cane_dark_skin_tone:' => '🧑🏿🦯',
+ ':person_with_white_cane_light_skin_tone:' => '🧑🏻🦯',
+ ':person_with_white_cane_medium_dark_skin_tone:' => '🧑🏾🦯',
+ ':person_with_white_cane_medium_light_skin_tone:' => '🧑🏼🦯',
+ ':person_with_white_cane_medium_skin_tone:' => '🧑🏽🦯',
+ ':pilot:' => '🧑✈️',
+ ':pirate_flag:' => '🏴☠️',
+ ':polar_bear:' => '🐻❄️',
+ ':scientist_dark_skin_tone:' => '🧑🏿🔬',
+ ':scientist_light_skin_tone:' => '🧑🏻🔬',
+ ':scientist_medium_dark_skin_tone:' => '🧑🏾🔬',
+ ':scientist_medium_light_skin_tone:' => '🧑🏼🔬',
+ ':scientist_medium_skin_tone:' => '🧑🏽🔬',
+ ':singer_dark_skin_tone:' => '🧑🏿🎤',
+ ':singer_light_skin_tone:' => '🧑🏻🎤',
+ ':singer_medium_dark_skin_tone:' => '🧑🏾🎤',
+ ':singer_medium_light_skin_tone:' => '🧑🏼🎤',
+ ':singer_medium_skin_tone:' => '🧑🏽🎤',
+ ':student_dark_skin_tone:' => '🧑🏿🎓',
+ ':student_light_skin_tone:' => '🧑🏻🎓',
+ ':student_medium_dark_skin_tone:' => '🧑🏾🎓',
+ ':student_medium_light_skin_tone:' => '🧑🏼🎓',
+ ':student_medium_skin_tone:' => '🧑🏽🎓',
+ ':teacher_dark_skin_tone:' => '🧑🏿🏫',
+ ':teacher_light_skin_tone:' => '🧑🏻🏫',
+ ':teacher_medium_dark_skin_tone:' => '🧑🏾🏫',
+ ':teacher_medium_light_skin_tone:' => '🧑🏼🏫',
+ ':teacher_medium_skin_tone:' => '🧑🏽🏫',
+ ':technologist_dark_skin_tone:' => '🧑🏿💻',
+ ':technologist_light_skin_tone:' => '🧑🏻💻',
+ ':technologist_medium_dark_skin_tone:' => '🧑🏾💻',
+ ':technologist_medium_light_skin_tone:' => '🧑🏼💻',
+ ':technologist_medium_skin_tone:' => '🧑🏽💻',
+ ':woman_artist_dark_skin_tone:' => '👩🏿🎨',
+ ':woman_artist_light_skin_tone:' => '👩🏻🎨',
+ ':woman_artist_medium_dark_skin_tone:' => '👩🏾🎨',
+ ':woman_artist_medium_light_skin_tone:' => '👩🏼🎨',
+ ':woman_artist_medium_skin_tone:' => '👩🏽🎨',
+ ':woman_astronaut_dark_skin_tone:' => '👩🏿🚀',
+ ':woman_astronaut_light_skin_tone:' => '👩🏻🚀',
+ ':woman_astronaut_medium_dark_skin_tone:' => '👩🏾🚀',
+ ':woman_astronaut_medium_light_skin_tone:' => '👩🏼🚀',
+ ':woman_astronaut_medium_skin_tone:' => '👩🏽🚀',
+ ':woman_beard:' => '🧔♀️',
+ ':woman_biking:' => '🚴♀️',
+ ':woman_blond_hair:' => '👱♀️',
+ ':woman_bowing:' => '🙇♀️',
+ ':woman_cartwheeling:' => '🤸♀️',
+ ':woman_climbing:' => '🧗♀️',
+ ':woman_construction_worker:' => '👷♀️',
+ ':woman_cook_dark_skin_tone:' => '👩🏿🍳',
+ ':woman_cook_light_skin_tone:' => '👩🏻🍳',
+ ':woman_cook_medium_dark_skin_tone:' => '👩🏾🍳',
+ ':woman_cook_medium_light_skin_tone:' => '👩🏼🍳',
+ ':woman_cook_medium_skin_tone:' => '👩🏽🍳',
+ ':woman_dark_skin_tone_bald:' => '👩🏿🦲',
+ ':woman_dark_skin_tone_curly_hair:' => '👩🏿🦱',
+ ':woman_dark_skin_tone_red_hair:' => '👩🏿🦰',
+ ':woman_dark_skin_tone_white_hair:' => '👩🏿🦳',
+ ':woman_elf:' => '🧝♀️',
+ ':woman_facepalming:' => '🤦♀️',
+ ':woman_factory_worker_dark_skin_tone:' => '👩🏿🏭',
+ ':woman_factory_worker_light_skin_tone:' => '👩🏻🏭',
+ ':woman_factory_worker_medium_dark_skin_tone:' => '👩🏾🏭',
+ ':woman_factory_worker_medium_light_skin_tone:' => '👩🏼🏭',
+ ':woman_factory_worker_medium_skin_tone:' => '👩🏽🏭',
+ ':woman_fairy:' => '🧚♀️',
+ ':woman_farmer_dark_skin_tone:' => '👩🏿🌾',
+ ':woman_farmer_light_skin_tone:' => '👩🏻🌾',
+ ':woman_farmer_medium_dark_skin_tone:' => '👩🏾🌾',
+ ':woman_farmer_medium_light_skin_tone:' => '👩🏼🌾',
+ ':woman_farmer_medium_skin_tone:' => '👩🏽🌾',
+ ':woman_feeding_baby_dark_skin_tone:' => '👩🏿🍼',
+ ':woman_feeding_baby_light_skin_tone:' => '👩🏻🍼',
+ ':woman_feeding_baby_medium_dark_skin_tone:' => '👩🏾🍼',
+ ':woman_feeding_baby_medium_light_skin_tone:' => '👩🏼🍼',
+ ':woman_feeding_baby_medium_skin_tone:' => '👩🏽🍼',
+ ':woman_firefighter_dark_skin_tone:' => '👩🏿🚒',
+ ':woman_firefighter_light_skin_tone:' => '👩🏻🚒',
+ ':woman_firefighter_medium_dark_skin_tone:' => '👩🏾🚒',
+ ':woman_firefighter_medium_light_skin_tone:' => '👩🏼🚒',
+ ':woman_firefighter_medium_skin_tone:' => '👩🏽🚒',
+ ':woman_frowning:' => '🙍♀️',
+ ':woman_genie:' => '🧞♀️',
+ ':woman_gesturing_no:' => '🙅♀️',
+ ':woman_gesturing_ok:' => '🙆♀️',
+ ':woman_getting_haircut:' => '💇♀️',
+ ':woman_getting_massage:' => '💆♀️',
+ ':woman_guard:' => '💂♀️',
+ ':woman_health_worker:' => '👩⚕️',
+ ':woman_in_lotus_position:' => '🧘♀️',
+ ':woman_in_manual_wheelchair_dark_skin_tone:' => '👩🏿🦽',
+ ':woman_in_manual_wheelchair_light_skin_tone:' => '👩🏻🦽',
+ ':woman_in_manual_wheelchair_medium_dark_skin_tone:' => '👩🏾🦽',
+ ':woman_in_manual_wheelchair_medium_light_skin_tone:' => '👩🏼🦽',
+ ':woman_in_manual_wheelchair_medium_skin_tone:' => '👩🏽🦽',
+ ':woman_in_motorized_wheelchair_dark_skin_tone:' => '👩🏿🦼',
+ ':woman_in_motorized_wheelchair_light_skin_tone:' => '👩🏻🦼',
+ ':woman_in_motorized_wheelchair_medium_dark_skin_tone:' => '👩🏾🦼',
+ ':woman_in_motorized_wheelchair_medium_light_skin_tone:' => '👩🏼🦼',
+ ':woman_in_motorized_wheelchair_medium_skin_tone:' => '👩🏽🦼',
+ ':woman_in_steamy_room:' => '🧖♀️',
+ ':woman_in_tuxedo:' => '🤵♀️',
+ ':woman_judge:' => '👩⚖️',
+ ':woman_juggling:' => '🤹♀️',
+ ':woman_kneeling:' => '🧎♀️',
+ ':woman_light_skin_tone_bald:' => '👩🏻🦲',
+ ':woman_light_skin_tone_curly_hair:' => '👩🏻🦱',
+ ':woman_light_skin_tone_red_hair:' => '👩🏻🦰',
+ ':woman_light_skin_tone_white_hair:' => '👩🏻🦳',
+ ':woman_mage:' => '🧙♀️',
+ ':woman_mechanic_dark_skin_tone:' => '👩🏿🔧',
+ ':woman_mechanic_light_skin_tone:' => '👩🏻🔧',
+ ':woman_mechanic_medium_dark_skin_tone:' => '👩🏾🔧',
+ ':woman_mechanic_medium_light_skin_tone:' => '👩🏼🔧',
+ ':woman_mechanic_medium_skin_tone:' => '👩🏽🔧',
+ ':woman_medium_dark_skin_tone_bald:' => '👩🏾🦲',
+ ':woman_medium_dark_skin_tone_curly_hair:' => '👩🏾🦱',
+ ':woman_medium_dark_skin_tone_red_hair:' => '👩🏾🦰',
+ ':woman_medium_dark_skin_tone_white_hair:' => '👩🏾🦳',
+ ':woman_medium_light_skin_tone_bald:' => '👩🏼🦲',
+ ':woman_medium_light_skin_tone_curly_hair:' => '👩🏼🦱',
+ ':woman_medium_light_skin_tone_red_hair:' => '👩🏼🦰',
+ ':woman_medium_light_skin_tone_white_hair:' => '👩🏼🦳',
+ ':woman_medium_skin_tone_bald:' => '👩🏽🦲',
+ ':woman_medium_skin_tone_curly_hair:' => '👩🏽🦱',
+ ':woman_medium_skin_tone_red_hair:' => '👩🏽🦰',
+ ':woman_medium_skin_tone_white_hair:' => '👩🏽🦳',
+ ':woman_mountain_biking:' => '🚵♀️',
+ ':woman_office_worker_dark_skin_tone:' => '👩🏿💼',
+ ':woman_office_worker_light_skin_tone:' => '👩🏻💼',
+ ':woman_office_worker_medium_dark_skin_tone:' => '👩🏾💼',
+ ':woman_office_worker_medium_light_skin_tone:' => '👩🏼💼',
+ ':woman_office_worker_medium_skin_tone:' => '👩🏽💼',
+ ':woman_pilot:' => '👩✈️',
+ ':woman_playing_handball:' => '🤾♀️',
+ ':woman_playing_water_polo:' => '🤽♀️',
+ ':woman_police_officer:' => '👮♀️',
+ ':woman_pouting:' => '🙎♀️',
+ ':woman_raising_hand:' => '🙋♀️',
+ ':woman_rowing_boat:' => '🚣♀️',
+ ':woman_running:' => '🏃♀️',
+ ':woman_scientist_dark_skin_tone:' => '👩🏿🔬',
+ ':woman_scientist_light_skin_tone:' => '👩🏻🔬',
+ ':woman_scientist_medium_dark_skin_tone:' => '👩🏾🔬',
+ ':woman_scientist_medium_light_skin_tone:' => '👩🏼🔬',
+ ':woman_scientist_medium_skin_tone:' => '👩🏽🔬',
+ ':woman_shrugging:' => '🤷♀️',
+ ':woman_singer_dark_skin_tone:' => '👩🏿🎤',
+ ':woman_singer_light_skin_tone:' => '👩🏻🎤',
+ ':woman_singer_medium_dark_skin_tone:' => '👩🏾🎤',
+ ':woman_singer_medium_light_skin_tone:' => '👩🏼🎤',
+ ':woman_singer_medium_skin_tone:' => '👩🏽🎤',
+ ':woman_standing:' => '🧍♀️',
+ ':woman_student_dark_skin_tone:' => '👩🏿🎓',
+ ':woman_student_light_skin_tone:' => '👩🏻🎓',
+ ':woman_student_medium_dark_skin_tone:' => '👩🏾🎓',
+ ':woman_student_medium_light_skin_tone:' => '👩🏼🎓',
+ ':woman_student_medium_skin_tone:' => '👩🏽🎓',
+ ':woman_superhero:' => '🦸♀️',
+ ':woman_supervillain:' => '🦹♀️',
+ ':woman_surfing:' => '🏄♀️',
+ ':woman_swimming:' => '🏊♀️',
+ ':woman_teacher_dark_skin_tone:' => '👩🏿🏫',
+ ':woman_teacher_light_skin_tone:' => '👩🏻🏫',
+ ':woman_teacher_medium_dark_skin_tone:' => '👩🏾🏫',
+ ':woman_teacher_medium_light_skin_tone:' => '👩🏼🏫',
+ ':woman_teacher_medium_skin_tone:' => '👩🏽🏫',
+ ':woman_technologist_dark_skin_tone:' => '👩🏿💻',
+ ':woman_technologist_light_skin_tone:' => '👩🏻💻',
+ ':woman_technologist_medium_dark_skin_tone:' => '👩🏾💻',
+ ':woman_technologist_medium_light_skin_tone:' => '👩🏼💻',
+ ':woman_technologist_medium_skin_tone:' => '👩🏽💻',
+ ':woman_tipping_hand:' => '💁♀️',
+ ':woman_vampire:' => '🧛♀️',
+ ':woman_walking:' => '🚶♀️',
+ ':woman_wearing_turban:' => '👳♀️',
+ ':woman_with_veil:' => '👰♀️',
+ ':woman_with_white_cane_dark_skin_tone:' => '👩🏿🦯',
+ ':woman_with_white_cane_light_skin_tone:' => '👩🏻🦯',
+ ':woman_with_white_cane_medium_dark_skin_tone:' => '👩🏾🦯',
+ ':woman_with_white_cane_medium_light_skin_tone:' => '👩🏼🦯',
+ ':woman_with_white_cane_medium_skin_tone:' => '👩🏽🦯',
+ ':woman_zombie:' => '🧟♀️',
+ ':women_with_bunny_ears:' => '👯♀️',
+ ':women_wrestling:' => '🤼♀️',
+ ':deaf_man_dark_skin_tone:' => '🧏🏿♂️',
+ ':deaf_man_light_skin_tone:' => '🧏🏻♂️',
+ ':deaf_man_medium_dark_skin_tone:' => '🧏🏾♂️',
+ ':deaf_man_medium_light_skin_tone:' => '🧏🏼♂️',
+ ':deaf_man_medium_skin_tone:' => '🧏🏽♂️',
+ ':deaf_woman_dark_skin_tone:' => '🧏🏿♀️',
+ ':deaf_woman_light_skin_tone:' => '🧏🏻♀️',
+ ':deaf_woman_medium_dark_skin_tone:' => '🧏🏾♀️',
+ ':deaf_woman_medium_light_skin_tone:' => '🧏🏼♀️',
+ ':deaf_woman_medium_skin_tone:' => '🧏🏽♀️',
+ ':eye_in_speech_bubble:' => '👁️🗨️',
+ ':family_adult_adult_child:' => '🧑🧑🧒',
+ ':family_adult_child_child:' => '🧑🧒🧒',
+ ':family_man_boy_boy:' => '👨👦👦',
+ ':family_man_girl_boy:' => '👨👧👦',
+ ':family_man_girl_girl:' => '👨👧👧',
+ ':family_man_woman_boy:' => '👨👩👦',
':family_mmb:' => '👨👨👦',
':family_mmg:' => '👨👨👧',
':family_mwg:' => '👨👩👧',
+ ':family_woman_boy_boy:' => '👩👦👦',
+ ':family_woman_girl_boy:' => '👩👧👦',
+ ':family_woman_girl_girl:' => '👩👧👧',
':family_wwb:' => '👩👩👦',
':family_wwg:' => '👩👩👧',
- ':couple_with_heart_mm:' => '👨❤️👨',
- ':couple_with_heart_ww:' => '👩❤️👩',
+ ':handshake_dark_skin_tone_light_skin_tone:' => '🫱🏿🫲🏻',
+ ':handshake_dark_skin_tone_medium_dark_skin_tone:' => '🫱🏿🫲🏾',
+ ':handshake_dark_skin_tone_medium_light_skin_tone:' => '🫱🏿🫲🏼',
+ ':handshake_dark_skin_tone_medium_skin_tone:' => '🫱🏿🫲🏽',
+ ':handshake_light_skin_tone_dark_skin_tone:' => '🫱🏻🫲🏿',
+ ':handshake_light_skin_tone_medium_dark_skin_tone:' => '🫱🏻🫲🏾',
+ ':handshake_light_skin_tone_medium_light_skin_tone:' => '🫱🏻🫲🏼',
+ ':handshake_light_skin_tone_medium_skin_tone:' => '🫱🏻🫲🏽',
+ ':handshake_medium_dark_skin_tone_dark_skin_tone:' => '🫱🏾🫲🏿',
+ ':handshake_medium_dark_skin_tone_light_skin_tone:' => '🫱🏾🫲🏻',
+ ':handshake_medium_dark_skin_tone_medium_light_skin_tone:' => '🫱🏾🫲🏼',
+ ':handshake_medium_dark_skin_tone_medium_skin_tone:' => '🫱🏾🫲🏽',
+ ':handshake_medium_light_skin_tone_dark_skin_tone:' => '🫱🏼🫲🏿',
+ ':handshake_medium_light_skin_tone_light_skin_tone:' => '🫱🏼🫲🏻',
+ ':handshake_medium_light_skin_tone_medium_dark_skin_tone:' => '🫱🏼🫲🏾',
+ ':handshake_medium_light_skin_tone_medium_skin_tone:' => '🫱🏼🫲🏽',
+ ':handshake_medium_skin_tone_dark_skin_tone:' => '🫱🏽🫲🏿',
+ ':handshake_medium_skin_tone_light_skin_tone:' => '🫱🏽🫲🏻',
+ ':handshake_medium_skin_tone_medium_dark_skin_tone:' => '🫱🏽🫲🏾',
+ ':handshake_medium_skin_tone_medium_light_skin_tone:' => '🫱🏽🫲🏼',
+ ':health_worker_dark_skin_tone:' => '🧑🏿⚕️',
+ ':health_worker_light_skin_tone:' => '🧑🏻⚕️',
+ ':health_worker_medium_dark_skin_tone:' => '🧑🏾⚕️',
+ ':health_worker_medium_light_skin_tone:' => '🧑🏼⚕️',
+ ':health_worker_medium_skin_tone:' => '🧑🏽⚕️',
+ ':judge_dark_skin_tone:' => '🧑🏿⚖️',
+ ':judge_light_skin_tone:' => '🧑🏻⚖️',
+ ':judge_medium_dark_skin_tone:' => '🧑🏾⚖️',
+ ':judge_medium_light_skin_tone:' => '🧑🏼⚖️',
+ ':judge_medium_skin_tone:' => '🧑🏽⚖️',
+ ':man_biking_dark_skin_tone:' => '🚴🏿♂️',
+ ':man_biking_light_skin_tone:' => '🚴🏻♂️',
+ ':man_biking_medium_dark_skin_tone:' => '🚴🏾♂️',
+ ':man_biking_medium_light_skin_tone:' => '🚴🏼♂️',
+ ':man_biking_medium_skin_tone:' => '🚴🏽♂️',
+ ':man_bouncing_ball:' => '⛹️♂️',
+ ':man_bouncing_ball_dark_skin_tone:' => '⛹🏿♂️',
+ ':man_bouncing_ball_light_skin_tone:' => '⛹🏻♂️',
+ ':man_bouncing_ball_medium_dark_skin_tone:' => '⛹🏾♂️',
+ ':man_bouncing_ball_medium_light_skin_tone:' => '⛹🏼♂️',
+ ':man_bouncing_ball_medium_skin_tone:' => '⛹🏽♂️',
+ ':man_bowing_dark_skin_tone:' => '🙇🏿♂️',
+ ':man_bowing_light_skin_tone:' => '🙇🏻♂️',
+ ':man_bowing_medium_dark_skin_tone:' => '🙇🏾♂️',
+ ':man_bowing_medium_light_skin_tone:' => '🙇🏼♂️',
+ ':man_bowing_medium_skin_tone:' => '🙇🏽♂️',
+ ':man_cartwheeling_dark_skin_tone:' => '🤸🏿♂️',
+ ':man_cartwheeling_light_skin_tone:' => '🤸🏻♂️',
+ ':man_cartwheeling_medium_dark_skin_tone:' => '🤸🏾♂️',
+ ':man_cartwheeling_medium_light_skin_tone:' => '🤸🏼♂️',
+ ':man_cartwheeling_medium_skin_tone:' => '🤸🏽♂️',
+ ':man_climbing_dark_skin_tone:' => '🧗🏿♂️',
+ ':man_climbing_light_skin_tone:' => '🧗🏻♂️',
+ ':man_climbing_medium_dark_skin_tone:' => '🧗🏾♂️',
+ ':man_climbing_medium_light_skin_tone:' => '🧗🏼♂️',
+ ':man_climbing_medium_skin_tone:' => '🧗🏽♂️',
+ ':man_construction_worker_dark_skin_tone:' => '👷🏿♂️',
+ ':man_construction_worker_light_skin_tone:' => '👷🏻♂️',
+ ':man_construction_worker_medium_dark_skin_tone:' => '👷🏾♂️',
+ ':man_construction_worker_medium_light_skin_tone:' => '👷🏼♂️',
+ ':man_construction_worker_medium_skin_tone:' => '👷🏽♂️',
+ ':man_dark_skin_tone_beard:' => '🧔🏿♂️',
+ ':man_dark_skin_tone_blond_hair:' => '👱🏿♂️',
+ ':man_detective:' => '🕵️♂️',
+ ':man_detective_dark_skin_tone:' => '🕵🏿♂️',
+ ':man_detective_light_skin_tone:' => '🕵🏻♂️',
+ ':man_detective_medium_dark_skin_tone:' => '🕵🏾♂️',
+ ':man_detective_medium_light_skin_tone:' => '🕵🏼♂️',
+ ':man_detective_medium_skin_tone:' => '🕵🏽♂️',
+ ':man_elf_dark_skin_tone:' => '🧝🏿♂️',
+ ':man_elf_light_skin_tone:' => '🧝🏻♂️',
+ ':man_elf_medium_dark_skin_tone:' => '🧝🏾♂️',
+ ':man_elf_medium_light_skin_tone:' => '🧝🏼♂️',
+ ':man_elf_medium_skin_tone:' => '🧝🏽♂️',
+ ':man_facepalming_dark_skin_tone:' => '🤦🏿♂️',
+ ':man_facepalming_light_skin_tone:' => '🤦🏻♂️',
+ ':man_facepalming_medium_dark_skin_tone:' => '🤦🏾♂️',
+ ':man_facepalming_medium_light_skin_tone:' => '🤦🏼♂️',
+ ':man_facepalming_medium_skin_tone:' => '🤦🏽♂️',
+ ':man_fairy_dark_skin_tone:' => '🧚🏿♂️',
+ ':man_fairy_light_skin_tone:' => '🧚🏻♂️',
+ ':man_fairy_medium_dark_skin_tone:' => '🧚🏾♂️',
+ ':man_fairy_medium_light_skin_tone:' => '🧚🏼♂️',
+ ':man_fairy_medium_skin_tone:' => '🧚🏽♂️',
+ ':man_frowning_dark_skin_tone:' => '🙍🏿♂️',
+ ':man_frowning_light_skin_tone:' => '🙍🏻♂️',
+ ':man_frowning_medium_dark_skin_tone:' => '🙍🏾♂️',
+ ':man_frowning_medium_light_skin_tone:' => '🙍🏼♂️',
+ ':man_frowning_medium_skin_tone:' => '🙍🏽♂️',
+ ':man_gesturing_no_dark_skin_tone:' => '🙅🏿♂️',
+ ':man_gesturing_no_light_skin_tone:' => '🙅🏻♂️',
+ ':man_gesturing_no_medium_dark_skin_tone:' => '🙅🏾♂️',
+ ':man_gesturing_no_medium_light_skin_tone:' => '🙅🏼♂️',
+ ':man_gesturing_no_medium_skin_tone:' => '🙅🏽♂️',
+ ':man_gesturing_ok_dark_skin_tone:' => '🙆🏿♂️',
+ ':man_gesturing_ok_light_skin_tone:' => '🙆🏻♂️',
+ ':man_gesturing_ok_medium_dark_skin_tone:' => '🙆🏾♂️',
+ ':man_gesturing_ok_medium_light_skin_tone:' => '🙆🏼♂️',
+ ':man_gesturing_ok_medium_skin_tone:' => '🙆🏽♂️',
+ ':man_getting_haircut_dark_skin_tone:' => '💇🏿♂️',
+ ':man_getting_haircut_light_skin_tone:' => '💇🏻♂️',
+ ':man_getting_haircut_medium_dark_skin_tone:' => '💇🏾♂️',
+ ':man_getting_haircut_medium_light_skin_tone:' => '💇🏼♂️',
+ ':man_getting_haircut_medium_skin_tone:' => '💇🏽♂️',
+ ':man_getting_massage_dark_skin_tone:' => '💆🏿♂️',
+ ':man_getting_massage_light_skin_tone:' => '💆🏻♂️',
+ ':man_getting_massage_medium_dark_skin_tone:' => '💆🏾♂️',
+ ':man_getting_massage_medium_light_skin_tone:' => '💆🏼♂️',
+ ':man_getting_massage_medium_skin_tone:' => '💆🏽♂️',
+ ':man_golfing:' => '🏌️♂️',
+ ':man_golfing_dark_skin_tone:' => '🏌🏿♂️',
+ ':man_golfing_light_skin_tone:' => '🏌🏻♂️',
+ ':man_golfing_medium_dark_skin_tone:' => '🏌🏾♂️',
+ ':man_golfing_medium_light_skin_tone:' => '🏌🏼♂️',
+ ':man_golfing_medium_skin_tone:' => '🏌🏽♂️',
+ ':man_guard_dark_skin_tone:' => '💂🏿♂️',
+ ':man_guard_light_skin_tone:' => '💂🏻♂️',
+ ':man_guard_medium_dark_skin_tone:' => '💂🏾♂️',
+ ':man_guard_medium_light_skin_tone:' => '💂🏼♂️',
+ ':man_guard_medium_skin_tone:' => '💂🏽♂️',
+ ':man_health_worker_dark_skin_tone:' => '👨🏿⚕️',
+ ':man_health_worker_light_skin_tone:' => '👨🏻⚕️',
+ ':man_health_worker_medium_dark_skin_tone:' => '👨🏾⚕️',
+ ':man_health_worker_medium_light_skin_tone:' => '👨🏼⚕️',
+ ':man_health_worker_medium_skin_tone:' => '👨🏽⚕️',
+ ':man_in_lotus_position_dark_skin_tone:' => '🧘🏿♂️',
+ ':man_in_lotus_position_light_skin_tone:' => '🧘🏻♂️',
+ ':man_in_lotus_position_medium_dark_skin_tone:' => '🧘🏾♂️',
+ ':man_in_lotus_position_medium_light_skin_tone:' => '🧘🏼♂️',
+ ':man_in_lotus_position_medium_skin_tone:' => '🧘🏽♂️',
+ ':man_in_steamy_room_dark_skin_tone:' => '🧖🏿♂️',
+ ':man_in_steamy_room_light_skin_tone:' => '🧖🏻♂️',
+ ':man_in_steamy_room_medium_dark_skin_tone:' => '🧖🏾♂️',
+ ':man_in_steamy_room_medium_light_skin_tone:' => '🧖🏼♂️',
+ ':man_in_steamy_room_medium_skin_tone:' => '🧖🏽♂️',
+ ':man_in_tuxedo_dark_skin_tone:' => '🤵🏿♂️',
+ ':man_in_tuxedo_light_skin_tone:' => '🤵🏻♂️',
+ ':man_in_tuxedo_medium_dark_skin_tone:' => '🤵🏾♂️',
+ ':man_in_tuxedo_medium_light_skin_tone:' => '🤵🏼♂️',
+ ':man_in_tuxedo_medium_skin_tone:' => '🤵🏽♂️',
+ ':man_judge_dark_skin_tone:' => '👨🏿⚖️',
+ ':man_judge_light_skin_tone:' => '👨🏻⚖️',
+ ':man_judge_medium_dark_skin_tone:' => '👨🏾⚖️',
+ ':man_judge_medium_light_skin_tone:' => '👨🏼⚖️',
+ ':man_judge_medium_skin_tone:' => '👨🏽⚖️',
+ ':man_juggling_dark_skin_tone:' => '🤹🏿♂️',
+ ':man_juggling_light_skin_tone:' => '🤹🏻♂️',
+ ':man_juggling_medium_dark_skin_tone:' => '🤹🏾♂️',
+ ':man_juggling_medium_light_skin_tone:' => '🤹🏼♂️',
+ ':man_juggling_medium_skin_tone:' => '🤹🏽♂️',
+ ':man_kneeling_dark_skin_tone:' => '🧎🏿♂️',
+ ':man_kneeling_light_skin_tone:' => '🧎🏻♂️',
+ ':man_kneeling_medium_dark_skin_tone:' => '🧎🏾♂️',
+ ':man_kneeling_medium_light_skin_tone:' => '🧎🏼♂️',
+ ':man_kneeling_medium_skin_tone:' => '🧎🏽♂️',
+ ':man_lifting_weights:' => '🏋️♂️',
+ ':man_lifting_weights_dark_skin_tone:' => '🏋🏿♂️',
+ ':man_lifting_weights_light_skin_tone:' => '🏋🏻♂️',
+ ':man_lifting_weights_medium_dark_skin_tone:' => '🏋🏾♂️',
+ ':man_lifting_weights_medium_light_skin_tone:' => '🏋🏼♂️',
+ ':man_lifting_weights_medium_skin_tone:' => '🏋🏽♂️',
+ ':man_light_skin_tone_beard:' => '🧔🏻♂️',
+ ':man_light_skin_tone_blond_hair:' => '👱🏻♂️',
+ ':man_mage_dark_skin_tone:' => '🧙🏿♂️',
+ ':man_mage_light_skin_tone:' => '🧙🏻♂️',
+ ':man_mage_medium_dark_skin_tone:' => '🧙🏾♂️',
+ ':man_mage_medium_light_skin_tone:' => '🧙🏼♂️',
+ ':man_mage_medium_skin_tone:' => '🧙🏽♂️',
+ ':man_medium_dark_skin_tone_beard:' => '🧔🏾♂️',
+ ':man_medium_dark_skin_tone_blond_hair:' => '👱🏾♂️',
+ ':man_medium_light_skin_tone_beard:' => '🧔🏼♂️',
+ ':man_medium_light_skin_tone_blond_hair:' => '👱🏼♂️',
+ ':man_medium_skin_tone_beard:' => '🧔🏽♂️',
+ ':man_medium_skin_tone_blond_hair:' => '👱🏽♂️',
+ ':man_mountain_biking_dark_skin_tone:' => '🚵🏿♂️',
+ ':man_mountain_biking_light_skin_tone:' => '🚵🏻♂️',
+ ':man_mountain_biking_medium_dark_skin_tone:' => '🚵🏾♂️',
+ ':man_mountain_biking_medium_light_skin_tone:' => '🚵🏼♂️',
+ ':man_mountain_biking_medium_skin_tone:' => '🚵🏽♂️',
+ ':man_pilot_dark_skin_tone:' => '👨🏿✈️',
+ ':man_pilot_light_skin_tone:' => '👨🏻✈️',
+ ':man_pilot_medium_dark_skin_tone:' => '👨🏾✈️',
+ ':man_pilot_medium_light_skin_tone:' => '👨🏼✈️',
+ ':man_pilot_medium_skin_tone:' => '👨🏽✈️',
+ ':man_playing_handball_dark_skin_tone:' => '🤾🏿♂️',
+ ':man_playing_handball_light_skin_tone:' => '🤾🏻♂️',
+ ':man_playing_handball_medium_dark_skin_tone:' => '🤾🏾♂️',
+ ':man_playing_handball_medium_light_skin_tone:' => '🤾🏼♂️',
+ ':man_playing_handball_medium_skin_tone:' => '🤾🏽♂️',
+ ':man_playing_water_polo_dark_skin_tone:' => '🤽🏿♂️',
+ ':man_playing_water_polo_light_skin_tone:' => '🤽🏻♂️',
+ ':man_playing_water_polo_medium_dark_skin_tone:' => '🤽🏾♂️',
+ ':man_playing_water_polo_medium_light_skin_tone:' => '🤽🏼♂️',
+ ':man_playing_water_polo_medium_skin_tone:' => '🤽🏽♂️',
+ ':man_police_officer_dark_skin_tone:' => '👮🏿♂️',
+ ':man_police_officer_light_skin_tone:' => '👮🏻♂️',
+ ':man_police_officer_medium_dark_skin_tone:' => '👮🏾♂️',
+ ':man_police_officer_medium_light_skin_tone:' => '👮🏼♂️',
+ ':man_police_officer_medium_skin_tone:' => '👮🏽♂️',
+ ':man_pouting_dark_skin_tone:' => '🙎🏿♂️',
+ ':man_pouting_light_skin_tone:' => '🙎🏻♂️',
+ ':man_pouting_medium_dark_skin_tone:' => '🙎🏾♂️',
+ ':man_pouting_medium_light_skin_tone:' => '🙎🏼♂️',
+ ':man_pouting_medium_skin_tone:' => '🙎🏽♂️',
+ ':man_raising_hand_dark_skin_tone:' => '🙋🏿♂️',
+ ':man_raising_hand_light_skin_tone:' => '🙋🏻♂️',
+ ':man_raising_hand_medium_dark_skin_tone:' => '🙋🏾♂️',
+ ':man_raising_hand_medium_light_skin_tone:' => '🙋🏼♂️',
+ ':man_raising_hand_medium_skin_tone:' => '🙋🏽♂️',
+ ':man_rowing_boat_dark_skin_tone:' => '🚣🏿♂️',
+ ':man_rowing_boat_light_skin_tone:' => '🚣🏻♂️',
+ ':man_rowing_boat_medium_dark_skin_tone:' => '🚣🏾♂️',
+ ':man_rowing_boat_medium_light_skin_tone:' => '🚣🏼♂️',
+ ':man_rowing_boat_medium_skin_tone:' => '🚣🏽♂️',
+ ':man_running_dark_skin_tone:' => '🏃🏿♂️',
+ ':man_running_light_skin_tone:' => '🏃🏻♂️',
+ ':man_running_medium_dark_skin_tone:' => '🏃🏾♂️',
+ ':man_running_medium_light_skin_tone:' => '🏃🏼♂️',
+ ':man_running_medium_skin_tone:' => '🏃🏽♂️',
+ ':man_shrugging_dark_skin_tone:' => '🤷🏿♂️',
+ ':man_shrugging_light_skin_tone:' => '🤷🏻♂️',
+ ':man_shrugging_medium_dark_skin_tone:' => '🤷🏾♂️',
+ ':man_shrugging_medium_light_skin_tone:' => '🤷🏼♂️',
+ ':man_shrugging_medium_skin_tone:' => '🤷🏽♂️',
+ ':man_standing_dark_skin_tone:' => '🧍🏿♂️',
+ ':man_standing_light_skin_tone:' => '🧍🏻♂️',
+ ':man_standing_medium_dark_skin_tone:' => '🧍🏾♂️',
+ ':man_standing_medium_light_skin_tone:' => '🧍🏼♂️',
+ ':man_standing_medium_skin_tone:' => '🧍🏽♂️',
+ ':man_superhero_dark_skin_tone:' => '🦸🏿♂️',
+ ':man_superhero_light_skin_tone:' => '🦸🏻♂️',
+ ':man_superhero_medium_dark_skin_tone:' => '🦸🏾♂️',
+ ':man_superhero_medium_light_skin_tone:' => '🦸🏼♂️',
+ ':man_superhero_medium_skin_tone:' => '🦸🏽♂️',
+ ':man_supervillain_dark_skin_tone:' => '🦹🏿♂️',
+ ':man_supervillain_light_skin_tone:' => '🦹🏻♂️',
+ ':man_supervillain_medium_dark_skin_tone:' => '🦹🏾♂️',
+ ':man_supervillain_medium_light_skin_tone:' => '🦹🏼♂️',
+ ':man_supervillain_medium_skin_tone:' => '🦹🏽♂️',
+ ':man_surfing_dark_skin_tone:' => '🏄🏿♂️',
+ ':man_surfing_light_skin_tone:' => '🏄🏻♂️',
+ ':man_surfing_medium_dark_skin_tone:' => '🏄🏾♂️',
+ ':man_surfing_medium_light_skin_tone:' => '🏄🏼♂️',
+ ':man_surfing_medium_skin_tone:' => '🏄🏽♂️',
+ ':man_swimming_dark_skin_tone:' => '🏊🏿♂️',
+ ':man_swimming_light_skin_tone:' => '🏊🏻♂️',
+ ':man_swimming_medium_dark_skin_tone:' => '🏊🏾♂️',
+ ':man_swimming_medium_light_skin_tone:' => '🏊🏼♂️',
+ ':man_swimming_medium_skin_tone:' => '🏊🏽♂️',
+ ':man_tipping_hand_dark_skin_tone:' => '💁🏿♂️',
+ ':man_tipping_hand_light_skin_tone:' => '💁🏻♂️',
+ ':man_tipping_hand_medium_dark_skin_tone:' => '💁🏾♂️',
+ ':man_tipping_hand_medium_light_skin_tone:' => '💁🏼♂️',
+ ':man_tipping_hand_medium_skin_tone:' => '💁🏽♂️',
+ ':man_vampire_dark_skin_tone:' => '🧛🏿♂️',
+ ':man_vampire_light_skin_tone:' => '🧛🏻♂️',
+ ':man_vampire_medium_dark_skin_tone:' => '🧛🏾♂️',
+ ':man_vampire_medium_light_skin_tone:' => '🧛🏼♂️',
+ ':man_vampire_medium_skin_tone:' => '🧛🏽♂️',
+ ':man_walking_dark_skin_tone:' => '🚶🏿♂️',
+ ':man_walking_light_skin_tone:' => '🚶🏻♂️',
+ ':man_walking_medium_dark_skin_tone:' => '🚶🏾♂️',
+ ':man_walking_medium_light_skin_tone:' => '🚶🏼♂️',
+ ':man_walking_medium_skin_tone:' => '🚶🏽♂️',
+ ':man_wearing_turban_dark_skin_tone:' => '👳🏿♂️',
+ ':man_wearing_turban_light_skin_tone:' => '👳🏻♂️',
+ ':man_wearing_turban_medium_dark_skin_tone:' => '👳🏾♂️',
+ ':man_wearing_turban_medium_light_skin_tone:' => '👳🏼♂️',
+ ':man_wearing_turban_medium_skin_tone:' => '👳🏽♂️',
+ ':man_with_veil_dark_skin_tone:' => '👰🏿♂️',
+ ':man_with_veil_light_skin_tone:' => '👰🏻♂️',
+ ':man_with_veil_medium_dark_skin_tone:' => '👰🏾♂️',
+ ':man_with_veil_medium_light_skin_tone:' => '👰🏼♂️',
+ ':man_with_veil_medium_skin_tone:' => '👰🏽♂️',
+ ':mermaid_dark_skin_tone:' => '🧜🏿♀️',
+ ':mermaid_light_skin_tone:' => '🧜🏻♀️',
+ ':mermaid_medium_dark_skin_tone:' => '🧜🏾♀️',
+ ':mermaid_medium_light_skin_tone:' => '🧜🏼♀️',
+ ':mermaid_medium_skin_tone:' => '🧜🏽♀️',
+ ':merman_dark_skin_tone:' => '🧜🏿♂️',
+ ':merman_light_skin_tone:' => '🧜🏻♂️',
+ ':merman_medium_dark_skin_tone:' => '🧜🏾♂️',
+ ':merman_medium_light_skin_tone:' => '🧜🏼♂️',
+ ':merman_medium_skin_tone:' => '🧜🏽♂️',
+ ':people_holding_hands:' => '🧑🤝🧑',
+ ':person_kneeling_facing_right_dark_skin_tone:' => '🧎🏿➡️',
+ ':person_kneeling_facing_right_light_skin_tone:' => '🧎🏻➡️',
+ ':person_kneeling_facing_right_medium_dark_skin_tone:' => '🧎🏾➡️',
+ ':person_kneeling_facing_right_medium_light_skin_tone:' => '🧎🏼➡️',
+ ':person_kneeling_facing_right_medium_skin_tone:' => '🧎🏽➡️',
+ ':person_running_facing_right_dark_skin_tone:' => '🏃🏿➡️',
+ ':person_running_facing_right_light_skin_tone:' => '🏃🏻➡️',
+ ':person_running_facing_right_medium_dark_skin_tone:' => '🏃🏾➡️',
+ ':person_running_facing_right_medium_light_skin_tone:' => '🏃🏼➡️',
+ ':person_running_facing_right_medium_skin_tone:' => '🏃🏽➡️',
+ ':person_walking_facing_right_dark_skin_tone:' => '🚶🏿➡️',
+ ':person_walking_facing_right_light_skin_tone:' => '🚶🏻➡️',
+ ':person_walking_facing_right_medium_dark_skin_tone:' => '🚶🏾➡️',
+ ':person_walking_facing_right_medium_light_skin_tone:' => '🚶🏼➡️',
+ ':person_walking_facing_right_medium_skin_tone:' => '🚶🏽➡️',
+ ':pilot_dark_skin_tone:' => '🧑🏿✈️',
+ ':pilot_light_skin_tone:' => '🧑🏻✈️',
+ ':pilot_medium_dark_skin_tone:' => '🧑🏾✈️',
+ ':pilot_medium_light_skin_tone:' => '🧑🏼✈️',
+ ':pilot_medium_skin_tone:' => '🧑🏽✈️',
+ ':transgender_flag:' => '🏳️⚧️',
+ ':woman_biking_dark_skin_tone:' => '🚴🏿♀️',
+ ':woman_biking_light_skin_tone:' => '🚴🏻♀️',
+ ':woman_biking_medium_dark_skin_tone:' => '🚴🏾♀️',
+ ':woman_biking_medium_light_skin_tone:' => '🚴🏼♀️',
+ ':woman_biking_medium_skin_tone:' => '🚴🏽♀️',
+ ':woman_bouncing_ball:' => '⛹️♀️',
+ ':woman_bouncing_ball_dark_skin_tone:' => '⛹🏿♀️',
+ ':woman_bouncing_ball_light_skin_tone:' => '⛹🏻♀️',
+ ':woman_bouncing_ball_medium_dark_skin_tone:' => '⛹🏾♀️',
+ ':woman_bouncing_ball_medium_light_skin_tone:' => '⛹🏼♀️',
+ ':woman_bouncing_ball_medium_skin_tone:' => '⛹🏽♀️',
+ ':woman_bowing_dark_skin_tone:' => '🙇🏿♀️',
+ ':woman_bowing_light_skin_tone:' => '🙇🏻♀️',
+ ':woman_bowing_medium_dark_skin_tone:' => '🙇🏾♀️',
+ ':woman_bowing_medium_light_skin_tone:' => '🙇🏼♀️',
+ ':woman_bowing_medium_skin_tone:' => '🙇🏽♀️',
+ ':woman_cartwheeling_dark_skin_tone:' => '🤸🏿♀️',
+ ':woman_cartwheeling_light_skin_tone:' => '🤸🏻♀️',
+ ':woman_cartwheeling_medium_dark_skin_tone:' => '🤸🏾♀️',
+ ':woman_cartwheeling_medium_light_skin_tone:' => '🤸🏼♀️',
+ ':woman_cartwheeling_medium_skin_tone:' => '🤸🏽♀️',
+ ':woman_climbing_dark_skin_tone:' => '🧗🏿♀️',
+ ':woman_climbing_light_skin_tone:' => '🧗🏻♀️',
+ ':woman_climbing_medium_dark_skin_tone:' => '🧗🏾♀️',
+ ':woman_climbing_medium_light_skin_tone:' => '🧗🏼♀️',
+ ':woman_climbing_medium_skin_tone:' => '🧗🏽♀️',
+ ':woman_construction_worker_dark_skin_tone:' => '👷🏿♀️',
+ ':woman_construction_worker_light_skin_tone:' => '👷🏻♀️',
+ ':woman_construction_worker_medium_dark_skin_tone:' => '👷🏾♀️',
+ ':woman_construction_worker_medium_light_skin_tone:' => '👷🏼♀️',
+ ':woman_construction_worker_medium_skin_tone:' => '👷🏽♀️',
+ ':woman_dark_skin_tone_beard:' => '🧔🏿♀️',
+ ':woman_dark_skin_tone_blond_hair:' => '👱🏿♀️',
+ ':woman_detective:' => '🕵️♀️',
+ ':woman_detective_dark_skin_tone:' => '🕵🏿♀️',
+ ':woman_detective_light_skin_tone:' => '🕵🏻♀️',
+ ':woman_detective_medium_dark_skin_tone:' => '🕵🏾♀️',
+ ':woman_detective_medium_light_skin_tone:' => '🕵🏼♀️',
+ ':woman_detective_medium_skin_tone:' => '🕵🏽♀️',
+ ':woman_elf_dark_skin_tone:' => '🧝🏿♀️',
+ ':woman_elf_light_skin_tone:' => '🧝🏻♀️',
+ ':woman_elf_medium_dark_skin_tone:' => '🧝🏾♀️',
+ ':woman_elf_medium_light_skin_tone:' => '🧝🏼♀️',
+ ':woman_elf_medium_skin_tone:' => '🧝🏽♀️',
+ ':woman_facepalming_dark_skin_tone:' => '🤦🏿♀️',
+ ':woman_facepalming_light_skin_tone:' => '🤦🏻♀️',
+ ':woman_facepalming_medium_dark_skin_tone:' => '🤦🏾♀️',
+ ':woman_facepalming_medium_light_skin_tone:' => '🤦🏼♀️',
+ ':woman_facepalming_medium_skin_tone:' => '🤦🏽♀️',
+ ':woman_fairy_dark_skin_tone:' => '🧚🏿♀️',
+ ':woman_fairy_light_skin_tone:' => '🧚🏻♀️',
+ ':woman_fairy_medium_dark_skin_tone:' => '🧚🏾♀️',
+ ':woman_fairy_medium_light_skin_tone:' => '🧚🏼♀️',
+ ':woman_fairy_medium_skin_tone:' => '🧚🏽♀️',
+ ':woman_frowning_dark_skin_tone:' => '🙍🏿♀️',
+ ':woman_frowning_light_skin_tone:' => '🙍🏻♀️',
+ ':woman_frowning_medium_dark_skin_tone:' => '🙍🏾♀️',
+ ':woman_frowning_medium_light_skin_tone:' => '🙍🏼♀️',
+ ':woman_frowning_medium_skin_tone:' => '🙍🏽♀️',
+ ':woman_gesturing_no_dark_skin_tone:' => '🙅🏿♀️',
+ ':woman_gesturing_no_light_skin_tone:' => '🙅🏻♀️',
+ ':woman_gesturing_no_medium_dark_skin_tone:' => '🙅🏾♀️',
+ ':woman_gesturing_no_medium_light_skin_tone:' => '🙅🏼♀️',
+ ':woman_gesturing_no_medium_skin_tone:' => '🙅🏽♀️',
+ ':woman_gesturing_ok_dark_skin_tone:' => '🙆🏿♀️',
+ ':woman_gesturing_ok_light_skin_tone:' => '🙆🏻♀️',
+ ':woman_gesturing_ok_medium_dark_skin_tone:' => '🙆🏾♀️',
+ ':woman_gesturing_ok_medium_light_skin_tone:' => '🙆🏼♀️',
+ ':woman_gesturing_ok_medium_skin_tone:' => '🙆🏽♀️',
+ ':woman_getting_haircut_dark_skin_tone:' => '💇🏿♀️',
+ ':woman_getting_haircut_light_skin_tone:' => '💇🏻♀️',
+ ':woman_getting_haircut_medium_dark_skin_tone:' => '💇🏾♀️',
+ ':woman_getting_haircut_medium_light_skin_tone:' => '💇🏼♀️',
+ ':woman_getting_haircut_medium_skin_tone:' => '💇🏽♀️',
+ ':woman_getting_massage_dark_skin_tone:' => '💆🏿♀️',
+ ':woman_getting_massage_light_skin_tone:' => '💆🏻♀️',
+ ':woman_getting_massage_medium_dark_skin_tone:' => '💆🏾♀️',
+ ':woman_getting_massage_medium_light_skin_tone:' => '💆🏼♀️',
+ ':woman_getting_massage_medium_skin_tone:' => '💆🏽♀️',
+ ':woman_golfing:' => '🏌️♀️',
+ ':woman_golfing_dark_skin_tone:' => '🏌🏿♀️',
+ ':woman_golfing_light_skin_tone:' => '🏌🏻♀️',
+ ':woman_golfing_medium_dark_skin_tone:' => '🏌🏾♀️',
+ ':woman_golfing_medium_light_skin_tone:' => '🏌🏼♀️',
+ ':woman_golfing_medium_skin_tone:' => '🏌🏽♀️',
+ ':woman_guard_dark_skin_tone:' => '💂🏿♀️',
+ ':woman_guard_light_skin_tone:' => '💂🏻♀️',
+ ':woman_guard_medium_dark_skin_tone:' => '💂🏾♀️',
+ ':woman_guard_medium_light_skin_tone:' => '💂🏼♀️',
+ ':woman_guard_medium_skin_tone:' => '💂🏽♀️',
+ ':woman_health_worker_dark_skin_tone:' => '👩🏿⚕️',
+ ':woman_health_worker_light_skin_tone:' => '👩🏻⚕️',
+ ':woman_health_worker_medium_dark_skin_tone:' => '👩🏾⚕️',
+ ':woman_health_worker_medium_light_skin_tone:' => '👩🏼⚕️',
+ ':woman_health_worker_medium_skin_tone:' => '👩🏽⚕️',
+ ':woman_in_lotus_position_dark_skin_tone:' => '🧘🏿♀️',
+ ':woman_in_lotus_position_light_skin_tone:' => '🧘🏻♀️',
+ ':woman_in_lotus_position_medium_dark_skin_tone:' => '🧘🏾♀️',
+ ':woman_in_lotus_position_medium_light_skin_tone:' => '🧘🏼♀️',
+ ':woman_in_lotus_position_medium_skin_tone:' => '🧘🏽♀️',
+ ':woman_in_steamy_room_dark_skin_tone:' => '🧖🏿♀️',
+ ':woman_in_steamy_room_light_skin_tone:' => '🧖🏻♀️',
+ ':woman_in_steamy_room_medium_dark_skin_tone:' => '🧖🏾♀️',
+ ':woman_in_steamy_room_medium_light_skin_tone:' => '🧖🏼♀️',
+ ':woman_in_steamy_room_medium_skin_tone:' => '🧖🏽♀️',
+ ':woman_in_tuxedo_dark_skin_tone:' => '🤵🏿♀️',
+ ':woman_in_tuxedo_light_skin_tone:' => '🤵🏻♀️',
+ ':woman_in_tuxedo_medium_dark_skin_tone:' => '🤵🏾♀️',
+ ':woman_in_tuxedo_medium_light_skin_tone:' => '🤵🏼♀️',
+ ':woman_in_tuxedo_medium_skin_tone:' => '🤵🏽♀️',
+ ':woman_judge_dark_skin_tone:' => '👩🏿⚖️',
+ ':woman_judge_light_skin_tone:' => '👩🏻⚖️',
+ ':woman_judge_medium_dark_skin_tone:' => '👩🏾⚖️',
+ ':woman_judge_medium_light_skin_tone:' => '👩🏼⚖️',
+ ':woman_judge_medium_skin_tone:' => '👩🏽⚖️',
+ ':woman_juggling_dark_skin_tone:' => '🤹🏿♀️',
+ ':woman_juggling_light_skin_tone:' => '🤹🏻♀️',
+ ':woman_juggling_medium_dark_skin_tone:' => '🤹🏾♀️',
+ ':woman_juggling_medium_light_skin_tone:' => '🤹🏼♀️',
+ ':woman_juggling_medium_skin_tone:' => '🤹🏽♀️',
+ ':woman_kneeling_dark_skin_tone:' => '🧎🏿♀️',
+ ':woman_kneeling_light_skin_tone:' => '🧎🏻♀️',
+ ':woman_kneeling_medium_dark_skin_tone:' => '🧎🏾♀️',
+ ':woman_kneeling_medium_light_skin_tone:' => '🧎🏼♀️',
+ ':woman_kneeling_medium_skin_tone:' => '🧎🏽♀️',
+ ':woman_lifting_weights:' => '🏋️♀️',
+ ':woman_lifting_weights_dark_skin_tone:' => '🏋🏿♀️',
+ ':woman_lifting_weights_light_skin_tone:' => '🏋🏻♀️',
+ ':woman_lifting_weights_medium_dark_skin_tone:' => '🏋🏾♀️',
+ ':woman_lifting_weights_medium_light_skin_tone:' => '🏋🏼♀️',
+ ':woman_lifting_weights_medium_skin_tone:' => '🏋🏽♀️',
+ ':woman_light_skin_tone_beard:' => '🧔🏻♀️',
+ ':woman_light_skin_tone_blond_hair:' => '👱🏻♀️',
+ ':woman_mage_dark_skin_tone:' => '🧙🏿♀️',
+ ':woman_mage_light_skin_tone:' => '🧙🏻♀️',
+ ':woman_mage_medium_dark_skin_tone:' => '🧙🏾♀️',
+ ':woman_mage_medium_light_skin_tone:' => '🧙🏼♀️',
+ ':woman_mage_medium_skin_tone:' => '🧙🏽♀️',
+ ':woman_medium_dark_skin_tone_beard:' => '🧔🏾♀️',
+ ':woman_medium_dark_skin_tone_blond_hair:' => '👱🏾♀️',
+ ':woman_medium_light_skin_tone_beard:' => '🧔🏼♀️',
+ ':woman_medium_light_skin_tone_blond_hair:' => '👱🏼♀️',
+ ':woman_medium_skin_tone_beard:' => '🧔🏽♀️',
+ ':woman_medium_skin_tone_blond_hair:' => '👱🏽♀️',
+ ':woman_mountain_biking_dark_skin_tone:' => '🚵🏿♀️',
+ ':woman_mountain_biking_light_skin_tone:' => '🚵🏻♀️',
+ ':woman_mountain_biking_medium_dark_skin_tone:' => '🚵🏾♀️',
+ ':woman_mountain_biking_medium_light_skin_tone:' => '🚵🏼♀️',
+ ':woman_mountain_biking_medium_skin_tone:' => '🚵🏽♀️',
+ ':woman_pilot_dark_skin_tone:' => '👩🏿✈️',
+ ':woman_pilot_light_skin_tone:' => '👩🏻✈️',
+ ':woman_pilot_medium_dark_skin_tone:' => '👩🏾✈️',
+ ':woman_pilot_medium_light_skin_tone:' => '👩🏼✈️',
+ ':woman_pilot_medium_skin_tone:' => '👩🏽✈️',
+ ':woman_playing_handball_dark_skin_tone:' => '🤾🏿♀️',
+ ':woman_playing_handball_light_skin_tone:' => '🤾🏻♀️',
+ ':woman_playing_handball_medium_dark_skin_tone:' => '🤾🏾♀️',
+ ':woman_playing_handball_medium_light_skin_tone:' => '🤾🏼♀️',
+ ':woman_playing_handball_medium_skin_tone:' => '🤾🏽♀️',
+ ':woman_playing_water_polo_dark_skin_tone:' => '🤽🏿♀️',
+ ':woman_playing_water_polo_light_skin_tone:' => '🤽🏻♀️',
+ ':woman_playing_water_polo_medium_dark_skin_tone:' => '🤽🏾♀️',
+ ':woman_playing_water_polo_medium_light_skin_tone:' => '🤽🏼♀️',
+ ':woman_playing_water_polo_medium_skin_tone:' => '🤽🏽♀️',
+ ':woman_police_officer_dark_skin_tone:' => '👮🏿♀️',
+ ':woman_police_officer_light_skin_tone:' => '👮🏻♀️',
+ ':woman_police_officer_medium_dark_skin_tone:' => '👮🏾♀️',
+ ':woman_police_officer_medium_light_skin_tone:' => '👮🏼♀️',
+ ':woman_police_officer_medium_skin_tone:' => '👮🏽♀️',
+ ':woman_pouting_dark_skin_tone:' => '🙎🏿♀️',
+ ':woman_pouting_light_skin_tone:' => '🙎🏻♀️',
+ ':woman_pouting_medium_dark_skin_tone:' => '🙎🏾♀️',
+ ':woman_pouting_medium_light_skin_tone:' => '🙎🏼♀️',
+ ':woman_pouting_medium_skin_tone:' => '🙎🏽♀️',
+ ':woman_raising_hand_dark_skin_tone:' => '🙋🏿♀️',
+ ':woman_raising_hand_light_skin_tone:' => '🙋🏻♀️',
+ ':woman_raising_hand_medium_dark_skin_tone:' => '🙋🏾♀️',
+ ':woman_raising_hand_medium_light_skin_tone:' => '🙋🏼♀️',
+ ':woman_raising_hand_medium_skin_tone:' => '🙋🏽♀️',
+ ':woman_rowing_boat_dark_skin_tone:' => '🚣🏿♀️',
+ ':woman_rowing_boat_light_skin_tone:' => '🚣🏻♀️',
+ ':woman_rowing_boat_medium_dark_skin_tone:' => '🚣🏾♀️',
+ ':woman_rowing_boat_medium_light_skin_tone:' => '🚣🏼♀️',
+ ':woman_rowing_boat_medium_skin_tone:' => '🚣🏽♀️',
+ ':woman_running_dark_skin_tone:' => '🏃🏿♀️',
+ ':woman_running_light_skin_tone:' => '🏃🏻♀️',
+ ':woman_running_medium_dark_skin_tone:' => '🏃🏾♀️',
+ ':woman_running_medium_light_skin_tone:' => '🏃🏼♀️',
+ ':woman_running_medium_skin_tone:' => '🏃🏽♀️',
+ ':woman_shrugging_dark_skin_tone:' => '🤷🏿♀️',
+ ':woman_shrugging_light_skin_tone:' => '🤷🏻♀️',
+ ':woman_shrugging_medium_dark_skin_tone:' => '🤷🏾♀️',
+ ':woman_shrugging_medium_light_skin_tone:' => '🤷🏼♀️',
+ ':woman_shrugging_medium_skin_tone:' => '🤷🏽♀️',
+ ':woman_standing_dark_skin_tone:' => '🧍🏿♀️',
+ ':woman_standing_light_skin_tone:' => '🧍🏻♀️',
+ ':woman_standing_medium_dark_skin_tone:' => '🧍🏾♀️',
+ ':woman_standing_medium_light_skin_tone:' => '🧍🏼♀️',
+ ':woman_standing_medium_skin_tone:' => '🧍🏽♀️',
+ ':woman_superhero_dark_skin_tone:' => '🦸🏿♀️',
+ ':woman_superhero_light_skin_tone:' => '🦸🏻♀️',
+ ':woman_superhero_medium_dark_skin_tone:' => '🦸🏾♀️',
+ ':woman_superhero_medium_light_skin_tone:' => '🦸🏼♀️',
+ ':woman_superhero_medium_skin_tone:' => '🦸🏽♀️',
+ ':woman_supervillain_dark_skin_tone:' => '🦹🏿♀️',
+ ':woman_supervillain_light_skin_tone:' => '🦹🏻♀️',
+ ':woman_supervillain_medium_dark_skin_tone:' => '🦹🏾♀️',
+ ':woman_supervillain_medium_light_skin_tone:' => '🦹🏼♀️',
+ ':woman_supervillain_medium_skin_tone:' => '🦹🏽♀️',
+ ':woman_surfing_dark_skin_tone:' => '🏄🏿♀️',
+ ':woman_surfing_light_skin_tone:' => '🏄🏻♀️',
+ ':woman_surfing_medium_dark_skin_tone:' => '🏄🏾♀️',
+ ':woman_surfing_medium_light_skin_tone:' => '🏄🏼♀️',
+ ':woman_surfing_medium_skin_tone:' => '🏄🏽♀️',
+ ':woman_swimming_dark_skin_tone:' => '🏊🏿♀️',
+ ':woman_swimming_light_skin_tone:' => '🏊🏻♀️',
+ ':woman_swimming_medium_dark_skin_tone:' => '🏊🏾♀️',
+ ':woman_swimming_medium_light_skin_tone:' => '🏊🏼♀️',
+ ':woman_swimming_medium_skin_tone:' => '🏊🏽♀️',
+ ':woman_tipping_hand_dark_skin_tone:' => '💁🏿♀️',
+ ':woman_tipping_hand_light_skin_tone:' => '💁🏻♀️',
+ ':woman_tipping_hand_medium_dark_skin_tone:' => '💁🏾♀️',
+ ':woman_tipping_hand_medium_light_skin_tone:' => '💁🏼♀️',
+ ':woman_tipping_hand_medium_skin_tone:' => '💁🏽♀️',
+ ':woman_vampire_dark_skin_tone:' => '🧛🏿♀️',
+ ':woman_vampire_light_skin_tone:' => '🧛🏻♀️',
+ ':woman_vampire_medium_dark_skin_tone:' => '🧛🏾♀️',
+ ':woman_vampire_medium_light_skin_tone:' => '🧛🏼♀️',
+ ':woman_vampire_medium_skin_tone:' => '🧛🏽♀️',
+ ':woman_walking_dark_skin_tone:' => '🚶🏿♀️',
+ ':woman_walking_light_skin_tone:' => '🚶🏻♀️',
+ ':woman_walking_medium_dark_skin_tone:' => '🚶🏾♀️',
+ ':woman_walking_medium_light_skin_tone:' => '🚶🏼♀️',
+ ':woman_walking_medium_skin_tone:' => '🚶🏽♀️',
+ ':woman_wearing_turban_dark_skin_tone:' => '👳🏿♀️',
+ ':woman_wearing_turban_light_skin_tone:' => '👳🏻♀️',
+ ':woman_wearing_turban_medium_dark_skin_tone:' => '👳🏾♀️',
+ ':woman_wearing_turban_medium_light_skin_tone:' => '👳🏼♀️',
+ ':woman_wearing_turban_medium_skin_tone:' => '👳🏽♀️',
+ ':woman_with_veil_dark_skin_tone:' => '👰🏿♀️',
+ ':woman_with_veil_light_skin_tone:' => '👰🏻♀️',
+ ':woman_with_veil_medium_dark_skin_tone:' => '👰🏾♀️',
+ ':woman_with_veil_medium_light_skin_tone:' => '👰🏼♀️',
+ ':woman_with_veil_medium_skin_tone:' => '👰🏽♀️',
':couple_mm:' => '👨❤️👨',
+ ':couple_with_heart_woman_man:' => '👩❤️👨',
':couple_ww:' => '👩❤️👩',
+ ':man_in_manual_wheelchair_facing_right:' => '👨🦽➡️',
+ ':man_in_motorized_wheelchair_facing_right:' => '👨🦼➡️',
+ ':man_with_white_cane_facing_right:' => '👨🦯➡️',
+ ':person_in_manual_wheelchair_facing_right:' => '🧑🦽➡️',
+ ':person_in_motorized_wheelchair_facing_right:' => '🧑🦼➡️',
+ ':person_with_white_cane_facing_right:' => '🧑🦯➡️',
+ ':woman_in_manual_wheelchair_facing_right:' => '👩🦽➡️',
+ ':woman_in_motorized_wheelchair_facing_right:' => '👩🦼➡️',
+ ':woman_with_white_cane_facing_right:' => '👩🦯➡️',
+ ':family_adult_adult_child_child:' => '🧑🧑🧒🧒',
':family_mmbb:' => '👨👨👦👦',
':family_mmgb:' => '👨👨👧👦',
':family_mmgg:' => '👨👨👧👧',
@@ -2330,8 +3418,366 @@
':family_wwbb:' => '👩👩👦👦',
':family_wwgb:' => '👩👩👧👦',
':family_wwgg:' => '👩👩👧👧',
- ':couplekiss_mm:' => '👨❤️💋👨',
- ':couplekiss_ww:' => '👩❤️💋👩',
+ ':flag_england:' => '🏴',
+ ':flag_scotland:' => '🏴',
+ ':flag_wales:' => '🏴',
+ ':man_in_manual_wheelchair_facing_right_dark_skin_tone:' => '👨🏿🦽➡️',
+ ':man_in_manual_wheelchair_facing_right_light_skin_tone:' => '👨🏻🦽➡️',
+ ':man_in_manual_wheelchair_facing_right_medium_dark_skin_tone:' => '👨🏾🦽➡️',
+ ':man_in_manual_wheelchair_facing_right_medium_light_skin_tone:' => '👨🏼🦽➡️',
+ ':man_in_manual_wheelchair_facing_right_medium_skin_tone:' => '👨🏽🦽➡️',
+ ':man_in_motorized_wheelchair_facing_right_dark_skin_tone:' => '👨🏿🦼➡️',
+ ':man_in_motorized_wheelchair_facing_right_light_skin_tone:' => '👨🏻🦼➡️',
+ ':man_in_motorized_wheelchair_facing_right_medium_dark_skin_tone:' => '👨🏾🦼➡️',
+ ':man_in_motorized_wheelchair_facing_right_medium_light_skin_tone:' => '👨🏼🦼➡️',
+ ':man_in_motorized_wheelchair_facing_right_medium_skin_tone:' => '👨🏽🦼➡️',
+ ':man_kneeling_facing_right:' => '🧎♂️➡️',
+ ':man_running_facing_right:' => '🏃♂️➡️',
+ ':man_walking_facing_right:' => '🚶♂️➡️',
+ ':man_with_white_cane_facing_right_dark_skin_tone:' => '👨🏿🦯➡️',
+ ':man_with_white_cane_facing_right_light_skin_tone:' => '👨🏻🦯➡️',
+ ':man_with_white_cane_facing_right_medium_dark_skin_tone:' => '👨🏾🦯➡️',
+ ':man_with_white_cane_facing_right_medium_light_skin_tone:' => '👨🏼🦯➡️',
+ ':man_with_white_cane_facing_right_medium_skin_tone:' => '👨🏽🦯➡️',
+ ':men_holding_hands_dark_skin_tone_light_skin_tone:' => '👨🏿🤝👨🏻',
+ ':men_holding_hands_dark_skin_tone_medium_dark_skin_tone:' => '👨🏿🤝👨🏾',
+ ':men_holding_hands_dark_skin_tone_medium_light_skin_tone:' => '👨🏿🤝👨🏼',
+ ':men_holding_hands_dark_skin_tone_medium_skin_tone:' => '👨🏿🤝👨🏽',
+ ':men_holding_hands_light_skin_tone_dark_skin_tone:' => '👨🏻🤝👨🏿',
+ ':men_holding_hands_light_skin_tone_medium_dark_skin_tone:' => '👨🏻🤝👨🏾',
+ ':men_holding_hands_light_skin_tone_medium_light_skin_tone:' => '👨🏻🤝👨🏼',
+ ':men_holding_hands_light_skin_tone_medium_skin_tone:' => '👨🏻🤝👨🏽',
+ ':men_holding_hands_medium_dark_skin_tone_dark_skin_tone:' => '👨🏾🤝👨🏿',
+ ':men_holding_hands_medium_dark_skin_tone_light_skin_tone:' => '👨🏾🤝👨🏻',
+ ':men_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:' => '👨🏾🤝👨🏼',
+ ':men_holding_hands_medium_dark_skin_tone_medium_skin_tone:' => '👨🏾🤝👨🏽',
+ ':men_holding_hands_medium_light_skin_tone_dark_skin_tone:' => '👨🏼🤝👨🏿',
+ ':men_holding_hands_medium_light_skin_tone_light_skin_tone:' => '👨🏼🤝👨🏻',
+ ':men_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:' => '👨🏼🤝👨🏾',
+ ':men_holding_hands_medium_light_skin_tone_medium_skin_tone:' => '👨🏼🤝👨🏽',
+ ':men_holding_hands_medium_skin_tone_dark_skin_tone:' => '👨🏽🤝👨🏿',
+ ':men_holding_hands_medium_skin_tone_light_skin_tone:' => '👨🏽🤝👨🏻',
+ ':men_holding_hands_medium_skin_tone_medium_dark_skin_tone:' => '👨🏽🤝👨🏾',
+ ':men_holding_hands_medium_skin_tone_medium_light_skin_tone:' => '👨🏽🤝👨🏼',
+ ':people_holding_hands_dark_skin_tone:' => '🧑🏿🤝🧑🏿',
+ ':people_holding_hands_dark_skin_tone_light_skin_tone:' => '🧑🏿🤝🧑🏻',
+ ':people_holding_hands_dark_skin_tone_medium_dark_skin_tone:' => '🧑🏿🤝🧑🏾',
+ ':people_holding_hands_dark_skin_tone_medium_light_skin_tone:' => '🧑🏿🤝🧑🏼',
+ ':people_holding_hands_dark_skin_tone_medium_skin_tone:' => '🧑🏿🤝🧑🏽',
+ ':people_holding_hands_light_skin_tone:' => '🧑🏻🤝🧑🏻',
+ ':people_holding_hands_light_skin_tone_dark_skin_tone:' => '🧑🏻🤝🧑🏿',
+ ':people_holding_hands_light_skin_tone_medium_dark_skin_tone:' => '🧑🏻🤝🧑🏾',
+ ':people_holding_hands_light_skin_tone_medium_light_skin_tone:' => '🧑🏻🤝🧑🏼',
+ ':people_holding_hands_light_skin_tone_medium_skin_tone:' => '🧑🏻🤝🧑🏽',
+ ':people_holding_hands_medium_dark_skin_tone:' => '🧑🏾🤝🧑🏾',
+ ':people_holding_hands_medium_dark_skin_tone_dark_skin_tone:' => '🧑🏾🤝🧑🏿',
+ ':people_holding_hands_medium_dark_skin_tone_light_skin_tone:' => '🧑🏾🤝🧑🏻',
+ ':people_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:' => '🧑🏾🤝🧑🏼',
+ ':people_holding_hands_medium_dark_skin_tone_medium_skin_tone:' => '🧑🏾🤝🧑🏽',
+ ':people_holding_hands_medium_light_skin_tone:' => '🧑🏼🤝🧑🏼',
+ ':people_holding_hands_medium_light_skin_tone_dark_skin_tone:' => '🧑🏼🤝🧑🏿',
+ ':people_holding_hands_medium_light_skin_tone_light_skin_tone:' => '🧑🏼🤝🧑🏻',
+ ':people_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:' => '🧑🏼🤝🧑🏾',
+ ':people_holding_hands_medium_light_skin_tone_medium_skin_tone:' => '🧑🏼🤝🧑🏽',
+ ':people_holding_hands_medium_skin_tone:' => '🧑🏽🤝🧑🏽',
+ ':people_holding_hands_medium_skin_tone_dark_skin_tone:' => '🧑🏽🤝🧑🏿',
+ ':people_holding_hands_medium_skin_tone_light_skin_tone:' => '🧑🏽🤝🧑🏻',
+ ':people_holding_hands_medium_skin_tone_medium_dark_skin_tone:' => '🧑🏽🤝🧑🏾',
+ ':people_holding_hands_medium_skin_tone_medium_light_skin_tone:' => '🧑🏽🤝🧑🏼',
+ ':person_in_manual_wheelchair_facing_right_dark_skin_tone:' => '🧑🏿🦽➡️',
+ ':person_in_manual_wheelchair_facing_right_light_skin_tone:' => '🧑🏻🦽➡️',
+ ':person_in_manual_wheelchair_facing_right_medium_dark_skin_tone:' => '🧑🏾🦽➡️',
+ ':person_in_manual_wheelchair_facing_right_medium_light_skin_tone:' => '🧑🏼🦽➡️',
+ ':person_in_manual_wheelchair_facing_right_medium_skin_tone:' => '🧑🏽🦽➡️',
+ ':person_in_motorized_wheelchair_facing_right_dark_skin_tone:' => '🧑🏿🦼➡️',
+ ':person_in_motorized_wheelchair_facing_right_light_skin_tone:' => '🧑🏻🦼➡️',
+ ':person_in_motorized_wheelchair_facing_right_medium_dark_skin_tone:' => '🧑🏾🦼➡️',
+ ':person_in_motorized_wheelchair_facing_right_medium_light_skin_tone:' => '🧑🏼🦼➡️',
+ ':person_in_motorized_wheelchair_facing_right_medium_skin_tone:' => '🧑🏽🦼➡️',
+ ':person_with_white_cane_facing_right_dark_skin_tone:' => '🧑🏿🦯➡️',
+ ':person_with_white_cane_facing_right_light_skin_tone:' => '🧑🏻🦯➡️',
+ ':person_with_white_cane_facing_right_medium_dark_skin_tone:' => '🧑🏾🦯➡️',
+ ':person_with_white_cane_facing_right_medium_light_skin_tone:' => '🧑🏼🦯➡️',
+ ':person_with_white_cane_facing_right_medium_skin_tone:' => '🧑🏽🦯➡️',
+ ':woman_and_man_holding_hands_dark_skin_tone_light_skin_tone:' => '👩🏿🤝👨🏻',
+ ':woman_and_man_holding_hands_dark_skin_tone_medium_dark_skin_tone:' => '👩🏿🤝👨🏾',
+ ':woman_and_man_holding_hands_dark_skin_tone_medium_light_skin_tone:' => '👩🏿🤝👨🏼',
+ ':woman_and_man_holding_hands_dark_skin_tone_medium_skin_tone:' => '👩🏿🤝👨🏽',
+ ':woman_and_man_holding_hands_light_skin_tone_dark_skin_tone:' => '👩🏻🤝👨🏿',
+ ':woman_and_man_holding_hands_light_skin_tone_medium_dark_skin_tone:' => '👩🏻🤝👨🏾',
+ ':woman_and_man_holding_hands_light_skin_tone_medium_light_skin_tone:' => '👩🏻🤝👨🏼',
+ ':woman_and_man_holding_hands_light_skin_tone_medium_skin_tone:' => '👩🏻🤝👨🏽',
+ ':woman_and_man_holding_hands_medium_dark_skin_tone_dark_skin_tone:' => '👩🏾🤝👨🏿',
+ ':woman_and_man_holding_hands_medium_dark_skin_tone_light_skin_tone:' => '👩🏾🤝👨🏻',
+ ':woman_and_man_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:' => '👩🏾🤝👨🏼',
+ ':woman_and_man_holding_hands_medium_dark_skin_tone_medium_skin_tone:' => '👩🏾🤝👨🏽',
+ ':woman_and_man_holding_hands_medium_light_skin_tone_dark_skin_tone:' => '👩🏼🤝👨🏿',
+ ':woman_and_man_holding_hands_medium_light_skin_tone_light_skin_tone:' => '👩🏼🤝👨🏻',
+ ':woman_and_man_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:' => '👩🏼🤝👨🏾',
+ ':woman_and_man_holding_hands_medium_light_skin_tone_medium_skin_tone:' => '👩🏼🤝👨🏽',
+ ':woman_and_man_holding_hands_medium_skin_tone_dark_skin_tone:' => '👩🏽🤝👨🏿',
+ ':woman_and_man_holding_hands_medium_skin_tone_light_skin_tone:' => '👩🏽🤝👨🏻',
+ ':woman_and_man_holding_hands_medium_skin_tone_medium_dark_skin_tone:' => '👩🏽🤝👨🏾',
+ ':woman_and_man_holding_hands_medium_skin_tone_medium_light_skin_tone:' => '👩🏽🤝👨🏼',
+ ':woman_in_manual_wheelchair_facing_right_dark_skin_tone:' => '👩🏿🦽➡️',
+ ':woman_in_manual_wheelchair_facing_right_light_skin_tone:' => '👩🏻🦽➡️',
+ ':woman_in_manual_wheelchair_facing_right_medium_dark_skin_tone:' => '👩🏾🦽➡️',
+ ':woman_in_manual_wheelchair_facing_right_medium_light_skin_tone:' => '👩🏼🦽➡️',
+ ':woman_in_manual_wheelchair_facing_right_medium_skin_tone:' => '👩🏽🦽➡️',
+ ':woman_in_motorized_wheelchair_facing_right_dark_skin_tone:' => '👩🏿🦼➡️',
+ ':woman_in_motorized_wheelchair_facing_right_light_skin_tone:' => '👩🏻🦼➡️',
+ ':woman_in_motorized_wheelchair_facing_right_medium_dark_skin_tone:' => '👩🏾🦼➡️',
+ ':woman_in_motorized_wheelchair_facing_right_medium_light_skin_tone:' => '👩🏼🦼➡️',
+ ':woman_in_motorized_wheelchair_facing_right_medium_skin_tone:' => '👩🏽🦼➡️',
+ ':woman_kneeling_facing_right:' => '🧎♀️➡️',
+ ':woman_running_facing_right:' => '🏃♀️➡️',
+ ':woman_walking_facing_right:' => '🚶♀️➡️',
+ ':woman_with_white_cane_facing_right_dark_skin_tone:' => '👩🏿🦯➡️',
+ ':woman_with_white_cane_facing_right_light_skin_tone:' => '👩🏻🦯➡️',
+ ':woman_with_white_cane_facing_right_medium_dark_skin_tone:' => '👩🏾🦯➡️',
+ ':woman_with_white_cane_facing_right_medium_light_skin_tone:' => '👩🏼🦯➡️',
+ ':woman_with_white_cane_facing_right_medium_skin_tone:' => '👩🏽🦯➡️',
+ ':women_holding_hands_dark_skin_tone_light_skin_tone:' => '👩🏿🤝👩🏻',
+ ':women_holding_hands_dark_skin_tone_medium_dark_skin_tone:' => '👩🏿🤝👩🏾',
+ ':women_holding_hands_dark_skin_tone_medium_light_skin_tone:' => '👩🏿🤝👩🏼',
+ ':women_holding_hands_dark_skin_tone_medium_skin_tone:' => '👩🏿🤝👩🏽',
+ ':women_holding_hands_light_skin_tone_dark_skin_tone:' => '👩🏻🤝👩🏿',
+ ':women_holding_hands_light_skin_tone_medium_dark_skin_tone:' => '👩🏻🤝👩🏾',
+ ':women_holding_hands_light_skin_tone_medium_light_skin_tone:' => '👩🏻🤝👩🏼',
+ ':women_holding_hands_light_skin_tone_medium_skin_tone:' => '👩🏻🤝👩🏽',
+ ':women_holding_hands_medium_dark_skin_tone_dark_skin_tone:' => '👩🏾🤝👩🏿',
+ ':women_holding_hands_medium_dark_skin_tone_light_skin_tone:' => '👩🏾🤝👩🏻',
+ ':women_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:' => '👩🏾🤝👩🏼',
+ ':women_holding_hands_medium_dark_skin_tone_medium_skin_tone:' => '👩🏾🤝👩🏽',
+ ':women_holding_hands_medium_light_skin_tone_dark_skin_tone:' => '👩🏼🤝👩🏿',
+ ':women_holding_hands_medium_light_skin_tone_light_skin_tone:' => '👩🏼🤝👩🏻',
+ ':women_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:' => '👩🏼🤝👩🏾',
+ ':women_holding_hands_medium_light_skin_tone_medium_skin_tone:' => '👩🏼🤝👩🏽',
+ ':women_holding_hands_medium_skin_tone_dark_skin_tone:' => '👩🏽🤝👩🏿',
+ ':women_holding_hands_medium_skin_tone_light_skin_tone:' => '👩🏽🤝👩🏻',
+ ':women_holding_hands_medium_skin_tone_medium_dark_skin_tone:' => '👩🏽🤝👩🏾',
+ ':women_holding_hands_medium_skin_tone_medium_light_skin_tone:' => '👩🏽🤝👩🏼',
+ ':couple_with_heart_man_man_dark_skin_tone:' => '👨🏿❤️👨🏿',
+ ':couple_with_heart_man_man_dark_skin_tone_light_skin_tone:' => '👨🏿❤️👨🏻',
+ ':couple_with_heart_man_man_dark_skin_tone_medium_dark_skin_tone:' => '👨🏿❤️👨🏾',
+ ':couple_with_heart_man_man_dark_skin_tone_medium_light_skin_tone:' => '👨🏿❤️👨🏼',
+ ':couple_with_heart_man_man_dark_skin_tone_medium_skin_tone:' => '👨🏿❤️👨🏽',
+ ':couple_with_heart_man_man_light_skin_tone:' => '👨🏻❤️👨🏻',
+ ':couple_with_heart_man_man_light_skin_tone_dark_skin_tone:' => '👨🏻❤️👨🏿',
+ ':couple_with_heart_man_man_light_skin_tone_medium_dark_skin_tone:' => '👨🏻❤️👨🏾',
+ ':couple_with_heart_man_man_light_skin_tone_medium_light_skin_tone:' => '👨🏻❤️👨🏼',
+ ':couple_with_heart_man_man_light_skin_tone_medium_skin_tone:' => '👨🏻❤️👨🏽',
+ ':couple_with_heart_man_man_medium_dark_skin_tone:' => '👨🏾❤️👨🏾',
+ ':couple_with_heart_man_man_medium_dark_skin_tone_dark_skin_tone:' => '👨🏾❤️👨🏿',
+ ':couple_with_heart_man_man_medium_dark_skin_tone_light_skin_tone:' => '👨🏾❤️👨🏻',
+ ':couple_with_heart_man_man_medium_dark_skin_tone_medium_light_skin_tone:' => '👨🏾❤️👨🏼',
+ ':couple_with_heart_man_man_medium_dark_skin_tone_medium_skin_tone:' => '👨🏾❤️👨🏽',
+ ':couple_with_heart_man_man_medium_light_skin_tone:' => '👨🏼❤️👨🏼',
+ ':couple_with_heart_man_man_medium_light_skin_tone_dark_skin_tone:' => '👨🏼❤️👨🏿',
+ ':couple_with_heart_man_man_medium_light_skin_tone_light_skin_tone:' => '👨🏼❤️👨🏻',
+ ':couple_with_heart_man_man_medium_light_skin_tone_medium_dark_skin_tone:' => '👨🏼❤️👨🏾',
+ ':couple_with_heart_man_man_medium_light_skin_tone_medium_skin_tone:' => '👨🏼❤️👨🏽',
+ ':couple_with_heart_man_man_medium_skin_tone:' => '👨🏽❤️👨🏽',
+ ':couple_with_heart_man_man_medium_skin_tone_dark_skin_tone:' => '👨🏽❤️👨🏿',
+ ':couple_with_heart_man_man_medium_skin_tone_light_skin_tone:' => '👨🏽❤️👨🏻',
+ ':couple_with_heart_man_man_medium_skin_tone_medium_dark_skin_tone:' => '👨🏽❤️👨🏾',
+ ':couple_with_heart_man_man_medium_skin_tone_medium_light_skin_tone:' => '👨🏽❤️👨🏼',
+ ':couple_with_heart_person_person_dark_skin_tone_light_skin_tone:' => '🧑🏿❤️🧑🏻',
+ ':couple_with_heart_person_person_dark_skin_tone_medium_dark_skin_tone:' => '🧑🏿❤️🧑🏾',
+ ':couple_with_heart_person_person_dark_skin_tone_medium_light_skin_tone:' => '🧑🏿❤️🧑🏼',
+ ':couple_with_heart_person_person_dark_skin_tone_medium_skin_tone:' => '🧑🏿❤️🧑🏽',
+ ':couple_with_heart_person_person_light_skin_tone_dark_skin_tone:' => '🧑🏻❤️🧑🏿',
+ ':couple_with_heart_person_person_light_skin_tone_medium_dark_skin_tone:' => '🧑🏻❤️🧑🏾',
+ ':couple_with_heart_person_person_light_skin_tone_medium_light_skin_tone:' => '🧑🏻❤️🧑🏼',
+ ':couple_with_heart_person_person_light_skin_tone_medium_skin_tone:' => '🧑🏻❤️🧑🏽',
+ ':couple_with_heart_person_person_medium_dark_skin_tone_dark_skin_tone:' => '🧑🏾❤️🧑🏿',
+ ':couple_with_heart_person_person_medium_dark_skin_tone_light_skin_tone:' => '🧑🏾❤️🧑🏻',
+ ':couple_with_heart_person_person_medium_dark_skin_tone_medium_light_skin_tone:' => '🧑🏾❤️🧑🏼',
+ ':couple_with_heart_person_person_medium_dark_skin_tone_medium_skin_tone:' => '🧑🏾❤️🧑🏽',
+ ':couple_with_heart_person_person_medium_light_skin_tone_dark_skin_tone:' => '🧑🏼❤️🧑🏿',
+ ':couple_with_heart_person_person_medium_light_skin_tone_light_skin_tone:' => '🧑🏼❤️🧑🏻',
+ ':couple_with_heart_person_person_medium_light_skin_tone_medium_dark_skin_tone:' => '🧑🏼❤️🧑🏾',
+ ':couple_with_heart_person_person_medium_light_skin_tone_medium_skin_tone:' => '🧑🏼❤️🧑🏽',
+ ':couple_with_heart_person_person_medium_skin_tone_dark_skin_tone:' => '🧑🏽❤️🧑🏿',
+ ':couple_with_heart_person_person_medium_skin_tone_light_skin_tone:' => '🧑🏽❤️🧑🏻',
+ ':couple_with_heart_person_person_medium_skin_tone_medium_dark_skin_tone:' => '🧑🏽❤️🧑🏾',
+ ':couple_with_heart_person_person_medium_skin_tone_medium_light_skin_tone:' => '🧑🏽❤️🧑🏼',
+ ':couple_with_heart_woman_man_dark_skin_tone:' => '👩🏿❤️👨🏿',
+ ':couple_with_heart_woman_man_dark_skin_tone_light_skin_tone:' => '👩🏿❤️👨🏻',
+ ':couple_with_heart_woman_man_dark_skin_tone_medium_dark_skin_tone:' => '👩🏿❤️👨🏾',
+ ':couple_with_heart_woman_man_dark_skin_tone_medium_light_skin_tone:' => '👩🏿❤️👨🏼',
+ ':couple_with_heart_woman_man_dark_skin_tone_medium_skin_tone:' => '👩🏿❤️👨🏽',
+ ':couple_with_heart_woman_man_light_skin_tone:' => '👩🏻❤️👨🏻',
+ ':couple_with_heart_woman_man_light_skin_tone_dark_skin_tone:' => '👩🏻❤️👨🏿',
+ ':couple_with_heart_woman_man_light_skin_tone_medium_dark_skin_tone:' => '👩🏻❤️👨🏾',
+ ':couple_with_heart_woman_man_light_skin_tone_medium_light_skin_tone:' => '👩🏻❤️👨🏼',
+ ':couple_with_heart_woman_man_light_skin_tone_medium_skin_tone:' => '👩🏻❤️👨🏽',
+ ':couple_with_heart_woman_man_medium_dark_skin_tone:' => '👩🏾❤️👨🏾',
+ ':couple_with_heart_woman_man_medium_dark_skin_tone_dark_skin_tone:' => '👩🏾❤️👨🏿',
+ ':couple_with_heart_woman_man_medium_dark_skin_tone_light_skin_tone:' => '👩🏾❤️👨🏻',
+ ':couple_with_heart_woman_man_medium_dark_skin_tone_medium_light_skin_tone:' => '👩🏾❤️👨🏼',
+ ':couple_with_heart_woman_man_medium_dark_skin_tone_medium_skin_tone:' => '👩🏾❤️👨🏽',
+ ':couple_with_heart_woman_man_medium_light_skin_tone:' => '👩🏼❤️👨🏼',
+ ':couple_with_heart_woman_man_medium_light_skin_tone_dark_skin_tone:' => '👩🏼❤️👨🏿',
+ ':couple_with_heart_woman_man_medium_light_skin_tone_light_skin_tone:' => '👩🏼❤️👨🏻',
+ ':couple_with_heart_woman_man_medium_light_skin_tone_medium_dark_skin_tone:' => '👩🏼❤️👨🏾',
+ ':couple_with_heart_woman_man_medium_light_skin_tone_medium_skin_tone:' => '👩🏼❤️👨🏽',
+ ':couple_with_heart_woman_man_medium_skin_tone:' => '👩🏽❤️👨🏽',
+ ':couple_with_heart_woman_man_medium_skin_tone_dark_skin_tone:' => '👩🏽❤️👨🏿',
+ ':couple_with_heart_woman_man_medium_skin_tone_light_skin_tone:' => '👩🏽❤️👨🏻',
+ ':couple_with_heart_woman_man_medium_skin_tone_medium_dark_skin_tone:' => '👩🏽❤️👨🏾',
+ ':couple_with_heart_woman_man_medium_skin_tone_medium_light_skin_tone:' => '👩🏽❤️👨🏼',
+ ':couple_with_heart_woman_woman_dark_skin_tone:' => '👩🏿❤️👩🏿',
+ ':couple_with_heart_woman_woman_dark_skin_tone_light_skin_tone:' => '👩🏿❤️👩🏻',
+ ':couple_with_heart_woman_woman_dark_skin_tone_medium_dark_skin_tone:' => '👩🏿❤️👩🏾',
+ ':couple_with_heart_woman_woman_dark_skin_tone_medium_light_skin_tone:' => '👩🏿❤️👩🏼',
+ ':couple_with_heart_woman_woman_dark_skin_tone_medium_skin_tone:' => '👩🏿❤️👩🏽',
+ ':couple_with_heart_woman_woman_light_skin_tone:' => '👩🏻❤️👩🏻',
+ ':couple_with_heart_woman_woman_light_skin_tone_dark_skin_tone:' => '👩🏻❤️👩🏿',
+ ':couple_with_heart_woman_woman_light_skin_tone_medium_dark_skin_tone:' => '👩🏻❤️👩🏾',
+ ':couple_with_heart_woman_woman_light_skin_tone_medium_light_skin_tone:' => '👩🏻❤️👩🏼',
+ ':couple_with_heart_woman_woman_light_skin_tone_medium_skin_tone:' => '👩🏻❤️👩🏽',
+ ':couple_with_heart_woman_woman_medium_dark_skin_tone:' => '👩🏾❤️👩🏾',
+ ':couple_with_heart_woman_woman_medium_dark_skin_tone_dark_skin_tone:' => '👩🏾❤️👩🏿',
+ ':couple_with_heart_woman_woman_medium_dark_skin_tone_light_skin_tone:' => '👩🏾❤️👩🏻',
+ ':couple_with_heart_woman_woman_medium_dark_skin_tone_medium_light_skin_tone:' => '👩🏾❤️👩🏼',
+ ':couple_with_heart_woman_woman_medium_dark_skin_tone_medium_skin_tone:' => '👩🏾❤️👩🏽',
+ ':couple_with_heart_woman_woman_medium_light_skin_tone:' => '👩🏼❤️👩🏼',
+ ':couple_with_heart_woman_woman_medium_light_skin_tone_dark_skin_tone:' => '👩🏼❤️👩🏿',
+ ':couple_with_heart_woman_woman_medium_light_skin_tone_light_skin_tone:' => '👩🏼❤️👩🏻',
+ ':couple_with_heart_woman_woman_medium_light_skin_tone_medium_dark_skin_tone:' => '👩🏼❤️👩🏾',
+ ':couple_with_heart_woman_woman_medium_light_skin_tone_medium_skin_tone:' => '👩🏼❤️👩🏽',
+ ':couple_with_heart_woman_woman_medium_skin_tone:' => '👩🏽❤️👩🏽',
+ ':couple_with_heart_woman_woman_medium_skin_tone_dark_skin_tone:' => '👩🏽❤️👩🏿',
+ ':couple_with_heart_woman_woman_medium_skin_tone_light_skin_tone:' => '👩🏽❤️👩🏻',
+ ':couple_with_heart_woman_woman_medium_skin_tone_medium_dark_skin_tone:' => '👩🏽❤️👩🏾',
+ ':couple_with_heart_woman_woman_medium_skin_tone_medium_light_skin_tone:' => '👩🏽❤️👩🏼',
':kiss_mm:' => '👨❤️💋👨',
+ ':kiss_woman_man:' => '👩❤️💋👨',
':kiss_ww:' => '👩❤️💋👩',
+ ':man_kneeling_facing_right_dark_skin_tone:' => '🧎🏿♂️➡️',
+ ':man_kneeling_facing_right_light_skin_tone:' => '🧎🏻♂️➡️',
+ ':man_kneeling_facing_right_medium_dark_skin_tone:' => '🧎🏾♂️➡️',
+ ':man_kneeling_facing_right_medium_light_skin_tone:' => '🧎🏼♂️➡️',
+ ':man_kneeling_facing_right_medium_skin_tone:' => '🧎🏽♂️➡️',
+ ':man_running_facing_right_dark_skin_tone:' => '🏃🏿♂️➡️',
+ ':man_running_facing_right_light_skin_tone:' => '🏃🏻♂️➡️',
+ ':man_running_facing_right_medium_dark_skin_tone:' => '🏃🏾♂️➡️',
+ ':man_running_facing_right_medium_light_skin_tone:' => '🏃🏼♂️➡️',
+ ':man_running_facing_right_medium_skin_tone:' => '🏃🏽♂️➡️',
+ ':man_walking_facing_right_dark_skin_tone:' => '🚶🏿♂️➡️',
+ ':man_walking_facing_right_light_skin_tone:' => '🚶🏻♂️➡️',
+ ':man_walking_facing_right_medium_dark_skin_tone:' => '🚶🏾♂️➡️',
+ ':man_walking_facing_right_medium_light_skin_tone:' => '🚶🏼♂️➡️',
+ ':man_walking_facing_right_medium_skin_tone:' => '🚶🏽♂️➡️',
+ ':woman_kneeling_facing_right_dark_skin_tone:' => '🧎🏿♀️➡️',
+ ':woman_kneeling_facing_right_light_skin_tone:' => '🧎🏻♀️➡️',
+ ':woman_kneeling_facing_right_medium_dark_skin_tone:' => '🧎🏾♀️➡️',
+ ':woman_kneeling_facing_right_medium_light_skin_tone:' => '🧎🏼♀️➡️',
+ ':woman_kneeling_facing_right_medium_skin_tone:' => '🧎🏽♀️➡️',
+ ':woman_running_facing_right_dark_skin_tone:' => '🏃🏿♀️➡️',
+ ':woman_running_facing_right_light_skin_tone:' => '🏃🏻♀️➡️',
+ ':woman_running_facing_right_medium_dark_skin_tone:' => '🏃🏾♀️➡️',
+ ':woman_running_facing_right_medium_light_skin_tone:' => '🏃🏼♀️➡️',
+ ':woman_running_facing_right_medium_skin_tone:' => '🏃🏽♀️➡️',
+ ':woman_walking_facing_right_dark_skin_tone:' => '🚶🏿♀️➡️',
+ ':woman_walking_facing_right_light_skin_tone:' => '🚶🏻♀️➡️',
+ ':woman_walking_facing_right_medium_dark_skin_tone:' => '🚶🏾♀️➡️',
+ ':woman_walking_facing_right_medium_light_skin_tone:' => '🚶🏼♀️➡️',
+ ':woman_walking_facing_right_medium_skin_tone:' => '🚶🏽♀️➡️',
+ ':kiss_man_man_dark_skin_tone:' => '👨🏿❤️💋👨🏿',
+ ':kiss_man_man_dark_skin_tone_light_skin_tone:' => '👨🏿❤️💋👨🏻',
+ ':kiss_man_man_dark_skin_tone_medium_dark_skin_tone:' => '👨🏿❤️💋👨🏾',
+ ':kiss_man_man_dark_skin_tone_medium_light_skin_tone:' => '👨🏿❤️💋👨🏼',
+ ':kiss_man_man_dark_skin_tone_medium_skin_tone:' => '👨🏿❤️💋👨🏽',
+ ':kiss_man_man_light_skin_tone:' => '👨🏻❤️💋👨🏻',
+ ':kiss_man_man_light_skin_tone_dark_skin_tone:' => '👨🏻❤️💋👨🏿',
+ ':kiss_man_man_light_skin_tone_medium_dark_skin_tone:' => '👨🏻❤️💋👨🏾',
+ ':kiss_man_man_light_skin_tone_medium_light_skin_tone:' => '👨🏻❤️💋👨🏼',
+ ':kiss_man_man_light_skin_tone_medium_skin_tone:' => '👨🏻❤️💋👨🏽',
+ ':kiss_man_man_medium_dark_skin_tone:' => '👨🏾❤️💋👨🏾',
+ ':kiss_man_man_medium_dark_skin_tone_dark_skin_tone:' => '👨🏾❤️💋👨🏿',
+ ':kiss_man_man_medium_dark_skin_tone_light_skin_tone:' => '👨🏾❤️💋👨🏻',
+ ':kiss_man_man_medium_dark_skin_tone_medium_light_skin_tone:' => '👨🏾❤️💋👨🏼',
+ ':kiss_man_man_medium_dark_skin_tone_medium_skin_tone:' => '👨🏾❤️💋👨🏽',
+ ':kiss_man_man_medium_light_skin_tone:' => '👨🏼❤️💋👨🏼',
+ ':kiss_man_man_medium_light_skin_tone_dark_skin_tone:' => '👨🏼❤️💋👨🏿',
+ ':kiss_man_man_medium_light_skin_tone_light_skin_tone:' => '👨🏼❤️💋👨🏻',
+ ':kiss_man_man_medium_light_skin_tone_medium_dark_skin_tone:' => '👨🏼❤️💋👨🏾',
+ ':kiss_man_man_medium_light_skin_tone_medium_skin_tone:' => '👨🏼❤️💋👨🏽',
+ ':kiss_man_man_medium_skin_tone:' => '👨🏽❤️💋👨🏽',
+ ':kiss_man_man_medium_skin_tone_dark_skin_tone:' => '👨🏽❤️💋👨🏿',
+ ':kiss_man_man_medium_skin_tone_light_skin_tone:' => '👨🏽❤️💋👨🏻',
+ ':kiss_man_man_medium_skin_tone_medium_dark_skin_tone:' => '👨🏽❤️💋👨🏾',
+ ':kiss_man_man_medium_skin_tone_medium_light_skin_tone:' => '👨🏽❤️💋👨🏼',
+ ':kiss_person_person_dark_skin_tone_light_skin_tone:' => '🧑🏿❤️💋🧑🏻',
+ ':kiss_person_person_dark_skin_tone_medium_dark_skin_tone:' => '🧑🏿❤️💋🧑🏾',
+ ':kiss_person_person_dark_skin_tone_medium_light_skin_tone:' => '🧑🏿❤️💋🧑🏼',
+ ':kiss_person_person_dark_skin_tone_medium_skin_tone:' => '🧑🏿❤️💋🧑🏽',
+ ':kiss_person_person_light_skin_tone_dark_skin_tone:' => '🧑🏻❤️💋🧑🏿',
+ ':kiss_person_person_light_skin_tone_medium_dark_skin_tone:' => '🧑🏻❤️💋🧑🏾',
+ ':kiss_person_person_light_skin_tone_medium_light_skin_tone:' => '🧑🏻❤️💋🧑🏼',
+ ':kiss_person_person_light_skin_tone_medium_skin_tone:' => '🧑🏻❤️💋🧑🏽',
+ ':kiss_person_person_medium_dark_skin_tone_dark_skin_tone:' => '🧑🏾❤️💋🧑🏿',
+ ':kiss_person_person_medium_dark_skin_tone_light_skin_tone:' => '🧑🏾❤️💋🧑🏻',
+ ':kiss_person_person_medium_dark_skin_tone_medium_light_skin_tone:' => '🧑🏾❤️💋🧑🏼',
+ ':kiss_person_person_medium_dark_skin_tone_medium_skin_tone:' => '🧑🏾❤️💋🧑🏽',
+ ':kiss_person_person_medium_light_skin_tone_dark_skin_tone:' => '🧑🏼❤️💋🧑🏿',
+ ':kiss_person_person_medium_light_skin_tone_light_skin_tone:' => '🧑🏼❤️💋🧑🏻',
+ ':kiss_person_person_medium_light_skin_tone_medium_dark_skin_tone:' => '🧑🏼❤️💋🧑🏾',
+ ':kiss_person_person_medium_light_skin_tone_medium_skin_tone:' => '🧑🏼❤️💋🧑🏽',
+ ':kiss_person_person_medium_skin_tone_dark_skin_tone:' => '🧑🏽❤️💋🧑🏿',
+ ':kiss_person_person_medium_skin_tone_light_skin_tone:' => '🧑🏽❤️💋🧑🏻',
+ ':kiss_person_person_medium_skin_tone_medium_dark_skin_tone:' => '🧑🏽❤️💋🧑🏾',
+ ':kiss_person_person_medium_skin_tone_medium_light_skin_tone:' => '🧑🏽❤️💋🧑🏼',
+ ':kiss_woman_man_dark_skin_tone:' => '👩🏿❤️💋👨🏿',
+ ':kiss_woman_man_dark_skin_tone_light_skin_tone:' => '👩🏿❤️💋👨🏻',
+ ':kiss_woman_man_dark_skin_tone_medium_dark_skin_tone:' => '👩🏿❤️💋👨🏾',
+ ':kiss_woman_man_dark_skin_tone_medium_light_skin_tone:' => '👩🏿❤️💋👨🏼',
+ ':kiss_woman_man_dark_skin_tone_medium_skin_tone:' => '👩🏿❤️💋👨🏽',
+ ':kiss_woman_man_light_skin_tone:' => '👩🏻❤️💋👨🏻',
+ ':kiss_woman_man_light_skin_tone_dark_skin_tone:' => '👩🏻❤️💋👨🏿',
+ ':kiss_woman_man_light_skin_tone_medium_dark_skin_tone:' => '👩🏻❤️💋👨🏾',
+ ':kiss_woman_man_light_skin_tone_medium_light_skin_tone:' => '👩🏻❤️💋👨🏼',
+ ':kiss_woman_man_light_skin_tone_medium_skin_tone:' => '👩🏻❤️💋👨🏽',
+ ':kiss_woman_man_medium_dark_skin_tone:' => '👩🏾❤️💋👨🏾',
+ ':kiss_woman_man_medium_dark_skin_tone_dark_skin_tone:' => '👩🏾❤️💋👨🏿',
+ ':kiss_woman_man_medium_dark_skin_tone_light_skin_tone:' => '👩🏾❤️💋👨🏻',
+ ':kiss_woman_man_medium_dark_skin_tone_medium_light_skin_tone:' => '👩🏾❤️💋👨🏼',
+ ':kiss_woman_man_medium_dark_skin_tone_medium_skin_tone:' => '👩🏾❤️💋👨🏽',
+ ':kiss_woman_man_medium_light_skin_tone:' => '👩🏼❤️💋👨🏼',
+ ':kiss_woman_man_medium_light_skin_tone_dark_skin_tone:' => '👩🏼❤️💋👨🏿',
+ ':kiss_woman_man_medium_light_skin_tone_light_skin_tone:' => '👩🏼❤️💋👨🏻',
+ ':kiss_woman_man_medium_light_skin_tone_medium_dark_skin_tone:' => '👩🏼❤️💋👨🏾',
+ ':kiss_woman_man_medium_light_skin_tone_medium_skin_tone:' => '👩🏼❤️💋👨🏽',
+ ':kiss_woman_man_medium_skin_tone:' => '👩🏽❤️💋👨🏽',
+ ':kiss_woman_man_medium_skin_tone_dark_skin_tone:' => '👩🏽❤️💋👨🏿',
+ ':kiss_woman_man_medium_skin_tone_light_skin_tone:' => '👩🏽❤️💋👨🏻',
+ ':kiss_woman_man_medium_skin_tone_medium_dark_skin_tone:' => '👩🏽❤️💋👨🏾',
+ ':kiss_woman_man_medium_skin_tone_medium_light_skin_tone:' => '👩🏽❤️💋👨🏼',
+ ':kiss_woman_woman_dark_skin_tone:' => '👩🏿❤️💋👩🏿',
+ ':kiss_woman_woman_dark_skin_tone_light_skin_tone:' => '👩🏿❤️💋👩🏻',
+ ':kiss_woman_woman_dark_skin_tone_medium_dark_skin_tone:' => '👩🏿❤️💋👩🏾',
+ ':kiss_woman_woman_dark_skin_tone_medium_light_skin_tone:' => '👩🏿❤️💋👩🏼',
+ ':kiss_woman_woman_dark_skin_tone_medium_skin_tone:' => '👩🏿❤️💋👩🏽',
+ ':kiss_woman_woman_light_skin_tone:' => '👩🏻❤️💋👩🏻',
+ ':kiss_woman_woman_light_skin_tone_dark_skin_tone:' => '👩🏻❤️💋👩🏿',
+ ':kiss_woman_woman_light_skin_tone_medium_dark_skin_tone:' => '👩🏻❤️💋👩🏾',
+ ':kiss_woman_woman_light_skin_tone_medium_light_skin_tone:' => '👩🏻❤️💋👩🏼',
+ ':kiss_woman_woman_light_skin_tone_medium_skin_tone:' => '👩🏻❤️💋👩🏽',
+ ':kiss_woman_woman_medium_dark_skin_tone:' => '👩🏾❤️💋👩🏾',
+ ':kiss_woman_woman_medium_dark_skin_tone_dark_skin_tone:' => '👩🏾❤️💋👩🏿',
+ ':kiss_woman_woman_medium_dark_skin_tone_light_skin_tone:' => '👩🏾❤️💋👩🏻',
+ ':kiss_woman_woman_medium_dark_skin_tone_medium_light_skin_tone:' => '👩🏾❤️💋👩🏼',
+ ':kiss_woman_woman_medium_dark_skin_tone_medium_skin_tone:' => '👩🏾❤️💋👩🏽',
+ ':kiss_woman_woman_medium_light_skin_tone:' => '👩🏼❤️💋👩🏼',
+ ':kiss_woman_woman_medium_light_skin_tone_dark_skin_tone:' => '👩🏼❤️💋👩🏿',
+ ':kiss_woman_woman_medium_light_skin_tone_light_skin_tone:' => '👩🏼❤️💋👩🏻',
+ ':kiss_woman_woman_medium_light_skin_tone_medium_dark_skin_tone:' => '👩🏼❤️💋👩🏾',
+ ':kiss_woman_woman_medium_light_skin_tone_medium_skin_tone:' => '👩🏼❤️💋👩🏽',
+ ':kiss_woman_woman_medium_skin_tone:' => '👩🏽❤️💋👩🏽',
+ ':kiss_woman_woman_medium_skin_tone_dark_skin_tone:' => '👩🏽❤️💋👩🏿',
+ ':kiss_woman_woman_medium_skin_tone_light_skin_tone:' => '👩🏽❤️💋👩🏻',
+ ':kiss_woman_woman_medium_skin_tone_medium_dark_skin_tone:' => '👩🏽❤️💋👩🏾',
+ ':kiss_woman_woman_medium_skin_tone_medium_light_skin_tone:' => '👩🏽❤️💋👩🏼',
];
diff --git a/src/Symfony/Component/Emoji/Resources/data/text-emoji.php b/src/Symfony/Component/Emoji/Resources/data/text-emoji.php
index 0161bc4a5ff26..d41a28ea28d78 100644
--- a/src/Symfony/Component/Emoji/Resources/data/text-emoji.php
+++ b/src/Symfony/Component/Emoji/Resources/data/text-emoji.php
@@ -13,7 +13,6 @@
':accept:' => '🉑',
':accordion:' => '🪗',
':adhesive-bandage:' => '🩹',
- ':admission-tickets:' => '🎟️',
':adult:' => '🧑',
':aerial-tramway:' => '🚡',
':airplane-arriving:' => '🛬',
@@ -31,7 +30,6 @@
':ant:' => '🐜',
':apple:' => '🍎',
':aquarius:' => '♒',
- ':archery:' => '🏹',
':aries:' => '♈',
':arrow-double-down:' => '⏬',
':arrow-double-up:' => '⏫',
@@ -44,7 +42,6 @@
':astonished:' => '😲',
':athletic-shoe:' => '👟',
':atm:' => '🏧',
- ':atom-symbol:' => '⚛️',
':auto-rickshaw:' => '🛺',
':avocado:' => '🥑',
':axe:' => '🪓',
@@ -53,7 +50,6 @@
':baby-chick:' => '🐤',
':baby-symbol:' => '🚼',
':back:' => '🔙',
- ':back-of-hand:' => '🤚',
':bacon:' => '🥓',
':badger:' => '🦡',
':badminton-racquet-and-shuttlecock:' => '🏸',
@@ -62,7 +58,6 @@
':baguette-bread:' => '🥖',
':ballet-shoes:' => '🩰',
':balloon:' => '🎈',
- ':ballot-box-with-ballot:' => '🗳️',
':bamboo:' => '🎍',
':banana:' => '🍌',
':banjo:' => '🪕',
@@ -76,7 +71,6 @@
':bath:' => '🛀',
':bathtub:' => '🛁',
':battery:' => '🔋',
- ':beach-with-umbrella:' => '🏖️',
':beans:' => '🫘',
':bear:' => '🐻',
':bearded-person:' => '🧔',
@@ -88,14 +82,12 @@
':beginner:' => '🔰',
':bell:' => '🔔',
':bell-pepper:' => '🫑',
- ':bellhop-bell:' => '🛎️',
':bento:' => '🍱',
':beverage-box:' => '🧃',
':bicyclist:' => '🚴',
':bike:' => '🚲',
':bikini:' => '👙',
':billed-cap:' => '🧢',
- ':biohazard-sign:' => '☣️',
':bird:' => '🐦',
':birthday:' => '🎂',
':bison:' => '🦬',
@@ -124,14 +116,12 @@
':boom:' => '💥',
':boomerang:' => '🪃',
':boot:' => '👢',
- ':bottle-with-popping-cork:' => '🍾',
':bouquet:' => '💐',
':bow:' => '🙇',
':bow-and-arrow:' => '🏹',
':bowl-with-spoon:' => '🥣',
':bowling:' => '🎳',
':boxing-glove:' => '🥊',
- ':boxing-gloves:' => '🥊',
':boy:' => '👦',
':brain:' => '🧠',
':bread:' => '🍞',
@@ -149,7 +139,6 @@
':bubbles:' => '🫧',
':bucket:' => '🪣',
':bug:' => '🐛',
- ':building-construction:' => '🏗️',
':bulb:' => '💡',
':bullettrain-front:' => '🚅',
':bullettrain-side:' => '🚄',
@@ -175,9 +164,7 @@
':capital-abcd:' => '🔠',
':capricorn:' => '♑',
':car:' => '🚗',
- ':card-file-box:' => '🗃️',
':card-index:' => '📇',
- ':card-index-dividers:' => '🗂️',
':carousel-horse:' => '🎠',
':carpentry-saw:' => '🪚',
':carrot:' => '🥕',
@@ -208,7 +195,6 @@
':cl:' => '🆑',
':clap:' => '👏',
':clapper:' => '🎬',
- ':clinking-glass:' => '🥂',
':clinking-glasses:' => '🥂',
':clipboard:' => '📋',
':clock1:' => '🕐',
@@ -238,10 +224,6 @@
':closed-book:' => '📕',
':closed-lock-with-key:' => '🔐',
':closed-umbrella:' => '🌂',
- ':cloud-with-lightning:' => '🌩',
- ':cloud-with-rain:' => '🌧',
- ':cloud-with-snow:' => '🌨',
- ':cloud-with-tornado:' => '🌪',
':clown-face:' => '🤡',
':coat:' => '🧥',
':cockroach:' => '🪳',
@@ -266,7 +248,6 @@
':cop:' => '👮',
':coral:' => '🪸',
':corn:' => '🌽',
- ':couch-and-lamp:' => '🛋️',
':couple:' => '👫',
':couple-with-heart:' => '💑',
':couplekiss:' => '💏',
@@ -277,7 +258,6 @@
':crescent-moon:' => '🌙',
':cricket:' => '🦗',
':cricket-bat-and-ball:' => '🏏',
- ':cricket-bat-ball:' => '🏏',
':crocodile:' => '🐊',
':croissant:' => '🥐',
':crossed-fingers:' => '🤞',
@@ -299,7 +279,6 @@
':customs:' => '🛃',
':cut-of-meat:' => '🥩',
':cyclone:' => '🌀',
- ':dagger-knife:' => '🗡️',
':dancer:' => '💃',
':dancers:' => '👯',
':dango:' => '🍡',
@@ -310,9 +289,6 @@
':deciduous-tree:' => '🌳',
':deer:' => '🦌',
':department-store:' => '🏬',
- ':derelict-house-building:' => '🏚️',
- ':desert-island:' => '🏝️',
- ':desktop-computer:' => '🖥️',
':diamond-shape-with-a-dot-inside:' => '💠',
':disappointed:' => '😞',
':disappointed-relieved:' => '😥',
@@ -332,14 +308,11 @@
':donkey:' => '🫏',
':door:' => '🚪',
':dotted-line-face:' => '🫥',
- ':double-vertical-bar:' => '⏸️',
':doughnut:' => '🍩',
- ':dove-of-peace:' => '🕊️',
':dragon:' => '🐉',
':dragon-face:' => '🐲',
':dress:' => '👗',
':dromedary-camel:' => '🐪',
- ':drool:' => '🤤',
':drooling-face:' => '🤤',
':drop-of-blood:' => '🩸',
':droplet:' => '💧',
@@ -357,12 +330,10 @@
':earth-asia:' => '🌏',
':egg:' => '🥚',
':eggplant:' => '🍆',
- ':eject-symbol:' => '⏏',
':electric-plug:' => '🔌',
':elephant:' => '🐘',
':elevator:' => '🛗',
':elf:' => '🧝',
- ':email:' => '✉️',
':empty-nest:' => '🪹',
':end:' => '🔚',
':envelope-with-arrow:' => '📩',
@@ -371,7 +342,6 @@
':european-post-office:' => '🏤',
':evergreen-tree:' => '🌲',
':exclamation:' => '❗',
- ':expecting-woman:' => '🤰',
':exploding-head:' => '🤯',
':expressionless:' => '😑',
':eyeglasses:' => '👓',
@@ -393,7 +363,6 @@
':face-with-rolling-eyes:' => '🙄',
':face-with-symbols-on-mouth:' => '🤬',
':face-with-thermometer:' => '🤒',
- ':facepalm:' => '🤦',
':facepunch:' => '👊',
':factory:' => '🏭',
':fairy:' => '🧚',
@@ -406,11 +375,9 @@
':feather:' => '🪶',
':feet:' => '🐾',
':fencer:' => '🤺',
- ':fencing:' => '🤺',
':ferris-wheel:' => '🎡',
':field-hockey-stick-and-ball:' => '🏑',
':file-folder:' => '📁',
- ':film-projector:' => '📽️',
':fire:' => '🔥',
':fire-engine:' => '🚒',
':fire-extinguisher:' => '🧯',
@@ -424,7 +391,6 @@
':fishing-pole-and-fish:' => '🎣',
':fist:' => '✊',
':flags:' => '🎏',
- ':flame:' => '🔥',
':flamingo:' => '🦩',
':flashlight:' => '🔦',
':flatbread:' => '🫓',
@@ -443,12 +409,10 @@
':football:' => '🏈',
':footprints:' => '👣',
':fork-and-knife:' => '🍴',
- ':fork-and-knife-with-plate:' => '🍽',
':fortune-cookie:' => '🥠',
':fountain:' => '⛲',
':four-leaf-clover:' => '🍀',
':fox-face:' => '🦊',
- ':frame-with-picture:' => '🖼️',
':free:' => '🆓',
':fried-egg:' => '🍳',
':fried-shrimp:' => '🍤',
@@ -458,7 +422,6 @@
':fuelpump:' => '⛽',
':full-moon:' => '🌕',
':full-moon-with-face:' => '🌝',
- ':funeral-urn:' => '⚱️',
':game-die:' => '🎲',
':garlic:' => '🧄',
':gem:' => '💎',
@@ -479,7 +442,6 @@
':golf:' => '⛳',
':goose:' => '🪿',
':gorilla:' => '🦍',
- ':grandma:' => '👵',
':grapes:' => '🍇',
':green-apple:' => '🍏',
':green-book:' => '📗',
@@ -501,12 +463,9 @@
':haircut:' => '💇',
':hamburger:' => '🍔',
':hammer:' => '🔨',
- ':hammer-and-pick:' => '⚒️',
- ':hammer-and-wrench:' => '🛠️',
':hamsa:' => '🪬',
':hamster:' => '🐹',
':hand:' => '✋',
- ':hand-with-index-and-middle-finger-crossed:' => '🤞',
':hand-with-index-and-middle-fingers-crossed:' => '🤞',
':hand-with-index-finger-and-thumb-crossed:' => '🫰',
':handbag:' => '👜',
@@ -528,12 +487,10 @@
':heavy-dollar-sign:' => '💲',
':heavy-equals-sign:' => '🟰',
':heavy-exclamation-mark:' => '❗',
- ':heavy-heart-exclamation-mark-ornament:' => '❣️',
':heavy-minus-sign:' => '➖',
':heavy-plus-sign:' => '➕',
':hedgehog:' => '🦔',
':helicopter:' => '🚁',
- ':helmet-with-white-cross:' => '⛑️',
':herb:' => '🌿',
':hibiscus:' => '🌺',
':high-brightness:' => '🔆',
@@ -548,14 +505,12 @@
':horse:' => '🐴',
':horse-racing:' => '🏇',
':hospital:' => '🏥',
- ':hot-dog:' => '🌭',
':hot-face:' => '🥵',
':hotdog:' => '🌭',
':hotel:' => '🏨',
':hourglass:' => '⌛',
':hourglass-flowing-sand:' => '⏳',
':house:' => '🏠',
- ':house-buildings:' => '🏘️',
':house-with-garden:' => '🏡',
':hugging-face:' => '🤗',
':hushed:' => '😯',
@@ -588,12 +543,9 @@
':jigsaw:' => '🧩',
':joy:' => '😂',
':joy-cat:' => '😹',
- ':juggler:' => '🤹',
':juggling:' => '🤹',
':kaaba:' => '🕋',
':kangaroo:' => '🦘',
- ':karate-uniform:' => '🥋',
- ':kayak:' => '🛶',
':key:' => '🔑',
':keycap-ten:' => '🔟',
':khanda:' => '🪯',
@@ -634,28 +586,22 @@
':large-yellow-square:' => '🟨',
':last-quarter-moon:' => '🌗',
':last-quarter-moon-with-face:' => '🌜',
- ':latin-cross:' => '✝️',
':laughing:' => '😆',
':leafy-green:' => '🥬',
':leaves:' => '🍃',
':ledger:' => '📒',
':left-facing-fist:' => '🤛',
- ':left-fist:' => '🤛',
':left-luggage:' => '🛅',
- ':left-speech-bubble:' => '🗨️',
':leftwards-hand:' => '🫲',
':leftwards-pushing-hand:' => '🫷',
':leg:' => '🦵',
':lemon:' => '🍋',
':leo:' => '♌',
':leopard:' => '🐆',
- ':liar:' => '🤥',
':libra:' => '♎',
':light-blue-heart:' => '🩵',
':light-rail:' => '🚈',
':link:' => '🔗',
- ':linked-paperclips:' => '🖇️',
- ':lion:' => '🦁',
':lion-face:' => '🦁',
':lips:' => '👄',
':lipstick:' => '💄',
@@ -675,10 +621,6 @@
':love-letter:' => '💌',
':low-battery:' => '🪫',
':low-brightness:' => '🔅',
- ':lower-left-ballpoint-pen:' => '🖊️',
- ':lower-left-crayon:' => '🖍️',
- ':lower-left-fountain-pen:' => '🖋️',
- ':lower-left-paintbrush:' => '🖌️',
':luggage:' => '🧳',
':lungs:' => '🫁',
':lying-face:' => '🤥',
@@ -692,17 +634,14 @@
':mailbox-closed:' => '📪',
':mailbox-with-mail:' => '📬',
':mailbox-with-no-mail:' => '📭',
- ':male-dancer:' => '🕺',
':mammoth:' => '🦣',
':man:' => '👨',
':man-and-woman-holding-hands:' => '👫',
':man-dancing:' => '🕺',
- ':man-in-business-suit-levitating:' => '🕴️',
':man-with-gua-pi-mao:' => '👲',
':man-with-turban:' => '👳♂',
':mango:' => '🥭',
':mans-shoe:' => '👞',
- ':mantlepiece-clock:' => '🕰',
':manual-wheelchair:' => '🦽',
':maple-leaf:' => '🍁',
':maracas:' => '🪇',
@@ -747,7 +686,6 @@
':mosquito:' => '🦟',
':mother-christmas:' => '🤶',
':motor-scooter:' => '🛵',
- ':motorbike:' => '🛵',
':motorized-wheelchair:' => '🦼',
':mount-fuji:' => '🗻',
':mountain-bicyclist:' => '🚵',
@@ -767,7 +705,6 @@
':mute:' => '🔇',
':nail-care:' => '💅',
':name-badge:' => '📛',
- ':national-park:' => '🏞️',
':nauseated-face:' => '🤢',
':nazar-amulet:' => '🧿',
':necktie:' => '👔',
@@ -780,7 +717,6 @@
':new-moon:' => '🌑',
':new-moon-with-face:' => '🌚',
':newspaper:' => '📰',
- ':next-track:' => '⏭',
':ng:' => '🆖',
':night-with-stars:' => '🌃',
':ninja:' => '🥷',
@@ -805,11 +741,9 @@
':octopus:' => '🐙',
':oden:' => '🍢',
':office:' => '🏢',
- ':oil-drum:' => '🛢️',
':ok:' => '🆗',
':ok-hand:' => '👌',
':ok-woman:' => '🙆♀',
- ':old-key:' => '🗝️',
':older-adult:' => '🧓',
':older-man:' => '👴',
':older-woman:' => '👵',
@@ -835,7 +769,6 @@
':ox:' => '🐂',
':oyster:' => '🦪',
':package:' => '📦',
- ':paella:' => '🥘',
':page-facing-up:' => '📄',
':page-with-curl:' => '📃',
':pager:' => '📟',
@@ -850,11 +783,9 @@
':parrot:' => '🦜',
':partly-sunny:' => '⛅',
':partying-face:' => '🥳',
- ':passenger-ship:' => '🛳️',
':passport-control:' => '🛂',
':paw-prints:' => '🐾',
':pea-pod:' => '🫛',
- ':peace-symbol:' => '☮️',
':peach:' => '🍑',
':peacock:' => '🦚',
':peanuts:' => '🥜',
@@ -871,7 +802,6 @@
':person-in-lotus-position:' => '🧘',
':person-in-steamy-room:' => '🧖',
':person-in-tuxedo:' => '🤵',
- ':person-with-ball:' => '⛹️',
':person-with-blond-hair:' => '👱',
':person-with-crown:' => '🫅',
':person-with-headscarf:' => '🧕',
@@ -900,7 +830,6 @@
':point-right:' => '👉',
':point-up-2:' => '👆',
':police-car:' => '🚓',
- ':poo:' => '💩',
':poodle:' => '🐩',
':poop:' => '💩',
':popcorn:' => '🍿',
@@ -921,7 +850,6 @@
':pregnant-person:' => '🫄',
':pregnant-woman:' => '🤰',
':pretzel:' => '🥨',
- ':previous-track:' => '⏮',
':prince:' => '🤴',
':princess:' => '👸',
':probing-cane:' => '🦯',
@@ -935,19 +863,13 @@
':rabbit2:' => '🐇',
':raccoon:' => '🦝',
':racehorse:' => '🐎',
- ':racing-car:' => '🏎️',
- ':racing-motorcycle:' => '🏍️',
':radio:' => '📻',
':radio-button:' => '🔘',
- ':radioactive-sign:' => '☢️',
':rage:' => '😡',
- ':railroad-track:' => '🛤',
':railway-car:' => '🚃',
':rainbow:' => '🌈',
':raised-back-of-hand:' => '🤚',
':raised-hand:' => '✋',
- ':raised-hand-with-fingers-splayed:' => '🖐️',
- ':raised-hand-with-part-between-middle-and-ring-fingers:' => '🖖',
':raised-hands:' => '🙌',
':raising-hand:' => '🙋',
':ram:' => '🐏',
@@ -971,9 +893,7 @@
':rice-ball:' => '🍙',
':rice-cracker:' => '🍘',
':rice-scene:' => '🎑',
- ':right-anger-bubble:' => '🗯️',
':right-facing-fist:' => '🤜',
- ':right-fist:' => '🤜',
':rightwards-hand:' => '🫱',
':rightwards-pushing-hand:' => '🫸',
':ring:' => '💍',
@@ -983,7 +903,6 @@
':rock:' => '🪨',
':rocket:' => '🚀',
':roll-of-paper:' => '🧻',
- ':rolled-up-newspaper:' => '🗞️',
':roller-coaster:' => '🎢',
':roller-skate:' => '🛼',
':rolling-on-the-floor-laughing:' => '🤣',
@@ -1030,13 +949,11 @@
':serious-face-with-symbols-covering-mouth:' => '🤬',
':sewing-needle:' => '🪡',
':shaking-face:' => '🫨',
- ':shaking-hands:' => '🤝',
':shallow-pan-of-food:' => '🥘',
':shark:' => '🦈',
':shaved-ice:' => '🍧',
':sheep:' => '🐑',
':shell:' => '🐚',
- ':shelled-peanut:' => '🥜',
':ship:' => '🚢',
':shirt:' => '👕',
':shit:' => '💩',
@@ -1048,12 +965,10 @@
':shrimp:' => '🦐',
':shrug:' => '🤷',
':shushing-face:' => '🤫',
- ':sick:' => '🤢',
':sign-of-the-horns:' => '🤘',
':signal-strength:' => '📶',
':six-pointed-star:' => '🔯',
':skateboard:' => '🛹',
- ':skeleton:' => '💀',
':ski:' => '🎿',
':skin-tone-2:' => '🏻',
':skin-tone-3:' => '🏼',
@@ -1061,18 +976,15 @@
':skin-tone-5:' => '🏾',
':skin-tone-6:' => '🏿',
':skull:' => '💀',
- ':skull-and-crossbones:' => '☠️',
':skunk:' => '🦨',
':sled:' => '🛷',
':sleeping:' => '😴',
':sleeping-accommodation:' => '🛌',
':sleepy:' => '😪',
- ':sleuth-or-spy:' => '🕵️',
':slightly-frowning-face:' => '🙁',
':slightly-smiling-face:' => '🙂',
':slot-machine:' => '🎰',
':sloth:' => '🦥',
- ':small-airplane:' => '🛩️',
':small-blue-diamond:' => '🔹',
':small-orange-diamond:' => '🔸',
':small-red-triangle:' => '🔺',
@@ -1090,9 +1002,7 @@
':smoking:' => '🚬',
':snail:' => '🐌',
':snake:' => '🐍',
- ':sneeze:' => '🤧',
':sneezing-face:' => '🤧',
- ':snow-capped-mountain:' => '🏔️',
':snowboarder:' => '🏂',
':snowman-without-snow:' => '⛄',
':soap:' => '🧼',
@@ -1110,11 +1020,8 @@
':sparkling-heart:' => '💖',
':speak-no-evil:' => '🙊',
':speaker:' => '🔈',
- ':speaking-head-in-silhouette:' => '🗣️',
':speech-balloon:' => '💬',
':speedboat:' => '🚤',
- ':spiral-calendar-pad:' => '🗓️',
- ':spiral-note-pad:' => '🗒️',
':spock-hand:' => '🖖',
':sponge:' => '🧽',
':spoon:' => '🥄',
@@ -1130,15 +1037,12 @@
':steam-locomotive:' => '🚂',
':stethoscope:' => '🩺',
':stew:' => '🍲',
- ':stop-sign:' => '🛑',
':straight-ruler:' => '📏',
':strawberry:' => '🍓',
':stuck-out-tongue:' => '😛',
':stuck-out-tongue-closed-eyes:' => '😝',
':stuck-out-tongue-winking-eye:' => '😜',
- ':studio-microphone:' => '🎙️',
':stuffed-flatbread:' => '🥙',
- ':stuffed-pita:' => '🥙',
':sun-with-face:' => '🌞',
':sunflower:' => '🌻',
':sunglasses:' => '😎',
@@ -1159,7 +1063,6 @@
':synagogue:' => '🕍',
':syringe:' => '💉',
':t-rex:' => '🦖',
- ':table-tennis:' => '🏓',
':table-tennis-paddle-and-ball:' => '🏓',
':taco:' => '🌮',
':tada:' => '🎉',
@@ -1183,14 +1086,11 @@
':thong-sandal:' => '🩴',
':thought-balloon:' => '💭',
':thread:' => '🧵',
- ':three-button-mouse:' => '🖱️',
':thumbsdown:' => '👎',
':thumbsup:' => '👍',
- ':thunder-cloud-and-rain:' => '⛈️',
':ticket:' => '🎫',
':tiger:' => '🐯',
':tiger2:' => '🐅',
- ':timer-clock:' => '⏲️',
':tired-face:' => '😫',
':toilet:' => '🚽',
':tokyo-tower:' => '🗼',
@@ -1237,7 +1137,6 @@
':u7121:' => '🈚',
':u7533:' => '🈸',
':u7981:' => '🈲',
- ':umbrella-on-ground:' => '⛱️',
':umbrella-with-rain-drops:' => '☔',
':unamused:' => '😒',
':underage:' => '🔞',
@@ -1266,29 +1165,22 @@
':watermelon:' => '🍉',
':wave:' => '👋',
':waving-black-flag:' => '🏴',
- ':waving-white-flag:' => '🏳️',
':waxing-crescent-moon:' => '🌒',
':waxing-gibbous-moon:' => '🌔',
':wc:' => '🚾',
':weary:' => '😩',
':wedding:' => '💒',
- ':weight-lifter:' => '🏋️',
':whale:' => '🐳',
':whale2:' => '🐋',
':wheel:' => '🛞',
':wheelchair:' => '♿',
- ':whisky:' => '🥃',
':white-check-mark:' => '✅',
':white-circle:' => '⚪',
':white-flower:' => '💮',
- ':white-frowning-face:' => '☹️',
':white-heart:' => '🤍',
':white-large-square:' => '⬜',
':white-medium-small-square:' => '◽',
':white-square-button:' => '🔳',
- ':white-sun-behind-cloud:' => '🌥',
- ':white-sun-behind-cloud-with-rain:' => '🌦',
- ':white-sun-with-small-cloud:' => '🌤',
':wilted-flower:' => '🥀',
':wind-chime:' => '🎐',
':window:' => '🪟',
@@ -1306,13 +1198,10 @@
':womens:' => '🚺',
':wood:' => '🪵',
':woozy-face:' => '🥴',
- ':world-map:' => '🗺️',
':worm:' => '🪱',
':worried:' => '😟',
- ':worship-symbol:' => '🛐',
':wrench:' => '🔧',
':wrestlers:' => '🤼',
- ':wrestling:' => '🤼',
':x:' => '❌',
':x-ray:' => '🩻',
':yarn:' => '🧶',
@@ -1332,9 +1221,7 @@
':3rd-place-medal:' => '🥉',
':a:' => '🅰️',
':airplane:' => '✈️',
- ':airplane-small:' => '🛩',
':alembic:' => '⚗️',
- ':anger-right:' => '🗯',
':arrow-backward:' => '◀️',
':arrow-down:' => '⬇️',
':arrow-forward:' => '▶️',
@@ -1350,19 +1237,18 @@
':arrow-upper-left:' => '↖️',
':arrow-upper-right:' => '↗️',
':artificial-satellite:' => '🛰',
- ':atom:' => '⚛',
+ ':atom-symbol:' => '⚛️',
':b:' => '🅱️',
':badminton:' => '🏸',
':balance-scale:' => '⚖',
- ':ballot-box:' => '🗳',
+ ':bald:' => '🦲',
+ ':ballot-box:' => '🗳️',
':ballot-box-with-check:' => '☑️',
':bangbang:' => '‼️',
- ':basketball-player:' => '⛹',
- ':beach:' => '🏖',
- ':beach-umbrella:' => '🏖',
+ ':beach-umbrella:' => '⛱️',
':bed:' => '🛏️',
- ':bellhop:' => '🛎',
- ':biohazard:' => '☣',
+ ':bellhop-bell:' => '🛎️',
+ ':biohazard:' => '☣️',
':black-flag:' => '🏴',
':black-medium-square:' => '◼️',
':black-nib:' => '✒️',
@@ -1370,15 +1256,17 @@
':blond-haired-person:' => '👱',
':blue-square:' => '🟦',
':bouncing-ball-person:' => '⛹',
+ ':brick:' => '🧱',
':brown-circle:' => '🟤',
':brown-square:' => '🟫',
+ ':building-construction:' => '🏗️',
':business-suit-levitating:' => '🕴',
- ':calendar-spiral:' => '🗓',
':call-me:' => '🤙',
':camera-flash:' => '📸',
':camping:' => '🏕️',
':candle:' => '🕯️',
- ':card-box:' => '🗃',
+ ':card-file-box:' => '🗃️',
+ ':card-index-dividers:' => '🗂️',
':cartwheel:' => '🤸',
':cartwheeling:' => '🤸',
':chains:' => '⛓️',
@@ -1391,53 +1279,49 @@
':clamp:' => '🗜',
':classical-building:' => '🏛️',
':climbing:' => '🧗',
- ':clock:' => '🕰',
':cloud:' => '☁️',
- ':cloud-lightning:' => '🌩',
- ':cloud-rain:' => '🌧',
- ':cloud-snow:' => '🌨',
- ':cloud-tornado:' => '🌪',
+ ':cloud-with-lightning:' => '🌩',
':cloud-with-lightning-and-rain:' => '⛈',
+ ':cloud-with-rain:' => '🌧',
+ ':cloud-with-snow:' => '🌨',
':clown:' => '🤡',
':clubs:' => '♣️',
':coffin:' => '⚰️',
':comet:' => '☄️',
- ':compression:' => '🗜️',
':computer-mouse:' => '🖱',
':congratulations:' => '㊗️',
- ':construction-site:' => '🏗',
':control-knobs:' => '🎛️',
':copyright:' => '©️',
- ':couch:' => '🛋',
+ ':couch-and-lamp:' => '🛋️',
':cowboy:' => '🤠',
':cowboy-hat-face:' => '🤠',
- ':crayon:' => '🖍',
+ ':crayon:' => '🖍️',
':cricket-game:' => '🏏',
- ':cross:' => '✝',
':crossed-swords:' => '⚔️',
- ':cruise-ship:' => '🛳',
+ ':curly-hair:' => '🦱',
':cursing-face:' => '🤬',
- ':dagger:' => '🗡',
+ ':dagger:' => '🗡️',
':dark-sunglasses:' => '🕶️',
':derelict-house:' => '🏚',
':desert:' => '🏜️',
- ':desktop:' => '🖥',
+ ':desert-island:' => '🏝️',
+ ':desktop-computer:' => '🖥️',
':detective:' => '🕵',
':diamonds:' => '♦️',
- ':dividers:' => '🗂',
- ':dove:' => '🕊',
+ ':dove:' => '🕊️',
':drum:' => '🥁',
':eight-pointed-black-star:' => '✴️',
':eight-spoked-asterisk:' => '✳️',
- ':eject:' => '⏏️',
':eject-button:' => '⏏',
+ ':email:' => '✉️',
':envelope:' => '✉️',
':eye:' => '👁️',
+ ':facepalm:' => '🤦',
':female-sign:' => '♀️',
':ferry:' => '⛴️',
':field-hockey:' => '🏑',
':file-cabinet:' => '🗄️',
- ':film-frames:' => '🎞️',
+ ':film-projector:' => '📽️',
':film-strip:' => '🎞',
':fingers-crossed:' => '🤞',
':first-place:' => '🥇',
@@ -1446,78 +1330,68 @@
':fist-raised:' => '✊',
':fist-right:' => '🤜',
':flag-black:' => '🏴',
- ':flag-white:' => '🏳',
':flat-shoe:' => '🥿',
':fleur-de-lis:' => '⚜️',
':flight-arrival:' => '🛬',
':flight-departure:' => '🛫',
':fog:' => '🌫️',
- ':fork-knife-plate:' => '🍽',
':fountain-pen:' => '🖋',
':fox:' => '🦊',
- ':frame-photo:' => '🖼',
':framed-picture:' => '🖼',
':french-bread:' => '🥖',
':frowning-face:' => '☹',
':frowning-person:' => '🙍',
- ':frowning2:' => '☹',
':fu:' => '🖕',
+ ':funeral-urn:' => '⚱️',
':gear:' => '⚙️',
':giraffe:' => '🦒',
':goal:' => '🥅',
- ':golfer:' => '🏌️',
':golfing:' => '🏌',
':green-circle:' => '🟢',
':green-square:' => '🟩',
':guard:' => '💂',
- ':hammer-pick:' => '⚒',
+ ':hammer-and-pick:' => '⚒️',
+ ':hammer-and-wrench:' => '🛠️',
':hand-over-mouth:' => '🤭',
- ':hand-splayed:' => '🖐',
':handball-person:' => '🤾',
':head-bandage:' => '🤕',
':heart:' => '❤️',
- ':heart-exclamation:' => '❣',
':hearts:' => '♥️',
':heavy-check-mark:' => '✔️',
':heavy-heart-exclamation:' => '❣',
':heavy-multiplication-x:' => '✖️',
- ':helmet-with-cross:' => '⛑',
':hockey:' => '🏒',
':hole:' => '🕳️',
- ':homes:' => '🏘',
':hot-pepper:' => '🌶️',
':hotsprings:' => '♨️',
- ':house-abandoned:' => '🏚',
':houses:' => '🏘',
':hugging:' => '🤗',
':hugs:' => '🤗',
+ ':ice:' => '🧊',
':ice-hockey:' => '🏒',
':ice-skate:' => '⛸️',
':infinity:' => '♾️',
':information-source:' => 'ℹ️',
':interrobang:' => '⁉️',
- ':island:' => '🏝',
':joystick:' => '🕹️',
':juggling-person:' => '🤹',
- ':key2:' => '🗝',
':keyboard:' => '⌨️',
':kick-scooter:' => '🛴',
':kiwi:' => '🥝',
':kiwi-fruit:' => '🥝',
':label:' => '🏷️',
+ ':latin-cross:' => '✝️',
':left-right-arrow:' => '↔️',
+ ':left-speech-bubble:' => '🗨️',
':leftwards-arrow-with-hook:' => '↩️',
':level-slider:' => '🎚️',
- ':levitate:' => '🕴',
- ':lifter:' => '🏋',
+ ':lion:' => '🦁',
':lotus-position:' => '🧘',
':love-you-gesture:' => '🤟',
':m:' => 'Ⓜ️',
':male-sign:' => '♂️',
- ':man-in-tuxedo:' => '🤵♂️',
':mandarin:' => '🍊',
':mantelpiece-clock:' => '🕰️',
- ':map:' => '🗺',
':mate:' => '🧉',
':medal:' => '🎖️',
':medal-military:' => '🎖',
@@ -1525,47 +1399,45 @@
':medical-symbol:' => '⚕️',
':menorah:' => '🕎',
':metal:' => '🤘',
- ':microphone2:' => '🎙',
- ':military-medal:' => '🎖',
':milk:' => '🥛',
':milk-glass:' => '🥛',
':money-mouth:' => '🤑',
':monocle-face:' => '🧐',
':motor-boat:' => '🛥️',
- ':motorboat:' => '🛥',
- ':motorcycle:' => '🏍',
+ ':motorcycle:' => '🏍️',
':motorway:' => '🛣️',
':mountain:' => '⛰️',
- ':mountain-snow:' => '🏔',
- ':mouse-three-button:' => '🖱',
+ ':mountain-snow:' => '🏔️',
+ ':national-park:' => '🏞️',
':nerd:' => '🤓',
':newspaper-roll:' => '🗞',
- ':newspaper2:' => '🗞',
':next-track-button:' => '⏭',
- ':notepad-spiral:' => '🗒',
':o2:' => '🅾️',
- ':oil:' => '🛢',
+ ':oil-drum:' => '🛢️',
':ok-person:' => '🙆',
- ':om:' => '🇴🇲',
- ':om-symbol:' => '🕉️',
+ ':old-key:' => '🗝️',
+ ':older-person:' => '🧓',
+ ':om:' => '🕉',
':open-umbrella:' => '☂',
':orange:' => '🍊',
':orange-circle:' => '🟠',
':orange-square:' => '🟧',
':orthodox-cross:' => '☦️',
- ':paintbrush:' => '🖌',
- ':paperclips:' => '🖇',
+ ':paintbrush:' => '🖌️',
+ ':paperclips:' => '🖇️',
':parasol-on-ground:' => '⛱',
- ':park:' => '🏞',
':parking:' => '🅿️',
':part-alternation-mark:' => '〽️',
- ':pause-button:' => '⏸',
- ':peace:' => '☮',
+ ':passenger-ship:' => '🛳️',
+ ':pause-button:' => '⏸️',
+ ':peace-symbol:' => '☮️',
':pen:' => '🖊',
- ':pen-ballpoint:' => '🖊',
- ':pen-fountain:' => '🖋',
':pencil2:' => '✏️',
+ ':person:' => '🧑',
+ ':person-beard:' => '🧔',
':person-fencing:' => '🤺',
+ ':person-kneeling:' => '🧎',
+ ':person-standing:' => '🧍',
':person-with-turban:' => '👳',
':person-with-veil:' => '👰',
':phone:' => '☎️',
@@ -1573,28 +1445,30 @@
':ping-pong:' => '🏓',
':plate-with-cutlery:' => '🍽',
':play-or-pause-button:' => '⏯',
- ':play-pause:' => '⏯',
':point-up:' => '☝️',
':police-officer:' => '👮',
':pout:' => '😡',
':pouting-face:' => '🙎',
':previous-track-button:' => '⏮',
':printer:' => '🖨️',
- ':projector:' => '📽',
':purple-circle:' => '🟣',
':purple-square:' => '🟪',
- ':race-car:' => '🏎',
- ':radioactive:' => '☢',
+ ':puzzle-piece:' => '🧩',
+ ':racing-car:' => '🏎️',
+ ':radioactive:' => '☢️',
':railway-track:' => '🛤️',
':raised-eyebrow:' => '🤨',
- ':record-button:' => '⏺',
+ ':raised-hand-with-fingers-splayed:' => '🖐️',
+ ':record-button:' => '⏺️',
':recycle:' => '♻️',
+ ':red-hair:' => '🦰',
':red-square:' => '🟥',
':registered:' => '®️',
':relaxed:' => '☺️',
':reminder-ribbon:' => '🎗️',
':rescue-worker-helmet:' => '⛑',
':rhino:' => '🦏',
+ ':right-anger-bubble:' => '🗯️',
':robot:' => '🤖',
':rofl:' => '🤣',
':roll-eyes:' => '🙄',
@@ -1603,9 +1477,7 @@
':sa:' => '🈂️',
':salad:' => '🥗',
':satellite:' => '🛰️',
- ':satellite-orbital:' => '🛰',
':sauna-person:' => '🧖',
- ':scales:' => '⚖️',
':scissors:' => '✂️',
':second-place:' => '🥈',
':secret:' => '㊙️',
@@ -1613,32 +1485,32 @@
':shield:' => '🛡️',
':shinto-shrine:' => '⛩️',
':shopping:' => '🛍',
- ':shopping-bags:' => '🛍️',
':shopping-cart:' => '🛒',
':skier:' => '⛷️',
- ':skull-crossbones:' => '☠',
+ ':skull-and-crossbones:' => '☠️',
':sleeping-bed:' => '🛌',
':slight-frown:' => '🙁',
':slight-smile:' => '🙂',
+ ':small-airplane:' => '🛩️',
+ ':smiling-face-with-hearts:' => '🥰',
':smiling-face-with-three-hearts:' => '🥰',
':snowflake:' => '❄️',
':snowman:' => '☃️',
':snowman-with-snow:' => '☃',
- ':snowman2:' => '☃',
':spades:' => '♠️',
':sparkle:' => '❇️',
- ':speaking-head:' => '🗣',
- ':speech-left:' => '🗨',
+ ':speaking-head:' => '🗣️',
':spider:' => '🕷️',
':spider-web:' => '🕸️',
':spiral-calendar:' => '🗓',
':spiral-notepad:' => '🗒',
- ':spy:' => '🕵',
':stadium:' => '🏟️',
':star-and-crescent:' => '☪️',
':star-of-david:' => '✡️',
- ':stop-button:' => '⏹',
+ ':stop-button:' => '⏹️',
+ ':stop-sign:' => '🛑',
':stopwatch:' => '⏱️',
+ ':studio-microphone:' => '🎙️',
':sun-behind-large-cloud:' => '🌥',
':sun-behind-rain-cloud:' => '🌦️',
':sun-behind-small-cloud:' => '🌤',
@@ -1650,9 +1522,8 @@
':thermometer-face:' => '🤒',
':thinking:' => '🤔',
':third-place:' => '🥉',
- ':thunder-cloud-rain:' => '⛈',
- ':tickets:' => '🎟',
- ':timer:' => '⏲',
+ ':tickets:' => '🎟️',
+ ':timer-clock:' => '⏲️',
':tipping-hand-person:' => '💁',
':tm:' => '™️',
':tone1:' => '🏻',
@@ -1660,18 +1531,13 @@
':tone3:' => '🏽',
':tone4:' => '🏾',
':tone5:' => '🏿',
- ':tools:' => '🛠',
':tornado:' => '🌪️',
- ':track-next:' => '⏭',
- ':track-previous:' => '⏮',
':trackball:' => '🖲️',
':transgender-symbol:' => '⚧️',
':u6708:' => '🈷️',
':umbrella:' => '☂️',
- ':umbrella2:' => '☂',
':unicorn:' => '🦄',
':upside-down:' => '🙃',
- ':urn:' => '⚱',
':v:' => '✌️',
':vomiting-face:' => '🤮',
':vulcan:' => '🖖',
@@ -1681,136 +1547,43 @@
':wavy-dash:' => '〰️',
':weight-lifting:' => '🏋',
':wheel-of-dharma:' => '☸️',
+ ':white-cane:' => '🦯',
':white-flag:' => '🏳',
+ ':white-hair:' => '🦳',
':white-medium-square:' => '◻️',
':white-small-square:' => '▫️',
- ':white-sun-cloud:' => '🌥',
- ':white-sun-rain-cloud:' => '🌦',
- ':white-sun-small-cloud:' => '🌤',
':wilted-rose:' => '🥀',
- ':wind-blowing-face:' => '🌬️',
':wind-face:' => '🌬',
':woman-dancing:' => '💃',
':woman-with-headscarf:' => '🧕',
+ ':world-map:' => '🗺️',
+ ':wrestling:' => '🤼',
':writing-hand:' => '✍️',
':yellow-circle:' => '🟡',
':yellow-square:' => '🟨',
':yin-yang:' => '☯️',
':zebra:' => '🦓',
':zipper-mouth:' => '🤐',
- ':+1-tone1:' => '👍🏻',
- ':+1-tone2:' => '👍🏼',
- ':+1-tone3:' => '👍🏽',
- ':+1-tone4:' => '👍🏾',
- ':+1-tone5:' => '👍🏿',
- ':-1-tone1:' => '👎🏻',
- ':-1-tone2:' => '👎🏼',
- ':-1-tone3:' => '👎🏽',
- ':-1-tone4:' => '👎🏾',
- ':-1-tone5:' => '👎🏿',
- ':ac:' => '🇦🇨',
- ':ad:' => '🇦🇩',
- ':ae:' => '🇦🇪',
- ':af:' => '🇦🇫',
- ':ag:' => '🇦🇬',
- ':ai:' => '🇦🇮',
- ':al:' => '🇦🇱',
- ':am:' => '🇦🇲',
- ':ao:' => '🇦🇴',
- ':aq:' => '🇦🇶',
- ':ar:' => '🇦🇷',
- ':as:' => '🇦🇸',
- ':at:' => '🇦🇹',
- ':au:' => '🇦🇺',
- ':aw:' => '🇦🇼',
- ':ax:' => '🇦🇽',
- ':az:' => '🇦🇿',
- ':ba:' => '🇧🇦',
- ':back-of-hand-tone1:' => '🤚🏻',
- ':back-of-hand-tone2:' => '🤚🏼',
- ':back-of-hand-tone3:' => '🤚🏽',
- ':back-of-hand-tone4:' => '🤚🏾',
- ':back-of-hand-tone5:' => '🤚🏿',
+ ':admission-tickets:' => '🎟️',
+ ':ballot-box-with-ballot:' => '🗳️',
':barely-sunny:' => '🌥️',
- ':bb:' => '🇧🇧',
- ':bd:' => '🇧🇩',
- ':be:' => '🇧🇪',
- ':bf:' => '🇧🇫',
- ':bg:' => '🇧🇬',
- ':bh:' => '🇧🇭',
- ':bi:' => '🇧🇮',
- ':bj:' => '🇧🇯',
- ':bl:' => '🇧🇱',
+ ':beach-with-umbrella:' => '🏖️',
+ ':biohazard-sign:' => '☣️',
':black-circle-for-record:' => '⏺️',
':black-left-pointing-double-triangle-with-vertical-bar:' => '⏮️',
':black-right-pointing-double-triangle-with-vertical-bar:' => '⏭️',
':black-right-pointing-triangle-with-double-vertical-bar:' => '⏯️',
':black-square-for-stop:' => '⏹️',
- ':bm:' => '🇧🇲',
- ':bn:' => '🇧🇳',
- ':bo:' => '🇧🇴',
- ':bq:' => '🇧🇶',
- ':br:' => '🇧🇷',
- ':bs:' => '🇧🇸',
- ':bt:' => '🇧🇹',
- ':bv:' => '🇧🇻',
- ':bw:' => '🇧🇼',
- ':by:' => '🇧🇾',
- ':bz:' => '🇧🇿',
- ':ca:' => '🇨🇦',
- ':call-me-hand-tone1:' => '🤙🏻',
- ':call-me-hand-tone2:' => '🤙🏼',
- ':call-me-hand-tone3:' => '🤙🏽',
- ':call-me-hand-tone4:' => '🤙🏾',
- ':call-me-hand-tone5:' => '🤙🏿',
- ':cc:' => '🇨🇨',
- ':cf:' => '🇨🇫',
- ':cg:' => '🇨🇬',
- ':ch:' => '🇨🇭',
- ':chile:' => '🇨🇱',
- ':ci:' => '🇨🇮',
- ':ck:' => '🇨🇰',
- ':cm:' => '🇨🇲',
':cn:' => '🇨🇳',
- ':co:' => '🇨🇴',
- ':congo:' => '🇨🇩',
- ':cp:' => '🇨🇵',
- ':cr:' => '🇨🇷',
- ':cu:' => '🇨🇺',
- ':cv:' => '🇨🇻',
- ':cw:' => '🇨🇼',
- ':cx:' => '🇨🇽',
- ':cy:' => '🇨🇾',
- ':cz:' => '🇨🇿',
+ ':compression:' => '🗜️',
+ ':dagger-knife:' => '🗡️',
':de:' => '🇩🇪',
- ':dg:' => '🇩🇬',
- ':dj:' => '🇩🇯',
- ':dk:' => '🇩🇰',
- ':dm:' => '🇩🇲',
- ':do:' => '🇩🇴',
- ':dz:' => '🇩🇿',
- ':ea:' => '🇪🇦',
- ':ec:' => '🇪🇨',
- ':ee:' => '🇪🇪',
- ':eg:' => '🇪🇬',
- ':eh:' => '🇪🇭',
- ':er:' => '🇪🇷',
+ ':derelict-house-building:' => '🏚️',
+ ':double-vertical-bar:' => '⏸️',
+ ':dove-of-peace:' => '🕊️',
+ ':eject:' => '⏏️',
':es:' => '🇪🇸',
- ':et:' => '🇪🇹',
- ':eu:' => '🇪🇺',
- ':expecting-woman-tone1:' => '🤰🏻',
- ':expecting-woman-tone2:' => '🤰🏼',
- ':expecting-woman-tone3:' => '🤰🏽',
- ':expecting-woman-tone4:' => '🤰🏾',
- ':expecting-woman-tone5:' => '🤰🏿',
- ':facepalm-tone1:' => '🤦🏻',
- ':facepalm-tone2:' => '🤦🏼',
- ':facepalm-tone3:' => '🤦🏽',
- ':facepalm-tone4:' => '🤦🏾',
- ':facepalm-tone5:' => '🤦🏿',
- ':fi:' => '🇫🇮',
- ':fj:' => '🇫🇯',
- ':fk:' => '🇫🇰',
+ ':film-frames:' => '🎞️',
':flag-ac:' => '🇦🇨',
':flag-ad:' => '🇦🇩',
':flag-ae:' => '🇦🇪',
@@ -2069,291 +1842,57 @@
':flag-za:' => '🇿🇦',
':flag-zm:' => '🇿🇲',
':flag-zw:' => '🇿🇼',
- ':fm:' => '🇫🇲',
- ':fo:' => '🇫🇴',
':fr:' => '🇫🇷',
- ':ga:' => '🇬🇦',
+ ':frame-with-picture:' => '🖼️',
':gb:' => '🇬🇧',
- ':gd:' => '🇬🇩',
- ':ge:' => '🇬🇪',
- ':gf:' => '🇬🇫',
- ':gg:' => '🇬🇬',
- ':gh:' => '🇬🇭',
- ':gi:' => '🇬🇮',
- ':gl:' => '🇬🇱',
- ':gm:' => '🇬🇲',
- ':gn:' => '🇬🇳',
- ':gp:' => '🇬🇵',
- ':gq:' => '🇬🇶',
- ':gr:' => '🇬🇷',
- ':grandma-tone1:' => '👵🏻',
- ':grandma-tone2:' => '👵🏼',
- ':grandma-tone3:' => '👵🏽',
- ':grandma-tone4:' => '👵🏾',
- ':grandma-tone5:' => '👵🏿',
- ':gs:' => '🇬🇸',
- ':gt:' => '🇬🇹',
- ':gu:' => '🇬🇺',
- ':gw:' => '🇬🇼',
- ':gy:' => '🇬🇾',
- ':hand-with-index-and-middle-fingers-crossed-tone1:' => '🤞🏻',
- ':hand-with-index-and-middle-fingers-crossed-tone2:' => '🤞🏼',
- ':hand-with-index-and-middle-fingers-crossed-tone3:' => '🤞🏽',
- ':hand-with-index-and-middle-fingers-crossed-tone4:' => '🤞🏾',
- ':hand-with-index-and-middle-fingers-crossed-tone5:' => '🤞🏿',
- ':hk:' => '🇭🇰',
- ':hm:' => '🇭🇲',
- ':hn:' => '🇭🇳',
- ':hr:' => '🇭🇷',
- ':ht:' => '🇭🇹',
- ':hu:' => '🇭🇺',
- ':ic:' => '🇮🇨',
- ':ie:' => '🇮🇪',
- ':il:' => '🇮🇱',
- ':im:' => '🇮🇲',
- ':in:' => '🇮🇳',
- ':indonesia:' => '🇮🇩',
- ':io:' => '🇮🇴',
- ':iq:' => '🇮🇶',
- ':ir:' => '🇮🇷',
- ':is:' => '🇮🇸',
+ ':golfer:' => '🏌️',
+ ':heavy-heart-exclamation-mark-ornament:' => '❣️',
+ ':helmet-with-white-cross:' => '⛑️',
+ ':house-buildings:' => '🏘️',
':it:' => '🇮🇹',
- ':je:' => '🇯🇪',
- ':jm:' => '🇯🇲',
- ':jo:' => '🇯🇴',
':jp:' => '🇯🇵',
- ':juggler-tone1:' => '🤹🏻',
- ':juggler-tone2:' => '🤹🏼',
- ':juggler-tone3:' => '🤹🏽',
- ':juggler-tone4:' => '🤹🏾',
- ':juggler-tone5:' => '🤹🏿',
- ':ke:' => '🇰🇪',
- ':keycap-asterisk:' => '*⃣',
- ':kg:' => '🇰🇬',
- ':kh:' => '🇰🇭',
- ':ki:' => '🇰🇮',
- ':km:' => '🇰🇲',
- ':kn:' => '🇰🇳',
':knife-fork-plate:' => '🍽️',
- ':kp:' => '🇰🇵',
':kr:' => '🇰🇷',
- ':kw:' => '🇰🇼',
- ':ky:' => '🇰🇾',
- ':kz:' => '🇰🇿',
- ':la:' => '🇱🇦',
- ':lb:' => '🇱🇧',
- ':lc:' => '🇱🇨',
- ':left-fist-tone1:' => '🤛🏻',
- ':left-fist-tone2:' => '🤛🏼',
- ':left-fist-tone3:' => '🤛🏽',
- ':left-fist-tone4:' => '🤛🏾',
- ':left-fist-tone5:' => '🤛🏿',
- ':li:' => '🇱🇮',
':lightning:' => '🌩️',
':lightning-cloud:' => '🌩️',
- ':lk:' => '🇱🇰',
- ':lr:' => '🇱🇷',
- ':ls:' => '🇱🇸',
- ':lt:' => '🇱🇹',
- ':lu:' => '🇱🇺',
- ':lv:' => '🇱🇻',
- ':ly:' => '🇱🇾',
- ':ma:' => '🇲🇦',
- ':male-dancer-tone1:' => '🕺🏻',
- ':male-dancer-tone2:' => '🕺🏼',
- ':male-dancer-tone3:' => '🕺🏽',
- ':male-dancer-tone4:' => '🕺🏾',
- ':male-dancer-tone5:' => '🕺🏿',
- ':mc:' => '🇲🇨',
- ':md:' => '🇲🇩',
- ':me:' => '🇲🇪',
- ':mf:' => '🇲🇫',
- ':mg:' => '🇲🇬',
- ':mh:' => '🇲🇭',
- ':mk:' => '🇲🇰',
- ':ml:' => '🇲🇱',
- ':mm:' => '🇲🇲',
- ':mn:' => '🇲🇳',
- ':mo:' => '🇲🇴',
+ ':linked-paperclips:' => '🖇️',
+ ':lower-left-ballpoint-pen:' => '🖊️',
+ ':lower-left-crayon:' => '🖍️',
+ ':lower-left-fountain-pen:' => '🖋️',
+ ':lower-left-paintbrush:' => '🖌️',
+ ':man-in-business-suit-levitating:' => '🕴️',
':mostly-sunny:' => '🌤️',
- ':mother-christmas-tone1:' => '🤶🏻',
- ':mother-christmas-tone2:' => '🤶🏼',
- ':mother-christmas-tone3:' => '🤶🏽',
- ':mother-christmas-tone4:' => '🤶🏾',
- ':mother-christmas-tone5:' => '🤶🏿',
- ':mp:' => '🇲🇵',
- ':mq:' => '🇲🇶',
- ':mr:' => '🇲🇷',
- ':ms:' => '🇲🇸',
- ':mt:' => '🇲🇹',
- ':mu:' => '🇲🇺',
- ':mv:' => '🇲🇻',
- ':mw:' => '🇲🇼',
- ':mx:' => '🇲🇽',
- ':my:' => '🇲🇾',
- ':mz:' => '🇲🇿',
- ':na:' => '🇳🇦',
- ':nc:' => '🇳🇨',
- ':ne:' => '🇳🇪',
- ':nf:' => '🇳🇫',
- ':ni:' => '🇳🇮',
- ':nigeria:' => '🇳🇬',
- ':nl:' => '🇳🇱',
- ':no:' => '🇳🇴',
- ':np:' => '🇳🇵',
- ':nr:' => '🇳🇷',
- ':nu:' => '🇳🇺',
- ':nz:' => '🇳🇿',
- ':pa:' => '🇵🇦',
+ ':om-symbol:' => '🕉️',
':partly-sunny-rain:' => '🌦️',
- ':pe:' => '🇵🇪',
- ':person-doing-cartwheel-tone1:' => '🤸🏻',
- ':person-doing-cartwheel-tone2:' => '🤸🏼',
- ':person-doing-cartwheel-tone3:' => '🤸🏽',
- ':person-doing-cartwheel-tone4:' => '🤸🏾',
- ':person-doing-cartwheel-tone5:' => '🤸🏿',
- ':person-with-ball-tone1:' => '⛹🏻',
- ':person-with-ball-tone2:' => '⛹🏼',
- ':person-with-ball-tone3:' => '⛹🏽',
- ':person-with-ball-tone4:' => '⛹🏾',
- ':person-with-ball-tone5:' => '⛹🏿',
- ':pf:' => '🇵🇫',
- ':pg:' => '🇵🇬',
- ':ph:' => '🇵🇭',
- ':pk:' => '🇵🇰',
- ':pl:' => '🇵🇱',
- ':pm:' => '🇵🇲',
- ':pn:' => '🇵🇳',
- ':pr:' => '🇵🇷',
- ':ps:' => '🇵🇸',
- ':pt:' => '🇵🇹',
- ':pw:' => '🇵🇼',
- ':py:' => '🇵🇾',
- ':qa:' => '🇶🇦',
+ ':person-with-ball:' => '⛹️',
+ ':racing-motorcycle:' => '🏍️',
+ ':radioactive-sign:' => '☢️',
':rain-cloud:' => '🌧️',
- ':rainbow-flag:' => '🏳️🌈',
- ':raised-hand-with-fingers-splayed-tone1:' => '🖐🏻',
- ':raised-hand-with-fingers-splayed-tone2:' => '🖐🏼',
- ':raised-hand-with-fingers-splayed-tone3:' => '🖐🏽',
- ':raised-hand-with-fingers-splayed-tone4:' => '🖐🏾',
- ':raised-hand-with-fingers-splayed-tone5:' => '🖐🏿',
- ':raised-hand-with-part-between-middle-and-ring-fingers-tone1:' => '🖖🏻',
- ':raised-hand-with-part-between-middle-and-ring-fingers-tone2:' => '🖖🏼',
- ':raised-hand-with-part-between-middle-and-ring-fingers-tone3:' => '🖖🏽',
- ':raised-hand-with-part-between-middle-and-ring-fingers-tone4:' => '🖖🏾',
- ':raised-hand-with-part-between-middle-and-ring-fingers-tone5:' => '🖖🏿',
- ':re:' => '🇷🇪',
- ':reversed-hand-with-middle-finger-extended-tone1:' => '🖕🏻',
- ':reversed-hand-with-middle-finger-extended-tone2:' => '🖕🏼',
- ':reversed-hand-with-middle-finger-extended-tone3:' => '🖕🏽',
- ':reversed-hand-with-middle-finger-extended-tone4:' => '🖕🏾',
- ':reversed-hand-with-middle-finger-extended-tone5:' => '🖕🏿',
- ':right-fist-tone1:' => '🤜🏻',
- ':right-fist-tone2:' => '🤜🏼',
- ':right-fist-tone3:' => '🤜🏽',
- ':right-fist-tone4:' => '🤜🏾',
- ':right-fist-tone5:' => '🤜🏿',
- ':ro:' => '🇷🇴',
- ':rs:' => '🇷🇸',
+ ':rolled-up-newspaper:' => '🗞️',
':ru:' => '🇷🇺',
- ':rw:' => '🇷🇼',
- ':saudi:' => '🇸🇦',
- ':saudiarabia:' => '🇸🇦',
- ':sb:' => '🇸🇧',
- ':sc:' => '🇸🇨',
- ':sd:' => '🇸🇩',
- ':se:' => '🇸🇪',
- ':sg:' => '🇸🇬',
- ':sh:' => '🇸🇭',
- ':shaking-hands-tone1:' => '🤝🏻',
- ':shaking-hands-tone2:' => '🤝🏼',
- ':shaking-hands-tone3:' => '🤝🏽',
- ':shaking-hands-tone4:' => '🤝🏾',
- ':shaking-hands-tone5:' => '🤝🏿',
- ':si:' => '🇸🇮',
- ':sign-of-the-horns-tone1:' => '🤘🏻',
- ':sign-of-the-horns-tone2:' => '🤘🏼',
- ':sign-of-the-horns-tone3:' => '🤘🏽',
- ':sign-of-the-horns-tone4:' => '🤘🏾',
- ':sign-of-the-horns-tone5:' => '🤘🏿',
- ':sj:' => '🇸🇯',
- ':sk:' => '🇸🇰',
- ':sl:' => '🇸🇱',
- ':sleuth-or-spy-tone1:' => '🕵🏻',
- ':sleuth-or-spy-tone2:' => '🕵🏼',
- ':sleuth-or-spy-tone3:' => '🕵🏽',
- ':sleuth-or-spy-tone4:' => '🕵🏾',
- ':sleuth-or-spy-tone5:' => '🕵🏿',
- ':sm:' => '🇸🇲',
- ':sn:' => '🇸🇳',
+ ':scales:' => '⚖️',
+ ':shopping-bags:' => '🛍️',
+ ':sleuth-or-spy:' => '🕵️',
+ ':snow-capped-mountain:' => '🏔️',
':snow-cloud:' => '🌨️',
- ':so:' => '🇸🇴',
- ':sr:' => '🇸🇷',
- ':ss:' => '🇸🇸',
- ':st:' => '🇸🇹',
+ ':speaking-head-in-silhouette:' => '🗣️',
+ ':spiral-calendar-pad:' => '🗓️',
+ ':spiral-note-pad:' => '🗒️',
':staff-of-aesculapius:' => '⚕️',
':sun-behind-cloud:' => '🌥️',
':sun-small-cloud:' => '🌤️',
- ':sv:' => '🇸🇻',
- ':sx:' => '🇸🇽',
- ':sy:' => '🇸🇾',
- ':sz:' => '🇸🇿',
- ':ta:' => '🇹🇦',
- ':tc:' => '🇹🇨',
- ':td:' => '🇹🇩',
- ':tf:' => '🇹🇫',
- ':tg:' => '🇹🇬',
- ':th:' => '🇹🇭',
- ':tj:' => '🇹🇯',
- ':tk:' => '🇹🇰',
- ':tl:' => '🇹🇱',
- ':tn:' => '🇹🇳',
- ':to:' => '🇹🇴',
+ ':three-button-mouse:' => '🖱️',
+ ':thunder-cloud-and-rain:' => '⛈️',
':tornado-cloud:' => '🌪️',
- ':tr:' => '🇹🇷',
- ':tt:' => '🇹🇹',
- ':turkmenistan:' => '🇹🇲',
- ':tuvalu:' => '🇹🇻',
- ':tuxedo-tone1:' => '🤵🏻',
- ':tuxedo-tone2:' => '🤵🏼',
- ':tuxedo-tone3:' => '🤵🏽',
- ':tuxedo-tone4:' => '🤵🏾',
- ':tuxedo-tone5:' => '🤵🏿',
- ':tw:' => '🇹🇼',
- ':tz:' => '🇹🇿',
- ':ua:' => '🇺🇦',
- ':ug:' => '🇺🇬',
':uk:' => '🇬🇧',
- ':um:' => '🇺🇲',
+ ':umbrella-on-ground:' => '⛱️',
':us:' => '🇺🇸',
- ':uy:' => '🇺🇾',
- ':uz:' => '🇺🇿',
- ':va:' => '🇻🇦',
- ':vc:' => '🇻🇨',
- ':ve:' => '🇻🇪',
- ':vg:' => '🇻🇬',
- ':vi:' => '🇻🇮',
- ':vn:' => '🇻🇳',
- ':vu:' => '🇻🇺',
- ':weight-lifter-tone1:' => '🏋🏻',
- ':weight-lifter-tone2:' => '🏋🏼',
- ':weight-lifter-tone3:' => '🏋🏽',
- ':weight-lifter-tone4:' => '🏋🏾',
- ':weight-lifter-tone5:' => '🏋🏿',
- ':wf:' => '🇼🇫',
- ':wrestling-tone1:' => '🤼🏻',
- ':wrestling-tone2:' => '🤼🏼',
- ':wrestling-tone3:' => '🤼🏽',
- ':wrestling-tone4:' => '🤼🏾',
- ':wrestling-tone5:' => '🤼🏿',
- ':ws:' => '🇼🇸',
- ':xk:' => '🇽🇰',
- ':ye:' => '🇾🇪',
- ':yt:' => '🇾🇹',
- ':za:' => '🇿🇦',
- ':zm:' => '🇿🇲',
- ':zw:' => '🇿🇼',
+ ':waving-white-flag:' => '🏳️',
+ ':weight-lifter:' => '🏋️',
+ ':white-frowning-face:' => '☹️',
+ ':wind-blowing-face:' => '🌬️',
':afghanistan:' => '🇦🇫',
+ ':airplane-small:' => '🛩️',
':aland-islands:' => '🇦🇽',
':albania:' => '🇦🇱',
':algeria:' => '🇩🇿',
@@ -2364,6 +1903,7 @@
':angel-tone3:' => '👼🏽',
':angel-tone4:' => '👼🏾',
':angel-tone5:' => '👼🏿',
+ ':anger-right:' => '🗯️',
':angola:' => '🇦🇴',
':anguilla:' => '🇦🇮',
':antarctica:' => '🇦🇶',
@@ -2372,7 +1912,8 @@
':armenia:' => '🇦🇲',
':aruba:' => '🇦🇼',
':ascension-island:' => '🇦🇨',
- ':asterisk:' => '*⃣',
+ ':asterisk:' => '*️⃣',
+ ':atom:' => '⚛️',
':australia:' => '🇦🇺',
':austria:' => '🇦🇹',
':azerbaijan:' => '🇦🇿',
@@ -2385,6 +1926,7 @@
':bahrain:' => '🇧🇭',
':bangladesh:' => '🇧🇩',
':barbados:' => '🇧🇧',
+ ':basketball-player:' => '⛹️',
':basketball-player-tone1:' => '⛹🏻',
':basketball-player-tone2:' => '⛹🏼',
':basketball-player-tone3:' => '⛹🏽',
@@ -2395,9 +1937,11 @@
':bath-tone3:' => '🛀🏽',
':bath-tone4:' => '🛀🏾',
':bath-tone5:' => '🛀🏿',
+ ':beach:' => '🏖️',
':belarus:' => '🇧🇾',
':belgium:' => '🇧🇪',
':belize:' => '🇧🇿',
+ ':bellhop:' => '🛎️',
':benin:' => '🇧🇯',
':bermuda:' => '🇧🇲',
':bhutan:' => '🇧🇹',
@@ -2421,6 +1965,11 @@
':boy-tone4:' => '👦🏾',
':boy-tone5:' => '👦🏿',
':brazil:' => '🇧🇷',
+ ':breast-feeding-dark-skin-tone:' => '🤱🏿',
+ ':breast-feeding-light-skin-tone:' => '🤱🏻',
+ ':breast-feeding-medium-dark-skin-tone:' => '🤱🏾',
+ ':breast-feeding-medium-light-skin-tone:' => '🤱🏼',
+ ':breast-feeding-medium-skin-tone:' => '🤱🏽',
':bride-with-veil-tone1:' => '👰🏻',
':bride-with-veil-tone2:' => '👰🏼',
':bride-with-veil-tone3:' => '👰🏽',
@@ -2432,6 +1981,7 @@
':bulgaria:' => '🇧🇬',
':burkina-faso:' => '🇧🇫',
':burundi:' => '🇧🇮',
+ ':calendar-spiral:' => '🗓️',
':call-me-tone1:' => '🤙🏻',
':call-me-tone2:' => '🤙🏼',
':call-me-tone3:' => '🤙🏽',
@@ -2442,6 +1992,7 @@
':canada:' => '🇨🇦',
':canary-islands:' => '🇮🇨',
':cape-verde:' => '🇨🇻',
+ ':card-box:' => '🗃️',
':caribbean-netherlands:' => '🇧🇶',
':cartwheel-tone1:' => '🤸🏻',
':cartwheel-tone2:' => '🤸🏼',
@@ -2452,6 +2003,12 @@
':central-african-republic:' => '🇨🇫',
':ceuta-melilla:' => '🇪🇦',
':chad:' => '🇹🇩',
+ ':child-dark-skin-tone:' => '🧒🏿',
+ ':child-light-skin-tone:' => '🧒🏻',
+ ':child-medium-dark-skin-tone:' => '🧒🏾',
+ ':child-medium-light-skin-tone:' => '🧒🏼',
+ ':child-medium-skin-tone:' => '🧒🏽',
+ ':chile:' => '🇨🇱',
':christmas-island:' => '🇨🇽',
':clap-tone1:' => '👏🏻',
':clap-tone2:' => '👏🏼',
@@ -2459,11 +2016,17 @@
':clap-tone4:' => '👏🏾',
':clap-tone5:' => '👏🏿',
':clipperton-island:' => '🇨🇵',
+ ':clock:' => '🕰️',
+ ':cloud-lightning:' => '🌩️',
+ ':cloud-rain:' => '🌧️',
+ ':cloud-snow:' => '🌨️',
+ ':cloud-tornado:' => '🌪️',
':cocos-islands:' => '🇨🇨',
':colombia:' => '🇨🇴',
':comoros:' => '🇰🇲',
':congo-brazzaville:' => '🇨🇬',
':congo-kinshasa:' => '🇨🇩',
+ ':construction-site:' => '🏗️',
':construction-worker-tone1:' => '👷🏻',
':construction-worker-tone2:' => '👷🏼',
':construction-worker-tone3:' => '👷🏽',
@@ -2477,7 +2040,15 @@
':cop-tone5:' => '👮🏿',
':costa-rica:' => '🇨🇷',
':cote-divoire:' => '🇨🇮',
+ ':couch:' => '🛋️',
+ ':couple-with-heart-dark-skin-tone:' => '💑🏿',
+ ':couple-with-heart-light-skin-tone:' => '💑🏻',
+ ':couple-with-heart-medium-dark-skin-tone:' => '💑🏾',
+ ':couple-with-heart-medium-light-skin-tone:' => '💑🏼',
+ ':couple-with-heart-medium-skin-tone:' => '💑🏽',
':croatia:' => '🇭🇷',
+ ':cross:' => '✝️',
+ ':cruise-ship:' => '🛳️',
':cuba:' => '🇨🇺',
':curacao:' => '🇨🇼',
':cyprus:' => '🇨🇾',
@@ -2487,8 +2058,15 @@
':dancer-tone3:' => '💃🏽',
':dancer-tone4:' => '💃🏾',
':dancer-tone5:' => '💃🏿',
+ ':deaf-person-dark-skin-tone:' => '🧏🏿',
+ ':deaf-person-light-skin-tone:' => '🧏🏻',
+ ':deaf-person-medium-dark-skin-tone:' => '🧏🏾',
+ ':deaf-person-medium-light-skin-tone:' => '🧏🏼',
+ ':deaf-person-medium-skin-tone:' => '🧏🏽',
':denmark:' => '🇩🇰',
+ ':desktop:' => '🖥️',
':diego-garcia:' => '🇩🇬',
+ ':dividers:' => '🗂️',
':djibouti:' => '🇩🇯',
':dominica:' => '🇩🇲',
':dominican-republic:' => '🇩🇴',
@@ -2497,20 +2075,36 @@
':ear-tone3:' => '👂🏽',
':ear-tone4:' => '👂🏾',
':ear-tone5:' => '👂🏿',
+ ':ear-with-hearing-aid-dark-skin-tone:' => '🦻🏿',
+ ':ear-with-hearing-aid-light-skin-tone:' => '🦻🏻',
+ ':ear-with-hearing-aid-medium-dark-skin-tone:' => '🦻🏾',
+ ':ear-with-hearing-aid-medium-light-skin-tone:' => '🦻🏼',
+ ':ear-with-hearing-aid-medium-skin-tone:' => '🦻🏽',
':ecuador:' => '🇪🇨',
':egypt:' => '🇪🇬',
':eight:' => '8️⃣',
':el-salvador:' => '🇸🇻',
+ ':elf-dark-skin-tone:' => '🧝🏿',
+ ':elf-light-skin-tone:' => '🧝🏻',
+ ':elf-medium-dark-skin-tone:' => '🧝🏾',
+ ':elf-medium-light-skin-tone:' => '🧝🏼',
+ ':elf-medium-skin-tone:' => '🧝🏽',
':equatorial-guinea:' => '🇬🇶',
':eritrea:' => '🇪🇷',
':estonia:' => '🇪🇪',
':ethiopia:' => '🇪🇹',
+ ':eu:' => '🇪🇺',
':european-union:' => '🇪🇺',
':face-palm-tone1:' => '🤦🏻',
':face-palm-tone2:' => '🤦🏼',
':face-palm-tone3:' => '🤦🏽',
':face-palm-tone4:' => '🤦🏾',
':face-palm-tone5:' => '🤦🏿',
+ ':fairy-dark-skin-tone:' => '🧚🏿',
+ ':fairy-light-skin-tone:' => '🧚🏻',
+ ':fairy-medium-dark-skin-tone:' => '🧚🏾',
+ ':fairy-medium-light-skin-tone:' => '🧚🏼',
+ ':fairy-medium-skin-tone:' => '🧚🏽',
':falkland-islands:' => '🇫🇰',
':faroe-islands:' => '🇫🇴',
':fiji:' => '🇫🇯',
@@ -2526,13 +2120,22 @@
':fist-tone4:' => '✊🏾',
':fist-tone5:' => '✊🏿',
':five:' => '5️⃣',
+ ':flag-united-nations:' => '🇺🇳',
+ ':flag-white:' => '🏳️',
+ ':foot-dark-skin-tone:' => '🦶🏿',
+ ':foot-light-skin-tone:' => '🦶🏻',
+ ':foot-medium-dark-skin-tone:' => '🦶🏾',
+ ':foot-medium-light-skin-tone:' => '🦶🏼',
+ ':foot-medium-skin-tone:' => '🦶🏽',
+ ':fork-knife-plate:' => '🍽️',
':four:' => '4️⃣',
+ ':frame-photo:' => '🖼️',
':french-guiana:' => '🇬🇫',
':french-polynesia:' => '🇵🇫',
':french-southern-territories:' => '🇹🇫',
+ ':frowning2:' => '☹️',
':gabon:' => '🇬🇦',
':gambia:' => '🇬🇲',
- ':gay-pride-flag:' => '🏳🌈',
':georgia:' => '🇬🇪',
':ghana:' => '🇬🇭',
':gibraltar:' => '🇬🇮',
@@ -2562,11 +2165,18 @@
':haircut-tone4:' => '💇🏾',
':haircut-tone5:' => '💇🏿',
':haiti:' => '🇭🇹',
+ ':hammer-pick:' => '⚒️',
+ ':hand-splayed:' => '🖐️',
':hand-splayed-tone1:' => '🖐🏻',
':hand-splayed-tone2:' => '🖐🏼',
':hand-splayed-tone3:' => '🖐🏽',
':hand-splayed-tone4:' => '🖐🏾',
':hand-splayed-tone5:' => '🖐🏿',
+ ':hand-with-index-finger-and-thumb-crossed-dark-skin-tone:' => '🫰🏿',
+ ':hand-with-index-finger-and-thumb-crossed-light-skin-tone:' => '🫰🏻',
+ ':hand-with-index-finger-and-thumb-crossed-medium-dark-skin-tone:' => '🫰🏾',
+ ':hand-with-index-finger-and-thumb-crossed-medium-light-skin-tone:' => '🫰🏼',
+ ':hand-with-index-finger-and-thumb-crossed-medium-skin-tone:' => '🫰🏽',
':handball-tone1:' => '🤾🏻',
':handball-tone2:' => '🤾🏼',
':handball-tone3:' => '🤾🏽',
@@ -2579,6 +2189,14 @@
':handshake-tone5:' => '🤝🏿',
':hash:' => '#️⃣',
':heard-mcdonald-islands:' => '🇭🇲',
+ ':heart-exclamation:' => '❣️',
+ ':heart-hands-dark-skin-tone:' => '🫶🏿',
+ ':heart-hands-light-skin-tone:' => '🫶🏻',
+ ':heart-hands-medium-dark-skin-tone:' => '🫶🏾',
+ ':heart-hands-medium-light-skin-tone:' => '🫶🏼',
+ ':heart-hands-medium-skin-tone:' => '🫶🏽',
+ ':helmet-with-cross:' => '⛑️',
+ ':homes:' => '🏘️',
':honduras:' => '🇭🇳',
':hong-kong:' => '🇭🇰',
':horse-racing-tone1:' => '🏇🏻',
@@ -2586,9 +2204,16 @@
':horse-racing-tone3:' => '🏇🏽',
':horse-racing-tone4:' => '🏇🏾',
':horse-racing-tone5:' => '🏇🏿',
+ ':house-abandoned:' => '🏚️',
':hungary:' => '🇭🇺',
':iceland:' => '🇮🇸',
+ ':index-pointing-at-the-viewer-dark-skin-tone:' => '🫵🏿',
+ ':index-pointing-at-the-viewer-light-skin-tone:' => '🫵🏻',
+ ':index-pointing-at-the-viewer-medium-dark-skin-tone:' => '🫵🏾',
+ ':index-pointing-at-the-viewer-medium-light-skin-tone:' => '🫵🏼',
+ ':index-pointing-at-the-viewer-medium-skin-tone:' => '🫵🏽',
':india:' => '🇮🇳',
+ ':indonesia:' => '🇮🇩',
':information-desk-person-tone1:' => '💁🏻',
':information-desk-person-tone2:' => '💁🏼',
':information-desk-person-tone3:' => '💁🏽',
@@ -2597,6 +2222,7 @@
':iran:' => '🇮🇷',
':iraq:' => '🇮🇶',
':ireland:' => '🇮🇪',
+ ':island:' => '🏝️',
':isle-of-man:' => '🇮🇲',
':israel:' => '🇮🇱',
':jamaica:' => '🇯🇲',
@@ -2609,7 +2235,13 @@
':juggling-tone5:' => '🤹🏿',
':kazakhstan:' => '🇰🇿',
':kenya:' => '🇰🇪',
+ ':key2:' => '🗝️',
':kiribati:' => '🇰🇮',
+ ':kiss-dark-skin-tone:' => '💏🏿',
+ ':kiss-light-skin-tone:' => '💏🏻',
+ ':kiss-medium-dark-skin-tone:' => '💏🏾',
+ ':kiss-medium-light-skin-tone:' => '💏🏼',
+ ':kiss-medium-skin-tone:' => '💏🏽',
':kosovo:' => '🇽🇰',
':kuwait:' => '🇰🇼',
':kyrgyzstan:' => '🇰🇬',
@@ -2621,20 +2253,47 @@
':left-facing-fist-tone3:' => '🤛🏽',
':left-facing-fist-tone4:' => '🤛🏾',
':left-facing-fist-tone5:' => '🤛🏿',
+ ':leftwards-hand-dark-skin-tone:' => '🫲🏿',
+ ':leftwards-hand-light-skin-tone:' => '🫲🏻',
+ ':leftwards-hand-medium-dark-skin-tone:' => '🫲🏾',
+ ':leftwards-hand-medium-light-skin-tone:' => '🫲🏼',
+ ':leftwards-hand-medium-skin-tone:' => '🫲🏽',
+ ':leftwards-pushing-hand-dark-skin-tone:' => '🫷🏿',
+ ':leftwards-pushing-hand-light-skin-tone:' => '🫷🏻',
+ ':leftwards-pushing-hand-medium-dark-skin-tone:' => '🫷🏾',
+ ':leftwards-pushing-hand-medium-light-skin-tone:' => '🫷🏼',
+ ':leftwards-pushing-hand-medium-skin-tone:' => '🫷🏽',
+ ':leg-dark-skin-tone:' => '🦵🏿',
+ ':leg-light-skin-tone:' => '🦵🏻',
+ ':leg-medium-dark-skin-tone:' => '🦵🏾',
+ ':leg-medium-light-skin-tone:' => '🦵🏼',
+ ':leg-medium-skin-tone:' => '🦵🏽',
':lesotho:' => '🇱🇸',
+ ':levitate:' => '🕴️',
':liberia:' => '🇱🇷',
':libya:' => '🇱🇾',
':liechtenstein:' => '🇱🇮',
+ ':lifter:' => '🏋️',
':lifter-tone1:' => '🏋🏻',
':lifter-tone2:' => '🏋🏼',
':lifter-tone3:' => '🏋🏽',
':lifter-tone4:' => '🏋🏾',
':lifter-tone5:' => '🏋🏿',
':lithuania:' => '🇱🇹',
+ ':love-you-gesture-dark-skin-tone:' => '🤟🏿',
+ ':love-you-gesture-light-skin-tone:' => '🤟🏻',
+ ':love-you-gesture-medium-dark-skin-tone:' => '🤟🏾',
+ ':love-you-gesture-medium-light-skin-tone:' => '🤟🏼',
+ ':love-you-gesture-medium-skin-tone:' => '🤟🏽',
':luxembourg:' => '🇱🇺',
':macau:' => '🇲🇴',
':macedonia:' => '🇲🇰',
':madagascar:' => '🇲🇬',
+ ':mage-dark-skin-tone:' => '🧙🏿',
+ ':mage-light-skin-tone:' => '🧙🏻',
+ ':mage-medium-dark-skin-tone:' => '🧙🏾',
+ ':mage-medium-light-skin-tone:' => '🧙🏼',
+ ':mage-medium-skin-tone:' => '🧙🏽',
':malawi:' => '🇲🇼',
':malaysia:' => '🇲🇾',
':maldives:' => '🇲🇻',
@@ -2665,6 +2324,7 @@
':man-with-turban-tone3:' => '👳🏽',
':man-with-turban-tone4:' => '👳🏾',
':man-with-turban-tone5:' => '👳🏿',
+ ':map:' => '🗺️',
':marshall-islands:' => '🇲🇭',
':martinique:' => '🇲🇶',
':massage-tone1:' => '💆🏻',
@@ -2675,6 +2335,16 @@
':mauritania:' => '🇲🇷',
':mauritius:' => '🇲🇺',
':mayotte:' => '🇾🇹',
+ ':men-holding-hands-dark-skin-tone:' => '👬🏿',
+ ':men-holding-hands-light-skin-tone:' => '👬🏻',
+ ':men-holding-hands-medium-dark-skin-tone:' => '👬🏾',
+ ':men-holding-hands-medium-light-skin-tone:' => '👬🏼',
+ ':men-holding-hands-medium-skin-tone:' => '👬🏽',
+ ':merperson-dark-skin-tone:' => '🧜🏿',
+ ':merperson-light-skin-tone:' => '🧜🏻',
+ ':merperson-medium-dark-skin-tone:' => '🧜🏾',
+ ':merperson-medium-light-skin-tone:' => '🧜🏼',
+ ':merperson-medium-skin-tone:' => '🧜🏽',
':metal-tone1:' => '🤘🏻',
':metal-tone2:' => '🤘🏼',
':metal-tone3:' => '🤘🏽',
@@ -2682,22 +2352,26 @@
':metal-tone5:' => '🤘🏿',
':mexico:' => '🇲🇽',
':micronesia:' => '🇫🇲',
+ ':microphone2:' => '🎙️',
':middle-finger-tone1:' => '🖕🏻',
':middle-finger-tone2:' => '🖕🏼',
':middle-finger-tone3:' => '🖕🏽',
':middle-finger-tone4:' => '🖕🏾',
':middle-finger-tone5:' => '🖕🏿',
+ ':military-medal:' => '🎖️',
':moldova:' => '🇲🇩',
':monaco:' => '🇲🇨',
':mongolia:' => '🇲🇳',
':montenegro:' => '🇲🇪',
':montserrat:' => '🇲🇸',
':morocco:' => '🇲🇦',
+ ':motorboat:' => '🛥️',
':mountain-bicyclist-tone1:' => '🚵🏻',
':mountain-bicyclist-tone2:' => '🚵🏼',
':mountain-bicyclist-tone3:' => '🚵🏽',
':mountain-bicyclist-tone4:' => '🚵🏾',
':mountain-bicyclist-tone5:' => '🚵🏿',
+ ':mouse-three-button:' => '🖱️',
':mozambique:' => '🇲🇿',
':mrs-claus-tone1:' => '🤶🏻',
':mrs-claus-tone2:' => '🤶🏼',
@@ -2721,9 +2395,16 @@
':netherlands:' => '🇳🇱',
':new-caledonia:' => '🇳🇨',
':new-zealand:' => '🇳🇿',
+ ':newspaper2:' => '🗞️',
':nicaragua:' => '🇳🇮',
':niger:' => '🇳🇪',
+ ':nigeria:' => '🇳🇬',
':nine:' => '9️⃣',
+ ':ninja-dark-skin-tone:' => '🥷🏿',
+ ':ninja-light-skin-tone:' => '🥷🏻',
+ ':ninja-medium-dark-skin-tone:' => '🥷🏾',
+ ':ninja-medium-light-skin-tone:' => '🥷🏼',
+ ':ninja-medium-skin-tone:' => '🥷🏽',
':niue:' => '🇳🇺',
':no-good-tone1:' => '🙅🏻',
':no-good-tone2:' => '🙅🏼',
@@ -2739,6 +2420,8 @@
':nose-tone3:' => '👃🏽',
':nose-tone4:' => '👃🏾',
':nose-tone5:' => '👃🏿',
+ ':notepad-spiral:' => '🗒️',
+ ':oil:' => '🛢️',
':ok-hand-tone1:' => '👌🏻',
':ok-hand-tone2:' => '👌🏼',
':ok-hand-tone3:' => '👌🏽',
@@ -2754,6 +2437,11 @@
':older-man-tone3:' => '👴🏽',
':older-man-tone4:' => '👴🏾',
':older-man-tone5:' => '👴🏿',
+ ':older-person-dark-skin-tone:' => '🧓🏿',
+ ':older-person-light-skin-tone:' => '🧓🏻',
+ ':older-person-medium-dark-skin-tone:' => '🧓🏾',
+ ':older-person-medium-light-skin-tone:' => '🧓🏼',
+ ':older-person-medium-skin-tone:' => '🧓🏽',
':older-woman-tone1:' => '👵🏻',
':older-woman-tone2:' => '👵🏼',
':older-woman-tone3:' => '👵🏽',
@@ -2769,19 +2457,93 @@
':pakistan:' => '🇵🇰',
':palau:' => '🇵🇼',
':palestinian-territories:' => '🇵🇸',
+ ':palm-down-hand-dark-skin-tone:' => '🫳🏿',
+ ':palm-down-hand-light-skin-tone:' => '🫳🏻',
+ ':palm-down-hand-medium-dark-skin-tone:' => '🫳🏾',
+ ':palm-down-hand-medium-light-skin-tone:' => '🫳🏼',
+ ':palm-down-hand-medium-skin-tone:' => '🫳🏽',
+ ':palm-up-hand-dark-skin-tone:' => '🫴🏿',
+ ':palm-up-hand-light-skin-tone:' => '🫴🏻',
+ ':palm-up-hand-medium-dark-skin-tone:' => '🫴🏾',
+ ':palm-up-hand-medium-light-skin-tone:' => '🫴🏼',
+ ':palm-up-hand-medium-skin-tone:' => '🫴🏽',
+ ':palms-up-together-dark-skin-tone:' => '🤲🏿',
+ ':palms-up-together-light-skin-tone:' => '🤲🏻',
+ ':palms-up-together-medium-dark-skin-tone:' => '🤲🏾',
+ ':palms-up-together-medium-light-skin-tone:' => '🤲🏼',
+ ':palms-up-together-medium-skin-tone:' => '🤲🏽',
':panama:' => '🇵🇦',
':papua-new-guinea:' => '🇵🇬',
':paraguay:' => '🇵🇾',
+ ':park:' => '🏞️',
+ ':peace:' => '☮️',
+ ':pen-ballpoint:' => '🖊️',
+ ':pen-fountain:' => '🖋️',
+ ':person-climbing-dark-skin-tone:' => '🧗🏿',
+ ':person-climbing-light-skin-tone:' => '🧗🏻',
+ ':person-climbing-medium-dark-skin-tone:' => '🧗🏾',
+ ':person-climbing-medium-light-skin-tone:' => '🧗🏼',
+ ':person-climbing-medium-skin-tone:' => '🧗🏽',
+ ':person-dark-skin-tone:' => '🧑🏿',
+ ':person-dark-skin-tone-beard:' => '🧔🏿',
':person-frowning-tone1:' => '🙍🏻',
':person-frowning-tone2:' => '🙍🏼',
':person-frowning-tone3:' => '🙍🏽',
':person-frowning-tone4:' => '🙍🏾',
':person-frowning-tone5:' => '🙍🏿',
+ ':person-golfing-dark-skin-tone:' => '🏌🏿',
+ ':person-golfing-light-skin-tone:' => '🏌🏻',
+ ':person-golfing-medium-dark-skin-tone:' => '🏌🏾',
+ ':person-golfing-medium-light-skin-tone:' => '🏌🏼',
+ ':person-golfing-medium-skin-tone:' => '🏌🏽',
+ ':person-in-bed-dark-skin-tone:' => '🛌🏿',
+ ':person-in-bed-light-skin-tone:' => '🛌🏻',
+ ':person-in-bed-medium-dark-skin-tone:' => '🛌🏾',
+ ':person-in-bed-medium-light-skin-tone:' => '🛌🏼',
+ ':person-in-bed-medium-skin-tone:' => '🛌🏽',
+ ':person-in-lotus-position-dark-skin-tone:' => '🧘🏿',
+ ':person-in-lotus-position-light-skin-tone:' => '🧘🏻',
+ ':person-in-lotus-position-medium-dark-skin-tone:' => '🧘🏾',
+ ':person-in-lotus-position-medium-light-skin-tone:' => '🧘🏼',
+ ':person-in-lotus-position-medium-skin-tone:' => '🧘🏽',
+ ':person-in-steamy-room-dark-skin-tone:' => '🧖🏿',
+ ':person-in-steamy-room-light-skin-tone:' => '🧖🏻',
+ ':person-in-steamy-room-medium-dark-skin-tone:' => '🧖🏾',
+ ':person-in-steamy-room-medium-light-skin-tone:' => '🧖🏼',
+ ':person-in-steamy-room-medium-skin-tone:' => '🧖🏽',
+ ':person-in-suit-levitating-dark-skin-tone:' => '🕴🏿',
+ ':person-in-suit-levitating-light-skin-tone:' => '🕴🏻',
+ ':person-in-suit-levitating-medium-dark-skin-tone:' => '🕴🏾',
+ ':person-in-suit-levitating-medium-light-skin-tone:' => '🕴🏼',
+ ':person-in-suit-levitating-medium-skin-tone:' => '🕴🏽',
+ ':person-kneeling-dark-skin-tone:' => '🧎🏿',
+ ':person-kneeling-light-skin-tone:' => '🧎🏻',
+ ':person-kneeling-medium-dark-skin-tone:' => '🧎🏾',
+ ':person-kneeling-medium-light-skin-tone:' => '🧎🏼',
+ ':person-kneeling-medium-skin-tone:' => '🧎🏽',
+ ':person-light-skin-tone:' => '🧑🏻',
+ ':person-light-skin-tone-beard:' => '🧔🏻',
+ ':person-medium-dark-skin-tone:' => '🧑🏾',
+ ':person-medium-dark-skin-tone-beard:' => '🧔🏾',
+ ':person-medium-light-skin-tone:' => '🧑🏼',
+ ':person-medium-light-skin-tone-beard:' => '🧔🏼',
+ ':person-medium-skin-tone:' => '🧑🏽',
+ ':person-medium-skin-tone-beard:' => '🧔🏽',
+ ':person-standing-dark-skin-tone:' => '🧍🏿',
+ ':person-standing-light-skin-tone:' => '🧍🏻',
+ ':person-standing-medium-dark-skin-tone:' => '🧍🏾',
+ ':person-standing-medium-light-skin-tone:' => '🧍🏼',
+ ':person-standing-medium-skin-tone:' => '🧍🏽',
':person-with-blond-hair-tone1:' => '👱🏻',
':person-with-blond-hair-tone2:' => '👱🏼',
':person-with-blond-hair-tone3:' => '👱🏽',
':person-with-blond-hair-tone4:' => '👱🏾',
':person-with-blond-hair-tone5:' => '👱🏿',
+ ':person-with-crown-dark-skin-tone:' => '🫅🏿',
+ ':person-with-crown-light-skin-tone:' => '🫅🏻',
+ ':person-with-crown-medium-dark-skin-tone:' => '🫅🏾',
+ ':person-with-crown-medium-light-skin-tone:' => '🫅🏼',
+ ':person-with-crown-medium-skin-tone:' => '🫅🏽',
':person-with-pouting-face-tone1:' => '🙎🏻',
':person-with-pouting-face-tone2:' => '🙎🏼',
':person-with-pouting-face-tone3:' => '🙎🏽',
@@ -2789,7 +2551,18 @@
':person-with-pouting-face-tone5:' => '🙎🏿',
':peru:' => '🇵🇪',
':philippines:' => '🇵🇭',
+ ':pinched-fingers-dark-skin-tone:' => '🤌🏿',
+ ':pinched-fingers-light-skin-tone:' => '🤌🏻',
+ ':pinched-fingers-medium-dark-skin-tone:' => '🤌🏾',
+ ':pinched-fingers-medium-light-skin-tone:' => '🤌🏼',
+ ':pinched-fingers-medium-skin-tone:' => '🤌🏽',
+ ':pinching-hand-dark-skin-tone:' => '🤏🏿',
+ ':pinching-hand-light-skin-tone:' => '🤏🏻',
+ ':pinching-hand-medium-dark-skin-tone:' => '🤏🏾',
+ ':pinching-hand-medium-light-skin-tone:' => '🤏🏼',
+ ':pinching-hand-medium-skin-tone:' => '🤏🏽',
':pitcairn-islands:' => '🇵🇳',
+ ':play-pause:' => '⏯️',
':point-down-tone1:' => '👇🏻',
':point-down-tone2:' => '👇🏼',
':point-down-tone3:' => '👇🏽',
@@ -2822,6 +2595,16 @@
':pray-tone3:' => '🙏🏽',
':pray-tone4:' => '🙏🏾',
':pray-tone5:' => '🙏🏿',
+ ':pregnant-man-dark-skin-tone:' => '🫃🏿',
+ ':pregnant-man-light-skin-tone:' => '🫃🏻',
+ ':pregnant-man-medium-dark-skin-tone:' => '🫃🏾',
+ ':pregnant-man-medium-light-skin-tone:' => '🫃🏼',
+ ':pregnant-man-medium-skin-tone:' => '🫃🏽',
+ ':pregnant-person-dark-skin-tone:' => '🫄🏿',
+ ':pregnant-person-light-skin-tone:' => '🫄🏻',
+ ':pregnant-person-medium-dark-skin-tone:' => '🫄🏾',
+ ':pregnant-person-medium-light-skin-tone:' => '🫄🏼',
+ ':pregnant-person-medium-skin-tone:' => '🫄🏽',
':pregnant-woman-tone1:' => '🤰🏻',
':pregnant-woman-tone2:' => '🤰🏼',
':pregnant-woman-tone3:' => '🤰🏽',
@@ -2837,6 +2620,7 @@
':princess-tone3:' => '👸🏽',
':princess-tone4:' => '👸🏾',
':princess-tone5:' => '👸🏿',
+ ':projector:' => '📽️',
':puerto-rico:' => '🇵🇷',
':punch-tone1:' => '👊🏻',
':punch-tone2:' => '👊🏼',
@@ -2844,6 +2628,7 @@
':punch-tone4:' => '👊🏾',
':punch-tone5:' => '👊🏿',
':qatar:' => '🇶🇦',
+ ':race-car:' => '🏎️',
':raised-back-of-hand-tone1:' => '🤚🏻',
':raised-back-of-hand-tone2:' => '🤚🏼',
':raised-back-of-hand-tone3:' => '🤚🏽',
@@ -2870,6 +2655,16 @@
':right-facing-fist-tone3:' => '🤜🏽',
':right-facing-fist-tone4:' => '🤜🏾',
':right-facing-fist-tone5:' => '🤜🏿',
+ ':rightwards-hand-dark-skin-tone:' => '🫱🏿',
+ ':rightwards-hand-light-skin-tone:' => '🫱🏻',
+ ':rightwards-hand-medium-dark-skin-tone:' => '🫱🏾',
+ ':rightwards-hand-medium-light-skin-tone:' => '🫱🏼',
+ ':rightwards-hand-medium-skin-tone:' => '🫱🏽',
+ ':rightwards-pushing-hand-dark-skin-tone:' => '🫸🏿',
+ ':rightwards-pushing-hand-light-skin-tone:' => '🫸🏻',
+ ':rightwards-pushing-hand-medium-dark-skin-tone:' => '🫸🏾',
+ ':rightwards-pushing-hand-medium-light-skin-tone:' => '🫸🏼',
+ ':rightwards-pushing-hand-medium-skin-tone:' => '🫸🏽',
':romania:' => '🇷🇴',
':rowboat-tone1:' => '🚣🏻',
':rowboat-tone2:' => '🚣🏼',
@@ -2890,6 +2685,7 @@
':santa-tone4:' => '🎅🏾',
':santa-tone5:' => '🎅🏿',
':sao-tome-principe:' => '🇸🇹',
+ ':satellite-orbital:' => '🛰️',
':saudi-arabia:' => '🇸🇦',
':selfie-tone1:' => '🤳🏻',
':selfie-tone2:' => '🤳🏼',
@@ -2909,13 +2705,22 @@
':singapore:' => '🇸🇬',
':sint-maarten:' => '🇸🇽',
':six:' => '6️⃣',
+ ':skull-crossbones:' => '☠️',
':slovakia:' => '🇸🇰',
':slovenia:' => '🇸🇮',
+ ':snowboarder-dark-skin-tone:' => '🏂🏿',
+ ':snowboarder-light-skin-tone:' => '🏂🏻',
+ ':snowboarder-medium-dark-skin-tone:' => '🏂🏾',
+ ':snowboarder-medium-light-skin-tone:' => '🏂🏼',
+ ':snowboarder-medium-skin-tone:' => '🏂🏽',
+ ':snowman2:' => '☃️',
':solomon-islands:' => '🇸🇧',
':somalia:' => '🇸🇴',
':south-africa:' => '🇿🇦',
':south-georgia-south-sandwich-islands:' => '🇬🇸',
':south-sudan:' => '🇸🇸',
+ ':speech-left:' => '🗨️',
+ ':spy:' => '🕵️',
':spy-tone1:' => '🕵🏻',
':spy-tone2:' => '🕵🏼',
':spy-tone3:' => '🕵🏽',
@@ -2930,6 +2735,16 @@
':st-pierre-miquelon:' => '🇵🇲',
':st-vincent-grenadines:' => '🇻🇨',
':sudan:' => '🇸🇩',
+ ':superhero-dark-skin-tone:' => '🦸🏿',
+ ':superhero-light-skin-tone:' => '🦸🏻',
+ ':superhero-medium-dark-skin-tone:' => '🦸🏾',
+ ':superhero-medium-light-skin-tone:' => '🦸🏼',
+ ':superhero-medium-skin-tone:' => '🦸🏽',
+ ':supervillain-dark-skin-tone:' => '🦹🏿',
+ ':supervillain-light-skin-tone:' => '🦹🏻',
+ ':supervillain-medium-dark-skin-tone:' => '🦹🏾',
+ ':supervillain-medium-light-skin-tone:' => '🦹🏼',
+ ':supervillain-medium-skin-tone:' => '🦹🏽',
':surfer-tone1:' => '🏄🏻',
':surfer-tone2:' => '🏄🏼',
':surfer-tone3:' => '🏄🏽',
@@ -2961,19 +2776,29 @@
':thumbsup-tone3:' => '👍🏽',
':thumbsup-tone4:' => '👍🏾',
':thumbsup-tone5:' => '👍🏿',
+ ':thunder-cloud-rain:' => '⛈️',
+ ':timer:' => '⏲️',
':timor-leste:' => '🇹🇱',
':togo:' => '🇹🇬',
':tokelau:' => '🇹🇰',
':tonga:' => '🇹🇴',
+ ':tools:' => '🛠️',
+ ':tr:' => '🇹🇷',
+ ':track-next:' => '⏭️',
+ ':track-previous:' => '⏮️',
':trinidad-tobago:' => '🇹🇹',
':tristan-da-cunha:' => '🇹🇦',
':tunisia:' => '🇹🇳',
+ ':turkmenistan:' => '🇹🇲',
':turks-caicos-islands:' => '🇹🇨',
+ ':tuvalu:' => '🇹🇻',
':two:' => '2️⃣',
':uganda:' => '🇺🇬',
':ukraine:' => '🇺🇦',
+ ':umbrella2:' => '☂️',
':united-arab-emirates:' => '🇦🇪',
':united-nations:' => '🇺🇳',
+ ':urn:' => '⚱️',
':uruguay:' => '🇺🇾',
':us-outlying-islands:' => '🇺🇲',
':us-virgin-islands:' => '🇻🇮',
@@ -2983,6 +2808,11 @@
':v-tone3:' => '✌🏽',
':v-tone4:' => '✌🏾',
':v-tone5:' => '✌🏿',
+ ':vampire-dark-skin-tone:' => '🧛🏿',
+ ':vampire-light-skin-tone:' => '🧛🏻',
+ ':vampire-medium-dark-skin-tone:' => '🧛🏾',
+ ':vampire-medium-light-skin-tone:' => '🧛🏼',
+ ':vampire-medium-skin-tone:' => '🧛🏽',
':vanuatu:' => '🇻🇺',
':vatican-city:' => '🇻🇦',
':venezuela:' => '🇻🇪',
@@ -3009,16 +2839,29 @@
':wave-tone4:' => '👋🏾',
':wave-tone5:' => '👋🏿',
':western-sahara:' => '🇪🇭',
+ ':white-sun-cloud:' => '🌥️',
+ ':white-sun-rain-cloud:' => '🌦️',
+ ':white-sun-small-cloud:' => '🌤️',
+ ':woman-and-man-holding-hands-dark-skin-tone:' => '👫🏿',
+ ':woman-and-man-holding-hands-light-skin-tone:' => '👫🏻',
+ ':woman-and-man-holding-hands-medium-dark-skin-tone:' => '👫🏾',
+ ':woman-and-man-holding-hands-medium-light-skin-tone:' => '👫🏼',
+ ':woman-and-man-holding-hands-medium-skin-tone:' => '👫🏽',
':woman-tone1:' => '👩🏻',
':woman-tone2:' => '👩🏼',
':woman-tone3:' => '👩🏽',
':woman-tone4:' => '👩🏾',
':woman-tone5:' => '👩🏿',
- ':wrestlers-tone1:' => '🤼🏻',
- ':wrestlers-tone2:' => '🤼🏼',
- ':wrestlers-tone3:' => '🤼🏽',
- ':wrestlers-tone4:' => '🤼🏾',
- ':wrestlers-tone5:' => '🤼🏿',
+ ':woman-with-headscarf-dark-skin-tone:' => '🧕🏿',
+ ':woman-with-headscarf-light-skin-tone:' => '🧕🏻',
+ ':woman-with-headscarf-medium-dark-skin-tone:' => '🧕🏾',
+ ':woman-with-headscarf-medium-light-skin-tone:' => '🧕🏼',
+ ':woman-with-headscarf-medium-skin-tone:' => '🧕🏽',
+ ':women-holding-hands-dark-skin-tone:' => '👭🏿',
+ ':women-holding-hands-light-skin-tone:' => '👭🏻',
+ ':women-holding-hands-medium-dark-skin-tone:' => '👭🏾',
+ ':women-holding-hands-medium-light-skin-tone:' => '👭🏼',
+ ':women-holding-hands-medium-skin-tone:' => '👭🏽',
':writing-hand-tone1:' => '✍🏻',
':writing-hand-tone2:' => '✍🏼',
':writing-hand-tone3:' => '✍🏽',
@@ -3127,7 +2970,6 @@
':deaf-woman:' => '🧏♀️',
':elf-man:' => '🧝♂',
':elf-woman:' => '🧝♀',
- ':eye-in-speech-bubble:' => '👁️🗨️',
':eye-speech-bubble:' => '👁🗨',
':face-in-clouds:' => '😶🌫️',
':fairy-man:' => '🧚♂',
@@ -3158,31 +3000,37 @@
':male-detective:' => '🕵️♂️',
':man-artist:' => '👨🎨',
':man-astronaut:' => '👨🚀',
- ':man-beard:' => '🧔♂',
+ ':man-bald:' => '👨🦲',
+ ':man-beard:' => '🧔♂️',
':man-cartwheeling:' => '🤸♂️',
':man-cook:' => '👨🍳',
+ ':man-curly-hair:' => '👨🦱',
':man-facepalming:' => '🤦♂️',
':man-factory-worker:' => '👨🏭',
':man-farmer:' => '👨🌾',
':man-firefighter:' => '👨🚒',
- ':man-health-worker:' => '👨⚕',
- ':man-judge:' => '👨⚖',
+ ':man-health-worker:' => '👨⚕️',
+ ':man-in-tuxedo:' => '🤵♂️',
+ ':man-judge:' => '👨⚖️',
':man-juggling:' => '🤹♂️',
':man-mechanic:' => '👨🔧',
':man-office-worker:' => '👨💼',
- ':man-pilot:' => '👨✈',
+ ':man-pilot:' => '👨✈️',
':man-playing-handball:' => '🤾♂️',
':man-playing-water-polo:' => '🤽♂️',
+ ':man-red-hair:' => '👨🦰',
':man-scientist:' => '👨🔬',
':man-shrugging:' => '🤷♂️',
':man-singer:' => '👨🎤',
':man-student:' => '👨🎓',
':man-teacher:' => '👨🏫',
':man-technologist:' => '👨💻',
+ ':man-white-hair:' => '👨🦳',
':man-with-veil:' => '👰♂️',
+ ':man-with-white-cane:' => '👨🦯',
':massage-man:' => '💆♂',
':massage-woman:' => '💆♀',
- ':men-wrestling:' => '🤼♂',
+ ':men-wrestling:' => '🤼♂️',
':mending-heart:' => '❤️🩹',
':mermaid:' => '🧜♀️',
':merman:' => '🧜♂️',
@@ -3197,6 +3045,7 @@
':person-curly-hair:' => '🧑🦱',
':person-red-hair:' => '🧑🦰',
':person-white-hair:' => '🧑🦳',
+ ':person-with-white-cane:' => '🧑🦯',
':pilot:' => '🧑✈️',
':pirate-flag:' => '🏴☠️',
':polar-bear:' => '🐻❄️',
@@ -3204,6 +3053,7 @@
':policewoman:' => '👮♀',
':pouting-man:' => '🙎♂',
':pouting-woman:' => '🙎♀',
+ ':rainbow-flag:' => '🏳️🌈',
':raising-hand-man:' => '🙋♂',
':raising-hand-woman:' => '🙋♀',
':rowing-man:' => '🚣♂',
@@ -3235,31 +3085,36 @@
':weight-lifting-woman:' => '🏋♀',
':woman-artist:' => '👩🎨',
':woman-astronaut:' => '👩🚀',
- ':woman-beard:' => '🧔♀',
+ ':woman-bald:' => '👩🦲',
+ ':woman-beard:' => '🧔♀️',
':woman-cartwheeling:' => '🤸♀️',
':woman-cook:' => '👩🍳',
+ ':woman-curly-hair:' => '👩🦱',
':woman-facepalming:' => '🤦♀️',
':woman-factory-worker:' => '👩🏭',
':woman-farmer:' => '👩🌾',
':woman-firefighter:' => '👩🚒',
- ':woman-health-worker:' => '👩⚕',
+ ':woman-health-worker:' => '👩⚕️',
':woman-in-tuxedo:' => '🤵♀️',
- ':woman-judge:' => '👩⚖',
+ ':woman-judge:' => '👩⚖️',
':woman-juggling:' => '🤹♀️',
':woman-mechanic:' => '👩🔧',
':woman-office-worker:' => '👩💼',
- ':woman-pilot:' => '👩✈',
+ ':woman-pilot:' => '👩✈️',
':woman-playing-handball:' => '🤾♀️',
':woman-playing-water-polo:' => '🤽♀️',
+ ':woman-red-hair:' => '👩🦰',
':woman-scientist:' => '👩🔬',
':woman-shrugging:' => '🤷♀️',
':woman-singer:' => '👩🎤',
':woman-student:' => '👩🎓',
':woman-teacher:' => '👩🏫',
':woman-technologist:' => '👩💻',
+ ':woman-white-hair:' => '👩🦳',
':woman-with-turban:' => '👳♀',
':woman-with-veil:' => '👰♀️',
- ':women-wrestling:' => '🤼♀',
+ ':woman-with-white-cane:' => '👩🦯',
+ ':women-wrestling:' => '🤼♀️',
':zombie-man:' => '🧟♂',
':zombie-woman:' => '🧟♀',
':broken-chain:' => '⛓️💥',
@@ -3348,6 +3203,354 @@
':woman-with-bunny-ears-partying:' => '👯♀️',
':woman-wrestling:' => '🤼♀️',
':women-with-bunny-ears-partying:' => '👯♀️',
+ ':artist-dark-skin-tone:' => '🧑🏿🎨',
+ ':artist-light-skin-tone:' => '🧑🏻🎨',
+ ':artist-medium-dark-skin-tone:' => '🧑🏾🎨',
+ ':artist-medium-light-skin-tone:' => '🧑🏼🎨',
+ ':artist-medium-skin-tone:' => '🧑🏽🎨',
+ ':astronaut-dark-skin-tone:' => '🧑🏿🚀',
+ ':astronaut-light-skin-tone:' => '🧑🏻🚀',
+ ':astronaut-medium-dark-skin-tone:' => '🧑🏾🚀',
+ ':astronaut-medium-light-skin-tone:' => '🧑🏼🚀',
+ ':astronaut-medium-skin-tone:' => '🧑🏽🚀',
+ ':cook-dark-skin-tone:' => '🧑🏿🍳',
+ ':cook-light-skin-tone:' => '🧑🏻🍳',
+ ':cook-medium-dark-skin-tone:' => '🧑🏾🍳',
+ ':cook-medium-light-skin-tone:' => '🧑🏼🍳',
+ ':cook-medium-skin-tone:' => '🧑🏽🍳',
+ ':factory-worker-dark-skin-tone:' => '🧑🏿🏭',
+ ':factory-worker-light-skin-tone:' => '🧑🏻🏭',
+ ':factory-worker-medium-dark-skin-tone:' => '🧑🏾🏭',
+ ':factory-worker-medium-light-skin-tone:' => '🧑🏼🏭',
+ ':factory-worker-medium-skin-tone:' => '🧑🏽🏭',
+ ':farmer-dark-skin-tone:' => '🧑🏿🌾',
+ ':farmer-light-skin-tone:' => '🧑🏻🌾',
+ ':farmer-medium-dark-skin-tone:' => '🧑🏾🌾',
+ ':farmer-medium-light-skin-tone:' => '🧑🏼🌾',
+ ':farmer-medium-skin-tone:' => '🧑🏽🌾',
+ ':firefighter-dark-skin-tone:' => '🧑🏿🚒',
+ ':firefighter-light-skin-tone:' => '🧑🏻🚒',
+ ':firefighter-medium-dark-skin-tone:' => '🧑🏾🚒',
+ ':firefighter-medium-light-skin-tone:' => '🧑🏼🚒',
+ ':firefighter-medium-skin-tone:' => '🧑🏽🚒',
+ ':gay-pride-flag:' => '🏳️🌈',
+ ':man-artist-dark-skin-tone:' => '👨🏿🎨',
+ ':man-artist-light-skin-tone:' => '👨🏻🎨',
+ ':man-artist-medium-dark-skin-tone:' => '👨🏾🎨',
+ ':man-artist-medium-light-skin-tone:' => '👨🏼🎨',
+ ':man-artist-medium-skin-tone:' => '👨🏽🎨',
+ ':man-astronaut-dark-skin-tone:' => '👨🏿🚀',
+ ':man-astronaut-light-skin-tone:' => '👨🏻🚀',
+ ':man-astronaut-medium-dark-skin-tone:' => '👨🏾🚀',
+ ':man-astronaut-medium-light-skin-tone:' => '👨🏼🚀',
+ ':man-astronaut-medium-skin-tone:' => '👨🏽🚀',
+ ':man-blond-hair:' => '👱♂️',
+ ':man-construction-worker:' => '👷♂️',
+ ':man-cook-dark-skin-tone:' => '👨🏿🍳',
+ ':man-cook-light-skin-tone:' => '👨🏻🍳',
+ ':man-cook-medium-dark-skin-tone:' => '👨🏾🍳',
+ ':man-cook-medium-light-skin-tone:' => '👨🏼🍳',
+ ':man-cook-medium-skin-tone:' => '👨🏽🍳',
+ ':man-dark-skin-tone-bald:' => '👨🏿🦲',
+ ':man-dark-skin-tone-curly-hair:' => '👨🏿🦱',
+ ':man-dark-skin-tone-red-hair:' => '👨🏿🦰',
+ ':man-dark-skin-tone-white-hair:' => '👨🏿🦳',
+ ':man-elf:' => '🧝♂️',
+ ':man-factory-worker-dark-skin-tone:' => '👨🏿🏭',
+ ':man-factory-worker-light-skin-tone:' => '👨🏻🏭',
+ ':man-factory-worker-medium-dark-skin-tone:' => '👨🏾🏭',
+ ':man-factory-worker-medium-light-skin-tone:' => '👨🏼🏭',
+ ':man-factory-worker-medium-skin-tone:' => '👨🏽🏭',
+ ':man-fairy:' => '🧚♂️',
+ ':man-farmer-dark-skin-tone:' => '👨🏿🌾',
+ ':man-farmer-light-skin-tone:' => '👨🏻🌾',
+ ':man-farmer-medium-dark-skin-tone:' => '👨🏾🌾',
+ ':man-farmer-medium-light-skin-tone:' => '👨🏼🌾',
+ ':man-farmer-medium-skin-tone:' => '👨🏽🌾',
+ ':man-feeding-baby-dark-skin-tone:' => '👨🏿🍼',
+ ':man-feeding-baby-light-skin-tone:' => '👨🏻🍼',
+ ':man-feeding-baby-medium-dark-skin-tone:' => '👨🏾🍼',
+ ':man-feeding-baby-medium-light-skin-tone:' => '👨🏼🍼',
+ ':man-feeding-baby-medium-skin-tone:' => '👨🏽🍼',
+ ':man-firefighter-dark-skin-tone:' => '👨🏿🚒',
+ ':man-firefighter-light-skin-tone:' => '👨🏻🚒',
+ ':man-firefighter-medium-dark-skin-tone:' => '👨🏾🚒',
+ ':man-firefighter-medium-light-skin-tone:' => '👨🏼🚒',
+ ':man-firefighter-medium-skin-tone:' => '👨🏽🚒',
+ ':man-genie:' => '🧞♂️',
+ ':man-guard:' => '💂♂️',
+ ':man-in-manual-wheelchair-dark-skin-tone:' => '👨🏿🦽',
+ ':man-in-manual-wheelchair-light-skin-tone:' => '👨🏻🦽',
+ ':man-in-manual-wheelchair-medium-dark-skin-tone:' => '👨🏾🦽',
+ ':man-in-manual-wheelchair-medium-light-skin-tone:' => '👨🏼🦽',
+ ':man-in-manual-wheelchair-medium-skin-tone:' => '👨🏽🦽',
+ ':man-in-motorized-wheelchair-dark-skin-tone:' => '👨🏿🦼',
+ ':man-in-motorized-wheelchair-light-skin-tone:' => '👨🏻🦼',
+ ':man-in-motorized-wheelchair-medium-dark-skin-tone:' => '👨🏾🦼',
+ ':man-in-motorized-wheelchair-medium-light-skin-tone:' => '👨🏼🦼',
+ ':man-in-motorized-wheelchair-medium-skin-tone:' => '👨🏽🦼',
+ ':man-light-skin-tone-bald:' => '👨🏻🦲',
+ ':man-light-skin-tone-curly-hair:' => '👨🏻🦱',
+ ':man-light-skin-tone-red-hair:' => '👨🏻🦰',
+ ':man-light-skin-tone-white-hair:' => '👨🏻🦳',
+ ':man-mage:' => '🧙♂️',
+ ':man-mechanic-dark-skin-tone:' => '👨🏿🔧',
+ ':man-mechanic-light-skin-tone:' => '👨🏻🔧',
+ ':man-mechanic-medium-dark-skin-tone:' => '👨🏾🔧',
+ ':man-mechanic-medium-light-skin-tone:' => '👨🏼🔧',
+ ':man-mechanic-medium-skin-tone:' => '👨🏽🔧',
+ ':man-medium-dark-skin-tone-bald:' => '👨🏾🦲',
+ ':man-medium-dark-skin-tone-curly-hair:' => '👨🏾🦱',
+ ':man-medium-dark-skin-tone-red-hair:' => '👨🏾🦰',
+ ':man-medium-dark-skin-tone-white-hair:' => '👨🏾🦳',
+ ':man-medium-light-skin-tone-bald:' => '👨🏼🦲',
+ ':man-medium-light-skin-tone-curly-hair:' => '👨🏼🦱',
+ ':man-medium-light-skin-tone-red-hair:' => '👨🏼🦰',
+ ':man-medium-light-skin-tone-white-hair:' => '👨🏼🦳',
+ ':man-medium-skin-tone-bald:' => '👨🏽🦲',
+ ':man-medium-skin-tone-curly-hair:' => '👨🏽🦱',
+ ':man-medium-skin-tone-red-hair:' => '👨🏽🦰',
+ ':man-medium-skin-tone-white-hair:' => '👨🏽🦳',
+ ':man-office-worker-dark-skin-tone:' => '👨🏿💼',
+ ':man-office-worker-light-skin-tone:' => '👨🏻💼',
+ ':man-office-worker-medium-dark-skin-tone:' => '👨🏾💼',
+ ':man-office-worker-medium-light-skin-tone:' => '👨🏼💼',
+ ':man-office-worker-medium-skin-tone:' => '👨🏽💼',
+ ':man-police-officer:' => '👮♂️',
+ ':man-scientist-dark-skin-tone:' => '👨🏿🔬',
+ ':man-scientist-light-skin-tone:' => '👨🏻🔬',
+ ':man-scientist-medium-dark-skin-tone:' => '👨🏾🔬',
+ ':man-scientist-medium-light-skin-tone:' => '👨🏼🔬',
+ ':man-scientist-medium-skin-tone:' => '👨🏽🔬',
+ ':man-singer-dark-skin-tone:' => '👨🏿🎤',
+ ':man-singer-light-skin-tone:' => '👨🏻🎤',
+ ':man-singer-medium-dark-skin-tone:' => '👨🏾🎤',
+ ':man-singer-medium-light-skin-tone:' => '👨🏼🎤',
+ ':man-singer-medium-skin-tone:' => '👨🏽🎤',
+ ':man-student-dark-skin-tone:' => '👨🏿🎓',
+ ':man-student-light-skin-tone:' => '👨🏻🎓',
+ ':man-student-medium-dark-skin-tone:' => '👨🏾🎓',
+ ':man-student-medium-light-skin-tone:' => '👨🏼🎓',
+ ':man-student-medium-skin-tone:' => '👨🏽🎓',
+ ':man-superhero:' => '🦸♂️',
+ ':man-supervillain:' => '🦹♂️',
+ ':man-teacher-dark-skin-tone:' => '👨🏿🏫',
+ ':man-teacher-light-skin-tone:' => '👨🏻🏫',
+ ':man-teacher-medium-dark-skin-tone:' => '👨🏾🏫',
+ ':man-teacher-medium-light-skin-tone:' => '👨🏼🏫',
+ ':man-teacher-medium-skin-tone:' => '👨🏽🏫',
+ ':man-technologist-dark-skin-tone:' => '👨🏿💻',
+ ':man-technologist-light-skin-tone:' => '👨🏻💻',
+ ':man-technologist-medium-dark-skin-tone:' => '👨🏾💻',
+ ':man-technologist-medium-light-skin-tone:' => '👨🏼💻',
+ ':man-technologist-medium-skin-tone:' => '👨🏽💻',
+ ':man-vampire:' => '🧛♂️',
+ ':man-with-white-cane-dark-skin-tone:' => '👨🏿🦯',
+ ':man-with-white-cane-light-skin-tone:' => '👨🏻🦯',
+ ':man-with-white-cane-medium-dark-skin-tone:' => '👨🏾🦯',
+ ':man-with-white-cane-medium-light-skin-tone:' => '👨🏼🦯',
+ ':man-with-white-cane-medium-skin-tone:' => '👨🏽🦯',
+ ':man-zombie:' => '🧟♂️',
+ ':mechanic-dark-skin-tone:' => '🧑🏿🔧',
+ ':mechanic-light-skin-tone:' => '🧑🏻🔧',
+ ':mechanic-medium-dark-skin-tone:' => '🧑🏾🔧',
+ ':mechanic-medium-light-skin-tone:' => '🧑🏼🔧',
+ ':mechanic-medium-skin-tone:' => '🧑🏽🔧',
+ ':men-with-bunny-ears:' => '👯♂️',
+ ':mx-claus-dark-skin-tone:' => '🧑🏿🎄',
+ ':mx-claus-light-skin-tone:' => '🧑🏻🎄',
+ ':mx-claus-medium-dark-skin-tone:' => '🧑🏾🎄',
+ ':mx-claus-medium-light-skin-tone:' => '🧑🏼🎄',
+ ':mx-claus-medium-skin-tone:' => '🧑🏽🎄',
+ ':office-worker-dark-skin-tone:' => '🧑🏿💼',
+ ':office-worker-light-skin-tone:' => '🧑🏻💼',
+ ':office-worker-medium-dark-skin-tone:' => '🧑🏾💼',
+ ':office-worker-medium-light-skin-tone:' => '🧑🏼💼',
+ ':office-worker-medium-skin-tone:' => '🧑🏽💼',
+ ':person-dark-skin-tone-bald:' => '🧑🏿🦲',
+ ':person-dark-skin-tone-curly-hair:' => '🧑🏿🦱',
+ ':person-dark-skin-tone-red-hair:' => '🧑🏿🦰',
+ ':person-dark-skin-tone-white-hair:' => '🧑🏿🦳',
+ ':person-feeding-baby-dark-skin-tone:' => '🧑🏿🍼',
+ ':person-feeding-baby-light-skin-tone:' => '🧑🏻🍼',
+ ':person-feeding-baby-medium-dark-skin-tone:' => '🧑🏾🍼',
+ ':person-feeding-baby-medium-light-skin-tone:' => '🧑🏼🍼',
+ ':person-feeding-baby-medium-skin-tone:' => '🧑🏽🍼',
+ ':person-in-manual-wheelchair-dark-skin-tone:' => '🧑🏿🦽',
+ ':person-in-manual-wheelchair-light-skin-tone:' => '🧑🏻🦽',
+ ':person-in-manual-wheelchair-medium-dark-skin-tone:' => '🧑🏾🦽',
+ ':person-in-manual-wheelchair-medium-light-skin-tone:' => '🧑🏼🦽',
+ ':person-in-manual-wheelchair-medium-skin-tone:' => '🧑🏽🦽',
+ ':person-in-motorized-wheelchair-dark-skin-tone:' => '🧑🏿🦼',
+ ':person-in-motorized-wheelchair-light-skin-tone:' => '🧑🏻🦼',
+ ':person-in-motorized-wheelchair-medium-dark-skin-tone:' => '🧑🏾🦼',
+ ':person-in-motorized-wheelchair-medium-light-skin-tone:' => '🧑🏼🦼',
+ ':person-in-motorized-wheelchair-medium-skin-tone:' => '🧑🏽🦼',
+ ':person-light-skin-tone-bald:' => '🧑🏻🦲',
+ ':person-light-skin-tone-curly-hair:' => '🧑🏻🦱',
+ ':person-light-skin-tone-red-hair:' => '🧑🏻🦰',
+ ':person-light-skin-tone-white-hair:' => '🧑🏻🦳',
+ ':person-medium-dark-skin-tone-bald:' => '🧑🏾🦲',
+ ':person-medium-dark-skin-tone-curly-hair:' => '🧑🏾🦱',
+ ':person-medium-dark-skin-tone-red-hair:' => '🧑🏾🦰',
+ ':person-medium-dark-skin-tone-white-hair:' => '🧑🏾🦳',
+ ':person-medium-light-skin-tone-bald:' => '🧑🏼🦲',
+ ':person-medium-light-skin-tone-curly-hair:' => '🧑🏼🦱',
+ ':person-medium-light-skin-tone-red-hair:' => '🧑🏼🦰',
+ ':person-medium-light-skin-tone-white-hair:' => '🧑🏼🦳',
+ ':person-medium-skin-tone-bald:' => '🧑🏽🦲',
+ ':person-medium-skin-tone-curly-hair:' => '🧑🏽🦱',
+ ':person-medium-skin-tone-red-hair:' => '🧑🏽🦰',
+ ':person-medium-skin-tone-white-hair:' => '🧑🏽🦳',
+ ':person-with-white-cane-dark-skin-tone:' => '🧑🏿🦯',
+ ':person-with-white-cane-light-skin-tone:' => '🧑🏻🦯',
+ ':person-with-white-cane-medium-dark-skin-tone:' => '🧑🏾🦯',
+ ':person-with-white-cane-medium-light-skin-tone:' => '🧑🏼🦯',
+ ':person-with-white-cane-medium-skin-tone:' => '🧑🏽🦯',
+ ':scientist-dark-skin-tone:' => '🧑🏿🔬',
+ ':scientist-light-skin-tone:' => '🧑🏻🔬',
+ ':scientist-medium-dark-skin-tone:' => '🧑🏾🔬',
+ ':scientist-medium-light-skin-tone:' => '🧑🏼🔬',
+ ':scientist-medium-skin-tone:' => '🧑🏽🔬',
+ ':singer-dark-skin-tone:' => '🧑🏿🎤',
+ ':singer-light-skin-tone:' => '🧑🏻🎤',
+ ':singer-medium-dark-skin-tone:' => '🧑🏾🎤',
+ ':singer-medium-light-skin-tone:' => '🧑🏼🎤',
+ ':singer-medium-skin-tone:' => '🧑🏽🎤',
+ ':student-dark-skin-tone:' => '🧑🏿🎓',
+ ':student-light-skin-tone:' => '🧑🏻🎓',
+ ':student-medium-dark-skin-tone:' => '🧑🏾🎓',
+ ':student-medium-light-skin-tone:' => '🧑🏼🎓',
+ ':student-medium-skin-tone:' => '🧑🏽🎓',
+ ':teacher-dark-skin-tone:' => '🧑🏿🏫',
+ ':teacher-light-skin-tone:' => '🧑🏻🏫',
+ ':teacher-medium-dark-skin-tone:' => '🧑🏾🏫',
+ ':teacher-medium-light-skin-tone:' => '🧑🏼🏫',
+ ':teacher-medium-skin-tone:' => '🧑🏽🏫',
+ ':technologist-dark-skin-tone:' => '🧑🏿💻',
+ ':technologist-light-skin-tone:' => '🧑🏻💻',
+ ':technologist-medium-dark-skin-tone:' => '🧑🏾💻',
+ ':technologist-medium-light-skin-tone:' => '🧑🏼💻',
+ ':technologist-medium-skin-tone:' => '🧑🏽💻',
+ ':woman-artist-dark-skin-tone:' => '👩🏿🎨',
+ ':woman-artist-light-skin-tone:' => '👩🏻🎨',
+ ':woman-artist-medium-dark-skin-tone:' => '👩🏾🎨',
+ ':woman-artist-medium-light-skin-tone:' => '👩🏼🎨',
+ ':woman-artist-medium-skin-tone:' => '👩🏽🎨',
+ ':woman-astronaut-dark-skin-tone:' => '👩🏿🚀',
+ ':woman-astronaut-light-skin-tone:' => '👩🏻🚀',
+ ':woman-astronaut-medium-dark-skin-tone:' => '👩🏾🚀',
+ ':woman-astronaut-medium-light-skin-tone:' => '👩🏼🚀',
+ ':woman-astronaut-medium-skin-tone:' => '👩🏽🚀',
+ ':woman-blond-hair:' => '👱♀️',
+ ':woman-construction-worker:' => '👷♀️',
+ ':woman-cook-dark-skin-tone:' => '👩🏿🍳',
+ ':woman-cook-light-skin-tone:' => '👩🏻🍳',
+ ':woman-cook-medium-dark-skin-tone:' => '👩🏾🍳',
+ ':woman-cook-medium-light-skin-tone:' => '👩🏼🍳',
+ ':woman-cook-medium-skin-tone:' => '👩🏽🍳',
+ ':woman-dark-skin-tone-bald:' => '👩🏿🦲',
+ ':woman-dark-skin-tone-curly-hair:' => '👩🏿🦱',
+ ':woman-dark-skin-tone-red-hair:' => '👩🏿🦰',
+ ':woman-dark-skin-tone-white-hair:' => '👩🏿🦳',
+ ':woman-elf:' => '🧝♀️',
+ ':woman-factory-worker-dark-skin-tone:' => '👩🏿🏭',
+ ':woman-factory-worker-light-skin-tone:' => '👩🏻🏭',
+ ':woman-factory-worker-medium-dark-skin-tone:' => '👩🏾🏭',
+ ':woman-factory-worker-medium-light-skin-tone:' => '👩🏼🏭',
+ ':woman-factory-worker-medium-skin-tone:' => '👩🏽🏭',
+ ':woman-fairy:' => '🧚♀️',
+ ':woman-farmer-dark-skin-tone:' => '👩🏿🌾',
+ ':woman-farmer-light-skin-tone:' => '👩🏻🌾',
+ ':woman-farmer-medium-dark-skin-tone:' => '👩🏾🌾',
+ ':woman-farmer-medium-light-skin-tone:' => '👩🏼🌾',
+ ':woman-farmer-medium-skin-tone:' => '👩🏽🌾',
+ ':woman-feeding-baby-dark-skin-tone:' => '👩🏿🍼',
+ ':woman-feeding-baby-light-skin-tone:' => '👩🏻🍼',
+ ':woman-feeding-baby-medium-dark-skin-tone:' => '👩🏾🍼',
+ ':woman-feeding-baby-medium-light-skin-tone:' => '👩🏼🍼',
+ ':woman-feeding-baby-medium-skin-tone:' => '👩🏽🍼',
+ ':woman-firefighter-dark-skin-tone:' => '👩🏿🚒',
+ ':woman-firefighter-light-skin-tone:' => '👩🏻🚒',
+ ':woman-firefighter-medium-dark-skin-tone:' => '👩🏾🚒',
+ ':woman-firefighter-medium-light-skin-tone:' => '👩🏼🚒',
+ ':woman-firefighter-medium-skin-tone:' => '👩🏽🚒',
+ ':woman-genie:' => '🧞♀️',
+ ':woman-guard:' => '💂♀️',
+ ':woman-in-manual-wheelchair-dark-skin-tone:' => '👩🏿🦽',
+ ':woman-in-manual-wheelchair-light-skin-tone:' => '👩🏻🦽',
+ ':woman-in-manual-wheelchair-medium-dark-skin-tone:' => '👩🏾🦽',
+ ':woman-in-manual-wheelchair-medium-light-skin-tone:' => '👩🏼🦽',
+ ':woman-in-manual-wheelchair-medium-skin-tone:' => '👩🏽🦽',
+ ':woman-in-motorized-wheelchair-dark-skin-tone:' => '👩🏿🦼',
+ ':woman-in-motorized-wheelchair-light-skin-tone:' => '👩🏻🦼',
+ ':woman-in-motorized-wheelchair-medium-dark-skin-tone:' => '👩🏾🦼',
+ ':woman-in-motorized-wheelchair-medium-light-skin-tone:' => '👩🏼🦼',
+ ':woman-in-motorized-wheelchair-medium-skin-tone:' => '👩🏽🦼',
+ ':woman-light-skin-tone-bald:' => '👩🏻🦲',
+ ':woman-light-skin-tone-curly-hair:' => '👩🏻🦱',
+ ':woman-light-skin-tone-red-hair:' => '👩🏻🦰',
+ ':woman-light-skin-tone-white-hair:' => '👩🏻🦳',
+ ':woman-mage:' => '🧙♀️',
+ ':woman-mechanic-dark-skin-tone:' => '👩🏿🔧',
+ ':woman-mechanic-light-skin-tone:' => '👩🏻🔧',
+ ':woman-mechanic-medium-dark-skin-tone:' => '👩🏾🔧',
+ ':woman-mechanic-medium-light-skin-tone:' => '👩🏼🔧',
+ ':woman-mechanic-medium-skin-tone:' => '👩🏽🔧',
+ ':woman-medium-dark-skin-tone-bald:' => '👩🏾🦲',
+ ':woman-medium-dark-skin-tone-curly-hair:' => '👩🏾🦱',
+ ':woman-medium-dark-skin-tone-red-hair:' => '👩🏾🦰',
+ ':woman-medium-dark-skin-tone-white-hair:' => '👩🏾🦳',
+ ':woman-medium-light-skin-tone-bald:' => '👩🏼🦲',
+ ':woman-medium-light-skin-tone-curly-hair:' => '👩🏼🦱',
+ ':woman-medium-light-skin-tone-red-hair:' => '👩🏼🦰',
+ ':woman-medium-light-skin-tone-white-hair:' => '👩🏼🦳',
+ ':woman-medium-skin-tone-bald:' => '👩🏽🦲',
+ ':woman-medium-skin-tone-curly-hair:' => '👩🏽🦱',
+ ':woman-medium-skin-tone-red-hair:' => '👩🏽🦰',
+ ':woman-medium-skin-tone-white-hair:' => '👩🏽🦳',
+ ':woman-office-worker-dark-skin-tone:' => '👩🏿💼',
+ ':woman-office-worker-light-skin-tone:' => '👩🏻💼',
+ ':woman-office-worker-medium-dark-skin-tone:' => '👩🏾💼',
+ ':woman-office-worker-medium-light-skin-tone:' => '👩🏼💼',
+ ':woman-office-worker-medium-skin-tone:' => '👩🏽💼',
+ ':woman-police-officer:' => '👮♀️',
+ ':woman-scientist-dark-skin-tone:' => '👩🏿🔬',
+ ':woman-scientist-light-skin-tone:' => '👩🏻🔬',
+ ':woman-scientist-medium-dark-skin-tone:' => '👩🏾🔬',
+ ':woman-scientist-medium-light-skin-tone:' => '👩🏼🔬',
+ ':woman-scientist-medium-skin-tone:' => '👩🏽🔬',
+ ':woman-singer-dark-skin-tone:' => '👩🏿🎤',
+ ':woman-singer-light-skin-tone:' => '👩🏻🎤',
+ ':woman-singer-medium-dark-skin-tone:' => '👩🏾🎤',
+ ':woman-singer-medium-light-skin-tone:' => '👩🏼🎤',
+ ':woman-singer-medium-skin-tone:' => '👩🏽🎤',
+ ':woman-student-dark-skin-tone:' => '👩🏿🎓',
+ ':woman-student-light-skin-tone:' => '👩🏻🎓',
+ ':woman-student-medium-dark-skin-tone:' => '👩🏾🎓',
+ ':woman-student-medium-light-skin-tone:' => '👩🏼🎓',
+ ':woman-student-medium-skin-tone:' => '👩🏽🎓',
+ ':woman-superhero:' => '🦸♀️',
+ ':woman-supervillain:' => '🦹♀️',
+ ':woman-teacher-dark-skin-tone:' => '👩🏿🏫',
+ ':woman-teacher-light-skin-tone:' => '👩🏻🏫',
+ ':woman-teacher-medium-dark-skin-tone:' => '👩🏾🏫',
+ ':woman-teacher-medium-light-skin-tone:' => '👩🏼🏫',
+ ':woman-teacher-medium-skin-tone:' => '👩🏽🏫',
+ ':woman-technologist-dark-skin-tone:' => '👩🏿💻',
+ ':woman-technologist-light-skin-tone:' => '👩🏻💻',
+ ':woman-technologist-medium-dark-skin-tone:' => '👩🏾💻',
+ ':woman-technologist-medium-light-skin-tone:' => '👩🏼💻',
+ ':woman-technologist-medium-skin-tone:' => '👩🏽💻',
+ ':woman-vampire:' => '🧛♀️',
+ ':woman-with-white-cane-dark-skin-tone:' => '👩🏿🦯',
+ ':woman-with-white-cane-light-skin-tone:' => '👩🏻🦯',
+ ':woman-with-white-cane-medium-dark-skin-tone:' => '👩🏾🦯',
+ ':woman-with-white-cane-medium-light-skin-tone:' => '👩🏼🦯',
+ ':woman-with-white-cane-medium-skin-tone:' => '👩🏽🦯',
+ ':woman-zombie:' => '🧟♀️',
+ ':women-with-bunny-ears:' => '👯♀️',
+ ':eye-in-speech-bubble:' => '👁️🗨️',
':family-adult-adult-child:' => '🧑🧑🧒',
':family-adult-child-child:' => '🧑🧒🧒',
':man-bouncing-ball:' => '⛹️♂️',
@@ -3370,8 +3573,18 @@
':woman-woman-boy:' => '👩👩👦',
':woman-woman-girl:' => '👩👩👧',
':couple-with-heart-man-man:' => '👨❤👨',
- ':couple-with-heart-woman-man:' => '👩❤👨',
+ ':couple-with-heart-woman-man:' => '👩❤️👨',
':couple-with-heart-woman-woman:' => '👩❤👩',
+ ':deaf-man-dark-skin-tone:' => '🧏🏿♂️',
+ ':deaf-man-light-skin-tone:' => '🧏🏻♂️',
+ ':deaf-man-medium-dark-skin-tone:' => '🧏🏾♂️',
+ ':deaf-man-medium-light-skin-tone:' => '🧏🏼♂️',
+ ':deaf-man-medium-skin-tone:' => '🧏🏽♂️',
+ ':deaf-woman-dark-skin-tone:' => '🧏🏿♀️',
+ ':deaf-woman-light-skin-tone:' => '🧏🏻♀️',
+ ':deaf-woman-medium-dark-skin-tone:' => '🧏🏾♀️',
+ ':deaf-woman-medium-light-skin-tone:' => '🧏🏼♀️',
+ ':deaf-woman-medium-skin-tone:' => '🧏🏽♀️',
':family-man-boy-boy:' => '👨👦👦',
':family-man-girl-boy:' => '👨👧👦',
':family-man-girl-girl:' => '👨👧👧',
@@ -3389,8 +3602,548 @@
':family-woman-woman-girl:' => '👩👩👧',
':family-wwb:' => '👩👩👦',
':family-wwg:' => '👩👩👧',
- ':couple-with-heart-mm:' => '👨❤️👨',
- ':couple-with-heart-ww:' => '👩❤️👩',
+ ':handshake-dark-skin-tone-light-skin-tone:' => '🫱🏿🫲🏻',
+ ':handshake-dark-skin-tone-medium-dark-skin-tone:' => '🫱🏿🫲🏾',
+ ':handshake-dark-skin-tone-medium-light-skin-tone:' => '🫱🏿🫲🏼',
+ ':handshake-dark-skin-tone-medium-skin-tone:' => '🫱🏿🫲🏽',
+ ':handshake-light-skin-tone-dark-skin-tone:' => '🫱🏻🫲🏿',
+ ':handshake-light-skin-tone-medium-dark-skin-tone:' => '🫱🏻🫲🏾',
+ ':handshake-light-skin-tone-medium-light-skin-tone:' => '🫱🏻🫲🏼',
+ ':handshake-light-skin-tone-medium-skin-tone:' => '🫱🏻🫲🏽',
+ ':handshake-medium-dark-skin-tone-dark-skin-tone:' => '🫱🏾🫲🏿',
+ ':handshake-medium-dark-skin-tone-light-skin-tone:' => '🫱🏾🫲🏻',
+ ':handshake-medium-dark-skin-tone-medium-light-skin-tone:' => '🫱🏾🫲🏼',
+ ':handshake-medium-dark-skin-tone-medium-skin-tone:' => '🫱🏾🫲🏽',
+ ':handshake-medium-light-skin-tone-dark-skin-tone:' => '🫱🏼🫲🏿',
+ ':handshake-medium-light-skin-tone-light-skin-tone:' => '🫱🏼🫲🏻',
+ ':handshake-medium-light-skin-tone-medium-dark-skin-tone:' => '🫱🏼🫲🏾',
+ ':handshake-medium-light-skin-tone-medium-skin-tone:' => '🫱🏼🫲🏽',
+ ':handshake-medium-skin-tone-dark-skin-tone:' => '🫱🏽🫲🏿',
+ ':handshake-medium-skin-tone-light-skin-tone:' => '🫱🏽🫲🏻',
+ ':handshake-medium-skin-tone-medium-dark-skin-tone:' => '🫱🏽🫲🏾',
+ ':handshake-medium-skin-tone-medium-light-skin-tone:' => '🫱🏽🫲🏼',
+ ':health-worker-dark-skin-tone:' => '🧑🏿⚕️',
+ ':health-worker-light-skin-tone:' => '🧑🏻⚕️',
+ ':health-worker-medium-dark-skin-tone:' => '🧑🏾⚕️',
+ ':health-worker-medium-light-skin-tone:' => '🧑🏼⚕️',
+ ':health-worker-medium-skin-tone:' => '🧑🏽⚕️',
+ ':judge-dark-skin-tone:' => '🧑🏿⚖️',
+ ':judge-light-skin-tone:' => '🧑🏻⚖️',
+ ':judge-medium-dark-skin-tone:' => '🧑🏾⚖️',
+ ':judge-medium-light-skin-tone:' => '🧑🏼⚖️',
+ ':judge-medium-skin-tone:' => '🧑🏽⚖️',
+ ':man-biking-dark-skin-tone:' => '🚴🏿♂️',
+ ':man-biking-light-skin-tone:' => '🚴🏻♂️',
+ ':man-biking-medium-dark-skin-tone:' => '🚴🏾♂️',
+ ':man-biking-medium-light-skin-tone:' => '🚴🏼♂️',
+ ':man-biking-medium-skin-tone:' => '🚴🏽♂️',
+ ':man-bouncing-ball-dark-skin-tone:' => '⛹🏿♂️',
+ ':man-bouncing-ball-light-skin-tone:' => '⛹🏻♂️',
+ ':man-bouncing-ball-medium-dark-skin-tone:' => '⛹🏾♂️',
+ ':man-bouncing-ball-medium-light-skin-tone:' => '⛹🏼♂️',
+ ':man-bouncing-ball-medium-skin-tone:' => '⛹🏽♂️',
+ ':man-bowing-dark-skin-tone:' => '🙇🏿♂️',
+ ':man-bowing-light-skin-tone:' => '🙇🏻♂️',
+ ':man-bowing-medium-dark-skin-tone:' => '🙇🏾♂️',
+ ':man-bowing-medium-light-skin-tone:' => '🙇🏼♂️',
+ ':man-bowing-medium-skin-tone:' => '🙇🏽♂️',
+ ':man-cartwheeling-dark-skin-tone:' => '🤸🏿♂️',
+ ':man-cartwheeling-light-skin-tone:' => '🤸🏻♂️',
+ ':man-cartwheeling-medium-dark-skin-tone:' => '🤸🏾♂️',
+ ':man-cartwheeling-medium-light-skin-tone:' => '🤸🏼♂️',
+ ':man-cartwheeling-medium-skin-tone:' => '🤸🏽♂️',
+ ':man-climbing-dark-skin-tone:' => '🧗🏿♂️',
+ ':man-climbing-light-skin-tone:' => '🧗🏻♂️',
+ ':man-climbing-medium-dark-skin-tone:' => '🧗🏾♂️',
+ ':man-climbing-medium-light-skin-tone:' => '🧗🏼♂️',
+ ':man-climbing-medium-skin-tone:' => '🧗🏽♂️',
+ ':man-construction-worker-dark-skin-tone:' => '👷🏿♂️',
+ ':man-construction-worker-light-skin-tone:' => '👷🏻♂️',
+ ':man-construction-worker-medium-dark-skin-tone:' => '👷🏾♂️',
+ ':man-construction-worker-medium-light-skin-tone:' => '👷🏼♂️',
+ ':man-construction-worker-medium-skin-tone:' => '👷🏽♂️',
+ ':man-dark-skin-tone-beard:' => '🧔🏿♂️',
+ ':man-dark-skin-tone-blond-hair:' => '👱🏿♂️',
+ ':man-detective:' => '🕵️♂️',
+ ':man-detective-dark-skin-tone:' => '🕵🏿♂️',
+ ':man-detective-light-skin-tone:' => '🕵🏻♂️',
+ ':man-detective-medium-dark-skin-tone:' => '🕵🏾♂️',
+ ':man-detective-medium-light-skin-tone:' => '🕵🏼♂️',
+ ':man-detective-medium-skin-tone:' => '🕵🏽♂️',
+ ':man-elf-dark-skin-tone:' => '🧝🏿♂️',
+ ':man-elf-light-skin-tone:' => '🧝🏻♂️',
+ ':man-elf-medium-dark-skin-tone:' => '🧝🏾♂️',
+ ':man-elf-medium-light-skin-tone:' => '🧝🏼♂️',
+ ':man-elf-medium-skin-tone:' => '🧝🏽♂️',
+ ':man-facepalming-dark-skin-tone:' => '🤦🏿♂️',
+ ':man-facepalming-light-skin-tone:' => '🤦🏻♂️',
+ ':man-facepalming-medium-dark-skin-tone:' => '🤦🏾♂️',
+ ':man-facepalming-medium-light-skin-tone:' => '🤦🏼♂️',
+ ':man-facepalming-medium-skin-tone:' => '🤦🏽♂️',
+ ':man-fairy-dark-skin-tone:' => '🧚🏿♂️',
+ ':man-fairy-light-skin-tone:' => '🧚🏻♂️',
+ ':man-fairy-medium-dark-skin-tone:' => '🧚🏾♂️',
+ ':man-fairy-medium-light-skin-tone:' => '🧚🏼♂️',
+ ':man-fairy-medium-skin-tone:' => '🧚🏽♂️',
+ ':man-frowning-dark-skin-tone:' => '🙍🏿♂️',
+ ':man-frowning-light-skin-tone:' => '🙍🏻♂️',
+ ':man-frowning-medium-dark-skin-tone:' => '🙍🏾♂️',
+ ':man-frowning-medium-light-skin-tone:' => '🙍🏼♂️',
+ ':man-frowning-medium-skin-tone:' => '🙍🏽♂️',
+ ':man-gesturing-no-dark-skin-tone:' => '🙅🏿♂️',
+ ':man-gesturing-no-light-skin-tone:' => '🙅🏻♂️',
+ ':man-gesturing-no-medium-dark-skin-tone:' => '🙅🏾♂️',
+ ':man-gesturing-no-medium-light-skin-tone:' => '🙅🏼♂️',
+ ':man-gesturing-no-medium-skin-tone:' => '🙅🏽♂️',
+ ':man-gesturing-ok-dark-skin-tone:' => '🙆🏿♂️',
+ ':man-gesturing-ok-light-skin-tone:' => '🙆🏻♂️',
+ ':man-gesturing-ok-medium-dark-skin-tone:' => '🙆🏾♂️',
+ ':man-gesturing-ok-medium-light-skin-tone:' => '🙆🏼♂️',
+ ':man-gesturing-ok-medium-skin-tone:' => '🙆🏽♂️',
+ ':man-getting-haircut-dark-skin-tone:' => '💇🏿♂️',
+ ':man-getting-haircut-light-skin-tone:' => '💇🏻♂️',
+ ':man-getting-haircut-medium-dark-skin-tone:' => '💇🏾♂️',
+ ':man-getting-haircut-medium-light-skin-tone:' => '💇🏼♂️',
+ ':man-getting-haircut-medium-skin-tone:' => '💇🏽♂️',
+ ':man-getting-massage-dark-skin-tone:' => '💆🏿♂️',
+ ':man-getting-massage-light-skin-tone:' => '💆🏻♂️',
+ ':man-getting-massage-medium-dark-skin-tone:' => '💆🏾♂️',
+ ':man-getting-massage-medium-light-skin-tone:' => '💆🏼♂️',
+ ':man-getting-massage-medium-skin-tone:' => '💆🏽♂️',
+ ':man-golfing-dark-skin-tone:' => '🏌🏿♂️',
+ ':man-golfing-light-skin-tone:' => '🏌🏻♂️',
+ ':man-golfing-medium-dark-skin-tone:' => '🏌🏾♂️',
+ ':man-golfing-medium-light-skin-tone:' => '🏌🏼♂️',
+ ':man-golfing-medium-skin-tone:' => '🏌🏽♂️',
+ ':man-guard-dark-skin-tone:' => '💂🏿♂️',
+ ':man-guard-light-skin-tone:' => '💂🏻♂️',
+ ':man-guard-medium-dark-skin-tone:' => '💂🏾♂️',
+ ':man-guard-medium-light-skin-tone:' => '💂🏼♂️',
+ ':man-guard-medium-skin-tone:' => '💂🏽♂️',
+ ':man-health-worker-dark-skin-tone:' => '👨🏿⚕️',
+ ':man-health-worker-light-skin-tone:' => '👨🏻⚕️',
+ ':man-health-worker-medium-dark-skin-tone:' => '👨🏾⚕️',
+ ':man-health-worker-medium-light-skin-tone:' => '👨🏼⚕️',
+ ':man-health-worker-medium-skin-tone:' => '👨🏽⚕️',
+ ':man-in-lotus-position-dark-skin-tone:' => '🧘🏿♂️',
+ ':man-in-lotus-position-light-skin-tone:' => '🧘🏻♂️',
+ ':man-in-lotus-position-medium-dark-skin-tone:' => '🧘🏾♂️',
+ ':man-in-lotus-position-medium-light-skin-tone:' => '🧘🏼♂️',
+ ':man-in-lotus-position-medium-skin-tone:' => '🧘🏽♂️',
+ ':man-in-steamy-room-dark-skin-tone:' => '🧖🏿♂️',
+ ':man-in-steamy-room-light-skin-tone:' => '🧖🏻♂️',
+ ':man-in-steamy-room-medium-dark-skin-tone:' => '🧖🏾♂️',
+ ':man-in-steamy-room-medium-light-skin-tone:' => '🧖🏼♂️',
+ ':man-in-steamy-room-medium-skin-tone:' => '🧖🏽♂️',
+ ':man-in-tuxedo-dark-skin-tone:' => '🤵🏿♂️',
+ ':man-in-tuxedo-light-skin-tone:' => '🤵🏻♂️',
+ ':man-in-tuxedo-medium-dark-skin-tone:' => '🤵🏾♂️',
+ ':man-in-tuxedo-medium-light-skin-tone:' => '🤵🏼♂️',
+ ':man-in-tuxedo-medium-skin-tone:' => '🤵🏽♂️',
+ ':man-judge-dark-skin-tone:' => '👨🏿⚖️',
+ ':man-judge-light-skin-tone:' => '👨🏻⚖️',
+ ':man-judge-medium-dark-skin-tone:' => '👨🏾⚖️',
+ ':man-judge-medium-light-skin-tone:' => '👨🏼⚖️',
+ ':man-judge-medium-skin-tone:' => '👨🏽⚖️',
+ ':man-juggling-dark-skin-tone:' => '🤹🏿♂️',
+ ':man-juggling-light-skin-tone:' => '🤹🏻♂️',
+ ':man-juggling-medium-dark-skin-tone:' => '🤹🏾♂️',
+ ':man-juggling-medium-light-skin-tone:' => '🤹🏼♂️',
+ ':man-juggling-medium-skin-tone:' => '🤹🏽♂️',
+ ':man-kneeling-dark-skin-tone:' => '🧎🏿♂️',
+ ':man-kneeling-light-skin-tone:' => '🧎🏻♂️',
+ ':man-kneeling-medium-dark-skin-tone:' => '🧎🏾♂️',
+ ':man-kneeling-medium-light-skin-tone:' => '🧎🏼♂️',
+ ':man-kneeling-medium-skin-tone:' => '🧎🏽♂️',
+ ':man-lifting-weights-dark-skin-tone:' => '🏋🏿♂️',
+ ':man-lifting-weights-light-skin-tone:' => '🏋🏻♂️',
+ ':man-lifting-weights-medium-dark-skin-tone:' => '🏋🏾♂️',
+ ':man-lifting-weights-medium-light-skin-tone:' => '🏋🏼♂️',
+ ':man-lifting-weights-medium-skin-tone:' => '🏋🏽♂️',
+ ':man-light-skin-tone-beard:' => '🧔🏻♂️',
+ ':man-light-skin-tone-blond-hair:' => '👱🏻♂️',
+ ':man-mage-dark-skin-tone:' => '🧙🏿♂️',
+ ':man-mage-light-skin-tone:' => '🧙🏻♂️',
+ ':man-mage-medium-dark-skin-tone:' => '🧙🏾♂️',
+ ':man-mage-medium-light-skin-tone:' => '🧙🏼♂️',
+ ':man-mage-medium-skin-tone:' => '🧙🏽♂️',
+ ':man-medium-dark-skin-tone-beard:' => '🧔🏾♂️',
+ ':man-medium-dark-skin-tone-blond-hair:' => '👱🏾♂️',
+ ':man-medium-light-skin-tone-beard:' => '🧔🏼♂️',
+ ':man-medium-light-skin-tone-blond-hair:' => '👱🏼♂️',
+ ':man-medium-skin-tone-beard:' => '🧔🏽♂️',
+ ':man-medium-skin-tone-blond-hair:' => '👱🏽♂️',
+ ':man-mountain-biking-dark-skin-tone:' => '🚵🏿♂️',
+ ':man-mountain-biking-light-skin-tone:' => '🚵🏻♂️',
+ ':man-mountain-biking-medium-dark-skin-tone:' => '🚵🏾♂️',
+ ':man-mountain-biking-medium-light-skin-tone:' => '🚵🏼♂️',
+ ':man-mountain-biking-medium-skin-tone:' => '🚵🏽♂️',
+ ':man-pilot-dark-skin-tone:' => '👨🏿✈️',
+ ':man-pilot-light-skin-tone:' => '👨🏻✈️',
+ ':man-pilot-medium-dark-skin-tone:' => '👨🏾✈️',
+ ':man-pilot-medium-light-skin-tone:' => '👨🏼✈️',
+ ':man-pilot-medium-skin-tone:' => '👨🏽✈️',
+ ':man-playing-handball-dark-skin-tone:' => '🤾🏿♂️',
+ ':man-playing-handball-light-skin-tone:' => '🤾🏻♂️',
+ ':man-playing-handball-medium-dark-skin-tone:' => '🤾🏾♂️',
+ ':man-playing-handball-medium-light-skin-tone:' => '🤾🏼♂️',
+ ':man-playing-handball-medium-skin-tone:' => '🤾🏽♂️',
+ ':man-playing-water-polo-dark-skin-tone:' => '🤽🏿♂️',
+ ':man-playing-water-polo-light-skin-tone:' => '🤽🏻♂️',
+ ':man-playing-water-polo-medium-dark-skin-tone:' => '🤽🏾♂️',
+ ':man-playing-water-polo-medium-light-skin-tone:' => '🤽🏼♂️',
+ ':man-playing-water-polo-medium-skin-tone:' => '🤽🏽♂️',
+ ':man-police-officer-dark-skin-tone:' => '👮🏿♂️',
+ ':man-police-officer-light-skin-tone:' => '👮🏻♂️',
+ ':man-police-officer-medium-dark-skin-tone:' => '👮🏾♂️',
+ ':man-police-officer-medium-light-skin-tone:' => '👮🏼♂️',
+ ':man-police-officer-medium-skin-tone:' => '👮🏽♂️',
+ ':man-pouting-dark-skin-tone:' => '🙎🏿♂️',
+ ':man-pouting-light-skin-tone:' => '🙎🏻♂️',
+ ':man-pouting-medium-dark-skin-tone:' => '🙎🏾♂️',
+ ':man-pouting-medium-light-skin-tone:' => '🙎🏼♂️',
+ ':man-pouting-medium-skin-tone:' => '🙎🏽♂️',
+ ':man-raising-hand-dark-skin-tone:' => '🙋🏿♂️',
+ ':man-raising-hand-light-skin-tone:' => '🙋🏻♂️',
+ ':man-raising-hand-medium-dark-skin-tone:' => '🙋🏾♂️',
+ ':man-raising-hand-medium-light-skin-tone:' => '🙋🏼♂️',
+ ':man-raising-hand-medium-skin-tone:' => '🙋🏽♂️',
+ ':man-rowing-boat-dark-skin-tone:' => '🚣🏿♂️',
+ ':man-rowing-boat-light-skin-tone:' => '🚣🏻♂️',
+ ':man-rowing-boat-medium-dark-skin-tone:' => '🚣🏾♂️',
+ ':man-rowing-boat-medium-light-skin-tone:' => '🚣🏼♂️',
+ ':man-rowing-boat-medium-skin-tone:' => '🚣🏽♂️',
+ ':man-running-dark-skin-tone:' => '🏃🏿♂️',
+ ':man-running-light-skin-tone:' => '🏃🏻♂️',
+ ':man-running-medium-dark-skin-tone:' => '🏃🏾♂️',
+ ':man-running-medium-light-skin-tone:' => '🏃🏼♂️',
+ ':man-running-medium-skin-tone:' => '🏃🏽♂️',
+ ':man-shrugging-dark-skin-tone:' => '🤷🏿♂️',
+ ':man-shrugging-light-skin-tone:' => '🤷🏻♂️',
+ ':man-shrugging-medium-dark-skin-tone:' => '🤷🏾♂️',
+ ':man-shrugging-medium-light-skin-tone:' => '🤷🏼♂️',
+ ':man-shrugging-medium-skin-tone:' => '🤷🏽♂️',
+ ':man-standing-dark-skin-tone:' => '🧍🏿♂️',
+ ':man-standing-light-skin-tone:' => '🧍🏻♂️',
+ ':man-standing-medium-dark-skin-tone:' => '🧍🏾♂️',
+ ':man-standing-medium-light-skin-tone:' => '🧍🏼♂️',
+ ':man-standing-medium-skin-tone:' => '🧍🏽♂️',
+ ':man-superhero-dark-skin-tone:' => '🦸🏿♂️',
+ ':man-superhero-light-skin-tone:' => '🦸🏻♂️',
+ ':man-superhero-medium-dark-skin-tone:' => '🦸🏾♂️',
+ ':man-superhero-medium-light-skin-tone:' => '🦸🏼♂️',
+ ':man-superhero-medium-skin-tone:' => '🦸🏽♂️',
+ ':man-supervillain-dark-skin-tone:' => '🦹🏿♂️',
+ ':man-supervillain-light-skin-tone:' => '🦹🏻♂️',
+ ':man-supervillain-medium-dark-skin-tone:' => '🦹🏾♂️',
+ ':man-supervillain-medium-light-skin-tone:' => '🦹🏼♂️',
+ ':man-supervillain-medium-skin-tone:' => '🦹🏽♂️',
+ ':man-surfing-dark-skin-tone:' => '🏄🏿♂️',
+ ':man-surfing-light-skin-tone:' => '🏄🏻♂️',
+ ':man-surfing-medium-dark-skin-tone:' => '🏄🏾♂️',
+ ':man-surfing-medium-light-skin-tone:' => '🏄🏼♂️',
+ ':man-surfing-medium-skin-tone:' => '🏄🏽♂️',
+ ':man-swimming-dark-skin-tone:' => '🏊🏿♂️',
+ ':man-swimming-light-skin-tone:' => '🏊🏻♂️',
+ ':man-swimming-medium-dark-skin-tone:' => '🏊🏾♂️',
+ ':man-swimming-medium-light-skin-tone:' => '🏊🏼♂️',
+ ':man-swimming-medium-skin-tone:' => '🏊🏽♂️',
+ ':man-tipping-hand-dark-skin-tone:' => '💁🏿♂️',
+ ':man-tipping-hand-light-skin-tone:' => '💁🏻♂️',
+ ':man-tipping-hand-medium-dark-skin-tone:' => '💁🏾♂️',
+ ':man-tipping-hand-medium-light-skin-tone:' => '💁🏼♂️',
+ ':man-tipping-hand-medium-skin-tone:' => '💁🏽♂️',
+ ':man-vampire-dark-skin-tone:' => '🧛🏿♂️',
+ ':man-vampire-light-skin-tone:' => '🧛🏻♂️',
+ ':man-vampire-medium-dark-skin-tone:' => '🧛🏾♂️',
+ ':man-vampire-medium-light-skin-tone:' => '🧛🏼♂️',
+ ':man-vampire-medium-skin-tone:' => '🧛🏽♂️',
+ ':man-walking-dark-skin-tone:' => '🚶🏿♂️',
+ ':man-walking-light-skin-tone:' => '🚶🏻♂️',
+ ':man-walking-medium-dark-skin-tone:' => '🚶🏾♂️',
+ ':man-walking-medium-light-skin-tone:' => '🚶🏼♂️',
+ ':man-walking-medium-skin-tone:' => '🚶🏽♂️',
+ ':man-wearing-turban-dark-skin-tone:' => '👳🏿♂️',
+ ':man-wearing-turban-light-skin-tone:' => '👳🏻♂️',
+ ':man-wearing-turban-medium-dark-skin-tone:' => '👳🏾♂️',
+ ':man-wearing-turban-medium-light-skin-tone:' => '👳🏼♂️',
+ ':man-wearing-turban-medium-skin-tone:' => '👳🏽♂️',
+ ':man-with-veil-dark-skin-tone:' => '👰🏿♂️',
+ ':man-with-veil-light-skin-tone:' => '👰🏻♂️',
+ ':man-with-veil-medium-dark-skin-tone:' => '👰🏾♂️',
+ ':man-with-veil-medium-light-skin-tone:' => '👰🏼♂️',
+ ':man-with-veil-medium-skin-tone:' => '👰🏽♂️',
+ ':mermaid-dark-skin-tone:' => '🧜🏿♀️',
+ ':mermaid-light-skin-tone:' => '🧜🏻♀️',
+ ':mermaid-medium-dark-skin-tone:' => '🧜🏾♀️',
+ ':mermaid-medium-light-skin-tone:' => '🧜🏼♀️',
+ ':mermaid-medium-skin-tone:' => '🧜🏽♀️',
+ ':merman-dark-skin-tone:' => '🧜🏿♂️',
+ ':merman-light-skin-tone:' => '🧜🏻♂️',
+ ':merman-medium-dark-skin-tone:' => '🧜🏾♂️',
+ ':merman-medium-light-skin-tone:' => '🧜🏼♂️',
+ ':merman-medium-skin-tone:' => '🧜🏽♂️',
+ ':person-kneeling-facing-right-dark-skin-tone:' => '🧎🏿➡️',
+ ':person-kneeling-facing-right-light-skin-tone:' => '🧎🏻➡️',
+ ':person-kneeling-facing-right-medium-dark-skin-tone:' => '🧎🏾➡️',
+ ':person-kneeling-facing-right-medium-light-skin-tone:' => '🧎🏼➡️',
+ ':person-kneeling-facing-right-medium-skin-tone:' => '🧎🏽➡️',
+ ':person-running-facing-right-dark-skin-tone:' => '🏃🏿➡️',
+ ':person-running-facing-right-light-skin-tone:' => '🏃🏻➡️',
+ ':person-running-facing-right-medium-dark-skin-tone:' => '🏃🏾➡️',
+ ':person-running-facing-right-medium-light-skin-tone:' => '🏃🏼➡️',
+ ':person-running-facing-right-medium-skin-tone:' => '🏃🏽➡️',
+ ':person-walking-facing-right-dark-skin-tone:' => '🚶🏿➡️',
+ ':person-walking-facing-right-light-skin-tone:' => '🚶🏻➡️',
+ ':person-walking-facing-right-medium-dark-skin-tone:' => '🚶🏾➡️',
+ ':person-walking-facing-right-medium-light-skin-tone:' => '🚶🏼➡️',
+ ':person-walking-facing-right-medium-skin-tone:' => '🚶🏽➡️',
+ ':pilot-dark-skin-tone:' => '🧑🏿✈️',
+ ':pilot-light-skin-tone:' => '🧑🏻✈️',
+ ':pilot-medium-dark-skin-tone:' => '🧑🏾✈️',
+ ':pilot-medium-light-skin-tone:' => '🧑🏼✈️',
+ ':pilot-medium-skin-tone:' => '🧑🏽✈️',
+ ':woman-biking-dark-skin-tone:' => '🚴🏿♀️',
+ ':woman-biking-light-skin-tone:' => '🚴🏻♀️',
+ ':woman-biking-medium-dark-skin-tone:' => '🚴🏾♀️',
+ ':woman-biking-medium-light-skin-tone:' => '🚴🏼♀️',
+ ':woman-biking-medium-skin-tone:' => '🚴🏽♀️',
+ ':woman-bouncing-ball-dark-skin-tone:' => '⛹🏿♀️',
+ ':woman-bouncing-ball-light-skin-tone:' => '⛹🏻♀️',
+ ':woman-bouncing-ball-medium-dark-skin-tone:' => '⛹🏾♀️',
+ ':woman-bouncing-ball-medium-light-skin-tone:' => '⛹🏼♀️',
+ ':woman-bouncing-ball-medium-skin-tone:' => '⛹🏽♀️',
+ ':woman-bowing-dark-skin-tone:' => '🙇🏿♀️',
+ ':woman-bowing-light-skin-tone:' => '🙇🏻♀️',
+ ':woman-bowing-medium-dark-skin-tone:' => '🙇🏾♀️',
+ ':woman-bowing-medium-light-skin-tone:' => '🙇🏼♀️',
+ ':woman-bowing-medium-skin-tone:' => '🙇🏽♀️',
+ ':woman-cartwheeling-dark-skin-tone:' => '🤸🏿♀️',
+ ':woman-cartwheeling-light-skin-tone:' => '🤸🏻♀️',
+ ':woman-cartwheeling-medium-dark-skin-tone:' => '🤸🏾♀️',
+ ':woman-cartwheeling-medium-light-skin-tone:' => '🤸🏼♀️',
+ ':woman-cartwheeling-medium-skin-tone:' => '🤸🏽♀️',
+ ':woman-climbing-dark-skin-tone:' => '🧗🏿♀️',
+ ':woman-climbing-light-skin-tone:' => '🧗🏻♀️',
+ ':woman-climbing-medium-dark-skin-tone:' => '🧗🏾♀️',
+ ':woman-climbing-medium-light-skin-tone:' => '🧗🏼♀️',
+ ':woman-climbing-medium-skin-tone:' => '🧗🏽♀️',
+ ':woman-construction-worker-dark-skin-tone:' => '👷🏿♀️',
+ ':woman-construction-worker-light-skin-tone:' => '👷🏻♀️',
+ ':woman-construction-worker-medium-dark-skin-tone:' => '👷🏾♀️',
+ ':woman-construction-worker-medium-light-skin-tone:' => '👷🏼♀️',
+ ':woman-construction-worker-medium-skin-tone:' => '👷🏽♀️',
+ ':woman-dark-skin-tone-beard:' => '🧔🏿♀️',
+ ':woman-dark-skin-tone-blond-hair:' => '👱🏿♀️',
+ ':woman-detective:' => '🕵️♀️',
+ ':woman-detective-dark-skin-tone:' => '🕵🏿♀️',
+ ':woman-detective-light-skin-tone:' => '🕵🏻♀️',
+ ':woman-detective-medium-dark-skin-tone:' => '🕵🏾♀️',
+ ':woman-detective-medium-light-skin-tone:' => '🕵🏼♀️',
+ ':woman-detective-medium-skin-tone:' => '🕵🏽♀️',
+ ':woman-elf-dark-skin-tone:' => '🧝🏿♀️',
+ ':woman-elf-light-skin-tone:' => '🧝🏻♀️',
+ ':woman-elf-medium-dark-skin-tone:' => '🧝🏾♀️',
+ ':woman-elf-medium-light-skin-tone:' => '🧝🏼♀️',
+ ':woman-elf-medium-skin-tone:' => '🧝🏽♀️',
+ ':woman-facepalming-dark-skin-tone:' => '🤦🏿♀️',
+ ':woman-facepalming-light-skin-tone:' => '🤦🏻♀️',
+ ':woman-facepalming-medium-dark-skin-tone:' => '🤦🏾♀️',
+ ':woman-facepalming-medium-light-skin-tone:' => '🤦🏼♀️',
+ ':woman-facepalming-medium-skin-tone:' => '🤦🏽♀️',
+ ':woman-fairy-dark-skin-tone:' => '🧚🏿♀️',
+ ':woman-fairy-light-skin-tone:' => '🧚🏻♀️',
+ ':woman-fairy-medium-dark-skin-tone:' => '🧚🏾♀️',
+ ':woman-fairy-medium-light-skin-tone:' => '🧚🏼♀️',
+ ':woman-fairy-medium-skin-tone:' => '🧚🏽♀️',
+ ':woman-frowning-dark-skin-tone:' => '🙍🏿♀️',
+ ':woman-frowning-light-skin-tone:' => '🙍🏻♀️',
+ ':woman-frowning-medium-dark-skin-tone:' => '🙍🏾♀️',
+ ':woman-frowning-medium-light-skin-tone:' => '🙍🏼♀️',
+ ':woman-frowning-medium-skin-tone:' => '🙍🏽♀️',
+ ':woman-gesturing-no-dark-skin-tone:' => '🙅🏿♀️',
+ ':woman-gesturing-no-light-skin-tone:' => '🙅🏻♀️',
+ ':woman-gesturing-no-medium-dark-skin-tone:' => '🙅🏾♀️',
+ ':woman-gesturing-no-medium-light-skin-tone:' => '🙅🏼♀️',
+ ':woman-gesturing-no-medium-skin-tone:' => '🙅🏽♀️',
+ ':woman-gesturing-ok-dark-skin-tone:' => '🙆🏿♀️',
+ ':woman-gesturing-ok-light-skin-tone:' => '🙆🏻♀️',
+ ':woman-gesturing-ok-medium-dark-skin-tone:' => '🙆🏾♀️',
+ ':woman-gesturing-ok-medium-light-skin-tone:' => '🙆🏼♀️',
+ ':woman-gesturing-ok-medium-skin-tone:' => '🙆🏽♀️',
+ ':woman-getting-haircut-dark-skin-tone:' => '💇🏿♀️',
+ ':woman-getting-haircut-light-skin-tone:' => '💇🏻♀️',
+ ':woman-getting-haircut-medium-dark-skin-tone:' => '💇🏾♀️',
+ ':woman-getting-haircut-medium-light-skin-tone:' => '💇🏼♀️',
+ ':woman-getting-haircut-medium-skin-tone:' => '💇🏽♀️',
+ ':woman-getting-massage-dark-skin-tone:' => '💆🏿♀️',
+ ':woman-getting-massage-light-skin-tone:' => '💆🏻♀️',
+ ':woman-getting-massage-medium-dark-skin-tone:' => '💆🏾♀️',
+ ':woman-getting-massage-medium-light-skin-tone:' => '💆🏼♀️',
+ ':woman-getting-massage-medium-skin-tone:' => '💆🏽♀️',
+ ':woman-golfing-dark-skin-tone:' => '🏌🏿♀️',
+ ':woman-golfing-light-skin-tone:' => '🏌🏻♀️',
+ ':woman-golfing-medium-dark-skin-tone:' => '🏌🏾♀️',
+ ':woman-golfing-medium-light-skin-tone:' => '🏌🏼♀️',
+ ':woman-golfing-medium-skin-tone:' => '🏌🏽♀️',
+ ':woman-guard-dark-skin-tone:' => '💂🏿♀️',
+ ':woman-guard-light-skin-tone:' => '💂🏻♀️',
+ ':woman-guard-medium-dark-skin-tone:' => '💂🏾♀️',
+ ':woman-guard-medium-light-skin-tone:' => '💂🏼♀️',
+ ':woman-guard-medium-skin-tone:' => '💂🏽♀️',
+ ':woman-health-worker-dark-skin-tone:' => '👩🏿⚕️',
+ ':woman-health-worker-light-skin-tone:' => '👩🏻⚕️',
+ ':woman-health-worker-medium-dark-skin-tone:' => '👩🏾⚕️',
+ ':woman-health-worker-medium-light-skin-tone:' => '👩🏼⚕️',
+ ':woman-health-worker-medium-skin-tone:' => '👩🏽⚕️',
+ ':woman-in-lotus-position-dark-skin-tone:' => '🧘🏿♀️',
+ ':woman-in-lotus-position-light-skin-tone:' => '🧘🏻♀️',
+ ':woman-in-lotus-position-medium-dark-skin-tone:' => '🧘🏾♀️',
+ ':woman-in-lotus-position-medium-light-skin-tone:' => '🧘🏼♀️',
+ ':woman-in-lotus-position-medium-skin-tone:' => '🧘🏽♀️',
+ ':woman-in-steamy-room-dark-skin-tone:' => '🧖🏿♀️',
+ ':woman-in-steamy-room-light-skin-tone:' => '🧖🏻♀️',
+ ':woman-in-steamy-room-medium-dark-skin-tone:' => '🧖🏾♀️',
+ ':woman-in-steamy-room-medium-light-skin-tone:' => '🧖🏼♀️',
+ ':woman-in-steamy-room-medium-skin-tone:' => '🧖🏽♀️',
+ ':woman-in-tuxedo-dark-skin-tone:' => '🤵🏿♀️',
+ ':woman-in-tuxedo-light-skin-tone:' => '🤵🏻♀️',
+ ':woman-in-tuxedo-medium-dark-skin-tone:' => '🤵🏾♀️',
+ ':woman-in-tuxedo-medium-light-skin-tone:' => '🤵🏼♀️',
+ ':woman-in-tuxedo-medium-skin-tone:' => '🤵🏽♀️',
+ ':woman-judge-dark-skin-tone:' => '👩🏿⚖️',
+ ':woman-judge-light-skin-tone:' => '👩🏻⚖️',
+ ':woman-judge-medium-dark-skin-tone:' => '👩🏾⚖️',
+ ':woman-judge-medium-light-skin-tone:' => '👩🏼⚖️',
+ ':woman-judge-medium-skin-tone:' => '👩🏽⚖️',
+ ':woman-juggling-dark-skin-tone:' => '🤹🏿♀️',
+ ':woman-juggling-light-skin-tone:' => '🤹🏻♀️',
+ ':woman-juggling-medium-dark-skin-tone:' => '🤹🏾♀️',
+ ':woman-juggling-medium-light-skin-tone:' => '🤹🏼♀️',
+ ':woman-juggling-medium-skin-tone:' => '🤹🏽♀️',
+ ':woman-kneeling-dark-skin-tone:' => '🧎🏿♀️',
+ ':woman-kneeling-light-skin-tone:' => '🧎🏻♀️',
+ ':woman-kneeling-medium-dark-skin-tone:' => '🧎🏾♀️',
+ ':woman-kneeling-medium-light-skin-tone:' => '🧎🏼♀️',
+ ':woman-kneeling-medium-skin-tone:' => '🧎🏽♀️',
+ ':woman-lifting-weights-dark-skin-tone:' => '🏋🏿♀️',
+ ':woman-lifting-weights-light-skin-tone:' => '🏋🏻♀️',
+ ':woman-lifting-weights-medium-dark-skin-tone:' => '🏋🏾♀️',
+ ':woman-lifting-weights-medium-light-skin-tone:' => '🏋🏼♀️',
+ ':woman-lifting-weights-medium-skin-tone:' => '🏋🏽♀️',
+ ':woman-light-skin-tone-beard:' => '🧔🏻♀️',
+ ':woman-light-skin-tone-blond-hair:' => '👱🏻♀️',
+ ':woman-mage-dark-skin-tone:' => '🧙🏿♀️',
+ ':woman-mage-light-skin-tone:' => '🧙🏻♀️',
+ ':woman-mage-medium-dark-skin-tone:' => '🧙🏾♀️',
+ ':woman-mage-medium-light-skin-tone:' => '🧙🏼♀️',
+ ':woman-mage-medium-skin-tone:' => '🧙🏽♀️',
+ ':woman-medium-dark-skin-tone-beard:' => '🧔🏾♀️',
+ ':woman-medium-dark-skin-tone-blond-hair:' => '👱🏾♀️',
+ ':woman-medium-light-skin-tone-beard:' => '🧔🏼♀️',
+ ':woman-medium-light-skin-tone-blond-hair:' => '👱🏼♀️',
+ ':woman-medium-skin-tone-beard:' => '🧔🏽♀️',
+ ':woman-medium-skin-tone-blond-hair:' => '👱🏽♀️',
+ ':woman-mountain-biking-dark-skin-tone:' => '🚵🏿♀️',
+ ':woman-mountain-biking-light-skin-tone:' => '🚵🏻♀️',
+ ':woman-mountain-biking-medium-dark-skin-tone:' => '🚵🏾♀️',
+ ':woman-mountain-biking-medium-light-skin-tone:' => '🚵🏼♀️',
+ ':woman-mountain-biking-medium-skin-tone:' => '🚵🏽♀️',
+ ':woman-pilot-dark-skin-tone:' => '👩🏿✈️',
+ ':woman-pilot-light-skin-tone:' => '👩🏻✈️',
+ ':woman-pilot-medium-dark-skin-tone:' => '👩🏾✈️',
+ ':woman-pilot-medium-light-skin-tone:' => '👩🏼✈️',
+ ':woman-pilot-medium-skin-tone:' => '👩🏽✈️',
+ ':woman-playing-handball-dark-skin-tone:' => '🤾🏿♀️',
+ ':woman-playing-handball-light-skin-tone:' => '🤾🏻♀️',
+ ':woman-playing-handball-medium-dark-skin-tone:' => '🤾🏾♀️',
+ ':woman-playing-handball-medium-light-skin-tone:' => '🤾🏼♀️',
+ ':woman-playing-handball-medium-skin-tone:' => '🤾🏽♀️',
+ ':woman-playing-water-polo-dark-skin-tone:' => '🤽🏿♀️',
+ ':woman-playing-water-polo-light-skin-tone:' => '🤽🏻♀️',
+ ':woman-playing-water-polo-medium-dark-skin-tone:' => '🤽🏾♀️',
+ ':woman-playing-water-polo-medium-light-skin-tone:' => '🤽🏼♀️',
+ ':woman-playing-water-polo-medium-skin-tone:' => '🤽🏽♀️',
+ ':woman-police-officer-dark-skin-tone:' => '👮🏿♀️',
+ ':woman-police-officer-light-skin-tone:' => '👮🏻♀️',
+ ':woman-police-officer-medium-dark-skin-tone:' => '👮🏾♀️',
+ ':woman-police-officer-medium-light-skin-tone:' => '👮🏼♀️',
+ ':woman-police-officer-medium-skin-tone:' => '👮🏽♀️',
+ ':woman-pouting-dark-skin-tone:' => '🙎🏿♀️',
+ ':woman-pouting-light-skin-tone:' => '🙎🏻♀️',
+ ':woman-pouting-medium-dark-skin-tone:' => '🙎🏾♀️',
+ ':woman-pouting-medium-light-skin-tone:' => '🙎🏼♀️',
+ ':woman-pouting-medium-skin-tone:' => '🙎🏽♀️',
+ ':woman-raising-hand-dark-skin-tone:' => '🙋🏿♀️',
+ ':woman-raising-hand-light-skin-tone:' => '🙋🏻♀️',
+ ':woman-raising-hand-medium-dark-skin-tone:' => '🙋🏾♀️',
+ ':woman-raising-hand-medium-light-skin-tone:' => '🙋🏼♀️',
+ ':woman-raising-hand-medium-skin-tone:' => '🙋🏽♀️',
+ ':woman-rowing-boat-dark-skin-tone:' => '🚣🏿♀️',
+ ':woman-rowing-boat-light-skin-tone:' => '🚣🏻♀️',
+ ':woman-rowing-boat-medium-dark-skin-tone:' => '🚣🏾♀️',
+ ':woman-rowing-boat-medium-light-skin-tone:' => '🚣🏼♀️',
+ ':woman-rowing-boat-medium-skin-tone:' => '🚣🏽♀️',
+ ':woman-running-dark-skin-tone:' => '🏃🏿♀️',
+ ':woman-running-light-skin-tone:' => '🏃🏻♀️',
+ ':woman-running-medium-dark-skin-tone:' => '🏃🏾♀️',
+ ':woman-running-medium-light-skin-tone:' => '🏃🏼♀️',
+ ':woman-running-medium-skin-tone:' => '🏃🏽♀️',
+ ':woman-shrugging-dark-skin-tone:' => '🤷🏿♀️',
+ ':woman-shrugging-light-skin-tone:' => '🤷🏻♀️',
+ ':woman-shrugging-medium-dark-skin-tone:' => '🤷🏾♀️',
+ ':woman-shrugging-medium-light-skin-tone:' => '🤷🏼♀️',
+ ':woman-shrugging-medium-skin-tone:' => '🤷🏽♀️',
+ ':woman-standing-dark-skin-tone:' => '🧍🏿♀️',
+ ':woman-standing-light-skin-tone:' => '🧍🏻♀️',
+ ':woman-standing-medium-dark-skin-tone:' => '🧍🏾♀️',
+ ':woman-standing-medium-light-skin-tone:' => '🧍🏼♀️',
+ ':woman-standing-medium-skin-tone:' => '🧍🏽♀️',
+ ':woman-superhero-dark-skin-tone:' => '🦸🏿♀️',
+ ':woman-superhero-light-skin-tone:' => '🦸🏻♀️',
+ ':woman-superhero-medium-dark-skin-tone:' => '🦸🏾♀️',
+ ':woman-superhero-medium-light-skin-tone:' => '🦸🏼♀️',
+ ':woman-superhero-medium-skin-tone:' => '🦸🏽♀️',
+ ':woman-supervillain-dark-skin-tone:' => '🦹🏿♀️',
+ ':woman-supervillain-light-skin-tone:' => '🦹🏻♀️',
+ ':woman-supervillain-medium-dark-skin-tone:' => '🦹🏾♀️',
+ ':woman-supervillain-medium-light-skin-tone:' => '🦹🏼♀️',
+ ':woman-supervillain-medium-skin-tone:' => '🦹🏽♀️',
+ ':woman-surfing-dark-skin-tone:' => '🏄🏿♀️',
+ ':woman-surfing-light-skin-tone:' => '🏄🏻♀️',
+ ':woman-surfing-medium-dark-skin-tone:' => '🏄🏾♀️',
+ ':woman-surfing-medium-light-skin-tone:' => '🏄🏼♀️',
+ ':woman-surfing-medium-skin-tone:' => '🏄🏽♀️',
+ ':woman-swimming-dark-skin-tone:' => '🏊🏿♀️',
+ ':woman-swimming-light-skin-tone:' => '🏊🏻♀️',
+ ':woman-swimming-medium-dark-skin-tone:' => '🏊🏾♀️',
+ ':woman-swimming-medium-light-skin-tone:' => '🏊🏼♀️',
+ ':woman-swimming-medium-skin-tone:' => '🏊🏽♀️',
+ ':woman-tipping-hand-dark-skin-tone:' => '💁🏿♀️',
+ ':woman-tipping-hand-light-skin-tone:' => '💁🏻♀️',
+ ':woman-tipping-hand-medium-dark-skin-tone:' => '💁🏾♀️',
+ ':woman-tipping-hand-medium-light-skin-tone:' => '💁🏼♀️',
+ ':woman-tipping-hand-medium-skin-tone:' => '💁🏽♀️',
+ ':woman-vampire-dark-skin-tone:' => '🧛🏿♀️',
+ ':woman-vampire-light-skin-tone:' => '🧛🏻♀️',
+ ':woman-vampire-medium-dark-skin-tone:' => '🧛🏾♀️',
+ ':woman-vampire-medium-light-skin-tone:' => '🧛🏼♀️',
+ ':woman-vampire-medium-skin-tone:' => '🧛🏽♀️',
+ ':woman-walking-dark-skin-tone:' => '🚶🏿♀️',
+ ':woman-walking-light-skin-tone:' => '🚶🏻♀️',
+ ':woman-walking-medium-dark-skin-tone:' => '🚶🏾♀️',
+ ':woman-walking-medium-light-skin-tone:' => '🚶🏼♀️',
+ ':woman-walking-medium-skin-tone:' => '🚶🏽♀️',
+ ':woman-wearing-turban-dark-skin-tone:' => '👳🏿♀️',
+ ':woman-wearing-turban-light-skin-tone:' => '👳🏻♀️',
+ ':woman-wearing-turban-medium-dark-skin-tone:' => '👳🏾♀️',
+ ':woman-wearing-turban-medium-light-skin-tone:' => '👳🏼♀️',
+ ':woman-wearing-turban-medium-skin-tone:' => '👳🏽♀️',
+ ':woman-with-veil-dark-skin-tone:' => '👰🏿♀️',
+ ':woman-with-veil-light-skin-tone:' => '👰🏻♀️',
+ ':woman-with-veil-medium-dark-skin-tone:' => '👰🏾♀️',
+ ':woman-with-veil-medium-light-skin-tone:' => '👰🏼♀️',
+ ':woman-with-veil-medium-skin-tone:' => '👰🏽♀️',
':man-heart-man:' => '👨❤️👨',
':man-in-manual-wheelchair-facing-right:' => '👨🦽➡️',
':man-in-motorized-wheelchair-facing-right:' => '👨🦼➡️',
@@ -3446,13 +4199,362 @@
':family-wwbb:' => '👩👩👦👦',
':family-wwgb:' => '👩👩👧👦',
':family-wwgg:' => '👩👩👧👧',
+ ':man-in-manual-wheelchair-facing-right-dark-skin-tone:' => '👨🏿🦽➡️',
+ ':man-in-manual-wheelchair-facing-right-light-skin-tone:' => '👨🏻🦽➡️',
+ ':man-in-manual-wheelchair-facing-right-medium-dark-skin-tone:' => '👨🏾🦽➡️',
+ ':man-in-manual-wheelchair-facing-right-medium-light-skin-tone:' => '👨🏼🦽➡️',
+ ':man-in-manual-wheelchair-facing-right-medium-skin-tone:' => '👨🏽🦽➡️',
+ ':man-in-motorized-wheelchair-facing-right-dark-skin-tone:' => '👨🏿🦼➡️',
+ ':man-in-motorized-wheelchair-facing-right-light-skin-tone:' => '👨🏻🦼➡️',
+ ':man-in-motorized-wheelchair-facing-right-medium-dark-skin-tone:' => '👨🏾🦼➡️',
+ ':man-in-motorized-wheelchair-facing-right-medium-light-skin-tone:' => '👨🏼🦼➡️',
+ ':man-in-motorized-wheelchair-facing-right-medium-skin-tone:' => '👨🏽🦼➡️',
+ ':man-with-white-cane-facing-right-dark-skin-tone:' => '👨🏿🦯➡️',
+ ':man-with-white-cane-facing-right-light-skin-tone:' => '👨🏻🦯➡️',
+ ':man-with-white-cane-facing-right-medium-dark-skin-tone:' => '👨🏾🦯➡️',
+ ':man-with-white-cane-facing-right-medium-light-skin-tone:' => '👨🏼🦯➡️',
+ ':man-with-white-cane-facing-right-medium-skin-tone:' => '👨🏽🦯➡️',
+ ':men-holding-hands-dark-skin-tone-light-skin-tone:' => '👨🏿🤝👨🏻',
+ ':men-holding-hands-dark-skin-tone-medium-dark-skin-tone:' => '👨🏿🤝👨🏾',
+ ':men-holding-hands-dark-skin-tone-medium-light-skin-tone:' => '👨🏿🤝👨🏼',
+ ':men-holding-hands-dark-skin-tone-medium-skin-tone:' => '👨🏿🤝👨🏽',
+ ':men-holding-hands-light-skin-tone-dark-skin-tone:' => '👨🏻🤝👨🏿',
+ ':men-holding-hands-light-skin-tone-medium-dark-skin-tone:' => '👨🏻🤝👨🏾',
+ ':men-holding-hands-light-skin-tone-medium-light-skin-tone:' => '👨🏻🤝👨🏼',
+ ':men-holding-hands-light-skin-tone-medium-skin-tone:' => '👨🏻🤝👨🏽',
+ ':men-holding-hands-medium-dark-skin-tone-dark-skin-tone:' => '👨🏾🤝👨🏿',
+ ':men-holding-hands-medium-dark-skin-tone-light-skin-tone:' => '👨🏾🤝👨🏻',
+ ':men-holding-hands-medium-dark-skin-tone-medium-light-skin-tone:' => '👨🏾🤝👨🏼',
+ ':men-holding-hands-medium-dark-skin-tone-medium-skin-tone:' => '👨🏾🤝👨🏽',
+ ':men-holding-hands-medium-light-skin-tone-dark-skin-tone:' => '👨🏼🤝👨🏿',
+ ':men-holding-hands-medium-light-skin-tone-light-skin-tone:' => '👨🏼🤝👨🏻',
+ ':men-holding-hands-medium-light-skin-tone-medium-dark-skin-tone:' => '👨🏼🤝👨🏾',
+ ':men-holding-hands-medium-light-skin-tone-medium-skin-tone:' => '👨🏼🤝👨🏽',
+ ':men-holding-hands-medium-skin-tone-dark-skin-tone:' => '👨🏽🤝👨🏿',
+ ':men-holding-hands-medium-skin-tone-light-skin-tone:' => '👨🏽🤝👨🏻',
+ ':men-holding-hands-medium-skin-tone-medium-dark-skin-tone:' => '👨🏽🤝👨🏾',
+ ':men-holding-hands-medium-skin-tone-medium-light-skin-tone:' => '👨🏽🤝👨🏼',
+ ':people-holding-hands-dark-skin-tone:' => '🧑🏿🤝🧑🏿',
+ ':people-holding-hands-dark-skin-tone-light-skin-tone:' => '🧑🏿🤝🧑🏻',
+ ':people-holding-hands-dark-skin-tone-medium-dark-skin-tone:' => '🧑🏿🤝🧑🏾',
+ ':people-holding-hands-dark-skin-tone-medium-light-skin-tone:' => '🧑🏿🤝🧑🏼',
+ ':people-holding-hands-dark-skin-tone-medium-skin-tone:' => '🧑🏿🤝🧑🏽',
+ ':people-holding-hands-light-skin-tone:' => '🧑🏻🤝🧑🏻',
+ ':people-holding-hands-light-skin-tone-dark-skin-tone:' => '🧑🏻🤝🧑🏿',
+ ':people-holding-hands-light-skin-tone-medium-dark-skin-tone:' => '🧑🏻🤝🧑🏾',
+ ':people-holding-hands-light-skin-tone-medium-light-skin-tone:' => '🧑🏻🤝🧑🏼',
+ ':people-holding-hands-light-skin-tone-medium-skin-tone:' => '🧑🏻🤝🧑🏽',
+ ':people-holding-hands-medium-dark-skin-tone:' => '🧑🏾🤝🧑🏾',
+ ':people-holding-hands-medium-dark-skin-tone-dark-skin-tone:' => '🧑🏾🤝🧑🏿',
+ ':people-holding-hands-medium-dark-skin-tone-light-skin-tone:' => '🧑🏾🤝🧑🏻',
+ ':people-holding-hands-medium-dark-skin-tone-medium-light-skin-tone:' => '🧑🏾🤝🧑🏼',
+ ':people-holding-hands-medium-dark-skin-tone-medium-skin-tone:' => '🧑🏾🤝🧑🏽',
+ ':people-holding-hands-medium-light-skin-tone:' => '🧑🏼🤝🧑🏼',
+ ':people-holding-hands-medium-light-skin-tone-dark-skin-tone:' => '🧑🏼🤝🧑🏿',
+ ':people-holding-hands-medium-light-skin-tone-light-skin-tone:' => '🧑🏼🤝🧑🏻',
+ ':people-holding-hands-medium-light-skin-tone-medium-dark-skin-tone:' => '🧑🏼🤝🧑🏾',
+ ':people-holding-hands-medium-light-skin-tone-medium-skin-tone:' => '🧑🏼🤝🧑🏽',
+ ':people-holding-hands-medium-skin-tone:' => '🧑🏽🤝🧑🏽',
+ ':people-holding-hands-medium-skin-tone-dark-skin-tone:' => '🧑🏽🤝🧑🏿',
+ ':people-holding-hands-medium-skin-tone-light-skin-tone:' => '🧑🏽🤝🧑🏻',
+ ':people-holding-hands-medium-skin-tone-medium-dark-skin-tone:' => '🧑🏽🤝🧑🏾',
+ ':people-holding-hands-medium-skin-tone-medium-light-skin-tone:' => '🧑🏽🤝🧑🏼',
+ ':person-in-manual-wheelchair-facing-right-dark-skin-tone:' => '🧑🏿🦽➡️',
+ ':person-in-manual-wheelchair-facing-right-light-skin-tone:' => '🧑🏻🦽➡️',
+ ':person-in-manual-wheelchair-facing-right-medium-dark-skin-tone:' => '🧑🏾🦽➡️',
+ ':person-in-manual-wheelchair-facing-right-medium-light-skin-tone:' => '🧑🏼🦽➡️',
+ ':person-in-manual-wheelchair-facing-right-medium-skin-tone:' => '🧑🏽🦽➡️',
+ ':person-in-motorized-wheelchair-facing-right-dark-skin-tone:' => '🧑🏿🦼➡️',
+ ':person-in-motorized-wheelchair-facing-right-light-skin-tone:' => '🧑🏻🦼➡️',
+ ':person-in-motorized-wheelchair-facing-right-medium-dark-skin-tone:' => '🧑🏾🦼➡️',
+ ':person-in-motorized-wheelchair-facing-right-medium-light-skin-tone:' => '🧑🏼🦼➡️',
+ ':person-in-motorized-wheelchair-facing-right-medium-skin-tone:' => '🧑🏽🦼➡️',
+ ':person-with-white-cane-facing-right-dark-skin-tone:' => '🧑🏿🦯➡️',
+ ':person-with-white-cane-facing-right-light-skin-tone:' => '🧑🏻🦯➡️',
+ ':person-with-white-cane-facing-right-medium-dark-skin-tone:' => '🧑🏾🦯➡️',
+ ':person-with-white-cane-facing-right-medium-light-skin-tone:' => '🧑🏼🦯➡️',
+ ':person-with-white-cane-facing-right-medium-skin-tone:' => '🧑🏽🦯➡️',
':scotland:' => '🏴',
':wales:' => '🏴',
- ':couplekiss-mm:' => '👨❤️💋👨',
- ':couplekiss-ww:' => '👩❤️💋👩',
+ ':woman-and-man-holding-hands-dark-skin-tone-light-skin-tone:' => '👩🏿🤝👨🏻',
+ ':woman-and-man-holding-hands-dark-skin-tone-medium-dark-skin-tone:' => '👩🏿🤝👨🏾',
+ ':woman-and-man-holding-hands-dark-skin-tone-medium-light-skin-tone:' => '👩🏿🤝👨🏼',
+ ':woman-and-man-holding-hands-dark-skin-tone-medium-skin-tone:' => '👩🏿🤝👨🏽',
+ ':woman-and-man-holding-hands-light-skin-tone-dark-skin-tone:' => '👩🏻🤝👨🏿',
+ ':woman-and-man-holding-hands-light-skin-tone-medium-dark-skin-tone:' => '👩🏻🤝👨🏾',
+ ':woman-and-man-holding-hands-light-skin-tone-medium-light-skin-tone:' => '👩🏻🤝👨🏼',
+ ':woman-and-man-holding-hands-light-skin-tone-medium-skin-tone:' => '👩🏻🤝👨🏽',
+ ':woman-and-man-holding-hands-medium-dark-skin-tone-dark-skin-tone:' => '👩🏾🤝👨🏿',
+ ':woman-and-man-holding-hands-medium-dark-skin-tone-light-skin-tone:' => '👩🏾🤝👨🏻',
+ ':woman-and-man-holding-hands-medium-dark-skin-tone-medium-light-skin-tone:' => '👩🏾🤝👨🏼',
+ ':woman-and-man-holding-hands-medium-dark-skin-tone-medium-skin-tone:' => '👩🏾🤝👨🏽',
+ ':woman-and-man-holding-hands-medium-light-skin-tone-dark-skin-tone:' => '👩🏼🤝👨🏿',
+ ':woman-and-man-holding-hands-medium-light-skin-tone-light-skin-tone:' => '👩🏼🤝👨🏻',
+ ':woman-and-man-holding-hands-medium-light-skin-tone-medium-dark-skin-tone:' => '👩🏼🤝👨🏾',
+ ':woman-and-man-holding-hands-medium-light-skin-tone-medium-skin-tone:' => '👩🏼🤝👨🏽',
+ ':woman-and-man-holding-hands-medium-skin-tone-dark-skin-tone:' => '👩🏽🤝👨🏿',
+ ':woman-and-man-holding-hands-medium-skin-tone-light-skin-tone:' => '👩🏽🤝👨🏻',
+ ':woman-and-man-holding-hands-medium-skin-tone-medium-dark-skin-tone:' => '👩🏽🤝👨🏾',
+ ':woman-and-man-holding-hands-medium-skin-tone-medium-light-skin-tone:' => '👩🏽🤝👨🏼',
+ ':woman-in-manual-wheelchair-facing-right-dark-skin-tone:' => '👩🏿🦽➡️',
+ ':woman-in-manual-wheelchair-facing-right-light-skin-tone:' => '👩🏻🦽➡️',
+ ':woman-in-manual-wheelchair-facing-right-medium-dark-skin-tone:' => '👩🏾🦽➡️',
+ ':woman-in-manual-wheelchair-facing-right-medium-light-skin-tone:' => '👩🏼🦽➡️',
+ ':woman-in-manual-wheelchair-facing-right-medium-skin-tone:' => '👩🏽🦽➡️',
+ ':woman-in-motorized-wheelchair-facing-right-dark-skin-tone:' => '👩🏿🦼➡️',
+ ':woman-in-motorized-wheelchair-facing-right-light-skin-tone:' => '👩🏻🦼➡️',
+ ':woman-in-motorized-wheelchair-facing-right-medium-dark-skin-tone:' => '👩🏾🦼➡️',
+ ':woman-in-motorized-wheelchair-facing-right-medium-light-skin-tone:' => '👩🏼🦼➡️',
+ ':woman-in-motorized-wheelchair-facing-right-medium-skin-tone:' => '👩🏽🦼➡️',
+ ':woman-with-white-cane-facing-right-dark-skin-tone:' => '👩🏿🦯➡️',
+ ':woman-with-white-cane-facing-right-light-skin-tone:' => '👩🏻🦯➡️',
+ ':woman-with-white-cane-facing-right-medium-dark-skin-tone:' => '👩🏾🦯➡️',
+ ':woman-with-white-cane-facing-right-medium-light-skin-tone:' => '👩🏼🦯➡️',
+ ':woman-with-white-cane-facing-right-medium-skin-tone:' => '👩🏽🦯➡️',
+ ':women-holding-hands-dark-skin-tone-light-skin-tone:' => '👩🏿🤝👩🏻',
+ ':women-holding-hands-dark-skin-tone-medium-dark-skin-tone:' => '👩🏿🤝👩🏾',
+ ':women-holding-hands-dark-skin-tone-medium-light-skin-tone:' => '👩🏿🤝👩🏼',
+ ':women-holding-hands-dark-skin-tone-medium-skin-tone:' => '👩🏿🤝👩🏽',
+ ':women-holding-hands-light-skin-tone-dark-skin-tone:' => '👩🏻🤝👩🏿',
+ ':women-holding-hands-light-skin-tone-medium-dark-skin-tone:' => '👩🏻🤝👩🏾',
+ ':women-holding-hands-light-skin-tone-medium-light-skin-tone:' => '👩🏻🤝👩🏼',
+ ':women-holding-hands-light-skin-tone-medium-skin-tone:' => '👩🏻🤝👩🏽',
+ ':women-holding-hands-medium-dark-skin-tone-dark-skin-tone:' => '👩🏾🤝👩🏿',
+ ':women-holding-hands-medium-dark-skin-tone-light-skin-tone:' => '👩🏾🤝👩🏻',
+ ':women-holding-hands-medium-dark-skin-tone-medium-light-skin-tone:' => '👩🏾🤝👩🏼',
+ ':women-holding-hands-medium-dark-skin-tone-medium-skin-tone:' => '👩🏾🤝👩🏽',
+ ':women-holding-hands-medium-light-skin-tone-dark-skin-tone:' => '👩🏼🤝👩🏿',
+ ':women-holding-hands-medium-light-skin-tone-light-skin-tone:' => '👩🏼🤝👩🏻',
+ ':women-holding-hands-medium-light-skin-tone-medium-dark-skin-tone:' => '👩🏼🤝👩🏾',
+ ':women-holding-hands-medium-light-skin-tone-medium-skin-tone:' => '👩🏼🤝👩🏽',
+ ':women-holding-hands-medium-skin-tone-dark-skin-tone:' => '👩🏽🤝👩🏿',
+ ':women-holding-hands-medium-skin-tone-light-skin-tone:' => '👩🏽🤝👩🏻',
+ ':women-holding-hands-medium-skin-tone-medium-dark-skin-tone:' => '👩🏽🤝👩🏾',
+ ':women-holding-hands-medium-skin-tone-medium-light-skin-tone:' => '👩🏽🤝👩🏼',
':man-kiss-man:' => '👨❤️💋👨',
':woman-kiss-man:' => '👩❤️💋👨',
':woman-kiss-woman:' => '👩❤️💋👩',
+ ':couple-with-heart-man-man-dark-skin-tone:' => '👨🏿❤️👨🏿',
+ ':couple-with-heart-man-man-dark-skin-tone-light-skin-tone:' => '👨🏿❤️👨🏻',
+ ':couple-with-heart-man-man-dark-skin-tone-medium-dark-skin-tone:' => '👨🏿❤️👨🏾',
+ ':couple-with-heart-man-man-dark-skin-tone-medium-light-skin-tone:' => '👨🏿❤️👨🏼',
+ ':couple-with-heart-man-man-dark-skin-tone-medium-skin-tone:' => '👨🏿❤️👨🏽',
+ ':couple-with-heart-man-man-light-skin-tone:' => '👨🏻❤️👨🏻',
+ ':couple-with-heart-man-man-light-skin-tone-dark-skin-tone:' => '👨🏻❤️👨🏿',
+ ':couple-with-heart-man-man-light-skin-tone-medium-dark-skin-tone:' => '👨🏻❤️👨🏾',
+ ':couple-with-heart-man-man-light-skin-tone-medium-light-skin-tone:' => '👨🏻❤️👨🏼',
+ ':couple-with-heart-man-man-light-skin-tone-medium-skin-tone:' => '👨🏻❤️👨🏽',
+ ':couple-with-heart-man-man-medium-dark-skin-tone:' => '👨🏾❤️👨🏾',
+ ':couple-with-heart-man-man-medium-dark-skin-tone-dark-skin-tone:' => '👨🏾❤️👨🏿',
+ ':couple-with-heart-man-man-medium-dark-skin-tone-light-skin-tone:' => '👨🏾❤️👨🏻',
+ ':couple-with-heart-man-man-medium-dark-skin-tone-medium-light-skin-tone:' => '👨🏾❤️👨🏼',
+ ':couple-with-heart-man-man-medium-dark-skin-tone-medium-skin-tone:' => '👨🏾❤️👨🏽',
+ ':couple-with-heart-man-man-medium-light-skin-tone:' => '👨🏼❤️👨🏼',
+ ':couple-with-heart-man-man-medium-light-skin-tone-dark-skin-tone:' => '👨🏼❤️👨🏿',
+ ':couple-with-heart-man-man-medium-light-skin-tone-light-skin-tone:' => '👨🏼❤️👨🏻',
+ ':couple-with-heart-man-man-medium-light-skin-tone-medium-dark-skin-tone:' => '👨🏼❤️👨🏾',
+ ':couple-with-heart-man-man-medium-light-skin-tone-medium-skin-tone:' => '👨🏼❤️👨🏽',
+ ':couple-with-heart-man-man-medium-skin-tone:' => '👨🏽❤️👨🏽',
+ ':couple-with-heart-man-man-medium-skin-tone-dark-skin-tone:' => '👨🏽❤️👨🏿',
+ ':couple-with-heart-man-man-medium-skin-tone-light-skin-tone:' => '👨🏽❤️👨🏻',
+ ':couple-with-heart-man-man-medium-skin-tone-medium-dark-skin-tone:' => '👨🏽❤️👨🏾',
+ ':couple-with-heart-man-man-medium-skin-tone-medium-light-skin-tone:' => '👨🏽❤️👨🏼',
+ ':couple-with-heart-person-person-dark-skin-tone-light-skin-tone:' => '🧑🏿❤️🧑🏻',
+ ':couple-with-heart-person-person-dark-skin-tone-medium-dark-skin-tone:' => '🧑🏿❤️🧑🏾',
+ ':couple-with-heart-person-person-dark-skin-tone-medium-light-skin-tone:' => '🧑🏿❤️🧑🏼',
+ ':couple-with-heart-person-person-dark-skin-tone-medium-skin-tone:' => '🧑🏿❤️🧑🏽',
+ ':couple-with-heart-person-person-light-skin-tone-dark-skin-tone:' => '🧑🏻❤️🧑🏿',
+ ':couple-with-heart-person-person-light-skin-tone-medium-dark-skin-tone:' => '🧑🏻❤️🧑🏾',
+ ':couple-with-heart-person-person-light-skin-tone-medium-light-skin-tone:' => '🧑🏻❤️🧑🏼',
+ ':couple-with-heart-person-person-light-skin-tone-medium-skin-tone:' => '🧑🏻❤️🧑🏽',
+ ':couple-with-heart-person-person-medium-dark-skin-tone-dark-skin-tone:' => '🧑🏾❤️🧑🏿',
+ ':couple-with-heart-person-person-medium-dark-skin-tone-light-skin-tone:' => '🧑🏾❤️🧑🏻',
+ ':couple-with-heart-person-person-medium-dark-skin-tone-medium-light-skin-tone:' => '🧑🏾❤️🧑🏼',
+ ':couple-with-heart-person-person-medium-dark-skin-tone-medium-skin-tone:' => '🧑🏾❤️🧑🏽',
+ ':couple-with-heart-person-person-medium-light-skin-tone-dark-skin-tone:' => '🧑🏼❤️🧑🏿',
+ ':couple-with-heart-person-person-medium-light-skin-tone-light-skin-tone:' => '🧑🏼❤️🧑🏻',
+ ':couple-with-heart-person-person-medium-light-skin-tone-medium-dark-skin-tone:' => '🧑🏼❤️🧑🏾',
+ ':couple-with-heart-person-person-medium-light-skin-tone-medium-skin-tone:' => '🧑🏼❤️🧑🏽',
+ ':couple-with-heart-person-person-medium-skin-tone-dark-skin-tone:' => '🧑🏽❤️🧑🏿',
+ ':couple-with-heart-person-person-medium-skin-tone-light-skin-tone:' => '🧑🏽❤️🧑🏻',
+ ':couple-with-heart-person-person-medium-skin-tone-medium-dark-skin-tone:' => '🧑🏽❤️🧑🏾',
+ ':couple-with-heart-person-person-medium-skin-tone-medium-light-skin-tone:' => '🧑🏽❤️🧑🏼',
+ ':couple-with-heart-woman-man-dark-skin-tone:' => '👩🏿❤️👨🏿',
+ ':couple-with-heart-woman-man-dark-skin-tone-light-skin-tone:' => '👩🏿❤️👨🏻',
+ ':couple-with-heart-woman-man-dark-skin-tone-medium-dark-skin-tone:' => '👩🏿❤️👨🏾',
+ ':couple-with-heart-woman-man-dark-skin-tone-medium-light-skin-tone:' => '👩🏿❤️👨🏼',
+ ':couple-with-heart-woman-man-dark-skin-tone-medium-skin-tone:' => '👩🏿❤️👨🏽',
+ ':couple-with-heart-woman-man-light-skin-tone:' => '👩🏻❤️👨🏻',
+ ':couple-with-heart-woman-man-light-skin-tone-dark-skin-tone:' => '👩🏻❤️👨🏿',
+ ':couple-with-heart-woman-man-light-skin-tone-medium-dark-skin-tone:' => '👩🏻❤️👨🏾',
+ ':couple-with-heart-woman-man-light-skin-tone-medium-light-skin-tone:' => '👩🏻❤️👨🏼',
+ ':couple-with-heart-woman-man-light-skin-tone-medium-skin-tone:' => '👩🏻❤️👨🏽',
+ ':couple-with-heart-woman-man-medium-dark-skin-tone:' => '👩🏾❤️👨🏾',
+ ':couple-with-heart-woman-man-medium-dark-skin-tone-dark-skin-tone:' => '👩🏾❤️👨🏿',
+ ':couple-with-heart-woman-man-medium-dark-skin-tone-light-skin-tone:' => '👩🏾❤️👨🏻',
+ ':couple-with-heart-woman-man-medium-dark-skin-tone-medium-light-skin-tone:' => '👩🏾❤️👨🏼',
+ ':couple-with-heart-woman-man-medium-dark-skin-tone-medium-skin-tone:' => '👩🏾❤️👨🏽',
+ ':couple-with-heart-woman-man-medium-light-skin-tone:' => '👩🏼❤️👨🏼',
+ ':couple-with-heart-woman-man-medium-light-skin-tone-dark-skin-tone:' => '👩🏼❤️👨🏿',
+ ':couple-with-heart-woman-man-medium-light-skin-tone-light-skin-tone:' => '👩🏼❤️👨🏻',
+ ':couple-with-heart-woman-man-medium-light-skin-tone-medium-dark-skin-tone:' => '👩🏼❤️👨🏾',
+ ':couple-with-heart-woman-man-medium-light-skin-tone-medium-skin-tone:' => '👩🏼❤️👨🏽',
+ ':couple-with-heart-woman-man-medium-skin-tone:' => '👩🏽❤️👨🏽',
+ ':couple-with-heart-woman-man-medium-skin-tone-dark-skin-tone:' => '👩🏽❤️👨🏿',
+ ':couple-with-heart-woman-man-medium-skin-tone-light-skin-tone:' => '👩🏽❤️👨🏻',
+ ':couple-with-heart-woman-man-medium-skin-tone-medium-dark-skin-tone:' => '👩🏽❤️👨🏾',
+ ':couple-with-heart-woman-man-medium-skin-tone-medium-light-skin-tone:' => '👩🏽❤️👨🏼',
+ ':couple-with-heart-woman-woman-dark-skin-tone:' => '👩🏿❤️👩🏿',
+ ':couple-with-heart-woman-woman-dark-skin-tone-light-skin-tone:' => '👩🏿❤️👩🏻',
+ ':couple-with-heart-woman-woman-dark-skin-tone-medium-dark-skin-tone:' => '👩🏿❤️👩🏾',
+ ':couple-with-heart-woman-woman-dark-skin-tone-medium-light-skin-tone:' => '👩🏿❤️👩🏼',
+ ':couple-with-heart-woman-woman-dark-skin-tone-medium-skin-tone:' => '👩🏿❤️👩🏽',
+ ':couple-with-heart-woman-woman-light-skin-tone:' => '👩🏻❤️👩🏻',
+ ':couple-with-heart-woman-woman-light-skin-tone-dark-skin-tone:' => '👩🏻❤️👩🏿',
+ ':couple-with-heart-woman-woman-light-skin-tone-medium-dark-skin-tone:' => '👩🏻❤️👩🏾',
+ ':couple-with-heart-woman-woman-light-skin-tone-medium-light-skin-tone:' => '👩🏻❤️👩🏼',
+ ':couple-with-heart-woman-woman-light-skin-tone-medium-skin-tone:' => '👩🏻❤️👩🏽',
+ ':couple-with-heart-woman-woman-medium-dark-skin-tone:' => '👩🏾❤️👩🏾',
+ ':couple-with-heart-woman-woman-medium-dark-skin-tone-dark-skin-tone:' => '👩🏾❤️👩🏿',
+ ':couple-with-heart-woman-woman-medium-dark-skin-tone-light-skin-tone:' => '👩🏾❤️👩🏻',
+ ':couple-with-heart-woman-woman-medium-dark-skin-tone-medium-light-skin-tone:' => '👩🏾❤️👩🏼',
+ ':couple-with-heart-woman-woman-medium-dark-skin-tone-medium-skin-tone:' => '👩🏾❤️👩🏽',
+ ':couple-with-heart-woman-woman-medium-light-skin-tone:' => '👩🏼❤️👩🏼',
+ ':couple-with-heart-woman-woman-medium-light-skin-tone-dark-skin-tone:' => '👩🏼❤️👩🏿',
+ ':couple-with-heart-woman-woman-medium-light-skin-tone-light-skin-tone:' => '👩🏼❤️👩🏻',
+ ':couple-with-heart-woman-woman-medium-light-skin-tone-medium-dark-skin-tone:' => '👩🏼❤️👩🏾',
+ ':couple-with-heart-woman-woman-medium-light-skin-tone-medium-skin-tone:' => '👩🏼❤️👩🏽',
+ ':couple-with-heart-woman-woman-medium-skin-tone:' => '👩🏽❤️👩🏽',
+ ':couple-with-heart-woman-woman-medium-skin-tone-dark-skin-tone:' => '👩🏽❤️👩🏿',
+ ':couple-with-heart-woman-woman-medium-skin-tone-light-skin-tone:' => '👩🏽❤️👩🏻',
+ ':couple-with-heart-woman-woman-medium-skin-tone-medium-dark-skin-tone:' => '👩🏽❤️👩🏾',
+ ':couple-with-heart-woman-woman-medium-skin-tone-medium-light-skin-tone:' => '👩🏽❤️👩🏼',
':kiss-mm:' => '👨❤️💋👨',
+ ':kiss-woman-man:' => '👩❤️💋👨',
':kiss-ww:' => '👩❤️💋👩',
+ ':man-kneeling-facing-right-dark-skin-tone:' => '🧎🏿♂️➡️',
+ ':man-kneeling-facing-right-light-skin-tone:' => '🧎🏻♂️➡️',
+ ':man-kneeling-facing-right-medium-dark-skin-tone:' => '🧎🏾♂️➡️',
+ ':man-kneeling-facing-right-medium-light-skin-tone:' => '🧎🏼♂️➡️',
+ ':man-kneeling-facing-right-medium-skin-tone:' => '🧎🏽♂️➡️',
+ ':man-running-facing-right-dark-skin-tone:' => '🏃🏿♂️➡️',
+ ':man-running-facing-right-light-skin-tone:' => '🏃🏻♂️➡️',
+ ':man-running-facing-right-medium-dark-skin-tone:' => '🏃🏾♂️➡️',
+ ':man-running-facing-right-medium-light-skin-tone:' => '🏃🏼♂️➡️',
+ ':man-running-facing-right-medium-skin-tone:' => '🏃🏽♂️➡️',
+ ':man-walking-facing-right-dark-skin-tone:' => '🚶🏿♂️➡️',
+ ':man-walking-facing-right-light-skin-tone:' => '🚶🏻♂️➡️',
+ ':man-walking-facing-right-medium-dark-skin-tone:' => '🚶🏾♂️➡️',
+ ':man-walking-facing-right-medium-light-skin-tone:' => '🚶🏼♂️➡️',
+ ':man-walking-facing-right-medium-skin-tone:' => '🚶🏽♂️➡️',
+ ':woman-kneeling-facing-right-dark-skin-tone:' => '🧎🏿♀️➡️',
+ ':woman-kneeling-facing-right-light-skin-tone:' => '🧎🏻♀️➡️',
+ ':woman-kneeling-facing-right-medium-dark-skin-tone:' => '🧎🏾♀️➡️',
+ ':woman-kneeling-facing-right-medium-light-skin-tone:' => '🧎🏼♀️➡️',
+ ':woman-kneeling-facing-right-medium-skin-tone:' => '🧎🏽♀️➡️',
+ ':woman-running-facing-right-dark-skin-tone:' => '🏃🏿♀️➡️',
+ ':woman-running-facing-right-light-skin-tone:' => '🏃🏻♀️➡️',
+ ':woman-running-facing-right-medium-dark-skin-tone:' => '🏃🏾♀️➡️',
+ ':woman-running-facing-right-medium-light-skin-tone:' => '🏃🏼♀️➡️',
+ ':woman-running-facing-right-medium-skin-tone:' => '🏃🏽♀️➡️',
+ ':woman-walking-facing-right-dark-skin-tone:' => '🚶🏿♀️➡️',
+ ':woman-walking-facing-right-light-skin-tone:' => '🚶🏻♀️➡️',
+ ':woman-walking-facing-right-medium-dark-skin-tone:' => '🚶🏾♀️➡️',
+ ':woman-walking-facing-right-medium-light-skin-tone:' => '🚶🏼♀️➡️',
+ ':woman-walking-facing-right-medium-skin-tone:' => '🚶🏽♀️➡️',
+ ':kiss-man-man-dark-skin-tone:' => '👨🏿❤️💋👨🏿',
+ ':kiss-man-man-dark-skin-tone-light-skin-tone:' => '👨🏿❤️💋👨🏻',
+ ':kiss-man-man-dark-skin-tone-medium-dark-skin-tone:' => '👨🏿❤️💋👨🏾',
+ ':kiss-man-man-dark-skin-tone-medium-light-skin-tone:' => '👨🏿❤️💋👨🏼',
+ ':kiss-man-man-dark-skin-tone-medium-skin-tone:' => '👨🏿❤️💋👨🏽',
+ ':kiss-man-man-light-skin-tone:' => '👨🏻❤️💋👨🏻',
+ ':kiss-man-man-light-skin-tone-dark-skin-tone:' => '👨🏻❤️💋👨🏿',
+ ':kiss-man-man-light-skin-tone-medium-dark-skin-tone:' => '👨🏻❤️💋👨🏾',
+ ':kiss-man-man-light-skin-tone-medium-light-skin-tone:' => '👨🏻❤️💋👨🏼',
+ ':kiss-man-man-light-skin-tone-medium-skin-tone:' => '👨🏻❤️💋👨🏽',
+ ':kiss-man-man-medium-dark-skin-tone:' => '👨🏾❤️💋👨🏾',
+ ':kiss-man-man-medium-dark-skin-tone-dark-skin-tone:' => '👨🏾❤️💋👨🏿',
+ ':kiss-man-man-medium-dark-skin-tone-light-skin-tone:' => '👨🏾❤️💋👨🏻',
+ ':kiss-man-man-medium-dark-skin-tone-medium-light-skin-tone:' => '👨🏾❤️💋👨🏼',
+ ':kiss-man-man-medium-dark-skin-tone-medium-skin-tone:' => '👨🏾❤️💋👨🏽',
+ ':kiss-man-man-medium-light-skin-tone:' => '👨🏼❤️💋👨🏼',
+ ':kiss-man-man-medium-light-skin-tone-dark-skin-tone:' => '👨🏼❤️💋👨🏿',
+ ':kiss-man-man-medium-light-skin-tone-light-skin-tone:' => '👨🏼❤️💋👨🏻',
+ ':kiss-man-man-medium-light-skin-tone-medium-dark-skin-tone:' => '👨🏼❤️💋👨🏾',
+ ':kiss-man-man-medium-light-skin-tone-medium-skin-tone:' => '👨🏼❤️💋👨🏽',
+ ':kiss-man-man-medium-skin-tone:' => '👨🏽❤️💋👨🏽',
+ ':kiss-man-man-medium-skin-tone-dark-skin-tone:' => '👨🏽❤️💋👨🏿',
+ ':kiss-man-man-medium-skin-tone-light-skin-tone:' => '👨🏽❤️💋👨🏻',
+ ':kiss-man-man-medium-skin-tone-medium-dark-skin-tone:' => '👨🏽❤️💋👨🏾',
+ ':kiss-man-man-medium-skin-tone-medium-light-skin-tone:' => '👨🏽❤️💋👨🏼',
+ ':kiss-person-person-dark-skin-tone-light-skin-tone:' => '🧑🏿❤️💋🧑🏻',
+ ':kiss-person-person-dark-skin-tone-medium-dark-skin-tone:' => '🧑🏿❤️💋🧑🏾',
+ ':kiss-person-person-dark-skin-tone-medium-light-skin-tone:' => '🧑🏿❤️💋🧑🏼',
+ ':kiss-person-person-dark-skin-tone-medium-skin-tone:' => '🧑🏿❤️💋🧑🏽',
+ ':kiss-person-person-light-skin-tone-dark-skin-tone:' => '🧑🏻❤️💋🧑🏿',
+ ':kiss-person-person-light-skin-tone-medium-dark-skin-tone:' => '🧑🏻❤️💋🧑🏾',
+ ':kiss-person-person-light-skin-tone-medium-light-skin-tone:' => '🧑🏻❤️💋🧑🏼',
+ ':kiss-person-person-light-skin-tone-medium-skin-tone:' => '🧑🏻❤️💋🧑🏽',
+ ':kiss-person-person-medium-dark-skin-tone-dark-skin-tone:' => '🧑🏾❤️💋🧑🏿',
+ ':kiss-person-person-medium-dark-skin-tone-light-skin-tone:' => '🧑🏾❤️💋🧑🏻',
+ ':kiss-person-person-medium-dark-skin-tone-medium-light-skin-tone:' => '🧑🏾❤️💋🧑🏼',
+ ':kiss-person-person-medium-dark-skin-tone-medium-skin-tone:' => '🧑🏾❤️💋🧑🏽',
+ ':kiss-person-person-medium-light-skin-tone-dark-skin-tone:' => '🧑🏼❤️💋🧑🏿',
+ ':kiss-person-person-medium-light-skin-tone-light-skin-tone:' => '🧑🏼❤️💋🧑🏻',
+ ':kiss-person-person-medium-light-skin-tone-medium-dark-skin-tone:' => '🧑🏼❤️💋🧑🏾',
+ ':kiss-person-person-medium-light-skin-tone-medium-skin-tone:' => '🧑🏼❤️💋🧑🏽',
+ ':kiss-person-person-medium-skin-tone-dark-skin-tone:' => '🧑🏽❤️💋🧑🏿',
+ ':kiss-person-person-medium-skin-tone-light-skin-tone:' => '🧑🏽❤️💋🧑🏻',
+ ':kiss-person-person-medium-skin-tone-medium-dark-skin-tone:' => '🧑🏽❤️💋🧑🏾',
+ ':kiss-person-person-medium-skin-tone-medium-light-skin-tone:' => '🧑🏽❤️💋🧑🏼',
+ ':kiss-woman-man-dark-skin-tone:' => '👩🏿❤️💋👨🏿',
+ ':kiss-woman-man-dark-skin-tone-light-skin-tone:' => '👩🏿❤️💋👨🏻',
+ ':kiss-woman-man-dark-skin-tone-medium-dark-skin-tone:' => '👩🏿❤️💋👨🏾',
+ ':kiss-woman-man-dark-skin-tone-medium-light-skin-tone:' => '👩🏿❤️💋👨🏼',
+ ':kiss-woman-man-dark-skin-tone-medium-skin-tone:' => '👩🏿❤️💋👨🏽',
+ ':kiss-woman-man-light-skin-tone:' => '👩🏻❤️💋👨🏻',
+ ':kiss-woman-man-light-skin-tone-dark-skin-tone:' => '👩🏻❤️💋👨🏿',
+ ':kiss-woman-man-light-skin-tone-medium-dark-skin-tone:' => '👩🏻❤️💋👨🏾',
+ ':kiss-woman-man-light-skin-tone-medium-light-skin-tone:' => '👩🏻❤️💋👨🏼',
+ ':kiss-woman-man-light-skin-tone-medium-skin-tone:' => '👩🏻❤️💋👨🏽',
+ ':kiss-woman-man-medium-dark-skin-tone:' => '👩🏾❤️💋👨🏾',
+ ':kiss-woman-man-medium-dark-skin-tone-dark-skin-tone:' => '👩🏾❤️💋👨🏿',
+ ':kiss-woman-man-medium-dark-skin-tone-light-skin-tone:' => '👩🏾❤️💋👨🏻',
+ ':kiss-woman-man-medium-dark-skin-tone-medium-light-skin-tone:' => '👩🏾❤️💋👨🏼',
+ ':kiss-woman-man-medium-dark-skin-tone-medium-skin-tone:' => '👩🏾❤️💋👨🏽',
+ ':kiss-woman-man-medium-light-skin-tone:' => '👩🏼❤️💋👨🏼',
+ ':kiss-woman-man-medium-light-skin-tone-dark-skin-tone:' => '👩🏼❤️💋👨🏿',
+ ':kiss-woman-man-medium-light-skin-tone-light-skin-tone:' => '👩🏼❤️💋👨🏻',
+ ':kiss-woman-man-medium-light-skin-tone-medium-dark-skin-tone:' => '👩🏼❤️💋👨🏾',
+ ':kiss-woman-man-medium-light-skin-tone-medium-skin-tone:' => '👩🏼❤️💋👨🏽',
+ ':kiss-woman-man-medium-skin-tone:' => '👩🏽❤️💋👨🏽',
+ ':kiss-woman-man-medium-skin-tone-dark-skin-tone:' => '👩🏽❤️💋👨🏿',
+ ':kiss-woman-man-medium-skin-tone-light-skin-tone:' => '👩🏽❤️💋👨🏻',
+ ':kiss-woman-man-medium-skin-tone-medium-dark-skin-tone:' => '👩🏽❤️💋👨🏾',
+ ':kiss-woman-man-medium-skin-tone-medium-light-skin-tone:' => '👩🏽❤️💋👨🏼',
+ ':kiss-woman-woman-dark-skin-tone:' => '👩🏿❤️💋👩🏿',
+ ':kiss-woman-woman-dark-skin-tone-light-skin-tone:' => '👩🏿❤️💋👩🏻',
+ ':kiss-woman-woman-dark-skin-tone-medium-dark-skin-tone:' => '👩🏿❤️💋👩🏾',
+ ':kiss-woman-woman-dark-skin-tone-medium-light-skin-tone:' => '👩🏿❤️💋👩🏼',
+ ':kiss-woman-woman-dark-skin-tone-medium-skin-tone:' => '👩🏿❤️💋👩🏽',
+ ':kiss-woman-woman-light-skin-tone:' => '👩🏻❤️💋👩🏻',
+ ':kiss-woman-woman-light-skin-tone-dark-skin-tone:' => '👩🏻❤️💋👩🏿',
+ ':kiss-woman-woman-light-skin-tone-medium-dark-skin-tone:' => '👩🏻❤️💋👩🏾',
+ ':kiss-woman-woman-light-skin-tone-medium-light-skin-tone:' => '👩🏻❤️💋👩🏼',
+ ':kiss-woman-woman-light-skin-tone-medium-skin-tone:' => '👩🏻❤️💋👩🏽',
+ ':kiss-woman-woman-medium-dark-skin-tone:' => '👩🏾❤️💋👩🏾',
+ ':kiss-woman-woman-medium-dark-skin-tone-dark-skin-tone:' => '👩🏾❤️💋👩🏿',
+ ':kiss-woman-woman-medium-dark-skin-tone-light-skin-tone:' => '👩🏾❤️💋👩🏻',
+ ':kiss-woman-woman-medium-dark-skin-tone-medium-light-skin-tone:' => '👩🏾❤️💋👩🏼',
+ ':kiss-woman-woman-medium-dark-skin-tone-medium-skin-tone:' => '👩🏾❤️💋👩🏽',
+ ':kiss-woman-woman-medium-light-skin-tone:' => '👩🏼❤️💋👩🏼',
+ ':kiss-woman-woman-medium-light-skin-tone-dark-skin-tone:' => '👩🏼❤️💋👩🏿',
+ ':kiss-woman-woman-medium-light-skin-tone-light-skin-tone:' => '👩🏼❤️💋👩🏻',
+ ':kiss-woman-woman-medium-light-skin-tone-medium-dark-skin-tone:' => '👩🏼❤️💋👩🏾',
+ ':kiss-woman-woman-medium-light-skin-tone-medium-skin-tone:' => '👩🏼❤️💋👩🏽',
+ ':kiss-woman-woman-medium-skin-tone:' => '👩🏽❤️💋👩🏽',
+ ':kiss-woman-woman-medium-skin-tone-dark-skin-tone:' => '👩🏽❤️💋👩🏿',
+ ':kiss-woman-woman-medium-skin-tone-light-skin-tone:' => '👩🏽❤️💋👩🏻',
+ ':kiss-woman-woman-medium-skin-tone-medium-dark-skin-tone:' => '👩🏽❤️💋👩🏾',
+ ':kiss-woman-woman-medium-skin-tone-medium-light-skin-tone:' => '👩🏽❤️💋👩🏼',
];
diff --git a/src/Symfony/Component/Emoji/Tests/EmojiTransliteratorTest.php b/src/Symfony/Component/Emoji/Tests/EmojiTransliteratorTest.php
index 0bdbf51ed36d5..1dacfe9917742 100644
--- a/src/Symfony/Component/Emoji/Tests/EmojiTransliteratorTest.php
+++ b/src/Symfony/Component/Emoji/Tests/EmojiTransliteratorTest.php
@@ -206,6 +206,6 @@ public function testGetErrorMessageWithUninitializedTransliterator()
{
$transliterator = EmojiTransliterator::create('emoji-en');
- $this->assertFalse($transliterator->getErrorMessage());
+ $this->assertSame('', $transliterator->getErrorMessage());
}
}
diff --git a/src/Symfony/Component/ErrorHandler/Debug.php b/src/Symfony/Component/ErrorHandler/Debug.php
index d54a38c4cac12..b090040d024b4 100644
--- a/src/Symfony/Component/ErrorHandler/Debug.php
+++ b/src/Symfony/Component/ErrorHandler/Debug.php
@@ -20,7 +20,7 @@ class Debug
{
public static function enable(): ErrorHandler
{
- error_reporting(-1);
+ error_reporting(\E_ALL & ~\E_DEPRECATED & ~\E_USER_DEPRECATED);
if (!\in_array(\PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) {
ini_set('display_errors', 0);
diff --git a/src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php b/src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php
index d0d1246a1ddbd..7bd9a083e53a4 100644
--- a/src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php
+++ b/src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php
@@ -233,6 +233,10 @@ private function formatFile(string $file, int $line, ?string $text = null): stri
$text .= ' at line '.$line;
}
+ if (!file_exists($file)) {
+ return $text;
+ }
+
$link = $this->fileLinkFormat->format($file, $line);
return \sprintf('%s', $this->escape($link), $text);
diff --git a/src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php b/src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php
index 8330ce15e47e9..cd71745ac8935 100644
--- a/src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php
+++ b/src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php
@@ -43,6 +43,7 @@ public function __construct(
protected Stopwatch $stopwatch,
protected ?LoggerInterface $logger = null,
private ?RequestStack $requestStack = null,
+ protected readonly ?\Closure $disabled = null,
) {
}
@@ -103,6 +104,9 @@ public function hasListeners(?string $eventName = null): bool
public function dispatch(object $event, ?string $eventName = null): object
{
+ if ($this->disabled?->__invoke()) {
+ return $this->dispatcher->dispatch($event, $eventName);
+ }
$eventName ??= $event::class;
$this->callStack ??= new \SplObjectStorage();
diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php
index e9c9cb9e55259..a0b3434a6b828 100644
--- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php
+++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php
@@ -39,14 +39,14 @@ public function __construct(
/**
* Transforms a normalized format into a localized money string.
*
- * @param int|float|null $value Normalized number
+ * @param int|float|string|null $value Normalized number
*
* @throws TransformationFailedException if the given value is not numeric or
* if the value cannot be transformed
*/
public function transform(mixed $value): string
{
- if (null !== $value && 1 !== $this->divisor) {
+ if (null !== $value && '' !== $value && 1 !== $this->divisor) {
if (!is_numeric($value)) {
throw new TransformationFailedException('Expected a numeric.');
}
diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php
index 3020dd1483c28..ffcbc1feee6d7 100644
--- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php
+++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php
@@ -41,14 +41,14 @@ public function __construct(
/**
* Transforms a number type into localized number.
*
- * @param int|float|null $value Number value
+ * @param int|float|string|null $value Number value
*
* @throws TransformationFailedException if the given value is not numeric
* or if the value cannot be transformed
*/
public function transform(mixed $value): string
{
- if (null === $value) {
+ if (null === $value || '' === $value) {
return '';
}
diff --git a/src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php b/src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php
index 299f919373403..a7da65bdb60fa 100644
--- a/src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php
+++ b/src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php
@@ -199,7 +199,13 @@ public function onSubmit(FormEvent $event): void
}
if ($this->keepAsList) {
- $formReindex = [];
+ $formReindex = $dataKeys = [];
+ foreach ($data as $key => $value) {
+ $dataKeys[] = $key;
+ }
+ foreach ($dataKeys as $key) {
+ unset($data[$key]);
+ }
foreach ($form as $name => $child) {
$formReindex[] = $child;
$form->remove($name);
@@ -207,9 +213,9 @@ public function onSubmit(FormEvent $event): void
foreach ($formReindex as $index => $child) {
$form->add($index, $this->type, array_replace([
'property_path' => '['.$index.']',
- ], $this->options));
+ ], $this->options, ['data' => $child->getData()]));
+ $data[$index] = $child->getData();
}
- $data = array_values($data);
}
$event->setData($data);
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/WeekType.php b/src/Symfony/Component/Form/Extension/Core/Type/WeekType.php
index aea4a6c564889..c4827604e5f0c 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/WeekType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/WeekType.php
@@ -39,7 +39,6 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
} else {
$yearOptions = $weekOptions = [
'error_bubbling' => true,
- 'empty_data' => '',
];
// when the form is compound the entries of the array are ignored in favor of children data
// so we need to handle the cascade setting here
diff --git a/src/Symfony/Component/Form/Resources/translations/validators.pt.xlf b/src/Symfony/Component/Form/Resources/translations/validators.pt.xlf
index 755108f357f5a..673e79f420223 100644
--- a/src/Symfony/Component/Form/Resources/translations/validators.pt.xlf
+++ b/src/Symfony/Component/Form/Resources/translations/validators.pt.xlf
@@ -24,7 +24,7 @@
The selected choice is invalid.
- A escolha seleccionada é inválida.
+ A escolha selecionada é inválida.
The collection is invalid.
diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php
index 2be154bc814dd..b9906c236ab3c 100644
--- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php
+++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php
@@ -16,6 +16,7 @@
use Symfony\Component\Form\Extension\Core\DataTransformer\BaseDateTimeTransformer;
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer;
use Symfony\Component\Form\Tests\Extension\Core\DataTransformer\Traits\DateTimeEqualsTrait;
+use Symfony\Component\Intl\Intl;
use Symfony\Component\Intl\Util\IntlTestHelper;
class DateTimeToLocalizedStringTransformerTest extends BaseDateTimeTransformerTestCase
@@ -235,6 +236,10 @@ public function testReverseTransformFullTime()
public function testReverseTransformFromDifferentLocale()
{
+ if (version_compare(Intl::getIcuVersion(), '71.1', '>')) {
+ $this->markTestSkipped('ICU version 71.1 or lower is required.');
+ }
+
\Locale::setDefault('en_US');
$transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC');
diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformerTest.php
index e5733ad96abb5..689c6f0d4da32 100644
--- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformerTest.php
+++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformerTest.php
@@ -54,6 +54,13 @@ public function testTransformExpectsNumeric()
$transformer->transform('abcd');
}
+ public function testTransformEmptyString()
+ {
+ $transformer = new MoneyToLocalizedStringTransformer(null, null, null, 100);
+
+ $this->assertSame('', $transformer->transform(''));
+ }
+
public function testTransformEmpty()
{
$transformer = new MoneyToLocalizedStringTransformer();
diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php
index 37448db51030a..c0344b9f232ea 100644
--- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php
+++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php
@@ -49,6 +49,7 @@ public static function provideTransformations()
{
return [
[null, '', 'de_AT'],
+ ['', '', 'de_AT'],
[1, '1', 'de_AT'],
[1.5, '1,5', 'de_AT'],
[1234.5, '1234,5', 'de_AT'],
diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php
index 934460c8f98a4..390f6b04a60c5 100644
--- a/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php
+++ b/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php
@@ -310,7 +310,7 @@ public function testOnSubmitDealsWithObjectBackedIteratorAggregate()
$this->assertArrayNotHasKey(2, $event->getData());
}
- public function testOnSubmitDealsWithArrayBackedIteratorAggregate()
+ public function testOnSubmitDealsWithDoctrineCollection()
{
$this->builder->add($this->getBuilder('1'));
@@ -323,6 +323,19 @@ public function testOnSubmitDealsWithArrayBackedIteratorAggregate()
$this->assertArrayNotHasKey(2, $event->getData());
}
+ public function testKeepAsListWorksWithTraversableArrayAccess()
+ {
+ $this->builder->add($this->getBuilder('1'));
+
+ $data = new \ArrayIterator([0 => 'first', 1 => 'second', 2 => 'third']);
+ $event = new FormEvent($this->builder->getForm(), $data);
+ $listener = new ResizeFormListener(TextType::class, keepAsList: true);
+ $listener->onSubmit($event);
+
+ $this->assertCount(1, $event->getData());
+ $this->assertArrayHasKey(0, $event->getData());
+ }
+
public function testOnSubmitDeleteEmptyNotCompoundEntriesIfAllowDelete()
{
$this->builder->setData(['0' => 'first', '1' => 'second']);
diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/FormTypeValidatorExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/FormTypeValidatorExtensionTest.php
index 2dec87b5c712c..bd52831e28c3d 100644
--- a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/FormTypeValidatorExtensionTest.php
+++ b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/FormTypeValidatorExtensionTest.php
@@ -257,7 +257,7 @@ public function testCollectionTypeKeepAsListOptionTrue()
{
$formMetadata = new ClassMetadata(Form::class);
$authorMetadata = (new ClassMetadata(Author::class))
- ->addPropertyConstraint('firstName', new NotBlank());
+ ->addPropertyConstraint('firstName', new Length(1));
$organizationMetadata = (new ClassMetadata(Organization::class))
->addPropertyConstraint('authors', new Valid());
$metadataFactory = $this->createMock(MetadataFactoryInterface::class);
@@ -301,22 +301,22 @@ public function testCollectionTypeKeepAsListOptionTrue()
$form->submit([
'authors' => [
0 => [
- 'firstName' => '', // Fires a Not Blank Error
+ 'firstName' => 'foobar', // Fires a Length Error
'lastName' => 'lastName1',
],
// key "1" could be missing if we add 4 blank form entries and then remove it.
2 => [
- 'firstName' => '', // Fires a Not Blank Error
+ 'firstName' => 'barfoo', // Fires a Length Error
'lastName' => 'lastName3',
],
3 => [
- 'firstName' => '', // Fires a Not Blank Error
+ 'firstName' => 'barbaz', // Fires a Length Error
'lastName' => 'lastName3',
],
],
]);
- // Form does have 3 not blank errors
+ // Form does have 3 length errors
$errors = $form->getErrors(true);
$this->assertCount(3, $errors);
@@ -328,12 +328,15 @@ public function testCollectionTypeKeepAsListOptionTrue()
];
$this->assertTrue($form->get('authors')->has('0'));
+ $this->assertSame('foobar', $form->get('authors')->get('0')->getData()->firstName);
$this->assertContains('data.authors[0].firstName', $errorPaths);
$this->assertTrue($form->get('authors')->has('1'));
+ $this->assertSame('barfoo', $form->get('authors')->get('1')->getData()->firstName);
$this->assertContains('data.authors[1].firstName', $errorPaths);
$this->assertTrue($form->get('authors')->has('2'));
+ $this->assertSame('barbaz', $form->get('authors')->get('2')->getData()->firstName);
$this->assertContains('data.authors[2].firstName', $errorPaths);
$this->assertFalse($form->get('authors')->has('3'));
diff --git a/src/Symfony/Component/Form/Tests/Fixtures/TestExtension.php b/src/Symfony/Component/Form/Tests/Fixtures/TestExtension.php
index 44725a69c71a5..2704ee5303ad2 100644
--- a/src/Symfony/Component/Form/Tests/Fixtures/TestExtension.php
+++ b/src/Symfony/Component/Form/Tests/Fixtures/TestExtension.php
@@ -34,7 +34,7 @@ public function addType(FormTypeInterface $type)
public function getType($name): FormTypeInterface
{
- return $this->types[$name] ?? null;
+ return $this->types[$name];
}
public function hasType($name): bool
diff --git a/src/Symfony/Component/HttpClient/AmpHttpClient.php b/src/Symfony/Component/HttpClient/AmpHttpClient.php
index 4c73fbaf3db24..0bfa824a9a9a5 100644
--- a/src/Symfony/Component/HttpClient/AmpHttpClient.php
+++ b/src/Symfony/Component/HttpClient/AmpHttpClient.php
@@ -33,7 +33,7 @@
use Symfony\Contracts\Service\ResetInterface;
if (!interface_exists(DelegateHttpClient::class)) {
- throw new \LogicException('You cannot use "Symfony\Component\HttpClient\AmpHttpClient" as the "amphp/http-client" package is not installed. Try running "composer require amphp/http-client:^4.2.1".');
+ throw new \LogicException('You cannot use "Symfony\Component\HttpClient\AmpHttpClient" as the "amphp/http-client" package is not installed. Try running "composer require amphp/http-client:^5".');
}
if (\PHP_VERSION_ID < 80400 && is_subclass_of(Request::class, HttpMessage::class)) {
diff --git a/src/Symfony/Component/HttpClient/DependencyInjection/HttpClientPass.php b/src/Symfony/Component/HttpClient/DependencyInjection/HttpClientPass.php
index 214a655bc6992..2888d2e5c15b2 100644
--- a/src/Symfony/Component/HttpClient/DependencyInjection/HttpClientPass.php
+++ b/src/Symfony/Component/HttpClient/DependencyInjection/HttpClientPass.php
@@ -27,7 +27,7 @@ public function process(ContainerBuilder $container): void
foreach ($container->findTaggedServiceIds('http_client.client') as $id => $tags) {
$container->register('.debug.'.$id, TraceableHttpClient::class)
- ->setArguments([new Reference('.debug.'.$id.'.inner'), new Reference('debug.stopwatch', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)])
+ ->setArguments([new Reference('.debug.'.$id.'.inner'), new Reference('debug.stopwatch', ContainerInterface::IGNORE_ON_INVALID_REFERENCE), new Reference('profiler.is_disabled_state_checker', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)])
->addTag('kernel.reset', ['method' => 'reset'])
->setDecoratedService($id, null, 5);
$container->getDefinition('data_collector.http_client')
diff --git a/src/Symfony/Component/HttpClient/HttpClient.php b/src/Symfony/Component/HttpClient/HttpClient.php
index 3eb3665614fd7..27659358bce4c 100644
--- a/src/Symfony/Component/HttpClient/HttpClient.php
+++ b/src/Symfony/Component/HttpClient/HttpClient.php
@@ -62,7 +62,7 @@ public static function create(array $defaultOptions = [], int $maxHostConnection
return new AmpHttpClient($defaultOptions, null, $maxHostConnections, $maxPendingPushes);
}
- @trigger_error((\extension_loaded('curl') ? 'Upgrade' : 'Install').' the curl extension or run "composer require amphp/http-client:^4.2.1" to perform async HTTP operations, including full HTTP/2 support', \E_USER_NOTICE);
+ @trigger_error((\extension_loaded('curl') ? 'Upgrade' : 'Install').' the curl extension or run "composer require amphp/http-client:^5" to perform async HTTP operations, including full HTTP/2 support', \E_USER_NOTICE);
return new NativeHttpClient($defaultOptions, $maxHostConnections);
}
diff --git a/src/Symfony/Component/HttpClient/Response/CurlResponse.php b/src/Symfony/Component/HttpClient/Response/CurlResponse.php
index e35132d41cccc..8ff8586553d2d 100644
--- a/src/Symfony/Component/HttpClient/Response/CurlResponse.php
+++ b/src/Symfony/Component/HttpClient/Response/CurlResponse.php
@@ -126,9 +126,14 @@ public function __construct(
curl_setopt($ch, \CURLOPT_NOPROGRESS, false);
curl_setopt($ch, \CURLOPT_PROGRESSFUNCTION, static function ($ch, $dlSize, $dlNow) use ($onProgress, &$info, $url, $multi, $debugBuffer) {
try {
+ $info['debug'] ??= '';
rewind($debugBuffer);
- $debug = ['debug' => stream_get_contents($debugBuffer)];
- $onProgress($dlNow, $dlSize, $url + curl_getinfo($ch) + $info + $debug);
+ if (fstat($debugBuffer)['size']) {
+ $info['debug'] .= stream_get_contents($debugBuffer);
+ rewind($debugBuffer);
+ ftruncate($debugBuffer, 0);
+ }
+ $onProgress($dlNow, $dlSize, $url + curl_getinfo($ch) + $info);
} catch (\Throwable $e) {
$multi->handlesActivity[(int) $ch][] = null;
$multi->handlesActivity[(int) $ch][] = $e;
@@ -200,7 +205,6 @@ public function getInfo(?string $type = null): mixed
{
if (!$info = $this->finalInfo) {
$info = array_merge($this->info, curl_getinfo($this->handle));
- $info['url'] = $this->info['url'] ?? $info['url'];
$info['redirect_url'] = $this->info['redirect_url'] ?? null;
// workaround curl not subtracting the time offset for pushed responses
@@ -209,14 +213,18 @@ public function getInfo(?string $type = null): mixed
$info['starttransfer_time'] = 0.0;
}
+ $info['debug'] ??= '';
rewind($this->debugBuffer);
- $info['debug'] = stream_get_contents($this->debugBuffer);
+ if (fstat($this->debugBuffer)['size']) {
+ $info['debug'] .= stream_get_contents($this->debugBuffer);
+ rewind($this->debugBuffer);
+ ftruncate($this->debugBuffer, 0);
+ }
+ $this->info = array_merge($this->info, $info);
$waitFor = curl_getinfo($this->handle, \CURLINFO_PRIVATE);
if ('H' !== $waitFor[0] && 'C' !== $waitFor[0]) {
curl_setopt($this->handle, \CURLOPT_VERBOSE, false);
- rewind($this->debugBuffer);
- ftruncate($this->debugBuffer, 0);
$this->finalInfo = $info;
}
}
diff --git a/src/Symfony/Component/HttpClient/Response/TraceableResponse.php b/src/Symfony/Component/HttpClient/Response/TraceableResponse.php
index c8a796d6e94a0..f7d402eb9c6ee 100644
--- a/src/Symfony/Component/HttpClient/Response/TraceableResponse.php
+++ b/src/Symfony/Component/HttpClient/Response/TraceableResponse.php
@@ -34,7 +34,7 @@ class TraceableResponse implements ResponseInterface, StreamableInterface
public function __construct(
private HttpClientInterface $client,
private ResponseInterface $response,
- private mixed &$content,
+ private mixed &$content = false,
private ?StopwatchEvent $event = null,
) {
}
diff --git a/src/Symfony/Component/HttpClient/Response/TransportResponseTrait.php b/src/Symfony/Component/HttpClient/Response/TransportResponseTrait.php
index 1d6f941c5b9b3..e4c8a4a52cfd1 100644
--- a/src/Symfony/Component/HttpClient/Response/TransportResponseTrait.php
+++ b/src/Symfony/Component/HttpClient/Response/TransportResponseTrait.php
@@ -30,6 +30,7 @@
trait TransportResponseTrait
{
private Canary $canary;
+ /** @var array> */
private array $headers = [];
private array $info = [
'response_headers' => [],
diff --git a/src/Symfony/Component/HttpClient/TraceableHttpClient.php b/src/Symfony/Component/HttpClient/TraceableHttpClient.php
index 83342db58f470..e65a5cc6db0a2 100644
--- a/src/Symfony/Component/HttpClient/TraceableHttpClient.php
+++ b/src/Symfony/Component/HttpClient/TraceableHttpClient.php
@@ -31,15 +31,20 @@ final class TraceableHttpClient implements HttpClientInterface, ResetInterface,
public function __construct(
private HttpClientInterface $client,
private ?Stopwatch $stopwatch = null,
+ private ?\Closure $disabled = null,
) {
$this->tracedRequests = new \ArrayObject();
}
public function request(string $method, string $url, array $options = []): ResponseInterface
{
+ if ($this->disabled?->__invoke()) {
+ return new TraceableResponse($this->client, $this->client->request($method, $url, $options));
+ }
+
$content = null;
$traceInfo = [];
- $this->tracedRequests[] = [
+ $tracedRequest = [
'method' => $method,
'url' => $url,
'options' => $options,
@@ -51,7 +56,9 @@ public function request(string $method, string $url, array $options = []): Respo
if (false === ($options['extra']['trace_content'] ?? true)) {
unset($content);
$content = false;
+ unset($tracedRequest['options']['body'], $tracedRequest['options']['json']);
}
+ $this->tracedRequests[] = $tracedRequest;
$options['on_progress'] = function (int $dlNow, int $dlSize, array $info) use (&$traceInfo, $onProgress) {
$traceInfo = $info;
diff --git a/src/Symfony/Component/HttpClient/composer.json b/src/Symfony/Component/HttpClient/composer.json
index 7ca008fd01f13..39e43f50b4fcd 100644
--- a/src/Symfony/Component/HttpClient/composer.json
+++ b/src/Symfony/Component/HttpClient/composer.json
@@ -31,7 +31,6 @@
"require-dev": {
"amphp/http-client": "^4.2.1|^5.0",
"amphp/http-tunnel": "^1.0|^2.0",
- "amphp/socket": "^1.1",
"guzzlehttp/promises": "^1.4|^2.0",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
@@ -46,6 +45,7 @@
},
"conflict": {
"amphp/amp": "<2.5",
+ "amphp/socket": "<1.1",
"php-http/discovery": "<1.15",
"symfony/http-foundation": "<6.4"
},
diff --git a/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php b/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php
index 2c4d831bb9afa..a7358183bd461 100644
--- a/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php
+++ b/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php
@@ -237,7 +237,7 @@ public function prepare(Request $request): static
$path = $location.substr($path, \strlen($pathPrefix));
// Only set X-Accel-Redirect header if a valid URI can be produced
// as nginx does not serve arbitrary file paths.
- $this->headers->set($type, $path);
+ $this->headers->set($type, rawurlencode($path));
$this->maxlen = 0;
break;
}
diff --git a/src/Symfony/Component/HttpFoundation/CHANGELOG.md b/src/Symfony/Component/HttpFoundation/CHANGELOG.md
index 59070ee8b307a..374c31889df3c 100644
--- a/src/Symfony/Component/HttpFoundation/CHANGELOG.md
+++ b/src/Symfony/Component/HttpFoundation/CHANGELOG.md
@@ -7,6 +7,9 @@ CHANGELOG
* Add support for iterable of string in `StreamedResponse`
* Add `EventStreamResponse` and `ServerEvent` classes to streamline server event streaming
* Add support for `valkey:` / `valkeys:` schemes for sessions
+ * `Request::getPreferredLanguage()` now favors a more preferred language above exactly matching a locale
+ * Allow `UriSigner` to use a `ClockInterface`
+ * Add `UriSigner::verify()`
7.2
---
diff --git a/src/Symfony/Component/HttpFoundation/Exception/ExpiredSignedUriException.php b/src/Symfony/Component/HttpFoundation/Exception/ExpiredSignedUriException.php
new file mode 100644
index 0000000000000..613e08ef46c63
--- /dev/null
+++ b/src/Symfony/Component/HttpFoundation/Exception/ExpiredSignedUriException.php
@@ -0,0 +1,26 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpFoundation\Exception;
+
+/**
+ * @author Kevin Bond
+ */
+final class ExpiredSignedUriException extends SignedUriException
+{
+ /**
+ * @internal
+ */
+ public function __construct()
+ {
+ parent::__construct('The URI has expired.');
+ }
+}
diff --git a/src/Symfony/Component/HttpFoundation/Exception/SignedUriException.php b/src/Symfony/Component/HttpFoundation/Exception/SignedUriException.php
new file mode 100644
index 0000000000000..17b729d315d70
--- /dev/null
+++ b/src/Symfony/Component/HttpFoundation/Exception/SignedUriException.php
@@ -0,0 +1,19 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpFoundation\Exception;
+
+/**
+ * @author Kevin Bond
+ */
+abstract class SignedUriException extends \RuntimeException implements ExceptionInterface
+{
+}
diff --git a/src/Symfony/Component/HttpFoundation/Exception/UnsignedUriException.php b/src/Symfony/Component/HttpFoundation/Exception/UnsignedUriException.php
new file mode 100644
index 0000000000000..5eabb806b2370
--- /dev/null
+++ b/src/Symfony/Component/HttpFoundation/Exception/UnsignedUriException.php
@@ -0,0 +1,26 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpFoundation\Exception;
+
+/**
+ * @author Kevin Bond
+ */
+final class UnsignedUriException extends SignedUriException
+{
+ /**
+ * @internal
+ */
+ public function __construct()
+ {
+ parent::__construct('The URI is not signed.');
+ }
+}
diff --git a/src/Symfony/Component/HttpFoundation/Exception/UnverifiedSignedUriException.php b/src/Symfony/Component/HttpFoundation/Exception/UnverifiedSignedUriException.php
new file mode 100644
index 0000000000000..cc7e98bf2dd3c
--- /dev/null
+++ b/src/Symfony/Component/HttpFoundation/Exception/UnverifiedSignedUriException.php
@@ -0,0 +1,26 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpFoundation\Exception;
+
+/**
+ * @author Kevin Bond
+ */
+final class UnverifiedSignedUriException extends SignedUriException
+{
+ /**
+ * @internal
+ */
+ public function __construct()
+ {
+ parent::__construct('The URI signature is invalid.');
+ }
+}
diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php
index db78105cc83cf..dba930a242672 100644
--- a/src/Symfony/Component/HttpFoundation/Request.php
+++ b/src/Symfony/Component/HttpFoundation/Request.php
@@ -1384,7 +1384,7 @@ public function isMethodCacheable(): bool
public function getProtocolVersion(): ?string
{
if ($this->isFromTrustedProxy()) {
- preg_match('~^(HTTP/)?([1-9]\.[0-9]) ~', $this->headers->get('Via') ?? '', $matches);
+ preg_match('~^(HTTP/)?([1-9]\.[0-9])\b~', $this->headers->get('Via') ?? '', $matches);
if ($matches) {
return 'HTTP/'.$matches[2];
@@ -1553,10 +1553,6 @@ public function getPreferredLanguage(?array $locales = null): ?string
return $locales[0];
}
- if ($matches = array_intersect($preferredLanguages, $locales)) {
- return current($matches);
- }
-
$combinations = array_merge(...array_map($this->getLanguageCombinations(...), $preferredLanguages));
foreach ($combinations as $combination) {
foreach ($locales as $locale) {
diff --git a/src/Symfony/Component/HttpFoundation/Response.php b/src/Symfony/Component/HttpFoundation/Response.php
index 638b5bf601347..6766f2c77099e 100644
--- a/src/Symfony/Component/HttpFoundation/Response.php
+++ b/src/Symfony/Component/HttpFoundation/Response.php
@@ -317,6 +317,11 @@ public function sendHeaders(?int $statusCode = null): static
{
// headers have already been sent by the developer
if (headers_sent()) {
+ if (!\in_array(\PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) {
+ $statusCode ??= $this->statusCode;
+ header(\sprintf('HTTP/%s %s %s', $this->version, $statusCode, $this->statusText), true, $statusCode);
+ }
+
return $this;
}
diff --git a/src/Symfony/Component/HttpFoundation/StreamedResponse.php b/src/Symfony/Component/HttpFoundation/StreamedResponse.php
index 6eedf1c49d2e8..4e755a7cdf07f 100644
--- a/src/Symfony/Component/HttpFoundation/StreamedResponse.php
+++ b/src/Symfony/Component/HttpFoundation/StreamedResponse.php
@@ -56,6 +56,8 @@ public function setChunks(iterable $chunks): static
$this->callback = static function () use ($chunks): void {
foreach ($chunks as $chunk) {
echo $chunk;
+ @ob_flush();
+ flush();
}
};
diff --git a/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php
index 1263fa39298ff..7627cd5ec492a 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php
@@ -314,7 +314,15 @@ public function testXAccelMapping($realpath, $mapping, $virtual)
$property->setValue($response, $file);
$response->prepare($request);
- $this->assertEquals($virtual, $response->headers->get('X-Accel-Redirect'));
+ $header = $response->headers->get('X-Accel-Redirect');
+
+ if ($virtual) {
+ // Making sure the path doesn't contain characters unsupported by nginx
+ $this->assertMatchesRegularExpression('/^([^?%]|%[0-9A-F]{2})*$/', $header);
+ $header = rawurldecode($header);
+ }
+
+ $this->assertEquals($virtual, $header);
}
public function testDeleteFileAfterSend()
@@ -361,6 +369,7 @@ public static function getSampleXAccelMappings()
['/home/Foo/bar.txt', '/var/www/=/files/,/home/Foo/=/baz/', '/baz/bar.txt'],
['/home/Foo/bar.txt', '"/var/www/"="/files/", "/home/Foo/"="/baz/"', '/baz/bar.txt'],
['/tmp/bar.txt', '"/var/www/"="/files/", "/home/Foo/"="/baz/"', null],
+ ['/var/www/var/www/files/foo%.txt', '/var/www/=/files/', '/files/var/www/files/foo%.txt'],
];
}
diff --git a/src/Symfony/Component/HttpFoundation/Tests/InputBagTest.php b/src/Symfony/Component/HttpFoundation/Tests/InputBagTest.php
index 36eb9ead54313..d23f17f712450 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/InputBagTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/InputBagTest.php
@@ -71,7 +71,7 @@ public function __toString(): string
$this->assertSame('foo', $bag->getString('unknown', 'foo'), '->getString() returns the default if a parameter is not defined');
$this->assertSame('1', $bag->getString('bool_true'), '->getString() returns "1" if a parameter is true');
$this->assertSame('', $bag->getString('bool_false', 'foo'), '->getString() returns an empty empty string if a parameter is false');
- $this->assertSame('strval', $bag->getString('stringable'), '->getString() gets a value of a stringable paramater as string');
+ $this->assertSame('strval', $bag->getString('stringable'), '->getString() gets a value of a stringable parameter as string');
}
public function testGetStringExceptionWithArray()
diff --git a/src/Symfony/Component/HttpFoundation/Tests/ParameterBagTest.php b/src/Symfony/Component/HttpFoundation/Tests/ParameterBagTest.php
index 5729af2c22fa1..d9ce41146afde 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/ParameterBagTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/ParameterBagTest.php
@@ -219,7 +219,7 @@ public function __toString(): string
$this->assertSame('foo', $bag->getString('unknown', 'foo'), '->getString() returns the default if a parameter is not defined');
$this->assertSame('1', $bag->getString('bool_true'), '->getString() returns "1" if a parameter is true');
$this->assertSame('', $bag->getString('bool_false', 'foo'), '->getString() returns an empty empty string if a parameter is false');
- $this->assertSame('strval', $bag->getString('stringable'), '->getString() gets a value of a stringable paramater as string');
+ $this->assertSame('strval', $bag->getString('stringable'), '->getString() gets a value of a stringable parameter as string');
}
public function testGetStringExceptionWithArray()
diff --git a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php
index d5a41390e1b5d..5cfb980a7b43b 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php
@@ -589,7 +589,6 @@ public function testGetUri()
$server['REDIRECT_QUERY_STRING'] = 'query=string';
$server['REDIRECT_URL'] = '/path/info';
- $server['SCRIPT_NAME'] = '/index.php';
$server['QUERY_STRING'] = 'query=string';
$server['REQUEST_URI'] = '/path/info?toto=test&1=1';
$server['SCRIPT_NAME'] = '/index.php';
@@ -716,7 +715,6 @@ public function testGetUriForPath()
$server['REDIRECT_QUERY_STRING'] = 'query=string';
$server['REDIRECT_URL'] = '/path/info';
- $server['SCRIPT_NAME'] = '/index.php';
$server['QUERY_STRING'] = 'query=string';
$server['REQUEST_URI'] = '/path/info?toto=test&1=1';
$server['SCRIPT_NAME'] = '/index.php';
@@ -1550,16 +1548,16 @@ public static function providePreferredLanguage(): iterable
yield '"fr" selected as first choice when no header is present' => ['fr', null, ['fr', 'en']];
yield '"en" selected as first choice when no header is present' => ['en', null, ['en', 'fr']];
yield '"fr_CH" selected as first choice when no header is present' => ['fr_CH', null, ['fr-ch', 'fr-fr']];
- yield '"en_US" is selected as an exact match is found (1)' => ['en_US', 'zh, en-us; q=0.8, en; q=0.6', ['en', 'en-us']];
- yield '"en_US" is selected as an exact match is found (2)' => ['en_US', 'ja-JP,fr_CA;q=0.7,fr;q=0.5,en_US;q=0.3', ['en_US', 'fr_FR']];
- yield '"en" is selected as an exact match is found' => ['en', 'zh, en-us; q=0.8, en; q=0.6', ['fr', 'en']];
- yield '"fr" is selected as an exact match is found' => ['fr', 'zh, en-us; q=0.8, fr-fr; q=0.6, fr; q=0.5', ['fr', 'en']];
+ yield '"en_US" is selected as an exact match is found' => ['en_US', 'zh, en-us; q=0.8, en; q=0.6', ['en', 'en-us']];
+ yield '"fr_FR" is selected as it has a higher priority than an exact match' => ['fr_FR', 'ja-JP,fr_CA;q=0.7,fr;q=0.5,en_US;q=0.3', ['en_US', 'fr_FR']];
+ yield '"en" is selected as an exact match is found (1)' => ['en', 'zh, en-us; q=0.8, en; q=0.6', ['fr', 'en']];
+ yield '"en" is selected as an exact match is found (2)' => ['en', 'zh, en-us; q=0.8, fr-fr; q=0.6, fr; q=0.5', ['fr', 'en']];
yield '"en" is selected as "en-us" is a similar dialect' => ['en', 'zh, en-us; q=0.8', ['fr', 'en']];
yield '"fr_FR" is selected as "fr_CA" is a similar dialect (1)' => ['fr_FR', 'ja-JP,fr_CA;q=0.7,fr;q=0.5', ['en_US', 'fr_FR']];
yield '"fr_FR" is selected as "fr_CA" is a similar dialect (2)' => ['fr_FR', 'ja-JP,fr_CA;q=0.7', ['en_US', 'fr_FR']];
- yield '"fr_FR" is selected as "fr" is a similar dialect' => ['fr_FR', 'ja-JP,fr;q=0.5', ['en_US', 'fr_FR']];
+ yield '"fr_FR" is selected as "fr" is a similar dialect (1)' => ['fr_FR', 'ja-JP,fr;q=0.5', ['en_US', 'fr_FR']];
+ yield '"fr_FR" is selected as "fr" is a similar dialect (2)' => ['fr_FR', 'ja-JP,fr;q=0.5,en_US;q=0.3', ['en_US', 'fr_FR']];
yield '"fr_FR" is selected as "fr_CA" is a similar dialect and has a greater "q" compared to "en_US" (2)' => ['fr_FR', 'ja-JP,fr_CA;q=0.7,ru-ru;q=0.3', ['en_US', 'fr_FR']];
- yield '"en_US" is selected it is an exact match' => ['en_US', 'ja-JP,fr;q=0.5,en_US;q=0.3', ['en_US', 'fr_FR']];
yield '"fr_FR" is selected as "fr_CA" is a similar dialect and has a greater "q" compared to "en"' => ['fr_FR', 'ja-JP,fr_CA;q=0.7,en;q=0.5', ['en_US', 'fr_FR']];
yield '"fr_FR" is selected as is is an exact match as well as "en_US", but with a greater "q" parameter' => ['fr_FR', 'en-us;q=0.5,fr-fr', ['en_US', 'fr_FR']];
yield '"hi_IN" is selected as "hi_Latn_IN" is a similar dialect' => ['hi_IN', 'fr-fr,hi_Latn_IN;q=0.5', ['hi_IN', 'en_US']];
@@ -2419,6 +2417,8 @@ public static function protocolVersionProvider()
'trusted with via and protocol name' => ['HTTP/2.0', true, 'HTTP/1.0 fred, HTTP/1.1 nowhere.com (Apache/1.1)', 'HTTP/1.0'],
'trusted with broken via' => ['HTTP/2.0', true, 'HTTP/1^0 foo', 'HTTP/2.0'],
'trusted with partially-broken via' => ['HTTP/2.0', true, '1.0 fred, foo', 'HTTP/1.0'],
+ 'trusted with simple via' => ['HTTP/2.0', true, 'HTTP/1.0', 'HTTP/1.0'],
+ 'trusted with only version via' => ['HTTP/2.0', true, '1.0', 'HTTP/1.0'],
];
}
diff --git a/src/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php
index 2a8fe582501a6..fdaee3a35ff6f 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php
@@ -30,10 +30,14 @@ public function testConstructorWithChunks()
$chunks = ['foo', 'bar', 'baz'];
$callback = (new StreamedResponse($chunks))->getCallback();
- ob_start();
+ $buffer = '';
+ ob_start(function (string $chunk) use (&$buffer) {
+ $buffer .= $chunk;
+ });
$callback();
- $this->assertSame('foobarbaz', ob_get_clean());
+ ob_get_clean();
+ $this->assertSame('foobarbaz', $buffer);
}
public function testPrepareWith11Protocol()
diff --git a/src/Symfony/Component/HttpFoundation/Tests/UriSignerTest.php b/src/Symfony/Component/HttpFoundation/Tests/UriSignerTest.php
index 927e2bda84db8..81b35c28e1fc9 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/UriSignerTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/UriSignerTest.php
@@ -12,7 +12,11 @@
namespace Symfony\Component\HttpFoundation\Tests;
use PHPUnit\Framework\TestCase;
+use Symfony\Component\Clock\MockClock;
+use Symfony\Component\HttpFoundation\Exception\ExpiredSignedUriException;
use Symfony\Component\HttpFoundation\Exception\LogicException;
+use Symfony\Component\HttpFoundation\Exception\UnsignedUriException;
+use Symfony\Component\HttpFoundation\Exception\UnverifiedSignedUriException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\UriSigner;
@@ -199,9 +203,62 @@ public function testCheckWithUriExpiration()
$this->assertFalse($signer->check($relativeUriFromNow3));
}
+ public function testCheckWithUriExpirationWithClock()
+ {
+ $clock = new MockClock();
+ $signer = new UriSigner('foobar', clock: $clock);
+
+ $this->assertFalse($signer->check($signer->sign('http://example.com/foo', new \DateTimeImmutable('2000-01-01 00:00:00'))));
+ $this->assertFalse($signer->check($signer->sign('http://example.com/foo?foo=bar', new \DateTimeImmutable('2000-01-01 00:00:00'))));
+ $this->assertFalse($signer->check($signer->sign('http://example.com/foo?foo=bar&0=integer', new \DateTimeImmutable('2000-01-01 00:00:00'))));
+
+ $this->assertFalse($signer->check($signer->sign('http://example.com/foo', 1577836800))); // 2000-01-01
+ $this->assertFalse($signer->check($signer->sign('http://example.com/foo?foo=bar', 1577836800))); // 2000-01-01
+ $this->assertFalse($signer->check($signer->sign('http://example.com/foo?foo=bar&0=integer', 1577836800))); // 2000-01-01
+
+ $relativeUriFromNow1 = $signer->sign('http://example.com/foo', new \DateInterval('PT3S'));
+ $relativeUriFromNow2 = $signer->sign('http://example.com/foo?foo=bar', new \DateInterval('PT3S'));
+ $relativeUriFromNow3 = $signer->sign('http://example.com/foo?foo=bar&0=integer', new \DateInterval('PT3S'));
+ $clock->sleep(10);
+
+ $this->assertFalse($signer->check($relativeUriFromNow1));
+ $this->assertFalse($signer->check($relativeUriFromNow2));
+ $this->assertFalse($signer->check($relativeUriFromNow3));
+ }
+
public function testNonUrlSafeBase64()
{
$signer = new UriSigner('foobar');
$this->assertTrue($signer->check('http://example.com/foo?_hash=rIOcC%2FF3DoEGo%2FvnESjSp7uU9zA9S%2F%2BOLhxgMexoPUM%3D&baz=bay&foo=bar'));
}
+
+ public function testVerifyUnSignedUri()
+ {
+ $signer = new UriSigner('foobar');
+ $uri = 'http://example.com/foo';
+
+ $this->expectException(UnsignedUriException::class);
+
+ $signer->verify($uri);
+ }
+
+ public function testVerifyUnverifiedUri()
+ {
+ $signer = new UriSigner('foobar');
+ $uri = 'http://example.com/foo?_hash=invalid';
+
+ $this->expectException(UnverifiedSignedUriException::class);
+
+ $signer->verify($uri);
+ }
+
+ public function testVerifyExpiredUri()
+ {
+ $signer = new UriSigner('foobar');
+ $uri = $signer->sign('http://example.com/foo', 123456);
+
+ $this->expectException(ExpiredSignedUriException::class);
+
+ $signer->verify($uri);
+ }
}
diff --git a/src/Symfony/Component/HttpFoundation/UriSigner.php b/src/Symfony/Component/HttpFoundation/UriSigner.php
index 1c9e25a5c0151..bb870e43c56f3 100644
--- a/src/Symfony/Component/HttpFoundation/UriSigner.php
+++ b/src/Symfony/Component/HttpFoundation/UriSigner.php
@@ -11,13 +11,23 @@
namespace Symfony\Component\HttpFoundation;
+use Psr\Clock\ClockInterface;
+use Symfony\Component\HttpFoundation\Exception\ExpiredSignedUriException;
use Symfony\Component\HttpFoundation\Exception\LogicException;
+use Symfony\Component\HttpFoundation\Exception\SignedUriException;
+use Symfony\Component\HttpFoundation\Exception\UnsignedUriException;
+use Symfony\Component\HttpFoundation\Exception\UnverifiedSignedUriException;
/**
* @author Fabien Potencier
*/
class UriSigner
{
+ private const STATUS_VALID = 1;
+ private const STATUS_INVALID = 2;
+ private const STATUS_MISSING = 3;
+ private const STATUS_EXPIRED = 4;
+
/**
* @param string $hashParameter Query string parameter to use
* @param string $expirationParameter Query string parameter to use for expiration
@@ -26,6 +36,7 @@ public function __construct(
#[\SensitiveParameter] private string $secret,
private string $hashParameter = '_hash',
private string $expirationParameter = '_expiration',
+ private ?ClockInterface $clock = null,
) {
if (!$secret) {
throw new \InvalidArgumentException('A non-empty secret is required.');
@@ -89,38 +100,40 @@ public function sign(string $uri/* , \DateTimeInterface|\DateInterval|int|null $
*/
public function check(string $uri): bool
{
- $url = parse_url($uri);
- $params = [];
-
- if (isset($url['query'])) {
- parse_str($url['query'], $params);
- }
+ return self::STATUS_VALID === $this->doVerify($uri);
+ }
- if (empty($params[$this->hashParameter])) {
- return false;
- }
+ public function checkRequest(Request $request): bool
+ {
+ return self::STATUS_VALID === $this->doVerify(self::normalize($request));
+ }
- $hash = $params[$this->hashParameter];
- unset($params[$this->hashParameter]);
+ /**
+ * Verify a Request or string URI.
+ *
+ * @throws UnsignedUriException If the URI is not signed
+ * @throws UnverifiedSignedUriException If the signature is invalid
+ * @throws ExpiredSignedUriException If the URI has expired
+ * @throws SignedUriException
+ */
+ public function verify(Request|string $uri): void
+ {
+ $uri = self::normalize($uri);
+ $status = $this->doVerify($uri);
- // In 8.0, remove support for non-url-safe tokens
- if (!hash_equals($this->computeHash($this->buildUrl($url, $params)), strtr(rtrim($hash, '='), ['/' => '_', '+' => '-']))) {
- return false;
+ if (self::STATUS_VALID === $status) {
+ return;
}
- if ($expiration = $params[$this->expirationParameter] ?? false) {
- return time() < $expiration;
+ if (self::STATUS_MISSING === $status) {
+ throw new UnsignedUriException();
}
- return true;
- }
-
- public function checkRequest(Request $request): bool
- {
- $qs = ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : '';
+ if (self::STATUS_INVALID === $status) {
+ throw new UnverifiedSignedUriException();
+ }
- // we cannot use $request->getUri() here as we want to work with the original URI (no query string reordering)
- return $this->check($request->getSchemeAndHttpHost().$request->getBaseUrl().$request->getPathInfo().$qs);
+ throw new ExpiredSignedUriException();
}
private function computeHash(string $uri): string
@@ -153,9 +166,58 @@ private function getExpirationTime(\DateTimeInterface|\DateInterval|int $expirat
}
if ($expiration instanceof \DateInterval) {
- return \DateTimeImmutable::createFromFormat('U', time())->add($expiration)->format('U');
+ return $this->now()->add($expiration)->format('U');
}
return (string) $expiration;
}
+
+ private function now(): \DateTimeImmutable
+ {
+ return $this->clock?->now() ?? \DateTimeImmutable::createFromFormat('U', time());
+ }
+
+ /**
+ * @return self::STATUS_*
+ */
+ private function doVerify(string $uri): int
+ {
+ $url = parse_url($uri);
+ $params = [];
+
+ if (isset($url['query'])) {
+ parse_str($url['query'], $params);
+ }
+
+ if (empty($params[$this->hashParameter])) {
+ return self::STATUS_MISSING;
+ }
+
+ $hash = $params[$this->hashParameter];
+ unset($params[$this->hashParameter]);
+
+ if (!hash_equals($this->computeHash($this->buildUrl($url, $params)), strtr(rtrim($hash, '='), ['/' => '_', '+' => '-']))) {
+ return self::STATUS_INVALID;
+ }
+
+ if (!$expiration = $params[$this->expirationParameter] ?? false) {
+ return self::STATUS_VALID;
+ }
+
+ if ($this->now()->getTimestamp() < $expiration) {
+ return self::STATUS_VALID;
+ }
+
+ return self::STATUS_EXPIRED;
+ }
+
+ private static function normalize(Request|string $uri): string
+ {
+ if ($uri instanceof Request) {
+ $qs = ($qs = $uri->server->get('QUERY_STRING')) ? '?'.$qs : '';
+ $uri = $uri->getSchemeAndHttpHost().$uri->getBaseUrl().$uri->getPathInfo().$qs;
+ }
+
+ return $uri;
+ }
}
diff --git a/src/Symfony/Component/HttpFoundation/composer.json b/src/Symfony/Component/HttpFoundation/composer.json
index cb2bbf8cbbeed..a86b21b7c728a 100644
--- a/src/Symfony/Component/HttpFoundation/composer.json
+++ b/src/Symfony/Component/HttpFoundation/composer.json
@@ -25,6 +25,7 @@
"doctrine/dbal": "^3.6|^4",
"predis/predis": "^1.1|^2.0",
"symfony/cache": "^6.4.12|^7.1.5",
+ "symfony/clock": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/mime": "^6.4|^7.0",
diff --git a/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php b/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php
index beca6bfb149a1..915862eddb8cb 100644
--- a/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php
+++ b/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php
@@ -25,6 +25,9 @@ class TraceableEventDispatcher extends BaseTraceableEventDispatcher
{
protected function beforeDispatch(string $eventName, object $event): void
{
+ if ($this->disabled?->__invoke()) {
+ return;
+ }
switch ($eventName) {
case KernelEvents::REQUEST:
$event->getRequest()->attributes->set('_stopwatch_token', bin2hex(random_bytes(3)));
@@ -57,6 +60,9 @@ protected function beforeDispatch(string $eventName, object $event): void
protected function afterDispatch(string $eventName, object $event): void
{
+ if ($this->disabled?->__invoke()) {
+ return;
+ }
switch ($eventName) {
case KernelEvents::CONTROLLER_ARGUMENTS:
$this->stopwatch->start('controller', 'section');
diff --git a/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php b/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php
index a5fa06f17b495..a5a863cc153f2 100644
--- a/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php
+++ b/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php
@@ -155,7 +155,7 @@ public function process(ContainerBuilder $container): void
continue;
} elseif (!$autowire || (!($autowireAttributes = $p->getAttributes(Autowire::class, \ReflectionAttribute::IS_INSTANCEOF)) && (!$type || '\\' !== $target[0]))) {
continue;
- } elseif (is_subclass_of($type, \UnitEnum::class)) {
+ } elseif (!$autowireAttributes && is_subclass_of($type, \UnitEnum::class)) {
// do not attempt to register enum typed arguments if not already present in bindings
continue;
} elseif (!$p->allowsNull()) {
diff --git a/src/Symfony/Component/HttpKernel/EventListener/CacheAttributeListener.php b/src/Symfony/Component/HttpKernel/EventListener/CacheAttributeListener.php
index e913edf9e538a..436e031bbbcac 100644
--- a/src/Symfony/Component/HttpKernel/EventListener/CacheAttributeListener.php
+++ b/src/Symfony/Component/HttpKernel/EventListener/CacheAttributeListener.php
@@ -165,7 +165,6 @@ public function onKernelResponse(ResponseEvent $event): void
}
if (true === $cache->noStore) {
- $response->setPrivate();
$response->headers->addCacheControlDirective('no-store');
}
diff --git a/src/Symfony/Component/HttpKernel/EventListener/ErrorListener.php b/src/Symfony/Component/HttpKernel/EventListener/ErrorListener.php
index 18e8bff4413d8..2599b27de0c97 100644
--- a/src/Symfony/Component/HttpKernel/EventListener/ErrorListener.php
+++ b/src/Symfony/Component/HttpKernel/EventListener/ErrorListener.php
@@ -161,15 +161,15 @@ public static function getSubscribedEvents(): array
/**
* Logs an exception.
- *
+ *
* @param ?string $logChannel
*/
protected function logException(\Throwable $exception, string $message, ?string $logLevel = null, /* ?string $logChannel = null */): void
{
$logChannel = (3 < \func_num_args() ? \func_get_arg(3) : null) ?? $this->resolveLogChannel($exception);
-
+
$logLevel ??= $this->resolveLogLevel($exception);
-
+
if(!$logger = $this->getLogger($logChannel)) {
return;
}
@@ -218,7 +218,7 @@ protected function duplicateRequest(\Throwable $exception, Request $request): Re
$attributes = [
'_controller' => $this->controller,
'exception' => $exception,
- 'logger' => DebugLoggerConfigurator::getDebugLogger($this->getLogger($exception)),
+ 'logger' => DebugLoggerConfigurator::getDebugLogger($this->getLogger($this->resolveLogChannel($exception))),
];
$request = $request->duplicate(null, null, $attributes);
$request->setMethod('GET');
diff --git a/src/Symfony/Component/HttpKernel/HttpCache/CacheWasLockedException.php b/src/Symfony/Component/HttpKernel/HttpCache/CacheWasLockedException.php
new file mode 100644
index 0000000000000..f13946ad71a68
--- /dev/null
+++ b/src/Symfony/Component/HttpKernel/HttpCache/CacheWasLockedException.php
@@ -0,0 +1,19 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\HttpCache;
+
+/**
+ * @internal
+ */
+class CacheWasLockedException extends \Exception
+{
+}
diff --git a/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php b/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php
index 3ef1b8dcb821f..2b1be6a95a707 100644
--- a/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php
+++ b/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php
@@ -210,7 +210,13 @@ public function handle(Request $request, int $type = HttpKernelInterface::MAIN_R
$this->record($request, 'reload');
$response = $this->fetch($request, $catch);
} else {
- $response = $this->lookup($request, $catch);
+ $response = null;
+ do {
+ try {
+ $response = $this->lookup($request, $catch);
+ } catch (CacheWasLockedException) {
+ }
+ } while (null === $response);
}
$this->restoreResponseBody($request, $response);
@@ -560,15 +566,7 @@ protected function lock(Request $request, Response $entry): bool
// wait for the lock to be released
if ($this->waitForLock($request)) {
- // replace the current entry with the fresh one
- $new = $this->lookup($request);
- $entry->headers = $new->headers;
- $entry->setContent($new->getContent());
- $entry->setStatusCode($new->getStatusCode());
- $entry->setProtocolVersion($new->getProtocolVersion());
- foreach ($new->headers->getCookies() as $cookie) {
- $entry->headers->setCookie($cookie);
- }
+ throw new CacheWasLockedException(); // unwind back to handle(), try again
} else {
// backend is slow as hell, send a 503 response (to avoid the dog pile effect)
$entry->setStatusCode(503);
diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php
index b5a41236d1899..10e2512cc0629 100644
--- a/src/Symfony/Component/HttpKernel/Kernel.php
+++ b/src/Symfony/Component/HttpKernel/Kernel.php
@@ -73,14 +73,14 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
*/
private static array $freshCache = [];
- public const VERSION = '7.3.0-DEV';
- public const VERSION_ID = 70300;
+ public const VERSION = '7.3.1-DEV';
+ public const VERSION_ID = 70301;
public const MAJOR_VERSION = 7;
public const MINOR_VERSION = 3;
- public const RELEASE_VERSION = 0;
+ public const RELEASE_VERSION = 1;
public const EXTRA_VERSION = 'DEV';
- public const END_OF_MAINTENANCE = '05/2025';
+ public const END_OF_MAINTENANCE = '01/2026';
public const END_OF_LIFE = '01/2026';
public function __construct(
diff --git a/src/Symfony/Component/HttpKernel/Profiler/ProfilerStateChecker.php b/src/Symfony/Component/HttpKernel/Profiler/ProfilerStateChecker.php
new file mode 100644
index 0000000000000..56cb4e3cc597f
--- /dev/null
+++ b/src/Symfony/Component/HttpKernel/Profiler/ProfilerStateChecker.php
@@ -0,0 +1,33 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Profiler;
+
+use Psr\Container\ContainerInterface;
+
+class ProfilerStateChecker
+{
+ public function __construct(
+ private ContainerInterface $container,
+ private bool $defaultEnabled,
+ ) {
+ }
+
+ public function isProfilerEnabled(): bool
+ {
+ return $this->container->get('profiler')?->isEnabled() ?? $this->defaultEnabled;
+ }
+
+ public function isProfilerDisabled(): bool
+ {
+ return !$this->isProfilerEnabled();
+ }
+}
diff --git a/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php b/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
index 03aef073d09fd..a4b1e91d0afe1 100644
--- a/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
@@ -503,13 +503,14 @@ public function testAutowireAttribute()
$locator = $container->get($locatorId)->get('foo::fooAction');
- $this->assertCount(9, $locator->getProvidedServices());
+ $this->assertCount(10, $locator->getProvidedServices());
$this->assertInstanceOf(\stdClass::class, $locator->get('service1'));
$this->assertSame('foo/bar', $locator->get('value'));
$this->assertSame('foo', $locator->get('expression'));
$this->assertInstanceOf(\stdClass::class, $locator->get('serviceAsValue'));
$this->assertInstanceOf(\stdClass::class, $locator->get('expressionAsValue'));
$this->assertSame('bar', $locator->get('rawValue'));
+ $this->stringContains('Symfony_Component_HttpKernel_Tests_Fixtures_Suit_APP_SUIT', $locator->get('suit'));
$this->assertSame('@bar', $locator->get('escapedRawValue'));
$this->assertSame('foo', $locator->get('customAutowire'));
$this->assertInstanceOf(FooInterface::class, $autowireCallable = $locator->get('autowireCallable'));
@@ -752,6 +753,8 @@ public function fooAction(
\stdClass $expressionAsValue,
#[Autowire('bar')]
string $rawValue,
+ #[Autowire(env: 'enum:\Symfony\Component\HttpKernel\Tests\Fixtures\Suit:APP_SUIT')]
+ Suit $suit,
#[Autowire('@@bar')]
string $escapedRawValue,
#[CustomAutowire('some.parameter')]
diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/CacheAttributeListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/CacheAttributeListenerTest.php
index b185ea8994b1f..d2c8ed0db63d5 100644
--- a/src/Symfony/Component/HttpKernel/Tests/EventListener/CacheAttributeListenerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/CacheAttributeListenerTest.php
@@ -102,18 +102,18 @@ public function testResponseIsPublicIfConfigurationIsPublicTrueNoStoreFalse()
$this->assertFalse($this->response->headers->hasCacheControlDirective('no-store'));
}
- public function testResponseIsPrivateIfConfigurationIsPublicTrueNoStoreTrue()
+ public function testResponseKeepPublicIfConfigurationIsPublicTrueNoStoreTrue()
{
$request = $this->createRequest(new Cache(public: true, noStore: true));
$this->listener->onKernelResponse($this->createEventMock($request, $this->response));
- $this->assertFalse($this->response->headers->hasCacheControlDirective('public'));
- $this->assertTrue($this->response->headers->hasCacheControlDirective('private'));
+ $this->assertTrue($this->response->headers->hasCacheControlDirective('public'));
+ $this->assertFalse($this->response->headers->hasCacheControlDirective('private'));
$this->assertTrue($this->response->headers->hasCacheControlDirective('no-store'));
}
- public function testResponseIsPrivateNoStoreIfConfigurationIsNoStoreTrue()
+ public function testResponseKeepPrivateNoStoreIfConfigurationIsNoStoreTrue()
{
$request = $this->createRequest(new Cache(noStore: true));
@@ -124,14 +124,14 @@ public function testResponseIsPrivateNoStoreIfConfigurationIsNoStoreTrue()
$this->assertTrue($this->response->headers->hasCacheControlDirective('no-store'));
}
- public function testResponseIsPrivateIfSharedMaxAgeSetAndNoStoreIsTrue()
+ public function testResponseIsPublicIfSharedMaxAgeSetAndNoStoreIsTrue()
{
$request = $this->createRequest(new Cache(smaxage: 1, noStore: true));
$this->listener->onKernelResponse($this->createEventMock($request, $this->response));
- $this->assertFalse($this->response->headers->hasCacheControlDirective('public'));
- $this->assertTrue($this->response->headers->hasCacheControlDirective('private'));
+ $this->assertTrue($this->response->headers->hasCacheControlDirective('public'));
+ $this->assertFalse($this->response->headers->hasCacheControlDirective('private'));
$this->assertTrue($this->response->headers->hasCacheControlDirective('no-store'));
}
diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php
index e82e8fd81b481..240b201306d92 100644
--- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php
@@ -17,6 +17,7 @@
use Symfony\Component\HttpKernel\Event\TerminateEvent;
use Symfony\Component\HttpKernel\HttpCache\Esi;
use Symfony\Component\HttpKernel\HttpCache\HttpCache;
+use Symfony\Component\HttpKernel\HttpCache\Store;
use Symfony\Component\HttpKernel\HttpCache\StoreInterface;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Kernel;
@@ -662,6 +663,7 @@ public function testDegradationWhenCacheLocked()
*/
sleep(10);
+ $this->store = $this->createStore(); // create another store instance that does not hold the current lock
$this->request('GET', '/');
$this->assertHttpKernelIsNotCalled();
$this->assertEquals(200, $this->response->getStatusCode());
@@ -680,6 +682,64 @@ public function testDegradationWhenCacheLocked()
$this->assertEquals('Old response', $this->response->getContent());
}
+ public function testHitBackendOnlyOnceWhenCacheWasLocked()
+ {
+ // Disable stale-while-revalidate, it circumvents waiting for the lock
+ $this->cacheConfig['stale_while_revalidate'] = 0;
+
+ $this->setNextResponses([
+ [
+ 'status' => 200,
+ 'body' => 'initial response',
+ 'headers' => [
+ 'Cache-Control' => 'public, no-cache',
+ 'Last-Modified' => 'some while ago',
+ ],
+ ],
+ [
+ 'status' => 304,
+ 'body' => '',
+ 'headers' => [
+ 'Cache-Control' => 'public, no-cache',
+ 'Last-Modified' => 'some while ago',
+ ],
+ ],
+ [
+ 'status' => 500,
+ 'body' => 'The backend should not be called twice during revalidation',
+ 'headers' => [],
+ ],
+ ]);
+
+ $this->request('GET', '/'); // warm the cache
+
+ // Use a store that simulates a cache entry being locked upon first attempt
+ $this->store = new class(sys_get_temp_dir() . '/http_cache') extends Store {
+ private bool $hasLock = false;
+
+ public function lock(Request $request): bool
+ {
+ $hasLock = $this->hasLock;
+ $this->hasLock = true;
+
+ return $hasLock;
+ }
+
+ public function isLocked(Request $request): bool
+ {
+ return false;
+ }
+ };
+
+ $this->request('GET', '/'); // hit the cache with simulated lock/concurrency block
+
+ $this->assertEquals(200, $this->response->getStatusCode());
+ $this->assertEquals('initial response', $this->response->getContent());
+
+ $traces = $this->cache->getTraces();
+ $this->assertSame(['stale', 'valid', 'store'], current($traces));
+ }
+
public function testHitsCachedResponseWithSMaxAgeDirective()
{
$time = \DateTimeImmutable::createFromFormat('U', time() - 5);
diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTestCase.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTestCase.php
index 26a29f16b2b75..88f6bed56f4cf 100644
--- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTestCase.php
+++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTestCase.php
@@ -30,7 +30,7 @@ abstract class HttpCacheTestCase extends TestCase
protected $responses;
protected $catch;
protected $esi;
- protected Store $store;
+ protected ?Store $store = null;
protected function setUp(): void
{
@@ -115,7 +115,9 @@ public function request($method, $uri = '/', $server = [], $cookies = [], $esi =
$this->kernel->reset();
- $this->store = new Store(sys_get_temp_dir().'/http_cache');
+ if (! $this->store) {
+ $this->store = $this->createStore();
+ }
if (!isset($this->cacheConfig['debug'])) {
$this->cacheConfig['debug'] = true;
@@ -183,4 +185,9 @@ public static function clearDirectory($directory)
closedir($fp);
}
+
+ protected function createStore(): Store
+ {
+ return new Store(sys_get_temp_dir() . '/http_cache');
+ }
}
diff --git a/src/Symfony/Component/HttpKernel/composer.json b/src/Symfony/Component/HttpKernel/composer.json
index e9cb077587abb..bb9f4ba6175de 100644
--- a/src/Symfony/Component/HttpKernel/composer.json
+++ b/src/Symfony/Component/HttpKernel/composer.json
@@ -19,7 +19,7 @@
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/error-handler": "^6.4|^7.0",
- "symfony/event-dispatcher": "^6.4|^7.0",
+ "symfony/event-dispatcher": "^7.3",
"symfony/http-foundation": "^7.3",
"symfony/polyfill-ctype": "^1.8",
"psr/log": "^1|^2|^3"
diff --git a/src/Symfony/Component/Intl/Data/Generator/RegionDataGenerator.php b/src/Symfony/Component/Intl/Data/Generator/RegionDataGenerator.php
index 745e074157974..5d484edacc1b7 100644
--- a/src/Symfony/Component/Intl/Data/Generator/RegionDataGenerator.php
+++ b/src/Symfony/Component/Intl/Data/Generator/RegionDataGenerator.php
@@ -160,7 +160,7 @@ protected function generateDataForMeta(BundleEntryReaderInterface $reader, strin
$alpha3ToAlpha2 = array_flip($alpha2ToAlpha3);
asort($alpha3ToAlpha2);
- $alpha2ToNumeric = $this->generateAlpha2ToNumericMapping($metadataBundle);
+ $alpha2ToNumeric = $this->generateAlpha2ToNumericMapping(array_flip($this->regionCodes), $metadataBundle);
$numericToAlpha2 = [];
foreach ($alpha2ToNumeric as $alpha2 => $numeric) {
// Add underscore prefix to force keys with leading zeros to remain as string keys.
@@ -231,7 +231,7 @@ private function generateAlpha2ToAlpha3Mapping(array $countries, ArrayAccessible
return $alpha2ToAlpha3;
}
- private function generateAlpha2ToNumericMapping(ArrayAccessibleResourceBundle $metadataBundle): array
+ private function generateAlpha2ToNumericMapping(array $countries, ArrayAccessibleResourceBundle $metadataBundle): array
{
$aliases = iterator_to_array($metadataBundle['alias']['territory']);
@@ -250,6 +250,10 @@ private function generateAlpha2ToNumericMapping(ArrayAccessibleResourceBundle $m
continue;
}
+ if (!isset($countries[$data['replacement']])) {
+ continue;
+ }
+
if ('deprecated' === $data['reason']) {
continue;
}
diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/en_NO.php b/src/Symfony/Component/Intl/Resources/data/currencies/en_NO.php
new file mode 100644
index 0000000000000..dc28340678e53
--- /dev/null
+++ b/src/Symfony/Component/Intl/Resources/data/currencies/en_NO.php
@@ -0,0 +1,10 @@
+ [
+ 'NOK' => [
+ 'kr',
+ 'Norwegian Krone',
+ ],
+ ],
+];
diff --git a/src/Symfony/Component/Intl/Resources/data/git-info.txt b/src/Symfony/Component/Intl/Resources/data/git-info.txt
index 544ed3b9bd16c..79792d95115f2 100644
--- a/src/Symfony/Component/Intl/Resources/data/git-info.txt
+++ b/src/Symfony/Component/Intl/Resources/data/git-info.txt
@@ -2,6 +2,6 @@ Git information
===============
URL: https://github.com/unicode-org/icu.git
-Revision: 8eca245c7484ac6cc179e3e5f7c1ea7680810f39
-Author: Rahul Pandey
-Date: 2024-10-21T16:21:38+05:30
+Revision: 457157a92aa053e632cc7fcfd0e12f8a943b2d11
+Author: Mihai Nita
+Date: 2025-03-10T19:11:46+00:00
diff --git a/src/Symfony/Component/Intl/Resources/data/languages/en.php b/src/Symfony/Component/Intl/Resources/data/languages/en.php
index 007037355de05..51cccde39b1f2 100644
--- a/src/Symfony/Component/Intl/Resources/data/languages/en.php
+++ b/src/Symfony/Component/Intl/Resources/data/languages/en.php
@@ -127,7 +127,6 @@
'csw' => 'Swampy Cree',
'cu' => 'Church Slavic',
'cv' => 'Chuvash',
- 'cwd' => 'Woods Cree',
'cy' => 'Welsh',
'da' => 'Danish',
'dak' => 'Dakota',
@@ -217,7 +216,6 @@
'hak' => 'Hakka Chinese',
'haw' => 'Hawaiian',
'hax' => 'Southern Haida',
- 'hdn' => 'Northern Haida',
'he' => 'Hebrew',
'hi' => 'Hindi',
'hif' => 'Fiji Hindi',
@@ -243,7 +241,6 @@
'ig' => 'Igbo',
'ii' => 'Sichuan Yi',
'ik' => 'Inupiaq',
- 'ike' => 'Eastern Canadian Inuktitut',
'ikt' => 'Western Canadian Inuktitut',
'ilo' => 'Iloko',
'inh' => 'Ingush',
@@ -426,7 +423,6 @@
'oj' => 'Ojibwa',
'ojb' => 'Northwestern Ojibwa',
'ojc' => 'Central Ojibwa',
- 'ojg' => 'Eastern Ojibwa',
'ojs' => 'Oji-Cree',
'ojw' => 'Western Ojibwa',
'oka' => 'Okanagan',
diff --git a/src/Symfony/Component/Intl/Resources/data/languages/fi.php b/src/Symfony/Component/Intl/Resources/data/languages/fi.php
index 2def41ef102d6..5a8726d1eeb3b 100644
--- a/src/Symfony/Component/Intl/Resources/data/languages/fi.php
+++ b/src/Symfony/Component/Intl/Resources/data/languages/fi.php
@@ -14,7 +14,6 @@
'afh' => 'afrihili',
'agq' => 'aghem',
'ain' => 'ainu',
- 'ajp' => 'urduni',
'ak' => 'akan',
'akk' => 'akkadi',
'akz' => 'alabama',
@@ -26,6 +25,7 @@
'ang' => 'muinaisenglanti',
'ann' => 'obolo',
'anp' => 'angika',
+ 'apc' => 'urduni',
'ar' => 'arabia',
'arc' => 'valtakunnanaramea',
'arn' => 'mapudungun',
diff --git a/src/Symfony/Component/Intl/Resources/data/languages/meta.php b/src/Symfony/Component/Intl/Resources/data/languages/meta.php
index 7874969d3f968..764905aa1dcd3 100644
--- a/src/Symfony/Component/Intl/Resources/data/languages/meta.php
+++ b/src/Symfony/Component/Intl/Resources/data/languages/meta.php
@@ -14,7 +14,6 @@
'afh',
'agq',
'ain',
- 'ajp',
'ak',
'akk',
'akz',
@@ -129,7 +128,6 @@
'csw',
'cu',
'cv',
- 'cwd',
'cy',
'da',
'dak',
@@ -219,7 +217,6 @@
'hak',
'haw',
'hax',
- 'hdn',
'he',
'hi',
'hif',
@@ -245,7 +242,6 @@
'ig',
'ii',
'ik',
- 'ike',
'ikt',
'ilo',
'inh',
@@ -430,7 +426,6 @@
'oj',
'ojb',
'ojc',
- 'ojg',
'ojs',
'ojw',
'oka',
@@ -657,7 +652,6 @@
'afr',
'agq',
'ain',
- 'ajp',
'aka',
'akk',
'akz',
@@ -775,7 +769,6 @@
'crs',
'csb',
'csw',
- 'cwd',
'cym',
'dak',
'dan',
@@ -866,7 +859,6 @@
'haw',
'hax',
'hbs',
- 'hdn',
'heb',
'her',
'hif',
@@ -888,7 +880,6 @@
'ibo',
'ido',
'iii',
- 'ike',
'ikt',
'iku',
'ile',
@@ -1076,7 +1067,6 @@
'oci',
'ojb',
'ojc',
- 'ojg',
'oji',
'ojs',
'ojw',
diff --git a/src/Symfony/Component/Intl/Resources/data/languages/nl.php b/src/Symfony/Component/Intl/Resources/data/languages/nl.php
index 9f9e5de5ad8a1..5d2d48d4a65cd 100644
--- a/src/Symfony/Component/Intl/Resources/data/languages/nl.php
+++ b/src/Symfony/Component/Intl/Resources/data/languages/nl.php
@@ -14,7 +14,6 @@
'afh' => 'Afrihili',
'agq' => 'Aghem',
'ain' => 'Aino',
- 'ajp' => 'Zuid-Levantijns-Arabisch',
'ak' => 'Akan',
'akk' => 'Akkadisch',
'akz' => 'Alabama',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/af.php b/src/Symfony/Component/Intl/Resources/data/locales/af.php
index af7e5f0433167..953b57d43622d 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/af.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/af.php
@@ -121,29 +121,35 @@
'en_CM' => 'Engels (Kameroen)',
'en_CX' => 'Engels (Kerseiland)',
'en_CY' => 'Engels (Siprus)',
+ 'en_CZ' => 'Engels (Tsjeggië)',
'en_DE' => 'Engels (Duitsland)',
'en_DK' => 'Engels (Denemarke)',
'en_DM' => 'Engels (Dominica)',
'en_ER' => 'Engels (Eritrea)',
+ 'en_ES' => 'Engels (Spanje)',
'en_FI' => 'Engels (Finland)',
'en_FJ' => 'Engels (Fidji)',
'en_FK' => 'Engels (Falklandeilande)',
'en_FM' => 'Engels (Mikronesië)',
+ 'en_FR' => 'Engels (Frankryk)',
'en_GB' => 'Engels (Verenigde Koninkryk)',
'en_GD' => 'Engels (Grenada)',
'en_GG' => 'Engels (Guernsey)',
'en_GH' => 'Engels (Ghana)',
'en_GI' => 'Engels (Gibraltar)',
'en_GM' => 'Engels (Gambië)',
+ 'en_GS' => 'Engels (Suid-Georgië en die Suidelike Sandwicheilande)',
'en_GU' => 'Engels (Guam)',
'en_GY' => 'Engels (Guyana)',
'en_HK' => 'Engels (Hongkong SAS China)',
+ 'en_HU' => 'Engels (Hongarye)',
'en_ID' => 'Engels (Indonesië)',
'en_IE' => 'Engels (Ierland)',
'en_IL' => 'Engels (Israel)',
'en_IM' => 'Engels (Eiland Man)',
'en_IN' => 'Engels (Indië)',
'en_IO' => 'Engels (Brits-Indiese Oseaangebied)',
+ 'en_IT' => 'Engels (Italië)',
'en_JE' => 'Engels (Jersey)',
'en_JM' => 'Engels (Jamaika)',
'en_KE' => 'Engels (Kenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'Engels (Norfolkeiland)',
'en_NG' => 'Engels (Nigerië)',
'en_NL' => 'Engels (Nederland)',
+ 'en_NO' => 'Engels (Noorweë)',
'en_NR' => 'Engels (Nauru)',
'en_NU' => 'Engels (Niue)',
'en_NZ' => 'Engels (Nieu-Seeland)',
'en_PG' => 'Engels (Papoea-Nieu-Guinee)',
'en_PH' => 'Engels (Filippyne)',
'en_PK' => 'Engels (Pakistan)',
+ 'en_PL' => 'Engels (Pole)',
'en_PN' => 'Engels (Pitcairneilande)',
'en_PR' => 'Engels (Puerto Rico)',
+ 'en_PT' => 'Engels (Portugal)',
'en_PW' => 'Engels (Palau)',
+ 'en_RO' => 'Engels (Roemenië)',
'en_RW' => 'Engels (Rwanda)',
'en_SB' => 'Engels (Salomonseilande)',
'en_SC' => 'Engels (Seychelle)',
@@ -184,6 +194,7 @@
'en_SG' => 'Engels (Singapoer)',
'en_SH' => 'Engels (Sint Helena)',
'en_SI' => 'Engels (Slowenië)',
+ 'en_SK' => 'Engels (Slowakye)',
'en_SL' => 'Engels (Sierra Leone)',
'en_SS' => 'Engels (Suid-Soedan)',
'en_SX' => 'Engels (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ak.php b/src/Symfony/Component/Intl/Resources/data/locales/ak.php
index 5818fcbaf5fe7..de90104f6d07d 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ak.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ak.php
@@ -109,29 +109,35 @@
'en_CM' => 'Borɔfo (Kamɛrun)',
'en_CX' => 'Borɔfo (Buronya Supɔ)',
'en_CY' => 'Borɔfo (Saeprɔso)',
+ 'en_CZ' => 'Borɔfo (Kyɛk)',
'en_DE' => 'Borɔfo (Gyaaman)',
'en_DK' => 'Borɔfo (Dɛnmak)',
'en_DM' => 'Borɔfo (Dɔmeneka)',
'en_ER' => 'Borɔfo (Ɛritrea)',
+ 'en_ES' => 'Borɔfo (Spain)',
'en_FI' => 'Borɔfo (Finland)',
'en_FJ' => 'Borɔfo (Figyi)',
'en_FK' => 'Borɔfo (Fɔkman Aeland)',
'en_FM' => 'Borɔfo (Maekronehyia)',
+ 'en_FR' => 'Borɔfo (Franse)',
'en_GB' => 'Borɔfo (UK)',
'en_GD' => 'Borɔfo (Grenada)',
'en_GG' => 'Borɔfo (Guɛnse)',
'en_GH' => 'Borɔfo (Gaana)',
'en_GI' => 'Borɔfo (Gyebralta)',
'en_GM' => 'Borɔfo (Gambia)',
+ 'en_GS' => 'Borɔfo (Gyɔɔgyia Anaafoɔ ne Sandwich Aeland Anaafoɔ)',
'en_GU' => 'Borɔfo (Guam)',
'en_GY' => 'Borɔfo (Gayana)',
'en_HK' => 'Borɔfo (Hɔnkɔn Kyaena)',
+ 'en_HU' => 'Borɔfo (Hangari)',
'en_ID' => 'Borɔfo (Indɔnehyia)',
'en_IE' => 'Borɔfo (Aereland)',
'en_IL' => 'Borɔfo (Israe)',
'en_IM' => 'Borɔfo (Isle of Man)',
'en_IN' => 'Borɔfo (India)',
'en_IO' => 'Borɔfo (Britenfo Man Wɔ India Po No Mu)',
+ 'en_IT' => 'Borɔfo (Itali)',
'en_JE' => 'Borɔfo (Gyɛsi)',
'en_JM' => 'Borɔfo (Gyameka)',
'en_KE' => 'Borɔfo (Kenya)',
@@ -155,15 +161,19 @@
'en_NF' => 'Borɔfo (Norfold Supɔ)',
'en_NG' => 'Borɔfo (Naegyeria)',
'en_NL' => 'Borɔfo (Nɛdɛland)',
+ 'en_NO' => 'Borɔfo (Nɔɔwe)',
'en_NR' => 'Borɔfo (Naworu)',
'en_NU' => 'Borɔfo (Niyu)',
'en_NZ' => 'Borɔfo (Ziland Foforo)',
'en_PG' => 'Borɔfo (Papua Gini Foforɔ)',
'en_PH' => 'Borɔfo (Filipin)',
'en_PK' => 'Borɔfo (Pakistan)',
+ 'en_PL' => 'Borɔfo (Pɔland)',
'en_PN' => 'Borɔfo (Pitkaan Nsupɔ)',
'en_PR' => 'Borɔfo (Puɛto Riko)',
+ 'en_PT' => 'Borɔfo (Pɔtugal)',
'en_PW' => 'Borɔfo (Palau)',
+ 'en_RO' => 'Borɔfo (Romenia)',
'en_RW' => 'Borɔfo (Rewanda)',
'en_SB' => 'Borɔfo (Solomɔn Aeland)',
'en_SC' => 'Borɔfo (Seyhyɛl)',
@@ -172,6 +182,7 @@
'en_SG' => 'Borɔfo (Singapɔ)',
'en_SH' => 'Borɔfo (Saint Helena)',
'en_SI' => 'Borɔfo (Slovinia)',
+ 'en_SK' => 'Borɔfo (Slovakia)',
'en_SL' => 'Borɔfo (Sɛra Liɔn)',
'en_SS' => 'Borɔfo (Sudan Anaafoɔ)',
'en_SX' => 'Borɔfo (Sint Maaten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/am.php b/src/Symfony/Component/Intl/Resources/data/locales/am.php
index 1ad535f46e81e..beb9399a7465a 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/am.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/am.php
@@ -121,29 +121,35 @@
'en_CM' => 'እንግሊዝኛ (ካሜሩን)',
'en_CX' => 'እንግሊዝኛ (ክሪስማስ ደሴት)',
'en_CY' => 'እንግሊዝኛ (ሳይፕረስ)',
+ 'en_CZ' => 'እንግሊዝኛ (ቼቺያ)',
'en_DE' => 'እንግሊዝኛ (ጀርመን)',
'en_DK' => 'እንግሊዝኛ (ዴንማርክ)',
'en_DM' => 'እንግሊዝኛ (ዶሚኒካ)',
'en_ER' => 'እንግሊዝኛ (ኤርትራ)',
+ 'en_ES' => 'እንግሊዝኛ (ስፔን)',
'en_FI' => 'እንግሊዝኛ (ፊንላንድ)',
'en_FJ' => 'እንግሊዝኛ (ፊጂ)',
'en_FK' => 'እንግሊዝኛ (የፎክላንድ ደሴቶች)',
'en_FM' => 'እንግሊዝኛ (ማይክሮኔዢያ)',
+ 'en_FR' => 'እንግሊዝኛ (ፈረንሳይ)',
'en_GB' => 'እንግሊዝኛ (ዩናይትድ ኪንግደም)',
'en_GD' => 'እንግሊዝኛ (ግሬናዳ)',
'en_GG' => 'እንግሊዝኛ (ጉርነሲ)',
'en_GH' => 'እንግሊዝኛ (ጋና)',
'en_GI' => 'እንግሊዝኛ (ጂብራልተር)',
'en_GM' => 'እንግሊዝኛ (ጋምቢያ)',
+ 'en_GS' => 'እንግሊዝኛ (ደቡብ ጆርጂያ እና የደቡብ ሳንድዊች ደሴቶች)',
'en_GU' => 'እንግሊዝኛ (ጉዋም)',
'en_GY' => 'እንግሊዝኛ (ጉያና)',
'en_HK' => 'እንግሊዝኛ (ሆንግ ኮንግ ልዩ የአስተዳደር ክልል ቻይና)',
+ 'en_HU' => 'እንግሊዝኛ (ሀንጋሪ)',
'en_ID' => 'እንግሊዝኛ (ኢንዶኔዢያ)',
'en_IE' => 'እንግሊዝኛ (አየርላንድ)',
'en_IL' => 'እንግሊዝኛ (እስራኤል)',
'en_IM' => 'እንግሊዝኛ (አይል ኦፍ ማን)',
'en_IN' => 'እንግሊዝኛ (ህንድ)',
'en_IO' => 'እንግሊዝኛ (የብሪታኒያ ህንድ ውቂያኖስ ግዛት)',
+ 'en_IT' => 'እንግሊዝኛ (ጣሊያን)',
'en_JE' => 'እንግሊዝኛ (ጀርዚ)',
'en_JM' => 'እንግሊዝኛ (ጃማይካ)',
'en_KE' => 'እንግሊዝኛ (ኬንያ)',
@@ -167,15 +173,19 @@
'en_NF' => 'እንግሊዝኛ (ኖርፎልክ ደሴት)',
'en_NG' => 'እንግሊዝኛ (ናይጄሪያ)',
'en_NL' => 'እንግሊዝኛ (ኔዘርላንድ)',
+ 'en_NO' => 'እንግሊዝኛ (ኖርዌይ)',
'en_NR' => 'እንግሊዝኛ (ናኡሩ)',
'en_NU' => 'እንግሊዝኛ (ኒዌ)',
'en_NZ' => 'እንግሊዝኛ (ኒው ዚላንድ)',
'en_PG' => 'እንግሊዝኛ (ፓፑዋ ኒው ጊኒ)',
'en_PH' => 'እንግሊዝኛ (ፊሊፒንስ)',
'en_PK' => 'እንግሊዝኛ (ፓኪስታን)',
+ 'en_PL' => 'እንግሊዝኛ (ፖላንድ)',
'en_PN' => 'እንግሊዝኛ (ፒትካኢርን ደሴቶች)',
'en_PR' => 'እንግሊዝኛ (ፑዌርቶ ሪኮ)',
+ 'en_PT' => 'እንግሊዝኛ (ፖርቱጋል)',
'en_PW' => 'እንግሊዝኛ (ፓላው)',
+ 'en_RO' => 'እንግሊዝኛ (ሮሜኒያ)',
'en_RW' => 'እንግሊዝኛ (ሩዋንዳ)',
'en_SB' => 'እንግሊዝኛ (ሰለሞን ደሴቶች)',
'en_SC' => 'እንግሊዝኛ (ሲሼልስ)',
@@ -184,6 +194,7 @@
'en_SG' => 'እንግሊዝኛ (ሲንጋፖር)',
'en_SH' => 'እንግሊዝኛ (ሴንት ሄለና)',
'en_SI' => 'እንግሊዝኛ (ስሎቬኒያ)',
+ 'en_SK' => 'እንግሊዝኛ (ስሎቫኪያ)',
'en_SL' => 'እንግሊዝኛ (ሴራሊዮን)',
'en_SS' => 'እንግሊዝኛ (ደቡብ ሱዳን)',
'en_SX' => 'እንግሊዝኛ (ሲንት ማርተን)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ar.php b/src/Symfony/Component/Intl/Resources/data/locales/ar.php
index 8d51b9638bdfc..fe5b49cc01747 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ar.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ar.php
@@ -121,29 +121,35 @@
'en_CM' => 'الإنجليزية (الكاميرون)',
'en_CX' => 'الإنجليزية (جزيرة كريسماس)',
'en_CY' => 'الإنجليزية (قبرص)',
+ 'en_CZ' => 'الإنجليزية (التشيك)',
'en_DE' => 'الإنجليزية (ألمانيا)',
'en_DK' => 'الإنجليزية (الدانمرك)',
'en_DM' => 'الإنجليزية (دومينيكا)',
'en_ER' => 'الإنجليزية (إريتريا)',
+ 'en_ES' => 'الإنجليزية (إسبانيا)',
'en_FI' => 'الإنجليزية (فنلندا)',
'en_FJ' => 'الإنجليزية (فيجي)',
'en_FK' => 'الإنجليزية (جزر فوكلاند)',
'en_FM' => 'الإنجليزية (ميكرونيزيا)',
+ 'en_FR' => 'الإنجليزية (فرنسا)',
'en_GB' => 'الإنجليزية (المملكة المتحدة)',
'en_GD' => 'الإنجليزية (غرينادا)',
'en_GG' => 'الإنجليزية (غيرنزي)',
'en_GH' => 'الإنجليزية (غانا)',
'en_GI' => 'الإنجليزية (جبل طارق)',
'en_GM' => 'الإنجليزية (غامبيا)',
+ 'en_GS' => 'الإنجليزية (جورجيا الجنوبية وجزر ساندويتش الجنوبية)',
'en_GU' => 'الإنجليزية (غوام)',
'en_GY' => 'الإنجليزية (غيانا)',
'en_HK' => 'الإنجليزية (هونغ كونغ الصينية [منطقة إدارية خاصة])',
+ 'en_HU' => 'الإنجليزية (هنغاريا)',
'en_ID' => 'الإنجليزية (إندونيسيا)',
'en_IE' => 'الإنجليزية (أيرلندا)',
'en_IL' => 'الإنجليزية (إسرائيل)',
'en_IM' => 'الإنجليزية (جزيرة مان)',
'en_IN' => 'الإنجليزية (الهند)',
'en_IO' => 'الإنجليزية (الإقليم البريطاني في المحيط الهندي)',
+ 'en_IT' => 'الإنجليزية (إيطاليا)',
'en_JE' => 'الإنجليزية (جيرسي)',
'en_JM' => 'الإنجليزية (جامايكا)',
'en_KE' => 'الإنجليزية (كينيا)',
@@ -167,15 +173,19 @@
'en_NF' => 'الإنجليزية (جزيرة نورفولك)',
'en_NG' => 'الإنجليزية (نيجيريا)',
'en_NL' => 'الإنجليزية (هولندا)',
+ 'en_NO' => 'الإنجليزية (النرويج)',
'en_NR' => 'الإنجليزية (ناورو)',
'en_NU' => 'الإنجليزية (نيوي)',
'en_NZ' => 'الإنجليزية (نيوزيلندا)',
'en_PG' => 'الإنجليزية (بابوا غينيا الجديدة)',
'en_PH' => 'الإنجليزية (الفلبين)',
'en_PK' => 'الإنجليزية (باكستان)',
+ 'en_PL' => 'الإنجليزية (بولندا)',
'en_PN' => 'الإنجليزية (جزر بيتكيرن)',
'en_PR' => 'الإنجليزية (بورتوريكو)',
+ 'en_PT' => 'الإنجليزية (البرتغال)',
'en_PW' => 'الإنجليزية (بالاو)',
+ 'en_RO' => 'الإنجليزية (رومانيا)',
'en_RW' => 'الإنجليزية (رواندا)',
'en_SB' => 'الإنجليزية (جزر سليمان)',
'en_SC' => 'الإنجليزية (سيشل)',
@@ -184,6 +194,7 @@
'en_SG' => 'الإنجليزية (سنغافورة)',
'en_SH' => 'الإنجليزية (سانت هيلينا)',
'en_SI' => 'الإنجليزية (سلوفينيا)',
+ 'en_SK' => 'الإنجليزية (سلوفاكيا)',
'en_SL' => 'الإنجليزية (سيراليون)',
'en_SS' => 'الإنجليزية (جنوب السودان)',
'en_SX' => 'الإنجليزية (سانت مارتن)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/as.php b/src/Symfony/Component/Intl/Resources/data/locales/as.php
index 1480243c08c6e..800506d9a78d6 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/as.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/as.php
@@ -121,29 +121,35 @@
'en_CM' => 'ইংৰাজী (কেমেৰুণ)',
'en_CX' => 'ইংৰাজী (খ্ৰীষ্টমাছ দ্বীপ)',
'en_CY' => 'ইংৰাজী (চাইপ্ৰাছ)',
+ 'en_CZ' => 'ইংৰাজী (চিজেচিয়া)',
'en_DE' => 'ইংৰাজী (জাৰ্মানী)',
'en_DK' => 'ইংৰাজী (ডেনমাৰ্ক)',
'en_DM' => 'ইংৰাজী (ড’মিনিকা)',
'en_ER' => 'ইংৰাজী (এৰিত্ৰিয়া)',
+ 'en_ES' => 'ইংৰাজী (স্পেইন)',
'en_FI' => 'ইংৰাজী (ফিনলেণ্ড)',
'en_FJ' => 'ইংৰাজী (ফিজি)',
'en_FK' => 'ইংৰাজী (ফকলেণ্ড দ্বীপপুঞ্জ)',
'en_FM' => 'ইংৰাজী (মাইক্ৰোনেচিয়া)',
+ 'en_FR' => 'ইংৰাজী (ফ্ৰান্স)',
'en_GB' => 'ইংৰাজী (সংযুক্ত ৰাজ্য)',
'en_GD' => 'ইংৰাজী (গ্ৰেনাডা)',
'en_GG' => 'ইংৰাজী (গোৰেনচি)',
'en_GH' => 'ইংৰাজী (ঘানা)',
'en_GI' => 'ইংৰাজী (জিব্ৰাল্টৰ)',
'en_GM' => 'ইংৰাজী (গাম্বিয়া)',
+ 'en_GS' => 'ইংৰাজী (দক্ষিণ জৰ্জিয়া আৰু দক্ষিণ চেণ্ডৱিচ দ্বীপপুঞ্জ)',
'en_GU' => 'ইংৰাজী (গুৱাম)',
'en_GY' => 'ইংৰাজী (গায়ানা)',
'en_HK' => 'ইংৰাজী (হং কং এছ. এ. আৰ. চীন)',
+ 'en_HU' => 'ইংৰাজী (হাংগেৰী)',
'en_ID' => 'ইংৰাজী (ইণ্ডোনেচিয়া)',
'en_IE' => 'ইংৰাজী (আয়াৰলেণ্ড)',
'en_IL' => 'ইংৰাজী (ইজৰাইল)',
'en_IM' => 'ইংৰাজী (আইল অফ মেন)',
'en_IN' => 'ইংৰাজী (ভাৰত)',
'en_IO' => 'ইংৰাজী (ব্ৰিটিছ ইণ্ডিয়ান অ’চন টেৰিট’ৰি)',
+ 'en_IT' => 'ইংৰাজী (ইটালি)',
'en_JE' => 'ইংৰাজী (জাৰ্চি)',
'en_JM' => 'ইংৰাজী (জামাইকা)',
'en_KE' => 'ইংৰাজী (কেনিয়া)',
@@ -167,15 +173,19 @@
'en_NF' => 'ইংৰাজী (ন’ৰফ’ক দ্বীপ)',
'en_NG' => 'ইংৰাজী (নাইজেৰিয়া)',
'en_NL' => 'ইংৰাজী (নেডাৰলেণ্ড)',
+ 'en_NO' => 'ইংৰাজী (নৰৱে)',
'en_NR' => 'ইংৰাজী (নাউৰু)',
'en_NU' => 'ইংৰাজী (নিউ)',
'en_NZ' => 'ইংৰাজী (নিউজিলেণ্ড)',
'en_PG' => 'ইংৰাজী (পাপুৱা নিউ গিনি)',
'en_PH' => 'ইংৰাজী (ফিলিপাইনছ)',
'en_PK' => 'ইংৰাজী (পাকিস্তান)',
+ 'en_PL' => 'ইংৰাজী (পোলেণ্ড)',
'en_PN' => 'ইংৰাজী (পিটকেইৰ্ণ দ্বীপপুঞ্জ)',
'en_PR' => 'ইংৰাজী (পুৱেৰ্টো ৰিকো)',
+ 'en_PT' => 'ইংৰাজী (পৰ্তুগাল)',
'en_PW' => 'ইংৰাজী (পালাউ)',
+ 'en_RO' => 'ইংৰাজী (ৰোমানিয়া)',
'en_RW' => 'ইংৰাজী (ৰোৱাণ্ডা)',
'en_SB' => 'ইংৰাজী (চোলোমোন দ্বীপপুঞ্জ)',
'en_SC' => 'ইংৰাজী (ছিচিলিছ)',
@@ -184,6 +194,7 @@
'en_SG' => 'ইংৰাজী (ছিংগাপুৰ)',
'en_SH' => 'ইংৰাজী (ছেইণ্ট হেলেনা)',
'en_SI' => 'ইংৰাজী (শ্লোভেনিয়া)',
+ 'en_SK' => 'ইংৰাজী (শ্লোভাকিয়া)',
'en_SL' => 'ইংৰাজী (চিয়েৰা লিঅ’ন)',
'en_SS' => 'ইংৰাজী (দক্ষিণ চুডান)',
'en_SX' => 'ইংৰাজী (চিণ্ট মাৰ্টেন)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/az.php b/src/Symfony/Component/Intl/Resources/data/locales/az.php
index 869262233ffbb..6e7d9e635edf1 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/az.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/az.php
@@ -121,29 +121,35 @@
'en_CM' => 'ingilis (Kamerun)',
'en_CX' => 'ingilis (Milad adası)',
'en_CY' => 'ingilis (Kipr)',
+ 'en_CZ' => 'ingilis (Çexiya)',
'en_DE' => 'ingilis (Almaniya)',
'en_DK' => 'ingilis (Danimarka)',
'en_DM' => 'ingilis (Dominika)',
'en_ER' => 'ingilis (Eritreya)',
+ 'en_ES' => 'ingilis (İspaniya)',
'en_FI' => 'ingilis (Finlandiya)',
'en_FJ' => 'ingilis (Fici)',
'en_FK' => 'ingilis (Folklend adaları)',
'en_FM' => 'ingilis (Mikroneziya)',
+ 'en_FR' => 'ingilis (Fransa)',
'en_GB' => 'ingilis (Birləşmiş Krallıq)',
'en_GD' => 'ingilis (Qrenada)',
'en_GG' => 'ingilis (Gernsi)',
'en_GH' => 'ingilis (Qana)',
'en_GI' => 'ingilis (Cəbəllütariq)',
'en_GM' => 'ingilis (Qambiya)',
+ 'en_GS' => 'ingilis (Cənubi Corciya və Cənubi Sendviç adaları)',
'en_GU' => 'ingilis (Quam)',
'en_GY' => 'ingilis (Qayana)',
'en_HK' => 'ingilis (Honq Konq Xüsusi İnzibati Rayonu Çin)',
+ 'en_HU' => 'ingilis (Macarıstan)',
'en_ID' => 'ingilis (İndoneziya)',
'en_IE' => 'ingilis (İrlandiya)',
'en_IL' => 'ingilis (İsrail)',
'en_IM' => 'ingilis (Men adası)',
'en_IN' => 'ingilis (Hindistan)',
'en_IO' => 'ingilis (Britaniyanın Hind Okeanı Ərazisi)',
+ 'en_IT' => 'ingilis (İtaliya)',
'en_JE' => 'ingilis (Cersi)',
'en_JM' => 'ingilis (Yamayka)',
'en_KE' => 'ingilis (Keniya)',
@@ -167,15 +173,19 @@
'en_NF' => 'ingilis (Norfolk adası)',
'en_NG' => 'ingilis (Nigeriya)',
'en_NL' => 'ingilis (Niderland)',
+ 'en_NO' => 'ingilis (Norveç)',
'en_NR' => 'ingilis (Nauru)',
'en_NU' => 'ingilis (Niue)',
'en_NZ' => 'ingilis (Yeni Zelandiya)',
'en_PG' => 'ingilis (Papua-Yeni Qvineya)',
'en_PH' => 'ingilis (Filippin)',
'en_PK' => 'ingilis (Pakistan)',
+ 'en_PL' => 'ingilis (Polşa)',
'en_PN' => 'ingilis (Pitkern adaları)',
'en_PR' => 'ingilis (Puerto Riko)',
+ 'en_PT' => 'ingilis (Portuqaliya)',
'en_PW' => 'ingilis (Palau)',
+ 'en_RO' => 'ingilis (Rumıniya)',
'en_RW' => 'ingilis (Ruanda)',
'en_SB' => 'ingilis (Solomon adaları)',
'en_SC' => 'ingilis (Seyşel adaları)',
@@ -184,6 +194,7 @@
'en_SG' => 'ingilis (Sinqapur)',
'en_SH' => 'ingilis (Müqəddəs Yelena)',
'en_SI' => 'ingilis (Sloveniya)',
+ 'en_SK' => 'ingilis (Slovakiya)',
'en_SL' => 'ingilis (Syerra-Leone)',
'en_SS' => 'ingilis (Cənubi Sudan)',
'en_SX' => 'ingilis (Sint-Marten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/az_Cyrl.php b/src/Symfony/Component/Intl/Resources/data/locales/az_Cyrl.php
index f134cf28121b3..c9a118160f581 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/az_Cyrl.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/az_Cyrl.php
@@ -121,29 +121,35 @@
'en_CM' => 'инҝилис (Камерун)',
'en_CX' => 'инҝилис (Милад адасы)',
'en_CY' => 'инҝилис (Кипр)',
+ 'en_CZ' => 'инҝилис (Чехија)',
'en_DE' => 'инҝилис (Алманија)',
'en_DK' => 'инҝилис (Данимарка)',
'en_DM' => 'инҝилис (Доминика)',
'en_ER' => 'инҝилис (Еритреја)',
+ 'en_ES' => 'инҝилис (Испанија)',
'en_FI' => 'инҝилис (Финландија)',
'en_FJ' => 'инҝилис (Фиҹи)',
'en_FK' => 'инҝилис (Фолкленд адалары)',
'en_FM' => 'инҝилис (Микронезија)',
+ 'en_FR' => 'инҝилис (Франса)',
'en_GB' => 'инҝилис (Бирләшмиш Краллыг)',
'en_GD' => 'инҝилис (Гренада)',
'en_GG' => 'инҝилис (Ҝернси)',
'en_GH' => 'инҝилис (Гана)',
'en_GI' => 'инҝилис (Ҹәбәллүтариг)',
'en_GM' => 'инҝилис (Гамбија)',
+ 'en_GS' => 'инҝилис (Ҹәнуби Ҹорҹија вә Ҹәнуби Сендвич адалары)',
'en_GU' => 'инҝилис (Гуам)',
'en_GY' => 'инҝилис (Гајана)',
'en_HK' => 'инҝилис (Һонк Конг Хүсуси Инзибати Әрази Чин)',
+ 'en_HU' => 'инҝилис (Маҹарыстан)',
'en_ID' => 'инҝилис (Индонезија)',
'en_IE' => 'инҝилис (Ирландија)',
'en_IL' => 'инҝилис (Исраил)',
'en_IM' => 'инҝилис (Мен адасы)',
'en_IN' => 'инҝилис (Һиндистан)',
'en_IO' => 'инҝилис (Britaniyanın Hind Okeanı Ərazisi)',
+ 'en_IT' => 'инҝилис (Италија)',
'en_JE' => 'инҝилис (Ҹерси)',
'en_JM' => 'инҝилис (Јамајка)',
'en_KE' => 'инҝилис (Кенија)',
@@ -167,15 +173,19 @@
'en_NF' => 'инҝилис (Норфолк адасы)',
'en_NG' => 'инҝилис (Ниҝерија)',
'en_NL' => 'инҝилис (Нидерланд)',
+ 'en_NO' => 'инҝилис (Норвеч)',
'en_NR' => 'инҝилис (Науру)',
'en_NU' => 'инҝилис (Ниуе)',
'en_NZ' => 'инҝилис (Јени Зеландија)',
'en_PG' => 'инҝилис (Папуа-Јени Гвинеја)',
'en_PH' => 'инҝилис (Филиппин)',
'en_PK' => 'инҝилис (Пакистан)',
+ 'en_PL' => 'инҝилис (Полша)',
'en_PN' => 'инҝилис (Питкерн адалары)',
'en_PR' => 'инҝилис (Пуерто Рико)',
+ 'en_PT' => 'инҝилис (Португалија)',
'en_PW' => 'инҝилис (Палау)',
+ 'en_RO' => 'инҝилис (Румынија)',
'en_RW' => 'инҝилис (Руанда)',
'en_SB' => 'инҝилис (Соломон адалары)',
'en_SC' => 'инҝилис (Сејшел адалары)',
@@ -184,6 +194,7 @@
'en_SG' => 'инҝилис (Сингапур)',
'en_SH' => 'инҝилис (Мүгәддәс Јелена)',
'en_SI' => 'инҝилис (Словенија)',
+ 'en_SK' => 'инҝилис (Словакија)',
'en_SL' => 'инҝилис (Сјерра-Леоне)',
'en_SS' => 'инҝилис (Ҹәнуби Судан)',
'en_SX' => 'инҝилис (Синт-Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/be.php b/src/Symfony/Component/Intl/Resources/data/locales/be.php
index 3cfa30b6305e5..66d07aa118847 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/be.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/be.php
@@ -121,29 +121,35 @@
'en_CM' => 'англійская (Камерун)',
'en_CX' => 'англійская (Востраў Каляд)',
'en_CY' => 'англійская (Кіпр)',
+ 'en_CZ' => 'англійская (Чэхія)',
'en_DE' => 'англійская (Германія)',
'en_DK' => 'англійская (Данія)',
'en_DM' => 'англійская (Дамініка)',
'en_ER' => 'англійская (Эрытрэя)',
+ 'en_ES' => 'англійская (Іспанія)',
'en_FI' => 'англійская (Фінляндыя)',
'en_FJ' => 'англійская (Фіджы)',
'en_FK' => 'англійская (Фалклендскія астравы)',
'en_FM' => 'англійская (Мікранезія)',
+ 'en_FR' => 'англійская (Францыя)',
'en_GB' => 'англійская (Вялікабрытанія)',
'en_GD' => 'англійская (Грэнада)',
'en_GG' => 'англійская (Гернсі)',
'en_GH' => 'англійская (Гана)',
'en_GI' => 'англійская (Гібралтар)',
'en_GM' => 'англійская (Гамбія)',
+ 'en_GS' => 'англійская (Паўднёвая Георгія і Паўднёвыя Сандвічавы астравы)',
'en_GU' => 'англійская (Гуам)',
'en_GY' => 'англійская (Гаяна)',
'en_HK' => 'англійская (Ганконг, САР [Кітай])',
+ 'en_HU' => 'англійская (Венгрыя)',
'en_ID' => 'англійская (Інданезія)',
'en_IE' => 'англійская (Ірландыя)',
'en_IL' => 'англійская (Ізраіль)',
'en_IM' => 'англійская (Востраў Мэн)',
'en_IN' => 'англійская (Індыя)',
'en_IO' => 'англійская (Брытанская тэрыторыя ў Індыйскім акіяне)',
+ 'en_IT' => 'англійская (Італія)',
'en_JE' => 'англійская (Джэрсі)',
'en_JM' => 'англійская (Ямайка)',
'en_KE' => 'англійская (Кенія)',
@@ -167,15 +173,19 @@
'en_NF' => 'англійская (Востраў Норфалк)',
'en_NG' => 'англійская (Нігерыя)',
'en_NL' => 'англійская (Нідэрланды)',
+ 'en_NO' => 'англійская (Нарвегія)',
'en_NR' => 'англійская (Науру)',
'en_NU' => 'англійская (Ніуэ)',
'en_NZ' => 'англійская (Новая Зеландыя)',
'en_PG' => 'англійская (Папуа-Новая Гвінея)',
'en_PH' => 'англійская (Філіпіны)',
'en_PK' => 'англійская (Пакістан)',
+ 'en_PL' => 'англійская (Польшча)',
'en_PN' => 'англійская (Астравы Піткэрн)',
'en_PR' => 'англійская (Пуэрта-Рыка)',
+ 'en_PT' => 'англійская (Партугалія)',
'en_PW' => 'англійская (Палау)',
+ 'en_RO' => 'англійская (Румынія)',
'en_RW' => 'англійская (Руанда)',
'en_SB' => 'англійская (Саламонавы астравы)',
'en_SC' => 'англійская (Сейшэльскія астравы)',
@@ -184,6 +194,7 @@
'en_SG' => 'англійская (Сінгапур)',
'en_SH' => 'англійская (Востраў Святой Алены)',
'en_SI' => 'англійская (Славенія)',
+ 'en_SK' => 'англійская (Славакія)',
'en_SL' => 'англійская (Сьера-Леонэ)',
'en_SS' => 'англійская (Паўднёвы Судан)',
'en_SX' => 'англійская (Сінт-Мартэн)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/bg.php b/src/Symfony/Component/Intl/Resources/data/locales/bg.php
index bf6ad279de4b0..fe56f842b8bdd 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/bg.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/bg.php
@@ -121,29 +121,35 @@
'en_CM' => 'английски (Камерун)',
'en_CX' => 'английски (остров Рождество)',
'en_CY' => 'английски (Кипър)',
+ 'en_CZ' => 'английски (Чехия)',
'en_DE' => 'английски (Германия)',
'en_DK' => 'английски (Дания)',
'en_DM' => 'английски (Доминика)',
'en_ER' => 'английски (Еритрея)',
+ 'en_ES' => 'английски (Испания)',
'en_FI' => 'английски (Финландия)',
'en_FJ' => 'английски (Фиджи)',
'en_FK' => 'английски (Фолкландски острови)',
'en_FM' => 'английски (Микронезия)',
+ 'en_FR' => 'английски (Франция)',
'en_GB' => 'английски (Обединеното кралство)',
'en_GD' => 'английски (Гренада)',
'en_GG' => 'английски (Гърнзи)',
'en_GH' => 'английски (Гана)',
'en_GI' => 'английски (Гибралтар)',
'en_GM' => 'английски (Гамбия)',
+ 'en_GS' => 'английски (Южна Джорджия и Южни Сандвичеви острови)',
'en_GU' => 'английски (Гуам)',
'en_GY' => 'английски (Гаяна)',
'en_HK' => 'английски (Хонконг, САР на Китай)',
+ 'en_HU' => 'английски (Унгария)',
'en_ID' => 'английски (Индонезия)',
'en_IE' => 'английски (Ирландия)',
'en_IL' => 'английски (Израел)',
'en_IM' => 'английски (остров Ман)',
'en_IN' => 'английски (Индия)',
'en_IO' => 'английски (Британска територия в Индийския океан)',
+ 'en_IT' => 'английски (Италия)',
'en_JE' => 'английски (Джърси)',
'en_JM' => 'английски (Ямайка)',
'en_KE' => 'английски (Кения)',
@@ -167,15 +173,19 @@
'en_NF' => 'английски (остров Норфолк)',
'en_NG' => 'английски (Нигерия)',
'en_NL' => 'английски (Нидерландия)',
+ 'en_NO' => 'английски (Норвегия)',
'en_NR' => 'английски (Науру)',
'en_NU' => 'английски (Ниуе)',
'en_NZ' => 'английски (Нова Зеландия)',
'en_PG' => 'английски (Папуа-Нова Гвинея)',
'en_PH' => 'английски (Филипини)',
'en_PK' => 'английски (Пакистан)',
+ 'en_PL' => 'английски (Полша)',
'en_PN' => 'английски (Острови Питкерн)',
'en_PR' => 'английски (Пуерто Рико)',
+ 'en_PT' => 'английски (Португалия)',
'en_PW' => 'английски (Палау)',
+ 'en_RO' => 'английски (Румъния)',
'en_RW' => 'английски (Руанда)',
'en_SB' => 'английски (Соломонови острови)',
'en_SC' => 'английски (Сейшели)',
@@ -184,6 +194,7 @@
'en_SG' => 'английски (Сингапур)',
'en_SH' => 'английски (Света Елена)',
'en_SI' => 'английски (Словения)',
+ 'en_SK' => 'английски (Словакия)',
'en_SL' => 'английски (Сиера Леоне)',
'en_SS' => 'английски (Южен Судан)',
'en_SX' => 'английски (Синт Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/bm.php b/src/Symfony/Component/Intl/Resources/data/locales/bm.php
index a3152b9f657f4..2757567cbfabd 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/bm.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/bm.php
@@ -73,14 +73,17 @@
'en_CK' => 'angilɛkan (Kuki Gun)',
'en_CM' => 'angilɛkan (Kameruni)',
'en_CY' => 'angilɛkan (Cipri)',
+ 'en_CZ' => 'angilɛkan (Ceki republiki)',
'en_DE' => 'angilɛkan (Alimaɲi)',
'en_DK' => 'angilɛkan (Danemarki)',
'en_DM' => 'angilɛkan (Dɔminiki)',
'en_ER' => 'angilɛkan (Eritere)',
+ 'en_ES' => 'angilɛkan (Esipaɲi)',
'en_FI' => 'angilɛkan (Finilandi)',
'en_FJ' => 'angilɛkan (Fiji)',
'en_FK' => 'angilɛkan (Maluwini Gun)',
'en_FM' => 'angilɛkan (Mikironesi)',
+ 'en_FR' => 'angilɛkan (Faransi)',
'en_GB' => 'angilɛkan (Angilɛtɛri)',
'en_GD' => 'angilɛkan (Granadi)',
'en_GH' => 'angilɛkan (Gana)',
@@ -88,10 +91,12 @@
'en_GM' => 'angilɛkan (Ganbi)',
'en_GU' => 'angilɛkan (Gwam)',
'en_GY' => 'angilɛkan (Gwiyana)',
+ 'en_HU' => 'angilɛkan (Hɔngri)',
'en_ID' => 'angilɛkan (Ɛndonezi)',
'en_IE' => 'angilɛkan (Irilandi)',
'en_IL' => 'angilɛkan (Isirayeli)',
'en_IN' => 'angilɛkan (Ɛndujamana)',
+ 'en_IT' => 'angilɛkan (Itali)',
'en_JM' => 'angilɛkan (Zamayiki)',
'en_KE' => 'angilɛkan (Keniya)',
'en_KI' => 'angilɛkan (Kiribati)',
@@ -113,15 +118,19 @@
'en_NF' => 'angilɛkan (Nɔrofoliki Gun)',
'en_NG' => 'angilɛkan (Nizeriya)',
'en_NL' => 'angilɛkan (Peyiba)',
+ 'en_NO' => 'angilɛkan (Nɔriwɛzi)',
'en_NR' => 'angilɛkan (Nawuru)',
'en_NU' => 'angilɛkan (Nyuwe)',
'en_NZ' => 'angilɛkan (Zelandi Koura)',
'en_PG' => 'angilɛkan (Papuwasi-Gine-Koura)',
'en_PH' => 'angilɛkan (Filipini)',
'en_PK' => 'angilɛkan (Pakisitaŋ)',
+ 'en_PL' => 'angilɛkan (Poloɲi)',
'en_PN' => 'angilɛkan (Pitikarini)',
'en_PR' => 'angilɛkan (Pɔrotoriko)',
+ 'en_PT' => 'angilɛkan (Pɔritigali)',
'en_PW' => 'angilɛkan (Palawu)',
+ 'en_RO' => 'angilɛkan (Rumani)',
'en_RW' => 'angilɛkan (Ruwanda)',
'en_SB' => 'angilɛkan (Salomo Gun)',
'en_SC' => 'angilɛkan (Sesɛli)',
@@ -130,6 +139,7 @@
'en_SG' => 'angilɛkan (Sɛngapuri)',
'en_SH' => 'angilɛkan (Ɛlɛni Senu)',
'en_SI' => 'angilɛkan (Sloveni)',
+ 'en_SK' => 'angilɛkan (Slowaki)',
'en_SL' => 'angilɛkan (Siyera Lewɔni)',
'en_SZ' => 'angilɛkan (Swazilandi)',
'en_TC' => 'angilɛkan (Turiki Gun ni Kayiki)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/bn.php b/src/Symfony/Component/Intl/Resources/data/locales/bn.php
index 643dab3898ae7..a7e77f5e3a154 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/bn.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/bn.php
@@ -121,29 +121,35 @@
'en_CM' => 'ইংরেজি (ক্যামেরুন)',
'en_CX' => 'ইংরেজি (ক্রিসমাস দ্বীপ)',
'en_CY' => 'ইংরেজি (সাইপ্রাস)',
+ 'en_CZ' => 'ইংরেজি (চেকিয়া)',
'en_DE' => 'ইংরেজি (জার্মানি)',
'en_DK' => 'ইংরেজি (ডেনমার্ক)',
'en_DM' => 'ইংরেজি (ডোমিনিকা)',
'en_ER' => 'ইংরেজি (ইরিত্রিয়া)',
+ 'en_ES' => 'ইংরেজি (স্পেন)',
'en_FI' => 'ইংরেজি (ফিনল্যান্ড)',
'en_FJ' => 'ইংরেজি (ফিজি)',
'en_FK' => 'ইংরেজি (ফকল্যান্ড দ্বীপপুঞ্জ)',
'en_FM' => 'ইংরেজি (মাইক্রোনেশিয়া)',
+ 'en_FR' => 'ইংরেজি (ফ্রান্স)',
'en_GB' => 'ইংরেজি (যুক্তরাজ্য)',
'en_GD' => 'ইংরেজি (গ্রেনাডা)',
'en_GG' => 'ইংরেজি (গার্নসি)',
'en_GH' => 'ইংরেজি (ঘানা)',
'en_GI' => 'ইংরেজি (জিব্রাল্টার)',
'en_GM' => 'ইংরেজি (গাম্বিয়া)',
+ 'en_GS' => 'ইংরেজি (দক্ষিণ জর্জিয়া ও দক্ষিণ স্যান্ডউইচ দ্বীপপুঞ্জ)',
'en_GU' => 'ইংরেজি (গুয়াম)',
'en_GY' => 'ইংরেজি (গিয়ানা)',
'en_HK' => 'ইংরেজি (হংকং এসএআর চীনা)',
+ 'en_HU' => 'ইংরেজি (হাঙ্গেরি)',
'en_ID' => 'ইংরেজি (ইন্দোনেশিয়া)',
'en_IE' => 'ইংরেজি (আয়ারল্যান্ড)',
'en_IL' => 'ইংরেজি (ইজরায়েল)',
'en_IM' => 'ইংরেজি (আইল অফ ম্যান)',
'en_IN' => 'ইংরেজি (ভারত)',
'en_IO' => 'ইংরেজি (ব্রিটিশ ভারত মহাসাগরীয় অঞ্চল)',
+ 'en_IT' => 'ইংরেজি (ইতালি)',
'en_JE' => 'ইংরেজি (জার্সি)',
'en_JM' => 'ইংরেজি (জামাইকা)',
'en_KE' => 'ইংরেজি (কেনিয়া)',
@@ -167,15 +173,19 @@
'en_NF' => 'ইংরেজি (নরফোক দ্বীপ)',
'en_NG' => 'ইংরেজি (নাইজেরিয়া)',
'en_NL' => 'ইংরেজি (নেদারল্যান্ডস)',
+ 'en_NO' => 'ইংরেজি (নরওয়ে)',
'en_NR' => 'ইংরেজি (নাউরু)',
'en_NU' => 'ইংরেজি (নিউয়ে)',
'en_NZ' => 'ইংরেজি (নিউজিল্যান্ড)',
'en_PG' => 'ইংরেজি (পাপুয়া নিউ গিনি)',
'en_PH' => 'ইংরেজি (ফিলিপাইন)',
'en_PK' => 'ইংরেজি (পাকিস্তান)',
+ 'en_PL' => 'ইংরেজি (পোল্যান্ড)',
'en_PN' => 'ইংরেজি (পিটকেয়ার্ন দ্বীপপুঞ্জ)',
'en_PR' => 'ইংরেজি (পুয়ের্তো রিকো)',
+ 'en_PT' => 'ইংরেজি (পর্তুগাল)',
'en_PW' => 'ইংরেজি (পালাউ)',
+ 'en_RO' => 'ইংরেজি (রোমানিয়া)',
'en_RW' => 'ইংরেজি (রুয়ান্ডা)',
'en_SB' => 'ইংরেজি (সলোমন দ্বীপপুঞ্জ)',
'en_SC' => 'ইংরেজি (সিসিলি)',
@@ -184,6 +194,7 @@
'en_SG' => 'ইংরেজি (সিঙ্গাপুর)',
'en_SH' => 'ইংরেজি (সেন্ট হেলেনা)',
'en_SI' => 'ইংরেজি (স্লোভানিয়া)',
+ 'en_SK' => 'ইংরেজি (স্লোভাকিয়া)',
'en_SL' => 'ইংরেজি (সিয়েরা লিওন)',
'en_SS' => 'ইংরেজি (দক্ষিণ সুদান)',
'en_SX' => 'ইংরেজি (সিন্ট মার্টেন)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/bo.php b/src/Symfony/Component/Intl/Resources/data/locales/bo.php
index fbb237f85ebd7..b49025d46068d 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/bo.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/bo.php
@@ -11,6 +11,7 @@
'en_DE' => 'དབྱིན་ཇིའི་སྐད། (འཇར་མན་)',
'en_GB' => 'དབྱིན་ཇིའི་སྐད། (དབྱིན་ཇི་)',
'en_IN' => 'དབྱིན་ཇིའི་སྐད། (རྒྱ་གར་)',
+ 'en_IT' => 'དབྱིན་ཇིའི་སྐད། (ཨི་ཀྲར་ལི་)',
'en_US' => 'དབྱིན་ཇིའི་སྐད། (ཨ་མེ་རི་ཀ།)',
'hi' => 'ཧིན་དི',
'hi_IN' => 'ཧིན་དི (རྒྱ་གར་)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/br.php b/src/Symfony/Component/Intl/Resources/data/locales/br.php
index 622c379235e6d..d1946f05fb7c3 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/br.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/br.php
@@ -121,28 +121,34 @@
'en_CM' => 'saozneg (Kameroun)',
'en_CX' => 'saozneg (Enez Christmas)',
'en_CY' => 'saozneg (Kiprenez)',
+ 'en_CZ' => 'saozneg (Tchekia)',
'en_DE' => 'saozneg (Alamagn)',
'en_DK' => 'saozneg (Danmark)',
'en_DM' => 'saozneg (Dominica)',
'en_ER' => 'saozneg (Eritrea)',
+ 'en_ES' => 'saozneg (Spagn)',
'en_FI' => 'saozneg (Finland)',
'en_FJ' => 'saozneg (Fidji)',
'en_FK' => 'saozneg (Inizi Falkland)',
'en_FM' => 'saozneg (Mikronezia)',
+ 'en_FR' => 'saozneg (Frañs)',
'en_GB' => 'saozneg (Rouantelezh-Unanet)',
'en_GD' => 'saozneg (Grenada)',
'en_GG' => 'saozneg (Gwernenez)',
'en_GH' => 'saozneg (Ghana)',
'en_GI' => 'saozneg (Jibraltar)',
'en_GM' => 'saozneg (Gambia)',
+ 'en_GS' => 'saozneg (Inizi Georgia ar Su hag Inizi Sandwich ar Su)',
'en_GU' => 'saozneg (Guam)',
'en_GY' => 'saozneg (Guyana)',
'en_HK' => 'saozneg (Hong Kong RMD Sina)',
+ 'en_HU' => 'saozneg (Hungaria)',
'en_ID' => 'saozneg (Indonezia)',
'en_IE' => 'saozneg (Iwerzhon)',
'en_IL' => 'saozneg (Israel)',
'en_IM' => 'saozneg (Enez Vanav)',
'en_IN' => 'saozneg (India)',
+ 'en_IT' => 'saozneg (Italia)',
'en_JE' => 'saozneg (Jerzenez)',
'en_JM' => 'saozneg (Jamaika)',
'en_KE' => 'saozneg (Kenya)',
@@ -166,15 +172,19 @@
'en_NF' => 'saozneg (Enez Norfolk)',
'en_NG' => 'saozneg (Nigeria)',
'en_NL' => 'saozneg (Izelvroioù)',
+ 'en_NO' => 'saozneg (Norvegia)',
'en_NR' => 'saozneg (Nauru)',
'en_NU' => 'saozneg (Niue)',
'en_NZ' => 'saozneg (Zeland-Nevez)',
'en_PG' => 'saozneg (Papoua Ginea-Nevez)',
'en_PH' => 'saozneg (Filipinez)',
'en_PK' => 'saozneg (Pakistan)',
+ 'en_PL' => 'saozneg (Polonia)',
'en_PN' => 'saozneg (Enez Pitcairn)',
'en_PR' => 'saozneg (Puerto Rico)',
+ 'en_PT' => 'saozneg (Portugal)',
'en_PW' => 'saozneg (Palau)',
+ 'en_RO' => 'saozneg (Roumania)',
'en_RW' => 'saozneg (Rwanda)',
'en_SB' => 'saozneg (Inizi Salomon)',
'en_SC' => 'saozneg (Sechelez)',
@@ -183,6 +193,7 @@
'en_SG' => 'saozneg (Singapour)',
'en_SH' => 'saozneg (Saint-Helena)',
'en_SI' => 'saozneg (Slovenia)',
+ 'en_SK' => 'saozneg (Slovakia)',
'en_SL' => 'saozneg (Sierra Leone)',
'en_SS' => 'saozneg (Susoudan)',
'en_SX' => 'saozneg (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/bs.php b/src/Symfony/Component/Intl/Resources/data/locales/bs.php
index 8f692af3df42d..fca844d600263 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/bs.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/bs.php
@@ -121,29 +121,35 @@
'en_CM' => 'engleski (Kamerun)',
'en_CX' => 'engleski (Božićno ostrvo)',
'en_CY' => 'engleski (Kipar)',
+ 'en_CZ' => 'engleski (Češka)',
'en_DE' => 'engleski (Njemačka)',
'en_DK' => 'engleski (Danska)',
'en_DM' => 'engleski (Dominika)',
'en_ER' => 'engleski (Eritreja)',
+ 'en_ES' => 'engleski (Španija)',
'en_FI' => 'engleski (Finska)',
'en_FJ' => 'engleski (Fidži)',
'en_FK' => 'engleski (Folklandska ostrva)',
'en_FM' => 'engleski (Mikronezija)',
+ 'en_FR' => 'engleski (Francuska)',
'en_GB' => 'engleski (Ujedinjeno Kraljevstvo)',
'en_GD' => 'engleski (Grenada)',
'en_GG' => 'engleski (Guernsey)',
'en_GH' => 'engleski (Gana)',
'en_GI' => 'engleski (Gibraltar)',
'en_GM' => 'engleski (Gambija)',
+ 'en_GS' => 'engleski (Južna Džordžija i Južna Sendvič ostrva)',
'en_GU' => 'engleski (Guam)',
'en_GY' => 'engleski (Gvajana)',
'en_HK' => 'engleski (Hong Kong [SAR Kina])',
+ 'en_HU' => 'engleski (Mađarska)',
'en_ID' => 'engleski (Indonezija)',
'en_IE' => 'engleski (Irska)',
'en_IL' => 'engleski (Izrael)',
'en_IM' => 'engleski (Ostrvo Man)',
'en_IN' => 'engleski (Indija)',
'en_IO' => 'engleski (Britanska Teritorija u Indijskom Okeanu)',
+ 'en_IT' => 'engleski (Italija)',
'en_JE' => 'engleski (Jersey)',
'en_JM' => 'engleski (Jamajka)',
'en_KE' => 'engleski (Kenija)',
@@ -167,15 +173,19 @@
'en_NF' => 'engleski (Ostrvo Norfolk)',
'en_NG' => 'engleski (Nigerija)',
'en_NL' => 'engleski (Nizozemska)',
+ 'en_NO' => 'engleski (Norveška)',
'en_NR' => 'engleski (Nauru)',
'en_NU' => 'engleski (Niue)',
'en_NZ' => 'engleski (Novi Zeland)',
'en_PG' => 'engleski (Papua Nova Gvineja)',
'en_PH' => 'engleski (Filipini)',
'en_PK' => 'engleski (Pakistan)',
+ 'en_PL' => 'engleski (Poljska)',
'en_PN' => 'engleski (Pitkernska Ostrva)',
'en_PR' => 'engleski (Porto Riko)',
+ 'en_PT' => 'engleski (Portugal)',
'en_PW' => 'engleski (Palau)',
+ 'en_RO' => 'engleski (Rumunija)',
'en_RW' => 'engleski (Ruanda)',
'en_SB' => 'engleski (Solomonska Ostrva)',
'en_SC' => 'engleski (Sejšeli)',
@@ -184,6 +194,7 @@
'en_SG' => 'engleski (Singapur)',
'en_SH' => 'engleski (Sveta Helena)',
'en_SI' => 'engleski (Slovenija)',
+ 'en_SK' => 'engleski (Slovačka)',
'en_SL' => 'engleski (Sijera Leone)',
'en_SS' => 'engleski (Južni Sudan)',
'en_SX' => 'engleski (Sint Marten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/bs_Cyrl.php b/src/Symfony/Component/Intl/Resources/data/locales/bs_Cyrl.php
index 7b08a3a5e0b95..d71c3ac1fd361 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/bs_Cyrl.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/bs_Cyrl.php
@@ -121,29 +121,35 @@
'en_CM' => 'енглески (Камерун)',
'en_CX' => 'енглески (Божићно острво)',
'en_CY' => 'енглески (Кипар)',
+ 'en_CZ' => 'енглески (Чешка)',
'en_DE' => 'енглески (Њемачка)',
'en_DK' => 'енглески (Данска)',
'en_DM' => 'енглески (Доминика)',
'en_ER' => 'енглески (Еритреја)',
+ 'en_ES' => 'енглески (Шпанија)',
'en_FI' => 'енглески (Финска)',
'en_FJ' => 'енглески (Фиџи)',
'en_FK' => 'енглески (Фокландска Острва)',
'en_FM' => 'енглески (Микронезија)',
+ 'en_FR' => 'енглески (Француска)',
'en_GB' => 'енглески (Уједињено Краљевство)',
'en_GD' => 'енглески (Гренада)',
'en_GG' => 'енглески (Гернзи)',
'en_GH' => 'енглески (Гана)',
'en_GI' => 'енглески (Гибралтар)',
'en_GM' => 'енглески (Гамбија)',
+ 'en_GS' => 'енглески (Јужна Џорџија и Јужна Сендвичка Острва)',
'en_GU' => 'енглески (Гуам)',
'en_GY' => 'енглески (Гвајана)',
'en_HK' => 'енглески (Хонг Конг С. А. Р.)',
+ 'en_HU' => 'енглески (Мађарска)',
'en_ID' => 'енглески (Индонезија)',
'en_IE' => 'енглески (Ирска)',
'en_IL' => 'енглески (Израел)',
'en_IM' => 'енглески (Острво Мен)',
'en_IN' => 'енглески (Индија)',
'en_IO' => 'енглески (Британска територија у Индијском океану)',
+ 'en_IT' => 'енглески (Италија)',
'en_JE' => 'енглески (Џерзи)',
'en_JM' => 'енглески (Јамајка)',
'en_KE' => 'енглески (Кенија)',
@@ -167,15 +173,19 @@
'en_NF' => 'енглески (Острво Норфолк)',
'en_NG' => 'енглески (Нигерија)',
'en_NL' => 'енглески (Холандија)',
+ 'en_NO' => 'енглески (Норвешка)',
'en_NR' => 'енглески (Науру)',
'en_NU' => 'енглески (Ниуе)',
'en_NZ' => 'енглески (Нови Зеланд)',
'en_PG' => 'енглески (Папуа Нова Гвинеја)',
'en_PH' => 'енглески (Филипини)',
'en_PK' => 'енглески (Пакистан)',
+ 'en_PL' => 'енглески (Пољска)',
'en_PN' => 'енглески (Питкерн)',
'en_PR' => 'енглески (Порторико)',
+ 'en_PT' => 'енглески (Португал)',
'en_PW' => 'енглески (Палау)',
+ 'en_RO' => 'енглески (Румунија)',
'en_RW' => 'енглески (Руанда)',
'en_SB' => 'енглески (Соломонска Острва)',
'en_SC' => 'енглески (Сејшели)',
@@ -184,6 +194,7 @@
'en_SG' => 'енглески (Сингапур)',
'en_SH' => 'енглески (Света Хелена)',
'en_SI' => 'енглески (Словенија)',
+ 'en_SK' => 'енглески (Словачка)',
'en_SL' => 'енглески (Сијера Леоне)',
'en_SS' => 'енглески (Јужни Судан)',
'en_SX' => 'енглески (Свети Мартин [Холандија])',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ca.php b/src/Symfony/Component/Intl/Resources/data/locales/ca.php
index 2642eabe5c318..a97fa374d1d54 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ca.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ca.php
@@ -121,29 +121,35 @@
'en_CM' => 'anglès (Camerun)',
'en_CX' => 'anglès (Illa Christmas)',
'en_CY' => 'anglès (Xipre)',
+ 'en_CZ' => 'anglès (Txèquia)',
'en_DE' => 'anglès (Alemanya)',
'en_DK' => 'anglès (Dinamarca)',
'en_DM' => 'anglès (Dominica)',
'en_ER' => 'anglès (Eritrea)',
+ 'en_ES' => 'anglès (Espanya)',
'en_FI' => 'anglès (Finlàndia)',
'en_FJ' => 'anglès (Fiji)',
'en_FK' => 'anglès (Illes Falkland)',
'en_FM' => 'anglès (Micronèsia)',
+ 'en_FR' => 'anglès (França)',
'en_GB' => 'anglès (Regne Unit)',
'en_GD' => 'anglès (Grenada)',
'en_GG' => 'anglès (Guernsey)',
'en_GH' => 'anglès (Ghana)',
'en_GI' => 'anglès (Gibraltar)',
'en_GM' => 'anglès (Gàmbia)',
+ 'en_GS' => 'anglès (Illes Geòrgia del Sud i Sandwich del Sud)',
'en_GU' => 'anglès (Guam)',
'en_GY' => 'anglès (Guyana)',
'en_HK' => 'anglès (Hong Kong [RAE Xina])',
+ 'en_HU' => 'anglès (Hongria)',
'en_ID' => 'anglès (Indonèsia)',
'en_IE' => 'anglès (Irlanda)',
'en_IL' => 'anglès (Israel)',
'en_IM' => 'anglès (Illa de Man)',
'en_IN' => 'anglès (Índia)',
'en_IO' => 'anglès (Territori Britànic de l’Oceà Índic)',
+ 'en_IT' => 'anglès (Itàlia)',
'en_JE' => 'anglès (Jersey)',
'en_JM' => 'anglès (Jamaica)',
'en_KE' => 'anglès (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'anglès (Illa Norfolk)',
'en_NG' => 'anglès (Nigèria)',
'en_NL' => 'anglès (Països Baixos)',
+ 'en_NO' => 'anglès (Noruega)',
'en_NR' => 'anglès (Nauru)',
'en_NU' => 'anglès (Niue)',
'en_NZ' => 'anglès (Nova Zelanda)',
'en_PG' => 'anglès (Papua Nova Guinea)',
'en_PH' => 'anglès (Filipines)',
'en_PK' => 'anglès (Pakistan)',
+ 'en_PL' => 'anglès (Polònia)',
'en_PN' => 'anglès (Illes Pitcairn)',
'en_PR' => 'anglès (Puerto Rico)',
+ 'en_PT' => 'anglès (Portugal)',
'en_PW' => 'anglès (Palau)',
+ 'en_RO' => 'anglès (Romania)',
'en_RW' => 'anglès (Ruanda)',
'en_SB' => 'anglès (Illes Salomó)',
'en_SC' => 'anglès (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'anglès (Singapur)',
'en_SH' => 'anglès (Santa Helena)',
'en_SI' => 'anglès (Eslovènia)',
+ 'en_SK' => 'anglès (Eslovàquia)',
'en_SL' => 'anglès (Sierra Leone)',
'en_SS' => 'anglès (Sudan del Sud)',
'en_SX' => 'anglès (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ce.php b/src/Symfony/Component/Intl/Resources/data/locales/ce.php
index 10bd3b6a2b58a..85e234c29a7d6 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ce.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ce.php
@@ -121,28 +121,34 @@
'en_CM' => 'ингалсан (Камерун)',
'en_CX' => 'ингалсан (ГӀайре ӏиса пайхӏамар вина де)',
'en_CY' => 'ингалсан (Кипр)',
+ 'en_CZ' => 'ингалсан (Чехи)',
'en_DE' => 'ингалсан (Германи)',
'en_DK' => 'ингалсан (Дани)',
'en_DM' => 'ингалсан (Доминика)',
'en_ER' => 'ингалсан (Эритрей)',
+ 'en_ES' => 'ингалсан (Испани)',
'en_FI' => 'ингалсан (Финлянди)',
'en_FJ' => 'ингалсан (Фиджи)',
'en_FK' => 'ингалсан (Фолклендан гӀайренаш)',
'en_FM' => 'ингалсан (Микронезин Федеративни штаташ)',
+ 'en_FR' => 'ингалсан (Франци)',
'en_GB' => 'ингалсан (Йоккха Британи)',
'en_GD' => 'ингалсан (Гренада)',
'en_GG' => 'ингалсан (Гернси)',
'en_GH' => 'ингалсан (Гана)',
'en_GI' => 'ингалсан (Гибралтар)',
'en_GM' => 'ингалсан (Гамби)',
+ 'en_GS' => 'ингалсан (Къилба Джорджи а, Къилба Гавайн гӀайренаш а)',
'en_GU' => 'ингалсан (Гуам)',
'en_GY' => 'ингалсан (Гайана)',
'en_HK' => 'ингалсан (Гонконг [ша-къаьстина кӀошт])',
+ 'en_HU' => 'ингалсан (Венгри)',
'en_ID' => 'ингалсан (Индонези)',
'en_IE' => 'ингалсан (Ирланди)',
'en_IL' => 'ингалсан (Израиль)',
'en_IM' => 'ингалсан (Мэн гӀайре)',
'en_IN' => 'ингалсан (ХӀинди)',
+ 'en_IT' => 'ингалсан (Итали)',
'en_JE' => 'ингалсан (Джерси)',
'en_JM' => 'ингалсан (Ямайка)',
'en_KE' => 'ингалсан (Кени)',
@@ -166,15 +172,19 @@
'en_NF' => 'ингалсан (Норфолк гӀайре)',
'en_NG' => 'ингалсан (Нигери)',
'en_NL' => 'ингалсан (Нидерландаш)',
+ 'en_NO' => 'ингалсан (Норвеги)',
'en_NR' => 'ингалсан (Науру)',
'en_NU' => 'ингалсан (Ниуэ)',
'en_NZ' => 'ингалсан (Керла Зеланди)',
'en_PG' => 'ингалсан (Папуа — Керла Гвиней)',
'en_PH' => 'ингалсан (Филиппинаш)',
'en_PK' => 'ингалсан (Пакистан)',
+ 'en_PL' => 'ингалсан (Польша)',
'en_PN' => 'ингалсан (Питкэрн гӀайренаш)',
'en_PR' => 'ингалсан (Пуэрто-Рико)',
+ 'en_PT' => 'ингалсан (Португали)',
'en_PW' => 'ингалсан (Палау)',
+ 'en_RO' => 'ингалсан (Румыни)',
'en_RW' => 'ингалсан (Руанда)',
'en_SB' => 'ингалсан (Соломонан гӀайренаш)',
'en_SC' => 'ингалсан (Сейшелан гӀайренаш)',
@@ -183,6 +193,7 @@
'en_SG' => 'ингалсан (Сингапур)',
'en_SH' => 'ингалсан (Сийлахьчу Еленин гӀайре)',
'en_SI' => 'ингалсан (Словени)',
+ 'en_SK' => 'ингалсан (Словаки)',
'en_SL' => 'ингалсан (Сьерра- Леоне)',
'en_SS' => 'ингалсан (Къилба Судан)',
'en_SX' => 'ингалсан (Синт-Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/cs.php b/src/Symfony/Component/Intl/Resources/data/locales/cs.php
index 9f54d93893508..d775712243a39 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/cs.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/cs.php
@@ -121,29 +121,35 @@
'en_CM' => 'angličtina (Kamerun)',
'en_CX' => 'angličtina (Vánoční ostrov)',
'en_CY' => 'angličtina (Kypr)',
+ 'en_CZ' => 'angličtina (Česko)',
'en_DE' => 'angličtina (Německo)',
'en_DK' => 'angličtina (Dánsko)',
'en_DM' => 'angličtina (Dominika)',
'en_ER' => 'angličtina (Eritrea)',
+ 'en_ES' => 'angličtina (Španělsko)',
'en_FI' => 'angličtina (Finsko)',
'en_FJ' => 'angličtina (Fidži)',
'en_FK' => 'angličtina (Falklandské ostrovy)',
'en_FM' => 'angličtina (Mikronésie)',
+ 'en_FR' => 'angličtina (Francie)',
'en_GB' => 'angličtina (Spojené království)',
'en_GD' => 'angličtina (Grenada)',
'en_GG' => 'angličtina (Guernsey)',
'en_GH' => 'angličtina (Ghana)',
'en_GI' => 'angličtina (Gibraltar)',
'en_GM' => 'angličtina (Gambie)',
+ 'en_GS' => 'angličtina (Jižní Georgie a Jižní Sandwichovy ostrovy)',
'en_GU' => 'angličtina (Guam)',
'en_GY' => 'angličtina (Guyana)',
'en_HK' => 'angličtina (Hongkong – ZAO Číny)',
+ 'en_HU' => 'angličtina (Maďarsko)',
'en_ID' => 'angličtina (Indonésie)',
'en_IE' => 'angličtina (Irsko)',
'en_IL' => 'angličtina (Izrael)',
'en_IM' => 'angličtina (Ostrov Man)',
'en_IN' => 'angličtina (Indie)',
'en_IO' => 'angličtina (Britské indickooceánské území)',
+ 'en_IT' => 'angličtina (Itálie)',
'en_JE' => 'angličtina (Jersey)',
'en_JM' => 'angličtina (Jamajka)',
'en_KE' => 'angličtina (Keňa)',
@@ -167,15 +173,19 @@
'en_NF' => 'angličtina (Norfolk)',
'en_NG' => 'angličtina (Nigérie)',
'en_NL' => 'angličtina (Nizozemsko)',
+ 'en_NO' => 'angličtina (Norsko)',
'en_NR' => 'angličtina (Nauru)',
'en_NU' => 'angličtina (Niue)',
'en_NZ' => 'angličtina (Nový Zéland)',
'en_PG' => 'angličtina (Papua-Nová Guinea)',
'en_PH' => 'angličtina (Filipíny)',
'en_PK' => 'angličtina (Pákistán)',
+ 'en_PL' => 'angličtina (Polsko)',
'en_PN' => 'angličtina (Pitcairnovy ostrovy)',
'en_PR' => 'angličtina (Portoriko)',
+ 'en_PT' => 'angličtina (Portugalsko)',
'en_PW' => 'angličtina (Palau)',
+ 'en_RO' => 'angličtina (Rumunsko)',
'en_RW' => 'angličtina (Rwanda)',
'en_SB' => 'angličtina (Šalamounovy ostrovy)',
'en_SC' => 'angličtina (Seychely)',
@@ -184,6 +194,7 @@
'en_SG' => 'angličtina (Singapur)',
'en_SH' => 'angličtina (Svatá Helena)',
'en_SI' => 'angličtina (Slovinsko)',
+ 'en_SK' => 'angličtina (Slovensko)',
'en_SL' => 'angličtina (Sierra Leone)',
'en_SS' => 'angličtina (Jižní Súdán)',
'en_SX' => 'angličtina (Svatý Martin [Nizozemsko])',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/cv.php b/src/Symfony/Component/Intl/Resources/data/locales/cv.php
index cbf34ec6b4eee..94717b2b22b93 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/cv.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/cv.php
@@ -67,28 +67,34 @@
'en_CM' => 'акӑлчан (Камерун)',
'en_CX' => 'акӑлчан (Раштав утравӗ)',
'en_CY' => 'акӑлчан (Кипр)',
+ 'en_CZ' => 'акӑлчан (Чехи)',
'en_DE' => 'акӑлчан (Германи)',
'en_DK' => 'акӑлчан (Дани)',
'en_DM' => 'акӑлчан (Доминика)',
'en_ER' => 'акӑлчан (Эритрей)',
+ 'en_ES' => 'акӑлчан (Испани)',
'en_FI' => 'акӑлчан (Финлянди)',
'en_FJ' => 'акӑлчан (Фиджи)',
'en_FK' => 'акӑлчан (Фолкленд утравӗсем)',
'en_FM' => 'акӑлчан (Микронези)',
+ 'en_FR' => 'акӑлчан (Франци)',
'en_GB' => 'акӑлчан (Аслӑ Британи)',
'en_GD' => 'акӑлчан (Гренада)',
'en_GG' => 'акӑлчан (Гернси)',
'en_GH' => 'акӑлчан (Гана)',
'en_GI' => 'акӑлчан (Гибралтар)',
'en_GM' => 'акӑлчан (Гамби)',
+ 'en_GS' => 'акӑлчан (Кӑнтӑр Георги тата Сандвичев утравӗсем)',
'en_GU' => 'акӑлчан (Гуам)',
'en_GY' => 'акӑлчан (Гайана)',
'en_HK' => 'акӑлчан (Гонконг [САР])',
+ 'en_HU' => 'акӑлчан (Венгри)',
'en_ID' => 'акӑлчан (Индонези)',
'en_IE' => 'акӑлчан (Ирланди)',
'en_IL' => 'акӑлчан (Израиль)',
'en_IM' => 'акӑлчан (Мэн утравӗ)',
'en_IN' => 'акӑлчан (Инди)',
+ 'en_IT' => 'акӑлчан (Итали)',
'en_JE' => 'акӑлчан (Джерси)',
'en_JM' => 'акӑлчан (Ямайка)',
'en_KE' => 'акӑлчан (Кени)',
@@ -112,15 +118,19 @@
'en_NF' => 'акӑлчан (Норфолк утравӗ)',
'en_NG' => 'акӑлчан (Нигери)',
'en_NL' => 'акӑлчан (Нидерланд)',
+ 'en_NO' => 'акӑлчан (Норвеги)',
'en_NR' => 'акӑлчан (Науру)',
'en_NU' => 'акӑлчан (Ниуэ)',
'en_NZ' => 'акӑлчан (Ҫӗнӗ Зеланди)',
'en_PG' => 'акӑлчан (Папуа — Ҫӗнӗ Гвиней)',
'en_PH' => 'акӑлчан (Филиппинсем)',
'en_PK' => 'акӑлчан (Пакистан)',
+ 'en_PL' => 'акӑлчан (Польша)',
'en_PN' => 'акӑлчан (Питкэрн утравӗсем)',
'en_PR' => 'акӑлчан (Пуэрто-Рико)',
+ 'en_PT' => 'акӑлчан (Португали)',
'en_PW' => 'акӑлчан (Палау)',
+ 'en_RO' => 'акӑлчан (Румыни)',
'en_RW' => 'акӑлчан (Руанда)',
'en_SB' => 'акӑлчан (Соломон утравӗсем)',
'en_SC' => 'акӑлчан (Сейшел утравӗсем)',
@@ -129,6 +139,7 @@
'en_SG' => 'акӑлчан (Сингапур)',
'en_SH' => 'акӑлчан (Сӑваплӑ Елена утравӗ)',
'en_SI' => 'акӑлчан (Словени)',
+ 'en_SK' => 'акӑлчан (Словаки)',
'en_SL' => 'акӑлчан (Сьерра-Леоне)',
'en_SS' => 'акӑлчан (Кӑнтӑр Судан)',
'en_SX' => 'акӑлчан (Синт-Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/cy.php b/src/Symfony/Component/Intl/Resources/data/locales/cy.php
index 565b768f39f86..7122d9a45f1af 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/cy.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/cy.php
@@ -121,29 +121,35 @@
'en_CM' => 'Saesneg (Camerŵn)',
'en_CX' => 'Saesneg (Ynys y Nadolig)',
'en_CY' => 'Saesneg (Cyprus)',
+ 'en_CZ' => 'Saesneg (Tsiecia)',
'en_DE' => 'Saesneg (Yr Almaen)',
'en_DK' => 'Saesneg (Denmarc)',
'en_DM' => 'Saesneg (Dominica)',
'en_ER' => 'Saesneg (Eritrea)',
+ 'en_ES' => 'Saesneg (Sbaen)',
'en_FI' => 'Saesneg (Y Ffindir)',
'en_FJ' => 'Saesneg (Fiji)',
'en_FK' => 'Saesneg (Ynysoedd y Falkland/Malvinas)',
'en_FM' => 'Saesneg (Micronesia)',
+ 'en_FR' => 'Saesneg (Ffrainc)',
'en_GB' => 'Saesneg (Y Deyrnas Unedig)',
'en_GD' => 'Saesneg (Grenada)',
'en_GG' => 'Saesneg (Ynys y Garn)',
'en_GH' => 'Saesneg (Ghana)',
'en_GI' => 'Saesneg (Gibraltar)',
'en_GM' => 'Saesneg (Gambia)',
+ 'en_GS' => 'Saesneg (De Georgia ac Ynysoedd Sandwich y De)',
'en_GU' => 'Saesneg (Guam)',
'en_GY' => 'Saesneg (Guyana)',
'en_HK' => 'Saesneg (Hong Kong SAR Tsieina)',
+ 'en_HU' => 'Saesneg (Hwngari)',
'en_ID' => 'Saesneg (Indonesia)',
'en_IE' => 'Saesneg (Iwerddon)',
'en_IL' => 'Saesneg (Israel)',
'en_IM' => 'Saesneg (Ynys Manaw)',
'en_IN' => 'Saesneg (India)',
'en_IO' => 'Saesneg (Tiriogaeth Brydeinig Cefnfor India)',
+ 'en_IT' => 'Saesneg (Yr Eidal)',
'en_JE' => 'Saesneg (Jersey)',
'en_JM' => 'Saesneg (Jamaica)',
'en_KE' => 'Saesneg (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Saesneg (Ynys Norfolk)',
'en_NG' => 'Saesneg (Nigeria)',
'en_NL' => 'Saesneg (Yr Iseldiroedd)',
+ 'en_NO' => 'Saesneg (Norwy)',
'en_NR' => 'Saesneg (Nauru)',
'en_NU' => 'Saesneg (Niue)',
'en_NZ' => 'Saesneg (Seland Newydd)',
'en_PG' => 'Saesneg (Papua Guinea Newydd)',
'en_PH' => 'Saesneg (Y Philipinau)',
'en_PK' => 'Saesneg (Pakistan)',
+ 'en_PL' => 'Saesneg (Gwlad Pwyl)',
'en_PN' => 'Saesneg (Ynysoedd Pitcairn)',
'en_PR' => 'Saesneg (Puerto Rico)',
+ 'en_PT' => 'Saesneg (Portiwgal)',
'en_PW' => 'Saesneg (Palau)',
+ 'en_RO' => 'Saesneg (Rwmania)',
'en_RW' => 'Saesneg (Rwanda)',
'en_SB' => 'Saesneg (Ynysoedd Solomon)',
'en_SC' => 'Saesneg (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'Saesneg (Singapore)',
'en_SH' => 'Saesneg (Saint Helena)',
'en_SI' => 'Saesneg (Slofenia)',
+ 'en_SK' => 'Saesneg (Slofacia)',
'en_SL' => 'Saesneg (Sierra Leone)',
'en_SS' => 'Saesneg (De Swdan)',
'en_SX' => 'Saesneg (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/da.php b/src/Symfony/Component/Intl/Resources/data/locales/da.php
index 43883daeddcf0..4840d59622c77 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/da.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/da.php
@@ -121,29 +121,35 @@
'en_CM' => 'engelsk (Cameroun)',
'en_CX' => 'engelsk (Juleøen)',
'en_CY' => 'engelsk (Cypern)',
+ 'en_CZ' => 'engelsk (Tjekkiet)',
'en_DE' => 'engelsk (Tyskland)',
'en_DK' => 'engelsk (Danmark)',
'en_DM' => 'engelsk (Dominica)',
'en_ER' => 'engelsk (Eritrea)',
+ 'en_ES' => 'engelsk (Spanien)',
'en_FI' => 'engelsk (Finland)',
'en_FJ' => 'engelsk (Fiji)',
'en_FK' => 'engelsk (Falklandsøerne)',
'en_FM' => 'engelsk (Mikronesien)',
+ 'en_FR' => 'engelsk (Frankrig)',
'en_GB' => 'engelsk (Storbritannien)',
'en_GD' => 'engelsk (Grenada)',
'en_GG' => 'engelsk (Guernsey)',
'en_GH' => 'engelsk (Ghana)',
'en_GI' => 'engelsk (Gibraltar)',
'en_GM' => 'engelsk (Gambia)',
+ 'en_GS' => 'engelsk (South Georgia og De Sydlige Sandwichøer)',
'en_GU' => 'engelsk (Guam)',
'en_GY' => 'engelsk (Guyana)',
'en_HK' => 'engelsk (SAR Hongkong)',
+ 'en_HU' => 'engelsk (Ungarn)',
'en_ID' => 'engelsk (Indonesien)',
'en_IE' => 'engelsk (Irland)',
'en_IL' => 'engelsk (Israel)',
'en_IM' => 'engelsk (Isle of Man)',
'en_IN' => 'engelsk (Indien)',
'en_IO' => 'engelsk (Det Britiske Territorium i Det Indiske Ocean)',
+ 'en_IT' => 'engelsk (Italien)',
'en_JE' => 'engelsk (Jersey)',
'en_JM' => 'engelsk (Jamaica)',
'en_KE' => 'engelsk (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'engelsk (Norfolk Island)',
'en_NG' => 'engelsk (Nigeria)',
'en_NL' => 'engelsk (Nederlandene)',
+ 'en_NO' => 'engelsk (Norge)',
'en_NR' => 'engelsk (Nauru)',
'en_NU' => 'engelsk (Niue)',
'en_NZ' => 'engelsk (New Zealand)',
'en_PG' => 'engelsk (Papua Ny Guinea)',
'en_PH' => 'engelsk (Filippinerne)',
'en_PK' => 'engelsk (Pakistan)',
+ 'en_PL' => 'engelsk (Polen)',
'en_PN' => 'engelsk (Pitcairn)',
'en_PR' => 'engelsk (Puerto Rico)',
+ 'en_PT' => 'engelsk (Portugal)',
'en_PW' => 'engelsk (Palau)',
+ 'en_RO' => 'engelsk (Rumænien)',
'en_RW' => 'engelsk (Rwanda)',
'en_SB' => 'engelsk (Salomonøerne)',
'en_SC' => 'engelsk (Seychellerne)',
@@ -184,6 +194,7 @@
'en_SG' => 'engelsk (Singapore)',
'en_SH' => 'engelsk (St. Helena)',
'en_SI' => 'engelsk (Slovenien)',
+ 'en_SK' => 'engelsk (Slovakiet)',
'en_SL' => 'engelsk (Sierra Leone)',
'en_SS' => 'engelsk (Sydsudan)',
'en_SX' => 'engelsk (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/de.php b/src/Symfony/Component/Intl/Resources/data/locales/de.php
index 2b92bd6d0454c..538fc989c977c 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/de.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/de.php
@@ -121,29 +121,35 @@
'en_CM' => 'Englisch (Kamerun)',
'en_CX' => 'Englisch (Weihnachtsinsel)',
'en_CY' => 'Englisch (Zypern)',
+ 'en_CZ' => 'Englisch (Tschechien)',
'en_DE' => 'Englisch (Deutschland)',
'en_DK' => 'Englisch (Dänemark)',
'en_DM' => 'Englisch (Dominica)',
'en_ER' => 'Englisch (Eritrea)',
+ 'en_ES' => 'Englisch (Spanien)',
'en_FI' => 'Englisch (Finnland)',
'en_FJ' => 'Englisch (Fidschi)',
'en_FK' => 'Englisch (Falklandinseln)',
'en_FM' => 'Englisch (Mikronesien)',
+ 'en_FR' => 'Englisch (Frankreich)',
'en_GB' => 'Englisch (Vereinigtes Königreich)',
'en_GD' => 'Englisch (Grenada)',
'en_GG' => 'Englisch (Guernsey)',
'en_GH' => 'Englisch (Ghana)',
'en_GI' => 'Englisch (Gibraltar)',
'en_GM' => 'Englisch (Gambia)',
+ 'en_GS' => 'Englisch (Südgeorgien und die Südlichen Sandwichinseln)',
'en_GU' => 'Englisch (Guam)',
'en_GY' => 'Englisch (Guyana)',
'en_HK' => 'Englisch (Sonderverwaltungsregion Hongkong)',
+ 'en_HU' => 'Englisch (Ungarn)',
'en_ID' => 'Englisch (Indonesien)',
'en_IE' => 'Englisch (Irland)',
'en_IL' => 'Englisch (Israel)',
'en_IM' => 'Englisch (Isle of Man)',
'en_IN' => 'Englisch (Indien)',
'en_IO' => 'Englisch (Britisches Territorium im Indischen Ozean)',
+ 'en_IT' => 'Englisch (Italien)',
'en_JE' => 'Englisch (Jersey)',
'en_JM' => 'Englisch (Jamaika)',
'en_KE' => 'Englisch (Kenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'Englisch (Norfolkinsel)',
'en_NG' => 'Englisch (Nigeria)',
'en_NL' => 'Englisch (Niederlande)',
+ 'en_NO' => 'Englisch (Norwegen)',
'en_NR' => 'Englisch (Nauru)',
'en_NU' => 'Englisch (Niue)',
'en_NZ' => 'Englisch (Neuseeland)',
'en_PG' => 'Englisch (Papua-Neuguinea)',
'en_PH' => 'Englisch (Philippinen)',
'en_PK' => 'Englisch (Pakistan)',
+ 'en_PL' => 'Englisch (Polen)',
'en_PN' => 'Englisch (Pitcairninseln)',
'en_PR' => 'Englisch (Puerto Rico)',
+ 'en_PT' => 'Englisch (Portugal)',
'en_PW' => 'Englisch (Palau)',
+ 'en_RO' => 'Englisch (Rumänien)',
'en_RW' => 'Englisch (Ruanda)',
'en_SB' => 'Englisch (Salomonen)',
'en_SC' => 'Englisch (Seychellen)',
@@ -184,6 +194,7 @@
'en_SG' => 'Englisch (Singapur)',
'en_SH' => 'Englisch (St. Helena)',
'en_SI' => 'Englisch (Slowenien)',
+ 'en_SK' => 'Englisch (Slowakei)',
'en_SL' => 'Englisch (Sierra Leone)',
'en_SS' => 'Englisch (Südsudan)',
'en_SX' => 'Englisch (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/dz.php b/src/Symfony/Component/Intl/Resources/data/locales/dz.php
index 1d72a3a0d48bc..6d14bbb965595 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/dz.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/dz.php
@@ -108,28 +108,34 @@
'en_CM' => 'ཨིང་ལིཤ་ཁ། (ཀེ་མ་རུན།)',
'en_CX' => 'ཨིང་ལིཤ་ཁ། (ཁི་རིསྟ་མེས་མཚོ་གླིང།)',
'en_CY' => 'ཨིང་ལིཤ་ཁ། (སཱའི་པྲས།)',
+ 'en_CZ' => 'ཨིང་ལིཤ་ཁ། (ཅེཀ་ རི་པབ་ལིཀ།)',
'en_DE' => 'ཨིང་ལིཤ་ཁ། (ཇཱར་མ་ནི།)',
'en_DK' => 'ཨིང་ལིཤ་ཁ། (ཌེན་མཱཀ།)',
'en_DM' => 'ཨིང་ལིཤ་ཁ། (ཌོ་མི་ནི་ཀ།)',
'en_ER' => 'ཨིང་ལིཤ་ཁ། (ཨེ་རི་ཊྲེ་ཡ།)',
+ 'en_ES' => 'ཨིང་ལིཤ་ཁ། (ཨིས་པེན།)',
'en_FI' => 'ཨིང་ལིཤ་ཁ། (ཕིན་ལེནཌ།)',
'en_FJ' => 'ཨིང་ལིཤ་ཁ། (ཕི་ཇི།)',
'en_FK' => 'ཨིང་ལིཤ་ཁ། (ཕལྐ་ལནྜ་གླིང་ཚོམ།)',
'en_FM' => 'ཨིང་ལིཤ་ཁ། (མའི་ཀྲོ་ནི་ཤི་ཡ།)',
+ 'en_FR' => 'ཨིང་ལིཤ་ཁ། (ཕྲཱནས།)',
'en_GB' => 'ཨིང་ལིཤ་ཁ། (ཡུ་ནཱའི་ཊེཌ་ ཀིང་ཌམ།)',
'en_GD' => 'ཨིང་ལིཤ་ཁ། (གྲྀ་ན་ཌ།)',
'en_GG' => 'ཨིང་ལིཤ་ཁ། (གུ་ཨེརྣ་སི།)',
'en_GH' => 'ཨིང་ལིཤ་ཁ། (གྷ་ན།)',
'en_GI' => 'ཨིང་ལིཤ་ཁ། (ཇིབ་རཱལ་ཊར།)',
'en_GM' => 'ཨིང་ལིཤ་ཁ། (གྷེམ་བི་ཡ།)',
+ 'en_GS' => 'ཨིང་ལིཤ་ཁ། (སཱའུཐ་ཇཽར་ཇཱ་ དང་ སཱའུཐ་སེནཌ྄་ཝིཅ་གླིང་ཚོམ།)',
'en_GU' => 'ཨིང་ལིཤ་ཁ། (གུ་འམ་ མཚོ་གླིང།)',
'en_GY' => 'ཨིང་ལིཤ་ཁ། (གྷ་ཡ་ན།)',
'en_HK' => 'ཨིང་ལིཤ་ཁ། (ཧོང་ཀོང་ཅཱའི་ན།)',
+ 'en_HU' => 'ཨིང་ལིཤ་ཁ། (ཧཱང་གྷ་རི།)',
'en_ID' => 'ཨིང་ལིཤ་ཁ། (ཨིན་ཌོ་ནེ་ཤི་ཡ།)',
'en_IE' => 'ཨིང་ལིཤ་ཁ། (ཨཱ་ཡ་ལེནཌ།)',
'en_IL' => 'ཨིང་ལིཤ་ཁ། (ཨིས་ར་ཡེལ།)',
'en_IM' => 'ཨིང་ལིཤ་ཁ། (ཨ་ཡུལ་ ཨོཕ་ མཱན།)',
'en_IN' => 'ཨིང་ལིཤ་ཁ། (རྒྱ་གར།)',
+ 'en_IT' => 'ཨིང་ལིཤ་ཁ། (ཨི་ཊ་ལི།)',
'en_JE' => 'ཨིང་ལིཤ་ཁ། (ཇེར་སི།)',
'en_JM' => 'ཨིང་ལིཤ་ཁ། (ཇཱ་མཻ་ཀ།)',
'en_KE' => 'ཨིང་ལིཤ་ཁ། (ཀེན་ཡ།)',
@@ -153,15 +159,19 @@
'en_NF' => 'ཨིང་ལིཤ་ཁ། (ནོར་ཕོལཀ་མཚོ་གླིང༌།)',
'en_NG' => 'ཨིང་ལིཤ་ཁ། (ནཱའི་ཇི་རི་ཡ།)',
'en_NL' => 'ཨིང་ལིཤ་ཁ། (ནེ་དར་ལནཌས྄།)',
+ 'en_NO' => 'ཨིང་ལིཤ་ཁ། (ནོར་ཝེ།)',
'en_NR' => 'ཨིང་ལིཤ་ཁ། (ནའུ་རུ་།)',
'en_NU' => 'ཨིང་ལིཤ་ཁ། (ནི་ཨུ་ཨཻ།)',
'en_NZ' => 'ཨིང་ལིཤ་ཁ། (ནིའུ་ཛི་ལེནཌ།)',
'en_PG' => 'ཨིང་ལིཤ་ཁ། (པ་པུ་ ནིའུ་གི་ནི།)',
'en_PH' => 'ཨིང་ལིཤ་ཁ། (ཕི་ལི་པིནས།)',
'en_PK' => 'ཨིང་ལིཤ་ཁ། (པ་ཀི་སཏཱན།)',
+ 'en_PL' => 'ཨིང་ལིཤ་ཁ། (པོ་ལེནཌ།)',
'en_PN' => 'ཨིང་ལིཤ་ཁ། (པིཊ་ཀེ་ཡེརན་གླིང་ཚོམ།)',
'en_PR' => 'ཨིང་ལིཤ་ཁ། (པུ་འེར་ཊོ་རི་ཁོ།)',
+ 'en_PT' => 'ཨིང་ལིཤ་ཁ། (པོར་ཅུ་གཱལ།)',
'en_PW' => 'ཨིང་ལིཤ་ཁ། (པ་ལའུ།)',
+ 'en_RO' => 'ཨིང་ལིཤ་ཁ། (རོ་མེ་ནི་ཡ།)',
'en_RW' => 'ཨིང་ལིཤ་ཁ། (རུ་ཝན་ཌ།)',
'en_SB' => 'ཨིང་ལིཤ་ཁ། (སོ་ལོ་མོན་ གླིང་ཚོམ།)',
'en_SC' => 'ཨིང་ལིཤ་ཁ། (སེ་ཤཱལས།)',
@@ -170,6 +180,7 @@
'en_SG' => 'ཨིང་ལིཤ་ཁ། (སིང་ག་པོར།)',
'en_SH' => 'ཨིང་ལིཤ་ཁ། (སེནཊ་ ཧེ་ལི་ན།)',
'en_SI' => 'ཨིང་ལིཤ་ཁ། (སུ་ལོ་བི་ནི་ཡ།)',
+ 'en_SK' => 'ཨིང་ལིཤ་ཁ། (སུ་ལོ་བཱ་ཀི་ཡ།)',
'en_SL' => 'ཨིང་ལིཤ་ཁ། (སི་ར་ ལི་འོན།)',
'en_SS' => 'ཨིང་ལིཤ་ཁ། (སཱའུཐ་ སུ་ཌཱན།)',
'en_SX' => 'ཨིང་ལིཤ་ཁ། (སིནཊ་ མཱར་ཊེན།)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ee.php b/src/Symfony/Component/Intl/Resources/data/locales/ee.php
index 06bfd269580e6..11f8d3a8665ef 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ee.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ee.php
@@ -116,28 +116,34 @@
'en_CM' => 'iŋlisigbe (Kamerun nutome)',
'en_CX' => 'iŋlisigbe (Kristmas ƒudomekpo nutome)',
'en_CY' => 'iŋlisigbe (Saiprus nutome)',
+ 'en_CZ' => 'iŋlisigbe (Tsɛk repɔblik nutome)',
'en_DE' => 'iŋlisigbe (Germania nutome)',
'en_DK' => 'iŋlisigbe (Denmark nutome)',
'en_DM' => 'iŋlisigbe (Dominika nutome)',
'en_ER' => 'iŋlisigbe (Eritrea nutome)',
+ 'en_ES' => 'iŋlisigbe (Spain nutome)',
'en_FI' => 'iŋlisigbe (Finland nutome)',
'en_FJ' => 'iŋlisigbe (Fidzi nutome)',
'en_FK' => 'iŋlisigbe (Falkland ƒudomekpowo nutome)',
'en_FM' => 'iŋlisigbe (Mikronesia nutome)',
+ 'en_FR' => 'iŋlisigbe (France nutome)',
'en_GB' => 'iŋlisigbe (United Kingdom nutome)',
'en_GD' => 'iŋlisigbe (Grenada nutome)',
'en_GG' => 'iŋlisigbe (Guernse nutome)',
'en_GH' => 'iŋlisigbe (Ghana nutome)',
'en_GI' => 'iŋlisigbe (Gibraltar nutome)',
'en_GM' => 'iŋlisigbe (Gambia nutome)',
+ 'en_GS' => 'iŋlisigbe (Anyiehe Georgia kple Anyiehe Sandwich ƒudomekpowo nutome)',
'en_GU' => 'iŋlisigbe (Guam nutome)',
'en_GY' => 'iŋlisigbe (Guyanadu)',
'en_HK' => 'iŋlisigbe (Hɔng Kɔng SAR Tsaina nutome)',
+ 'en_HU' => 'iŋlisigbe (Hungari nutome)',
'en_ID' => 'iŋlisigbe (Indonesia nutome)',
'en_IE' => 'iŋlisigbe (Ireland nutome)',
'en_IL' => 'iŋlisigbe (Israel nutome)',
'en_IM' => 'iŋlisigbe (Aisle of Man nutome)',
'en_IN' => 'iŋlisigbe (India nutome)',
+ 'en_IT' => 'iŋlisigbe (Italia nutome)',
'en_JE' => 'iŋlisigbe (Dzɛse nutome)',
'en_JM' => 'iŋlisigbe (Dzamaika nutome)',
'en_KE' => 'iŋlisigbe (Kenya nutome)',
@@ -161,15 +167,19 @@
'en_NF' => 'iŋlisigbe (Norfolk ƒudomekpo nutome)',
'en_NG' => 'iŋlisigbe (Nigeria nutome)',
'en_NL' => 'iŋlisigbe (Netherlands nutome)',
+ 'en_NO' => 'iŋlisigbe (Norway nutome)',
'en_NR' => 'iŋlisigbe (Nauru nutome)',
'en_NU' => 'iŋlisigbe (Niue nutome)',
'en_NZ' => 'iŋlisigbe (New Zealand nutome)',
'en_PG' => 'iŋlisigbe (Papua New Gini nutome)',
'en_PH' => 'iŋlisigbe (Filipini nutome)',
'en_PK' => 'iŋlisigbe (Pakistan nutome)',
+ 'en_PL' => 'iŋlisigbe (Poland nutome)',
'en_PN' => 'iŋlisigbe (Pitkairn ƒudomekpo nutome)',
'en_PR' => 'iŋlisigbe (Puerto Riko nutome)',
+ 'en_PT' => 'iŋlisigbe (Portugal nutome)',
'en_PW' => 'iŋlisigbe (Palau nutome)',
+ 'en_RO' => 'iŋlisigbe (Romania nutome)',
'en_RW' => 'iŋlisigbe (Rwanda nutome)',
'en_SB' => 'iŋlisigbe (Solomon ƒudomekpowo nutome)',
'en_SC' => 'iŋlisigbe (Seshɛls nutome)',
@@ -178,6 +188,7 @@
'en_SG' => 'iŋlisigbe (Singapɔr nutome)',
'en_SH' => 'iŋlisigbe (Saint Helena nutome)',
'en_SI' => 'iŋlisigbe (Slovenia nutome)',
+ 'en_SK' => 'iŋlisigbe (Slovakia nutome)',
'en_SL' => 'iŋlisigbe (Sierra Leone nutome)',
'en_SZ' => 'iŋlisigbe (Swaziland nutome)',
'en_TC' => 'iŋlisigbe (Tɛks kple Kaikos ƒudomekpowo nutome)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/el.php b/src/Symfony/Component/Intl/Resources/data/locales/el.php
index f7321ff73213d..5fc8cd47235ae 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/el.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/el.php
@@ -121,29 +121,35 @@
'en_CM' => 'Αγγλικά (Καμερούν)',
'en_CX' => 'Αγγλικά (Νήσος των Χριστουγέννων)',
'en_CY' => 'Αγγλικά (Κύπρος)',
+ 'en_CZ' => 'Αγγλικά (Τσεχία)',
'en_DE' => 'Αγγλικά (Γερμανία)',
'en_DK' => 'Αγγλικά (Δανία)',
'en_DM' => 'Αγγλικά (Ντομίνικα)',
'en_ER' => 'Αγγλικά (Ερυθραία)',
+ 'en_ES' => 'Αγγλικά (Ισπανία)',
'en_FI' => 'Αγγλικά (Φινλανδία)',
'en_FJ' => 'Αγγλικά (Φίτζι)',
'en_FK' => 'Αγγλικά (Νήσοι Φόκλαντ)',
'en_FM' => 'Αγγλικά (Μικρονησία)',
+ 'en_FR' => 'Αγγλικά (Γαλλία)',
'en_GB' => 'Αγγλικά (Ηνωμένο Βασίλειο)',
'en_GD' => 'Αγγλικά (Γρενάδα)',
'en_GG' => 'Αγγλικά (Γκέρνζι)',
'en_GH' => 'Αγγλικά (Γκάνα)',
'en_GI' => 'Αγγλικά (Γιβραλτάρ)',
'en_GM' => 'Αγγλικά (Γκάμπια)',
+ 'en_GS' => 'Αγγλικά (Νήσοι Νότια Γεωργία και Νότιες Σάντουιτς)',
'en_GU' => 'Αγγλικά (Γκουάμ)',
'en_GY' => 'Αγγλικά (Γουιάνα)',
'en_HK' => 'Αγγλικά (Χονγκ Κονγκ ΕΔΠ Κίνας)',
+ 'en_HU' => 'Αγγλικά (Ουγγαρία)',
'en_ID' => 'Αγγλικά (Ινδονησία)',
'en_IE' => 'Αγγλικά (Ιρλανδία)',
'en_IL' => 'Αγγλικά (Ισραήλ)',
'en_IM' => 'Αγγλικά (Νήσος του Μαν)',
'en_IN' => 'Αγγλικά (Ινδία)',
'en_IO' => 'Αγγλικά (Βρετανικά Εδάφη Ινδικού Ωκεανού)',
+ 'en_IT' => 'Αγγλικά (Ιταλία)',
'en_JE' => 'Αγγλικά (Τζέρζι)',
'en_JM' => 'Αγγλικά (Τζαμάικα)',
'en_KE' => 'Αγγλικά (Κένυα)',
@@ -167,15 +173,19 @@
'en_NF' => 'Αγγλικά (Νήσος Νόρφολκ)',
'en_NG' => 'Αγγλικά (Νιγηρία)',
'en_NL' => 'Αγγλικά (Κάτω Χώρες)',
+ 'en_NO' => 'Αγγλικά (Νορβηγία)',
'en_NR' => 'Αγγλικά (Ναουρού)',
'en_NU' => 'Αγγλικά (Νιούε)',
'en_NZ' => 'Αγγλικά (Νέα Ζηλανδία)',
'en_PG' => 'Αγγλικά (Παπούα Νέα Γουινέα)',
'en_PH' => 'Αγγλικά (Φιλιππίνες)',
'en_PK' => 'Αγγλικά (Πακιστάν)',
+ 'en_PL' => 'Αγγλικά (Πολωνία)',
'en_PN' => 'Αγγλικά (Νήσοι Πίτκερν)',
'en_PR' => 'Αγγλικά (Πουέρτο Ρίκο)',
+ 'en_PT' => 'Αγγλικά (Πορτογαλία)',
'en_PW' => 'Αγγλικά (Παλάου)',
+ 'en_RO' => 'Αγγλικά (Ρουμανία)',
'en_RW' => 'Αγγλικά (Ρουάντα)',
'en_SB' => 'Αγγλικά (Νήσοι Σολομώντος)',
'en_SC' => 'Αγγλικά (Σεϋχέλλες)',
@@ -184,6 +194,7 @@
'en_SG' => 'Αγγλικά (Σιγκαπούρη)',
'en_SH' => 'Αγγλικά (Αγία Ελένη)',
'en_SI' => 'Αγγλικά (Σλοβενία)',
+ 'en_SK' => 'Αγγλικά (Σλοβακία)',
'en_SL' => 'Αγγλικά (Σιέρα Λεόνε)',
'en_SS' => 'Αγγλικά (Νότιο Σουδάν)',
'en_SX' => 'Αγγλικά (Άγιος Μαρτίνος [Ολλανδικό τμήμα])',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/en.php b/src/Symfony/Component/Intl/Resources/data/locales/en.php
index 3814a240bdba7..1959ed8ab2948 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/en.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/en.php
@@ -121,29 +121,35 @@
'en_CM' => 'English (Cameroon)',
'en_CX' => 'English (Christmas Island)',
'en_CY' => 'English (Cyprus)',
+ 'en_CZ' => 'English (Czechia)',
'en_DE' => 'English (Germany)',
'en_DK' => 'English (Denmark)',
'en_DM' => 'English (Dominica)',
'en_ER' => 'English (Eritrea)',
+ 'en_ES' => 'English (Spain)',
'en_FI' => 'English (Finland)',
'en_FJ' => 'English (Fiji)',
'en_FK' => 'English (Falkland Islands)',
'en_FM' => 'English (Micronesia)',
+ 'en_FR' => 'English (France)',
'en_GB' => 'English (United Kingdom)',
'en_GD' => 'English (Grenada)',
'en_GG' => 'English (Guernsey)',
'en_GH' => 'English (Ghana)',
'en_GI' => 'English (Gibraltar)',
'en_GM' => 'English (Gambia)',
+ 'en_GS' => 'English (South Georgia & South Sandwich Islands)',
'en_GU' => 'English (Guam)',
'en_GY' => 'English (Guyana)',
'en_HK' => 'English (Hong Kong SAR China)',
+ 'en_HU' => 'English (Hungary)',
'en_ID' => 'English (Indonesia)',
'en_IE' => 'English (Ireland)',
'en_IL' => 'English (Israel)',
'en_IM' => 'English (Isle of Man)',
'en_IN' => 'English (India)',
'en_IO' => 'English (British Indian Ocean Territory)',
+ 'en_IT' => 'English (Italy)',
'en_JE' => 'English (Jersey)',
'en_JM' => 'English (Jamaica)',
'en_KE' => 'English (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'English (Norfolk Island)',
'en_NG' => 'English (Nigeria)',
'en_NL' => 'English (Netherlands)',
+ 'en_NO' => 'English (Norway)',
'en_NR' => 'English (Nauru)',
'en_NU' => 'English (Niue)',
'en_NZ' => 'English (New Zealand)',
'en_PG' => 'English (Papua New Guinea)',
'en_PH' => 'English (Philippines)',
'en_PK' => 'English (Pakistan)',
+ 'en_PL' => 'English (Poland)',
'en_PN' => 'English (Pitcairn Islands)',
'en_PR' => 'English (Puerto Rico)',
+ 'en_PT' => 'English (Portugal)',
'en_PW' => 'English (Palau)',
+ 'en_RO' => 'English (Romania)',
'en_RW' => 'English (Rwanda)',
'en_SB' => 'English (Solomon Islands)',
'en_SC' => 'English (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'English (Singapore)',
'en_SH' => 'English (St. Helena)',
'en_SI' => 'English (Slovenia)',
+ 'en_SK' => 'English (Slovakia)',
'en_SL' => 'English (Sierra Leone)',
'en_SS' => 'English (South Sudan)',
'en_SX' => 'English (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/en_CA.php b/src/Symfony/Component/Intl/Resources/data/locales/en_CA.php
index e09f86450c562..500888fb75e93 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/en_CA.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/en_CA.php
@@ -10,6 +10,7 @@
'bs_Cyrl_BA' => 'Bosnian (Cyrillic, Bosnia and Herzegovina)',
'bs_Latn_BA' => 'Bosnian (Latin, Bosnia and Herzegovina)',
'en_AG' => 'English (Antigua and Barbuda)',
+ 'en_GS' => 'English (South Georgia and South Sandwich Islands)',
'en_KN' => 'English (Saint Kitts and Nevis)',
'en_LC' => 'English (Saint Lucia)',
'en_SH' => 'English (Saint Helena)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/eo.php b/src/Symfony/Component/Intl/Resources/data/locales/eo.php
index 6ecc2fbd1dec6..0f6bbfbc66337 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/eo.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/eo.php
@@ -100,24 +100,30 @@
'en_CK' => 'angla (Kukinsuloj)',
'en_CM' => 'angla (Kameruno)',
'en_CY' => 'angla (Kipro)',
+ 'en_CZ' => 'angla (Ĉeĥujo)',
'en_DE' => 'angla (Germanujo)',
'en_DK' => 'angla (Danujo)',
'en_DM' => 'angla (Dominiko)',
'en_ER' => 'angla (Eritreo)',
+ 'en_ES' => 'angla (Hispanujo)',
'en_FI' => 'angla (Finnlando)',
'en_FJ' => 'angla (Fiĝoj)',
'en_FM' => 'angla (Mikronezio)',
+ 'en_FR' => 'angla (Francujo)',
'en_GB' => 'angla (Unuiĝinta Reĝlando)',
'en_GD' => 'angla (Grenado)',
'en_GH' => 'angla (Ganao)',
'en_GI' => 'angla (Ĝibraltaro)',
'en_GM' => 'angla (Gambio)',
+ 'en_GS' => 'angla (Sud-Georgio kaj Sud-Sandviĉinsuloj)',
'en_GU' => 'angla (Gvamo)',
'en_GY' => 'angla (Gujano)',
+ 'en_HU' => 'angla (Hungarujo)',
'en_ID' => 'angla (Indonezio)',
'en_IE' => 'angla (Irlando)',
'en_IL' => 'angla (Israelo)',
'en_IN' => 'angla (Hindujo)',
+ 'en_IT' => 'angla (Italujo)',
'en_JM' => 'angla (Jamajko)',
'en_KE' => 'angla (Kenjo)',
'en_KI' => 'angla (Kiribato)',
@@ -138,15 +144,19 @@
'en_NF' => 'angla (Norfolkinsulo)',
'en_NG' => 'angla (Niĝerio)',
'en_NL' => 'angla (Nederlando)',
+ 'en_NO' => 'angla (Norvegujo)',
'en_NR' => 'angla (Nauro)',
'en_NU' => 'angla (Niuo)',
'en_NZ' => 'angla (Nov-Zelando)',
'en_PG' => 'angla (Papuo-Nov-Gvineo)',
'en_PH' => 'angla (Filipinoj)',
'en_PK' => 'angla (Pakistano)',
+ 'en_PL' => 'angla (Pollando)',
'en_PN' => 'angla (Pitkarna Insulo)',
'en_PR' => 'angla (Puertoriko)',
+ 'en_PT' => 'angla (Portugalujo)',
'en_PW' => 'angla (Palaŭo)',
+ 'en_RO' => 'angla (Rumanujo)',
'en_RW' => 'angla (Ruando)',
'en_SB' => 'angla (Salomonoj)',
'en_SC' => 'angla (Sejŝeloj)',
@@ -155,6 +165,7 @@
'en_SG' => 'angla (Singapuro)',
'en_SH' => 'angla (Sankta Heleno)',
'en_SI' => 'angla (Slovenujo)',
+ 'en_SK' => 'angla (Slovakujo)',
'en_SL' => 'angla (Sieraleono)',
'en_SZ' => 'angla (Svazilando)',
'en_TO' => 'angla (Tongo)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/es.php b/src/Symfony/Component/Intl/Resources/data/locales/es.php
index 82c3ab0b165e8..0cf4c47dbb392 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/es.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/es.php
@@ -121,29 +121,35 @@
'en_CM' => 'inglés (Camerún)',
'en_CX' => 'inglés (Isla de Navidad)',
'en_CY' => 'inglés (Chipre)',
+ 'en_CZ' => 'inglés (Chequia)',
'en_DE' => 'inglés (Alemania)',
'en_DK' => 'inglés (Dinamarca)',
'en_DM' => 'inglés (Dominica)',
'en_ER' => 'inglés (Eritrea)',
+ 'en_ES' => 'inglés (España)',
'en_FI' => 'inglés (Finlandia)',
'en_FJ' => 'inglés (Fiyi)',
'en_FK' => 'inglés (Islas Malvinas)',
'en_FM' => 'inglés (Micronesia)',
+ 'en_FR' => 'inglés (Francia)',
'en_GB' => 'inglés (Reino Unido)',
'en_GD' => 'inglés (Granada)',
'en_GG' => 'inglés (Guernesey)',
'en_GH' => 'inglés (Ghana)',
'en_GI' => 'inglés (Gibraltar)',
'en_GM' => 'inglés (Gambia)',
+ 'en_GS' => 'inglés (Islas Georgia del Sur y Sandwich del Sur)',
'en_GU' => 'inglés (Guam)',
'en_GY' => 'inglés (Guyana)',
'en_HK' => 'inglés (RAE de Hong Kong [China])',
+ 'en_HU' => 'inglés (Hungría)',
'en_ID' => 'inglés (Indonesia)',
'en_IE' => 'inglés (Irlanda)',
'en_IL' => 'inglés (Israel)',
'en_IM' => 'inglés (Isla de Man)',
'en_IN' => 'inglés (India)',
'en_IO' => 'inglés (Territorio Británico del Océano Índico)',
+ 'en_IT' => 'inglés (Italia)',
'en_JE' => 'inglés (Jersey)',
'en_JM' => 'inglés (Jamaica)',
'en_KE' => 'inglés (Kenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'inglés (Isla Norfolk)',
'en_NG' => 'inglés (Nigeria)',
'en_NL' => 'inglés (Países Bajos)',
+ 'en_NO' => 'inglés (Noruega)',
'en_NR' => 'inglés (Nauru)',
'en_NU' => 'inglés (Niue)',
'en_NZ' => 'inglés (Nueva Zelanda)',
'en_PG' => 'inglés (Papúa Nueva Guinea)',
'en_PH' => 'inglés (Filipinas)',
'en_PK' => 'inglés (Pakistán)',
+ 'en_PL' => 'inglés (Polonia)',
'en_PN' => 'inglés (Islas Pitcairn)',
'en_PR' => 'inglés (Puerto Rico)',
+ 'en_PT' => 'inglés (Portugal)',
'en_PW' => 'inglés (Palaos)',
+ 'en_RO' => 'inglés (Rumanía)',
'en_RW' => 'inglés (Ruanda)',
'en_SB' => 'inglés (Islas Salomón)',
'en_SC' => 'inglés (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'inglés (Singapur)',
'en_SH' => 'inglés (Santa Elena)',
'en_SI' => 'inglés (Eslovenia)',
+ 'en_SK' => 'inglés (Eslovaquia)',
'en_SL' => 'inglés (Sierra Leona)',
'en_SS' => 'inglés (Sudán del Sur)',
'en_SX' => 'inglés (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/es_419.php b/src/Symfony/Component/Intl/Resources/data/locales/es_419.php
index f8448321f193e..b1d8f6d91e8ee 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/es_419.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/es_419.php
@@ -11,6 +11,8 @@
'bs_Latn' => 'bosnio (latín)',
'bs_Latn_BA' => 'bosnio (latín, Bosnia-Herzegovina)',
'en_001' => 'inglés (mundo)',
+ 'en_GS' => 'inglés (Islas Georgia del Sur y Sándwich del Sur)',
+ 'en_RO' => 'inglés (Rumania)',
'en_UM' => 'inglés (Islas Ultramarinas de EE.UU.)',
'eo_001' => 'esperanto (mundo)',
'eu' => 'vasco',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/et.php b/src/Symfony/Component/Intl/Resources/data/locales/et.php
index e3454e02679dc..6753a81917486 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/et.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/et.php
@@ -121,29 +121,35 @@
'en_CM' => 'inglise (Kamerun)',
'en_CX' => 'inglise (Jõulusaar)',
'en_CY' => 'inglise (Küpros)',
+ 'en_CZ' => 'inglise (Tšehhi)',
'en_DE' => 'inglise (Saksamaa)',
'en_DK' => 'inglise (Taani)',
'en_DM' => 'inglise (Dominica)',
'en_ER' => 'inglise (Eritrea)',
+ 'en_ES' => 'inglise (Hispaania)',
'en_FI' => 'inglise (Soome)',
'en_FJ' => 'inglise (Fidži)',
'en_FK' => 'inglise (Falklandi saared)',
'en_FM' => 'inglise (Mikroneesia)',
+ 'en_FR' => 'inglise (Prantsusmaa)',
'en_GB' => 'inglise (Ühendkuningriik)',
'en_GD' => 'inglise (Grenada)',
'en_GG' => 'inglise (Guernsey)',
'en_GH' => 'inglise (Ghana)',
'en_GI' => 'inglise (Gibraltar)',
'en_GM' => 'inglise (Gambia)',
+ 'en_GS' => 'inglise (Lõuna-Georgia ja Lõuna-Sandwichi saared)',
'en_GU' => 'inglise (Guam)',
'en_GY' => 'inglise (Guyana)',
'en_HK' => 'inglise (Hongkongi erihalduspiirkond)',
+ 'en_HU' => 'inglise (Ungari)',
'en_ID' => 'inglise (Indoneesia)',
'en_IE' => 'inglise (Iirimaa)',
'en_IL' => 'inglise (Iisrael)',
'en_IM' => 'inglise (Mani saar)',
'en_IN' => 'inglise (India)',
'en_IO' => 'inglise (Briti India ookeani ala)',
+ 'en_IT' => 'inglise (Itaalia)',
'en_JE' => 'inglise (Jersey)',
'en_JM' => 'inglise (Jamaica)',
'en_KE' => 'inglise (Keenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'inglise (Norfolk)',
'en_NG' => 'inglise (Nigeeria)',
'en_NL' => 'inglise (Holland)',
+ 'en_NO' => 'inglise (Norra)',
'en_NR' => 'inglise (Nauru)',
'en_NU' => 'inglise (Niue)',
'en_NZ' => 'inglise (Uus-Meremaa)',
'en_PG' => 'inglise (Paapua Uus-Guinea)',
'en_PH' => 'inglise (Filipiinid)',
'en_PK' => 'inglise (Pakistan)',
+ 'en_PL' => 'inglise (Poola)',
'en_PN' => 'inglise (Pitcairni saared)',
'en_PR' => 'inglise (Puerto Rico)',
+ 'en_PT' => 'inglise (Portugal)',
'en_PW' => 'inglise (Belau)',
+ 'en_RO' => 'inglise (Rumeenia)',
'en_RW' => 'inglise (Rwanda)',
'en_SB' => 'inglise (Saalomoni Saared)',
'en_SC' => 'inglise (Seišellid)',
@@ -184,6 +194,7 @@
'en_SG' => 'inglise (Singapur)',
'en_SH' => 'inglise (Saint Helena)',
'en_SI' => 'inglise (Sloveenia)',
+ 'en_SK' => 'inglise (Slovakkia)',
'en_SL' => 'inglise (Sierra Leone)',
'en_SS' => 'inglise (Lõuna-Sudaan)',
'en_SX' => 'inglise (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/eu.php b/src/Symfony/Component/Intl/Resources/data/locales/eu.php
index 9f97dec3c1ba0..a41ea496d6849 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/eu.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/eu.php
@@ -121,29 +121,35 @@
'en_CM' => 'ingelesa (Kamerun)',
'en_CX' => 'ingelesa (Christmas uhartea)',
'en_CY' => 'ingelesa (Zipre)',
+ 'en_CZ' => 'ingelesa (Txekia)',
'en_DE' => 'ingelesa (Alemania)',
'en_DK' => 'ingelesa (Danimarka)',
'en_DM' => 'ingelesa (Dominika)',
'en_ER' => 'ingelesa (Eritrea)',
+ 'en_ES' => 'ingelesa (Espainia)',
'en_FI' => 'ingelesa (Finlandia)',
'en_FJ' => 'ingelesa (Fiji)',
'en_FK' => 'ingelesa (Falklandak)',
'en_FM' => 'ingelesa (Mikronesia)',
+ 'en_FR' => 'ingelesa (Frantzia)',
'en_GB' => 'ingelesa (Erresuma Batua)',
'en_GD' => 'ingelesa (Grenada)',
'en_GG' => 'ingelesa (Guernesey)',
'en_GH' => 'ingelesa (Ghana)',
'en_GI' => 'ingelesa (Gibraltar)',
'en_GM' => 'ingelesa (Gambia)',
+ 'en_GS' => 'ingelesa (Hegoaldeko Georgia eta Hegoaldeko Sandwich uharteak)',
'en_GU' => 'ingelesa (Guam)',
'en_GY' => 'ingelesa (Guyana)',
'en_HK' => 'ingelesa (Hong Kong Txinako AEB)',
+ 'en_HU' => 'ingelesa (Hungaria)',
'en_ID' => 'ingelesa (Indonesia)',
'en_IE' => 'ingelesa (Irlanda)',
'en_IL' => 'ingelesa (Israel)',
'en_IM' => 'ingelesa (Man uhartea)',
'en_IN' => 'ingelesa (India)',
'en_IO' => 'ingelesa (Indiako Ozeanoko lurralde britainiarra)',
+ 'en_IT' => 'ingelesa (Italia)',
'en_JE' => 'ingelesa (Jersey)',
'en_JM' => 'ingelesa (Jamaika)',
'en_KE' => 'ingelesa (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'ingelesa (Norfolk uhartea)',
'en_NG' => 'ingelesa (Nigeria)',
'en_NL' => 'ingelesa (Herbehereak)',
+ 'en_NO' => 'ingelesa (Norvegia)',
'en_NR' => 'ingelesa (Nauru)',
'en_NU' => 'ingelesa (Niue)',
'en_NZ' => 'ingelesa (Zeelanda Berria)',
'en_PG' => 'ingelesa (Papua Ginea Berria)',
'en_PH' => 'ingelesa (Filipinak)',
'en_PK' => 'ingelesa (Pakistan)',
+ 'en_PL' => 'ingelesa (Polonia)',
'en_PN' => 'ingelesa (Pitcairn uharteak)',
'en_PR' => 'ingelesa (Puerto Rico)',
+ 'en_PT' => 'ingelesa (Portugal)',
'en_PW' => 'ingelesa (Palau)',
+ 'en_RO' => 'ingelesa (Errumania)',
'en_RW' => 'ingelesa (Ruanda)',
'en_SB' => 'ingelesa (Salomon Uharteak)',
'en_SC' => 'ingelesa (Seychelleak)',
@@ -184,6 +194,7 @@
'en_SG' => 'ingelesa (Singapur)',
'en_SH' => 'ingelesa (Santa Helena)',
'en_SI' => 'ingelesa (Eslovenia)',
+ 'en_SK' => 'ingelesa (Eslovakia)',
'en_SL' => 'ingelesa (Sierra Leona)',
'en_SS' => 'ingelesa (Hego Sudan)',
'en_SX' => 'ingelesa (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/fa.php b/src/Symfony/Component/Intl/Resources/data/locales/fa.php
index 339f3e6d51b09..339e0aef9143b 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/fa.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/fa.php
@@ -121,29 +121,35 @@
'en_CM' => 'انگلیسی (کامرون)',
'en_CX' => 'انگلیسی (جزیرهٔ کریسمس)',
'en_CY' => 'انگلیسی (قبرس)',
+ 'en_CZ' => 'انگلیسی (چک)',
'en_DE' => 'انگلیسی (آلمان)',
'en_DK' => 'انگلیسی (دانمارک)',
'en_DM' => 'انگلیسی (دومینیکا)',
'en_ER' => 'انگلیسی (اریتره)',
+ 'en_ES' => 'انگلیسی (اسپانیا)',
'en_FI' => 'انگلیسی (فنلاند)',
'en_FJ' => 'انگلیسی (فیجی)',
'en_FK' => 'انگلیسی (جزایر فالکلند)',
'en_FM' => 'انگلیسی (میکرونزی)',
+ 'en_FR' => 'انگلیسی (فرانسه)',
'en_GB' => 'انگلیسی (بریتانیا)',
'en_GD' => 'انگلیسی (گرنادا)',
'en_GG' => 'انگلیسی (گرنزی)',
'en_GH' => 'انگلیسی (غنا)',
'en_GI' => 'انگلیسی (جبلالطارق)',
'en_GM' => 'انگلیسی (گامبیا)',
+ 'en_GS' => 'انگلیسی (جورجیای جنوبی و جزایر ساندویچ جنوبی)',
'en_GU' => 'انگلیسی (گوام)',
'en_GY' => 'انگلیسی (گویان)',
'en_HK' => 'انگلیسی (هنگکنگ، منطقهٔ ویژهٔ اداری چین)',
+ 'en_HU' => 'انگلیسی (مجارستان)',
'en_ID' => 'انگلیسی (اندونزی)',
'en_IE' => 'انگلیسی (ایرلند)',
'en_IL' => 'انگلیسی (اسرائیل)',
'en_IM' => 'انگلیسی (جزیرهٔ من)',
'en_IN' => 'انگلیسی (هند)',
'en_IO' => 'انگلیسی (قلمرو بریتانیا در اقیانوس هند)',
+ 'en_IT' => 'انگلیسی (ایتالیا)',
'en_JE' => 'انگلیسی (جرزی)',
'en_JM' => 'انگلیسی (جامائیکا)',
'en_KE' => 'انگلیسی (کنیا)',
@@ -167,15 +173,19 @@
'en_NF' => 'انگلیسی (جزیرهٔ نورفولک)',
'en_NG' => 'انگلیسی (نیجریه)',
'en_NL' => 'انگلیسی (هلند)',
+ 'en_NO' => 'انگلیسی (نروژ)',
'en_NR' => 'انگلیسی (نائورو)',
'en_NU' => 'انگلیسی (نیوئه)',
'en_NZ' => 'انگلیسی (نیوزیلند)',
'en_PG' => 'انگلیسی (پاپوا گینهٔ نو)',
'en_PH' => 'انگلیسی (فیلیپین)',
'en_PK' => 'انگلیسی (پاکستان)',
+ 'en_PL' => 'انگلیسی (لهستان)',
'en_PN' => 'انگلیسی (جزایر پیتکرن)',
'en_PR' => 'انگلیسی (پورتوریکو)',
+ 'en_PT' => 'انگلیسی (پرتغال)',
'en_PW' => 'انگلیسی (پالائو)',
+ 'en_RO' => 'انگلیسی (رومانی)',
'en_RW' => 'انگلیسی (رواندا)',
'en_SB' => 'انگلیسی (جزایر سلیمان)',
'en_SC' => 'انگلیسی (سیشل)',
@@ -184,6 +194,7 @@
'en_SG' => 'انگلیسی (سنگاپور)',
'en_SH' => 'انگلیسی (سنت هلن)',
'en_SI' => 'انگلیسی (اسلوونی)',
+ 'en_SK' => 'انگلیسی (اسلواکی)',
'en_SL' => 'انگلیسی (سیرالئون)',
'en_SS' => 'انگلیسی (سودان جنوبی)',
'en_SX' => 'انگلیسی (سنت مارتن)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/fa_AF.php b/src/Symfony/Component/Intl/Resources/data/locales/fa_AF.php
index e36883e079732..b3f0d5329b103 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/fa_AF.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/fa_AF.php
@@ -33,6 +33,7 @@
'en_CH' => 'انگلیسی (سویس)',
'en_DK' => 'انگلیسی (دنمارک)',
'en_ER' => 'انگلیسی (اریتریا)',
+ 'en_ES' => 'انگلیسی (هسپانیه)',
'en_FI' => 'انگلیسی (فنلند)',
'en_FM' => 'انگلیسی (میکرونزیا)',
'en_GD' => 'انگلیسی (گرینادا)',
@@ -48,11 +49,16 @@
'en_MY' => 'انگلیسی (مالیزیا)',
'en_NG' => 'انگلیسی (نیجریا)',
'en_NL' => 'انگلیسی (هالند)',
+ 'en_NO' => 'انگلیسی (ناروی)',
'en_NZ' => 'انگلیسی (زیلاند جدید)',
'en_PG' => 'انگلیسی (پاپوا نیو گینیا)',
+ 'en_PL' => 'انگلیسی (پولند)',
+ 'en_PT' => 'انگلیسی (پرتگال)',
+ 'en_RO' => 'انگلیسی (رومانیا)',
'en_SE' => 'انگلیسی (سویدن)',
'en_SG' => 'انگلیسی (سینگاپور)',
'en_SI' => 'انگلیسی (سلونیا)',
+ 'en_SK' => 'انگلیسی (سلواکیا)',
'en_SL' => 'انگلیسی (سیرالیون)',
'en_UG' => 'انگلیسی (یوگاندا)',
'en_VC' => 'انگلیسی (سنت وینسنت و گرنادینها)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ff.php b/src/Symfony/Component/Intl/Resources/data/locales/ff.php
index e293b629555ba..bc2daf64702c3 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ff.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ff.php
@@ -71,14 +71,17 @@
'en_CK' => 'Engeleere (Duuɗe Kuuk)',
'en_CM' => 'Engeleere (Kameruun)',
'en_CY' => 'Engeleere (Siipar)',
+ 'en_CZ' => 'Engeleere (Ndenndaandi Cek)',
'en_DE' => 'Engeleere (Almaañ)',
'en_DK' => 'Engeleere (Danmark)',
'en_DM' => 'Engeleere (Dominika)',
'en_ER' => 'Engeleere (Eriteree)',
+ 'en_ES' => 'Engeleere (Espaañ)',
'en_FI' => 'Engeleere (Fenland)',
'en_FJ' => 'Engeleere (Fijji)',
'en_FK' => 'Engeleere (Duuɗe Falkland)',
'en_FM' => 'Engeleere (Mikoronesii)',
+ 'en_FR' => 'Engeleere (Farayse)',
'en_GB' => 'Engeleere (Laamateeri Rentundi)',
'en_GD' => 'Engeleere (Garnaad)',
'en_GH' => 'Engeleere (Ganaa)',
@@ -86,10 +89,12 @@
'en_GM' => 'Engeleere (Gammbi)',
'en_GU' => 'Engeleere (Guwam)',
'en_GY' => 'Engeleere (Giyaan)',
+ 'en_HU' => 'Engeleere (Onngiri)',
'en_ID' => 'Engeleere (Enndonesii)',
'en_IE' => 'Engeleere (Irlannda)',
'en_IL' => 'Engeleere (Israa’iila)',
'en_IN' => 'Engeleere (Enndo)',
+ 'en_IT' => 'Engeleere (Itali)',
'en_JM' => 'Engeleere (Jamayka)',
'en_KE' => 'Engeleere (Keñaa)',
'en_KI' => 'Engeleere (Kiribari)',
@@ -111,15 +116,19 @@
'en_NF' => 'Engeleere (Duuɗe Norfolk)',
'en_NG' => 'Engeleere (Nijeriyaa)',
'en_NL' => 'Engeleere (Nederlannda)',
+ 'en_NO' => 'Engeleere (Norwees)',
'en_NR' => 'Engeleere (Nawuru)',
'en_NU' => 'Engeleere (Niuwe)',
'en_NZ' => 'Engeleere (Nuwel Selannda)',
'en_PG' => 'Engeleere (Papuwaa Nuwel Gine)',
'en_PH' => 'Engeleere (Filipiin)',
'en_PK' => 'Engeleere (Pakistaan)',
+ 'en_PL' => 'Engeleere (Poloñ)',
'en_PN' => 'Engeleere (Pitkern)',
'en_PR' => 'Engeleere (Porto Rikoo)',
+ 'en_PT' => 'Engeleere (Purtugaal)',
'en_PW' => 'Engeleere (Palawu)',
+ 'en_RO' => 'Engeleere (Rumanii)',
'en_RW' => 'Engeleere (Ruwanndaa)',
'en_SB' => 'Engeleere (Duuɗe Solomon)',
'en_SC' => 'Engeleere (Seysel)',
@@ -128,6 +137,7 @@
'en_SG' => 'Engeleere (Sinngapuur)',
'en_SH' => 'Engeleere (Sent Helen)',
'en_SI' => 'Engeleere (Slowenii)',
+ 'en_SK' => 'Engeleere (Slowakii)',
'en_SL' => 'Engeleere (Seraa liyon)',
'en_SZ' => 'Engeleere (Swaasilannda)',
'en_TC' => 'Engeleere (Duuɗe Turke e Keikoos)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ff_Adlm.php b/src/Symfony/Component/Intl/Resources/data/locales/ff_Adlm.php
index df93ce158e14f..f781ba89e03f4 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ff_Adlm.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ff_Adlm.php
@@ -121,28 +121,34 @@
'en_CM' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤑𞤢𞤥𞤢𞤪𞤵𞥅𞤲)',
'en_CX' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤵𞤪𞤭𞥅𞤪𞤫 𞤑𞤭𞤪𞤧𞤭𞤥𞤢𞥄𞤧)',
'en_CY' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤑𞤵𞤦𞤪𞤵𞥅𞤧)',
+ 'en_CZ' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤕𞤫𞥅𞤳𞤭𞤴𞤢𞥄)',
'en_DE' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤔𞤫𞤪𞤥𞤢𞤲𞤭𞥅)',
'en_DK' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤁𞤢𞤲𞤵𞤥𞤢𞤪𞤳)',
'en_DM' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤁𞤮𞤥𞤭𞤲𞤭𞤳𞤢𞥄)',
'en_ER' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤉𞤪𞤭𞥅𞤼𞤫𞤪𞤫)',
+ 'en_ES' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤉𞤧𞤨𞤢𞤻𞤢𞥄)',
'en_FI' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤊𞤭𞤲𞤤𞤢𞤲𞤣)',
'en_FJ' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤊𞤭𞤶𞤭𞥅)',
'en_FK' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤕𞤵𞤪𞤭𞥅𞤶𞤫 𞤊𞤢𞤤𞤳𞤵𞤤𞤢𞤲𞤣)',
'en_FM' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤃𞤭𞤳𞤪𞤮𞤲𞤫𞥅𞤧𞤭𞤴𞤢)',
+ 'en_FR' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤊𞤢𞤪𞤢𞤲𞤧𞤭)',
'en_GB' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤁𞤫𞤲𞤼𞤢𞤤 𞤐𞤺𞤫𞤯𞤵𞥅𞤪𞤭)',
'en_GD' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤘𞤢𞤪𞤲𞤢𞤣𞤢𞥄)',
'en_GG' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤘𞤢𞤪𞤲𞤫𞤧𞤭𞥅)',
'en_GH' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤘𞤢𞤲𞤢)',
'en_GI' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤔𞤭𞤦𞤪𞤢𞤤𞤼𞤢𞥄)',
'en_GM' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤘𞤢𞤥𞤦𞤭𞤴𞤢)',
+ 'en_GS' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤐𞤢𞤲𞥆𞤢𞥄𞤲𞤺𞤫 𞤔𞤮𞤪𞤶𞤭𞤴𞤢 & 𞤕𞤵𞤪𞤭𞥅𞤶𞤫 𞤐𞤢𞤲𞥆𞤢𞥄𞤲𞤺𞤫 𞤅𞤢𞤲𞤣𞤵𞤱𞤭𞥅𞤷)',
'en_GU' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤘𞤵𞤱𞤢𞥄𞤥)',
'en_GY' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤘𞤢𞤴𞤢𞤲𞤢𞥄)',
'en_HK' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤖𞤂𞤀 𞤕𞤢𞤴𞤲𞤢 𞤫 𞤖𞤮𞤲𞤺 𞤑𞤮𞤲𞤺)',
+ 'en_HU' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤖𞤢𞤲𞤺𞤢𞤪𞤭𞤴𞤢𞥄)',
'en_ID' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤋𞤲𞤣𞤮𞤲𞤭𞥅𞤧𞤴𞤢)',
'en_IE' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤋𞤪𞤤𞤢𞤲𞤣)',
'en_IL' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤋𞤧𞤪𞤢𞥄𞤴𞤭𞥅𞤤)',
'en_IM' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤵𞤪𞤭𞥅𞤪𞤫 𞤃𞤫𞥅𞤲)',
'en_IN' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤋𞤲𞤣𞤭𞤴𞤢)',
+ 'en_IT' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤋𞤼𞤢𞤤𞤭𞥅)',
'en_JE' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤔𞤫𞤪𞤧𞤭𞥅)',
'en_JM' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤔𞤢𞤥𞤢𞤴𞤳𞤢𞥄)',
'en_KE' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤑𞤫𞤲𞤭𞤴𞤢𞥄)',
@@ -166,15 +172,19 @@
'en_NF' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤵𞤪𞤭𞥅𞤪𞤫 𞤐𞤮𞤪𞤬𞤮𞤤𞤳𞤵)',
'en_NG' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤐𞤢𞤶𞤫𞤪𞤭𞤴𞤢𞥄)',
'en_NL' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤖𞤮𞤤𞤢𞤲𞤣𞤭𞤴𞤢𞥄)',
+ 'en_NO' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤐𞤮𞤪𞤺𞤫𞤴𞤢𞥄)',
'en_NR' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤐𞤢𞤱𞤪𞤵)',
'en_NU' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤐𞤵𞥅𞤱𞤭)',
'en_NZ' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤐𞤫𞤱 𞤟𞤫𞤤𞤢𞤲𞤣)',
'en_PG' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤆𞤢𞤨𞤵𞤱𞤢 𞤘𞤭𞤲𞤫 𞤖𞤫𞤧𞤮)',
'en_PH' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤊𞤭𞤤𞤭𞤨𞤭𞥅𞤲)',
'en_PK' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤆𞤢𞤳𞤭𞤧𞤼𞤢𞥄𞤲)',
+ 'en_PL' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤆𞤮𞤤𞤢𞤲𞤣)',
'en_PN' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤕𞤵𞤪𞤭𞥅𞤶𞤫 𞤆𞤭𞤼𞤳𞤭𞥅𞤪𞤲𞤵)',
'en_PR' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤆𞤮𞤪𞤼𞤮 𞤈𞤭𞤳𞤮𞥅)',
+ 'en_PT' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤆𞤮𞥅𞤪𞤼𞤵𞤺𞤢𞥄𞤤)',
'en_PW' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤆𞤢𞤤𞤢𞤱)',
+ 'en_RO' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤈𞤵𞤥𞤢𞥄𞤲𞤭𞤴𞤢)',
'en_RW' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤈𞤵𞤱𞤢𞤲𞤣𞤢𞥄)',
'en_SB' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤕𞤵𞤪𞤭𞥅𞤶𞤫 𞤅𞤵𞤤𞤢𞤴𞤥𞤢𞥄𞤲)',
'en_SC' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤫𞤴𞤭𞤧𞤫𞤤)',
@@ -183,6 +193,7 @@
'en_SG' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤭𞤲𞤺𞤢𞤨𞤵𞥅𞤪)',
'en_SH' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤫𞤲-𞤖𞤫𞤤𞤫𞤲𞤢𞥄)',
'en_SI' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤵𞤤𞤮𞤾𞤫𞤲𞤭𞤴𞤢𞥄)',
+ 'en_SK' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤵𞤤𞤮𞤾𞤢𞥄𞤳𞤭𞤴𞤢)',
'en_SL' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤢𞤪𞤢𞤤𞤮𞤲)',
'en_SS' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤵𞤣𞤢𞥄𞤲 𞤂𞤫𞤧𞤤𞤫𞤴𞤪𞤭)',
'en_SX' => '𞤉𞤲𞤺𞤭𞤤𞤫𞥅𞤪𞤫 (𞤅𞤫𞤲𞤼𞤵 𞤃𞤢𞥄𞤪𞤼𞤫𞤲)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/fi.php b/src/Symfony/Component/Intl/Resources/data/locales/fi.php
index 335dea38d3d16..87edf319575c4 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/fi.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/fi.php
@@ -121,29 +121,35 @@
'en_CM' => 'englanti (Kamerun)',
'en_CX' => 'englanti (Joulusaari)',
'en_CY' => 'englanti (Kypros)',
+ 'en_CZ' => 'englanti (Tšekki)',
'en_DE' => 'englanti (Saksa)',
'en_DK' => 'englanti (Tanska)',
'en_DM' => 'englanti (Dominica)',
'en_ER' => 'englanti (Eritrea)',
+ 'en_ES' => 'englanti (Espanja)',
'en_FI' => 'englanti (Suomi)',
'en_FJ' => 'englanti (Fidži)',
'en_FK' => 'englanti (Falklandinsaaret)',
'en_FM' => 'englanti (Mikronesia)',
+ 'en_FR' => 'englanti (Ranska)',
'en_GB' => 'englanti (Iso-Britannia)',
'en_GD' => 'englanti (Grenada)',
'en_GG' => 'englanti (Guernsey)',
'en_GH' => 'englanti (Ghana)',
'en_GI' => 'englanti (Gibraltar)',
'en_GM' => 'englanti (Gambia)',
+ 'en_GS' => 'englanti (Etelä-Georgia ja Eteläiset Sandwichinsaaret)',
'en_GU' => 'englanti (Guam)',
'en_GY' => 'englanti (Guyana)',
'en_HK' => 'englanti (Hongkong – Kiinan erityishallintoalue)',
+ 'en_HU' => 'englanti (Unkari)',
'en_ID' => 'englanti (Indonesia)',
'en_IE' => 'englanti (Irlanti)',
'en_IL' => 'englanti (Israel)',
'en_IM' => 'englanti (Mansaari)',
'en_IN' => 'englanti (Intia)',
'en_IO' => 'englanti (Brittiläinen Intian valtameren alue)',
+ 'en_IT' => 'englanti (Italia)',
'en_JE' => 'englanti (Jersey)',
'en_JM' => 'englanti (Jamaika)',
'en_KE' => 'englanti (Kenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'englanti (Norfolkinsaari)',
'en_NG' => 'englanti (Nigeria)',
'en_NL' => 'englanti (Alankomaat)',
+ 'en_NO' => 'englanti (Norja)',
'en_NR' => 'englanti (Nauru)',
'en_NU' => 'englanti (Niue)',
'en_NZ' => 'englanti (Uusi-Seelanti)',
'en_PG' => 'englanti (Papua-Uusi-Guinea)',
'en_PH' => 'englanti (Filippiinit)',
'en_PK' => 'englanti (Pakistan)',
+ 'en_PL' => 'englanti (Puola)',
'en_PN' => 'englanti (Pitcairn)',
'en_PR' => 'englanti (Puerto Rico)',
+ 'en_PT' => 'englanti (Portugali)',
'en_PW' => 'englanti (Palau)',
+ 'en_RO' => 'englanti (Romania)',
'en_RW' => 'englanti (Ruanda)',
'en_SB' => 'englanti (Salomonsaaret)',
'en_SC' => 'englanti (Seychellit)',
@@ -184,6 +194,7 @@
'en_SG' => 'englanti (Singapore)',
'en_SH' => 'englanti (Saint Helena)',
'en_SI' => 'englanti (Slovenia)',
+ 'en_SK' => 'englanti (Slovakia)',
'en_SL' => 'englanti (Sierra Leone)',
'en_SS' => 'englanti (Etelä-Sudan)',
'en_SX' => 'englanti (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/fo.php b/src/Symfony/Component/Intl/Resources/data/locales/fo.php
index 03274cf697a83..46296ee0138b5 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/fo.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/fo.php
@@ -121,29 +121,35 @@
'en_CM' => 'enskt (Kamerun)',
'en_CX' => 'enskt (Jólaoyggjin)',
'en_CY' => 'enskt (Kýpros)',
+ 'en_CZ' => 'enskt (Kekkia)',
'en_DE' => 'enskt (Týskland)',
'en_DK' => 'enskt (Danmark)',
'en_DM' => 'enskt (Dominika)',
'en_ER' => 'enskt (Eritrea)',
+ 'en_ES' => 'enskt (Spania)',
'en_FI' => 'enskt (Finnland)',
'en_FJ' => 'enskt (Fiji)',
'en_FK' => 'enskt (Falklandsoyggjar)',
'en_FM' => 'enskt (Mikronesiasamveldið)',
+ 'en_FR' => 'enskt (Frakland)',
'en_GB' => 'enskt (Stórabretland)',
'en_GD' => 'enskt (Grenada)',
'en_GG' => 'enskt (Guernsey)',
'en_GH' => 'enskt (Gana)',
'en_GI' => 'enskt (Gibraltar)',
'en_GM' => 'enskt (Gambia)',
+ 'en_GS' => 'enskt (Suðurgeorgia og Suðursandwichoyggjar)',
'en_GU' => 'enskt (Guam)',
'en_GY' => 'enskt (Gujana)',
'en_HK' => 'enskt (Hong Kong SAR Kina)',
+ 'en_HU' => 'enskt (Ungarn)',
'en_ID' => 'enskt (Indonesia)',
'en_IE' => 'enskt (Írland)',
'en_IL' => 'enskt (Ísrael)',
'en_IM' => 'enskt (Isle of Man)',
'en_IN' => 'enskt (India)',
'en_IO' => 'enskt (Stóra Bretlands Indiahavoyggjar)',
+ 'en_IT' => 'enskt (Italia)',
'en_JE' => 'enskt (Jersey)',
'en_JM' => 'enskt (Jamaika)',
'en_KE' => 'enskt (Kenja)',
@@ -167,15 +173,19 @@
'en_NF' => 'enskt (Norfolksoyggj)',
'en_NG' => 'enskt (Nigeria)',
'en_NL' => 'enskt (Niðurlond)',
+ 'en_NO' => 'enskt (Noreg)',
'en_NR' => 'enskt (Nauru)',
'en_NU' => 'enskt (Niue)',
'en_NZ' => 'enskt (Nýsæland)',
'en_PG' => 'enskt (Papua Nýguinea)',
'en_PH' => 'enskt (Filipsoyggjar)',
'en_PK' => 'enskt (Pakistan)',
+ 'en_PL' => 'enskt (Pólland)',
'en_PN' => 'enskt (Pitcairnoyggjar)',
'en_PR' => 'enskt (Puerto Riko)',
+ 'en_PT' => 'enskt (Portugal)',
'en_PW' => 'enskt (Palau)',
+ 'en_RO' => 'enskt (Rumenia)',
'en_RW' => 'enskt (Ruanda)',
'en_SB' => 'enskt (Salomonoyggjar)',
'en_SC' => 'enskt (Seyskelloyggjar)',
@@ -184,6 +194,7 @@
'en_SG' => 'enskt (Singapor)',
'en_SH' => 'enskt (St. Helena)',
'en_SI' => 'enskt (Slovenia)',
+ 'en_SK' => 'enskt (Slovakia)',
'en_SL' => 'enskt (Sierra Leona)',
'en_SS' => 'enskt (Suðursudan)',
'en_SX' => 'enskt (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/fr.php b/src/Symfony/Component/Intl/Resources/data/locales/fr.php
index 4442ae3ed0843..3fcf77327defc 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/fr.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/fr.php
@@ -121,29 +121,35 @@
'en_CM' => 'anglais (Cameroun)',
'en_CX' => 'anglais (Île Christmas)',
'en_CY' => 'anglais (Chypre)',
+ 'en_CZ' => 'anglais (Tchéquie)',
'en_DE' => 'anglais (Allemagne)',
'en_DK' => 'anglais (Danemark)',
'en_DM' => 'anglais (Dominique)',
'en_ER' => 'anglais (Érythrée)',
+ 'en_ES' => 'anglais (Espagne)',
'en_FI' => 'anglais (Finlande)',
'en_FJ' => 'anglais (Fidji)',
'en_FK' => 'anglais (Îles Malouines)',
'en_FM' => 'anglais (Micronésie)',
+ 'en_FR' => 'anglais (France)',
'en_GB' => 'anglais (Royaume-Uni)',
'en_GD' => 'anglais (Grenade)',
'en_GG' => 'anglais (Guernesey)',
'en_GH' => 'anglais (Ghana)',
'en_GI' => 'anglais (Gibraltar)',
'en_GM' => 'anglais (Gambie)',
+ 'en_GS' => 'anglais (Géorgie du Sud-et-les Îles Sandwich du Sud)',
'en_GU' => 'anglais (Guam)',
'en_GY' => 'anglais (Guyana)',
'en_HK' => 'anglais (R.A.S. chinoise de Hong Kong)',
+ 'en_HU' => 'anglais (Hongrie)',
'en_ID' => 'anglais (Indonésie)',
'en_IE' => 'anglais (Irlande)',
'en_IL' => 'anglais (Israël)',
'en_IM' => 'anglais (Île de Man)',
'en_IN' => 'anglais (Inde)',
'en_IO' => 'anglais (Territoire britannique de l’océan Indien)',
+ 'en_IT' => 'anglais (Italie)',
'en_JE' => 'anglais (Jersey)',
'en_JM' => 'anglais (Jamaïque)',
'en_KE' => 'anglais (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'anglais (Île Norfolk)',
'en_NG' => 'anglais (Nigeria)',
'en_NL' => 'anglais (Pays-Bas)',
+ 'en_NO' => 'anglais (Norvège)',
'en_NR' => 'anglais (Nauru)',
'en_NU' => 'anglais (Niue)',
'en_NZ' => 'anglais (Nouvelle-Zélande)',
'en_PG' => 'anglais (Papouasie-Nouvelle-Guinée)',
'en_PH' => 'anglais (Philippines)',
'en_PK' => 'anglais (Pakistan)',
+ 'en_PL' => 'anglais (Pologne)',
'en_PN' => 'anglais (Îles Pitcairn)',
'en_PR' => 'anglais (Porto Rico)',
+ 'en_PT' => 'anglais (Portugal)',
'en_PW' => 'anglais (Palaos)',
+ 'en_RO' => 'anglais (Roumanie)',
'en_RW' => 'anglais (Rwanda)',
'en_SB' => 'anglais (Îles Salomon)',
'en_SC' => 'anglais (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'anglais (Singapour)',
'en_SH' => 'anglais (Sainte-Hélène)',
'en_SI' => 'anglais (Slovénie)',
+ 'en_SK' => 'anglais (Slovaquie)',
'en_SL' => 'anglais (Sierra Leone)',
'en_SS' => 'anglais (Soudan du Sud)',
'en_SX' => 'anglais (Saint-Martin [partie néerlandaise])',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/fr_BE.php b/src/Symfony/Component/Intl/Resources/data/locales/fr_BE.php
index 3908ce29760c2..089c0ef10a00f 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/fr_BE.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/fr_BE.php
@@ -2,6 +2,7 @@
return [
'Names' => [
+ 'en_GS' => 'anglais (Îles Géorgie du Sud et Sandwich du Sud)',
'gu' => 'gujarati',
'gu_IN' => 'gujarati (Inde)',
],
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/fy.php b/src/Symfony/Component/Intl/Resources/data/locales/fy.php
index e6e7cb12ce076..51c66b10e6c2b 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/fy.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/fy.php
@@ -121,28 +121,34 @@
'en_CM' => 'Ingelsk (Kameroen)',
'en_CX' => 'Ingelsk (Krysteilan)',
'en_CY' => 'Ingelsk (Syprus)',
+ 'en_CZ' => 'Ingelsk (Tsjechje)',
'en_DE' => 'Ingelsk (Dútslân)',
'en_DK' => 'Ingelsk (Denemarken)',
'en_DM' => 'Ingelsk (Dominika)',
'en_ER' => 'Ingelsk (Eritrea)',
+ 'en_ES' => 'Ingelsk (Spanje)',
'en_FI' => 'Ingelsk (Finlân)',
'en_FJ' => 'Ingelsk (Fiji)',
'en_FK' => 'Ingelsk (Falklâneilannen)',
'en_FM' => 'Ingelsk (Micronesië)',
+ 'en_FR' => 'Ingelsk (Frankrijk)',
'en_GB' => 'Ingelsk (Verenigd Koninkrijk)',
'en_GD' => 'Ingelsk (Grenada)',
'en_GG' => 'Ingelsk (Guernsey)',
'en_GH' => 'Ingelsk (Ghana)',
'en_GI' => 'Ingelsk (Gibraltar)',
'en_GM' => 'Ingelsk (Gambia)',
+ 'en_GS' => 'Ingelsk (Sûd-Georgia en Sûdlike Sandwicheilannen)',
'en_GU' => 'Ingelsk (Guam)',
'en_GY' => 'Ingelsk (Guyana)',
'en_HK' => 'Ingelsk (Hongkong SAR van Sina)',
+ 'en_HU' => 'Ingelsk (Hongarije)',
'en_ID' => 'Ingelsk (Yndonesië)',
'en_IE' => 'Ingelsk (Ierlân)',
'en_IL' => 'Ingelsk (Israël)',
'en_IM' => 'Ingelsk (Isle of Man)',
'en_IN' => 'Ingelsk (India)',
+ 'en_IT' => 'Ingelsk (Italië)',
'en_JE' => 'Ingelsk (Jersey)',
'en_JM' => 'Ingelsk (Jamaica)',
'en_KE' => 'Ingelsk (Kenia)',
@@ -166,15 +172,19 @@
'en_NF' => 'Ingelsk (Norfolkeilân)',
'en_NG' => 'Ingelsk (Nigeria)',
'en_NL' => 'Ingelsk (Nederlân)',
+ 'en_NO' => 'Ingelsk (Noarwegen)',
'en_NR' => 'Ingelsk (Nauru)',
'en_NU' => 'Ingelsk (Niue)',
'en_NZ' => 'Ingelsk (Nij-Seelân)',
'en_PG' => 'Ingelsk (Papoea-Nij-Guinea)',
'en_PH' => 'Ingelsk (Filipijnen)',
'en_PK' => 'Ingelsk (Pakistan)',
+ 'en_PL' => 'Ingelsk (Polen)',
'en_PN' => 'Ingelsk (Pitcairneilannen)',
'en_PR' => 'Ingelsk (Puerto Rico)',
+ 'en_PT' => 'Ingelsk (Portugal)',
'en_PW' => 'Ingelsk (Palau)',
+ 'en_RO' => 'Ingelsk (Roemenië)',
'en_RW' => 'Ingelsk (Rwanda)',
'en_SB' => 'Ingelsk (Salomonseilannen)',
'en_SC' => 'Ingelsk (Seychellen)',
@@ -183,6 +193,7 @@
'en_SG' => 'Ingelsk (Singapore)',
'en_SH' => 'Ingelsk (Sint-Helena)',
'en_SI' => 'Ingelsk (Slovenië)',
+ 'en_SK' => 'Ingelsk (Slowakije)',
'en_SL' => 'Ingelsk (Sierra Leone)',
'en_SS' => 'Ingelsk (Sûd-Soedan)',
'en_SX' => 'Ingelsk (Sint-Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ga.php b/src/Symfony/Component/Intl/Resources/data/locales/ga.php
index c5420242efbea..bbf1b4ea482cf 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ga.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ga.php
@@ -121,29 +121,35 @@
'en_CM' => 'Béarla (Camarún)',
'en_CX' => 'Béarla (Oileán na Nollag)',
'en_CY' => 'Béarla (an Chipir)',
+ 'en_CZ' => 'Béarla (an tSeicia)',
'en_DE' => 'Béarla (an Ghearmáin)',
'en_DK' => 'Béarla (an Danmhairg)',
'en_DM' => 'Béarla (Doiminice)',
'en_ER' => 'Béarla (an Eiritré)',
+ 'en_ES' => 'Béarla (an Spáinn)',
'en_FI' => 'Béarla (an Fhionlainn)',
'en_FJ' => 'Béarla (Fidsí)',
'en_FK' => 'Béarla (Oileáin Fháclainne)',
'en_FM' => 'Béarla (an Mhicrinéis)',
+ 'en_FR' => 'Béarla (an Fhrainc)',
'en_GB' => 'Béarla (an Ríocht Aontaithe)',
'en_GD' => 'Béarla (Greanáda)',
'en_GG' => 'Béarla (Geansaí)',
'en_GH' => 'Béarla (Gána)',
'en_GI' => 'Béarla (Giobráltar)',
'en_GM' => 'Béarla (An Ghaimbia)',
+ 'en_GS' => 'Béarla (An tSeoirsia Theas agus Oileáin Sandwich Theas)',
'en_GU' => 'Béarla (Guam)',
'en_GY' => 'Béarla (An Ghuáin)',
'en_HK' => 'Béarla (Sainréigiún Riaracháin Hong Cong, Daonphoblacht na Síne)',
+ 'en_HU' => 'Béarla (an Ungáir)',
'en_ID' => 'Béarla (an Indinéis)',
'en_IE' => 'Béarla (Éire)',
'en_IL' => 'Béarla (Iosrael)',
'en_IM' => 'Béarla (Oileán Mhanann)',
'en_IN' => 'Béarla (an India)',
'en_IO' => 'Béarla (Críoch Aigéan Indiach na Breataine)',
+ 'en_IT' => 'Béarla (an Iodáil)',
'en_JE' => 'Béarla (Geirsí)',
'en_JM' => 'Béarla (Iamáice)',
'en_KE' => 'Béarla (an Chéinia)',
@@ -167,15 +173,19 @@
'en_NF' => 'Béarla (Oileán Norfolk)',
'en_NG' => 'Béarla (An Nigéir)',
'en_NL' => 'Béarla (an Ísiltír)',
+ 'en_NO' => 'Béarla (an Iorua)',
'en_NR' => 'Béarla (Nárú)',
'en_NU' => 'Béarla (Niue)',
'en_NZ' => 'Béarla (an Nua-Shéalainn)',
'en_PG' => 'Béarla (Nua-Ghuine Phapua)',
'en_PH' => 'Béarla (Na hOileáin Fhilipíneacha)',
'en_PK' => 'Béarla (an Phacastáin)',
+ 'en_PL' => 'Béarla (an Pholainn)',
'en_PN' => 'Béarla (Oileáin Pitcairn)',
'en_PR' => 'Béarla (Pórtó Ríce)',
+ 'en_PT' => 'Béarla (an Phortaingéil)',
'en_PW' => 'Béarla (Oileáin Palau)',
+ 'en_RO' => 'Béarla (an Rómáin)',
'en_RW' => 'Béarla (Ruanda)',
'en_SB' => 'Béarla (Oileáin Sholaimh)',
'en_SC' => 'Béarla (na Séiséil)',
@@ -184,6 +194,7 @@
'en_SG' => 'Béarla (Singeapór)',
'en_SH' => 'Béarla (San Héilin)',
'en_SI' => 'Béarla (an tSlóivéin)',
+ 'en_SK' => 'Béarla (an tSlóvaic)',
'en_SL' => 'Béarla (Siarra Leon)',
'en_SS' => 'Béarla (an tSúdáin Theas)',
'en_SX' => 'Béarla (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/gd.php b/src/Symfony/Component/Intl/Resources/data/locales/gd.php
index 5e463796c2b93..af5ddafb21e41 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/gd.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/gd.php
@@ -121,29 +121,35 @@
'en_CM' => 'Beurla (Camarun)',
'en_CX' => 'Beurla (Eilean na Nollaig)',
'en_CY' => 'Beurla (Cìopras)',
+ 'en_CZ' => 'Beurla (An t-Seic)',
'en_DE' => 'Beurla (A’ Ghearmailt)',
'en_DK' => 'Beurla (An Danmhairg)',
'en_DM' => 'Beurla (Doiminicea)',
'en_ER' => 'Beurla (Eartra)',
+ 'en_ES' => 'Beurla (An Spàinnt)',
'en_FI' => 'Beurla (An Fhionnlann)',
'en_FJ' => 'Beurla (Fìdi)',
'en_FK' => 'Beurla (Na h-Eileanan Fàclannach)',
'en_FM' => 'Beurla (Na Meanbh-eileanan)',
+ 'en_FR' => 'Beurla (An Fhraing)',
'en_GB' => 'Beurla (An Rìoghachd Aonaichte)',
'en_GD' => 'Beurla (Greanàda)',
'en_GG' => 'Beurla (Geàrnsaidh)',
'en_GH' => 'Beurla (Gàna)',
'en_GI' => 'Beurla (Diobraltar)',
'en_GM' => 'Beurla (A’ Ghaimbia)',
+ 'en_GS' => 'Beurla (Seòirsea a Deas is na h-Eileanan Sandwich a Deas)',
'en_GU' => 'Beurla (Guam)',
'en_GY' => 'Beurla (Guidheàna)',
'en_HK' => 'Beurla (Hong Kong SAR na Sìne)',
+ 'en_HU' => 'Beurla (An Ungair)',
'en_ID' => 'Beurla (Na h-Innd-innse)',
'en_IE' => 'Beurla (Èirinn)',
'en_IL' => 'Beurla (Iosrael)',
'en_IM' => 'Beurla (Eilean Mhanainn)',
'en_IN' => 'Beurla (Na h-Innseachan)',
'en_IO' => 'Beurla (Ranntair Breatannach Cuan nan Innseachan)',
+ 'en_IT' => 'Beurla (An Eadailt)',
'en_JE' => 'Beurla (Deàrsaidh)',
'en_JM' => 'Beurla (Diameuga)',
'en_KE' => 'Beurla (Ceinia)',
@@ -167,15 +173,19 @@
'en_NF' => 'Beurla (Eilean Norfolk)',
'en_NG' => 'Beurla (Nigèiria)',
'en_NL' => 'Beurla (Na Tìrean Ìsle)',
+ 'en_NO' => 'Beurla (Nirribhidh)',
'en_NR' => 'Beurla (Nabhru)',
'en_NU' => 'Beurla (Niue)',
'en_NZ' => 'Beurla (Sealainn Nuadh)',
'en_PG' => 'Beurla (Gini Nuadh Phaputhach)',
'en_PH' => 'Beurla (Na h-Eileanan Filipineach)',
'en_PK' => 'Beurla (Pagastàn)',
+ 'en_PL' => 'Beurla (A’ Phòlainn)',
'en_PN' => 'Beurla (Eileanan Pheit a’ Chàirn)',
'en_PR' => 'Beurla (Porto Rìceo)',
+ 'en_PT' => 'Beurla (A’ Phortagail)',
'en_PW' => 'Beurla (Palabh)',
+ 'en_RO' => 'Beurla (Romàinia)',
'en_RW' => 'Beurla (Rubhanda)',
'en_SB' => 'Beurla (Eileanan Sholaimh)',
'en_SC' => 'Beurla (Na h-Eileanan Sheiseall)',
@@ -184,6 +194,7 @@
'en_SG' => 'Beurla (Singeapòr)',
'en_SH' => 'Beurla (Eilean Naomh Eilidh)',
'en_SI' => 'Beurla (An t-Slòbhain)',
+ 'en_SK' => 'Beurla (An t-Slòbhac)',
'en_SL' => 'Beurla (Siarra Leòmhann)',
'en_SS' => 'Beurla (Sudàn a Deas)',
'en_SX' => 'Beurla (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/gl.php b/src/Symfony/Component/Intl/Resources/data/locales/gl.php
index aa010298e4359..456dc622e3fa2 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/gl.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/gl.php
@@ -121,29 +121,35 @@
'en_CM' => 'inglés (Camerún)',
'en_CX' => 'inglés (Illa Christmas)',
'en_CY' => 'inglés (Chipre)',
+ 'en_CZ' => 'inglés (Chequia)',
'en_DE' => 'inglés (Alemaña)',
'en_DK' => 'inglés (Dinamarca)',
'en_DM' => 'inglés (Dominica)',
'en_ER' => 'inglés (Eritrea)',
+ 'en_ES' => 'inglés (España)',
'en_FI' => 'inglés (Finlandia)',
'en_FJ' => 'inglés (Fixi)',
'en_FK' => 'inglés (Illas Malvinas)',
'en_FM' => 'inglés (Micronesia)',
+ 'en_FR' => 'inglés (Francia)',
'en_GB' => 'inglés (Reino Unido)',
'en_GD' => 'inglés (Granada)',
'en_GG' => 'inglés (Guernsey)',
'en_GH' => 'inglés (Ghana)',
'en_GI' => 'inglés (Xibraltar)',
'en_GM' => 'inglés (Gambia)',
+ 'en_GS' => 'inglés (Illas Xeorxia do Sur e Sandwich do Sur)',
'en_GU' => 'inglés (Guam)',
'en_GY' => 'inglés (Güiana)',
'en_HK' => 'inglés (Hong Kong RAE da China)',
+ 'en_HU' => 'inglés (Hungría)',
'en_ID' => 'inglés (Indonesia)',
'en_IE' => 'inglés (Irlanda)',
'en_IL' => 'inglés (Israel)',
'en_IM' => 'inglés (Illa de Man)',
'en_IN' => 'inglés (India)',
'en_IO' => 'inglés (Territorio Británico do Océano Índico)',
+ 'en_IT' => 'inglés (Italia)',
'en_JE' => 'inglés (Jersey)',
'en_JM' => 'inglés (Xamaica)',
'en_KE' => 'inglés (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'inglés (Illa Norfolk)',
'en_NG' => 'inglés (Nixeria)',
'en_NL' => 'inglés (Países Baixos)',
+ 'en_NO' => 'inglés (Noruega)',
'en_NR' => 'inglés (Nauru)',
'en_NU' => 'inglés (Niue)',
'en_NZ' => 'inglés (Nova Zelandia)',
'en_PG' => 'inglés (Papúa-Nova Guinea)',
'en_PH' => 'inglés (Filipinas)',
'en_PK' => 'inglés (Paquistán)',
+ 'en_PL' => 'inglés (Polonia)',
'en_PN' => 'inglés (Illas Pitcairn)',
'en_PR' => 'inglés (Porto Rico)',
+ 'en_PT' => 'inglés (Portugal)',
'en_PW' => 'inglés (Palau)',
+ 'en_RO' => 'inglés (Romanía)',
'en_RW' => 'inglés (Ruanda)',
'en_SB' => 'inglés (Illas Salomón)',
'en_SC' => 'inglés (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'inglés (Singapur)',
'en_SH' => 'inglés (Santa Helena)',
'en_SI' => 'inglés (Eslovenia)',
+ 'en_SK' => 'inglés (Eslovaquia)',
'en_SL' => 'inglés (Serra Leoa)',
'en_SS' => 'inglés (Sudán do Sur)',
'en_SX' => 'inglés (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/gu.php b/src/Symfony/Component/Intl/Resources/data/locales/gu.php
index 2735a315fe2a7..31f440762a957 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/gu.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/gu.php
@@ -121,29 +121,35 @@
'en_CM' => 'અંગ્રેજી (કૅમરૂન)',
'en_CX' => 'અંગ્રેજી (ક્રિસમસ આઇલેન્ડ)',
'en_CY' => 'અંગ્રેજી (સાયપ્રસ)',
+ 'en_CZ' => 'અંગ્રેજી (ચેકીયા)',
'en_DE' => 'અંગ્રેજી (જર્મની)',
'en_DK' => 'અંગ્રેજી (ડેનમાર્ક)',
'en_DM' => 'અંગ્રેજી (ડોમિનિકા)',
'en_ER' => 'અંગ્રેજી (એરિટ્રિયા)',
+ 'en_ES' => 'અંગ્રેજી (સ્પેન)',
'en_FI' => 'અંગ્રેજી (ફિનલેન્ડ)',
'en_FJ' => 'અંગ્રેજી (ફીજી)',
'en_FK' => 'અંગ્રેજી (ફૉકલેન્ડ આઇલેન્ડ્સ)',
'en_FM' => 'અંગ્રેજી (માઇક્રોનેશિયા)',
+ 'en_FR' => 'અંગ્રેજી (ફ્રાંસ)',
'en_GB' => 'અંગ્રેજી (યુનાઇટેડ કિંગડમ)',
'en_GD' => 'અંગ્રેજી (ગ્રેનેડા)',
'en_GG' => 'અંગ્રેજી (ગ્વેર્નસે)',
'en_GH' => 'અંગ્રેજી (ઘાના)',
'en_GI' => 'અંગ્રેજી (જીબ્રાલ્ટર)',
'en_GM' => 'અંગ્રેજી (ગેમ્બિયા)',
+ 'en_GS' => 'અંગ્રેજી (દક્ષિણ જ્યોર્જિયા અને દક્ષિણ સેન્ડવિચ આઇલેન્ડ્સ)',
'en_GU' => 'અંગ્રેજી (ગ્વામ)',
'en_GY' => 'અંગ્રેજી (ગયાના)',
'en_HK' => 'અંગ્રેજી (હોંગકોંગ SAR ચીન)',
+ 'en_HU' => 'અંગ્રેજી (હંગેરી)',
'en_ID' => 'અંગ્રેજી (ઇન્ડોનેશિયા)',
'en_IE' => 'અંગ્રેજી (આયર્લેન્ડ)',
'en_IL' => 'અંગ્રેજી (ઇઝરાઇલ)',
'en_IM' => 'અંગ્રેજી (આઇલ ઑફ મેન)',
'en_IN' => 'અંગ્રેજી (ભારત)',
'en_IO' => 'અંગ્રેજી (બ્રિટિશ ઇન્ડિયન ઓશન ટેરિટરી)',
+ 'en_IT' => 'અંગ્રેજી (ઇટાલી)',
'en_JE' => 'અંગ્રેજી (જર્સી)',
'en_JM' => 'અંગ્રેજી (જમૈકા)',
'en_KE' => 'અંગ્રેજી (કેન્યા)',
@@ -167,15 +173,19 @@
'en_NF' => 'અંગ્રેજી (નોરફોક આઇલેન્ડ્સ)',
'en_NG' => 'અંગ્રેજી (નાઇજેરિયા)',
'en_NL' => 'અંગ્રેજી (નેધરલેન્ડ્સ)',
+ 'en_NO' => 'અંગ્રેજી (નૉર્વે)',
'en_NR' => 'અંગ્રેજી (નૌરુ)',
'en_NU' => 'અંગ્રેજી (નીયુ)',
'en_NZ' => 'અંગ્રેજી (ન્યુઝીલેન્ડ)',
'en_PG' => 'અંગ્રેજી (પાપુઆ ન્યૂ ગિની)',
'en_PH' => 'અંગ્રેજી (ફિલિપિન્સ)',
'en_PK' => 'અંગ્રેજી (પાકિસ્તાન)',
+ 'en_PL' => 'અંગ્રેજી (પોલેંડ)',
'en_PN' => 'અંગ્રેજી (પીટકૈર્ન આઇલેન્ડ્સ)',
'en_PR' => 'અંગ્રેજી (પ્યુઅર્ટો રિકો)',
+ 'en_PT' => 'અંગ્રેજી (પોર્ટુગલ)',
'en_PW' => 'અંગ્રેજી (પલાઉ)',
+ 'en_RO' => 'અંગ્રેજી (રોમાનિયા)',
'en_RW' => 'અંગ્રેજી (રવાંડા)',
'en_SB' => 'અંગ્રેજી (સોલોમન આઇલેન્ડ્સ)',
'en_SC' => 'અંગ્રેજી (સેશેલ્સ)',
@@ -184,6 +194,7 @@
'en_SG' => 'અંગ્રેજી (સિંગાપુર)',
'en_SH' => 'અંગ્રેજી (સેંટ હેલેના)',
'en_SI' => 'અંગ્રેજી (સ્લોવેનિયા)',
+ 'en_SK' => 'અંગ્રેજી (સ્લોવેકિયા)',
'en_SL' => 'અંગ્રેજી (સીએરા લેઓન)',
'en_SS' => 'અંગ્રેજી (દક્ષિણ સુદાન)',
'en_SX' => 'અંગ્રેજી (સિંટ માર્ટેન)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ha.php b/src/Symfony/Component/Intl/Resources/data/locales/ha.php
index f0d2c38044de0..6ace7106d9888 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ha.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ha.php
@@ -121,29 +121,35 @@
'en_CM' => 'Turanci (Kamaru)',
'en_CX' => 'Turanci (Tsibirin Kirsmati)',
'en_CY' => 'Turanci (Saifurus)',
+ 'en_CZ' => 'Turanci (Czechia)',
'en_DE' => 'Turanci (Jamus)',
'en_DK' => 'Turanci (Danmark)',
'en_DM' => 'Turanci (Dominika)',
'en_ER' => 'Turanci (Eritireya)',
+ 'en_ES' => 'Turanci (Sipen)',
'en_FI' => 'Turanci (Finlan)',
'en_FJ' => 'Turanci (Fiji)',
'en_FK' => 'Turanci (Tsibiran Falkilan)',
'en_FM' => 'Turanci (Mikuronesiya)',
+ 'en_FR' => 'Turanci (Faransa)',
'en_GB' => 'Turanci (Biritaniya)',
'en_GD' => 'Turanci (Girnada)',
'en_GG' => 'Turanci (Yankin Guernsey)',
'en_GH' => 'Turanci (Gana)',
'en_GI' => 'Turanci (Jibaraltar)',
'en_GM' => 'Turanci (Gambiya)',
+ 'en_GS' => 'Turanci (Kudancin Geogia da Kudancin Tsibirin Sandiwic)',
'en_GU' => 'Turanci (Guam)',
'en_GY' => 'Turanci (Guyana)',
'en_HK' => 'Turanci (Babban Yankin Mulkin Hong Kong na Ƙasar Sin)',
+ 'en_HU' => 'Turanci (Hungari)',
'en_ID' => 'Turanci (Indunusiya)',
'en_IE' => 'Turanci (Ayalan)',
'en_IL' => 'Turanci (Israʼila)',
'en_IM' => 'Turanci (Isle of Man)',
'en_IN' => 'Turanci (Indiya)',
'en_IO' => 'Turanci (Yankin Birtaniya Na Tekun Indiya)',
+ 'en_IT' => 'Turanci (Italiya)',
'en_JE' => 'Turanci (Kasar Jersey)',
'en_JM' => 'Turanci (Jamaika)',
'en_KE' => 'Turanci (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Turanci (Tsibirin Narfalk)',
'en_NG' => 'Turanci (Nijeriya)',
'en_NL' => 'Turanci (Holan)',
+ 'en_NO' => 'Turanci (Norwe)',
'en_NR' => 'Turanci (Nauru)',
'en_NU' => 'Turanci (Niue)',
'en_NZ' => 'Turanci (Nuzilan)',
'en_PG' => 'Turanci (Papuwa Nugini)',
'en_PH' => 'Turanci (Filipin)',
'en_PK' => 'Turanci (Pakistan)',
+ 'en_PL' => 'Turanci (Polan)',
'en_PN' => 'Turanci (Tsibiran Pitcairn)',
'en_PR' => 'Turanci (Porto Riko)',
+ 'en_PT' => 'Turanci (Portugal)',
'en_PW' => 'Turanci (Palau)',
+ 'en_RO' => 'Turanci (Romaniya)',
'en_RW' => 'Turanci (Ruwanda)',
'en_SB' => 'Turanci (Tsibiran Salaman)',
'en_SC' => 'Turanci (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'Turanci (Singapur)',
'en_SH' => 'Turanci (San Helena)',
'en_SI' => 'Turanci (Sulobeniya)',
+ 'en_SK' => 'Turanci (Sulobakiya)',
'en_SL' => 'Turanci (Salewo)',
'en_SS' => 'Turanci (Sudan ta Kudu)',
'en_SX' => 'Turanci (San Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/he.php b/src/Symfony/Component/Intl/Resources/data/locales/he.php
index 5af7e8c39974b..e774608809c02 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/he.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/he.php
@@ -121,29 +121,35 @@
'en_CM' => 'אנגלית (קמרון)',
'en_CX' => 'אנגלית (אי חג המולד)',
'en_CY' => 'אנגלית (קפריסין)',
+ 'en_CZ' => 'אנגלית (צ׳כיה)',
'en_DE' => 'אנגלית (גרמניה)',
'en_DK' => 'אנגלית (דנמרק)',
'en_DM' => 'אנגלית (דומיניקה)',
'en_ER' => 'אנגלית (אריתריאה)',
+ 'en_ES' => 'אנגלית (ספרד)',
'en_FI' => 'אנגלית (פינלנד)',
'en_FJ' => 'אנגלית (פיג׳י)',
'en_FK' => 'אנגלית (איי פוקלנד)',
'en_FM' => 'אנגלית (מיקרונזיה)',
+ 'en_FR' => 'אנגלית (צרפת)',
'en_GB' => 'אנגלית (בריטניה)',
'en_GD' => 'אנגלית (גרנדה)',
'en_GG' => 'אנגלית (גרנזי)',
'en_GH' => 'אנגלית (גאנה)',
'en_GI' => 'אנגלית (גיברלטר)',
'en_GM' => 'אנגלית (גמביה)',
+ 'en_GS' => 'אנגלית (ג׳ורג׳יה הדרומית ואיי סנדוויץ׳ הדרומיים)',
'en_GU' => 'אנגלית (גואם)',
'en_GY' => 'אנגלית (גיאנה)',
'en_HK' => 'אנגלית (הונג קונג [אזור מנהלי מיוחד של סין])',
+ 'en_HU' => 'אנגלית (הונגריה)',
'en_ID' => 'אנגלית (אינדונזיה)',
'en_IE' => 'אנגלית (אירלנד)',
'en_IL' => 'אנגלית (ישראל)',
'en_IM' => 'אנגלית (האי מאן)',
'en_IN' => 'אנגלית (הודו)',
'en_IO' => 'אנגלית (הטריטוריה הבריטית באוקיינוס ההודי)',
+ 'en_IT' => 'אנגלית (איטליה)',
'en_JE' => 'אנגלית (ג׳רזי)',
'en_JM' => 'אנגלית (ג׳מייקה)',
'en_KE' => 'אנגלית (קניה)',
@@ -167,15 +173,19 @@
'en_NF' => 'אנגלית (האי נורפוק)',
'en_NG' => 'אנגלית (ניגריה)',
'en_NL' => 'אנגלית (הולנד)',
+ 'en_NO' => 'אנגלית (נורווגיה)',
'en_NR' => 'אנגלית (נאורו)',
'en_NU' => 'אנגלית (ניווה)',
'en_NZ' => 'אנגלית (ניו זילנד)',
'en_PG' => 'אנגלית (פפואה גינאה החדשה)',
'en_PH' => 'אנגלית (הפיליפינים)',
'en_PK' => 'אנגלית (פקיסטן)',
+ 'en_PL' => 'אנגלית (פולין)',
'en_PN' => 'אנגלית (איי פיטקרן)',
'en_PR' => 'אנגלית (פוארטו ריקו)',
+ 'en_PT' => 'אנגלית (פורטוגל)',
'en_PW' => 'אנגלית (פלאו)',
+ 'en_RO' => 'אנגלית (רומניה)',
'en_RW' => 'אנגלית (רואנדה)',
'en_SB' => 'אנגלית (איי שלמה)',
'en_SC' => 'אנגלית (איי סיישל)',
@@ -184,6 +194,7 @@
'en_SG' => 'אנגלית (סינגפור)',
'en_SH' => 'אנגלית (סנט הלנה)',
'en_SI' => 'אנגלית (סלובניה)',
+ 'en_SK' => 'אנגלית (סלובקיה)',
'en_SL' => 'אנגלית (סיירה לאון)',
'en_SS' => 'אנגלית (דרום סודן)',
'en_SX' => 'אנגלית (סנט מארטן)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/hi.php b/src/Symfony/Component/Intl/Resources/data/locales/hi.php
index cffc6ff5a9b83..0042f75f958dc 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/hi.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/hi.php
@@ -121,29 +121,35 @@
'en_CM' => 'अंग्रेज़ी (कैमरून)',
'en_CX' => 'अंग्रेज़ी (क्रिसमस द्वीप)',
'en_CY' => 'अंग्रेज़ी (साइप्रस)',
+ 'en_CZ' => 'अंग्रेज़ी (चेकिया)',
'en_DE' => 'अंग्रेज़ी (जर्मनी)',
'en_DK' => 'अंग्रेज़ी (डेनमार्क)',
'en_DM' => 'अंग्रेज़ी (डोमिनिका)',
'en_ER' => 'अंग्रेज़ी (इरिट्रिया)',
+ 'en_ES' => 'अंग्रेज़ी (स्पेन)',
'en_FI' => 'अंग्रेज़ी (फ़िनलैंड)',
'en_FJ' => 'अंग्रेज़ी (फ़िजी)',
'en_FK' => 'अंग्रेज़ी (फ़ॉकलैंड द्वीपसमूह)',
'en_FM' => 'अंग्रेज़ी (माइक्रोनेशिया)',
+ 'en_FR' => 'अंग्रेज़ी (फ़्रांस)',
'en_GB' => 'अंग्रेज़ी (यूनाइटेड किंगडम)',
'en_GD' => 'अंग्रेज़ी (ग्रेनाडा)',
'en_GG' => 'अंग्रेज़ी (गर्नसी)',
'en_GH' => 'अंग्रेज़ी (घाना)',
'en_GI' => 'अंग्रेज़ी (जिब्राल्टर)',
'en_GM' => 'अंग्रेज़ी (गाम्बिया)',
+ 'en_GS' => 'अंग्रेज़ी (दक्षिण जॉर्जिया और दक्षिण सैंडविच द्वीपसमूह)',
'en_GU' => 'अंग्रेज़ी (गुआम)',
'en_GY' => 'अंग्रेज़ी (गुयाना)',
'en_HK' => 'अंग्रेज़ी (हाँग काँग [चीन विशेष प्रशासनिक क्षेत्र])',
+ 'en_HU' => 'अंग्रेज़ी (हंगरी)',
'en_ID' => 'अंग्रेज़ी (इंडोनेशिया)',
'en_IE' => 'अंग्रेज़ी (आयरलैंड)',
'en_IL' => 'अंग्रेज़ी (इज़राइल)',
'en_IM' => 'अंग्रेज़ी (आइल ऑफ़ मैन)',
'en_IN' => 'अंग्रेज़ी (भारत)',
'en_IO' => 'अंग्रेज़ी (ब्रिटिश हिंद महासागरीय क्षेत्र)',
+ 'en_IT' => 'अंग्रेज़ी (इटली)',
'en_JE' => 'अंग्रेज़ी (जर्सी)',
'en_JM' => 'अंग्रेज़ी (जमैका)',
'en_KE' => 'अंग्रेज़ी (केन्या)',
@@ -167,15 +173,19 @@
'en_NF' => 'अंग्रेज़ी (नॉरफ़ॉक द्वीप)',
'en_NG' => 'अंग्रेज़ी (नाइजीरिया)',
'en_NL' => 'अंग्रेज़ी (नीदरलैंड)',
+ 'en_NO' => 'अंग्रेज़ी (नॉर्वे)',
'en_NR' => 'अंग्रेज़ी (नाउरु)',
'en_NU' => 'अंग्रेज़ी (नीयू)',
'en_NZ' => 'अंग्रेज़ी (न्यूज़ीलैंड)',
'en_PG' => 'अंग्रेज़ी (पापुआ न्यू गिनी)',
'en_PH' => 'अंग्रेज़ी (फ़िलिपींस)',
'en_PK' => 'अंग्रेज़ी (पाकिस्तान)',
+ 'en_PL' => 'अंग्रेज़ी (पोलैंड)',
'en_PN' => 'अंग्रेज़ी (पिटकैर्न द्वीपसमूह)',
'en_PR' => 'अंग्रेज़ी (पोर्टो रिको)',
+ 'en_PT' => 'अंग्रेज़ी (पुर्तगाल)',
'en_PW' => 'अंग्रेज़ी (पलाऊ)',
+ 'en_RO' => 'अंग्रेज़ी (रोमानिया)',
'en_RW' => 'अंग्रेज़ी (रवांडा)',
'en_SB' => 'अंग्रेज़ी (सोलोमन द्वीपसमूह)',
'en_SC' => 'अंग्रेज़ी (सेशेल्स)',
@@ -184,6 +194,7 @@
'en_SG' => 'अंग्रेज़ी (सिंगापुर)',
'en_SH' => 'अंग्रेज़ी (सेंट हेलेना)',
'en_SI' => 'अंग्रेज़ी (स्लोवेनिया)',
+ 'en_SK' => 'अंग्रेज़ी (स्लोवाकिया)',
'en_SL' => 'अंग्रेज़ी (सिएरा लियोन)',
'en_SS' => 'अंग्रेज़ी (दक्षिण सूडान)',
'en_SX' => 'अंग्रेज़ी (सिंट मार्टिन)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/hr.php b/src/Symfony/Component/Intl/Resources/data/locales/hr.php
index ffb9afa8999ed..c0f4336d3ba61 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/hr.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/hr.php
@@ -121,29 +121,35 @@
'en_CM' => 'engleski (Kamerun)',
'en_CX' => 'engleski (Božićni Otok)',
'en_CY' => 'engleski (Cipar)',
+ 'en_CZ' => 'engleski (Češka)',
'en_DE' => 'engleski (Njemačka)',
'en_DK' => 'engleski (Danska)',
'en_DM' => 'engleski (Dominika)',
'en_ER' => 'engleski (Eritreja)',
+ 'en_ES' => 'engleski (Španjolska)',
'en_FI' => 'engleski (Finska)',
'en_FJ' => 'engleski (Fidži)',
'en_FK' => 'engleski (Falklandski Otoci)',
'en_FM' => 'engleski (Mikronezija)',
+ 'en_FR' => 'engleski (Francuska)',
'en_GB' => 'engleski (Ujedinjeno Kraljevstvo)',
'en_GD' => 'engleski (Grenada)',
'en_GG' => 'engleski (Guernsey)',
'en_GH' => 'engleski (Gana)',
'en_GI' => 'engleski (Gibraltar)',
'en_GM' => 'engleski (Gambija)',
+ 'en_GS' => 'engleski (Južna Georgia i Otoci Južni Sandwich)',
'en_GU' => 'engleski (Guam)',
'en_GY' => 'engleski (Gvajana)',
'en_HK' => 'engleski (PUP Hong Kong Kina)',
+ 'en_HU' => 'engleski (Mađarska)',
'en_ID' => 'engleski (Indonezija)',
'en_IE' => 'engleski (Irska)',
'en_IL' => 'engleski (Izrael)',
'en_IM' => 'engleski (Otok Man)',
'en_IN' => 'engleski (Indija)',
'en_IO' => 'engleski (Britanski Indijskooceanski Teritorij)',
+ 'en_IT' => 'engleski (Italija)',
'en_JE' => 'engleski (Jersey)',
'en_JM' => 'engleski (Jamajka)',
'en_KE' => 'engleski (Kenija)',
@@ -167,15 +173,19 @@
'en_NF' => 'engleski (Otok Norfolk)',
'en_NG' => 'engleski (Nigerija)',
'en_NL' => 'engleski (Nizozemska)',
+ 'en_NO' => 'engleski (Norveška)',
'en_NR' => 'engleski (Nauru)',
'en_NU' => 'engleski (Niue)',
'en_NZ' => 'engleski (Novi Zeland)',
'en_PG' => 'engleski (Papua Nova Gvineja)',
'en_PH' => 'engleski (Filipini)',
'en_PK' => 'engleski (Pakistan)',
+ 'en_PL' => 'engleski (Poljska)',
'en_PN' => 'engleski (Pitcairnovi Otoci)',
'en_PR' => 'engleski (Portoriko)',
+ 'en_PT' => 'engleski (Portugal)',
'en_PW' => 'engleski (Palau)',
+ 'en_RO' => 'engleski (Rumunjska)',
'en_RW' => 'engleski (Ruanda)',
'en_SB' => 'engleski (Salomonovi Otoci)',
'en_SC' => 'engleski (Sejšeli)',
@@ -184,6 +194,7 @@
'en_SG' => 'engleski (Singapur)',
'en_SH' => 'engleski (Sveta Helena)',
'en_SI' => 'engleski (Slovenija)',
+ 'en_SK' => 'engleski (Slovačka)',
'en_SL' => 'engleski (Sijera Leone)',
'en_SS' => 'engleski (Južni Sudan)',
'en_SX' => 'engleski (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/hu.php b/src/Symfony/Component/Intl/Resources/data/locales/hu.php
index 9bc13c1846338..ca8baa80789b9 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/hu.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/hu.php
@@ -121,29 +121,35 @@
'en_CM' => 'angol (Kamerun)',
'en_CX' => 'angol (Karácsony-sziget)',
'en_CY' => 'angol (Ciprus)',
+ 'en_CZ' => 'angol (Csehország)',
'en_DE' => 'angol (Németország)',
'en_DK' => 'angol (Dánia)',
'en_DM' => 'angol (Dominika)',
'en_ER' => 'angol (Eritrea)',
+ 'en_ES' => 'angol (Spanyolország)',
'en_FI' => 'angol (Finnország)',
'en_FJ' => 'angol (Fidzsi)',
'en_FK' => 'angol (Falkland-szigetek)',
'en_FM' => 'angol (Mikronézia)',
+ 'en_FR' => 'angol (Franciaország)',
'en_GB' => 'angol (Egyesült Királyság)',
'en_GD' => 'angol (Grenada)',
'en_GG' => 'angol (Guernsey)',
'en_GH' => 'angol (Ghána)',
'en_GI' => 'angol (Gibraltár)',
'en_GM' => 'angol (Gambia)',
+ 'en_GS' => 'angol (Déli-Georgia és Déli-Sandwich-szigetek)',
'en_GU' => 'angol (Guam)',
'en_GY' => 'angol (Guyana)',
'en_HK' => 'angol (Hongkong KKT)',
+ 'en_HU' => 'angol (Magyarország)',
'en_ID' => 'angol (Indonézia)',
'en_IE' => 'angol (Írország)',
'en_IL' => 'angol (Izrael)',
'en_IM' => 'angol (Man-sziget)',
'en_IN' => 'angol (India)',
'en_IO' => 'angol (Brit Indiai-óceáni Terület)',
+ 'en_IT' => 'angol (Olaszország)',
'en_JE' => 'angol (Jersey)',
'en_JM' => 'angol (Jamaica)',
'en_KE' => 'angol (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'angol (Norfolk-sziget)',
'en_NG' => 'angol (Nigéria)',
'en_NL' => 'angol (Hollandia)',
+ 'en_NO' => 'angol (Norvégia)',
'en_NR' => 'angol (Nauru)',
'en_NU' => 'angol (Niue)',
'en_NZ' => 'angol (Új-Zéland)',
'en_PG' => 'angol (Pápua Új-Guinea)',
'en_PH' => 'angol (Fülöp-szigetek)',
'en_PK' => 'angol (Pakisztán)',
+ 'en_PL' => 'angol (Lengyelország)',
'en_PN' => 'angol (Pitcairn-szigetek)',
'en_PR' => 'angol (Puerto Rico)',
+ 'en_PT' => 'angol (Portugália)',
'en_PW' => 'angol (Palau)',
+ 'en_RO' => 'angol (Románia)',
'en_RW' => 'angol (Ruanda)',
'en_SB' => 'angol (Salamon-szigetek)',
'en_SC' => 'angol (Seychelle-szigetek)',
@@ -184,6 +194,7 @@
'en_SG' => 'angol (Szingapúr)',
'en_SH' => 'angol (Szent Ilona)',
'en_SI' => 'angol (Szlovénia)',
+ 'en_SK' => 'angol (Szlovákia)',
'en_SL' => 'angol (Sierra Leone)',
'en_SS' => 'angol (Dél-Szudán)',
'en_SX' => 'angol (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/hy.php b/src/Symfony/Component/Intl/Resources/data/locales/hy.php
index 705cfa1efc7e8..a4222a7cc0332 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/hy.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/hy.php
@@ -121,29 +121,35 @@
'en_CM' => 'անգլերեն (Կամերուն)',
'en_CX' => 'անգլերեն (Սուրբ Ծննդյան կղզի)',
'en_CY' => 'անգլերեն (Կիպրոս)',
+ 'en_CZ' => 'անգլերեն (Չեխիա)',
'en_DE' => 'անգլերեն (Գերմանիա)',
'en_DK' => 'անգլերեն (Դանիա)',
'en_DM' => 'անգլերեն (Դոմինիկա)',
'en_ER' => 'անգլերեն (Էրիթրեա)',
+ 'en_ES' => 'անգլերեն (Իսպանիա)',
'en_FI' => 'անգլերեն (Ֆինլանդիա)',
'en_FJ' => 'անգլերեն (Ֆիջի)',
'en_FK' => 'անգլերեն (Ֆոլքլենդյան կղզիներ)',
'en_FM' => 'անգլերեն (Միկրոնեզիա)',
+ 'en_FR' => 'անգլերեն (Ֆրանսիա)',
'en_GB' => 'անգլերեն (Միացյալ Թագավորություն)',
'en_GD' => 'անգլերեն (Գրենադա)',
'en_GG' => 'անգլերեն (Գերնսի)',
'en_GH' => 'անգլերեն (Գանա)',
'en_GI' => 'անգլերեն (Ջիբրալթար)',
'en_GM' => 'անգլերեն (Գամբիա)',
+ 'en_GS' => 'անգլերեն (Հարավային Ջորջիա և Հարավային Սենդվիչյան կղզիներ)',
'en_GU' => 'անգլերեն (Գուամ)',
'en_GY' => 'անգլերեն (Գայանա)',
'en_HK' => 'անգլերեն (Հոնկոնգի ՀՎՇ)',
+ 'en_HU' => 'անգլերեն (Հունգարիա)',
'en_ID' => 'անգլերեն (Ինդոնեզիա)',
'en_IE' => 'անգլերեն (Իռլանդիա)',
'en_IL' => 'անգլերեն (Իսրայել)',
'en_IM' => 'անգլերեն (Մեն կղզի)',
'en_IN' => 'անգլերեն (Հնդկաստան)',
'en_IO' => 'անգլերեն (Բրիտանական տարածք Հնդկական Օվկիանոսում)',
+ 'en_IT' => 'անգլերեն (Իտալիա)',
'en_JE' => 'անգլերեն (Ջերսի)',
'en_JM' => 'անգլերեն (Ճամայկա)',
'en_KE' => 'անգլերեն (Քենիա)',
@@ -167,15 +173,19 @@
'en_NF' => 'անգլերեն (Նորֆոլկ կղզի)',
'en_NG' => 'անգլերեն (Նիգերիա)',
'en_NL' => 'անգլերեն (Նիդեռլանդներ)',
+ 'en_NO' => 'անգլերեն (Նորվեգիա)',
'en_NR' => 'անգլերեն (Նաուրու)',
'en_NU' => 'անգլերեն (Նիուե)',
'en_NZ' => 'անգլերեն (Նոր Զելանդիա)',
'en_PG' => 'անգլերեն (Պապուա Նոր Գվինեա)',
'en_PH' => 'անգլերեն (Ֆիլիպիններ)',
'en_PK' => 'անգլերեն (Պակիստան)',
+ 'en_PL' => 'անգլերեն (Լեհաստան)',
'en_PN' => 'անգլերեն (Պիտկեռն կղզիներ)',
'en_PR' => 'անգլերեն (Պուերտո Ռիկո)',
+ 'en_PT' => 'անգլերեն (Պորտուգալիա)',
'en_PW' => 'անգլերեն (Պալաու)',
+ 'en_RO' => 'անգլերեն (Ռումինիա)',
'en_RW' => 'անգլերեն (Ռուանդա)',
'en_SB' => 'անգլերեն (Սողոմոնյան կղզիներ)',
'en_SC' => 'անգլերեն (Սեյշելներ)',
@@ -184,6 +194,7 @@
'en_SG' => 'անգլերեն (Սինգապուր)',
'en_SH' => 'անգլերեն (Սուրբ Հեղինեի կղզի)',
'en_SI' => 'անգլերեն (Սլովենիա)',
+ 'en_SK' => 'անգլերեն (Սլովակիա)',
'en_SL' => 'անգլերեն (Սիեռա Լեոնե)',
'en_SS' => 'անգլերեն (Հարավային Սուդան)',
'en_SX' => 'անգլերեն (Սինտ Մարտեն)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ia.php b/src/Symfony/Component/Intl/Resources/data/locales/ia.php
index fc6da9e2c8168..6f5e27b0e26fc 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ia.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ia.php
@@ -121,29 +121,35 @@
'en_CM' => 'anglese (Camerun)',
'en_CX' => 'anglese (Insula de Natal)',
'en_CY' => 'anglese (Cypro)',
+ 'en_CZ' => 'anglese (Chechia)',
'en_DE' => 'anglese (Germania)',
'en_DK' => 'anglese (Danmark)',
'en_DM' => 'anglese (Dominica)',
'en_ER' => 'anglese (Eritrea)',
+ 'en_ES' => 'anglese (Espania)',
'en_FI' => 'anglese (Finlandia)',
'en_FJ' => 'anglese (Fiji)',
'en_FK' => 'anglese (Insulas Falkland)',
'en_FM' => 'anglese (Micronesia)',
+ 'en_FR' => 'anglese (Francia)',
'en_GB' => 'anglese (Regno Unite)',
'en_GD' => 'anglese (Grenada)',
'en_GG' => 'anglese (Guernsey)',
'en_GH' => 'anglese (Ghana)',
'en_GI' => 'anglese (Gibraltar)',
'en_GM' => 'anglese (Gambia)',
+ 'en_GS' => 'anglese (Georgia del Sud e Insulas Sandwich Austral)',
'en_GU' => 'anglese (Guam)',
'en_GY' => 'anglese (Guyana)',
'en_HK' => 'anglese (Hongkong, R.A.S. de China)',
+ 'en_HU' => 'anglese (Hungaria)',
'en_ID' => 'anglese (Indonesia)',
'en_IE' => 'anglese (Irlanda)',
'en_IL' => 'anglese (Israel)',
'en_IM' => 'anglese (Insula de Man)',
'en_IN' => 'anglese (India)',
'en_IO' => 'anglese (Territorio oceanic britanno-indian)',
+ 'en_IT' => 'anglese (Italia)',
'en_JE' => 'anglese (Jersey)',
'en_JM' => 'anglese (Jamaica)',
'en_KE' => 'anglese (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'anglese (Insula Norfolk)',
'en_NG' => 'anglese (Nigeria)',
'en_NL' => 'anglese (Nederlandia)',
+ 'en_NO' => 'anglese (Norvegia)',
'en_NR' => 'anglese (Nauru)',
'en_NU' => 'anglese (Niue)',
'en_NZ' => 'anglese (Nove Zelanda)',
'en_PG' => 'anglese (Papua Nove Guinea)',
'en_PH' => 'anglese (Philippinas)',
'en_PK' => 'anglese (Pakistan)',
+ 'en_PL' => 'anglese (Polonia)',
'en_PN' => 'anglese (Insulas Pitcairn)',
'en_PR' => 'anglese (Porto Rico)',
+ 'en_PT' => 'anglese (Portugal)',
'en_PW' => 'anglese (Palau)',
+ 'en_RO' => 'anglese (Romania)',
'en_RW' => 'anglese (Ruanda)',
'en_SB' => 'anglese (Insulas Solomon)',
'en_SC' => 'anglese (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'anglese (Singapur)',
'en_SH' => 'anglese (Sancte Helena)',
'en_SI' => 'anglese (Slovenia)',
+ 'en_SK' => 'anglese (Slovachia)',
'en_SL' => 'anglese (Sierra Leone)',
'en_SS' => 'anglese (Sudan del Sud)',
'en_SX' => 'anglese (Sancte Martino nederlandese)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/id.php b/src/Symfony/Component/Intl/Resources/data/locales/id.php
index a509bbb1368fd..62f6f12c6185f 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/id.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/id.php
@@ -121,29 +121,35 @@
'en_CM' => 'Inggris (Kamerun)',
'en_CX' => 'Inggris (Pulau Natal)',
'en_CY' => 'Inggris (Siprus)',
+ 'en_CZ' => 'Inggris (Ceko)',
'en_DE' => 'Inggris (Jerman)',
'en_DK' => 'Inggris (Denmark)',
'en_DM' => 'Inggris (Dominika)',
'en_ER' => 'Inggris (Eritrea)',
+ 'en_ES' => 'Inggris (Spanyol)',
'en_FI' => 'Inggris (Finlandia)',
'en_FJ' => 'Inggris (Fiji)',
'en_FK' => 'Inggris (Kepulauan Falkland)',
'en_FM' => 'Inggris (Mikronesia)',
+ 'en_FR' => 'Inggris (Prancis)',
'en_GB' => 'Inggris (Inggris Raya)',
'en_GD' => 'Inggris (Grenada)',
'en_GG' => 'Inggris (Guernsey)',
'en_GH' => 'Inggris (Ghana)',
'en_GI' => 'Inggris (Gibraltar)',
'en_GM' => 'Inggris (Gambia)',
+ 'en_GS' => 'Inggris (Georgia Selatan & Kep. Sandwich Selatan)',
'en_GU' => 'Inggris (Guam)',
'en_GY' => 'Inggris (Guyana)',
'en_HK' => 'Inggris (Hong Kong DAK Tiongkok)',
+ 'en_HU' => 'Inggris (Hungaria)',
'en_ID' => 'Inggris (Indonesia)',
'en_IE' => 'Inggris (Irlandia)',
'en_IL' => 'Inggris (Israel)',
'en_IM' => 'Inggris (Pulau Man)',
'en_IN' => 'Inggris (India)',
'en_IO' => 'Inggris (Wilayah Inggris di Samudra Hindia)',
+ 'en_IT' => 'Inggris (Italia)',
'en_JE' => 'Inggris (Jersey)',
'en_JM' => 'Inggris (Jamaika)',
'en_KE' => 'Inggris (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Inggris (Kepulauan Norfolk)',
'en_NG' => 'Inggris (Nigeria)',
'en_NL' => 'Inggris (Belanda)',
+ 'en_NO' => 'Inggris (Norwegia)',
'en_NR' => 'Inggris (Nauru)',
'en_NU' => 'Inggris (Niue)',
'en_NZ' => 'Inggris (Selandia Baru)',
'en_PG' => 'Inggris (Papua Nugini)',
'en_PH' => 'Inggris (Filipina)',
'en_PK' => 'Inggris (Pakistan)',
+ 'en_PL' => 'Inggris (Polandia)',
'en_PN' => 'Inggris (Kepulauan Pitcairn)',
'en_PR' => 'Inggris (Puerto Riko)',
+ 'en_PT' => 'Inggris (Portugal)',
'en_PW' => 'Inggris (Palau)',
+ 'en_RO' => 'Inggris (Rumania)',
'en_RW' => 'Inggris (Rwanda)',
'en_SB' => 'Inggris (Kepulauan Solomon)',
'en_SC' => 'Inggris (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'Inggris (Singapura)',
'en_SH' => 'Inggris (Saint Helena)',
'en_SI' => 'Inggris (Slovenia)',
+ 'en_SK' => 'Inggris (Slovakia)',
'en_SL' => 'Inggris (Sierra Leone)',
'en_SS' => 'Inggris (Sudan Selatan)',
'en_SX' => 'Inggris (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ie.php b/src/Symfony/Component/Intl/Resources/data/locales/ie.php
index 7d811cb7ab8b4..4de8737b5db75 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ie.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ie.php
@@ -25,16 +25,21 @@
'en_AT' => 'anglesi (Austria)',
'en_BE' => 'anglesi (Belgia)',
'en_CH' => 'anglesi (Svissia)',
+ 'en_CZ' => 'anglesi (Tchekia)',
'en_DE' => 'anglesi (Germania)',
'en_DK' => 'anglesi (Dania)',
'en_ER' => 'anglesi (Eritrea)',
+ 'en_ES' => 'anglesi (Hispania)',
'en_FI' => 'anglesi (Finland)',
'en_FJ' => 'anglesi (Fidji)',
+ 'en_FR' => 'anglesi (Francia)',
'en_GB' => 'anglesi (Unit Reyia)',
'en_GY' => 'anglesi (Guyana)',
+ 'en_HU' => 'anglesi (Hungaria)',
'en_ID' => 'anglesi (Indonesia)',
'en_IE' => 'anglesi (Irland)',
'en_IN' => 'anglesi (India)',
+ 'en_IT' => 'anglesi (Italia)',
'en_MT' => 'anglesi (Malta)',
'en_MU' => 'anglesi (Mauricio)',
'en_MV' => 'anglesi (Maldivas)',
@@ -43,10 +48,14 @@
'en_NZ' => 'anglesi (Nov-Zeland)',
'en_PH' => 'anglesi (Filipines)',
'en_PK' => 'anglesi (Pakistan)',
+ 'en_PL' => 'anglesi (Polonia)',
'en_PR' => 'anglesi (Porto-Rico)',
+ 'en_PT' => 'anglesi (Portugal)',
'en_PW' => 'anglesi (Palau)',
+ 'en_RO' => 'anglesi (Rumania)',
'en_SE' => 'anglesi (Svedia)',
'en_SI' => 'anglesi (Slovenia)',
+ 'en_SK' => 'anglesi (Slovakia)',
'en_SX' => 'anglesi (Sint-Maarten)',
'en_TC' => 'anglesi (Turks e Caicos)',
'en_TK' => 'anglesi (Tokelau)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ig.php b/src/Symfony/Component/Intl/Resources/data/locales/ig.php
index f6c65dee76aed..efda0303784e6 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ig.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ig.php
@@ -121,29 +121,35 @@
'en_CM' => 'Bekee (Cameroon)',
'en_CX' => 'Bekee (Agwaetiti Christmas)',
'en_CY' => 'Bekee (Cyprus)',
+ 'en_CZ' => 'Bekee (Czechia)',
'en_DE' => 'Bekee (Germany)',
'en_DK' => 'Bekee (Denmark)',
'en_DM' => 'Bekee (Dominica)',
'en_ER' => 'Bekee (Eritrea)',
+ 'en_ES' => 'Bekee (Spain)',
'en_FI' => 'Bekee (Finland)',
'en_FJ' => 'Bekee (Fiji)',
'en_FK' => 'Bekee (Falkland Islands)',
'en_FM' => 'Bekee (Micronesia)',
+ 'en_FR' => 'Bekee (France)',
'en_GB' => 'Bekee (United Kingdom)',
'en_GD' => 'Bekee (Grenada)',
'en_GG' => 'Bekee (Guernsey)',
'en_GH' => 'Bekee (Ghana)',
'en_GI' => 'Bekee (Gibraltar)',
'en_GM' => 'Bekee (Gambia)',
+ 'en_GS' => 'Bekee (South Georgia & South Sandwich Islands)',
'en_GU' => 'Bekee (Guam)',
'en_GY' => 'Bekee (Guyana)',
'en_HK' => 'Bekee (Hong Kong SAR China)',
+ 'en_HU' => 'Bekee (Hungary)',
'en_ID' => 'Bekee (Indonesia)',
'en_IE' => 'Bekee (Ireland)',
'en_IL' => 'Bekee (Israel)',
'en_IM' => 'Bekee (Isle of Man)',
'en_IN' => 'Bekee (India)',
'en_IO' => 'Bekee (British Indian Ocean Territory)',
+ 'en_IT' => 'Bekee (Italy)',
'en_JE' => 'Bekee (Jersey)',
'en_JM' => 'Bekee (Jamaika)',
'en_KE' => 'Bekee (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Bekee (Agwaetiti Norfolk)',
'en_NG' => 'Bekee (Naịjịrịa)',
'en_NL' => 'Bekee (Netherlands)',
+ 'en_NO' => 'Bekee (Norway)',
'en_NR' => 'Bekee (Nauru)',
'en_NU' => 'Bekee (Niue)',
'en_NZ' => 'Bekee (New Zealand)',
'en_PG' => 'Bekee (Papua New Guinea)',
'en_PH' => 'Bekee (Philippines)',
'en_PK' => 'Bekee (Pakistan)',
+ 'en_PL' => 'Bekee (Poland)',
'en_PN' => 'Bekee (Agwaetiti Pitcairn)',
'en_PR' => 'Bekee (Puerto Rico)',
+ 'en_PT' => 'Bekee (Portugal)',
'en_PW' => 'Bekee (Palau)',
+ 'en_RO' => 'Bekee (Romania)',
'en_RW' => 'Bekee (Rwanda)',
'en_SB' => 'Bekee (Agwaetiti Solomon)',
'en_SC' => 'Bekee (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'Bekee (Singapore)',
'en_SH' => 'Bekee (St. Helena)',
'en_SI' => 'Bekee (Slovenia)',
+ 'en_SK' => 'Bekee (Slovakia)',
'en_SL' => 'Bekee (Sierra Leone)',
'en_SS' => 'Bekee (South Sudan)',
'en_SX' => 'Bekee (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ii.php b/src/Symfony/Component/Intl/Resources/data/locales/ii.php
index a49bd4c510ba3..f45d0edbda106 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ii.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ii.php
@@ -13,8 +13,10 @@
'en_150' => 'ꑱꇩꉙ(ꉩꍏ)',
'en_BE' => 'ꑱꇩꉙ(ꀘꆹꏃ)',
'en_DE' => 'ꑱꇩꉙ(ꄓꇩ)',
+ 'en_FR' => 'ꑱꇩꉙ(ꃔꇩ)',
'en_GB' => 'ꑱꇩꉙ(ꑱꇩ)',
'en_IN' => 'ꑱꇩꉙ(ꑴꄗ)',
+ 'en_IT' => 'ꑱꇩꉙ(ꑴꄊꆺ)',
'en_US' => 'ꑱꇩꉙ(ꂰꇩ)',
'es' => 'ꑭꀠꑸꉙ',
'es_BR' => 'ꑭꀠꑸꉙ(ꀠꑭ)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/is.php b/src/Symfony/Component/Intl/Resources/data/locales/is.php
index f4193a794155b..a9c87c308cd66 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/is.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/is.php
@@ -121,29 +121,35 @@
'en_CM' => 'enska (Kamerún)',
'en_CX' => 'enska (Jólaey)',
'en_CY' => 'enska (Kýpur)',
+ 'en_CZ' => 'enska (Tékkland)',
'en_DE' => 'enska (Þýskaland)',
'en_DK' => 'enska (Danmörk)',
'en_DM' => 'enska (Dóminíka)',
'en_ER' => 'enska (Erítrea)',
+ 'en_ES' => 'enska (Spánn)',
'en_FI' => 'enska (Finnland)',
'en_FJ' => 'enska (Fídjíeyjar)',
'en_FK' => 'enska (Falklandseyjar)',
'en_FM' => 'enska (Míkrónesía)',
+ 'en_FR' => 'enska (Frakkland)',
'en_GB' => 'enska (Bretland)',
'en_GD' => 'enska (Grenada)',
'en_GG' => 'enska (Guernsey)',
'en_GH' => 'enska (Gana)',
'en_GI' => 'enska (Gíbraltar)',
'en_GM' => 'enska (Gambía)',
+ 'en_GS' => 'enska (Suður-Georgía og Suður-Sandvíkureyjar)',
'en_GU' => 'enska (Gvam)',
'en_GY' => 'enska (Gvæjana)',
'en_HK' => 'enska (sérstjórnarsvæðið Hong Kong)',
+ 'en_HU' => 'enska (Ungverjaland)',
'en_ID' => 'enska (Indónesía)',
'en_IE' => 'enska (Írland)',
'en_IL' => 'enska (Ísrael)',
'en_IM' => 'enska (Mön)',
'en_IN' => 'enska (Indland)',
'en_IO' => 'enska (Bresku Indlandshafseyjar)',
+ 'en_IT' => 'enska (Ítalía)',
'en_JE' => 'enska (Jersey)',
'en_JM' => 'enska (Jamaíka)',
'en_KE' => 'enska (Kenía)',
@@ -167,15 +173,19 @@
'en_NF' => 'enska (Norfolkeyja)',
'en_NG' => 'enska (Nígería)',
'en_NL' => 'enska (Holland)',
+ 'en_NO' => 'enska (Noregur)',
'en_NR' => 'enska (Nárú)',
'en_NU' => 'enska (Niue)',
'en_NZ' => 'enska (Nýja-Sjáland)',
'en_PG' => 'enska (Papúa Nýja-Gínea)',
'en_PH' => 'enska (Filippseyjar)',
'en_PK' => 'enska (Pakistan)',
+ 'en_PL' => 'enska (Pólland)',
'en_PN' => 'enska (Pitcairn-eyjar)',
'en_PR' => 'enska (Púertó Ríkó)',
+ 'en_PT' => 'enska (Portúgal)',
'en_PW' => 'enska (Palá)',
+ 'en_RO' => 'enska (Rúmenía)',
'en_RW' => 'enska (Rúanda)',
'en_SB' => 'enska (Salómonseyjar)',
'en_SC' => 'enska (Seychelles-eyjar)',
@@ -184,6 +194,7 @@
'en_SG' => 'enska (Singapúr)',
'en_SH' => 'enska (Sankti Helena)',
'en_SI' => 'enska (Slóvenía)',
+ 'en_SK' => 'enska (Slóvakía)',
'en_SL' => 'enska (Síerra Leóne)',
'en_SS' => 'enska (Suður-Súdan)',
'en_SX' => 'enska (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/it.php b/src/Symfony/Component/Intl/Resources/data/locales/it.php
index 5c8b0eb394e84..1d647898ebd39 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/it.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/it.php
@@ -121,29 +121,35 @@
'en_CM' => 'inglese (Camerun)',
'en_CX' => 'inglese (Isola Christmas)',
'en_CY' => 'inglese (Cipro)',
+ 'en_CZ' => 'inglese (Cechia)',
'en_DE' => 'inglese (Germania)',
'en_DK' => 'inglese (Danimarca)',
'en_DM' => 'inglese (Dominica)',
'en_ER' => 'inglese (Eritrea)',
+ 'en_ES' => 'inglese (Spagna)',
'en_FI' => 'inglese (Finlandia)',
'en_FJ' => 'inglese (Figi)',
'en_FK' => 'inglese (Isole Falkland)',
'en_FM' => 'inglese (Micronesia)',
+ 'en_FR' => 'inglese (Francia)',
'en_GB' => 'inglese (Regno Unito)',
'en_GD' => 'inglese (Grenada)',
'en_GG' => 'inglese (Guernsey)',
'en_GH' => 'inglese (Ghana)',
'en_GI' => 'inglese (Gibilterra)',
'en_GM' => 'inglese (Gambia)',
+ 'en_GS' => 'inglese (Georgia del Sud e Sandwich Australi)',
'en_GU' => 'inglese (Guam)',
'en_GY' => 'inglese (Guyana)',
'en_HK' => 'inglese (RAS di Hong Kong)',
+ 'en_HU' => 'inglese (Ungheria)',
'en_ID' => 'inglese (Indonesia)',
'en_IE' => 'inglese (Irlanda)',
'en_IL' => 'inglese (Israele)',
'en_IM' => 'inglese (Isola di Man)',
'en_IN' => 'inglese (India)',
'en_IO' => 'inglese (Territorio Britannico dell’Oceano Indiano)',
+ 'en_IT' => 'inglese (Italia)',
'en_JE' => 'inglese (Jersey)',
'en_JM' => 'inglese (Giamaica)',
'en_KE' => 'inglese (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'inglese (Isola Norfolk)',
'en_NG' => 'inglese (Nigeria)',
'en_NL' => 'inglese (Paesi Bassi)',
+ 'en_NO' => 'inglese (Norvegia)',
'en_NR' => 'inglese (Nauru)',
'en_NU' => 'inglese (Niue)',
'en_NZ' => 'inglese (Nuova Zelanda)',
'en_PG' => 'inglese (Papua Nuova Guinea)',
'en_PH' => 'inglese (Filippine)',
'en_PK' => 'inglese (Pakistan)',
+ 'en_PL' => 'inglese (Polonia)',
'en_PN' => 'inglese (Isole Pitcairn)',
'en_PR' => 'inglese (Portorico)',
+ 'en_PT' => 'inglese (Portogallo)',
'en_PW' => 'inglese (Palau)',
+ 'en_RO' => 'inglese (Romania)',
'en_RW' => 'inglese (Ruanda)',
'en_SB' => 'inglese (Isole Salomone)',
'en_SC' => 'inglese (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'inglese (Singapore)',
'en_SH' => 'inglese (Sant’Elena)',
'en_SI' => 'inglese (Slovenia)',
+ 'en_SK' => 'inglese (Slovacchia)',
'en_SL' => 'inglese (Sierra Leone)',
'en_SS' => 'inglese (Sud Sudan)',
'en_SX' => 'inglese (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ja.php b/src/Symfony/Component/Intl/Resources/data/locales/ja.php
index e313b62074c65..16ad4dcdc6ca3 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ja.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ja.php
@@ -121,29 +121,35 @@
'en_CM' => '英語 (カメルーン)',
'en_CX' => '英語 (クリスマス島)',
'en_CY' => '英語 (キプロス)',
+ 'en_CZ' => '英語 (チェコ)',
'en_DE' => '英語 (ドイツ)',
'en_DK' => '英語 (デンマーク)',
'en_DM' => '英語 (ドミニカ国)',
'en_ER' => '英語 (エリトリア)',
+ 'en_ES' => '英語 (スペイン)',
'en_FI' => '英語 (フィンランド)',
'en_FJ' => '英語 (フィジー)',
'en_FK' => '英語 (フォークランド諸島)',
'en_FM' => '英語 (ミクロネシア連邦)',
+ 'en_FR' => '英語 (フランス)',
'en_GB' => '英語 (イギリス)',
'en_GD' => '英語 (グレナダ)',
'en_GG' => '英語 (ガーンジー)',
'en_GH' => '英語 (ガーナ)',
'en_GI' => '英語 (ジブラルタル)',
'en_GM' => '英語 (ガンビア)',
+ 'en_GS' => '英語 (サウスジョージア・サウスサンドウィッチ諸島)',
'en_GU' => '英語 (グアム)',
'en_GY' => '英語 (ガイアナ)',
'en_HK' => '英語 (中華人民共和国香港特別行政区)',
+ 'en_HU' => '英語 (ハンガリー)',
'en_ID' => '英語 (インドネシア)',
'en_IE' => '英語 (アイルランド)',
'en_IL' => '英語 (イスラエル)',
'en_IM' => '英語 (マン島)',
'en_IN' => '英語 (インド)',
'en_IO' => '英語 (英領インド洋地域)',
+ 'en_IT' => '英語 (イタリア)',
'en_JE' => '英語 (ジャージー)',
'en_JM' => '英語 (ジャマイカ)',
'en_KE' => '英語 (ケニア)',
@@ -167,15 +173,19 @@
'en_NF' => '英語 (ノーフォーク島)',
'en_NG' => '英語 (ナイジェリア)',
'en_NL' => '英語 (オランダ)',
+ 'en_NO' => '英語 (ノルウェー)',
'en_NR' => '英語 (ナウル)',
'en_NU' => '英語 (ニウエ)',
'en_NZ' => '英語 (ニュージーランド)',
'en_PG' => '英語 (パプアニューギニア)',
'en_PH' => '英語 (フィリピン)',
'en_PK' => '英語 (パキスタン)',
+ 'en_PL' => '英語 (ポーランド)',
'en_PN' => '英語 (ピトケアン諸島)',
'en_PR' => '英語 (プエルトリコ)',
+ 'en_PT' => '英語 (ポルトガル)',
'en_PW' => '英語 (パラオ)',
+ 'en_RO' => '英語 (ルーマニア)',
'en_RW' => '英語 (ルワンダ)',
'en_SB' => '英語 (ソロモン諸島)',
'en_SC' => '英語 (セーシェル)',
@@ -184,6 +194,7 @@
'en_SG' => '英語 (シンガポール)',
'en_SH' => '英語 (セントヘレナ)',
'en_SI' => '英語 (スロベニア)',
+ 'en_SK' => '英語 (スロバキア)',
'en_SL' => '英語 (シエラレオネ)',
'en_SS' => '英語 (南スーダン)',
'en_SX' => '英語 (シント・マールテン)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/jv.php b/src/Symfony/Component/Intl/Resources/data/locales/jv.php
index 7aceed6372635..6b701cb205b26 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/jv.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/jv.php
@@ -121,29 +121,35 @@
'en_CM' => 'Inggris (Kamerun)',
'en_CX' => 'Inggris (Pulo Natal)',
'en_CY' => 'Inggris (Siprus)',
+ 'en_CZ' => 'Inggris (Céko)',
'en_DE' => 'Inggris (Jérman)',
'en_DK' => 'Inggris (Dhènemarken)',
'en_DM' => 'Inggris (Dominika)',
'en_ER' => 'Inggris (Éritréa)',
+ 'en_ES' => 'Inggris (Sepanyol)',
'en_FI' => 'Inggris (Finlan)',
'en_FJ' => 'Inggris (Fiji)',
'en_FK' => 'Inggris (Kapuloan Falkland)',
'en_FM' => 'Inggris (Féderasi Mikronésia)',
+ 'en_FR' => 'Inggris (Prancis)',
'en_GB' => 'Inggris (Karajan Manunggal)',
'en_GD' => 'Inggris (Grénada)',
'en_GG' => 'Inggris (Guernsei)',
'en_GH' => 'Inggris (Ghana)',
'en_GI' => 'Inggris (Gibraltar)',
'en_GM' => 'Inggris (Gambia)',
+ 'en_GS' => 'Inggris (Georgia Kidul lan Kapuloan Sandwich Kidul)',
'en_GU' => 'Inggris (Guam)',
'en_GY' => 'Inggris (Guyana)',
'en_HK' => 'Inggris (Laladan Administratif Astamiwa Hong Kong)',
+ 'en_HU' => 'Inggris (Honggari)',
'en_ID' => 'Inggris (Indonésia)',
'en_IE' => 'Inggris (Républik Irlan)',
'en_IL' => 'Inggris (Israèl)',
'en_IM' => 'Inggris (Pulo Man)',
'en_IN' => 'Inggris (Indhia)',
'en_IO' => 'Inggris (Wilayah Inggris ing Segara Hindia)',
+ 'en_IT' => 'Inggris (Itali)',
'en_JE' => 'Inggris (Jersey)',
'en_JM' => 'Inggris (Jamaika)',
'en_KE' => 'Inggris (Kénya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Inggris (Pulo Norfolk)',
'en_NG' => 'Inggris (Nigéria)',
'en_NL' => 'Inggris (Walanda)',
+ 'en_NO' => 'Inggris (Nurwègen)',
'en_NR' => 'Inggris (Nauru)',
'en_NU' => 'Inggris (Niue)',
'en_NZ' => 'Inggris (Selandia Anyar)',
'en_PG' => 'Inggris (Papua Nugini)',
'en_PH' => 'Inggris (Pilipina)',
'en_PK' => 'Inggris (Pakistan)',
+ 'en_PL' => 'Inggris (Polen)',
'en_PN' => 'Inggris (Kapuloan Pitcairn)',
'en_PR' => 'Inggris (Puèrto Riko)',
+ 'en_PT' => 'Inggris (Portugal)',
'en_PW' => 'Inggris (Palau)',
+ 'en_RO' => 'Inggris (Ruméni)',
'en_RW' => 'Inggris (Rwanda)',
'en_SB' => 'Inggris (Kapuloan Suleman)',
'en_SC' => 'Inggris (Sésèl)',
@@ -184,6 +194,7 @@
'en_SG' => 'Inggris (Singapura)',
'en_SH' => 'Inggris (Saint Héléna)',
'en_SI' => 'Inggris (Slovénia)',
+ 'en_SK' => 'Inggris (Slowak)',
'en_SL' => 'Inggris (Siéra Léoné)',
'en_SS' => 'Inggris (Sudan Kidul)',
'en_SX' => 'Inggris (Sint Martén)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ka.php b/src/Symfony/Component/Intl/Resources/data/locales/ka.php
index f6e517535438e..fff440168ac29 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ka.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ka.php
@@ -121,29 +121,35 @@
'en_CM' => 'ინგლისური (კამერუნი)',
'en_CX' => 'ინგლისური (შობის კუნძული)',
'en_CY' => 'ინგლისური (კვიპროსი)',
+ 'en_CZ' => 'ინგლისური (ჩეხეთი)',
'en_DE' => 'ინგლისური (გერმანია)',
'en_DK' => 'ინგლისური (დანია)',
'en_DM' => 'ინგლისური (დომინიკა)',
'en_ER' => 'ინგლისური (ერიტრეა)',
+ 'en_ES' => 'ინგლისური (ესპანეთი)',
'en_FI' => 'ინგლისური (ფინეთი)',
'en_FJ' => 'ინგლისური (ფიჯი)',
'en_FK' => 'ინგლისური (ფოლკლენდის კუნძულები)',
'en_FM' => 'ინგლისური (მიკრონეზია)',
+ 'en_FR' => 'ინგლისური (საფრანგეთი)',
'en_GB' => 'ინგლისური (გაერთიანებული სამეფო)',
'en_GD' => 'ინგლისური (გრენადა)',
'en_GG' => 'ინგლისური (გერნსი)',
'en_GH' => 'ინგლისური (განა)',
'en_GI' => 'ინგლისური (გიბრალტარი)',
'en_GM' => 'ინგლისური (გამბია)',
+ 'en_GS' => 'ინგლისური (სამხრეთ ჯორჯია და სამხრეთ სენდვიჩის კუნძულები)',
'en_GU' => 'ინგლისური (გუამი)',
'en_GY' => 'ინგლისური (გაიანა)',
'en_HK' => 'ინგლისური (ჰონკონგის სპეციალური ადმინისტრაციული რეგიონი, ჩინეთი)',
+ 'en_HU' => 'ინგლისური (უნგრეთი)',
'en_ID' => 'ინგლისური (ინდონეზია)',
'en_IE' => 'ინგლისური (ირლანდია)',
'en_IL' => 'ინგლისური (ისრაელი)',
'en_IM' => 'ინგლისური (მენის კუნძული)',
'en_IN' => 'ინგლისური (ინდოეთი)',
'en_IO' => 'ინგლისური (ბრიტანეთის ტერიტორია ინდოეთის ოკეანეში)',
+ 'en_IT' => 'ინგლისური (იტალია)',
'en_JE' => 'ინგლისური (ჯერსი)',
'en_JM' => 'ინგლისური (იამაიკა)',
'en_KE' => 'ინგლისური (კენია)',
@@ -167,15 +173,19 @@
'en_NF' => 'ინგლისური (ნორფოლკის კუნძული)',
'en_NG' => 'ინგლისური (ნიგერია)',
'en_NL' => 'ინგლისური (ნიდერლანდები)',
+ 'en_NO' => 'ინგლისური (ნორვეგია)',
'en_NR' => 'ინგლისური (ნაურუ)',
'en_NU' => 'ინგლისური (ნიუე)',
'en_NZ' => 'ინგლისური (ახალი ზელანდია)',
'en_PG' => 'ინგლისური (პაპუა-ახალი გვინეა)',
'en_PH' => 'ინგლისური (ფილიპინები)',
'en_PK' => 'ინგლისური (პაკისტანი)',
+ 'en_PL' => 'ინგლისური (პოლონეთი)',
'en_PN' => 'ინგლისური (პიტკერნის კუნძულები)',
'en_PR' => 'ინგლისური (პუერტო-რიკო)',
+ 'en_PT' => 'ინგლისური (პორტუგალია)',
'en_PW' => 'ინგლისური (პალაუ)',
+ 'en_RO' => 'ინგლისური (რუმინეთი)',
'en_RW' => 'ინგლისური (რუანდა)',
'en_SB' => 'ინგლისური (სოლომონის კუნძულები)',
'en_SC' => 'ინგლისური (სეიშელის კუნძულები)',
@@ -184,6 +194,7 @@
'en_SG' => 'ინგლისური (სინგაპური)',
'en_SH' => 'ინგლისური (წმინდა ელენეს კუნძული)',
'en_SI' => 'ინგლისური (სლოვენია)',
+ 'en_SK' => 'ინგლისური (სლოვაკეთი)',
'en_SL' => 'ინგლისური (სიერა-ლეონე)',
'en_SS' => 'ინგლისური (სამხრეთ სუდანი)',
'en_SX' => 'ინგლისური (სინტ-მარტენი)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ki.php b/src/Symfony/Component/Intl/Resources/data/locales/ki.php
index 0b2614bd2497e..80df7f3526ae4 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ki.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ki.php
@@ -71,14 +71,17 @@
'en_CK' => 'Gĩthungũ (Visiwa vya Cook)',
'en_CM' => 'Gĩthungũ (Kameruni)',
'en_CY' => 'Gĩthungũ (Kuprosi)',
+ 'en_CZ' => 'Gĩthungũ (Jamhuri ya Cheki)',
'en_DE' => 'Gĩthungũ (Njeremani)',
'en_DK' => 'Gĩthungũ (Denmaki)',
'en_DM' => 'Gĩthungũ (Dominika)',
'en_ER' => 'Gĩthungũ (Eritrea)',
+ 'en_ES' => 'Gĩthungũ (Hispania)',
'en_FI' => 'Gĩthungũ (Ufini)',
'en_FJ' => 'Gĩthungũ (Fiji)',
'en_FK' => 'Gĩthungũ (Visiwa vya Falkland)',
'en_FM' => 'Gĩthungũ (Mikronesia)',
+ 'en_FR' => 'Gĩthungũ (Ubaranja)',
'en_GB' => 'Gĩthungũ (Ngeretha)',
'en_GD' => 'Gĩthungũ (Grenada)',
'en_GH' => 'Gĩthungũ (Ngana)',
@@ -86,10 +89,12 @@
'en_GM' => 'Gĩthungũ (Gambia)',
'en_GU' => 'Gĩthungũ (Gwam)',
'en_GY' => 'Gĩthungũ (Guyana)',
+ 'en_HU' => 'Gĩthungũ (Hungaria)',
'en_ID' => 'Gĩthungũ (Indonesia)',
'en_IE' => 'Gĩthungũ (Ayalandi)',
'en_IL' => 'Gĩthungũ (Israeli)',
'en_IN' => 'Gĩthungũ (India)',
+ 'en_IT' => 'Gĩthungũ (Italia)',
'en_JM' => 'Gĩthungũ (Jamaika)',
'en_KE' => 'Gĩthungũ (Kenya)',
'en_KI' => 'Gĩthungũ (Kiribati)',
@@ -111,15 +116,19 @@
'en_NF' => 'Gĩthungũ (Kisiwa cha Norfok)',
'en_NG' => 'Gĩthungũ (Nainjeria)',
'en_NL' => 'Gĩthungũ (Uholanzi)',
+ 'en_NO' => 'Gĩthungũ (Norwe)',
'en_NR' => 'Gĩthungũ (Nauru)',
'en_NU' => 'Gĩthungũ (Niue)',
'en_NZ' => 'Gĩthungũ (Nyuzilandi)',
'en_PG' => 'Gĩthungũ (Papua)',
'en_PH' => 'Gĩthungũ (Filipino)',
'en_PK' => 'Gĩthungũ (Pakistani)',
+ 'en_PL' => 'Gĩthungũ (Polandi)',
'en_PN' => 'Gĩthungũ (Pitkairni)',
'en_PR' => 'Gĩthungũ (Pwetoriko)',
+ 'en_PT' => 'Gĩthungũ (Ureno)',
'en_PW' => 'Gĩthungũ (Palau)',
+ 'en_RO' => 'Gĩthungũ (Romania)',
'en_RW' => 'Gĩthungũ (Rwanda)',
'en_SB' => 'Gĩthungũ (Visiwa vya Solomon)',
'en_SC' => 'Gĩthungũ (Shelisheli)',
@@ -128,6 +137,7 @@
'en_SG' => 'Gĩthungũ (Singapoo)',
'en_SH' => 'Gĩthungũ (Santahelena)',
'en_SI' => 'Gĩthungũ (Slovenia)',
+ 'en_SK' => 'Gĩthungũ (Slovakia)',
'en_SL' => 'Gĩthungũ (Siera Leoni)',
'en_SZ' => 'Gĩthungũ (Uswazi)',
'en_TC' => 'Gĩthungũ (Visiwa vya Turki na Kaiko)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/kk.php b/src/Symfony/Component/Intl/Resources/data/locales/kk.php
index 09318b9b3b05d..d49751103b1a8 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/kk.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/kk.php
@@ -121,29 +121,35 @@
'en_CM' => 'ағылшын тілі (Камерун)',
'en_CX' => 'ағылшын тілі (Рождество аралы)',
'en_CY' => 'ағылшын тілі (Кипр)',
+ 'en_CZ' => 'ағылшын тілі (Чехия)',
'en_DE' => 'ағылшын тілі (Германия)',
'en_DK' => 'ағылшын тілі (Дания)',
'en_DM' => 'ағылшын тілі (Доминика)',
'en_ER' => 'ағылшын тілі (Эритрея)',
+ 'en_ES' => 'ағылшын тілі (Испания)',
'en_FI' => 'ағылшын тілі (Финляндия)',
'en_FJ' => 'ағылшын тілі (Фиджи)',
'en_FK' => 'ағылшын тілі (Фолкленд аралдары)',
'en_FM' => 'ағылшын тілі (Микронезия)',
+ 'en_FR' => 'ағылшын тілі (Франция)',
'en_GB' => 'ағылшын тілі (Ұлыбритания)',
'en_GD' => 'ағылшын тілі (Гренада)',
'en_GG' => 'ағылшын тілі (Гернси)',
'en_GH' => 'ағылшын тілі (Гана)',
'en_GI' => 'ағылшын тілі (Гибралтар)',
'en_GM' => 'ағылшын тілі (Гамбия)',
+ 'en_GS' => 'ағылшын тілі (Оңтүстік Георгия және Оңтүстік Сандвич аралдары)',
'en_GU' => 'ағылшын тілі (Гуам)',
'en_GY' => 'ағылшын тілі (Гайана)',
'en_HK' => 'ағылшын тілі (Сянган АӘА)',
+ 'en_HU' => 'ағылшын тілі (Венгрия)',
'en_ID' => 'ағылшын тілі (Индонезия)',
'en_IE' => 'ағылшын тілі (Ирландия)',
'en_IL' => 'ағылшын тілі (Израиль)',
'en_IM' => 'ағылшын тілі (Мэн аралы)',
'en_IN' => 'ағылшын тілі (Үндістан)',
'en_IO' => 'ағылшын тілі (Үнді мұхитындағы Британ аймағы)',
+ 'en_IT' => 'ағылшын тілі (Италия)',
'en_JE' => 'ағылшын тілі (Джерси)',
'en_JM' => 'ағылшын тілі (Ямайка)',
'en_KE' => 'ағылшын тілі (Кения)',
@@ -167,15 +173,19 @@
'en_NF' => 'ағылшын тілі (Норфолк аралы)',
'en_NG' => 'ағылшын тілі (Нигерия)',
'en_NL' => 'ағылшын тілі (Нидерланд)',
+ 'en_NO' => 'ағылшын тілі (Норвегия)',
'en_NR' => 'ағылшын тілі (Науру)',
'en_NU' => 'ағылшын тілі (Ниуэ)',
'en_NZ' => 'ағылшын тілі (Жаңа Зеландия)',
'en_PG' => 'ағылшын тілі (Папуа — Жаңа Гвинея)',
'en_PH' => 'ағылшын тілі (Филиппин аралдары)',
'en_PK' => 'ағылшын тілі (Пәкістан)',
+ 'en_PL' => 'ағылшын тілі (Польша)',
'en_PN' => 'ағылшын тілі (Питкэрн аралдары)',
'en_PR' => 'ағылшын тілі (Пуэрто-Рико)',
+ 'en_PT' => 'ағылшын тілі (Португалия)',
'en_PW' => 'ағылшын тілі (Палау)',
+ 'en_RO' => 'ағылшын тілі (Румыния)',
'en_RW' => 'ағылшын тілі (Руанда)',
'en_SB' => 'ағылшын тілі (Соломон аралдары)',
'en_SC' => 'ағылшын тілі (Сейшель аралдары)',
@@ -184,6 +194,7 @@
'en_SG' => 'ағылшын тілі (Сингапур)',
'en_SH' => 'ағылшын тілі (Әулие Елена аралы)',
'en_SI' => 'ағылшын тілі (Словения)',
+ 'en_SK' => 'ағылшын тілі (Словакия)',
'en_SL' => 'ағылшын тілі (Сьерра-Леоне)',
'en_SS' => 'ағылшын тілі (Оңтүстік Судан)',
'en_SX' => 'ағылшын тілі (Синт-Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/km.php b/src/Symfony/Component/Intl/Resources/data/locales/km.php
index 1119a21464c1b..fa2eb27f0c4a5 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/km.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/km.php
@@ -121,29 +121,35 @@
'en_CM' => 'អង់គ្លេស (កាមេរូន)',
'en_CX' => 'អង់គ្លេស (កោះគ្រីស្មាស)',
'en_CY' => 'អង់គ្លេស (ស៊ីប)',
+ 'en_CZ' => 'អង់គ្លេស (ឆែក)',
'en_DE' => 'អង់គ្លេស (អាល្លឺម៉ង់)',
'en_DK' => 'អង់គ្លេស (ដាណឺម៉ាក)',
'en_DM' => 'អង់គ្លេស (ដូមីនីក)',
'en_ER' => 'អង់គ្លេស (អេរីត្រេ)',
+ 'en_ES' => 'អង់គ្លេស (អេស្ប៉ាញ)',
'en_FI' => 'អង់គ្លេស (ហ្វាំងឡង់)',
'en_FJ' => 'អង់គ្លេស (ហ្វីជី)',
'en_FK' => 'អង់គ្លេស (កោះហ្វក់ឡែន)',
'en_FM' => 'អង់គ្លេស (មីក្រូណេស៊ី)',
+ 'en_FR' => 'អង់គ្លេស (បារាំង)',
'en_GB' => 'អង់គ្លេស (ចក្រភពអង់គ្លេស)',
'en_GD' => 'អង់គ្លេស (ហ្គ្រើណាដ)',
'en_GG' => 'អង់គ្លេស (ហ្គេនស៊ី)',
'en_GH' => 'អង់គ្លេស (ហ្គាណា)',
'en_GI' => 'អង់គ្លេស (ហ្ស៊ីប្រាល់តា)',
'en_GM' => 'អង់គ្លេស (ហ្គំប៊ី)',
+ 'en_GS' => 'អង់គ្លេស (កោះហ្សកហ្ស៊ីខាងត្បូង និង សង់វិចខាងត្បូង)',
'en_GU' => 'អង់គ្លេស (ហ្គាំ)',
'en_GY' => 'អង់គ្លេស (ហ្គីយ៉ាន)',
'en_HK' => 'អង់គ្លេស (ហុងកុង តំបន់រដ្ឋបាលពិសេសចិន)',
+ 'en_HU' => 'អង់គ្លេស (ហុងគ្រី)',
'en_ID' => 'អង់គ្លេស (ឥណ្ឌូណេស៊ី)',
'en_IE' => 'អង់គ្លេស (អៀរឡង់)',
'en_IL' => 'អង់គ្លេស (អ៊ីស្រាអែល)',
'en_IM' => 'អង់គ្លេស (អែលអុហ្វមែន)',
'en_IN' => 'អង់គ្លេស (ឥណ្ឌា)',
'en_IO' => 'អង់គ្លេស (ដែនដីអង់គ្លេសនៅមហាសមុទ្រឥណ្ឌា)',
+ 'en_IT' => 'អង់គ្លេស (អ៊ីតាលី)',
'en_JE' => 'អង់គ្លេស (ជើស៊ី)',
'en_JM' => 'អង់គ្លេស (ហ្សាម៉ាអ៊ីក)',
'en_KE' => 'អង់គ្លេស (កេនយ៉ា)',
@@ -167,15 +173,19 @@
'en_NF' => 'អង់គ្លេស (កោះណ័រហ្វក់)',
'en_NG' => 'អង់គ្លេស (នីហ្សេរីយ៉ា)',
'en_NL' => 'អង់គ្លេស (ហូឡង់)',
+ 'en_NO' => 'អង់គ្លេស (ន័រវែស)',
'en_NR' => 'អង់គ្លេស (ណូរូ)',
'en_NU' => 'អង់គ្លេស (ណៀ)',
'en_NZ' => 'អង់គ្លេស (នូវែលសេឡង់)',
'en_PG' => 'អង់គ្លេស (ប៉ាពូអាស៊ីនូវែលហ្គីណេ)',
'en_PH' => 'អង់គ្លេស (ហ្វ៊ីលីពីន)',
'en_PK' => 'អង់គ្លេស (ប៉ាគីស្ថាន)',
+ 'en_PL' => 'អង់គ្លេស (ប៉ូឡូញ)',
'en_PN' => 'អង់គ្លេស (កោះភីតកាន)',
'en_PR' => 'អង់គ្លេស (ព័រតូរីកូ)',
+ 'en_PT' => 'អង់គ្លេស (ព័រទុយហ្កាល់)',
'en_PW' => 'អង់គ្លេស (ផៅឡូ)',
+ 'en_RO' => 'អង់គ្លេស (រូម៉ានី)',
'en_RW' => 'អង់គ្លេស (រវ៉ាន់ដា)',
'en_SB' => 'អង់គ្លេស (កោះសូឡូម៉ុង)',
'en_SC' => 'អង់គ្លេស (សីស្ហែល)',
@@ -184,6 +194,7 @@
'en_SG' => 'អង់គ្លេស (សិង្ហបុរី)',
'en_SH' => 'អង់គ្លេស (សង់ហេឡេណា)',
'en_SI' => 'អង់គ្លេស (ស្លូវេនី)',
+ 'en_SK' => 'អង់គ្លេស (ស្លូវ៉ាគី)',
'en_SL' => 'អង់គ្លេស (សៀរ៉ាឡេអូន)',
'en_SS' => 'អង់គ្លេស (ស៊ូដង់ខាងត្បូង)',
'en_SX' => 'អង់គ្លេស (សីងម៉ាធីន)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/kn.php b/src/Symfony/Component/Intl/Resources/data/locales/kn.php
index 1e06458baee66..ae81ca3499017 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/kn.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/kn.php
@@ -121,29 +121,35 @@
'en_CM' => 'ಇಂಗ್ಲಿಷ್ (ಕ್ಯಾಮರೂನ್)',
'en_CX' => 'ಇಂಗ್ಲಿಷ್ (ಕ್ರಿಸ್ಮಸ್ ದ್ವೀಪ)',
'en_CY' => 'ಇಂಗ್ಲಿಷ್ (ಸೈಪ್ರಸ್)',
+ 'en_CZ' => 'ಇಂಗ್ಲಿಷ್ (ಝೆಕಿಯಾ)',
'en_DE' => 'ಇಂಗ್ಲಿಷ್ (ಜರ್ಮನಿ)',
'en_DK' => 'ಇಂಗ್ಲಿಷ್ (ಡೆನ್ಮಾರ್ಕ್)',
'en_DM' => 'ಇಂಗ್ಲಿಷ್ (ಡೊಮಿನಿಕಾ)',
'en_ER' => 'ಇಂಗ್ಲಿಷ್ (ಎರಿಟ್ರಿಯಾ)',
+ 'en_ES' => 'ಇಂಗ್ಲಿಷ್ (ಸ್ಪೇನ್)',
'en_FI' => 'ಇಂಗ್ಲಿಷ್ (ಫಿನ್ಲ್ಯಾಂಡ್)',
'en_FJ' => 'ಇಂಗ್ಲಿಷ್ (ಫಿಜಿ)',
'en_FK' => 'ಇಂಗ್ಲಿಷ್ (ಫಾಕ್ಲ್ಯಾಂಡ್ ದ್ವೀಪಗಳು)',
'en_FM' => 'ಇಂಗ್ಲಿಷ್ (ಮೈಕ್ರೋನೇಶಿಯಾ)',
+ 'en_FR' => 'ಇಂಗ್ಲಿಷ್ (ಫ್ರಾನ್ಸ್)',
'en_GB' => 'ಇಂಗ್ಲಿಷ್ (ಯುನೈಟೆಡ್ ಕಿಂಗ್ಡಮ್)',
'en_GD' => 'ಇಂಗ್ಲಿಷ್ (ಗ್ರೆನೆಡಾ)',
'en_GG' => 'ಇಂಗ್ಲಿಷ್ (ಗುರ್ನ್ಸೆ)',
'en_GH' => 'ಇಂಗ್ಲಿಷ್ (ಘಾನಾ)',
'en_GI' => 'ಇಂಗ್ಲಿಷ್ (ಗಿಬ್ರಾಲ್ಟರ್)',
'en_GM' => 'ಇಂಗ್ಲಿಷ್ (ಗ್ಯಾಂಬಿಯಾ)',
+ 'en_GS' => 'ಇಂಗ್ಲಿಷ್ (ದಕ್ಷಿಣ ಜಾರ್ಜಿಯಾ ಮತ್ತು ದಕ್ಷಿಣ ಸ್ಯಾಂಡ್ವಿಚ್ ದ್ವೀಪಗಳು)',
'en_GU' => 'ಇಂಗ್ಲಿಷ್ (ಗುವಾಮ್)',
'en_GY' => 'ಇಂಗ್ಲಿಷ್ (ಗಯಾನಾ)',
'en_HK' => 'ಇಂಗ್ಲಿಷ್ (ಹಾಂಗ್ ಕಾಂಗ್ ಎಸ್ಎಆರ್ ಚೈನಾ)',
+ 'en_HU' => 'ಇಂಗ್ಲಿಷ್ (ಹಂಗೇರಿ)',
'en_ID' => 'ಇಂಗ್ಲಿಷ್ (ಇಂಡೋನೇಶಿಯಾ)',
'en_IE' => 'ಇಂಗ್ಲಿಷ್ (ಐರ್ಲೆಂಡ್)',
'en_IL' => 'ಇಂಗ್ಲಿಷ್ (ಇಸ್ರೇಲ್)',
'en_IM' => 'ಇಂಗ್ಲಿಷ್ (ಐಲ್ ಆಫ್ ಮ್ಯಾನ್)',
'en_IN' => 'ಇಂಗ್ಲಿಷ್ (ಭಾರತ)',
'en_IO' => 'ಇಂಗ್ಲಿಷ್ (ಬ್ರಿಟೀಷ್ ಹಿಂದೂ ಮಹಾಸಾಗರದ ಪ್ರದೇಶ)',
+ 'en_IT' => 'ಇಂಗ್ಲಿಷ್ (ಇಟಲಿ)',
'en_JE' => 'ಇಂಗ್ಲಿಷ್ (ಜೆರ್ಸಿ)',
'en_JM' => 'ಇಂಗ್ಲಿಷ್ (ಜಮೈಕಾ)',
'en_KE' => 'ಇಂಗ್ಲಿಷ್ (ಕೀನ್ಯಾ)',
@@ -167,15 +173,19 @@
'en_NF' => 'ಇಂಗ್ಲಿಷ್ (ನಾರ್ಫೋಕ್ ದ್ವೀಪ)',
'en_NG' => 'ಇಂಗ್ಲಿಷ್ (ನೈಜೀರಿಯಾ)',
'en_NL' => 'ಇಂಗ್ಲಿಷ್ (ನೆದರ್ಲ್ಯಾಂಡ್ಸ್)',
+ 'en_NO' => 'ಇಂಗ್ಲಿಷ್ (ನಾರ್ವೆ)',
'en_NR' => 'ಇಂಗ್ಲಿಷ್ (ನೌರು)',
'en_NU' => 'ಇಂಗ್ಲಿಷ್ (ನಿಯು)',
'en_NZ' => 'ಇಂಗ್ಲಿಷ್ (ನ್ಯೂಜಿಲೆಂಡ್)',
'en_PG' => 'ಇಂಗ್ಲಿಷ್ (ಪಪುವಾ ನ್ಯೂಗಿನಿಯಾ)',
'en_PH' => 'ಇಂಗ್ಲಿಷ್ (ಫಿಲಿಫೈನ್ಸ್)',
'en_PK' => 'ಇಂಗ್ಲಿಷ್ (ಪಾಕಿಸ್ತಾನ)',
+ 'en_PL' => 'ಇಂಗ್ಲಿಷ್ (ಪೋಲ್ಯಾಂಡ್)',
'en_PN' => 'ಇಂಗ್ಲಿಷ್ (ಪಿಟ್ಕೈರ್ನ್ ದ್ವೀಪಗಳು)',
'en_PR' => 'ಇಂಗ್ಲಿಷ್ (ಪ್ಯೂರ್ಟೋ ರಿಕೊ)',
+ 'en_PT' => 'ಇಂಗ್ಲಿಷ್ (ಪೋರ್ಚುಗಲ್)',
'en_PW' => 'ಇಂಗ್ಲಿಷ್ (ಪಲಾವು)',
+ 'en_RO' => 'ಇಂಗ್ಲಿಷ್ (ರೊಮೇನಿಯಾ)',
'en_RW' => 'ಇಂಗ್ಲಿಷ್ (ರುವಾಂಡಾ)',
'en_SB' => 'ಇಂಗ್ಲಿಷ್ (ಸಾಲೊಮನ್ ದ್ವೀಪಗಳು)',
'en_SC' => 'ಇಂಗ್ಲಿಷ್ (ಸೀಶೆಲ್ಲೆಸ್)',
@@ -184,6 +194,7 @@
'en_SG' => 'ಇಂಗ್ಲಿಷ್ (ಸಿಂಗಪುರ್)',
'en_SH' => 'ಇಂಗ್ಲಿಷ್ (ಸೇಂಟ್ ಹೆಲೆನಾ)',
'en_SI' => 'ಇಂಗ್ಲಿಷ್ (ಸ್ಲೋವೇನಿಯಾ)',
+ 'en_SK' => 'ಇಂಗ್ಲಿಷ್ (ಸ್ಲೊವಾಕಿಯಾ)',
'en_SL' => 'ಇಂಗ್ಲಿಷ್ (ಸಿಯೆರ್ರಾ ಲಿಯೋನ್)',
'en_SS' => 'ಇಂಗ್ಲಿಷ್ (ದಕ್ಷಿಣ ಸುಡಾನ್)',
'en_SX' => 'ಇಂಗ್ಲಿಷ್ (ಸಿಂಟ್ ಮಾರ್ಟೆನ್)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ko.php b/src/Symfony/Component/Intl/Resources/data/locales/ko.php
index 6310a1dc7e9fb..361cac880efd4 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ko.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ko.php
@@ -121,29 +121,35 @@
'en_CM' => '영어(카메룬)',
'en_CX' => '영어(크리스마스섬)',
'en_CY' => '영어(키프로스)',
+ 'en_CZ' => '영어(체코)',
'en_DE' => '영어(독일)',
'en_DK' => '영어(덴마크)',
'en_DM' => '영어(도미니카)',
'en_ER' => '영어(에리트리아)',
+ 'en_ES' => '영어(스페인)',
'en_FI' => '영어(핀란드)',
'en_FJ' => '영어(피지)',
'en_FK' => '영어(포클랜드 제도)',
'en_FM' => '영어(미크로네시아)',
+ 'en_FR' => '영어(프랑스)',
'en_GB' => '영어(영국)',
'en_GD' => '영어(그레나다)',
'en_GG' => '영어(건지)',
'en_GH' => '영어(가나)',
'en_GI' => '영어(지브롤터)',
'en_GM' => '영어(감비아)',
+ 'en_GS' => '영어(사우스조지아 사우스샌드위치 제도)',
'en_GU' => '영어(괌)',
'en_GY' => '영어(가이아나)',
'en_HK' => '영어(홍콩[중국 특별행정구])',
+ 'en_HU' => '영어(헝가리)',
'en_ID' => '영어(인도네시아)',
'en_IE' => '영어(아일랜드)',
'en_IL' => '영어(이스라엘)',
'en_IM' => '영어(맨섬)',
'en_IN' => '영어(인도)',
'en_IO' => '영어(영국령 인도양 지역)',
+ 'en_IT' => '영어(이탈리아)',
'en_JE' => '영어(저지)',
'en_JM' => '영어(자메이카)',
'en_KE' => '영어(케냐)',
@@ -167,15 +173,19 @@
'en_NF' => '영어(노퍽섬)',
'en_NG' => '영어(나이지리아)',
'en_NL' => '영어(네덜란드)',
+ 'en_NO' => '영어(노르웨이)',
'en_NR' => '영어(나우루)',
'en_NU' => '영어(니우에)',
'en_NZ' => '영어(뉴질랜드)',
'en_PG' => '영어(파푸아뉴기니)',
'en_PH' => '영어(필리핀)',
'en_PK' => '영어(파키스탄)',
+ 'en_PL' => '영어(폴란드)',
'en_PN' => '영어(핏케언 제도)',
'en_PR' => '영어(푸에르토리코)',
+ 'en_PT' => '영어(포르투갈)',
'en_PW' => '영어(팔라우)',
+ 'en_RO' => '영어(루마니아)',
'en_RW' => '영어(르완다)',
'en_SB' => '영어(솔로몬 제도)',
'en_SC' => '영어(세이셸)',
@@ -184,6 +194,7 @@
'en_SG' => '영어(싱가포르)',
'en_SH' => '영어(세인트헬레나)',
'en_SI' => '영어(슬로베니아)',
+ 'en_SK' => '영어(슬로바키아)',
'en_SL' => '영어(시에라리온)',
'en_SS' => '영어(남수단)',
'en_SX' => '영어(신트마르턴)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ks.php b/src/Symfony/Component/Intl/Resources/data/locales/ks.php
index de1a105d9ab83..3319ba86cb728 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ks.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ks.php
@@ -121,28 +121,34 @@
'en_CM' => 'اَنگیٖزؠ (کیمِروٗن)',
'en_CX' => 'اَنگیٖزؠ (کرِسمَس جٔزیٖرٕ)',
'en_CY' => 'اَنگیٖزؠ (سائپرس)',
+ 'en_CZ' => 'اَنگیٖزؠ (چیکیا)',
'en_DE' => 'اَنگیٖزؠ (جرمٔنی)',
'en_DK' => 'اَنگیٖزؠ (ڈینمارٕک)',
'en_DM' => 'اَنگیٖزؠ (ڈومِنِکا)',
'en_ER' => 'اَنگیٖزؠ (اِرٕٹِیا)',
+ 'en_ES' => 'اَنگیٖزؠ (سٕپین)',
'en_FI' => 'اَنگیٖزؠ (فِن لینڈ)',
'en_FJ' => 'اَنگیٖزؠ (فِجی)',
'en_FK' => 'اَنگیٖزؠ (فٕلاکلینڑ جٔزیٖرٕ)',
'en_FM' => 'اَنگیٖزؠ (مائیکرونیشیا)',
+ 'en_FR' => 'اَنگیٖزؠ (فرانس)',
'en_GB' => 'اَنگیٖزؠ (متحدہ مملِکت)',
'en_GD' => 'اَنگیٖزؠ (گرینیڈا)',
'en_GG' => 'اَنگیٖزؠ (گورنسے)',
'en_GH' => 'اَنگیٖزؠ (گانا)',
'en_GI' => 'اَنگیٖزؠ (جِبرالٹَر)',
'en_GM' => 'اَنگیٖزؠ (گَمبِیا)',
+ 'en_GS' => 'اَنگیٖزؠ (جنوٗبی جارجِیا تہٕ جنوٗبی سینڑوٕچ جٔزیٖرٕ)',
'en_GU' => 'اَنگیٖزؠ (گُوام)',
'en_GY' => 'اَنگیٖزؠ (گُیانا)',
'en_HK' => 'اَنگیٖزؠ (ہانگ کانگ ایس اے آر چیٖن)',
+ 'en_HU' => 'اَنگیٖزؠ (ہَنگری)',
'en_ID' => 'اَنگیٖزؠ (انڈونیشیا)',
'en_IE' => 'اَنگیٖزؠ (اَیَرلینڑ)',
'en_IL' => 'اَنگیٖزؠ (اسرا ییل)',
'en_IM' => 'اَنگیٖزؠ (آیِل آف مین)',
'en_IN' => 'اَنگیٖزؠ (ہِندوستان)',
+ 'en_IT' => 'اَنگیٖزؠ (اِٹلی)',
'en_JE' => 'اَنگیٖزؠ (جٔرسی)',
'en_JM' => 'اَنگیٖزؠ (جَمایکا)',
'en_KE' => 'اَنگیٖزؠ (کِنیا)',
@@ -166,15 +172,19 @@
'en_NF' => 'اَنگیٖزؠ (نارفاک جٔزیٖرٕ)',
'en_NG' => 'اَنگیٖزؠ (نایجیرِیا)',
'en_NL' => 'اَنگیٖزؠ (نیٖدَرلینڑ)',
+ 'en_NO' => 'اَنگیٖزؠ (ناروے)',
'en_NR' => 'اَنگیٖزؠ (نارووٗ)',
'en_NU' => 'اَنگیٖزؠ (نیوٗ)',
'en_NZ' => 'اَنگیٖزؠ (نیوزی لینڈ)',
'en_PG' => 'اَنگیٖزؠ (پاپُوا نیوٗ گیٖنی)',
'en_PH' => 'اَنگیٖزؠ (فلپائن)',
'en_PK' => 'اَنگیٖزؠ (پاکِستان)',
+ 'en_PL' => 'اَنگیٖزؠ (پولینڈ)',
'en_PN' => 'اَنگیٖزؠ (پِٹکیرٕنؠ جٔزیٖرٕ)',
'en_PR' => 'اَنگیٖزؠ (پٔرٹو رِکو)',
+ 'en_PT' => 'اَنگیٖزؠ (پُرتِگال)',
'en_PW' => 'اَنگیٖزؠ (پَلاو)',
+ 'en_RO' => 'اَنگیٖزؠ (رومانِیا)',
'en_RW' => 'اَنگیٖزؠ (روٗوانڈا)',
'en_SB' => 'اَنگیٖزؠ (سولامان جٔزیٖرٕ)',
'en_SC' => 'اَنگیٖزؠ (سیشَلِس)',
@@ -183,6 +193,7 @@
'en_SG' => 'اَنگیٖزؠ (سِنگاپوٗر)',
'en_SH' => 'اَنگیٖزؠ (سینٹ ہؠلِنا)',
'en_SI' => 'اَنگیٖزؠ (سَلووینِیا)',
+ 'en_SK' => 'اَنگیٖزؠ (سَلوواکِیا)',
'en_SL' => 'اَنگیٖزؠ (سیرا لیون)',
'en_SS' => 'اَنگیٖزؠ (جنوبی سوڈان)',
'en_SX' => 'اَنگیٖزؠ (سِنٹ مارٹِن)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ks_Deva.php b/src/Symfony/Component/Intl/Resources/data/locales/ks_Deva.php
index 86a9b7907d63c..11590da23ea57 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ks_Deva.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ks_Deva.php
@@ -51,28 +51,34 @@
'en_CM' => 'अंगरिज़ी (کیمِروٗن)',
'en_CX' => 'अंगरिज़ी (کرِسمَس جٔزیٖرٕ)',
'en_CY' => 'अंगरिज़ी (سائپرس)',
+ 'en_CZ' => 'अंगरिज़ी (چیکیا)',
'en_DE' => 'अंगरिज़ी (जर्मन)',
'en_DK' => 'अंगरिज़ी (ڈینمارٕک)',
'en_DM' => 'अंगरिज़ी (ڈومِنِکا)',
'en_ER' => 'अंगरिज़ी (اِرٕٹِیا)',
+ 'en_ES' => 'अंगरिज़ी (سٕپین)',
'en_FI' => 'अंगरिज़ी (فِن لینڈ)',
'en_FJ' => 'अंगरिज़ी (فِجی)',
'en_FK' => 'अंगरिज़ी (فٕلاکلینڑ جٔزیٖرٕ)',
'en_FM' => 'अंगरिज़ी (مائیکرونیشیا)',
+ 'en_FR' => 'अंगरिज़ी (फ्रांस)',
'en_GB' => 'अंगरिज़ी (मुतहीद बादशाहत)',
'en_GD' => 'अंगरिज़ी (گرینیڈا)',
'en_GG' => 'अंगरिज़ी (گورنسے)',
'en_GH' => 'अंगरिज़ी (گانا)',
'en_GI' => 'अंगरिज़ी (جِبرالٹَر)',
'en_GM' => 'अंगरिज़ी (گَمبِیا)',
+ 'en_GS' => 'अंगरिज़ी (جنوٗبی جارجِیا تہٕ جنوٗبی سینڑوٕچ جٔزیٖرٕ)',
'en_GU' => 'अंगरिज़ी (گُوام)',
'en_GY' => 'अंगरिज़ी (گُیانا)',
'en_HK' => 'अंगरिज़ी (ہانگ کانگ ایس اے آر چیٖن)',
+ 'en_HU' => 'अंगरिज़ी (ہَنگری)',
'en_ID' => 'अंगरिज़ी (انڈونیشیا)',
'en_IE' => 'अंगरिज़ी (اَیَرلینڑ)',
'en_IL' => 'अंगरिज़ी (اسرا ییل)',
'en_IM' => 'अंगरिज़ी (آیِل آف مین)',
'en_IN' => 'अंगरिज़ी (हिंदोस्तान)',
+ 'en_IT' => 'अंगरिज़ी (इटली)',
'en_JE' => 'अंगरिज़ी (جٔرسی)',
'en_JM' => 'अंगरिज़ी (جَمایکا)',
'en_KE' => 'अंगरिज़ी (کِنیا)',
@@ -96,15 +102,19 @@
'en_NF' => 'अंगरिज़ी (نارفاک جٔزیٖرٕ)',
'en_NG' => 'अंगरिज़ी (نایجیرِیا)',
'en_NL' => 'अंगरिज़ी (نیٖدَرلینڑ)',
+ 'en_NO' => 'अंगरिज़ी (ناروے)',
'en_NR' => 'अंगरिज़ी (نارووٗ)',
'en_NU' => 'अंगरिज़ी (نیوٗ)',
'en_NZ' => 'अंगरिज़ी (نیوزی لینڈ)',
'en_PG' => 'अंगरिज़ी (پاپُوا نیوٗ گیٖنی)',
'en_PH' => 'अंगरिज़ी (فلپائن)',
'en_PK' => 'अंगरिज़ी (پاکِستان)',
+ 'en_PL' => 'अंगरिज़ी (پولینڈ)',
'en_PN' => 'अंगरिज़ी (پِٹکیرٕنؠ جٔزیٖرٕ)',
'en_PR' => 'अंगरिज़ी (پٔرٹو رِکو)',
+ 'en_PT' => 'अंगरिज़ी (پُرتِگال)',
'en_PW' => 'अंगरिज़ी (پَلاو)',
+ 'en_RO' => 'अंगरिज़ी (رومانِیا)',
'en_RW' => 'अंगरिज़ी (روٗوانڈا)',
'en_SB' => 'अंगरिज़ी (سولامان جٔزیٖرٕ)',
'en_SC' => 'अंगरिज़ी (سیشَلِس)',
@@ -113,6 +123,7 @@
'en_SG' => 'अंगरिज़ी (سِنگاپوٗر)',
'en_SH' => 'अंगरिज़ी (سینٹ ہؠلِنا)',
'en_SI' => 'अंगरिज़ी (سَلووینِیا)',
+ 'en_SK' => 'अंगरिज़ी (سَلوواکِیا)',
'en_SL' => 'अंगरिज़ी (سیرا لیون)',
'en_SS' => 'अंगरिज़ी (جنوبی سوڈان)',
'en_SX' => 'अंगरिज़ी (سِنٹ مارٹِن)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ku.php b/src/Symfony/Component/Intl/Resources/data/locales/ku.php
index dabeac60c074d..498ece74e15fc 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ku.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ku.php
@@ -121,29 +121,35 @@
'en_CM' => 'îngilîzî (Kamerûn)',
'en_CX' => 'îngilîzî (Girava Christmasê)',
'en_CY' => 'îngilîzî (Qibris)',
+ 'en_CZ' => 'îngilîzî (Çekya)',
'en_DE' => 'îngilîzî (Almanya)',
'en_DK' => 'îngilîzî (Danîmarka)',
'en_DM' => 'îngilîzî (Domînîka)',
'en_ER' => 'îngilîzî (Erître)',
+ 'en_ES' => 'îngilîzî (Spanya)',
'en_FI' => 'îngilîzî (Fînlenda)',
'en_FJ' => 'îngilîzî (Fîjî)',
'en_FK' => 'îngilîzî (Giravên Falklandê)',
'en_FM' => 'îngilîzî (Mîkronezya)',
+ 'en_FR' => 'îngilîzî (Fransa)',
'en_GB' => 'îngilîzî (Qiralîyeta Yekbûyî)',
'en_GD' => 'îngilîzî (Grenada)',
'en_GG' => 'îngilîzî (Guernsey)',
'en_GH' => 'îngilîzî (Gana)',
'en_GI' => 'îngilîzî (Cebelîtariq)',
'en_GM' => 'îngilîzî (Gambîya)',
+ 'en_GS' => 'îngilîzî (Giravên Georgîyaya Başûr û Sandwicha Başûr)',
'en_GU' => 'îngilîzî (Guam)',
'en_GY' => 'îngilîzî (Guyana)',
'en_HK' => 'îngilîzî (Hong Konga HîT ya Çînê)',
+ 'en_HU' => 'îngilîzî (Macaristan)',
'en_ID' => 'îngilîzî (Endonezya)',
'en_IE' => 'îngilîzî (Îrlanda)',
'en_IL' => 'îngilîzî (Îsraîl)',
'en_IM' => 'îngilîzî (Girava Manê)',
'en_IN' => 'îngilîzî (Hindistan)',
'en_IO' => 'îngilîzî (Herêma Okyanûsa Hindî ya Brîtanyayê)',
+ 'en_IT' => 'îngilîzî (Îtalya)',
'en_JE' => 'îngilîzî (Jersey)',
'en_JM' => 'îngilîzî (Jamaîka)',
'en_KE' => 'îngilîzî (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'îngilîzî (Girava Norfolkê)',
'en_NG' => 'îngilîzî (Nîjerya)',
'en_NL' => 'îngilîzî (Holanda)',
+ 'en_NO' => 'îngilîzî (Norwêc)',
'en_NR' => 'îngilîzî (Naûrû)',
'en_NU' => 'îngilîzî (Niûe)',
'en_NZ' => 'îngilîzî (Zelandaya Nû)',
'en_PG' => 'îngilîzî (Papua Gîneya Nû)',
'en_PH' => 'îngilîzî (Fîlîpîn)',
'en_PK' => 'îngilîzî (Pakistan)',
+ 'en_PL' => 'îngilîzî (Polonya)',
'en_PN' => 'îngilîzî (Giravên Pitcairnê)',
'en_PR' => 'îngilîzî (Porto Rîko)',
+ 'en_PT' => 'îngilîzî (Portûgal)',
'en_PW' => 'îngilîzî (Palau)',
+ 'en_RO' => 'îngilîzî (Romanya)',
'en_RW' => 'îngilîzî (Rwanda)',
'en_SB' => 'îngilîzî (Giravên Solomonê)',
'en_SC' => 'îngilîzî (Seyşel)',
@@ -184,6 +194,7 @@
'en_SG' => 'îngilîzî (Sîngapûr)',
'en_SH' => 'îngilîzî (Saint Helena)',
'en_SI' => 'îngilîzî (Slovenya)',
+ 'en_SK' => 'îngilîzî (Slovakya)',
'en_SL' => 'îngilîzî (Sierra Leone)',
'en_SS' => 'îngilîzî (Sûdana Başûr)',
'en_SX' => 'îngilîzî (Sint Marteen)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ky.php b/src/Symfony/Component/Intl/Resources/data/locales/ky.php
index 8b1d6bfdf919d..a823800edaf92 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ky.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ky.php
@@ -121,29 +121,35 @@
'en_CM' => 'англисче (Камерун)',
'en_CX' => 'англисче (Рождество аралы)',
'en_CY' => 'англисче (Кипр)',
+ 'en_CZ' => 'англисче (Чехия)',
'en_DE' => 'англисче (Германия)',
'en_DK' => 'англисче (Дания)',
'en_DM' => 'англисче (Доминика)',
'en_ER' => 'англисче (Эритрея)',
+ 'en_ES' => 'англисче (Испания)',
'en_FI' => 'англисче (Финляндия)',
'en_FJ' => 'англисче (Фиджи)',
'en_FK' => 'англисче (Фолкленд аралдары)',
'en_FM' => 'англисче (Микронезия)',
+ 'en_FR' => 'англисче (Франция)',
'en_GB' => 'англисче (Улуу Британия)',
'en_GD' => 'англисче (Гренада)',
'en_GG' => 'англисче (Гернси)',
'en_GH' => 'англисче (Гана)',
'en_GI' => 'англисче (Гибралтар)',
'en_GM' => 'англисче (Гамбия)',
+ 'en_GS' => 'англисче (Түштүк Жоржия жана Түштүк Сэндвич аралдары)',
'en_GU' => 'англисче (Гуам)',
'en_GY' => 'англисче (Гайана)',
'en_HK' => 'англисче (Гонконг Кытай ААА)',
+ 'en_HU' => 'англисче (Венгрия)',
'en_ID' => 'англисче (Индонезия)',
'en_IE' => 'англисче (Ирландия)',
'en_IL' => 'англисче (Израиль)',
'en_IM' => 'англисче (Мэн аралы)',
'en_IN' => 'англисче (Индия)',
'en_IO' => 'англисче (Инди океанындагы Британ территориясы)',
+ 'en_IT' => 'англисче (Италия)',
'en_JE' => 'англисче (Жерси)',
'en_JM' => 'англисче (Ямайка)',
'en_KE' => 'англисче (Кения)',
@@ -167,15 +173,19 @@
'en_NF' => 'англисче (Норфолк аралы)',
'en_NG' => 'англисче (Нигерия)',
'en_NL' => 'англисче (Нидерланд)',
+ 'en_NO' => 'англисче (Норвегия)',
'en_NR' => 'англисче (Науру)',
'en_NU' => 'англисче (Ниуэ)',
'en_NZ' => 'англисче (Жаңы Зеландия)',
'en_PG' => 'англисче (Папуа-Жаңы Гвинея)',
'en_PH' => 'англисче (Филиппин)',
'en_PK' => 'англисче (Пакистан)',
+ 'en_PL' => 'англисче (Польша)',
'en_PN' => 'англисче (Питкэрн аралдары)',
'en_PR' => 'англисче (Пуэрто-Рико)',
+ 'en_PT' => 'англисче (Португалия)',
'en_PW' => 'англисче (Палау)',
+ 'en_RO' => 'англисче (Румыния)',
'en_RW' => 'англисче (Руанда)',
'en_SB' => 'англисче (Соломон аралдары)',
'en_SC' => 'англисче (Сейшел аралдары)',
@@ -184,6 +194,7 @@
'en_SG' => 'англисче (Сингапур)',
'en_SH' => 'англисче (Ыйык Елена)',
'en_SI' => 'англисче (Словения)',
+ 'en_SK' => 'англисче (Словакия)',
'en_SL' => 'англисче (Сьерра-Леоне)',
'en_SS' => 'англисче (Түштүк Судан)',
'en_SX' => 'англисче (Синт-Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/lb.php b/src/Symfony/Component/Intl/Resources/data/locales/lb.php
index 9192eb856f9c1..5d6e9b5f19c3f 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/lb.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/lb.php
@@ -121,28 +121,34 @@
'en_CM' => 'Englesch (Kamerun)',
'en_CX' => 'Englesch (Chrëschtdagsinsel)',
'en_CY' => 'Englesch (Zypern)',
+ 'en_CZ' => 'Englesch (Tschechien)',
'en_DE' => 'Englesch (Däitschland)',
'en_DK' => 'Englesch (Dänemark)',
'en_DM' => 'Englesch (Dominica)',
'en_ER' => 'Englesch (Eritrea)',
+ 'en_ES' => 'Englesch (Spanien)',
'en_FI' => 'Englesch (Finnland)',
'en_FJ' => 'Englesch (Fidschi)',
'en_FK' => 'Englesch (Falklandinselen)',
'en_FM' => 'Englesch (Mikronesien)',
+ 'en_FR' => 'Englesch (Frankräich)',
'en_GB' => 'Englesch (Groussbritannien)',
'en_GD' => 'Englesch (Grenada)',
'en_GG' => 'Englesch (Guernsey)',
'en_GH' => 'Englesch (Ghana)',
'en_GI' => 'Englesch (Gibraltar)',
'en_GM' => 'Englesch (Gambia)',
+ 'en_GS' => 'Englesch (Südgeorgien an déi Südlech Sandwichinselen)',
'en_GU' => 'Englesch (Guam)',
'en_GY' => 'Englesch (Guyana)',
'en_HK' => 'Englesch (Spezialverwaltungszon Hong Kong)',
+ 'en_HU' => 'Englesch (Ungarn)',
'en_ID' => 'Englesch (Indonesien)',
'en_IE' => 'Englesch (Irland)',
'en_IL' => 'Englesch (Israel)',
'en_IM' => 'Englesch (Isle of Man)',
'en_IN' => 'Englesch (Indien)',
+ 'en_IT' => 'Englesch (Italien)',
'en_JE' => 'Englesch (Jersey)',
'en_JM' => 'Englesch (Jamaika)',
'en_KE' => 'Englesch (Kenia)',
@@ -166,15 +172,19 @@
'en_NF' => 'Englesch (Norfolkinsel)',
'en_NG' => 'Englesch (Nigeria)',
'en_NL' => 'Englesch (Holland)',
+ 'en_NO' => 'Englesch (Norwegen)',
'en_NR' => 'Englesch (Nauru)',
'en_NU' => 'Englesch (Niue)',
'en_NZ' => 'Englesch (Neiséiland)',
'en_PG' => 'Englesch (Papua-Neiguinea)',
'en_PH' => 'Englesch (Philippinnen)',
'en_PK' => 'Englesch (Pakistan)',
+ 'en_PL' => 'Englesch (Polen)',
'en_PN' => 'Englesch (Pitcairninselen)',
'en_PR' => 'Englesch (Puerto Rico)',
+ 'en_PT' => 'Englesch (Portugal)',
'en_PW' => 'Englesch (Palau)',
+ 'en_RO' => 'Englesch (Rumänien)',
'en_RW' => 'Englesch (Ruanda)',
'en_SB' => 'Englesch (Salomonen)',
'en_SC' => 'Englesch (Seychellen)',
@@ -183,6 +193,7 @@
'en_SG' => 'Englesch (Singapur)',
'en_SH' => 'Englesch (St. Helena)',
'en_SI' => 'Englesch (Slowenien)',
+ 'en_SK' => 'Englesch (Slowakei)',
'en_SL' => 'Englesch (Sierra Leone)',
'en_SS' => 'Englesch (Südsudan)',
'en_SX' => 'Englesch (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/lg.php b/src/Symfony/Component/Intl/Resources/data/locales/lg.php
index 4199d4b607f85..0da7e0faff1d7 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/lg.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/lg.php
@@ -71,14 +71,17 @@
'en_CK' => 'Lungereza (Bizinga bya Kkuki)',
'en_CM' => 'Lungereza (Kameruuni)',
'en_CY' => 'Lungereza (Sipuriya)',
+ 'en_CZ' => 'Lungereza (Lipubulika ya Ceeka)',
'en_DE' => 'Lungereza (Budaaki)',
'en_DK' => 'Lungereza (Denimaaka)',
'en_DM' => 'Lungereza (Dominika)',
'en_ER' => 'Lungereza (Eritureya)',
+ 'en_ES' => 'Lungereza (Sipeyini)',
'en_FI' => 'Lungereza (Finilandi)',
'en_FJ' => 'Lungereza (Fiji)',
'en_FK' => 'Lungereza (Bizinga by’eFalikalandi)',
'en_FM' => 'Lungereza (Mikuronezya)',
+ 'en_FR' => 'Lungereza (Bufalansa)',
'en_GB' => 'Lungereza (Bungereza)',
'en_GD' => 'Lungereza (Gurenada)',
'en_GH' => 'Lungereza (Gana)',
@@ -86,10 +89,12 @@
'en_GM' => 'Lungereza (Gambya)',
'en_GU' => 'Lungereza (Gwamu)',
'en_GY' => 'Lungereza (Gayana)',
+ 'en_HU' => 'Lungereza (Hangare)',
'en_ID' => 'Lungereza (Yindonezya)',
'en_IE' => 'Lungereza (Ayalandi)',
'en_IL' => 'Lungereza (Yisirayeri)',
'en_IN' => 'Lungereza (Buyindi)',
+ 'en_IT' => 'Lungereza (Yitale)',
'en_JM' => 'Lungereza (Jamayika)',
'en_KE' => 'Lungereza (Kenya)',
'en_KI' => 'Lungereza (Kiribati)',
@@ -111,15 +116,19 @@
'en_NF' => 'Lungereza (Kizinga ky’eNorofoko)',
'en_NG' => 'Lungereza (Nayijerya)',
'en_NL' => 'Lungereza (Holandi)',
+ 'en_NO' => 'Lungereza (Nowe)',
'en_NR' => 'Lungereza (Nawuru)',
'en_NU' => 'Lungereza (Niyuwe)',
'en_NZ' => 'Lungereza (Niyuziirandi)',
'en_PG' => 'Lungereza (Papwa Nyugini)',
'en_PH' => 'Lungereza (Bizinga bya Firipino)',
'en_PK' => 'Lungereza (Pakisitaani)',
+ 'en_PL' => 'Lungereza (Polandi)',
'en_PN' => 'Lungereza (Pitikeeni)',
'en_PR' => 'Lungereza (Potoriko)',
+ 'en_PT' => 'Lungereza (Potugaali)',
'en_PW' => 'Lungereza (Palawu)',
+ 'en_RO' => 'Lungereza (Lomaniya)',
'en_RW' => 'Lungereza (Rwanda)',
'en_SB' => 'Lungereza (Bizanga by’eSolomooni)',
'en_SC' => 'Lungereza (Sesere)',
@@ -128,6 +137,7 @@
'en_SG' => 'Lungereza (Singapowa)',
'en_SH' => 'Lungereza (Senti Herena)',
'en_SI' => 'Lungereza (Sirovenya)',
+ 'en_SK' => 'Lungereza (Sirovakya)',
'en_SL' => 'Lungereza (Siyeralewone)',
'en_SZ' => 'Lungereza (Swazirandi)',
'en_TC' => 'Lungereza (Bizinga by’eTaaka ne Kayikosi)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ln.php b/src/Symfony/Component/Intl/Resources/data/locales/ln.php
index 6b5a85573208b..0b9f2353c4db0 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ln.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ln.php
@@ -71,26 +71,32 @@
'en_CK' => 'lingɛlɛ́sa (Bisanga bya Kookɛ)',
'en_CM' => 'lingɛlɛ́sa (Kamɛrune)',
'en_CY' => 'lingɛlɛ́sa (Sípɛlɛ)',
+ 'en_CZ' => 'lingɛlɛ́sa (Shekia)',
'en_DE' => 'lingɛlɛ́sa (Alemani)',
'en_DK' => 'lingɛlɛ́sa (Danɛmarike)',
'en_DM' => 'lingɛlɛ́sa (Domínike)',
'en_ER' => 'lingɛlɛ́sa (Elitelɛ)',
+ 'en_ES' => 'lingɛlɛ́sa (Esipanye)',
'en_FI' => 'lingɛlɛ́sa (Filandɛ)',
'en_FJ' => 'lingɛlɛ́sa (Fidzi)',
'en_FK' => 'lingɛlɛ́sa (Bisanga bya Maluni)',
'en_FM' => 'lingɛlɛ́sa (Mikronezi)',
+ 'en_FR' => 'lingɛlɛ́sa (Falánsɛ)',
'en_GB' => 'lingɛlɛ́sa (Angɛlɛtɛ́lɛ)',
'en_GD' => 'lingɛlɛ́sa (Gelenadɛ)',
'en_GG' => 'lingɛlɛ́sa (Guernesey)',
'en_GH' => 'lingɛlɛ́sa (Gana)',
'en_GI' => 'lingɛlɛ́sa (Zibatalɛ)',
'en_GM' => 'lingɛlɛ́sa (Gambi)',
+ 'en_GS' => 'lingɛlɛ́sa (Îles de Géorgie du Sud et Sandwich du Sud)',
'en_GU' => 'lingɛlɛ́sa (Gwamɛ)',
'en_GY' => 'lingɛlɛ́sa (Giyane)',
+ 'en_HU' => 'lingɛlɛ́sa (Ongili)',
'en_ID' => 'lingɛlɛ́sa (Indonezi)',
'en_IE' => 'lingɛlɛ́sa (Irelandɛ)',
'en_IL' => 'lingɛlɛ́sa (Isirayelɛ)',
'en_IN' => 'lingɛlɛ́sa (Índɛ)',
+ 'en_IT' => 'lingɛlɛ́sa (Itali)',
'en_JM' => 'lingɛlɛ́sa (Zamaiki)',
'en_KE' => 'lingɛlɛ́sa (Kenya)',
'en_KI' => 'lingɛlɛ́sa (Kiribati)',
@@ -112,15 +118,19 @@
'en_NF' => 'lingɛlɛ́sa (Esanga Norfokɛ)',
'en_NG' => 'lingɛlɛ́sa (Nizerya)',
'en_NL' => 'lingɛlɛ́sa (Olandɛ)',
+ 'en_NO' => 'lingɛlɛ́sa (Norivezɛ)',
'en_NR' => 'lingɛlɛ́sa (Nauru)',
'en_NU' => 'lingɛlɛ́sa (Nyué)',
'en_NZ' => 'lingɛlɛ́sa (Zelandɛ ya sika)',
'en_PG' => 'lingɛlɛ́sa (Papwazi Ginɛ ya sika)',
'en_PH' => 'lingɛlɛ́sa (Filipinɛ)',
'en_PK' => 'lingɛlɛ́sa (Pakisitá)',
+ 'en_PL' => 'lingɛlɛ́sa (Poloni)',
'en_PN' => 'lingɛlɛ́sa (Pikairni)',
'en_PR' => 'lingɛlɛ́sa (Pɔtoriko)',
+ 'en_PT' => 'lingɛlɛ́sa (Putúlugɛsi)',
'en_PW' => 'lingɛlɛ́sa (Palau)',
+ 'en_RO' => 'lingɛlɛ́sa (Romani)',
'en_RW' => 'lingɛlɛ́sa (Rwanda)',
'en_SB' => 'lingɛlɛ́sa (Bisanga Solomɔ)',
'en_SC' => 'lingɛlɛ́sa (Sɛshɛlɛ)',
@@ -129,6 +139,7 @@
'en_SG' => 'lingɛlɛ́sa (Singapurɛ)',
'en_SH' => 'lingɛlɛ́sa (Sántu eleni)',
'en_SI' => 'lingɛlɛ́sa (Siloveni)',
+ 'en_SK' => 'lingɛlɛ́sa (Silovaki)',
'en_SL' => 'lingɛlɛ́sa (Siera Leonɛ)',
'en_SZ' => 'lingɛlɛ́sa (Swazilandi)',
'en_TC' => 'lingɛlɛ́sa (Bisanga bya Turki mpé Kaiko)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/lo.php b/src/Symfony/Component/Intl/Resources/data/locales/lo.php
index 7931dfaf9a37b..2f551a2141492 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/lo.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/lo.php
@@ -121,29 +121,35 @@
'en_CM' => 'ອັງກິດ (ຄາເມຣູນ)',
'en_CX' => 'ອັງກິດ (ເກາະຄຣິສມາດ)',
'en_CY' => 'ອັງກິດ (ໄຊປຣັສ)',
+ 'en_CZ' => 'ອັງກິດ (ເຊັກເຊຍ)',
'en_DE' => 'ອັງກິດ (ເຢຍລະມັນ)',
'en_DK' => 'ອັງກິດ (ເດນມາກ)',
'en_DM' => 'ອັງກິດ (ໂດມີນິຄາ)',
'en_ER' => 'ອັງກິດ (ເອຣິເທຣຍ)',
+ 'en_ES' => 'ອັງກິດ (ສະເປນ)',
'en_FI' => 'ອັງກິດ (ຟິນແລນ)',
'en_FJ' => 'ອັງກິດ (ຟິຈິ)',
'en_FK' => 'ອັງກິດ (ຫມູ່ເກາະຟອກແລນ)',
'en_FM' => 'ອັງກິດ (ໄມໂຄຣນີເຊຍ)',
+ 'en_FR' => 'ອັງກິດ (ຝຣັ່ງ)',
'en_GB' => 'ອັງກິດ (ສະຫະລາດຊະອະນາຈັກ)',
'en_GD' => 'ອັງກິດ (ເກຣເນດາ)',
'en_GG' => 'ອັງກິດ (ເກີນຊີ)',
'en_GH' => 'ອັງກິດ (ການາ)',
'en_GI' => 'ອັງກິດ (ຈິບບຣອນທາ)',
'en_GM' => 'ອັງກິດ (ສາທາລະນະລັດແກມເບຍ)',
+ 'en_GS' => 'ອັງກິດ (ໝູ່ເກາະ ຈໍເຈຍຕອນໃຕ້ ແລະ ແຊນວິດຕອນໃຕ້)',
'en_GU' => 'ອັງກິດ (ກວາມ)',
'en_GY' => 'ອັງກິດ (ກາຍຢານາ)',
'en_HK' => 'ອັງກິດ (ຮົງກົງ ເຂດປົກຄອງພິເສດ ຈີນ)',
+ 'en_HU' => 'ອັງກິດ (ຮັງກາຣີ)',
'en_ID' => 'ອັງກິດ (ອິນໂດເນເຊຍ)',
'en_IE' => 'ອັງກິດ (ໄອແລນ)',
'en_IL' => 'ອັງກິດ (ອິສຣາເອວ)',
'en_IM' => 'ອັງກິດ (ເອວ ອອບ ແມນ)',
'en_IN' => 'ອັງກິດ (ອິນເດຍ)',
'en_IO' => 'ອັງກິດ (ເຂດແດນອັງກິດໃນມະຫາສະໝຸດອິນເດຍ)',
+ 'en_IT' => 'ອັງກິດ (ອິຕາລີ)',
'en_JE' => 'ອັງກິດ (ເຈີຊີ)',
'en_JM' => 'ອັງກິດ (ຈາໄມຄາ)',
'en_KE' => 'ອັງກິດ (ເຄນຢາ)',
@@ -167,15 +173,19 @@
'en_NF' => 'ອັງກິດ (ເກາະນໍໂຟກ)',
'en_NG' => 'ອັງກິດ (ໄນຈີເຣຍ)',
'en_NL' => 'ອັງກິດ (ເນເທີແລນ)',
+ 'en_NO' => 'ອັງກິດ (ນໍເວ)',
'en_NR' => 'ອັງກິດ (ນາອູຣູ)',
'en_NU' => 'ອັງກິດ (ນີອູເອ)',
'en_NZ' => 'ອັງກິດ (ນິວຊີແລນ)',
'en_PG' => 'ອັງກິດ (ປາປົວນິວກີນີ)',
'en_PH' => 'ອັງກິດ (ຟິລິບປິນ)',
'en_PK' => 'ອັງກິດ (ປາກິດສະຖານ)',
+ 'en_PL' => 'ອັງກິດ (ໂປແລນ)',
'en_PN' => 'ອັງກິດ (ໝູ່ເກາະພິດແຄນ)',
'en_PR' => 'ອັງກິດ (ເພືອໂຕ ຣິໂກ)',
+ 'en_PT' => 'ອັງກິດ (ພອລທູໂກ)',
'en_PW' => 'ອັງກິດ (ປາລາວ)',
+ 'en_RO' => 'ອັງກິດ (ໂຣແມເນຍ)',
'en_RW' => 'ອັງກິດ (ຣວັນດາ)',
'en_SB' => 'ອັງກິດ (ຫມູ່ເກາະໂຊໂລມອນ)',
'en_SC' => 'ອັງກິດ (ເຊເຊວເລສ)',
@@ -184,6 +194,7 @@
'en_SG' => 'ອັງກິດ (ສິງກະໂປ)',
'en_SH' => 'ອັງກິດ (ເຊນ ເຮເລນາ)',
'en_SI' => 'ອັງກິດ (ສະໂລເວເນຍ)',
+ 'en_SK' => 'ອັງກິດ (ສະໂລວາເກຍ)',
'en_SL' => 'ອັງກິດ (ເຊຍຣາ ລີໂອນ)',
'en_SS' => 'ອັງກິດ (ຊູດານໃຕ້)',
'en_SX' => 'ອັງກິດ (ຊິນ ມາເທັນ)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/lt.php b/src/Symfony/Component/Intl/Resources/data/locales/lt.php
index fbd7d3c7b5b09..f0630aef3ec71 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/lt.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/lt.php
@@ -121,29 +121,35 @@
'en_CM' => 'anglų (Kamerūnas)',
'en_CX' => 'anglų (Kalėdų Sala)',
'en_CY' => 'anglų (Kipras)',
+ 'en_CZ' => 'anglų (Čekija)',
'en_DE' => 'anglų (Vokietija)',
'en_DK' => 'anglų (Danija)',
'en_DM' => 'anglų (Dominika)',
'en_ER' => 'anglų (Eritrėja)',
+ 'en_ES' => 'anglų (Ispanija)',
'en_FI' => 'anglų (Suomija)',
'en_FJ' => 'anglų (Fidžis)',
'en_FK' => 'anglų (Folklando Salos)',
'en_FM' => 'anglų (Mikronezija)',
+ 'en_FR' => 'anglų (Prancūzija)',
'en_GB' => 'anglų (Jungtinė Karalystė)',
'en_GD' => 'anglų (Grenada)',
'en_GG' => 'anglų (Gernsis)',
'en_GH' => 'anglų (Gana)',
'en_GI' => 'anglų (Gibraltaras)',
'en_GM' => 'anglų (Gambija)',
+ 'en_GS' => 'anglų (Pietų Džordžija ir Pietų Sandvičo salos)',
'en_GU' => 'anglų (Guamas)',
'en_GY' => 'anglų (Gajana)',
'en_HK' => 'anglų (Ypatingasis Administracinis Kinijos Regionas Honkongas)',
+ 'en_HU' => 'anglų (Vengrija)',
'en_ID' => 'anglų (Indonezija)',
'en_IE' => 'anglų (Airija)',
'en_IL' => 'anglų (Izraelis)',
'en_IM' => 'anglų (Meno Sala)',
'en_IN' => 'anglų (Indija)',
'en_IO' => 'anglų (Indijos Vandenyno Britų Sritis)',
+ 'en_IT' => 'anglų (Italija)',
'en_JE' => 'anglų (Džersis)',
'en_JM' => 'anglų (Jamaika)',
'en_KE' => 'anglų (Kenija)',
@@ -167,15 +173,19 @@
'en_NF' => 'anglų (Norfolko sala)',
'en_NG' => 'anglų (Nigerija)',
'en_NL' => 'anglų (Nyderlandai)',
+ 'en_NO' => 'anglų (Norvegija)',
'en_NR' => 'anglų (Nauru)',
'en_NU' => 'anglų (Niujė)',
'en_NZ' => 'anglų (Naujoji Zelandija)',
'en_PG' => 'anglų (Papua Naujoji Gvinėja)',
'en_PH' => 'anglų (Filipinai)',
'en_PK' => 'anglų (Pakistanas)',
+ 'en_PL' => 'anglų (Lenkija)',
'en_PN' => 'anglų (Pitkerno salos)',
'en_PR' => 'anglų (Puerto Rikas)',
+ 'en_PT' => 'anglų (Portugalija)',
'en_PW' => 'anglų (Palau)',
+ 'en_RO' => 'anglų (Rumunija)',
'en_RW' => 'anglų (Ruanda)',
'en_SB' => 'anglų (Saliamono Salos)',
'en_SC' => 'anglų (Seišeliai)',
@@ -184,6 +194,7 @@
'en_SG' => 'anglų (Singapūras)',
'en_SH' => 'anglų (Šv. Elenos Sala)',
'en_SI' => 'anglų (Slovėnija)',
+ 'en_SK' => 'anglų (Slovakija)',
'en_SL' => 'anglų (Siera Leonė)',
'en_SS' => 'anglų (Pietų Sudanas)',
'en_SX' => 'anglų (Sint Martenas)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/lu.php b/src/Symfony/Component/Intl/Resources/data/locales/lu.php
index 6b8784e213aaf..eda41010e580c 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/lu.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/lu.php
@@ -71,14 +71,17 @@
'en_CK' => 'Lingelesa (Lutanda lua Kookɛ)',
'en_CM' => 'Lingelesa (Kamerune)',
'en_CY' => 'Lingelesa (Shipele)',
+ 'en_CZ' => 'Lingelesa (Ditunga dya Tsheka)',
'en_DE' => 'Lingelesa (Alemanu)',
'en_DK' => 'Lingelesa (Danemalaku)',
'en_DM' => 'Lingelesa (Duminiku)',
'en_ER' => 'Lingelesa (Elitele)',
+ 'en_ES' => 'Lingelesa (Nsipani)',
'en_FI' => 'Lingelesa (Filande)',
'en_FJ' => 'Lingelesa (Fuji)',
'en_FK' => 'Lingelesa (Lutanda lua Maluni)',
'en_FM' => 'Lingelesa (Mikronezi)',
+ 'en_FR' => 'Lingelesa (Nfalanse)',
'en_GB' => 'Lingelesa (Angeletele)',
'en_GD' => 'Lingelesa (Ngelenade)',
'en_GH' => 'Lingelesa (Ngana)',
@@ -86,10 +89,12 @@
'en_GM' => 'Lingelesa (Gambi)',
'en_GU' => 'Lingelesa (Ngwame)',
'en_GY' => 'Lingelesa (Ngiyane)',
+ 'en_HU' => 'Lingelesa (Ongili)',
'en_ID' => 'Lingelesa (Indonezi)',
'en_IE' => 'Lingelesa (Irelande)',
'en_IL' => 'Lingelesa (Isirayele)',
'en_IN' => 'Lingelesa (Inde)',
+ 'en_IT' => 'Lingelesa (Itali)',
'en_JM' => 'Lingelesa (Jamaiki)',
'en_KE' => 'Lingelesa (Kenya)',
'en_KI' => 'Lingelesa (Kiribati)',
@@ -111,15 +116,19 @@
'en_NF' => 'Lingelesa (Lutanda lua Norfok)',
'en_NG' => 'Lingelesa (Nijerya)',
'en_NL' => 'Lingelesa (Olandɛ)',
+ 'en_NO' => 'Lingelesa (Noriveje)',
'en_NR' => 'Lingelesa (Nauru)',
'en_NU' => 'Lingelesa (Nyue)',
'en_NZ' => 'Lingelesa (Zelanda wa mumu)',
'en_PG' => 'Lingelesa (Papwazi wa Nginɛ wa mumu)',
'en_PH' => 'Lingelesa (Nfilipi)',
'en_PK' => 'Lingelesa (Pakisita)',
+ 'en_PL' => 'Lingelesa (Mpoloni)',
'en_PN' => 'Lingelesa (Pikairni)',
'en_PR' => 'Lingelesa (Mpotoriku)',
+ 'en_PT' => 'Lingelesa (Mputulugeshi)',
'en_PW' => 'Lingelesa (Palau)',
+ 'en_RO' => 'Lingelesa (Romani)',
'en_RW' => 'Lingelesa (Rwanda)',
'en_SB' => 'Lingelesa (Lutanda lua Solomu)',
'en_SC' => 'Lingelesa (Seshele)',
@@ -128,6 +137,7 @@
'en_SG' => 'Lingelesa (Singapure)',
'en_SH' => 'Lingelesa (Santu eleni)',
'en_SI' => 'Lingelesa (Siloveni)',
+ 'en_SK' => 'Lingelesa (Silovaki)',
'en_SL' => 'Lingelesa (Siera Leone)',
'en_SZ' => 'Lingelesa (Swazilandi)',
'en_TC' => 'Lingelesa (Lutanda lua Tuluki ne Kaiko)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/lv.php b/src/Symfony/Component/Intl/Resources/data/locales/lv.php
index 4e3e4cf1abb86..c66ef57e206e7 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/lv.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/lv.php
@@ -121,29 +121,35 @@
'en_CM' => 'angļu (Kamerūna)',
'en_CX' => 'angļu (Ziemsvētku sala)',
'en_CY' => 'angļu (Kipra)',
+ 'en_CZ' => 'angļu (Čehija)',
'en_DE' => 'angļu (Vācija)',
'en_DK' => 'angļu (Dānija)',
'en_DM' => 'angļu (Dominika)',
'en_ER' => 'angļu (Eritreja)',
+ 'en_ES' => 'angļu (Spānija)',
'en_FI' => 'angļu (Somija)',
'en_FJ' => 'angļu (Fidži)',
'en_FK' => 'angļu (Folklenda salas)',
'en_FM' => 'angļu (Mikronēzija)',
+ 'en_FR' => 'angļu (Francija)',
'en_GB' => 'angļu (Apvienotā Karaliste)',
'en_GD' => 'angļu (Grenāda)',
'en_GG' => 'angļu (Gērnsija)',
'en_GH' => 'angļu (Gana)',
'en_GI' => 'angļu (Gibraltārs)',
'en_GM' => 'angļu (Gambija)',
+ 'en_GS' => 'angļu (Dienviddžordžija un Dienvidsendviču salas)',
'en_GU' => 'angļu (Guama)',
'en_GY' => 'angļu (Gajāna)',
'en_HK' => 'angļu (Ķīnas īpašās pārvaldes apgabals Honkonga)',
+ 'en_HU' => 'angļu (Ungārija)',
'en_ID' => 'angļu (Indonēzija)',
'en_IE' => 'angļu (Īrija)',
'en_IL' => 'angļu (Izraēla)',
'en_IM' => 'angļu (Menas sala)',
'en_IN' => 'angļu (Indija)',
'en_IO' => 'angļu (Indijas okeāna Britu teritorija)',
+ 'en_IT' => 'angļu (Itālija)',
'en_JE' => 'angļu (Džērsija)',
'en_JM' => 'angļu (Jamaika)',
'en_KE' => 'angļu (Kenija)',
@@ -167,15 +173,19 @@
'en_NF' => 'angļu (Norfolkas sala)',
'en_NG' => 'angļu (Nigērija)',
'en_NL' => 'angļu (Nīderlande)',
+ 'en_NO' => 'angļu (Norvēģija)',
'en_NR' => 'angļu (Nauru)',
'en_NU' => 'angļu (Niue)',
'en_NZ' => 'angļu (Jaunzēlande)',
'en_PG' => 'angļu (Papua-Jaungvineja)',
'en_PH' => 'angļu (Filipīnas)',
'en_PK' => 'angļu (Pakistāna)',
+ 'en_PL' => 'angļu (Polija)',
'en_PN' => 'angļu (Pitkērnas salas)',
'en_PR' => 'angļu (Puertoriko)',
+ 'en_PT' => 'angļu (Portugāle)',
'en_PW' => 'angļu (Palau)',
+ 'en_RO' => 'angļu (Rumānija)',
'en_RW' => 'angļu (Ruanda)',
'en_SB' => 'angļu (Zālamana salas)',
'en_SC' => 'angļu (Seišelu salas)',
@@ -184,6 +194,7 @@
'en_SG' => 'angļu (Singapūra)',
'en_SH' => 'angļu (Sv.Helēnas sala)',
'en_SI' => 'angļu (Slovēnija)',
+ 'en_SK' => 'angļu (Slovākija)',
'en_SL' => 'angļu (Sjerraleone)',
'en_SS' => 'angļu (Dienvidsudāna)',
'en_SX' => 'angļu (Sintmārtena)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/meta.php b/src/Symfony/Component/Intl/Resources/data/locales/meta.php
index 77c80539869ea..0b81e1802feca 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/meta.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/meta.php
@@ -121,30 +121,36 @@
'en_CM',
'en_CX',
'en_CY',
+ 'en_CZ',
'en_DE',
'en_DG',
'en_DK',
'en_DM',
'en_ER',
+ 'en_ES',
'en_FI',
'en_FJ',
'en_FK',
'en_FM',
+ 'en_FR',
'en_GB',
'en_GD',
'en_GG',
'en_GH',
'en_GI',
'en_GM',
+ 'en_GS',
'en_GU',
'en_GY',
'en_HK',
+ 'en_HU',
'en_ID',
'en_IE',
'en_IL',
'en_IM',
'en_IN',
'en_IO',
+ 'en_IT',
'en_JE',
'en_JM',
'en_KE',
@@ -169,16 +175,20 @@
'en_NG',
'en_NH',
'en_NL',
+ 'en_NO',
'en_NR',
'en_NU',
'en_NZ',
'en_PG',
'en_PH',
'en_PK',
+ 'en_PL',
'en_PN',
'en_PR',
+ 'en_PT',
'en_PW',
'en_RH',
+ 'en_RO',
'en_RW',
'en_SB',
'en_SC',
@@ -187,6 +197,7 @@
'en_SG',
'en_SH',
'en_SI',
+ 'en_SK',
'en_SL',
'en_SS',
'en_SX',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/mg.php b/src/Symfony/Component/Intl/Resources/data/locales/mg.php
index ac2d976cf8f01..a8ae1299da03d 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/mg.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/mg.php
@@ -71,14 +71,17 @@
'en_CK' => 'Anglisy (Nosy Kook)',
'en_CM' => 'Anglisy (Kamerona)',
'en_CY' => 'Anglisy (Sypra)',
+ 'en_CZ' => 'Anglisy (Repoblikan’i Tseky)',
'en_DE' => 'Anglisy (Alemaina)',
'en_DK' => 'Anglisy (Danmarka)',
'en_DM' => 'Anglisy (Dominika)',
'en_ER' => 'Anglisy (Eritrea)',
+ 'en_ES' => 'Anglisy (Espaina)',
'en_FI' => 'Anglisy (Finlandy)',
'en_FJ' => 'Anglisy (Fidji)',
'en_FK' => 'Anglisy (Nosy Falkand)',
'en_FM' => 'Anglisy (Mikrônezia)',
+ 'en_FR' => 'Anglisy (Frantsa)',
'en_GB' => 'Anglisy (Angletera)',
'en_GD' => 'Anglisy (Grenady)',
'en_GH' => 'Anglisy (Ghana)',
@@ -86,10 +89,12 @@
'en_GM' => 'Anglisy (Gambia)',
'en_GU' => 'Anglisy (Guam)',
'en_GY' => 'Anglisy (Guyana)',
+ 'en_HU' => 'Anglisy (Hongria)',
'en_ID' => 'Anglisy (Indonezia)',
'en_IE' => 'Anglisy (Irlandy)',
'en_IL' => 'Anglisy (Israely)',
'en_IN' => 'Anglisy (Indy)',
+ 'en_IT' => 'Anglisy (Italia)',
'en_JM' => 'Anglisy (Jamaïka)',
'en_KE' => 'Anglisy (Kenya)',
'en_KI' => 'Anglisy (Kiribati)',
@@ -111,15 +116,19 @@
'en_NF' => 'Anglisy (Nosy Norfolk)',
'en_NG' => 'Anglisy (Nizeria)',
'en_NL' => 'Anglisy (Holanda)',
+ 'en_NO' => 'Anglisy (Nôrvezy)',
'en_NR' => 'Anglisy (Naorò)',
'en_NU' => 'Anglisy (Nioé)',
'en_NZ' => 'Anglisy (Nouvelle-Zélande)',
'en_PG' => 'Anglisy (Papouasie-Nouvelle-Guinée)',
'en_PH' => 'Anglisy (Filipina)',
'en_PK' => 'Anglisy (Pakistan)',
+ 'en_PL' => 'Anglisy (Pôlôna)',
'en_PN' => 'Anglisy (Pitkairn)',
'en_PR' => 'Anglisy (Pôrtô Rikô)',
+ 'en_PT' => 'Anglisy (Pôrtiogala)',
'en_PW' => 'Anglisy (Palao)',
+ 'en_RO' => 'Anglisy (Romania)',
'en_RW' => 'Anglisy (Roanda)',
'en_SB' => 'Anglisy (Nosy Salomona)',
'en_SC' => 'Anglisy (Seyshela)',
@@ -128,6 +137,7 @@
'en_SG' => 'Anglisy (Singaporo)',
'en_SH' => 'Anglisy (Sainte-Hélène)',
'en_SI' => 'Anglisy (Slovenia)',
+ 'en_SK' => 'Anglisy (Slovakia)',
'en_SL' => 'Anglisy (Sierra Leone)',
'en_SZ' => 'Anglisy (Soazilandy)',
'en_TC' => 'Anglisy (Nosy Turks sy Caïques)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/mi.php b/src/Symfony/Component/Intl/Resources/data/locales/mi.php
index 4581c7c9bb4e9..7c279cabc9907 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/mi.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/mi.php
@@ -121,29 +121,35 @@
'en_CM' => 'Ingarihi (Kamarūna)',
'en_CX' => 'Ingarihi (Te Moutere Kirihimete)',
'en_CY' => 'Ingarihi (Haipara)',
+ 'en_CZ' => 'Ingarihi (Tiekia)',
'en_DE' => 'Ingarihi (Tiamana)',
'en_DK' => 'Ingarihi (Tenemāka)',
'en_DM' => 'Ingarihi (Tominika)',
'en_ER' => 'Ingarihi (Eritēria)',
+ 'en_ES' => 'Ingarihi (Peina)',
'en_FI' => 'Ingarihi (Whinarana)',
'en_FJ' => 'Ingarihi (Whītī)',
'en_FK' => 'Ingarihi (Motu Whākarangi)',
'en_FM' => 'Ingarihi (Mekanēhia)',
+ 'en_FR' => 'Ingarihi (Wīwī)',
'en_GB' => 'Ingarihi (Te Hononga o Piritene)',
'en_GD' => 'Ingarihi (Kerenāta)',
'en_GG' => 'Ingarihi (Kōnihi)',
'en_GH' => 'Ingarihi (Kāna)',
'en_GI' => 'Ingarihi (Kāmaka)',
'en_GM' => 'Ingarihi (Kamopia)',
+ 'en_GS' => 'Ingarihi (Hōria ki te Tonga me ngā Motu Hanawiti ki te Tonga)',
'en_GU' => 'Ingarihi (Kuama)',
'en_GY' => 'Ingarihi (Kaiana)',
'en_HK' => 'Ingarihi (Hongipua Haina)',
+ 'en_HU' => 'Ingarihi (Hanekari)',
'en_ID' => 'Ingarihi (Initonīhia)',
'en_IE' => 'Ingarihi (Airani)',
'en_IL' => 'Ingarihi (Iharaira)',
'en_IM' => 'Ingarihi (Te Moutere Mana)',
'en_IN' => 'Ingarihi (Inia)',
'en_IO' => 'Ingarihi (Te Rohe o te Moana Īniana Piritihi)',
+ 'en_IT' => 'Ingarihi (Itāria)',
'en_JE' => 'Ingarihi (Tōrehe)',
'en_JM' => 'Ingarihi (Hemeika)',
'en_KE' => 'Ingarihi (Kenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'Ingarihi (Te Moutere Nōpoke)',
'en_NG' => 'Ingarihi (Ngāitiria)',
'en_NL' => 'Ingarihi (Hōrana)',
+ 'en_NO' => 'Ingarihi (Nōwei)',
'en_NR' => 'Ingarihi (Nauru)',
'en_NU' => 'Ingarihi (Niue)',
'en_NZ' => 'Ingarihi (Aotearoa)',
'en_PG' => 'Ingarihi (Papua Nūkini)',
'en_PH' => 'Ingarihi (Piripīni)',
'en_PK' => 'Ingarihi (Pakitāne)',
+ 'en_PL' => 'Ingarihi (Pōrana)',
'en_PN' => 'Ingarihi (Pitikeina)',
'en_PR' => 'Ingarihi (Peta Riko)',
+ 'en_PT' => 'Ingarihi (Potukara)',
'en_PW' => 'Ingarihi (Pārau)',
+ 'en_RO' => 'Ingarihi (Romeinia)',
'en_RW' => 'Ingarihi (Rāwana)',
'en_SB' => 'Ingarihi (Ngā Motu Horomona)',
'en_SC' => 'Ingarihi (Heikere)',
@@ -184,6 +194,7 @@
'en_SG' => 'Ingarihi (Hingapoa)',
'en_SH' => 'Ingarihi (Hato Hērena)',
'en_SI' => 'Ingarihi (Horowinia)',
+ 'en_SK' => 'Ingarihi (Horowākia)',
'en_SL' => 'Ingarihi (Te Araone)',
'en_SS' => 'Ingarihi (Hūtāne ki te Tonga)',
'en_SX' => 'Ingarihi (Hiti Mātene)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/mk.php b/src/Symfony/Component/Intl/Resources/data/locales/mk.php
index 0ba83fe04122f..aa4dc6c54db89 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/mk.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/mk.php
@@ -121,29 +121,35 @@
'en_CM' => 'англиски (Камерун)',
'en_CX' => 'англиски (Божиќен Остров)',
'en_CY' => 'англиски (Кипар)',
+ 'en_CZ' => 'англиски (Чешка)',
'en_DE' => 'англиски (Германија)',
'en_DK' => 'англиски (Данска)',
'en_DM' => 'англиски (Доминика)',
'en_ER' => 'англиски (Еритреја)',
+ 'en_ES' => 'англиски (Шпанија)',
'en_FI' => 'англиски (Финска)',
'en_FJ' => 'англиски (Фиџи)',
'en_FK' => 'англиски (Фолкландски Острови)',
'en_FM' => 'англиски (Микронезија)',
+ 'en_FR' => 'англиски (Франција)',
'en_GB' => 'англиски (Обединето Кралство)',
'en_GD' => 'англиски (Гренада)',
'en_GG' => 'англиски (Гернзи)',
'en_GH' => 'англиски (Гана)',
'en_GI' => 'англиски (Гибралтар)',
'en_GM' => 'англиски (Гамбија)',
+ 'en_GS' => 'англиски (Јужна Џорџија и Јужни Сендвички Острови)',
'en_GU' => 'англиски (Гуам)',
'en_GY' => 'англиски (Гвајана)',
'en_HK' => 'англиски (Хонгконг САР Кина)',
+ 'en_HU' => 'англиски (Унгарија)',
'en_ID' => 'англиски (Индонезија)',
'en_IE' => 'англиски (Ирска)',
'en_IL' => 'англиски (Израел)',
'en_IM' => 'англиски (Остров Ман)',
'en_IN' => 'англиски (Индија)',
'en_IO' => 'англиски (Британска Индоокеанска Територија)',
+ 'en_IT' => 'англиски (Италија)',
'en_JE' => 'англиски (Џерси)',
'en_JM' => 'англиски (Јамајка)',
'en_KE' => 'англиски (Кенија)',
@@ -167,15 +173,19 @@
'en_NF' => 'англиски (Норфолшки Остров)',
'en_NG' => 'англиски (Нигерија)',
'en_NL' => 'англиски (Холандија)',
+ 'en_NO' => 'англиски (Норвешка)',
'en_NR' => 'англиски (Науру)',
'en_NU' => 'англиски (Ниује)',
'en_NZ' => 'англиски (Нов Зеланд)',
'en_PG' => 'англиски (Папуа Нова Гвинеја)',
'en_PH' => 'англиски (Филипини)',
'en_PK' => 'англиски (Пакистан)',
+ 'en_PL' => 'англиски (Полска)',
'en_PN' => 'англиски (Питкернски Острови)',
'en_PR' => 'англиски (Порторико)',
+ 'en_PT' => 'англиски (Португалија)',
'en_PW' => 'англиски (Палау)',
+ 'en_RO' => 'англиски (Романија)',
'en_RW' => 'англиски (Руанда)',
'en_SB' => 'англиски (Соломонски Острови)',
'en_SC' => 'англиски (Сејшели)',
@@ -184,6 +194,7 @@
'en_SG' => 'англиски (Сингапур)',
'en_SH' => 'англиски (Света Елена)',
'en_SI' => 'англиски (Словенија)',
+ 'en_SK' => 'англиски (Словачка)',
'en_SL' => 'англиски (Сиера Леоне)',
'en_SS' => 'англиски (Јужен Судан)',
'en_SX' => 'англиски (Свети Мартин)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ml.php b/src/Symfony/Component/Intl/Resources/data/locales/ml.php
index c2d098d96fee4..3ebe1e26b2769 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ml.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ml.php
@@ -121,29 +121,35 @@
'en_CM' => 'ഇംഗ്ലീഷ് (കാമറൂൺ)',
'en_CX' => 'ഇംഗ്ലീഷ് (ക്രിസ്മസ് ദ്വീപ്)',
'en_CY' => 'ഇംഗ്ലീഷ് (സൈപ്രസ്)',
+ 'en_CZ' => 'ഇംഗ്ലീഷ് (ചെക്കിയ)',
'en_DE' => 'ഇംഗ്ലീഷ് (ജർമ്മനി)',
'en_DK' => 'ഇംഗ്ലീഷ് (ഡെൻമാർക്ക്)',
'en_DM' => 'ഇംഗ്ലീഷ് (ഡൊമിനിക്ക)',
'en_ER' => 'ഇംഗ്ലീഷ് (എറിത്രിയ)',
+ 'en_ES' => 'ഇംഗ്ലീഷ് (സ്പെയിൻ)',
'en_FI' => 'ഇംഗ്ലീഷ് (ഫിൻലാൻഡ്)',
'en_FJ' => 'ഇംഗ്ലീഷ് (ഫിജി)',
'en_FK' => 'ഇംഗ്ലീഷ് (ഫാക്ക്ലാന്റ് ദ്വീപുകൾ)',
'en_FM' => 'ഇംഗ്ലീഷ് (മൈക്രോനേഷ്യ)',
+ 'en_FR' => 'ഇംഗ്ലീഷ് (ഫ്രാൻസ്)',
'en_GB' => 'ഇംഗ്ലീഷ് (യുണൈറ്റഡ് കിംഗ്ഡം)',
'en_GD' => 'ഇംഗ്ലീഷ് (ഗ്രനേഡ)',
'en_GG' => 'ഇംഗ്ലീഷ് (ഗേൺസി)',
'en_GH' => 'ഇംഗ്ലീഷ് (ഘാന)',
'en_GI' => 'ഇംഗ്ലീഷ് (ജിബ്രാൾട്ടർ)',
'en_GM' => 'ഇംഗ്ലീഷ് (ഗാംബിയ)',
+ 'en_GS' => 'ഇംഗ്ലീഷ് (ദക്ഷിണ ജോർജ്ജിയയും ദക്ഷിണ സാൻഡ്വിച്ച് ദ്വീപുകളും)',
'en_GU' => 'ഇംഗ്ലീഷ് (ഗ്വാം)',
'en_GY' => 'ഇംഗ്ലീഷ് (ഗയാന)',
'en_HK' => 'ഇംഗ്ലീഷ് (ഹോങ്കോങ് [SAR] ചൈന)',
+ 'en_HU' => 'ഇംഗ്ലീഷ് (ഹംഗറി)',
'en_ID' => 'ഇംഗ്ലീഷ് (ഇന്തോനേഷ്യ)',
'en_IE' => 'ഇംഗ്ലീഷ് (അയർലൻഡ്)',
'en_IL' => 'ഇംഗ്ലീഷ് (ഇസ്രായേൽ)',
'en_IM' => 'ഇംഗ്ലീഷ് (ഐൽ ഓഫ് മാൻ)',
'en_IN' => 'ഇംഗ്ലീഷ് (ഇന്ത്യ)',
'en_IO' => 'ഇംഗ്ലീഷ് (ബ്രിട്ടീഷ് ഇന്ത്യൻ ഓഷ്യൻ ടെറിട്ടറി)',
+ 'en_IT' => 'ഇംഗ്ലീഷ് (ഇറ്റലി)',
'en_JE' => 'ഇംഗ്ലീഷ് (ജേഴ്സി)',
'en_JM' => 'ഇംഗ്ലീഷ് (ജമൈക്ക)',
'en_KE' => 'ഇംഗ്ലീഷ് (കെനിയ)',
@@ -167,15 +173,19 @@
'en_NF' => 'ഇംഗ്ലീഷ് (നോർഫോക് ദ്വീപ്)',
'en_NG' => 'ഇംഗ്ലീഷ് (നൈജീരിയ)',
'en_NL' => 'ഇംഗ്ലീഷ് (നെതർലാൻഡ്സ്)',
+ 'en_NO' => 'ഇംഗ്ലീഷ് (നോർവെ)',
'en_NR' => 'ഇംഗ്ലീഷ് (നൗറു)',
'en_NU' => 'ഇംഗ്ലീഷ് (ന്യൂയി)',
'en_NZ' => 'ഇംഗ്ലീഷ് (ന്യൂസിലൻഡ്)',
'en_PG' => 'ഇംഗ്ലീഷ് (പാപ്പുവ ന്യൂ ഗിനിയ)',
'en_PH' => 'ഇംഗ്ലീഷ് (ഫിലിപ്പീൻസ്)',
'en_PK' => 'ഇംഗ്ലീഷ് (പാക്കിസ്ഥാൻ)',
+ 'en_PL' => 'ഇംഗ്ലീഷ് (പോളണ്ട്)',
'en_PN' => 'ഇംഗ്ലീഷ് (പിറ്റ്കെയ്ൻ ദ്വീപുകൾ)',
'en_PR' => 'ഇംഗ്ലീഷ് (പോർട്ടോ റിക്കോ)',
+ 'en_PT' => 'ഇംഗ്ലീഷ് (പോർച്ചുഗൽ)',
'en_PW' => 'ഇംഗ്ലീഷ് (പലാവു)',
+ 'en_RO' => 'ഇംഗ്ലീഷ് (റൊമാനിയ)',
'en_RW' => 'ഇംഗ്ലീഷ് (റുവാണ്ട)',
'en_SB' => 'ഇംഗ്ലീഷ് (സോളമൻ ദ്വീപുകൾ)',
'en_SC' => 'ഇംഗ്ലീഷ് (സീഷെൽസ്)',
@@ -184,6 +194,7 @@
'en_SG' => 'ഇംഗ്ലീഷ് (സിംഗപ്പൂർ)',
'en_SH' => 'ഇംഗ്ലീഷ് (സെന്റ് ഹെലീന)',
'en_SI' => 'ഇംഗ്ലീഷ് (സ്ലോവേനിയ)',
+ 'en_SK' => 'ഇംഗ്ലീഷ് (സ്ലോവാക്യ)',
'en_SL' => 'ഇംഗ്ലീഷ് (സിയെറ ലിയോൺ)',
'en_SS' => 'ഇംഗ്ലീഷ് (ദക്ഷിണ സുഡാൻ)',
'en_SX' => 'ഇംഗ്ലീഷ് (സിന്റ് മാർട്ടെൻ)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/mn.php b/src/Symfony/Component/Intl/Resources/data/locales/mn.php
index f28c36d9cfeb4..f90b8d4de0c3a 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/mn.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/mn.php
@@ -121,29 +121,35 @@
'en_CM' => 'англи (Камерун)',
'en_CX' => 'англи (Зул сарын арал)',
'en_CY' => 'англи (Кипр)',
+ 'en_CZ' => 'англи (Чех)',
'en_DE' => 'англи (Герман)',
'en_DK' => 'англи (Дани)',
'en_DM' => 'англи (Доминика)',
'en_ER' => 'англи (Эритрей)',
+ 'en_ES' => 'англи (Испани)',
'en_FI' => 'англи (Финланд)',
'en_FJ' => 'англи (Фижи)',
'en_FK' => 'англи (Фолклендийн арлууд)',
'en_FM' => 'англи (Микронези)',
+ 'en_FR' => 'англи (Франц)',
'en_GB' => 'англи (Их Британи)',
'en_GD' => 'англи (Гренада)',
'en_GG' => 'англи (Гернси)',
'en_GH' => 'англи (Гана)',
'en_GI' => 'англи (Гибралтар)',
'en_GM' => 'англи (Гамби)',
+ 'en_GS' => 'англи (Өмнөд Жоржиа ба Өмнөд Сэндвичийн арлууд)',
'en_GU' => 'англи (Гуам)',
'en_GY' => 'англи (Гайана)',
'en_HK' => 'англи (БНХАУ-ын Тусгай захиргааны бүс Хонг-Конг)',
+ 'en_HU' => 'англи (Унгар)',
'en_ID' => 'англи (Индонез)',
'en_IE' => 'англи (Ирланд)',
'en_IL' => 'англи (Израил)',
'en_IM' => 'англи (Мэн Арал)',
'en_IN' => 'англи (Энэтхэг)',
'en_IO' => 'англи (Британийн харьяа Энэтхэгийн далай дахь нутаг дэвсгэр)',
+ 'en_IT' => 'англи (Итали)',
'en_JE' => 'англи (Жерси)',
'en_JM' => 'англи (Ямайка)',
'en_KE' => 'англи (Кени)',
@@ -167,15 +173,19 @@
'en_NF' => 'англи (Норфолк арал)',
'en_NG' => 'англи (Нигери)',
'en_NL' => 'англи (Нидерланд)',
+ 'en_NO' => 'англи (Норвег)',
'en_NR' => 'англи (Науру)',
'en_NU' => 'англи (Ниуэ)',
'en_NZ' => 'англи (Шинэ Зеланд)',
'en_PG' => 'англи (Папуа Шинэ Гвиней)',
'en_PH' => 'англи (Филиппин)',
'en_PK' => 'англи (Пакистан)',
+ 'en_PL' => 'англи (Польш)',
'en_PN' => 'англи (Питкэрн арлууд)',
'en_PR' => 'англи (Пуэрто-Рико)',
+ 'en_PT' => 'англи (Португал)',
'en_PW' => 'англи (Палау)',
+ 'en_RO' => 'англи (Румын)',
'en_RW' => 'англи (Руанда)',
'en_SB' => 'англи (Соломоны арлууд)',
'en_SC' => 'англи (Сейшелийн арлууд)',
@@ -184,6 +194,7 @@
'en_SG' => 'англи (Сингапур)',
'en_SH' => 'англи (Сент Хелена)',
'en_SI' => 'англи (Словени)',
+ 'en_SK' => 'англи (Словак)',
'en_SL' => 'англи (Сьерра-Леоне)',
'en_SS' => 'англи (Өмнөд Судан)',
'en_SX' => 'англи (Синт Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/mr.php b/src/Symfony/Component/Intl/Resources/data/locales/mr.php
index 3c379fcd54349..6cab10fd67b3a 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/mr.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/mr.php
@@ -121,29 +121,35 @@
'en_CM' => 'इंग्रजी (कॅमेरून)',
'en_CX' => 'इंग्रजी (ख्रिसमस बेट)',
'en_CY' => 'इंग्रजी (सायप्रस)',
+ 'en_CZ' => 'इंग्रजी (झेकिया)',
'en_DE' => 'इंग्रजी (जर्मनी)',
'en_DK' => 'इंग्रजी (डेन्मार्क)',
'en_DM' => 'इंग्रजी (डोमिनिका)',
'en_ER' => 'इंग्रजी (एरिट्रिया)',
+ 'en_ES' => 'इंग्रजी (स्पेन)',
'en_FI' => 'इंग्रजी (फिनलंड)',
'en_FJ' => 'इंग्रजी (फिजी)',
'en_FK' => 'इंग्रजी (फॉकलंड बेटे)',
'en_FM' => 'इंग्रजी (मायक्रोनेशिया)',
+ 'en_FR' => 'इंग्रजी (फ्रान्स)',
'en_GB' => 'इंग्रजी (युनायटेड किंगडम)',
'en_GD' => 'इंग्रजी (ग्रेनेडा)',
'en_GG' => 'इंग्रजी (ग्वेर्नसे)',
'en_GH' => 'इंग्रजी (घाना)',
'en_GI' => 'इंग्रजी (जिब्राल्टर)',
'en_GM' => 'इंग्रजी (गाम्बिया)',
+ 'en_GS' => 'इंग्रजी (दक्षिण जॉर्जिया आणि दक्षिण सँडविच बेटे)',
'en_GU' => 'इंग्रजी (गुआम)',
'en_GY' => 'इंग्रजी (गयाना)',
'en_HK' => 'इंग्रजी (हाँगकाँग एसएआर चीन)',
+ 'en_HU' => 'इंग्रजी (हंगेरी)',
'en_ID' => 'इंग्रजी (इंडोनेशिया)',
'en_IE' => 'इंग्रजी (आयर्लंड)',
'en_IL' => 'इंग्रजी (इस्त्राइल)',
'en_IM' => 'इंग्रजी (आयल ऑफ मॅन)',
'en_IN' => 'इंग्रजी (भारत)',
'en_IO' => 'इंग्रजी (ब्रिटिश हिंद महासागर प्रदेश)',
+ 'en_IT' => 'इंग्रजी (इटली)',
'en_JE' => 'इंग्रजी (जर्सी)',
'en_JM' => 'इंग्रजी (जमैका)',
'en_KE' => 'इंग्रजी (केनिया)',
@@ -167,15 +173,19 @@
'en_NF' => 'इंग्रजी (नॉरफॉक बेट)',
'en_NG' => 'इंग्रजी (नायजेरिया)',
'en_NL' => 'इंग्रजी (नेदरलँड)',
+ 'en_NO' => 'इंग्रजी (नॉर्वे)',
'en_NR' => 'इंग्रजी (नाउरू)',
'en_NU' => 'इंग्रजी (नीयू)',
'en_NZ' => 'इंग्रजी (न्यूझीलंड)',
'en_PG' => 'इंग्रजी (पापुआ न्यू गिनी)',
'en_PH' => 'इंग्रजी (फिलिपिन्स)',
'en_PK' => 'इंग्रजी (पाकिस्तान)',
+ 'en_PL' => 'इंग्रजी (पोलंड)',
'en_PN' => 'इंग्रजी (पिटकैर्न बेटे)',
'en_PR' => 'इंग्रजी (प्युएर्तो रिको)',
+ 'en_PT' => 'इंग्रजी (पोर्तुगाल)',
'en_PW' => 'इंग्रजी (पलाऊ)',
+ 'en_RO' => 'इंग्रजी (रोमानिया)',
'en_RW' => 'इंग्रजी (रवांडा)',
'en_SB' => 'इंग्रजी (सोलोमन बेटे)',
'en_SC' => 'इंग्रजी (सेशेल्स)',
@@ -184,6 +194,7 @@
'en_SG' => 'इंग्रजी (सिंगापूर)',
'en_SH' => 'इंग्रजी (सेंट हेलेना)',
'en_SI' => 'इंग्रजी (स्लोव्हेनिया)',
+ 'en_SK' => 'इंग्रजी (स्लोव्हाकिया)',
'en_SL' => 'इंग्रजी (सिएरा लिओन)',
'en_SS' => 'इंग्रजी (दक्षिण सुदान)',
'en_SX' => 'इंग्रजी (सिंट मार्टेन)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ms.php b/src/Symfony/Component/Intl/Resources/data/locales/ms.php
index 4397cd3274aff..e28c38d4a06a1 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ms.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ms.php
@@ -121,29 +121,35 @@
'en_CM' => 'Inggeris (Cameroon)',
'en_CX' => 'Inggeris (Pulau Krismas)',
'en_CY' => 'Inggeris (Cyprus)',
+ 'en_CZ' => 'Inggeris (Czechia)',
'en_DE' => 'Inggeris (Jerman)',
'en_DK' => 'Inggeris (Denmark)',
'en_DM' => 'Inggeris (Dominica)',
'en_ER' => 'Inggeris (Eritrea)',
+ 'en_ES' => 'Inggeris (Sepanyol)',
'en_FI' => 'Inggeris (Finland)',
'en_FJ' => 'Inggeris (Fiji)',
'en_FK' => 'Inggeris (Kepulauan Falkland)',
'en_FM' => 'Inggeris (Micronesia)',
+ 'en_FR' => 'Inggeris (Perancis)',
'en_GB' => 'Inggeris (United Kingdom)',
'en_GD' => 'Inggeris (Grenada)',
'en_GG' => 'Inggeris (Guernsey)',
'en_GH' => 'Inggeris (Ghana)',
'en_GI' => 'Inggeris (Gibraltar)',
'en_GM' => 'Inggeris (Gambia)',
+ 'en_GS' => 'Inggeris (Kepulauan Georgia Selatan & Sandwich Selatan)',
'en_GU' => 'Inggeris (Guam)',
'en_GY' => 'Inggeris (Guyana)',
'en_HK' => 'Inggeris (Hong Kong SAR China)',
+ 'en_HU' => 'Inggeris (Hungary)',
'en_ID' => 'Inggeris (Indonesia)',
'en_IE' => 'Inggeris (Ireland)',
'en_IL' => 'Inggeris (Israel)',
'en_IM' => 'Inggeris (Isle of Man)',
'en_IN' => 'Inggeris (India)',
'en_IO' => 'Inggeris (Wilayah Lautan Hindi British)',
+ 'en_IT' => 'Inggeris (Itali)',
'en_JE' => 'Inggeris (Jersey)',
'en_JM' => 'Inggeris (Jamaica)',
'en_KE' => 'Inggeris (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Inggeris (Pulau Norfolk)',
'en_NG' => 'Inggeris (Nigeria)',
'en_NL' => 'Inggeris (Belanda)',
+ 'en_NO' => 'Inggeris (Norway)',
'en_NR' => 'Inggeris (Nauru)',
'en_NU' => 'Inggeris (Niue)',
'en_NZ' => 'Inggeris (New Zealand)',
'en_PG' => 'Inggeris (Papua New Guinea)',
'en_PH' => 'Inggeris (Filipina)',
'en_PK' => 'Inggeris (Pakistan)',
+ 'en_PL' => 'Inggeris (Poland)',
'en_PN' => 'Inggeris (Kepulauan Pitcairn)',
'en_PR' => 'Inggeris (Puerto Rico)',
+ 'en_PT' => 'Inggeris (Portugal)',
'en_PW' => 'Inggeris (Palau)',
+ 'en_RO' => 'Inggeris (Romania)',
'en_RW' => 'Inggeris (Rwanda)',
'en_SB' => 'Inggeris (Kepulauan Solomon)',
'en_SC' => 'Inggeris (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'Inggeris (Singapura)',
'en_SH' => 'Inggeris (Saint Helena)',
'en_SI' => 'Inggeris (Slovenia)',
+ 'en_SK' => 'Inggeris (Slovakia)',
'en_SL' => 'Inggeris (Sierra Leone)',
'en_SS' => 'Inggeris (Sudan Selatan)',
'en_SX' => 'Inggeris (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/mt.php b/src/Symfony/Component/Intl/Resources/data/locales/mt.php
index e1245dc691bb7..77aab459f0285 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/mt.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/mt.php
@@ -121,28 +121,34 @@
'en_CM' => 'Ingliż (il-Kamerun)',
'en_CX' => 'Ingliż (il-Gżira Christmas)',
'en_CY' => 'Ingliż (Ċipru)',
+ 'en_CZ' => 'Ingliż (ir-Repubblika Ċeka)',
'en_DE' => 'Ingliż (il-Ġermanja)',
'en_DK' => 'Ingliż (id-Danimarka)',
'en_DM' => 'Ingliż (Dominica)',
'en_ER' => 'Ingliż (l-Eritrea)',
+ 'en_ES' => 'Ingliż (Spanja)',
'en_FI' => 'Ingliż (il-Finlandja)',
'en_FJ' => 'Ingliż (Fiġi)',
'en_FK' => 'Ingliż (il-Gżejjer Falkland)',
'en_FM' => 'Ingliż (il-Mikroneżja)',
+ 'en_FR' => 'Ingliż (Franza)',
'en_GB' => 'Ingliż (ir-Renju Unit)',
'en_GD' => 'Ingliż (Grenada)',
'en_GG' => 'Ingliż (Guernsey)',
'en_GH' => 'Ingliż (il-Ghana)',
'en_GI' => 'Ingliż (Ġibiltà)',
'en_GM' => 'Ingliż (il-Gambja)',
+ 'en_GS' => 'Ingliż (il-Georgia tan-Nofsinhar u l-Gżejjer Sandwich tan-Nofsinhar)',
'en_GU' => 'Ingliż (Guam)',
'en_GY' => 'Ingliż (il-Guyana)',
'en_HK' => 'Ingliż (ir-Reġjun Amministrattiv Speċjali ta’ Hong Kong tar-Repubblika tal-Poplu taċ-Ċina)',
+ 'en_HU' => 'Ingliż (l-Ungerija)',
'en_ID' => 'Ingliż (l-Indoneżja)',
'en_IE' => 'Ingliż (l-Irlanda)',
'en_IL' => 'Ingliż (Iżrael)',
'en_IM' => 'Ingliż (Isle of Man)',
'en_IN' => 'Ingliż (l-Indja)',
+ 'en_IT' => 'Ingliż (l-Italja)',
'en_JE' => 'Ingliż (Jersey)',
'en_JM' => 'Ingliż (il-Ġamajka)',
'en_KE' => 'Ingliż (il-Kenja)',
@@ -166,15 +172,19 @@
'en_NF' => 'Ingliż (Gżira Norfolk)',
'en_NG' => 'Ingliż (in-Niġerja)',
'en_NL' => 'Ingliż (in-Netherlands)',
+ 'en_NO' => 'Ingliż (in-Norveġja)',
'en_NR' => 'Ingliż (Nauru)',
'en_NU' => 'Ingliż (Niue)',
'en_NZ' => 'Ingliż (New Zealand)',
'en_PG' => 'Ingliż (Papua New Guinea)',
'en_PH' => 'Ingliż (il-Filippini)',
'en_PK' => 'Ingliż (il-Pakistan)',
+ 'en_PL' => 'Ingliż (il-Polonja)',
'en_PN' => 'Ingliż (Gżejjer Pitcairn)',
'en_PR' => 'Ingliż (Puerto Rico)',
+ 'en_PT' => 'Ingliż (il-Portugall)',
'en_PW' => 'Ingliż (Palau)',
+ 'en_RO' => 'Ingliż (ir-Rumanija)',
'en_RW' => 'Ingliż (ir-Rwanda)',
'en_SB' => 'Ingliż (il-Gżejjer Solomon)',
'en_SC' => 'Ingliż (is-Seychelles)',
@@ -183,6 +193,7 @@
'en_SG' => 'Ingliż (Singapore)',
'en_SH' => 'Ingliż (Saint Helena)',
'en_SI' => 'Ingliż (is-Slovenja)',
+ 'en_SK' => 'Ingliż (is-Slovakkja)',
'en_SL' => 'Ingliż (Sierra Leone)',
'en_SS' => 'Ingliż (is-Sudan t’Isfel)',
'en_SX' => 'Ingliż (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/my.php b/src/Symfony/Component/Intl/Resources/data/locales/my.php
index 8680b337419a2..18bb264d1161e 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/my.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/my.php
@@ -121,29 +121,35 @@
'en_CM' => 'အင်္ဂလိပ် (ကင်မရွန်း)',
'en_CX' => 'အင်္ဂလိပ် (ခရစ်စမတ် ကျွန်း)',
'en_CY' => 'အင်္ဂလိပ် (ဆိုက်ပရပ်စ်)',
+ 'en_CZ' => 'အင်္ဂလိပ် (ချက်ကီယား)',
'en_DE' => 'အင်္ဂလိပ် (ဂျာမနီ)',
'en_DK' => 'အင်္ဂလိပ် (ဒိန်းမတ်)',
'en_DM' => 'အင်္ဂလိပ် (ဒိုမီနီကာ)',
'en_ER' => 'အင်္ဂလိပ် (အီရီထရီးယား)',
+ 'en_ES' => 'အင်္ဂလိပ် (စပိန်)',
'en_FI' => 'အင်္ဂလိပ် (ဖင်လန်)',
'en_FJ' => 'အင်္ဂလိပ် (ဖီဂျီ)',
'en_FK' => 'အင်္ဂလိပ် (ဖော့ကလန် ကျွန်းစု)',
'en_FM' => 'အင်္ဂလိပ် (မိုင်ခရိုနီရှား)',
+ 'en_FR' => 'အင်္ဂလိပ် (ပြင်သစ်)',
'en_GB' => 'အင်္ဂလိပ် (ယူနိုက်တက်ကင်းဒမ်း)',
'en_GD' => 'အင်္ဂလိပ် (ဂရီနေဒါ)',
'en_GG' => 'အင်္ဂလိပ် (ဂွန်းဇီ)',
'en_GH' => 'အင်္ဂလိပ် (ဂါနာ)',
'en_GI' => 'အင်္ဂလိပ် (ဂျီဘရော်လ်တာ)',
'en_GM' => 'အင်္ဂလိပ် (ဂမ်ဘီရာ)',
+ 'en_GS' => 'အင်္ဂလိပ် (တောင် ဂျော်ဂျီယာ နှင့် တောင် ဆင်းဒဝစ်ဂျ် ကျွန်းစုများ)',
'en_GU' => 'အင်္ဂလိပ် (ဂူအမ်)',
'en_GY' => 'အင်္ဂလိပ် (ဂိုင်ယာနာ)',
'en_HK' => 'အင်္ဂလိပ် (ဟောင်ကောင် [တရုတ်ပြည်])',
+ 'en_HU' => 'အင်္ဂလိပ် (ဟန်ဂေရီ)',
'en_ID' => 'အင်္ဂလိပ် (အင်ဒိုနီးရှား)',
'en_IE' => 'အင်္ဂလိပ် (အိုင်ယာလန်)',
'en_IL' => 'အင်္ဂလိပ် (အစ္စရေး)',
'en_IM' => 'အင်္ဂလိပ် (မန်ကျွန်း)',
'en_IN' => 'အင်္ဂလိပ် (အိန္ဒိယ)',
'en_IO' => 'အင်္ဂလိပ် (ဗြိတိသျှပိုင် အိန္ဒိယသမုဒ္ဒရာကျွန်းများ)',
+ 'en_IT' => 'အင်္ဂလိပ် (အီတလီ)',
'en_JE' => 'အင်္ဂလိပ် (ဂျာစီ)',
'en_JM' => 'အင်္ဂလိပ် (ဂျမေကာ)',
'en_KE' => 'အင်္ဂလိပ် (ကင်ညာ)',
@@ -167,15 +173,19 @@
'en_NF' => 'အင်္ဂလိပ် (နောဖုတ်ကျွန်း)',
'en_NG' => 'အင်္ဂလိပ် (နိုင်ဂျီးရီးယား)',
'en_NL' => 'အင်္ဂလိပ် (နယ်သာလန်)',
+ 'en_NO' => 'အင်္ဂလိပ် (နော်ဝေ)',
'en_NR' => 'အင်္ဂလိပ် (နော်ရူး)',
'en_NU' => 'အင်္ဂလိပ် (နီဥူအေ)',
'en_NZ' => 'အင်္ဂလိပ် (နယူးဇီလန်)',
'en_PG' => 'အင်္ဂလိပ် (ပါပူအာ နယူးဂီနီ)',
'en_PH' => 'အင်္ဂလိပ် (ဖိလစ်ပိုင်)',
'en_PK' => 'အင်္ဂလိပ် (ပါကစ္စတန်)',
+ 'en_PL' => 'အင်္ဂလိပ် (ပိုလန်)',
'en_PN' => 'အင်္ဂလိပ် (ပစ်တ်ကိန်းကျွန်းစု)',
'en_PR' => 'အင်္ဂလိပ် (ပေါ်တိုရီကို)',
+ 'en_PT' => 'အင်္ဂလိပ် (ပေါ်တူဂီ)',
'en_PW' => 'အင်္ဂလိပ် (ပလာအို)',
+ 'en_RO' => 'အင်္ဂလိပ် (ရိုမေးနီးယား)',
'en_RW' => 'အင်္ဂလိပ် (ရဝန်ဒါ)',
'en_SB' => 'အင်္ဂလိပ် (ဆော်လမွန်ကျွန်းစု)',
'en_SC' => 'အင်္ဂလိပ် (ဆေးရှဲ)',
@@ -184,6 +194,7 @@
'en_SG' => 'အင်္ဂလိပ် (စင်္ကာပူ)',
'en_SH' => 'အင်္ဂလိပ် (စိန့်ဟယ်လယ်နာ)',
'en_SI' => 'အင်္ဂလိပ် (ဆလိုဗေးနီးယား)',
+ 'en_SK' => 'အင်္ဂလိပ် (ဆလိုဗက်ကီးယား)',
'en_SL' => 'အင်္ဂလိပ် (ဆီယာရာ လီယွန်း)',
'en_SS' => 'အင်္ဂလိပ် (တောင် ဆူဒန်)',
'en_SX' => 'အင်္ဂလိပ် (စင့်မာတင်)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/nd.php b/src/Symfony/Component/Intl/Resources/data/locales/nd.php
index babc43f113826..b2f3f46bfc7e8 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/nd.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/nd.php
@@ -71,14 +71,17 @@
'en_CK' => 'isi-Ngisi (Cook Islands)',
'en_CM' => 'isi-Ngisi (Khameruni)',
'en_CY' => 'isi-Ngisi (Cyprus)',
+ 'en_CZ' => 'isi-Ngisi (Czech Republic)',
'en_DE' => 'isi-Ngisi (Germany)',
'en_DK' => 'isi-Ngisi (Denmakhi)',
'en_DM' => 'isi-Ngisi (Dominikha)',
'en_ER' => 'isi-Ngisi (Eritrea)',
+ 'en_ES' => 'isi-Ngisi (Spain)',
'en_FI' => 'isi-Ngisi (Finland)',
'en_FJ' => 'isi-Ngisi (Fiji)',
'en_FK' => 'isi-Ngisi (Falkland Islands)',
'en_FM' => 'isi-Ngisi (Micronesia)',
+ 'en_FR' => 'isi-Ngisi (Furansi)',
'en_GB' => 'isi-Ngisi (United Kingdom)',
'en_GD' => 'isi-Ngisi (Grenada)',
'en_GH' => 'isi-Ngisi (Ghana)',
@@ -86,10 +89,12 @@
'en_GM' => 'isi-Ngisi (Gambiya)',
'en_GU' => 'isi-Ngisi (Guam)',
'en_GY' => 'isi-Ngisi (Guyana)',
+ 'en_HU' => 'isi-Ngisi (Hungary)',
'en_ID' => 'isi-Ngisi (Indonesiya)',
'en_IE' => 'isi-Ngisi (Ireland)',
'en_IL' => 'isi-Ngisi (Isuraeli)',
'en_IN' => 'isi-Ngisi (Indiya)',
+ 'en_IT' => 'isi-Ngisi (Itali)',
'en_JM' => 'isi-Ngisi (Jamaica)',
'en_KE' => 'isi-Ngisi (Khenya)',
'en_KI' => 'isi-Ngisi (Khiribati)',
@@ -111,15 +116,19 @@
'en_NF' => 'isi-Ngisi (Norfolk Island)',
'en_NG' => 'isi-Ngisi (Nigeriya)',
'en_NL' => 'isi-Ngisi (Netherlands)',
+ 'en_NO' => 'isi-Ngisi (Noweyi)',
'en_NR' => 'isi-Ngisi (Nauru)',
'en_NU' => 'isi-Ngisi (Niue)',
'en_NZ' => 'isi-Ngisi (New Zealand)',
'en_PG' => 'isi-Ngisi (Papua New Guinea)',
'en_PH' => 'isi-Ngisi (Philippines)',
'en_PK' => 'isi-Ngisi (Phakistani)',
+ 'en_PL' => 'isi-Ngisi (Pholandi)',
'en_PN' => 'isi-Ngisi (Pitcairn)',
'en_PR' => 'isi-Ngisi (Puerto Rico)',
+ 'en_PT' => 'isi-Ngisi (Portugal)',
'en_PW' => 'isi-Ngisi (Palau)',
+ 'en_RO' => 'isi-Ngisi (Romania)',
'en_RW' => 'isi-Ngisi (Ruwanda)',
'en_SB' => 'isi-Ngisi (Solomon Islands)',
'en_SC' => 'isi-Ngisi (Seychelles)',
@@ -128,6 +137,7 @@
'en_SG' => 'isi-Ngisi (Singapore)',
'en_SH' => 'isi-Ngisi (Saint Helena)',
'en_SI' => 'isi-Ngisi (Slovenia)',
+ 'en_SK' => 'isi-Ngisi (Slovakia)',
'en_SL' => 'isi-Ngisi (Sierra Leone)',
'en_SZ' => 'isi-Ngisi (Swaziland)',
'en_TC' => 'isi-Ngisi (Turks and Caicos Islands)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ne.php b/src/Symfony/Component/Intl/Resources/data/locales/ne.php
index 895510042967f..6a4ee01690f35 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ne.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ne.php
@@ -121,29 +121,35 @@
'en_CM' => 'अङ्ग्रेजी (क्यामरून)',
'en_CX' => 'अङ्ग्रेजी (क्रिष्टमस टापु)',
'en_CY' => 'अङ्ग्रेजी (साइप्रस)',
+ 'en_CZ' => 'अङ्ग्रेजी (चेकिया)',
'en_DE' => 'अङ्ग्रेजी (जर्मनी)',
'en_DK' => 'अङ्ग्रेजी (डेनमार्क)',
'en_DM' => 'अङ्ग्रेजी (डोमिनिका)',
'en_ER' => 'अङ्ग्रेजी (एरिट्रीया)',
+ 'en_ES' => 'अङ्ग्रेजी (स्पेन)',
'en_FI' => 'अङ्ग्रेजी (फिनल्याण्ड)',
'en_FJ' => 'अङ्ग्रेजी (फिजी)',
'en_FK' => 'अङ्ग्रेजी (फकल्याण्ड टापुहरु)',
'en_FM' => 'अङ्ग्रेजी (माइक्रोनेसिया)',
+ 'en_FR' => 'अङ्ग्रेजी (फ्रान्स)',
'en_GB' => 'अङ्ग्रेजी (संयुक्त अधिराज्य)',
'en_GD' => 'अङ्ग्रेजी (ग्रेनाडा)',
'en_GG' => 'अङ्ग्रेजी (ग्यूर्न्सी)',
'en_GH' => 'अङ्ग्रेजी (घाना)',
'en_GI' => 'अङ्ग्रेजी (जिब्राल्टार)',
'en_GM' => 'अङ्ग्रेजी (गाम्विया)',
+ 'en_GS' => 'अङ्ग्रेजी (दक्षिण जर्जिया र दक्षिण स्यान्डवीच टापुहरू)',
'en_GU' => 'अङ्ग्रेजी (गुवाम)',
'en_GY' => 'अङ्ग्रेजी (गुयाना)',
'en_HK' => 'अङ्ग्रेजी (हङकङ चिनियाँ विशेष प्रशासनिक क्षेत्र)',
+ 'en_HU' => 'अङ्ग्रेजी (हङ्गेरी)',
'en_ID' => 'अङ्ग्रेजी (इन्डोनेशिया)',
'en_IE' => 'अङ्ग्रेजी (आयरल्याण्ड)',
'en_IL' => 'अङ्ग्रेजी (इजरायल)',
'en_IM' => 'अङ्ग्रेजी (आइल अफ म्यान)',
'en_IN' => 'अङ्ग्रेजी (भारत)',
'en_IO' => 'अङ्ग्रेजी (बेलायती हिन्द महासागर क्षेत्र)',
+ 'en_IT' => 'अङ्ग्रेजी (इटली)',
'en_JE' => 'अङ्ग्रेजी (जर्सी)',
'en_JM' => 'अङ्ग्रेजी (जमैका)',
'en_KE' => 'अङ्ग्रेजी (केन्या)',
@@ -167,15 +173,19 @@
'en_NF' => 'अङ्ग्रेजी (नोरफोल्क टापु)',
'en_NG' => 'अङ्ग्रेजी (नाइजेरिया)',
'en_NL' => 'अङ्ग्रेजी (नेदरल्याण्ड)',
+ 'en_NO' => 'अङ्ग्रेजी (नर्वे)',
'en_NR' => 'अङ्ग्रेजी (नाउरू)',
'en_NU' => 'अङ्ग्रेजी (नियुइ)',
'en_NZ' => 'अङ्ग्रेजी (न्युजिल्याण्ड)',
'en_PG' => 'अङ्ग्रेजी (पपुआ न्यू गाइनिया)',
'en_PH' => 'अङ्ग्रेजी (फिलिपिन्स)',
'en_PK' => 'अङ्ग्रेजी (पाकिस्तान)',
+ 'en_PL' => 'अङ्ग्रेजी (पोल्याण्ड)',
'en_PN' => 'अङ्ग्रेजी (पिटकाइर्न टापुहरु)',
'en_PR' => 'अङ्ग्रेजी (पुएर्टो रिको)',
+ 'en_PT' => 'अङ्ग्रेजी (पोर्चुगल)',
'en_PW' => 'अङ्ग्रेजी (पलाउ)',
+ 'en_RO' => 'अङ्ग्रेजी (रोमेनिया)',
'en_RW' => 'अङ्ग्रेजी (रवाण्डा)',
'en_SB' => 'अङ्ग्रेजी (सोलोमन टापुहरू)',
'en_SC' => 'अङ्ग्रेजी (सेचेलेस)',
@@ -184,6 +194,7 @@
'en_SG' => 'अङ्ग्रेजी (सिङ्गापुर)',
'en_SH' => 'अङ्ग्रेजी (सेन्ट हेलेना)',
'en_SI' => 'अङ्ग्रेजी (स्लोभेनिया)',
+ 'en_SK' => 'अङ्ग्रेजी (स्लोभाकिया)',
'en_SL' => 'अङ्ग्रेजी (सिएर्रा लिओन)',
'en_SS' => 'अङ्ग्रेजी (दक्षिण सुडान)',
'en_SX' => 'अङ्ग्रेजी (सिन्ट मार्टेन)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/nl.php b/src/Symfony/Component/Intl/Resources/data/locales/nl.php
index 320475ca2e7bb..f413174f56f33 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/nl.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/nl.php
@@ -121,29 +121,35 @@
'en_CM' => 'Engels (Kameroen)',
'en_CX' => 'Engels (Christmaseiland)',
'en_CY' => 'Engels (Cyprus)',
+ 'en_CZ' => 'Engels (Tsjechië)',
'en_DE' => 'Engels (Duitsland)',
'en_DK' => 'Engels (Denemarken)',
'en_DM' => 'Engels (Dominica)',
'en_ER' => 'Engels (Eritrea)',
+ 'en_ES' => 'Engels (Spanje)',
'en_FI' => 'Engels (Finland)',
'en_FJ' => 'Engels (Fiji)',
'en_FK' => 'Engels (Falklandeilanden)',
'en_FM' => 'Engels (Micronesia)',
+ 'en_FR' => 'Engels (Frankrijk)',
'en_GB' => 'Engels (Verenigd Koninkrijk)',
'en_GD' => 'Engels (Grenada)',
'en_GG' => 'Engels (Guernsey)',
'en_GH' => 'Engels (Ghana)',
'en_GI' => 'Engels (Gibraltar)',
'en_GM' => 'Engels (Gambia)',
+ 'en_GS' => 'Engels (Zuid-Georgia en Zuidelijke Sandwicheilanden)',
'en_GU' => 'Engels (Guam)',
'en_GY' => 'Engels (Guyana)',
'en_HK' => 'Engels (Hongkong SAR van China)',
+ 'en_HU' => 'Engels (Hongarije)',
'en_ID' => 'Engels (Indonesië)',
'en_IE' => 'Engels (Ierland)',
'en_IL' => 'Engels (Israël)',
'en_IM' => 'Engels (Isle of Man)',
'en_IN' => 'Engels (India)',
'en_IO' => 'Engels (Brits Indische Oceaanterritorium)',
+ 'en_IT' => 'Engels (Italië)',
'en_JE' => 'Engels (Jersey)',
'en_JM' => 'Engels (Jamaica)',
'en_KE' => 'Engels (Kenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'Engels (Norfolk)',
'en_NG' => 'Engels (Nigeria)',
'en_NL' => 'Engels (Nederland)',
+ 'en_NO' => 'Engels (Noorwegen)',
'en_NR' => 'Engels (Nauru)',
'en_NU' => 'Engels (Niue)',
'en_NZ' => 'Engels (Nieuw-Zeeland)',
'en_PG' => 'Engels (Papoea-Nieuw-Guinea)',
'en_PH' => 'Engels (Filipijnen)',
'en_PK' => 'Engels (Pakistan)',
+ 'en_PL' => 'Engels (Polen)',
'en_PN' => 'Engels (Pitcairneilanden)',
'en_PR' => 'Engels (Puerto Rico)',
+ 'en_PT' => 'Engels (Portugal)',
'en_PW' => 'Engels (Palau)',
+ 'en_RO' => 'Engels (Roemenië)',
'en_RW' => 'Engels (Rwanda)',
'en_SB' => 'Engels (Salomonseilanden)',
'en_SC' => 'Engels (Seychellen)',
@@ -184,6 +194,7 @@
'en_SG' => 'Engels (Singapore)',
'en_SH' => 'Engels (Sint-Helena)',
'en_SI' => 'Engels (Slovenië)',
+ 'en_SK' => 'Engels (Slowakije)',
'en_SL' => 'Engels (Sierra Leone)',
'en_SS' => 'Engels (Zuid-Soedan)',
'en_SX' => 'Engels (Sint-Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/no.php b/src/Symfony/Component/Intl/Resources/data/locales/no.php
index a412e2466789a..3e91509fbe707 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/no.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/no.php
@@ -121,29 +121,35 @@
'en_CM' => 'engelsk (Kamerun)',
'en_CX' => 'engelsk (Christmasøya)',
'en_CY' => 'engelsk (Kypros)',
+ 'en_CZ' => 'engelsk (Tsjekkia)',
'en_DE' => 'engelsk (Tyskland)',
'en_DK' => 'engelsk (Danmark)',
'en_DM' => 'engelsk (Dominica)',
'en_ER' => 'engelsk (Eritrea)',
+ 'en_ES' => 'engelsk (Spania)',
'en_FI' => 'engelsk (Finland)',
'en_FJ' => 'engelsk (Fiji)',
'en_FK' => 'engelsk (Falklandsøyene)',
'en_FM' => 'engelsk (Mikronesiaføderasjonen)',
+ 'en_FR' => 'engelsk (Frankrike)',
'en_GB' => 'engelsk (Storbritannia)',
'en_GD' => 'engelsk (Grenada)',
'en_GG' => 'engelsk (Guernsey)',
'en_GH' => 'engelsk (Ghana)',
'en_GI' => 'engelsk (Gibraltar)',
'en_GM' => 'engelsk (Gambia)',
+ 'en_GS' => 'engelsk (Sør-Georgia og Sør-Sandwichøyene)',
'en_GU' => 'engelsk (Guam)',
'en_GY' => 'engelsk (Guyana)',
'en_HK' => 'engelsk (Hongkong SAR Kina)',
+ 'en_HU' => 'engelsk (Ungarn)',
'en_ID' => 'engelsk (Indonesia)',
'en_IE' => 'engelsk (Irland)',
'en_IL' => 'engelsk (Israel)',
'en_IM' => 'engelsk (Man)',
'en_IN' => 'engelsk (India)',
'en_IO' => 'engelsk (Det britiske territoriet i Indiahavet)',
+ 'en_IT' => 'engelsk (Italia)',
'en_JE' => 'engelsk (Jersey)',
'en_JM' => 'engelsk (Jamaica)',
'en_KE' => 'engelsk (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'engelsk (Norfolkøya)',
'en_NG' => 'engelsk (Nigeria)',
'en_NL' => 'engelsk (Nederland)',
+ 'en_NO' => 'engelsk (Norge)',
'en_NR' => 'engelsk (Nauru)',
'en_NU' => 'engelsk (Niue)',
'en_NZ' => 'engelsk (New Zealand)',
'en_PG' => 'engelsk (Papua Ny-Guinea)',
'en_PH' => 'engelsk (Filippinene)',
'en_PK' => 'engelsk (Pakistan)',
+ 'en_PL' => 'engelsk (Polen)',
'en_PN' => 'engelsk (Pitcairnøyene)',
'en_PR' => 'engelsk (Puerto Rico)',
+ 'en_PT' => 'engelsk (Portugal)',
'en_PW' => 'engelsk (Palau)',
+ 'en_RO' => 'engelsk (Romania)',
'en_RW' => 'engelsk (Rwanda)',
'en_SB' => 'engelsk (Salomonøyene)',
'en_SC' => 'engelsk (Seychellene)',
@@ -184,6 +194,7 @@
'en_SG' => 'engelsk (Singapore)',
'en_SH' => 'engelsk (St. Helena)',
'en_SI' => 'engelsk (Slovenia)',
+ 'en_SK' => 'engelsk (Slovakia)',
'en_SL' => 'engelsk (Sierra Leone)',
'en_SS' => 'engelsk (Sør-Sudan)',
'en_SX' => 'engelsk (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/oc.php b/src/Symfony/Component/Intl/Resources/data/locales/oc.php
index b4c67453236c8..2dec31f577782 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/oc.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/oc.php
@@ -3,6 +3,8 @@
return [
'Names' => [
'en' => 'anglés',
+ 'en_ES' => 'anglés (Espanha)',
+ 'en_FR' => 'anglés (França)',
'en_HK' => 'anglés (Hong Kong)',
'oc' => 'occitan',
'oc_ES' => 'occitan (Espanha)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/om.php b/src/Symfony/Component/Intl/Resources/data/locales/om.php
index 36bf5aa0d342d..97f737869d549 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/om.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/om.php
@@ -107,29 +107,35 @@
'en_CM' => 'Afaan Ingilizii (Kaameruun)',
'en_CX' => 'Afaan Ingilizii (Odola Kirismaas)',
'en_CY' => 'Afaan Ingilizii (Qoophiroos)',
+ 'en_CZ' => 'Afaan Ingilizii (Cheechiya)',
'en_DE' => 'Afaan Ingilizii (Jarmanii)',
'en_DK' => 'Afaan Ingilizii (Deenmaark)',
'en_DM' => 'Afaan Ingilizii (Dominiikaa)',
'en_ER' => 'Afaan Ingilizii (Eertiraa)',
+ 'en_ES' => 'Afaan Ingilizii (Ispeen)',
'en_FI' => 'Afaan Ingilizii (Fiinlaand)',
'en_FJ' => 'Afaan Ingilizii (Fiijii)',
'en_FK' => 'Afaan Ingilizii (Odoloota Faalklaand)',
'en_FM' => 'Afaan Ingilizii (Maayikirooneeshiyaa)',
+ 'en_FR' => 'Afaan Ingilizii (Faransaay)',
'en_GB' => 'Afaan Ingilizii (United Kingdom)',
'en_GD' => 'Afaan Ingilizii (Girinaada)',
'en_GG' => 'Afaan Ingilizii (Guwernisey)',
'en_GH' => 'Afaan Ingilizii (Gaanaa)',
'en_GI' => 'Afaan Ingilizii (Gibraaltar)',
'en_GM' => 'Afaan Ingilizii (Gaambiyaa)',
+ 'en_GS' => 'Afaan Ingilizii (Joorjikaa Kibba fi Odoloota Saanduwiich Kibbaa)',
'en_GU' => 'Afaan Ingilizii (Guwama)',
'en_GY' => 'Afaan Ingilizii (Guyaanaa)',
'en_HK' => 'Afaan Ingilizii (Hoong Koong SAR Chaayinaa)',
+ 'en_HU' => 'Afaan Ingilizii (Hangaarii)',
'en_ID' => 'Afaan Ingilizii (Indooneeshiyaa)',
'en_IE' => 'Afaan Ingilizii (Ayeerlaand)',
'en_IL' => 'Afaan Ingilizii (Israa’eel)',
'en_IM' => 'Afaan Ingilizii (Islee oof Maan)',
'en_IN' => 'Afaan Ingilizii (Hindii)',
'en_IO' => 'Afaan Ingilizii (Daangaa Galaana Hindii Biritish)',
+ 'en_IT' => 'Afaan Ingilizii (Xaaliyaan)',
'en_JE' => 'Afaan Ingilizii (Jeersii)',
'en_JM' => 'Afaan Ingilizii (Jamaayikaa)',
'en_KE' => 'Afaan Ingilizii (Keeniyaa)',
@@ -153,15 +159,19 @@
'en_NF' => 'Afaan Ingilizii (Odola Noorfoolk)',
'en_NG' => 'Afaan Ingilizii (Naayijeeriyaa)',
'en_NL' => 'Afaan Ingilizii (Neezerlaand)',
+ 'en_NO' => 'Afaan Ingilizii (Noorwey)',
'en_NR' => 'Afaan Ingilizii (Naawuruu)',
'en_NU' => 'Afaan Ingilizii (Niwu’e)',
'en_NZ' => 'Afaan Ingilizii (Neewu Zilaand)',
'en_PG' => 'Afaan Ingilizii (Papuwa Neawu Giinii)',
'en_PH' => 'Afaan Ingilizii (Filippiins)',
'en_PK' => 'Afaan Ingilizii (Paakistaan)',
+ 'en_PL' => 'Afaan Ingilizii (Poolaand)',
'en_PN' => 'Afaan Ingilizii (Odoloota Pitikaayirin)',
'en_PR' => 'Afaan Ingilizii (Poortaar Riikoo)',
+ 'en_PT' => 'Afaan Ingilizii (Poorchugaal)',
'en_PW' => 'Afaan Ingilizii (Palaawu)',
+ 'en_RO' => 'Afaan Ingilizii (Roomaaniyaa)',
'en_RW' => 'Afaan Ingilizii (Ruwwandaa)',
'en_SB' => 'Afaan Ingilizii (Odoloota Solomoon)',
'en_SC' => 'Afaan Ingilizii (Siisheels)',
@@ -170,6 +180,7 @@
'en_SG' => 'Afaan Ingilizii (Singaapoor)',
'en_SH' => 'Afaan Ingilizii (St. Helenaa)',
'en_SI' => 'Afaan Ingilizii (Islooveeniyaa)',
+ 'en_SK' => 'Afaan Ingilizii (Isloovaakiyaa)',
'en_SL' => 'Afaan Ingilizii (Seeraaliyoon)',
'en_SS' => 'Afaan Ingilizii (Sudaan Kibbaa)',
'en_SX' => 'Afaan Ingilizii (Siint Maarteen)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/or.php b/src/Symfony/Component/Intl/Resources/data/locales/or.php
index d457500beb978..4d7eaed9eb4bc 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/or.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/or.php
@@ -121,29 +121,35 @@
'en_CM' => 'ଇଂରାଜୀ (କାମେରୁନ୍)',
'en_CX' => 'ଇଂରାଜୀ (ଖ୍ରୀଷ୍ଟମାସ ଦ୍ୱୀପ)',
'en_CY' => 'ଇଂରାଜୀ (ସାଇପ୍ରସ୍)',
+ 'en_CZ' => 'ଇଂରାଜୀ (ଚେଚିଆ)',
'en_DE' => 'ଇଂରାଜୀ (ଜର୍ମାନୀ)',
'en_DK' => 'ଇଂରାଜୀ (ଡେନମାର୍କ)',
'en_DM' => 'ଇଂରାଜୀ (ଡୋମିନିକା)',
'en_ER' => 'ଇଂରାଜୀ (ଇରିଟ୍ରିୟା)',
+ 'en_ES' => 'ଇଂରାଜୀ (ସ୍ପେନ୍)',
'en_FI' => 'ଇଂରାଜୀ (ଫିନଲ୍ୟାଣ୍ଡ)',
'en_FJ' => 'ଇଂରାଜୀ (ଫିଜି)',
'en_FK' => 'ଇଂରାଜୀ (ଫକ୍ଲ୍ୟାଣ୍ଡ ଦ୍ଵୀପପୁଞ୍ଜ)',
'en_FM' => 'ଇଂରାଜୀ (ମାଇକ୍ରୋନେସିଆ)',
+ 'en_FR' => 'ଇଂରାଜୀ (ଫ୍ରାନ୍ସ)',
'en_GB' => 'ଇଂରାଜୀ (ଯୁକ୍ତରାଜ୍ୟ)',
'en_GD' => 'ଇଂରାଜୀ (ଗ୍ରେନାଡା)',
'en_GG' => 'ଇଂରାଜୀ (ଗୁଏରନେସି)',
'en_GH' => 'ଇଂରାଜୀ (ଘାନା)',
'en_GI' => 'ଇଂରାଜୀ (ଜିବ୍ରାଲ୍ଟର୍)',
'en_GM' => 'ଇଂରାଜୀ (ଗାମ୍ବିଆ)',
+ 'en_GS' => 'ଇଂରାଜୀ (ଦକ୍ଷିଣ ଜର୍ଜିଆ ଏବଂ ଦକ୍ଷିଣ ସାଣ୍ଡୱିଚ୍ ଦ୍ୱୀପପୁଞ୍ଜ)',
'en_GU' => 'ଇଂରାଜୀ (ଗୁଆମ୍)',
'en_GY' => 'ଇଂରାଜୀ (ଗୁଇନା)',
'en_HK' => 'ଇଂରାଜୀ (ହଂ କଂ ଏସଏଆର୍ ଚାଇନା)',
+ 'en_HU' => 'ଇଂରାଜୀ (ହଙ୍ଗେରୀ)',
'en_ID' => 'ଇଂରାଜୀ (ଇଣ୍ଡୋନେସିଆ)',
'en_IE' => 'ଇଂରାଜୀ (ଆୟରଲ୍ୟାଣ୍ଡ)',
'en_IL' => 'ଇଂରାଜୀ (ଇସ୍ରାଏଲ୍)',
'en_IM' => 'ଇଂରାଜୀ (ଆଇଲ୍ ଅଫ୍ ମ୍ୟାନ୍)',
'en_IN' => 'ଇଂରାଜୀ (ଭାରତ)',
'en_IO' => 'ଇଂରାଜୀ (ବ୍ରିଟିଶ୍ ଭାରତୀୟ ମହାସାଗର କ୍ଷେତ୍ର)',
+ 'en_IT' => 'ଇଂରାଜୀ (ଇଟାଲୀ)',
'en_JE' => 'ଇଂରାଜୀ (ଜର୍ସି)',
'en_JM' => 'ଇଂରାଜୀ (ଜାମାଇକା)',
'en_KE' => 'ଇଂରାଜୀ (କେନିୟା)',
@@ -167,15 +173,19 @@
'en_NF' => 'ଇଂରାଜୀ (ନର୍ଫକ୍ ଦ୍ଵୀପ)',
'en_NG' => 'ଇଂରାଜୀ (ନାଇଜେରିଆ)',
'en_NL' => 'ଇଂରାଜୀ (ନେଦରଲ୍ୟାଣ୍ଡ)',
+ 'en_NO' => 'ଇଂରାଜୀ (ନରୱେ)',
'en_NR' => 'ଇଂରାଜୀ (ନାଉରୁ)',
'en_NU' => 'ଇଂରାଜୀ (ନିଉ)',
'en_NZ' => 'ଇଂରାଜୀ (ନ୍ୟୁଜିଲାଣ୍ଡ)',
'en_PG' => 'ଇଂରାଜୀ (ପପୁଆ ନ୍ୟୁ ଗିନି)',
'en_PH' => 'ଇଂରାଜୀ (ଫିଲିପାଇନସ୍)',
'en_PK' => 'ଇଂରାଜୀ (ପାକିସ୍ତାନ)',
+ 'en_PL' => 'ଇଂରାଜୀ (ପୋଲାଣ୍ଡ)',
'en_PN' => 'ଇଂରାଜୀ (ପିଟକାଇରିନ୍ ଦ୍ୱୀପପୁଞ୍ଜ)',
'en_PR' => 'ଇଂରାଜୀ (ପୁଏର୍ତ୍ତୋ ରିକୋ)',
+ 'en_PT' => 'ଇଂରାଜୀ (ପର୍ତ୍ତୁଗାଲ୍)',
'en_PW' => 'ଇଂରାଜୀ (ପାଲାଉ)',
+ 'en_RO' => 'ଇଂରାଜୀ (ରୋମାନିଆ)',
'en_RW' => 'ଇଂରାଜୀ (ରାୱାଣ୍ଡା)',
'en_SB' => 'ଇଂରାଜୀ (ସୋଲୋମନ୍ ଦ୍ୱୀପପୁଞ୍ଜ)',
'en_SC' => 'ଇଂରାଜୀ (ସେଚେଲସ୍)',
@@ -184,6 +194,7 @@
'en_SG' => 'ଇଂରାଜୀ (ସିଙ୍ଗାପୁର୍)',
'en_SH' => 'ଇଂରାଜୀ (ସେଣ୍ଟ ହେଲେନା)',
'en_SI' => 'ଇଂରାଜୀ (ସ୍ଲୋଭେନିଆ)',
+ 'en_SK' => 'ଇଂରାଜୀ (ସ୍ଲୋଭାକିଆ)',
'en_SL' => 'ଇଂରାଜୀ (ସିଏରା ଲିଓନ)',
'en_SS' => 'ଇଂରାଜୀ (ଦକ୍ଷିଣ ସୁଦାନ)',
'en_SX' => 'ଇଂରାଜୀ (ସିଣ୍ଟ ମାର୍ଟୀନ୍)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/os.php b/src/Symfony/Component/Intl/Resources/data/locales/os.php
index d962bad705a4f..38a4a0308e270 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/os.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/os.php
@@ -29,8 +29,10 @@
'en_001' => 'англисаг (Дуне)',
'en_150' => 'англисаг (Европӕ)',
'en_DE' => 'англисаг (Герман)',
+ 'en_FR' => 'англисаг (Франц)',
'en_GB' => 'англисаг (Стыр Британи)',
'en_IN' => 'англисаг (Инди)',
+ 'en_IT' => 'англисаг (Итали)',
'en_US' => 'англисаг (АИШ)',
'eo' => 'есперанто',
'eo_001' => 'есперанто (Дуне)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/pa.php b/src/Symfony/Component/Intl/Resources/data/locales/pa.php
index daac5273bff69..abbc580b657b3 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/pa.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/pa.php
@@ -121,29 +121,35 @@
'en_CM' => 'ਅੰਗਰੇਜ਼ੀ (ਕੈਮਰੂਨ)',
'en_CX' => 'ਅੰਗਰੇਜ਼ੀ (ਕ੍ਰਿਸਮਿਸ ਟਾਪੂ)',
'en_CY' => 'ਅੰਗਰੇਜ਼ੀ (ਸਾਇਪ੍ਰਸ)',
+ 'en_CZ' => 'ਅੰਗਰੇਜ਼ੀ (ਚੈਕੀਆ)',
'en_DE' => 'ਅੰਗਰੇਜ਼ੀ (ਜਰਮਨੀ)',
'en_DK' => 'ਅੰਗਰੇਜ਼ੀ (ਡੈਨਮਾਰਕ)',
'en_DM' => 'ਅੰਗਰੇਜ਼ੀ (ਡੋਮੀਨਿਕਾ)',
'en_ER' => 'ਅੰਗਰੇਜ਼ੀ (ਇਰੀਟ੍ਰਿਆ)',
+ 'en_ES' => 'ਅੰਗਰੇਜ਼ੀ (ਸਪੇਨ)',
'en_FI' => 'ਅੰਗਰੇਜ਼ੀ (ਫਿਨਲੈਂਡ)',
'en_FJ' => 'ਅੰਗਰੇਜ਼ੀ (ਫ਼ਿਜੀ)',
'en_FK' => 'ਅੰਗਰੇਜ਼ੀ (ਫ਼ਾਕਲੈਂਡ ਟਾਪੂ)',
'en_FM' => 'ਅੰਗਰੇਜ਼ੀ (ਮਾਇਕ੍ਰੋਨੇਸ਼ੀਆ)',
+ 'en_FR' => 'ਅੰਗਰੇਜ਼ੀ (ਫ਼ਰਾਂਸ)',
'en_GB' => 'ਅੰਗਰੇਜ਼ੀ (ਯੂਨਾਈਟਡ ਕਿੰਗਡਮ)',
'en_GD' => 'ਅੰਗਰੇਜ਼ੀ (ਗ੍ਰੇਨਾਡਾ)',
'en_GG' => 'ਅੰਗਰੇਜ਼ੀ (ਗਰਨਜੀ)',
'en_GH' => 'ਅੰਗਰੇਜ਼ੀ (ਘਾਨਾ)',
'en_GI' => 'ਅੰਗਰੇਜ਼ੀ (ਜਿਬਰਾਲਟਰ)',
'en_GM' => 'ਅੰਗਰੇਜ਼ੀ (ਗੈਂਬੀਆ)',
+ 'en_GS' => 'ਅੰਗਰੇਜ਼ੀ (ਦੱਖਣੀ ਜਾਰਜੀਆ ਅਤੇ ਦੱਖਣੀ ਸੈਂਡਵਿਚ ਟਾਪੂ)',
'en_GU' => 'ਅੰਗਰੇਜ਼ੀ (ਗੁਆਮ)',
'en_GY' => 'ਅੰਗਰੇਜ਼ੀ (ਗੁਯਾਨਾ)',
'en_HK' => 'ਅੰਗਰੇਜ਼ੀ (ਹਾਂਗ ਕਾਂਗ ਐਸਏਆਰ ਚੀਨ)',
+ 'en_HU' => 'ਅੰਗਰੇਜ਼ੀ (ਹੰਗਰੀ)',
'en_ID' => 'ਅੰਗਰੇਜ਼ੀ (ਇੰਡੋਨੇਸ਼ੀਆ)',
'en_IE' => 'ਅੰਗਰੇਜ਼ੀ (ਆਇਰਲੈਂਡ)',
'en_IL' => 'ਅੰਗਰੇਜ਼ੀ (ਇਜ਼ਰਾਈਲ)',
'en_IM' => 'ਅੰਗਰੇਜ਼ੀ (ਆਇਲ ਆਫ ਮੈਨ)',
'en_IN' => 'ਅੰਗਰੇਜ਼ੀ (ਭਾਰਤ)',
'en_IO' => 'ਅੰਗਰੇਜ਼ੀ (ਬਰਤਾਨਵੀ ਹਿੰਦ ਮਹਾਂਸਾਗਰ ਖਿੱਤਾ)',
+ 'en_IT' => 'ਅੰਗਰੇਜ਼ੀ (ਇਟਲੀ)',
'en_JE' => 'ਅੰਗਰੇਜ਼ੀ (ਜਰਸੀ)',
'en_JM' => 'ਅੰਗਰੇਜ਼ੀ (ਜਮਾਇਕਾ)',
'en_KE' => 'ਅੰਗਰੇਜ਼ੀ (ਕੀਨੀਆ)',
@@ -167,15 +173,19 @@
'en_NF' => 'ਅੰਗਰੇਜ਼ੀ (ਨੋਰਫੌਕ ਟਾਪੂ)',
'en_NG' => 'ਅੰਗਰੇਜ਼ੀ (ਨਾਈਜੀਰੀਆ)',
'en_NL' => 'ਅੰਗਰੇਜ਼ੀ (ਨੀਦਰਲੈਂਡ)',
+ 'en_NO' => 'ਅੰਗਰੇਜ਼ੀ (ਨਾਰਵੇ)',
'en_NR' => 'ਅੰਗਰੇਜ਼ੀ (ਨਾਉਰੂ)',
'en_NU' => 'ਅੰਗਰੇਜ਼ੀ (ਨਿਯੂ)',
'en_NZ' => 'ਅੰਗਰੇਜ਼ੀ (ਨਿਊਜ਼ੀਲੈਂਡ)',
'en_PG' => 'ਅੰਗਰੇਜ਼ੀ (ਪਾਪੂਆ ਨਿਊ ਗਿਨੀ)',
'en_PH' => 'ਅੰਗਰੇਜ਼ੀ (ਫਿਲੀਪੀਨਜ)',
'en_PK' => 'ਅੰਗਰੇਜ਼ੀ (ਪਾਕਿਸਤਾਨ)',
+ 'en_PL' => 'ਅੰਗਰੇਜ਼ੀ (ਪੋਲੈਂਡ)',
'en_PN' => 'ਅੰਗਰੇਜ਼ੀ (ਪਿਟਕੇਰਨ ਟਾਪੂ)',
'en_PR' => 'ਅੰਗਰੇਜ਼ੀ (ਪਿਊਰਟੋ ਰਿਕੋ)',
+ 'en_PT' => 'ਅੰਗਰੇਜ਼ੀ (ਪੁਰਤਗਾਲ)',
'en_PW' => 'ਅੰਗਰੇਜ਼ੀ (ਪਲਾਉ)',
+ 'en_RO' => 'ਅੰਗਰੇਜ਼ੀ (ਰੋਮਾਨੀਆ)',
'en_RW' => 'ਅੰਗਰੇਜ਼ੀ (ਰਵਾਂਡਾ)',
'en_SB' => 'ਅੰਗਰੇਜ਼ੀ (ਸੋਲੋਮਨ ਟਾਪੂ)',
'en_SC' => 'ਅੰਗਰੇਜ਼ੀ (ਸੇਸ਼ਲਸ)',
@@ -184,6 +194,7 @@
'en_SG' => 'ਅੰਗਰੇਜ਼ੀ (ਸਿੰਗਾਪੁਰ)',
'en_SH' => 'ਅੰਗਰੇਜ਼ੀ (ਸੇਂਟ ਹੇਲੇਨਾ)',
'en_SI' => 'ਅੰਗਰੇਜ਼ੀ (ਸਲੋਵੇਨੀਆ)',
+ 'en_SK' => 'ਅੰਗਰੇਜ਼ੀ (ਸਲੋਵਾਕੀਆ)',
'en_SL' => 'ਅੰਗਰੇਜ਼ੀ (ਸਿਏਰਾ ਲਿਓਨ)',
'en_SS' => 'ਅੰਗਰੇਜ਼ੀ (ਦੱਖਣ ਸੁਡਾਨ)',
'en_SX' => 'ਅੰਗਰੇਜ਼ੀ (ਸਿੰਟ ਮਾਰਟੀਨ)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/pl.php b/src/Symfony/Component/Intl/Resources/data/locales/pl.php
index 3132d6551eb16..dac92226329d7 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/pl.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/pl.php
@@ -121,29 +121,35 @@
'en_CM' => 'angielski (Kamerun)',
'en_CX' => 'angielski (Wyspa Bożego Narodzenia)',
'en_CY' => 'angielski (Cypr)',
+ 'en_CZ' => 'angielski (Czechy)',
'en_DE' => 'angielski (Niemcy)',
'en_DK' => 'angielski (Dania)',
'en_DM' => 'angielski (Dominika)',
'en_ER' => 'angielski (Erytrea)',
+ 'en_ES' => 'angielski (Hiszpania)',
'en_FI' => 'angielski (Finlandia)',
'en_FJ' => 'angielski (Fidżi)',
'en_FK' => 'angielski (Falklandy)',
'en_FM' => 'angielski (Mikronezja)',
+ 'en_FR' => 'angielski (Francja)',
'en_GB' => 'angielski (Wielka Brytania)',
'en_GD' => 'angielski (Grenada)',
'en_GG' => 'angielski (Guernsey)',
'en_GH' => 'angielski (Ghana)',
'en_GI' => 'angielski (Gibraltar)',
'en_GM' => 'angielski (Gambia)',
+ 'en_GS' => 'angielski (Georgia Południowa i Sandwich Południowy)',
'en_GU' => 'angielski (Guam)',
'en_GY' => 'angielski (Gujana)',
'en_HK' => 'angielski (SRA Hongkong [Chiny])',
+ 'en_HU' => 'angielski (Węgry)',
'en_ID' => 'angielski (Indonezja)',
'en_IE' => 'angielski (Irlandia)',
'en_IL' => 'angielski (Izrael)',
'en_IM' => 'angielski (Wyspa Man)',
'en_IN' => 'angielski (Indie)',
'en_IO' => 'angielski (Brytyjskie Terytorium Oceanu Indyjskiego)',
+ 'en_IT' => 'angielski (Włochy)',
'en_JE' => 'angielski (Jersey)',
'en_JM' => 'angielski (Jamajka)',
'en_KE' => 'angielski (Kenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'angielski (Norfolk)',
'en_NG' => 'angielski (Nigeria)',
'en_NL' => 'angielski (Holandia)',
+ 'en_NO' => 'angielski (Norwegia)',
'en_NR' => 'angielski (Nauru)',
'en_NU' => 'angielski (Niue)',
'en_NZ' => 'angielski (Nowa Zelandia)',
'en_PG' => 'angielski (Papua-Nowa Gwinea)',
'en_PH' => 'angielski (Filipiny)',
'en_PK' => 'angielski (Pakistan)',
+ 'en_PL' => 'angielski (Polska)',
'en_PN' => 'angielski (Pitcairn)',
'en_PR' => 'angielski (Portoryko)',
+ 'en_PT' => 'angielski (Portugalia)',
'en_PW' => 'angielski (Palau)',
+ 'en_RO' => 'angielski (Rumunia)',
'en_RW' => 'angielski (Rwanda)',
'en_SB' => 'angielski (Wyspy Salomona)',
'en_SC' => 'angielski (Seszele)',
@@ -184,6 +194,7 @@
'en_SG' => 'angielski (Singapur)',
'en_SH' => 'angielski (Wyspa Świętej Heleny)',
'en_SI' => 'angielski (Słowenia)',
+ 'en_SK' => 'angielski (Słowacja)',
'en_SL' => 'angielski (Sierra Leone)',
'en_SS' => 'angielski (Sudan Południowy)',
'en_SX' => 'angielski (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ps.php b/src/Symfony/Component/Intl/Resources/data/locales/ps.php
index 551137b4fc35d..3a1d38c8521f6 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ps.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ps.php
@@ -121,29 +121,35 @@
'en_CM' => 'انګليسي (کامرون)',
'en_CX' => 'انګليسي (د کريسمس ټاپو)',
'en_CY' => 'انګليسي (قبرس)',
+ 'en_CZ' => 'انګليسي (چکیا)',
'en_DE' => 'انګليسي (المان)',
'en_DK' => 'انګليسي (ډنمارک)',
'en_DM' => 'انګليسي (دومینیکا)',
'en_ER' => 'انګليسي (اریتره)',
+ 'en_ES' => 'انګليسي (هسپانیه)',
'en_FI' => 'انګليسي (فنلینډ)',
'en_FJ' => 'انګليسي (فجي)',
'en_FK' => 'انګليسي (فاکلينډ ټاپوګان)',
'en_FM' => 'انګليسي (میکرونیزیا)',
+ 'en_FR' => 'انګليسي (فرانسه)',
'en_GB' => 'انګليسي (برتانیه)',
'en_GD' => 'انګليسي (ګرنادا)',
'en_GG' => 'انګليسي (ګرنسي)',
'en_GH' => 'انګليسي (ګانا)',
'en_GI' => 'انګليسي (جبل الطارق)',
'en_GM' => 'انګليسي (ګامبیا)',
+ 'en_GS' => 'انګليسي (سويلي جارجيا او سويلي سېنډوچ ټاپوګان)',
'en_GU' => 'انګليسي (ګوام)',
'en_GY' => 'انګليسي (ګیانا)',
'en_HK' => 'انګليسي (هانګ کانګ SAR چین)',
+ 'en_HU' => 'انګليسي (مجارستان)',
'en_ID' => 'انګليسي (اندونیزیا)',
'en_IE' => 'انګليسي (آيرلېنډ)',
'en_IL' => 'انګليسي (اسراييل)',
'en_IM' => 'انګليسي (د آئل آف مین)',
'en_IN' => 'انګليسي (هند)',
'en_IO' => 'انګليسي (د برتانوي هند سمندري سيمه)',
+ 'en_IT' => 'انګليسي (ایټالیه)',
'en_JE' => 'انګليسي (جرسی)',
'en_JM' => 'انګليسي (جمیکا)',
'en_KE' => 'انګليسي (کینیا)',
@@ -167,15 +173,19 @@
'en_NF' => 'انګليسي (نارفولک ټاپوګان)',
'en_NG' => 'انګليسي (نایجیریا)',
'en_NL' => 'انګليسي (هالېنډ)',
+ 'en_NO' => 'انګليسي (ناروۍ)',
'en_NR' => 'انګليسي (نایرو)',
'en_NU' => 'انګليسي (نیوو)',
'en_NZ' => 'انګليسي (نیوزیلنډ)',
'en_PG' => 'انګليسي (پاپوا نيو ګيني)',
'en_PH' => 'انګليسي (فلپين)',
'en_PK' => 'انګليسي (پاکستان)',
+ 'en_PL' => 'انګليسي (پولنډ)',
'en_PN' => 'انګليسي (پيټکيرن ټاپوګان)',
'en_PR' => 'انګليسي (پورتو ریکو)',
+ 'en_PT' => 'انګليسي (پورتګال)',
'en_PW' => 'انګليسي (پلاؤ)',
+ 'en_RO' => 'انګليسي (رومانیا)',
'en_RW' => 'انګليسي (روندا)',
'en_SB' => 'انګليسي (سليمان ټاپوګان)',
'en_SC' => 'انګليسي (سیچیلیس)',
@@ -184,6 +194,7 @@
'en_SG' => 'انګليسي (سينگاپور)',
'en_SH' => 'انګليسي (سینټ هیلینا)',
'en_SI' => 'انګليسي (سلوانیا)',
+ 'en_SK' => 'انګليسي (سلواکیا)',
'en_SL' => 'انګليسي (سییرا لیون)',
'en_SS' => 'انګليسي (سويلي سوډان)',
'en_SX' => 'انګليسي (سینټ مارټین)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/pt.php b/src/Symfony/Component/Intl/Resources/data/locales/pt.php
index b3cc7780d6b06..57c90a64e67d2 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/pt.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/pt.php
@@ -121,29 +121,35 @@
'en_CM' => 'inglês (Camarões)',
'en_CX' => 'inglês (Ilha Christmas)',
'en_CY' => 'inglês (Chipre)',
+ 'en_CZ' => 'inglês (Tchéquia)',
'en_DE' => 'inglês (Alemanha)',
'en_DK' => 'inglês (Dinamarca)',
'en_DM' => 'inglês (Dominica)',
'en_ER' => 'inglês (Eritreia)',
+ 'en_ES' => 'inglês (Espanha)',
'en_FI' => 'inglês (Finlândia)',
'en_FJ' => 'inglês (Fiji)',
'en_FK' => 'inglês (Ilhas Malvinas)',
'en_FM' => 'inglês (Micronésia)',
+ 'en_FR' => 'inglês (França)',
'en_GB' => 'inglês (Reino Unido)',
'en_GD' => 'inglês (Granada)',
'en_GG' => 'inglês (Guernsey)',
'en_GH' => 'inglês (Gana)',
'en_GI' => 'inglês (Gibraltar)',
'en_GM' => 'inglês (Gâmbia)',
+ 'en_GS' => 'inglês (Ilhas Geórgia do Sul e Sandwich do Sul)',
'en_GU' => 'inglês (Guam)',
'en_GY' => 'inglês (Guiana)',
'en_HK' => 'inglês (Hong Kong, RAE da China)',
+ 'en_HU' => 'inglês (Hungria)',
'en_ID' => 'inglês (Indonésia)',
'en_IE' => 'inglês (Irlanda)',
'en_IL' => 'inglês (Israel)',
'en_IM' => 'inglês (Ilha de Man)',
'en_IN' => 'inglês (Índia)',
'en_IO' => 'inglês (Território Britânico do Oceano Índico)',
+ 'en_IT' => 'inglês (Itália)',
'en_JE' => 'inglês (Jersey)',
'en_JM' => 'inglês (Jamaica)',
'en_KE' => 'inglês (Quênia)',
@@ -167,15 +173,19 @@
'en_NF' => 'inglês (Ilha Norfolk)',
'en_NG' => 'inglês (Nigéria)',
'en_NL' => 'inglês (Países Baixos)',
+ 'en_NO' => 'inglês (Noruega)',
'en_NR' => 'inglês (Nauru)',
'en_NU' => 'inglês (Niue)',
'en_NZ' => 'inglês (Nova Zelândia)',
'en_PG' => 'inglês (Papua-Nova Guiné)',
'en_PH' => 'inglês (Filipinas)',
'en_PK' => 'inglês (Paquistão)',
+ 'en_PL' => 'inglês (Polônia)',
'en_PN' => 'inglês (Ilhas Pitcairn)',
'en_PR' => 'inglês (Porto Rico)',
+ 'en_PT' => 'inglês (Portugal)',
'en_PW' => 'inglês (Palau)',
+ 'en_RO' => 'inglês (Romênia)',
'en_RW' => 'inglês (Ruanda)',
'en_SB' => 'inglês (Ilhas Salomão)',
'en_SC' => 'inglês (Seicheles)',
@@ -184,6 +194,7 @@
'en_SG' => 'inglês (Singapura)',
'en_SH' => 'inglês (Santa Helena)',
'en_SI' => 'inglês (Eslovênia)',
+ 'en_SK' => 'inglês (Eslováquia)',
'en_SL' => 'inglês (Serra Leoa)',
'en_SS' => 'inglês (Sudão do Sul)',
'en_SX' => 'inglês (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/pt_PT.php b/src/Symfony/Component/Intl/Resources/data/locales/pt_PT.php
index ed071e8d72da9..0595568cd88dd 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/pt_PT.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/pt_PT.php
@@ -23,6 +23,7 @@
'en_BS' => 'inglês (Baamas)',
'en_CC' => 'inglês (Ilhas dos Cocos [Keeling])',
'en_CX' => 'inglês (Ilha do Natal)',
+ 'en_CZ' => 'inglês (Chéquia)',
'en_DM' => 'inglês (Domínica)',
'en_FK' => 'inglês (Ilhas Falkland)',
'en_GG' => 'inglês (Guernesey)',
@@ -36,6 +37,8 @@
'en_MU' => 'inglês (Maurícia)',
'en_MW' => 'inglês (Maláui)',
'en_NU' => 'inglês (Niuê)',
+ 'en_PL' => 'inglês (Polónia)',
+ 'en_RO' => 'inglês (Roménia)',
'en_SI' => 'inglês (Eslovénia)',
'en_SX' => 'inglês (São Martinho [Sint Maarten])',
'en_TK' => 'inglês (Toquelau)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/qu.php b/src/Symfony/Component/Intl/Resources/data/locales/qu.php
index 58fa36e7f2360..17a9d47eacc14 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/qu.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/qu.php
@@ -121,29 +121,35 @@
'en_CM' => 'Ingles Simi (Camerún)',
'en_CX' => 'Ingles Simi (Isla Christmas)',
'en_CY' => 'Ingles Simi (Chipre)',
+ 'en_CZ' => 'Ingles Simi (Chequia)',
'en_DE' => 'Ingles Simi (Alemania)',
'en_DK' => 'Ingles Simi (Dinamarca)',
'en_DM' => 'Ingles Simi (Dominica)',
'en_ER' => 'Ingles Simi (Eritrea)',
+ 'en_ES' => 'Ingles Simi (España)',
'en_FI' => 'Ingles Simi (Finlandia)',
'en_FJ' => 'Ingles Simi (Fiyi)',
'en_FK' => 'Ingles Simi (Islas Malvinas)',
'en_FM' => 'Ingles Simi (Micronesia)',
+ 'en_FR' => 'Ingles Simi (Francia)',
'en_GB' => 'Ingles Simi (Reino Unido)',
'en_GD' => 'Ingles Simi (Granada)',
'en_GG' => 'Ingles Simi (Guernesey)',
'en_GH' => 'Ingles Simi (Ghana)',
'en_GI' => 'Ingles Simi (Gibraltar)',
'en_GM' => 'Ingles Simi (Gambia)',
+ 'en_GS' => 'Ingles Simi (Georgia del Sur e Islas Sandwich del Sur)',
'en_GU' => 'Ingles Simi (Guam)',
'en_GY' => 'Ingles Simi (Guyana)',
'en_HK' => 'Ingles Simi (Hong Kong RAE China)',
+ 'en_HU' => 'Ingles Simi (Hungría)',
'en_ID' => 'Ingles Simi (Indonesia)',
'en_IE' => 'Ingles Simi (Irlanda)',
'en_IL' => 'Ingles Simi (Israel)',
'en_IM' => 'Ingles Simi (Isla de Man)',
'en_IN' => 'Ingles Simi (India)',
'en_IO' => 'Ingles Simi (Territorio Británico del Océano Índico)',
+ 'en_IT' => 'Ingles Simi (Italia)',
'en_JE' => 'Ingles Simi (Jersey)',
'en_JM' => 'Ingles Simi (Jamaica)',
'en_KE' => 'Ingles Simi (Kenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'Ingles Simi (Isla Norfolk)',
'en_NG' => 'Ingles Simi (Nigeria)',
'en_NL' => 'Ingles Simi (Países Bajos)',
+ 'en_NO' => 'Ingles Simi (Noruega)',
'en_NR' => 'Ingles Simi (Nauru)',
'en_NU' => 'Ingles Simi (Niue)',
'en_NZ' => 'Ingles Simi (Nueva Zelanda)',
'en_PG' => 'Ingles Simi (Papúa Nueva Guinea)',
'en_PH' => 'Ingles Simi (Filipinas)',
'en_PK' => 'Ingles Simi (Pakistán)',
+ 'en_PL' => 'Ingles Simi (Polonia)',
'en_PN' => 'Ingles Simi (Islas Pitcairn)',
'en_PR' => 'Ingles Simi (Puerto Rico)',
+ 'en_PT' => 'Ingles Simi (Portugal)',
'en_PW' => 'Ingles Simi (Palaos)',
+ 'en_RO' => 'Ingles Simi (Rumania)',
'en_RW' => 'Ingles Simi (Ruanda)',
'en_SB' => 'Ingles Simi (Islas Salomón)',
'en_SC' => 'Ingles Simi (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'Ingles Simi (Singapur)',
'en_SH' => 'Ingles Simi (Santa Elena)',
'en_SI' => 'Ingles Simi (Eslovenia)',
+ 'en_SK' => 'Ingles Simi (Eslovaquia)',
'en_SL' => 'Ingles Simi (Sierra Leona)',
'en_SS' => 'Ingles Simi (Sudán del Sur)',
'en_SX' => 'Ingles Simi (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/rm.php b/src/Symfony/Component/Intl/Resources/data/locales/rm.php
index 1c9b71b60f1d2..9508df1b2e32a 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/rm.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/rm.php
@@ -121,28 +121,34 @@
'en_CM' => 'englais (Camerun)',
'en_CX' => 'englais (Insla da Nadal)',
'en_CY' => 'englais (Cipra)',
+ 'en_CZ' => 'englais (Tschechia)',
'en_DE' => 'englais (Germania)',
'en_DK' => 'englais (Danemarc)',
'en_DM' => 'englais (Dominica)',
'en_ER' => 'englais (Eritrea)',
+ 'en_ES' => 'englais (Spagna)',
'en_FI' => 'englais (Finlanda)',
'en_FJ' => 'englais (Fidschi)',
'en_FK' => 'englais (Inslas dal Falkland)',
'en_FM' => 'englais (Micronesia)',
+ 'en_FR' => 'englais (Frantscha)',
'en_GB' => 'englais (Reginavel Unì)',
'en_GD' => 'englais (Grenada)',
'en_GG' => 'englais (Guernsey)',
'en_GH' => 'englais (Ghana)',
'en_GI' => 'englais (Gibraltar)',
'en_GM' => 'englais (Gambia)',
+ 'en_GS' => 'englais (Georgia dal Sid e las Inslas Sandwich dal Sid)',
'en_GU' => 'englais (Guam)',
'en_GY' => 'englais (Guyana)',
'en_HK' => 'englais (Regiun d’administraziun speziala da Hongkong, China)',
+ 'en_HU' => 'englais (Ungaria)',
'en_ID' => 'englais (Indonesia)',
'en_IE' => 'englais (Irlanda)',
'en_IL' => 'englais (Israel)',
'en_IM' => 'englais (Insla da Man)',
'en_IN' => 'englais (India)',
+ 'en_IT' => 'englais (Italia)',
'en_JE' => 'englais (Jersey)',
'en_JM' => 'englais (Giamaica)',
'en_KE' => 'englais (Kenia)',
@@ -166,15 +172,19 @@
'en_NF' => 'englais (Insla Norfolk)',
'en_NG' => 'englais (Nigeria)',
'en_NL' => 'englais (Pajais Bass)',
+ 'en_NO' => 'englais (Norvegia)',
'en_NR' => 'englais (Nauru)',
'en_NU' => 'englais (Niue)',
'en_NZ' => 'englais (Nova Zelanda)',
'en_PG' => 'englais (Papua Nova Guinea)',
'en_PH' => 'englais (Filippinas)',
'en_PK' => 'englais (Pakistan)',
+ 'en_PL' => 'englais (Pologna)',
'en_PN' => 'englais (Pitcairn)',
'en_PR' => 'englais (Puerto Rico)',
+ 'en_PT' => 'englais (Portugal)',
'en_PW' => 'englais (Palau)',
+ 'en_RO' => 'englais (Rumenia)',
'en_RW' => 'englais (Ruanda)',
'en_SB' => 'englais (Inslas Salomonas)',
'en_SC' => 'englais (Seychellas)',
@@ -183,6 +193,7 @@
'en_SG' => 'englais (Singapur)',
'en_SH' => 'englais (Sontg’Elena)',
'en_SI' => 'englais (Slovenia)',
+ 'en_SK' => 'englais (Slovachia)',
'en_SL' => 'englais (Sierra Leone)',
'en_SS' => 'englais (Sudan dal Sid)',
'en_SX' => 'englais (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/rn.php b/src/Symfony/Component/Intl/Resources/data/locales/rn.php
index 26c3aa3610bc1..979345630fc6b 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/rn.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/rn.php
@@ -71,14 +71,17 @@
'en_CK' => 'Icongereza (Izinga rya Kuku)',
'en_CM' => 'Icongereza (Kameruni)',
'en_CY' => 'Icongereza (Izinga rya Shipure)',
+ 'en_CZ' => 'Icongereza (Repubulika ya Ceke)',
'en_DE' => 'Icongereza (Ubudage)',
'en_DK' => 'Icongereza (Danimariki)',
'en_DM' => 'Icongereza (Dominika)',
'en_ER' => 'Icongereza (Elitereya)',
+ 'en_ES' => 'Icongereza (Hisipaniya)',
'en_FI' => 'Icongereza (Finilandi)',
'en_FJ' => 'Icongereza (Fiji)',
'en_FK' => 'Icongereza (Izinga rya Filikilandi)',
'en_FM' => 'Icongereza (Mikoroniziya)',
+ 'en_FR' => 'Icongereza (Ubufaransa)',
'en_GB' => 'Icongereza (Ubwongereza)',
'en_GD' => 'Icongereza (Gerenada)',
'en_GH' => 'Icongereza (Gana)',
@@ -86,10 +89,12 @@
'en_GM' => 'Icongereza (Gambiya)',
'en_GU' => 'Icongereza (Gwamu)',
'en_GY' => 'Icongereza (Guyane)',
+ 'en_HU' => 'Icongereza (Hungariya)',
'en_ID' => 'Icongereza (Indoneziya)',
'en_IE' => 'Icongereza (Irilandi)',
'en_IL' => 'Icongereza (Isiraheli)',
'en_IN' => 'Icongereza (Ubuhindi)',
+ 'en_IT' => 'Icongereza (Ubutaliyani)',
'en_JM' => 'Icongereza (Jamayika)',
'en_KE' => 'Icongereza (Kenya)',
'en_KI' => 'Icongereza (Kiribati)',
@@ -111,15 +116,19 @@
'en_NF' => 'Icongereza (izinga rya Norufoluke)',
'en_NG' => 'Icongereza (Nijeriya)',
'en_NL' => 'Icongereza (Ubuholandi)',
+ 'en_NO' => 'Icongereza (Noruveji)',
'en_NR' => 'Icongereza (Nawuru)',
'en_NU' => 'Icongereza (Niyuwe)',
'en_NZ' => 'Icongereza (Nuvelizelandi)',
'en_PG' => 'Icongereza (Papuwa Niyugineya)',
'en_PH' => 'Icongereza (Amazinga ya Filipine)',
'en_PK' => 'Icongereza (Pakisitani)',
+ 'en_PL' => 'Icongereza (Polonye)',
'en_PN' => 'Icongereza (Pitikeyirini)',
'en_PR' => 'Icongereza (Puwetoriko)',
+ 'en_PT' => 'Icongereza (Porutugali)',
'en_PW' => 'Icongereza (Palawu)',
+ 'en_RO' => 'Icongereza (Rumaniya)',
'en_RW' => 'Icongereza (u Rwanda)',
'en_SB' => 'Icongereza (Amazinga ya Salumoni)',
'en_SC' => 'Icongereza (Amazinga ya Seyisheli)',
@@ -128,6 +137,7 @@
'en_SG' => 'Icongereza (Singapuru)',
'en_SH' => 'Icongereza (Sehelene)',
'en_SI' => 'Icongereza (Siloveniya)',
+ 'en_SK' => 'Icongereza (Silovakiya)',
'en_SL' => 'Icongereza (Siyeralewone)',
'en_SZ' => 'Icongereza (Suwazilandi)',
'en_TC' => 'Icongereza (Amazinga ya Turkisi na Cayikosi)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ro.php b/src/Symfony/Component/Intl/Resources/data/locales/ro.php
index a75fa6e172a9a..0b54745b81736 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ro.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ro.php
@@ -121,29 +121,35 @@
'en_CM' => 'engleză (Camerun)',
'en_CX' => 'engleză (Insula Christmas)',
'en_CY' => 'engleză (Cipru)',
+ 'en_CZ' => 'engleză (Cehia)',
'en_DE' => 'engleză (Germania)',
'en_DK' => 'engleză (Danemarca)',
'en_DM' => 'engleză (Dominica)',
'en_ER' => 'engleză (Eritreea)',
+ 'en_ES' => 'engleză (Spania)',
'en_FI' => 'engleză (Finlanda)',
'en_FJ' => 'engleză (Fiji)',
'en_FK' => 'engleză (Insulele Falkland)',
'en_FM' => 'engleză (Micronezia)',
+ 'en_FR' => 'engleză (Franța)',
'en_GB' => 'engleză (Regatul Unit)',
'en_GD' => 'engleză (Grenada)',
'en_GG' => 'engleză (Guernsey)',
'en_GH' => 'engleză (Ghana)',
'en_GI' => 'engleză (Gibraltar)',
'en_GM' => 'engleză (Gambia)',
+ 'en_GS' => 'engleză (Georgia de Sud și Insulele Sandwich de Sud)',
'en_GU' => 'engleză (Guam)',
'en_GY' => 'engleză (Guyana)',
'en_HK' => 'engleză (R.A.S. Hong Kong, China)',
+ 'en_HU' => 'engleză (Ungaria)',
'en_ID' => 'engleză (Indonezia)',
'en_IE' => 'engleză (Irlanda)',
'en_IL' => 'engleză (Israel)',
'en_IM' => 'engleză (Insula Man)',
'en_IN' => 'engleză (India)',
'en_IO' => 'engleză (Teritoriul Britanic din Oceanul Indian)',
+ 'en_IT' => 'engleză (Italia)',
'en_JE' => 'engleză (Jersey)',
'en_JM' => 'engleză (Jamaica)',
'en_KE' => 'engleză (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'engleză (Insula Norfolk)',
'en_NG' => 'engleză (Nigeria)',
'en_NL' => 'engleză (Țările de Jos)',
+ 'en_NO' => 'engleză (Norvegia)',
'en_NR' => 'engleză (Nauru)',
'en_NU' => 'engleză (Niue)',
'en_NZ' => 'engleză (Noua Zeelandă)',
'en_PG' => 'engleză (Papua-Noua Guinee)',
'en_PH' => 'engleză (Filipine)',
'en_PK' => 'engleză (Pakistan)',
+ 'en_PL' => 'engleză (Polonia)',
'en_PN' => 'engleză (Insulele Pitcairn)',
'en_PR' => 'engleză (Puerto Rico)',
+ 'en_PT' => 'engleză (Portugalia)',
'en_PW' => 'engleză (Palau)',
+ 'en_RO' => 'engleză (România)',
'en_RW' => 'engleză (Rwanda)',
'en_SB' => 'engleză (Insulele Solomon)',
'en_SC' => 'engleză (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'engleză (Singapore)',
'en_SH' => 'engleză (Sfânta Elena)',
'en_SI' => 'engleză (Slovenia)',
+ 'en_SK' => 'engleză (Slovacia)',
'en_SL' => 'engleză (Sierra Leone)',
'en_SS' => 'engleză (Sudanul de Sud)',
'en_SX' => 'engleză (Sint-Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ru.php b/src/Symfony/Component/Intl/Resources/data/locales/ru.php
index 5dc363dece908..82f661951cb8c 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ru.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ru.php
@@ -121,29 +121,35 @@
'en_CM' => 'английский (Камерун)',
'en_CX' => 'английский (о-в Рождества)',
'en_CY' => 'английский (Кипр)',
+ 'en_CZ' => 'английский (Чехия)',
'en_DE' => 'английский (Германия)',
'en_DK' => 'английский (Дания)',
'en_DM' => 'английский (Доминика)',
'en_ER' => 'английский (Эритрея)',
+ 'en_ES' => 'английский (Испания)',
'en_FI' => 'английский (Финляндия)',
'en_FJ' => 'английский (Фиджи)',
'en_FK' => 'английский (Фолклендские о-ва)',
'en_FM' => 'английский (Федеративные Штаты Микронезии)',
+ 'en_FR' => 'английский (Франция)',
'en_GB' => 'английский (Великобритания)',
'en_GD' => 'английский (Гренада)',
'en_GG' => 'английский (Гернси)',
'en_GH' => 'английский (Гана)',
'en_GI' => 'английский (Гибралтар)',
'en_GM' => 'английский (Гамбия)',
+ 'en_GS' => 'английский (Южная Георгия и Южные Сандвичевы о-ва)',
'en_GU' => 'английский (Гуам)',
'en_GY' => 'английский (Гайана)',
'en_HK' => 'английский (Гонконг [САР])',
+ 'en_HU' => 'английский (Венгрия)',
'en_ID' => 'английский (Индонезия)',
'en_IE' => 'английский (Ирландия)',
'en_IL' => 'английский (Израиль)',
'en_IM' => 'английский (о-в Мэн)',
'en_IN' => 'английский (Индия)',
'en_IO' => 'английский (Британская территория в Индийском океане)',
+ 'en_IT' => 'английский (Италия)',
'en_JE' => 'английский (Джерси)',
'en_JM' => 'английский (Ямайка)',
'en_KE' => 'английский (Кения)',
@@ -167,15 +173,19 @@
'en_NF' => 'английский (о-в Норфолк)',
'en_NG' => 'английский (Нигерия)',
'en_NL' => 'английский (Нидерланды)',
+ 'en_NO' => 'английский (Норвегия)',
'en_NR' => 'английский (Науру)',
'en_NU' => 'английский (Ниуэ)',
'en_NZ' => 'английский (Новая Зеландия)',
'en_PG' => 'английский (Папуа — Новая Гвинея)',
'en_PH' => 'английский (Филиппины)',
'en_PK' => 'английский (Пакистан)',
+ 'en_PL' => 'английский (Польша)',
'en_PN' => 'английский (о-ва Питкэрн)',
'en_PR' => 'английский (Пуэрто-Рико)',
+ 'en_PT' => 'английский (Португалия)',
'en_PW' => 'английский (Палау)',
+ 'en_RO' => 'английский (Румыния)',
'en_RW' => 'английский (Руанда)',
'en_SB' => 'английский (Соломоновы о-ва)',
'en_SC' => 'английский (Сейшельские о-ва)',
@@ -184,6 +194,7 @@
'en_SG' => 'английский (Сингапур)',
'en_SH' => 'английский (о-в Св. Елены)',
'en_SI' => 'английский (Словения)',
+ 'en_SK' => 'английский (Словакия)',
'en_SL' => 'английский (Сьерра-Леоне)',
'en_SS' => 'английский (Южный Судан)',
'en_SX' => 'английский (Синт-Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sa.php b/src/Symfony/Component/Intl/Resources/data/locales/sa.php
index ed01f879c2556..f605eea7e0d90 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sa.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sa.php
@@ -7,8 +7,10 @@
'de_IT' => 'जर्मनभाषा: (इटली:)',
'en' => 'आङ्ग्लभाषा',
'en_DE' => 'आङ्ग्लभाषा (जर्मनीदेश:)',
+ 'en_FR' => 'आङ्ग्लभाषा (फ़्रांस:)',
'en_GB' => 'आङ्ग्लभाषा (संयुक्त राष्ट्र:)',
'en_IN' => 'आङ्ग्लभाषा (भारतः)',
+ 'en_IT' => 'आङ्ग्लभाषा (इटली:)',
'en_US' => 'आङ्ग्लभाषा (संयुक्त राज्य:)',
'es' => 'स्पेनीय भाषा:',
'es_BR' => 'स्पेनीय भाषा: (ब्राजील)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sc.php b/src/Symfony/Component/Intl/Resources/data/locales/sc.php
index 798c7b6420b4d..8aa2570069300 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sc.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sc.php
@@ -121,29 +121,35 @@
'en_CM' => 'inglesu (Camerùn)',
'en_CX' => 'inglesu (Ìsula de sa Natividade)',
'en_CY' => 'inglesu (Tzipru)',
+ 'en_CZ' => 'inglesu (Tzèchia)',
'en_DE' => 'inglesu (Germània)',
'en_DK' => 'inglesu (Danimarca)',
'en_DM' => 'inglesu (Dominica)',
'en_ER' => 'inglesu (Eritrea)',
+ 'en_ES' => 'inglesu (Ispagna)',
'en_FI' => 'inglesu (Finlàndia)',
'en_FJ' => 'inglesu (Fiji)',
'en_FK' => 'inglesu (Ìsulas Falkland)',
'en_FM' => 'inglesu (Micronèsia)',
+ 'en_FR' => 'inglesu (Frantza)',
'en_GB' => 'inglesu (Regnu Unidu)',
'en_GD' => 'inglesu (Grenada)',
'en_GG' => 'inglesu (Guernsey)',
'en_GH' => 'inglesu (Ghana)',
'en_GI' => 'inglesu (Gibilterra)',
'en_GM' => 'inglesu (Gàmbia)',
+ 'en_GS' => 'inglesu (Geòrgia de su Sud e Ìsulas Sandwich Australes)',
'en_GU' => 'inglesu (Guàm)',
'en_GY' => 'inglesu (Guyana)',
'en_HK' => 'inglesu (RAS tzinesa de Hong Kong)',
+ 'en_HU' => 'inglesu (Ungheria)',
'en_ID' => 'inglesu (Indonèsia)',
'en_IE' => 'inglesu (Irlanda)',
'en_IL' => 'inglesu (Israele)',
'en_IM' => 'inglesu (Ìsula de Man)',
'en_IN' => 'inglesu (Ìndia)',
'en_IO' => 'inglesu (Territòriu Britànnicu de s’Otzèanu Indianu)',
+ 'en_IT' => 'inglesu (Itàlia)',
'en_JE' => 'inglesu (Jersey)',
'en_JM' => 'inglesu (Giamàica)',
'en_KE' => 'inglesu (Kènya)',
@@ -167,15 +173,19 @@
'en_NF' => 'inglesu (Ìsula Norfolk)',
'en_NG' => 'inglesu (Nigèria)',
'en_NL' => 'inglesu (Paisos Bassos)',
+ 'en_NO' => 'inglesu (Norvègia)',
'en_NR' => 'inglesu (Nauru)',
'en_NU' => 'inglesu (Niue)',
'en_NZ' => 'inglesu (Zelanda Noa)',
'en_PG' => 'inglesu (Pàpua Guinea Noa)',
'en_PH' => 'inglesu (Filipinas)',
'en_PK' => 'inglesu (Pàkistan)',
+ 'en_PL' => 'inglesu (Polònia)',
'en_PN' => 'inglesu (Ìsulas Pìtcairn)',
'en_PR' => 'inglesu (Puerto Rico)',
+ 'en_PT' => 'inglesu (Portogallu)',
'en_PW' => 'inglesu (Palau)',
+ 'en_RO' => 'inglesu (Romania)',
'en_RW' => 'inglesu (Ruanda)',
'en_SB' => 'inglesu (Ìsulas Salomone)',
'en_SC' => 'inglesu (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'inglesu (Singapore)',
'en_SH' => 'inglesu (Santa Elene)',
'en_SI' => 'inglesu (Islovènia)',
+ 'en_SK' => 'inglesu (Islovàchia)',
'en_SL' => 'inglesu (Sierra Leone)',
'en_SS' => 'inglesu (Sudan de su Sud)',
'en_SX' => 'inglesu (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sd.php b/src/Symfony/Component/Intl/Resources/data/locales/sd.php
index 56e38bc5eb5c9..61244adac0296 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sd.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sd.php
@@ -121,29 +121,35 @@
'en_CM' => 'انگريزي (ڪيمرون)',
'en_CX' => 'انگريزي (ڪرسمس ٻيٽ)',
'en_CY' => 'انگريزي (سائپرس)',
+ 'en_CZ' => 'انگريزي (چيڪيا)',
'en_DE' => 'انگريزي (جرمني)',
'en_DK' => 'انگريزي (ڊينمارڪ)',
'en_DM' => 'انگريزي (ڊومينيڪا)',
'en_ER' => 'انگريزي (ايريٽيريا)',
+ 'en_ES' => 'انگريزي (اسپين)',
'en_FI' => 'انگريزي (فن لينڊ)',
'en_FJ' => 'انگريزي (فجي)',
'en_FK' => 'انگريزي (فاڪ لينڊ ٻيٽ)',
'en_FM' => 'انگريزي (مائڪرونيشيا)',
+ 'en_FR' => 'انگريزي (فرانس)',
'en_GB' => 'انگريزي (برطانيہ)',
'en_GD' => 'انگريزي (گريناڊا)',
'en_GG' => 'انگريزي (گورنسي)',
'en_GH' => 'انگريزي (گهانا)',
'en_GI' => 'انگريزي (جبرالٽر)',
'en_GM' => 'انگريزي (گيمبيا)',
+ 'en_GS' => 'انگريزي (ڏکڻ جارجيا ۽ ڏکڻ سينڊوچ ٻيٽ)',
'en_GU' => 'انگريزي (گوام)',
'en_GY' => 'انگريزي (گيانا)',
'en_HK' => 'انگريزي (هانگ ڪانگ SAR)',
+ 'en_HU' => 'انگريزي (هنگري)',
'en_ID' => 'انگريزي (انڊونيشيا)',
'en_IE' => 'انگريزي (آئرلينڊ)',
'en_IL' => 'انگريزي (اسرائيل)',
'en_IM' => 'انگريزي (انسانن جو ٻيٽ)',
'en_IN' => 'انگريزي (ڀارت)',
'en_IO' => 'انگريزي (برطانوي هندي سمنڊ خطو)',
+ 'en_IT' => 'انگريزي (اٽلي)',
'en_JE' => 'انگريزي (جرسي)',
'en_JM' => 'انگريزي (جميڪا)',
'en_KE' => 'انگريزي (ڪينيا)',
@@ -167,15 +173,19 @@
'en_NF' => 'انگريزي (نورفوڪ ٻيٽ)',
'en_NG' => 'انگريزي (نائيجيريا)',
'en_NL' => 'انگريزي (نيدرلينڊ)',
+ 'en_NO' => 'انگريزي (ناروي)',
'en_NR' => 'انگريزي (نائورو)',
'en_NU' => 'انگريزي (نووي)',
'en_NZ' => 'انگريزي (نيو زيلينڊ)',
'en_PG' => 'انگريزي (پاپوا نیو گني)',
'en_PH' => 'انگريزي (فلپائن)',
'en_PK' => 'انگريزي (پاڪستان)',
+ 'en_PL' => 'انگريزي (پولينڊ)',
'en_PN' => 'انگريزي (پٽڪئرن ٻيٽ)',
'en_PR' => 'انگريزي (پيوئرٽو ريڪو)',
+ 'en_PT' => 'انگريزي (پرتگال)',
'en_PW' => 'انگريزي (پلائو)',
+ 'en_RO' => 'انگريزي (رومانيا)',
'en_RW' => 'انگريزي (روانڊا)',
'en_SB' => 'انگريزي (سولومون ٻيٽَ)',
'en_SC' => 'انگريزي (شي شلز)',
@@ -184,6 +194,7 @@
'en_SG' => 'انگريزي (سنگاپور)',
'en_SH' => 'انگريزي (سينٽ ھيلينا)',
'en_SI' => 'انگريزي (سلوینیا)',
+ 'en_SK' => 'انگريزي (سلوواڪيا)',
'en_SL' => 'انگريزي (سيرا ليون)',
'en_SS' => 'انگريزي (ڏکڻ سوڊان)',
'en_SX' => 'انگريزي (سنٽ مارٽن)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sd_Deva.php b/src/Symfony/Component/Intl/Resources/data/locales/sd_Deva.php
index 2c2deaf3538ca..e1135e55c5efc 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sd_Deva.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sd_Deva.php
@@ -51,29 +51,35 @@
'en_CM' => 'अंगरेज़ी (ڪيمرون)',
'en_CX' => 'अंगरेज़ी (ڪرسمس ٻيٽ)',
'en_CY' => 'अंगरेज़ी (سائپرس)',
+ 'en_CZ' => 'अंगरेज़ी (چيڪيا)',
'en_DE' => 'अंगरेज़ी (जर्मनी)',
'en_DK' => 'अंगरेज़ी (ڊينمارڪ)',
'en_DM' => 'अंगरेज़ी (ڊومينيڪا)',
'en_ER' => 'अंगरेज़ी (ايريٽيريا)',
+ 'en_ES' => 'अंगरेज़ी (اسپين)',
'en_FI' => 'अंगरेज़ी (فن لينڊ)',
'en_FJ' => 'अंगरेज़ी (فجي)',
'en_FK' => 'अंगरेज़ी (فاڪ لينڊ ٻيٽ)',
'en_FM' => 'अंगरेज़ी (مائڪرونيشيا)',
+ 'en_FR' => 'अंगरेज़ी (फ़्रांस)',
'en_GB' => 'अंगरेज़ी (बरतानी)',
'en_GD' => 'अंगरेज़ी (گريناڊا)',
'en_GG' => 'अंगरेज़ी (گورنسي)',
'en_GH' => 'अंगरेज़ी (گهانا)',
'en_GI' => 'अंगरेज़ी (جبرالٽر)',
'en_GM' => 'अंगरेज़ी (گيمبيا)',
+ 'en_GS' => 'अंगरेज़ी (ڏکڻ جارجيا ۽ ڏکڻ سينڊوچ ٻيٽ)',
'en_GU' => 'अंगरेज़ी (گوام)',
'en_GY' => 'अंगरेज़ी (گيانا)',
'en_HK' => 'अंगरेज़ी (هانگ ڪانگ SAR)',
+ 'en_HU' => 'अंगरेज़ी (هنگري)',
'en_ID' => 'अंगरेज़ी (انڊونيشيا)',
'en_IE' => 'अंगरेज़ी (آئرلينڊ)',
'en_IL' => 'अंगरेज़ी (اسرائيل)',
'en_IM' => 'अंगरेज़ी (انسانن جو ٻيٽ)',
'en_IN' => 'अंगरेज़ी (भारत)',
'en_IO' => 'अंगरेज़ी (برطانوي هندي سمنڊ خطو)',
+ 'en_IT' => 'अंगरेज़ी (इटली)',
'en_JE' => 'अंगरेज़ी (جرسي)',
'en_JM' => 'अंगरेज़ी (جميڪا)',
'en_KE' => 'अंगरेज़ी (ڪينيا)',
@@ -97,15 +103,19 @@
'en_NF' => 'अंगरेज़ी (نورفوڪ ٻيٽ)',
'en_NG' => 'अंगरेज़ी (نائيجيريا)',
'en_NL' => 'अंगरेज़ी (نيدرلينڊ)',
+ 'en_NO' => 'अंगरेज़ी (ناروي)',
'en_NR' => 'अंगरेज़ी (نائورو)',
'en_NU' => 'अंगरेज़ी (نووي)',
'en_NZ' => 'अंगरेज़ी (نيو زيلينڊ)',
'en_PG' => 'अंगरेज़ी (پاپوا نیو گني)',
'en_PH' => 'अंगरेज़ी (فلپائن)',
'en_PK' => 'अंगरेज़ी (पाकिस्तान)',
+ 'en_PL' => 'अंगरेज़ी (پولينڊ)',
'en_PN' => 'अंगरेज़ी (پٽڪئرن ٻيٽ)',
'en_PR' => 'अंगरेज़ी (پيوئرٽو ريڪو)',
+ 'en_PT' => 'अंगरेज़ी (پرتگال)',
'en_PW' => 'अंगरेज़ी (پلائو)',
+ 'en_RO' => 'अंगरेज़ी (رومانيا)',
'en_RW' => 'अंगरेज़ी (روانڊا)',
'en_SB' => 'अंगरेज़ी (سولومون ٻيٽَ)',
'en_SC' => 'अंगरेज़ी (شي شلز)',
@@ -114,6 +124,7 @@
'en_SG' => 'अंगरेज़ी (سنگاپور)',
'en_SH' => 'अंगरेज़ी (سينٽ ھيلينا)',
'en_SI' => 'अंगरेज़ी (سلوینیا)',
+ 'en_SK' => 'अंगरेज़ी (سلوواڪيا)',
'en_SL' => 'अंगरेज़ी (سيرا ليون)',
'en_SS' => 'अंगरेज़ी (ڏکڻ سوڊان)',
'en_SX' => 'अंगरेज़ी (سنٽ مارٽن)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/se.php b/src/Symfony/Component/Intl/Resources/data/locales/se.php
index 559e781dbdc5d..18863765e7aaa 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/se.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/se.php
@@ -100,28 +100,34 @@
'en_CM' => 'eaŋgalsgiella (Kamerun)',
'en_CX' => 'eaŋgalsgiella (Juovllat-sullot)',
'en_CY' => 'eaŋgalsgiella (Kypros)',
+ 'en_CZ' => 'eaŋgalsgiella (Čeahkka)',
'en_DE' => 'eaŋgalsgiella (Duiska)',
'en_DK' => 'eaŋgalsgiella (Dánmárku)',
'en_DM' => 'eaŋgalsgiella (Dominica)',
'en_ER' => 'eaŋgalsgiella (Eritrea)',
+ 'en_ES' => 'eaŋgalsgiella (Spánia)',
'en_FI' => 'eaŋgalsgiella (Suopma)',
'en_FJ' => 'eaŋgalsgiella (Fijisullot)',
'en_FK' => 'eaŋgalsgiella (Falklandsullot)',
'en_FM' => 'eaŋgalsgiella (Mikronesia)',
+ 'en_FR' => 'eaŋgalsgiella (Frankriika)',
'en_GB' => 'eaŋgalsgiella (Stuorra-Británnia)',
'en_GD' => 'eaŋgalsgiella (Grenada)',
'en_GG' => 'eaŋgalsgiella (Guernsey)',
'en_GH' => 'eaŋgalsgiella (Ghana)',
'en_GI' => 'eaŋgalsgiella (Gibraltar)',
'en_GM' => 'eaŋgalsgiella (Gámbia)',
+ 'en_GS' => 'eaŋgalsgiella (Lulli Georgia ja Lulli Sandwich-sullot)',
'en_GU' => 'eaŋgalsgiella (Guam)',
'en_GY' => 'eaŋgalsgiella (Guyana)',
'en_HK' => 'eaŋgalsgiella (Hongkong)',
+ 'en_HU' => 'eaŋgalsgiella (Ungár)',
'en_ID' => 'eaŋgalsgiella (Indonesia)',
'en_IE' => 'eaŋgalsgiella (Irlánda)',
'en_IL' => 'eaŋgalsgiella (Israel)',
'en_IM' => 'eaŋgalsgiella (Mann-sullot)',
'en_IN' => 'eaŋgalsgiella (India)',
+ 'en_IT' => 'eaŋgalsgiella (Itália)',
'en_JE' => 'eaŋgalsgiella (Jersey)',
'en_JM' => 'eaŋgalsgiella (Jamaica)',
'en_KE' => 'eaŋgalsgiella (Kenia)',
@@ -145,15 +151,19 @@
'en_NF' => 'eaŋgalsgiella (Norfolksullot)',
'en_NG' => 'eaŋgalsgiella (Nigeria)',
'en_NL' => 'eaŋgalsgiella (Vuolleeatnamat)',
+ 'en_NO' => 'eaŋgalsgiella (Norga)',
'en_NR' => 'eaŋgalsgiella (Nauru)',
'en_NU' => 'eaŋgalsgiella (Niue)',
'en_NZ' => 'eaŋgalsgiella (Ođđa-Selánda)',
'en_PG' => 'eaŋgalsgiella (Papua-Ođđa-Guinea)',
'en_PH' => 'eaŋgalsgiella (Filippiinnat)',
'en_PK' => 'eaŋgalsgiella (Pakistan)',
+ 'en_PL' => 'eaŋgalsgiella (Polen)',
'en_PN' => 'eaŋgalsgiella (Pitcairn)',
'en_PR' => 'eaŋgalsgiella (Puerto Rico)',
+ 'en_PT' => 'eaŋgalsgiella (Portugála)',
'en_PW' => 'eaŋgalsgiella (Palau)',
+ 'en_RO' => 'eaŋgalsgiella (Románia)',
'en_RW' => 'eaŋgalsgiella (Rwanda)',
'en_SB' => 'eaŋgalsgiella (Salomon-sullot)',
'en_SC' => 'eaŋgalsgiella (Seychellsullot)',
@@ -162,6 +172,7 @@
'en_SG' => 'eaŋgalsgiella (Singapore)',
'en_SH' => 'eaŋgalsgiella (Saint Helena)',
'en_SI' => 'eaŋgalsgiella (Slovenia)',
+ 'en_SK' => 'eaŋgalsgiella (Slovákia)',
'en_SL' => 'eaŋgalsgiella (Sierra Leone)',
'en_SS' => 'eaŋgalsgiella (Máttasudan)',
'en_SX' => 'eaŋgalsgiella (Vuolleeatnamat Saint Martin)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sg.php b/src/Symfony/Component/Intl/Resources/data/locales/sg.php
index 1f173b9d4abfc..89dfbd398d19e 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sg.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sg.php
@@ -71,14 +71,17 @@
'en_CK' => 'Anglëe (âzûâ Kûku)',
'en_CM' => 'Anglëe (Kamerûne)',
'en_CY' => 'Anglëe (Sîpri)',
+ 'en_CZ' => 'Anglëe (Ködörösêse tî Tyêki)',
'en_DE' => 'Anglëe (Zâmani)',
'en_DK' => 'Anglëe (Danemêrke)',
'en_DM' => 'Anglëe (Dömïnîka)',
'en_ER' => 'Anglëe (Eritrëe)',
+ 'en_ES' => 'Anglëe (Espânye)',
'en_FI' => 'Anglëe (Fëlânde)',
'en_FJ' => 'Anglëe (Fidyïi)',
'en_FK' => 'Anglëe (Âzûâ tî Mälüîni)',
'en_FM' => 'Anglëe (Mikronezïi)',
+ 'en_FR' => 'Anglëe (Farânzi)',
'en_GB' => 'Anglëe (Ködörögbïä--Ôko)',
'en_GD' => 'Anglëe (Grenâda)',
'en_GH' => 'Anglëe (Ganäa)',
@@ -86,10 +89,12 @@
'en_GM' => 'Anglëe (Gambïi)',
'en_GU' => 'Anglëe (Guâm)',
'en_GY' => 'Anglëe (Gayâna)',
+ 'en_HU' => 'Anglëe (Hongirùii)',
'en_ID' => 'Anglëe (Ênndonezïi)',
'en_IE' => 'Anglëe (Irlânde)',
'en_IL' => 'Anglëe (Israëli)',
'en_IN' => 'Anglëe (Ênnde)',
+ 'en_IT' => 'Anglëe (Italùii)',
'en_JM' => 'Anglëe (Zamaîka)',
'en_KE' => 'Anglëe (Kenyäa)',
'en_KI' => 'Anglëe (Kiribati)',
@@ -111,15 +116,19 @@
'en_NF' => 'Anglëe (Zûâ Nôrfôlko)',
'en_NG' => 'Anglëe (Nizerïa)',
'en_NL' => 'Anglëe (Holände)',
+ 'en_NO' => 'Anglëe (Nörvêzi)',
'en_NR' => 'Anglëe (Nauru)',
'en_NU' => 'Anglëe (Niue)',
'en_NZ' => 'Anglëe (Finî Zelânde)',
'en_PG' => 'Anglëe (Papû Finî Ginëe, Papuazïi)',
'en_PH' => 'Anglëe (Filipîni)',
'en_PK' => 'Anglëe (Pakistäan)',
+ 'en_PL' => 'Anglëe (Pölôni)',
'en_PN' => 'Anglëe (Pitikêrni)',
'en_PR' => 'Anglëe (Porto Rîko)',
+ 'en_PT' => 'Anglëe (Pörtugäle, Ködörö Pûra)',
'en_PW' => 'Anglëe (Palau)',
+ 'en_RO' => 'Anglëe (Rumanïi)',
'en_RW' => 'Anglëe (Ruandäa)',
'en_SB' => 'Anglëe (Zûâ Salomöon)',
'en_SC' => 'Anglëe (Sëyshêle)',
@@ -128,6 +137,7 @@
'en_SG' => 'Anglëe (Sïngäpûru)',
'en_SH' => 'Anglëe (Sênt-Helêna)',
'en_SI' => 'Anglëe (Solovenïi)',
+ 'en_SK' => 'Anglëe (Solovakïi)',
'en_SL' => 'Anglëe (Sierä-Leône)',
'en_SZ' => 'Anglëe (Swäzïlânde)',
'en_TC' => 'Anglëe (Âzûâ Turku na Kaîki)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/si.php b/src/Symfony/Component/Intl/Resources/data/locales/si.php
index 7358353002dc2..46632611fc9ac 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/si.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/si.php
@@ -121,29 +121,35 @@
'en_CM' => 'ඉංග්රීසි (කැමරූන්)',
'en_CX' => 'ඉංග්රීසි (ක්රිස්මස් දූපත)',
'en_CY' => 'ඉංග්රීසි (සයිප්රසය)',
+ 'en_CZ' => 'ඉංග්රීසි (චෙචියාව)',
'en_DE' => 'ඉංග්රීසි (ජර්මනිය)',
'en_DK' => 'ඉංග්රීසි (ඩෙන්මාර්කය)',
'en_DM' => 'ඉංග්රීසි (ඩොමිනිකාව)',
'en_ER' => 'ඉංග්රීසි (එරිත්රියාව)',
+ 'en_ES' => 'ඉංග්රීසි (ස්පාඤ්ඤය)',
'en_FI' => 'ඉංග්රීසි (ෆින්ලන්තය)',
'en_FJ' => 'ඉංග්රීසි (ෆීජී)',
'en_FK' => 'ඉංග්රීසි (ෆෝක්ලන්ත දූපත්)',
'en_FM' => 'ඉංග්රීසි (මයික්රොනීසියාව)',
+ 'en_FR' => 'ඉංග්රීසි (ප්රංශය)',
'en_GB' => 'ඉංග්රීසි (එක්සත් රාජධානිය)',
'en_GD' => 'ඉංග්රීසි (ග්රැනඩාව)',
'en_GG' => 'ඉංග්රීසි (ගර්න්සිය)',
'en_GH' => 'ඉංග්රීසි (ඝානාව)',
'en_GI' => 'ඉංග්රීසි (ජිබ්රෝල්ටාව)',
'en_GM' => 'ඉංග්රීසි (ගැම්බියාව)',
+ 'en_GS' => 'ඉංග්රීසි (දකුණු ජෝර්ජියාව සහ දකුණු සැන්ඩ්විච් දූපත්)',
'en_GU' => 'ඉංග්රීසි (ගුවාම්)',
'en_GY' => 'ඉංග්රීසි (ගයනාව)',
'en_HK' => 'ඉංග්රීසි (හොංකොං විශේෂ පරිපාලන කලාපය චීනය)',
+ 'en_HU' => 'ඉංග්රීසි (හන්ගේරියාව)',
'en_ID' => 'ඉංග්රීසි (ඉන්දුනීසියාව)',
'en_IE' => 'ඉංග්රීසි (අයර්ලන්තය)',
'en_IL' => 'ඉංග්රීසි (ඊශ්රායලය)',
'en_IM' => 'ඉංග්රීසි (අයිල් ඔෆ් මෑන්)',
'en_IN' => 'ඉංග්රීසි (ඉන්දියාව)',
'en_IO' => 'ඉංග්රීසි (බ්රිතාන්ය ඉන්දීය සාගර බල ප්රදේශය)',
+ 'en_IT' => 'ඉංග්රීසි (ඉතාලිය)',
'en_JE' => 'ඉංග්රීසි (ජර්සි)',
'en_JM' => 'ඉංග්රීසි (ජැමෙයිකාව)',
'en_KE' => 'ඉංග්රීසි (කෙන්යාව)',
@@ -167,15 +173,19 @@
'en_NF' => 'ඉංග්රීසි (නෝෆෝක් දූපත)',
'en_NG' => 'ඉංග්රීසි (නයිජීරියාව)',
'en_NL' => 'ඉංග්රීසි (නෙදර්ලන්තය)',
+ 'en_NO' => 'ඉංග්රීසි (නෝර්වේ)',
'en_NR' => 'ඉංග්රීසි (නාවුරු)',
'en_NU' => 'ඉංග්රීසි (නියූ)',
'en_NZ' => 'ඉංග්රීසි (නවසීලන්තය)',
'en_PG' => 'ඉංග්රීසි (පැපුවා නිව් ගිනියාව)',
'en_PH' => 'ඉංග්රීසි (පිලිපීනය)',
'en_PK' => 'ඉංග්රීසි (පාකිස්තානය)',
+ 'en_PL' => 'ඉංග්රීසි (පෝලන්තය)',
'en_PN' => 'ඉංග්රීසි (පිට්කෙය්න් දූපත්)',
'en_PR' => 'ඉංග්රීසි (පුවර්ටෝ රිකෝ)',
+ 'en_PT' => 'ඉංග්රීසි (පෘතුගාලය)',
'en_PW' => 'ඉංග්රීසි (පලාවු)',
+ 'en_RO' => 'ඉංග්රීසි (රුමේනියාව)',
'en_RW' => 'ඉංග්රීසි (රුවන්ඩාව)',
'en_SB' => 'ඉංග්රීසි (සොලමන් දූපත්)',
'en_SC' => 'ඉංග්රීසි (සීශෙල්ස්)',
@@ -184,6 +194,7 @@
'en_SG' => 'ඉංග්රීසි (සිංගප්පූරුව)',
'en_SH' => 'ඉංග්රීසි (ශාන්ත හෙලේනා)',
'en_SI' => 'ඉංග්රීසි (ස්ලෝවේනියාව)',
+ 'en_SK' => 'ඉංග්රීසි (ස්ලෝවැකියාව)',
'en_SL' => 'ඉංග්රීසි (සියරාලියෝන්)',
'en_SS' => 'ඉංග්රීසි (දකුණු සුඩානය)',
'en_SX' => 'ඉංග්රීසි (ශාන්ත මාර්ටෙන්)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sk.php b/src/Symfony/Component/Intl/Resources/data/locales/sk.php
index 58a4060269623..0520f01432057 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sk.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sk.php
@@ -121,29 +121,35 @@
'en_CM' => 'angličtina (Kamerun)',
'en_CX' => 'angličtina (Vianočný ostrov)',
'en_CY' => 'angličtina (Cyprus)',
+ 'en_CZ' => 'angličtina (Česko)',
'en_DE' => 'angličtina (Nemecko)',
'en_DK' => 'angličtina (Dánsko)',
'en_DM' => 'angličtina (Dominika)',
'en_ER' => 'angličtina (Eritrea)',
+ 'en_ES' => 'angličtina (Španielsko)',
'en_FI' => 'angličtina (Fínsko)',
'en_FJ' => 'angličtina (Fidži)',
'en_FK' => 'angličtina (Falklandy)',
'en_FM' => 'angličtina (Mikronézia)',
+ 'en_FR' => 'angličtina (Francúzsko)',
'en_GB' => 'angličtina (Spojené kráľovstvo)',
'en_GD' => 'angličtina (Grenada)',
'en_GG' => 'angličtina (Guernsey)',
'en_GH' => 'angličtina (Ghana)',
'en_GI' => 'angličtina (Gibraltár)',
'en_GM' => 'angličtina (Gambia)',
+ 'en_GS' => 'angličtina (Južná Georgia a Južné Sandwichove ostrovy)',
'en_GU' => 'angličtina (Guam)',
'en_GY' => 'angličtina (Guyana)',
'en_HK' => 'angličtina (Hongkong – OAO Číny)',
+ 'en_HU' => 'angličtina (Maďarsko)',
'en_ID' => 'angličtina (Indonézia)',
'en_IE' => 'angličtina (Írsko)',
'en_IL' => 'angličtina (Izrael)',
'en_IM' => 'angličtina (Ostrov Man)',
'en_IN' => 'angličtina (India)',
'en_IO' => 'angličtina (Britské indickooceánske územie)',
+ 'en_IT' => 'angličtina (Taliansko)',
'en_JE' => 'angličtina (Jersey)',
'en_JM' => 'angličtina (Jamajka)',
'en_KE' => 'angličtina (Keňa)',
@@ -167,15 +173,19 @@
'en_NF' => 'angličtina (Norfolk)',
'en_NG' => 'angličtina (Nigéria)',
'en_NL' => 'angličtina (Holandsko)',
+ 'en_NO' => 'angličtina (Nórsko)',
'en_NR' => 'angličtina (Nauru)',
'en_NU' => 'angličtina (Niue)',
'en_NZ' => 'angličtina (Nový Zéland)',
'en_PG' => 'angličtina (Papua-Nová Guinea)',
'en_PH' => 'angličtina (Filipíny)',
'en_PK' => 'angličtina (Pakistan)',
+ 'en_PL' => 'angličtina (Poľsko)',
'en_PN' => 'angličtina (Pitcairnove ostrovy)',
'en_PR' => 'angličtina (Portoriko)',
+ 'en_PT' => 'angličtina (Portugalsko)',
'en_PW' => 'angličtina (Palau)',
+ 'en_RO' => 'angličtina (Rumunsko)',
'en_RW' => 'angličtina (Rwanda)',
'en_SB' => 'angličtina (Šalamúnove ostrovy)',
'en_SC' => 'angličtina (Seychely)',
@@ -184,6 +194,7 @@
'en_SG' => 'angličtina (Singapur)',
'en_SH' => 'angličtina (Svätá Helena)',
'en_SI' => 'angličtina (Slovinsko)',
+ 'en_SK' => 'angličtina (Slovensko)',
'en_SL' => 'angličtina (Sierra Leone)',
'en_SS' => 'angličtina (Južný Sudán)',
'en_SX' => 'angličtina (Svätý Martin [hol.])',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sl.php b/src/Symfony/Component/Intl/Resources/data/locales/sl.php
index 9d8f490c62298..9484195652baa 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sl.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sl.php
@@ -121,29 +121,35 @@
'en_CM' => 'angleščina (Kamerun)',
'en_CX' => 'angleščina (Božični otok)',
'en_CY' => 'angleščina (Ciper)',
+ 'en_CZ' => 'angleščina (Češka)',
'en_DE' => 'angleščina (Nemčija)',
'en_DK' => 'angleščina (Danska)',
'en_DM' => 'angleščina (Dominika)',
'en_ER' => 'angleščina (Eritreja)',
+ 'en_ES' => 'angleščina (Španija)',
'en_FI' => 'angleščina (Finska)',
'en_FJ' => 'angleščina (Fidži)',
'en_FK' => 'angleščina (Falklandski otoki)',
'en_FM' => 'angleščina (Mikronezija)',
+ 'en_FR' => 'angleščina (Francija)',
'en_GB' => 'angleščina (Združeno kraljestvo)',
'en_GD' => 'angleščina (Grenada)',
'en_GG' => 'angleščina (Guernsey)',
'en_GH' => 'angleščina (Gana)',
'en_GI' => 'angleščina (Gibraltar)',
'en_GM' => 'angleščina (Gambija)',
+ 'en_GS' => 'angleščina (Južna Georgia in Južni Sandwichevi otoki)',
'en_GU' => 'angleščina (Guam)',
'en_GY' => 'angleščina (Gvajana)',
'en_HK' => 'angleščina (Posebno upravno območje Ljudske republike Kitajske Hongkong)',
+ 'en_HU' => 'angleščina (Madžarska)',
'en_ID' => 'angleščina (Indonezija)',
'en_IE' => 'angleščina (Irska)',
'en_IL' => 'angleščina (Izrael)',
'en_IM' => 'angleščina (Otok Man)',
'en_IN' => 'angleščina (Indija)',
'en_IO' => 'angleščina (Britansko ozemlje v Indijskem oceanu)',
+ 'en_IT' => 'angleščina (Italija)',
'en_JE' => 'angleščina (Jersey)',
'en_JM' => 'angleščina (Jamajka)',
'en_KE' => 'angleščina (Kenija)',
@@ -167,15 +173,19 @@
'en_NF' => 'angleščina (Norfolški otok)',
'en_NG' => 'angleščina (Nigerija)',
'en_NL' => 'angleščina (Nizozemska)',
+ 'en_NO' => 'angleščina (Norveška)',
'en_NR' => 'angleščina (Nauru)',
'en_NU' => 'angleščina (Niue)',
'en_NZ' => 'angleščina (Nova Zelandija)',
'en_PG' => 'angleščina (Papua Nova Gvineja)',
'en_PH' => 'angleščina (Filipini)',
'en_PK' => 'angleščina (Pakistan)',
+ 'en_PL' => 'angleščina (Poljska)',
'en_PN' => 'angleščina (Pitcairn)',
'en_PR' => 'angleščina (Portoriko)',
+ 'en_PT' => 'angleščina (Portugalska)',
'en_PW' => 'angleščina (Palau)',
+ 'en_RO' => 'angleščina (Romunija)',
'en_RW' => 'angleščina (Ruanda)',
'en_SB' => 'angleščina (Salomonovi otoki)',
'en_SC' => 'angleščina (Sejšeli)',
@@ -184,6 +194,7 @@
'en_SG' => 'angleščina (Singapur)',
'en_SH' => 'angleščina (Sveta Helena)',
'en_SI' => 'angleščina (Slovenija)',
+ 'en_SK' => 'angleščina (Slovaška)',
'en_SL' => 'angleščina (Sierra Leone)',
'en_SS' => 'angleščina (Južni Sudan)',
'en_SX' => 'angleščina (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sn.php b/src/Symfony/Component/Intl/Resources/data/locales/sn.php
index e5d11f20b494b..bc6208199655c 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sn.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sn.php
@@ -70,14 +70,17 @@
'en_CK' => 'Chirungu (Zvitsuwa zveCook)',
'en_CM' => 'Chirungu (Kameruni)',
'en_CY' => 'Chirungu (Cyprus)',
+ 'en_CZ' => 'Chirungu (Czech Republic)',
'en_DE' => 'Chirungu (Germany)',
'en_DK' => 'Chirungu (Denmark)',
'en_DM' => 'Chirungu (Dominica)',
'en_ER' => 'Chirungu (Eritrea)',
+ 'en_ES' => 'Chirungu (Spain)',
'en_FI' => 'Chirungu (Finland)',
'en_FJ' => 'Chirungu (Fiji)',
'en_FK' => 'Chirungu (Zvitsuwa zveFalklands)',
'en_FM' => 'Chirungu (Micronesia)',
+ 'en_FR' => 'Chirungu (France)',
'en_GB' => 'Chirungu (United Kingdom)',
'en_GD' => 'Chirungu (Grenada)',
'en_GH' => 'Chirungu (Ghana)',
@@ -85,10 +88,12 @@
'en_GM' => 'Chirungu (Gambia)',
'en_GU' => 'Chirungu (Guam)',
'en_GY' => 'Chirungu (Guyana)',
+ 'en_HU' => 'Chirungu (Hungary)',
'en_ID' => 'Chirungu (Indonesia)',
'en_IE' => 'Chirungu (Ireland)',
'en_IL' => 'Chirungu (Izuraeri)',
'en_IN' => 'Chirungu (India)',
+ 'en_IT' => 'Chirungu (Italy)',
'en_JM' => 'Chirungu (Jamaica)',
'en_KE' => 'Chirungu (Kenya)',
'en_KI' => 'Chirungu (Kiribati)',
@@ -110,15 +115,19 @@
'en_NF' => 'Chirungu (Chitsuwa cheNorfolk)',
'en_NG' => 'Chirungu (Nigeria)',
'en_NL' => 'Chirungu (Netherlands)',
+ 'en_NO' => 'Chirungu (Norway)',
'en_NR' => 'Chirungu (Nauru)',
'en_NU' => 'Chirungu (Niue)',
'en_NZ' => 'Chirungu (New Zealand)',
'en_PG' => 'Chirungu (Papua New Guinea)',
'en_PH' => 'Chirungu (Philippines)',
'en_PK' => 'Chirungu (Pakistan)',
+ 'en_PL' => 'Chirungu (Poland)',
'en_PN' => 'Chirungu (Pitcairn)',
'en_PR' => 'Chirungu (Puerto Rico)',
+ 'en_PT' => 'Chirungu (Portugal)',
'en_PW' => 'Chirungu (Palau)',
+ 'en_RO' => 'Chirungu (Romania)',
'en_RW' => 'Chirungu (Rwanda)',
'en_SB' => 'Chirungu (Zvitsuwa zvaSolomon)',
'en_SC' => 'Chirungu (Seychelles)',
@@ -127,6 +136,7 @@
'en_SG' => 'Chirungu (Singapore)',
'en_SH' => 'Chirungu (Saint Helena)',
'en_SI' => 'Chirungu (Slovenia)',
+ 'en_SK' => 'Chirungu (Slovakia)',
'en_SL' => 'Chirungu (Sierra Leone)',
'en_SZ' => 'Chirungu (Swaziland)',
'en_TC' => 'Chirungu (Zvitsuwa zveTurk neCaico)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/so.php b/src/Symfony/Component/Intl/Resources/data/locales/so.php
index c9b6c20d3d12a..34bd1b0cb546f 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/so.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/so.php
@@ -121,29 +121,35 @@
'en_CM' => 'Ingiriisi (Kaameruun)',
'en_CX' => 'Ingiriisi (Jasiiradda Kirismas)',
'en_CY' => 'Ingiriisi (Qubrus)',
+ 'en_CZ' => 'Ingiriisi (Jekiya)',
'en_DE' => 'Ingiriisi (Jarmal)',
'en_DK' => 'Ingiriisi (Denmark)',
'en_DM' => 'Ingiriisi (Dominika)',
'en_ER' => 'Ingiriisi (Eritreeya)',
+ 'en_ES' => 'Ingiriisi (Isbeyn)',
'en_FI' => 'Ingiriisi (Finland)',
'en_FJ' => 'Ingiriisi (Fiji)',
'en_FK' => 'Ingiriisi (Jaziiradaha Fooklaan)',
'en_FM' => 'Ingiriisi (Mikroneesiya)',
+ 'en_FR' => 'Ingiriisi (Faransiis)',
'en_GB' => 'Ingiriisi (Boqortooyada Midowday)',
'en_GD' => 'Ingiriisi (Giriinaada)',
'en_GG' => 'Ingiriisi (Guurnsey)',
'en_GH' => 'Ingiriisi (Gaana)',
'en_GI' => 'Ingiriisi (Gibraltar)',
'en_GM' => 'Ingiriisi (Gambiya)',
+ 'en_GS' => 'Ingiriisi (Jasiiradda Joorjiyada Koonfureed & Sandwij)',
'en_GU' => 'Ingiriisi (Guaam)',
'en_GY' => 'Ingiriisi (Guyana)',
'en_HK' => 'Ingiriisi (Hong Kong)',
+ 'en_HU' => 'Ingiriisi (Hangari)',
'en_ID' => 'Ingiriisi (Indoneesiya)',
'en_IE' => 'Ingiriisi (Ayrlaand)',
'en_IL' => 'Ingiriisi (Israaʼiil)',
'en_IM' => 'Ingiriisi (Jasiiradda Isle of Man)',
'en_IN' => 'Ingiriisi (Hindiya)',
'en_IO' => 'Ingiriisi (Dhul xadeedka Badweynta Hindiya ee Ingiriiska)',
+ 'en_IT' => 'Ingiriisi (Talyaani)',
'en_JE' => 'Ingiriisi (Jaarsey)',
'en_JM' => 'Ingiriisi (Jamaaika)',
'en_KE' => 'Ingiriisi (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Ingiriisi (Jasiiradda Noorfolk)',
'en_NG' => 'Ingiriisi (Nayjeeriya)',
'en_NL' => 'Ingiriisi (Nederlaands)',
+ 'en_NO' => 'Ingiriisi (Noorweey)',
'en_NR' => 'Ingiriisi (Nauru)',
'en_NU' => 'Ingiriisi (Niue)',
'en_NZ' => 'Ingiriisi (Niyuusiilaand)',
'en_PG' => 'Ingiriisi (Babwa Niyuu Gini)',
'en_PH' => 'Ingiriisi (Filibiin)',
'en_PK' => 'Ingiriisi (Bakistaan)',
+ 'en_PL' => 'Ingiriisi (Booland)',
'en_PN' => 'Ingiriisi (Bitkairn)',
'en_PR' => 'Ingiriisi (Bueerto Riiko)',
+ 'en_PT' => 'Ingiriisi (Bortugaal)',
'en_PW' => 'Ingiriisi (Balaaw)',
+ 'en_RO' => 'Ingiriisi (Rumaaniya)',
'en_RW' => 'Ingiriisi (Ruwanda)',
'en_SB' => 'Ingiriisi (Jasiiradda Solomon)',
'en_SC' => 'Ingiriisi (Sishelis)',
@@ -184,6 +194,7 @@
'en_SG' => 'Ingiriisi (Singaboor)',
'en_SH' => 'Ingiriisi (Saynt Helena)',
'en_SI' => 'Ingiriisi (Islofeeniya)',
+ 'en_SK' => 'Ingiriisi (Islofaakiya)',
'en_SL' => 'Ingiriisi (Siraaliyoon)',
'en_SS' => 'Ingiriisi (Koonfur Suudaan)',
'en_SX' => 'Ingiriisi (Siint Maarteen)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sq.php b/src/Symfony/Component/Intl/Resources/data/locales/sq.php
index 25bb9c0bf2793..7b110ea42e6fd 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sq.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sq.php
@@ -121,29 +121,35 @@
'en_CM' => 'anglisht (Kamerun)',
'en_CX' => 'anglisht (Ishulli i Krishtlindjes)',
'en_CY' => 'anglisht (Qipro)',
+ 'en_CZ' => 'anglisht (Çeki)',
'en_DE' => 'anglisht (Gjermani)',
'en_DK' => 'anglisht (Danimarkë)',
'en_DM' => 'anglisht (Dominikë)',
'en_ER' => 'anglisht (Eritre)',
+ 'en_ES' => 'anglisht (Spanjë)',
'en_FI' => 'anglisht (Finlandë)',
'en_FJ' => 'anglisht (Fixhi)',
'en_FK' => 'anglisht (Ishujt Falkland)',
'en_FM' => 'anglisht (Mikronezi)',
+ 'en_FR' => 'anglisht (Francë)',
'en_GB' => 'anglisht (Mbretëria e Bashkuar)',
'en_GD' => 'anglisht (Granadë)',
'en_GG' => 'anglisht (Gernsej)',
'en_GH' => 'anglisht (Ganë)',
'en_GI' => 'anglisht (Gjibraltar)',
'en_GM' => 'anglisht (Gambi)',
+ 'en_GS' => 'anglisht (Xhorxha Jugore dhe Ishujt Senduiçë të Jugut)',
'en_GU' => 'anglisht (Guam)',
'en_GY' => 'anglisht (Guajanë)',
'en_HK' => 'anglisht (RPA i Hong-Kongut)',
+ 'en_HU' => 'anglisht (Hungari)',
'en_ID' => 'anglisht (Indonezi)',
'en_IE' => 'anglisht (Irlandë)',
'en_IL' => 'anglisht (Izrael)',
'en_IM' => 'anglisht (Ishulli i Manit)',
'en_IN' => 'anglisht (Indi)',
'en_IO' => 'anglisht (Territori Britanik i Oqeanit Indian)',
+ 'en_IT' => 'anglisht (Itali)',
'en_JE' => 'anglisht (Xhersej)',
'en_JM' => 'anglisht (Xhamajkë)',
'en_KE' => 'anglisht (Kenia)',
@@ -167,15 +173,19 @@
'en_NF' => 'anglisht (Ishulli Norfolk)',
'en_NG' => 'anglisht (Nigeri)',
'en_NL' => 'anglisht (Holandë)',
+ 'en_NO' => 'anglisht (Norvegji)',
'en_NR' => 'anglisht (Nauru)',
'en_NU' => 'anglisht (Niue)',
'en_NZ' => 'anglisht (Zelandë e Re)',
'en_PG' => 'anglisht (Guineja e Re-Papua)',
'en_PH' => 'anglisht (Filipine)',
'en_PK' => 'anglisht (Pakistan)',
+ 'en_PL' => 'anglisht (Poloni)',
'en_PN' => 'anglisht (Ishujt Pitkern)',
'en_PR' => 'anglisht (Porto-Riko)',
+ 'en_PT' => 'anglisht (Portugali)',
'en_PW' => 'anglisht (Palau)',
+ 'en_RO' => 'anglisht (Rumani)',
'en_RW' => 'anglisht (Ruandë)',
'en_SB' => 'anglisht (Ishujt Solomon)',
'en_SC' => 'anglisht (Sejshelle)',
@@ -184,6 +194,7 @@
'en_SG' => 'anglisht (Singapor)',
'en_SH' => 'anglisht (Shën-Elenë)',
'en_SI' => 'anglisht (Slloveni)',
+ 'en_SK' => 'anglisht (Sllovaki)',
'en_SL' => 'anglisht (Sierra-Leone)',
'en_SS' => 'anglisht (Sudani i Jugut)',
'en_SX' => 'anglisht (Sint-Marten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sr.php b/src/Symfony/Component/Intl/Resources/data/locales/sr.php
index 2e07e2d9bec5a..0d8154371463d 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sr.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sr.php
@@ -121,29 +121,35 @@
'en_CM' => 'енглески (Камерун)',
'en_CX' => 'енглески (Божићно Острво)',
'en_CY' => 'енглески (Кипар)',
+ 'en_CZ' => 'енглески (Чешка)',
'en_DE' => 'енглески (Немачка)',
'en_DK' => 'енглески (Данска)',
'en_DM' => 'енглески (Доминика)',
'en_ER' => 'енглески (Еритреја)',
+ 'en_ES' => 'енглески (Шпанија)',
'en_FI' => 'енглески (Финска)',
'en_FJ' => 'енглески (Фиџи)',
'en_FK' => 'енглески (Фокландска Острва)',
'en_FM' => 'енглески (Микронезија)',
+ 'en_FR' => 'енглески (Француска)',
'en_GB' => 'енглески (Уједињено Краљевство)',
'en_GD' => 'енглески (Гренада)',
'en_GG' => 'енглески (Гернзи)',
'en_GH' => 'енглески (Гана)',
'en_GI' => 'енглески (Гибралтар)',
'en_GM' => 'енглески (Гамбија)',
+ 'en_GS' => 'енглески (Јужна Џорџија и Јужна Сендвичка Острва)',
'en_GU' => 'енглески (Гуам)',
'en_GY' => 'енглески (Гвајана)',
'en_HK' => 'енглески (САР Хонгконг [Кина])',
+ 'en_HU' => 'енглески (Мађарска)',
'en_ID' => 'енглески (Индонезија)',
'en_IE' => 'енглески (Ирска)',
'en_IL' => 'енглески (Израел)',
'en_IM' => 'енглески (Острво Ман)',
'en_IN' => 'енглески (Индија)',
'en_IO' => 'енглески (Британска територија Индијског океана)',
+ 'en_IT' => 'енглески (Италија)',
'en_JE' => 'енглески (Џерзи)',
'en_JM' => 'енглески (Јамајка)',
'en_KE' => 'енглески (Кенија)',
@@ -167,15 +173,19 @@
'en_NF' => 'енглески (Острво Норфок)',
'en_NG' => 'енглески (Нигерија)',
'en_NL' => 'енглески (Холандија)',
+ 'en_NO' => 'енглески (Норвешка)',
'en_NR' => 'енглески (Науру)',
'en_NU' => 'енглески (Ниуе)',
'en_NZ' => 'енглески (Нови Зеланд)',
'en_PG' => 'енглески (Папуа Нова Гвинеја)',
'en_PH' => 'енглески (Филипини)',
'en_PK' => 'енглески (Пакистан)',
+ 'en_PL' => 'енглески (Пољска)',
'en_PN' => 'енглески (Питкерн)',
'en_PR' => 'енглески (Порторико)',
+ 'en_PT' => 'енглески (Португалија)',
'en_PW' => 'енглески (Палау)',
+ 'en_RO' => 'енглески (Румунија)',
'en_RW' => 'енглески (Руанда)',
'en_SB' => 'енглески (Соломонска Острва)',
'en_SC' => 'енглески (Сејшели)',
@@ -184,6 +194,7 @@
'en_SG' => 'енглески (Сингапур)',
'en_SH' => 'енглески (Света Јелена)',
'en_SI' => 'енглески (Словенија)',
+ 'en_SK' => 'енглески (Словачка)',
'en_SL' => 'енглески (Сијера Леоне)',
'en_SS' => 'енглески (Јужни Судан)',
'en_SX' => 'енглески (Свети Мартин [Холандија])',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_BA.php b/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_BA.php
index e02359359b4b5..4b262bc1cb2f7 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_BA.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_BA.php
@@ -23,8 +23,10 @@
'de_LU' => 'њемачки (Луксембург)',
'en_001' => 'енглески (свијет)',
'en_CC' => 'енглески (Кокосова [Килинг] острва)',
+ 'en_CZ' => 'енглески (Чешка Република)',
'en_DE' => 'енглески (Њемачка)',
'en_FK' => 'енглески (Фокландска острва)',
+ 'en_GS' => 'енглески (Јужна Џорџија и Јужна Сендвичка острва)',
'en_GU' => 'енглески (Гвам)',
'en_HK' => 'енглески (Хонгконг [САО Кине])',
'en_MP' => 'енглески (Сјеверна Маријанска острва)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_ME.php b/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_ME.php
index 60af9bd9b6c45..aa6e212ca998b 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_ME.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_ME.php
@@ -11,6 +11,7 @@
'bn_IN' => 'бангла (Индија)',
'cs_CZ' => 'чешки (Чешка Република)',
'de_DE' => 'немачки (Њемачка)',
+ 'en_CZ' => 'енглески (Чешка Република)',
'en_DE' => 'енглески (Њемачка)',
'en_KN' => 'енглески (Свети Китс и Невис)',
'en_UM' => 'енглески (Мања удаљена острва САД)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_XK.php b/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_XK.php
index 4c4e79ed0f373..a781c25d14b79 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_XK.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sr_Cyrl_XK.php
@@ -8,6 +8,7 @@
'bn_BD' => 'бангла (Бангладеш)',
'bn_IN' => 'бангла (Индија)',
'cs_CZ' => 'чешки (Чешка Република)',
+ 'en_CZ' => 'енглески (Чешка Република)',
'en_HK' => 'енглески (САР Хонгконг)',
'en_KN' => 'енглески (Свети Китс и Невис)',
'en_MO' => 'енглески (САР Макао)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn.php b/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn.php
index a464de387d264..807b79b00e12a 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn.php
@@ -121,29 +121,35 @@
'en_CM' => 'engleski (Kamerun)',
'en_CX' => 'engleski (Božićno Ostrvo)',
'en_CY' => 'engleski (Kipar)',
+ 'en_CZ' => 'engleski (Češka)',
'en_DE' => 'engleski (Nemačka)',
'en_DK' => 'engleski (Danska)',
'en_DM' => 'engleski (Dominika)',
'en_ER' => 'engleski (Eritreja)',
+ 'en_ES' => 'engleski (Španija)',
'en_FI' => 'engleski (Finska)',
'en_FJ' => 'engleski (Fidži)',
'en_FK' => 'engleski (Foklandska Ostrva)',
'en_FM' => 'engleski (Mikronezija)',
+ 'en_FR' => 'engleski (Francuska)',
'en_GB' => 'engleski (Ujedinjeno Kraljevstvo)',
'en_GD' => 'engleski (Grenada)',
'en_GG' => 'engleski (Gernzi)',
'en_GH' => 'engleski (Gana)',
'en_GI' => 'engleski (Gibraltar)',
'en_GM' => 'engleski (Gambija)',
+ 'en_GS' => 'engleski (Južna Džordžija i Južna Sendvička Ostrva)',
'en_GU' => 'engleski (Guam)',
'en_GY' => 'engleski (Gvajana)',
'en_HK' => 'engleski (SAR Hongkong [Kina])',
+ 'en_HU' => 'engleski (Mađarska)',
'en_ID' => 'engleski (Indonezija)',
'en_IE' => 'engleski (Irska)',
'en_IL' => 'engleski (Izrael)',
'en_IM' => 'engleski (Ostrvo Man)',
'en_IN' => 'engleski (Indija)',
'en_IO' => 'engleski (Britanska teritorija Indijskog okeana)',
+ 'en_IT' => 'engleski (Italija)',
'en_JE' => 'engleski (Džerzi)',
'en_JM' => 'engleski (Jamajka)',
'en_KE' => 'engleski (Kenija)',
@@ -167,15 +173,19 @@
'en_NF' => 'engleski (Ostrvo Norfok)',
'en_NG' => 'engleski (Nigerija)',
'en_NL' => 'engleski (Holandija)',
+ 'en_NO' => 'engleski (Norveška)',
'en_NR' => 'engleski (Nauru)',
'en_NU' => 'engleski (Niue)',
'en_NZ' => 'engleski (Novi Zeland)',
'en_PG' => 'engleski (Papua Nova Gvineja)',
'en_PH' => 'engleski (Filipini)',
'en_PK' => 'engleski (Pakistan)',
+ 'en_PL' => 'engleski (Poljska)',
'en_PN' => 'engleski (Pitkern)',
'en_PR' => 'engleski (Portoriko)',
+ 'en_PT' => 'engleski (Portugalija)',
'en_PW' => 'engleski (Palau)',
+ 'en_RO' => 'engleski (Rumunija)',
'en_RW' => 'engleski (Ruanda)',
'en_SB' => 'engleski (Solomonska Ostrva)',
'en_SC' => 'engleski (Sejšeli)',
@@ -184,6 +194,7 @@
'en_SG' => 'engleski (Singapur)',
'en_SH' => 'engleski (Sveta Jelena)',
'en_SI' => 'engleski (Slovenija)',
+ 'en_SK' => 'engleski (Slovačka)',
'en_SL' => 'engleski (Sijera Leone)',
'en_SS' => 'engleski (Južni Sudan)',
'en_SX' => 'engleski (Sveti Martin [Holandija])',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_BA.php b/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_BA.php
index b345938efe9d0..40894322a8894 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_BA.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_BA.php
@@ -23,8 +23,10 @@
'de_LU' => 'njemački (Luksemburg)',
'en_001' => 'engleski (svijet)',
'en_CC' => 'engleski (Kokosova [Kiling] ostrva)',
+ 'en_CZ' => 'engleski (Češka Republika)',
'en_DE' => 'engleski (Njemačka)',
'en_FK' => 'engleski (Foklandska ostrva)',
+ 'en_GS' => 'engleski (Južna Džordžija i Južna Sendvička ostrva)',
'en_GU' => 'engleski (Gvam)',
'en_HK' => 'engleski (Hongkong [SAO Kine])',
'en_MP' => 'engleski (Sjeverna Marijanska ostrva)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_ME.php b/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_ME.php
index ab3dbb6866672..e3b9dddd260d5 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_ME.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_ME.php
@@ -11,6 +11,7 @@
'bn_IN' => 'bangla (Indija)',
'cs_CZ' => 'češki (Češka Republika)',
'de_DE' => 'nemački (Njemačka)',
+ 'en_CZ' => 'engleski (Češka Republika)',
'en_DE' => 'engleski (Njemačka)',
'en_KN' => 'engleski (Sveti Kits i Nevis)',
'en_UM' => 'engleski (Manja udaljena ostrva SAD)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_XK.php b/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_XK.php
index 765cba47a5d26..64af19a718e96 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_XK.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sr_Latn_XK.php
@@ -8,6 +8,7 @@
'bn_BD' => 'bangla (Bangladeš)',
'bn_IN' => 'bangla (Indija)',
'cs_CZ' => 'češki (Češka Republika)',
+ 'en_CZ' => 'engleski (Češka Republika)',
'en_HK' => 'engleski (SAR Hongkong)',
'en_KN' => 'engleski (Sveti Kits i Nevis)',
'en_MO' => 'engleski (SAR Makao)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/su.php b/src/Symfony/Component/Intl/Resources/data/locales/su.php
index 617194ab8d990..f866b1c88f241 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/su.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/su.php
@@ -7,9 +7,11 @@
'de_IT' => 'Jérman (Italia)',
'en' => 'Inggris',
'en_DE' => 'Inggris (Jérman)',
+ 'en_FR' => 'Inggris (Prancis)',
'en_GB' => 'Inggris (Britania Raya)',
'en_ID' => 'Inggris (Indonesia)',
'en_IN' => 'Inggris (India)',
+ 'en_IT' => 'Inggris (Italia)',
'en_US' => 'Inggris (Amérika Sarikat)',
'es' => 'Spanyol',
'es_BR' => 'Spanyol (Brasil)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sv.php b/src/Symfony/Component/Intl/Resources/data/locales/sv.php
index b64930929b74e..6abfebc2ebd03 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sv.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sv.php
@@ -121,29 +121,35 @@
'en_CM' => 'engelska (Kamerun)',
'en_CX' => 'engelska (Julön)',
'en_CY' => 'engelska (Cypern)',
+ 'en_CZ' => 'engelska (Tjeckien)',
'en_DE' => 'engelska (Tyskland)',
'en_DK' => 'engelska (Danmark)',
'en_DM' => 'engelska (Dominica)',
'en_ER' => 'engelska (Eritrea)',
+ 'en_ES' => 'engelska (Spanien)',
'en_FI' => 'engelska (Finland)',
'en_FJ' => 'engelska (Fiji)',
'en_FK' => 'engelska (Falklandsöarna)',
'en_FM' => 'engelska (Mikronesien)',
+ 'en_FR' => 'engelska (Frankrike)',
'en_GB' => 'engelska (Storbritannien)',
'en_GD' => 'engelska (Grenada)',
'en_GG' => 'engelska (Guernsey)',
'en_GH' => 'engelska (Ghana)',
'en_GI' => 'engelska (Gibraltar)',
'en_GM' => 'engelska (Gambia)',
+ 'en_GS' => 'engelska (Sydgeorgien och Sydsandwichöarna)',
'en_GU' => 'engelska (Guam)',
'en_GY' => 'engelska (Guyana)',
'en_HK' => 'engelska (Hongkong SAR)',
+ 'en_HU' => 'engelska (Ungern)',
'en_ID' => 'engelska (Indonesien)',
'en_IE' => 'engelska (Irland)',
'en_IL' => 'engelska (Israel)',
'en_IM' => 'engelska (Isle of Man)',
'en_IN' => 'engelska (Indien)',
'en_IO' => 'engelska (Brittiska territoriet i Indiska oceanen)',
+ 'en_IT' => 'engelska (Italien)',
'en_JE' => 'engelska (Jersey)',
'en_JM' => 'engelska (Jamaica)',
'en_KE' => 'engelska (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'engelska (Norfolkön)',
'en_NG' => 'engelska (Nigeria)',
'en_NL' => 'engelska (Nederländerna)',
+ 'en_NO' => 'engelska (Norge)',
'en_NR' => 'engelska (Nauru)',
'en_NU' => 'engelska (Niue)',
'en_NZ' => 'engelska (Nya Zeeland)',
'en_PG' => 'engelska (Papua Nya Guinea)',
'en_PH' => 'engelska (Filippinerna)',
'en_PK' => 'engelska (Pakistan)',
+ 'en_PL' => 'engelska (Polen)',
'en_PN' => 'engelska (Pitcairnöarna)',
'en_PR' => 'engelska (Puerto Rico)',
+ 'en_PT' => 'engelska (Portugal)',
'en_PW' => 'engelska (Palau)',
+ 'en_RO' => 'engelska (Rumänien)',
'en_RW' => 'engelska (Rwanda)',
'en_SB' => 'engelska (Salomonöarna)',
'en_SC' => 'engelska (Seychellerna)',
@@ -184,6 +194,7 @@
'en_SG' => 'engelska (Singapore)',
'en_SH' => 'engelska (S:t Helena)',
'en_SI' => 'engelska (Slovenien)',
+ 'en_SK' => 'engelska (Slovakien)',
'en_SL' => 'engelska (Sierra Leone)',
'en_SS' => 'engelska (Sydsudan)',
'en_SX' => 'engelska (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sw.php b/src/Symfony/Component/Intl/Resources/data/locales/sw.php
index 84aa1461b290f..57674bd2c50e1 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sw.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sw.php
@@ -121,29 +121,35 @@
'en_CM' => 'Kiingereza (Kameruni)',
'en_CX' => 'Kiingereza (Kisiwa cha Krismasi)',
'en_CY' => 'Kiingereza (Saiprasi)',
+ 'en_CZ' => 'Kiingereza (Chechia)',
'en_DE' => 'Kiingereza (Ujerumani)',
'en_DK' => 'Kiingereza (Denmaki)',
'en_DM' => 'Kiingereza (Dominika)',
'en_ER' => 'Kiingereza (Eritrea)',
+ 'en_ES' => 'Kiingereza (Uhispania)',
'en_FI' => 'Kiingereza (Ufini)',
'en_FJ' => 'Kiingereza (Fiji)',
'en_FK' => 'Kiingereza (Visiwa vya Falkland)',
'en_FM' => 'Kiingereza (Mikronesia)',
+ 'en_FR' => 'Kiingereza (Ufaransa)',
'en_GB' => 'Kiingereza (Ufalme wa Muungano)',
'en_GD' => 'Kiingereza (Grenada)',
'en_GG' => 'Kiingereza (Guernsey)',
'en_GH' => 'Kiingereza (Ghana)',
'en_GI' => 'Kiingereza (Gibraltar)',
'en_GM' => 'Kiingereza (Gambia)',
+ 'en_GS' => 'Kiingereza (Visiwa vya Georgia Kusini na Sandwich Kusini)',
'en_GU' => 'Kiingereza (Guam)',
'en_GY' => 'Kiingereza (Guyana)',
'en_HK' => 'Kiingereza (Hong Kong SAR China)',
+ 'en_HU' => 'Kiingereza (Hungaria)',
'en_ID' => 'Kiingereza (Indonesia)',
'en_IE' => 'Kiingereza (Ayalandi)',
'en_IL' => 'Kiingereza (Israeli)',
'en_IM' => 'Kiingereza (Kisiwa cha Man)',
'en_IN' => 'Kiingereza (India)',
'en_IO' => 'Kiingereza (Eneo la Uingereza katika Bahari Hindi)',
+ 'en_IT' => 'Kiingereza (Italia)',
'en_JE' => 'Kiingereza (Jersey)',
'en_JM' => 'Kiingereza (Jamaika)',
'en_KE' => 'Kiingereza (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Kiingereza (Kisiwa cha Norfolk)',
'en_NG' => 'Kiingereza (Nigeria)',
'en_NL' => 'Kiingereza (Uholanzi)',
+ 'en_NO' => 'Kiingereza (Norway)',
'en_NR' => 'Kiingereza (Nauru)',
'en_NU' => 'Kiingereza (Niue)',
'en_NZ' => 'Kiingereza (Nyuzilandi)',
'en_PG' => 'Kiingereza (Papua New Guinea)',
'en_PH' => 'Kiingereza (Ufilipino)',
'en_PK' => 'Kiingereza (Pakistani)',
+ 'en_PL' => 'Kiingereza (Poland)',
'en_PN' => 'Kiingereza (Visiwa vya Pitcairn)',
'en_PR' => 'Kiingereza (Puerto Rico)',
+ 'en_PT' => 'Kiingereza (Ureno)',
'en_PW' => 'Kiingereza (Palau)',
+ 'en_RO' => 'Kiingereza (Romania)',
'en_RW' => 'Kiingereza (Rwanda)',
'en_SB' => 'Kiingereza (Visiwa vya Solomon)',
'en_SC' => 'Kiingereza (Ushelisheli)',
@@ -184,6 +194,7 @@
'en_SG' => 'Kiingereza (Singapore)',
'en_SH' => 'Kiingereza (St. Helena)',
'en_SI' => 'Kiingereza (Slovenia)',
+ 'en_SK' => 'Kiingereza (Slovakia)',
'en_SL' => 'Kiingereza (Siera Leoni)',
'en_SS' => 'Kiingereza (Sudan Kusini)',
'en_SX' => 'Kiingereza (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sw_CD.php b/src/Symfony/Component/Intl/Resources/data/locales/sw_CD.php
index 4942ed99d3ea0..e09df33cffb47 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sw_CD.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sw_CD.php
@@ -21,6 +21,7 @@
'de_LU' => 'Kijerumani (Lasembagi)',
'en_CX' => 'Kiingereza (Kisiwa cha Christmas)',
'en_NG' => 'Kiingereza (Nijeria)',
+ 'en_NO' => 'Kiingereza (Norwe)',
'en_PR' => 'Kiingereza (Puetoriko)',
'en_SD' => 'Kiingereza (Sudani)',
'es_PR' => 'Kihispania (Puetoriko)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/sw_KE.php b/src/Symfony/Component/Intl/Resources/data/locales/sw_KE.php
index 3c08492b0b982..8ab1b56d1d1f7 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/sw_KE.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/sw_KE.php
@@ -36,10 +36,13 @@
'en_BB' => 'Kiingereza (Babados)',
'en_BS' => 'Kiingereza (Bahamas)',
'en_CC' => 'Kiingereza (Visiwa vya Kokos [Keeling])',
+ 'en_GS' => 'Kiingereza (Visiwa vya Jojia Kusini na Sandwich Kusini)',
'en_GU' => 'Kiingereza (Guami)',
'en_LS' => 'Kiingereza (Lesotho)',
'en_MS' => 'Kiingereza (Montserati)',
+ 'en_NO' => 'Kiingereza (Norwe)',
'en_PG' => 'Kiingereza (Papua Guinea Mpya)',
+ 'en_PL' => 'Kiingereza (Polandi)',
'en_PR' => 'Kiingereza (Pwetoriko)',
'en_SG' => 'Kiingereza (Singapuri)',
'en_VG' => 'Kiingereza (Visiwa vya Virgin vya Uingereza)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ta.php b/src/Symfony/Component/Intl/Resources/data/locales/ta.php
index 99c8ac78943ee..e04fd352b7f38 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ta.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ta.php
@@ -121,29 +121,35 @@
'en_CM' => 'ஆங்கிலம் (கேமரூன்)',
'en_CX' => 'ஆங்கிலம் (கிறிஸ்துமஸ் தீவு)',
'en_CY' => 'ஆங்கிலம் (சைப்ரஸ்)',
+ 'en_CZ' => 'ஆங்கிலம் (செசியா)',
'en_DE' => 'ஆங்கிலம் (ஜெர்மனி)',
'en_DK' => 'ஆங்கிலம் (டென்மார்க்)',
'en_DM' => 'ஆங்கிலம் (டொமினிகா)',
'en_ER' => 'ஆங்கிலம் (எரிட்ரியா)',
+ 'en_ES' => 'ஆங்கிலம் (ஸ்பெயின்)',
'en_FI' => 'ஆங்கிலம் (பின்லாந்து)',
'en_FJ' => 'ஆங்கிலம் (ஃபிஜி)',
'en_FK' => 'ஆங்கிலம் (ஃபாக்லாந்து தீவுகள்)',
'en_FM' => 'ஆங்கிலம் (மைக்ரோனேஷியா)',
+ 'en_FR' => 'ஆங்கிலம் (பிரான்ஸ்)',
'en_GB' => 'ஆங்கிலம் (யுனைடெட் கிங்டம்)',
'en_GD' => 'ஆங்கிலம் (கிரனெடா)',
'en_GG' => 'ஆங்கிலம் (கெர்ன்சி)',
'en_GH' => 'ஆங்கிலம் (கானா)',
'en_GI' => 'ஆங்கிலம் (ஜிப்ரால்டர்)',
'en_GM' => 'ஆங்கிலம் (காம்பியா)',
+ 'en_GS' => 'ஆங்கிலம் (தெற்கு ஜார்ஜியா மற்றும் தெற்கு சாண்ட்விச் தீவுகள்)',
'en_GU' => 'ஆங்கிலம் (குவாம்)',
'en_GY' => 'ஆங்கிலம் (கயானா)',
'en_HK' => 'ஆங்கிலம் (ஹாங்காங் எஸ்ஏஆர் சீனா)',
+ 'en_HU' => 'ஆங்கிலம் (ஹங்கேரி)',
'en_ID' => 'ஆங்கிலம் (இந்தோனேசியா)',
'en_IE' => 'ஆங்கிலம் (அயர்லாந்து)',
'en_IL' => 'ஆங்கிலம் (இஸ்ரேல்)',
'en_IM' => 'ஆங்கிலம் (ஐல் ஆஃப் மேன்)',
'en_IN' => 'ஆங்கிலம் (இந்தியா)',
'en_IO' => 'ஆங்கிலம் (பிரிட்டிஷ் இந்தியப் பெருங்கடல் பிரதேசம்)',
+ 'en_IT' => 'ஆங்கிலம் (இத்தாலி)',
'en_JE' => 'ஆங்கிலம் (ஜெர்சி)',
'en_JM' => 'ஆங்கிலம் (ஜமைகா)',
'en_KE' => 'ஆங்கிலம் (கென்யா)',
@@ -167,15 +173,19 @@
'en_NF' => 'ஆங்கிலம் (நார்ஃபோக் தீவு)',
'en_NG' => 'ஆங்கிலம் (நைஜீரியா)',
'en_NL' => 'ஆங்கிலம் (நெதர்லாந்து)',
+ 'en_NO' => 'ஆங்கிலம் (நார்வே)',
'en_NR' => 'ஆங்கிலம் (நௌரு)',
'en_NU' => 'ஆங்கிலம் (நியுவே)',
'en_NZ' => 'ஆங்கிலம் (நியூசிலாந்து)',
'en_PG' => 'ஆங்கிலம் (பப்புவா நியூ கினியா)',
'en_PH' => 'ஆங்கிலம் (பிலிப்பைன்ஸ்)',
'en_PK' => 'ஆங்கிலம் (பாகிஸ்தான்)',
+ 'en_PL' => 'ஆங்கிலம் (போலந்து)',
'en_PN' => 'ஆங்கிலம் (பிட்கெய்ர்ன் தீவுகள்)',
'en_PR' => 'ஆங்கிலம் (பியூர்டோ ரிகோ)',
+ 'en_PT' => 'ஆங்கிலம் (போர்ச்சுக்கல்)',
'en_PW' => 'ஆங்கிலம் (பாலோ)',
+ 'en_RO' => 'ஆங்கிலம் (ருமேனியா)',
'en_RW' => 'ஆங்கிலம் (ருவாண்டா)',
'en_SB' => 'ஆங்கிலம் (சாலமன் தீவுகள்)',
'en_SC' => 'ஆங்கிலம் (சீஷெல்ஸ்)',
@@ -184,6 +194,7 @@
'en_SG' => 'ஆங்கிலம் (சிங்கப்பூர்)',
'en_SH' => 'ஆங்கிலம் (செயின்ட் ஹெலெனா)',
'en_SI' => 'ஆங்கிலம் (ஸ்லோவேனியா)',
+ 'en_SK' => 'ஆங்கிலம் (ஸ்லோவாகியா)',
'en_SL' => 'ஆங்கிலம் (சியாரா லியோன்)',
'en_SS' => 'ஆங்கிலம் (தெற்கு சூடான்)',
'en_SX' => 'ஆங்கிலம் (சின்ட் மார்டென்)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/te.php b/src/Symfony/Component/Intl/Resources/data/locales/te.php
index 2d81f1f167076..1098bb74cd73e 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/te.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/te.php
@@ -121,29 +121,35 @@
'en_CM' => 'ఇంగ్లీష్ (కామెరూన్)',
'en_CX' => 'ఇంగ్లీష్ (క్రిస్మస్ దీవి)',
'en_CY' => 'ఇంగ్లీష్ (సైప్రస్)',
+ 'en_CZ' => 'ఇంగ్లీష్ (చెకియా)',
'en_DE' => 'ఇంగ్లీష్ (జర్మనీ)',
'en_DK' => 'ఇంగ్లీష్ (డెన్మార్క్)',
'en_DM' => 'ఇంగ్లీష్ (డొమినికా)',
'en_ER' => 'ఇంగ్లీష్ (ఎరిట్రియా)',
+ 'en_ES' => 'ఇంగ్లీష్ (స్పెయిన్)',
'en_FI' => 'ఇంగ్లీష్ (ఫిన్లాండ్)',
'en_FJ' => 'ఇంగ్లీష్ (ఫిజీ)',
'en_FK' => 'ఇంగ్లీష్ (ఫాక్ల్యాండ్ దీవులు)',
'en_FM' => 'ఇంగ్లీష్ (మైక్రోనేషియా)',
+ 'en_FR' => 'ఇంగ్లీష్ (ఫ్రాన్స్)',
'en_GB' => 'ఇంగ్లీష్ (యునైటెడ్ కింగ్డమ్)',
'en_GD' => 'ఇంగ్లీష్ (గ్రెనడా)',
'en_GG' => 'ఇంగ్లీష్ (గర్న్సీ)',
'en_GH' => 'ఇంగ్లీష్ (ఘనా)',
'en_GI' => 'ఇంగ్లీష్ (జిబ్రాల్టర్)',
'en_GM' => 'ఇంగ్లీష్ (గాంబియా)',
+ 'en_GS' => 'ఇంగ్లీష్ (దక్షిణ జార్జియా మరియు దక్షిణ శాండ్విచ్ దీవులు)',
'en_GU' => 'ఇంగ్లీష్ (గ్వామ్)',
'en_GY' => 'ఇంగ్లీష్ (గయానా)',
'en_HK' => 'ఇంగ్లీష్ (హాంకాంగ్ ఎస్ఏఆర్ చైనా)',
+ 'en_HU' => 'ఇంగ్లీష్ (హంగేరీ)',
'en_ID' => 'ఇంగ్లీష్ (ఇండోనేషియా)',
'en_IE' => 'ఇంగ్లీష్ (ఐర్లాండ్)',
'en_IL' => 'ఇంగ్లీష్ (ఇజ్రాయెల్)',
'en_IM' => 'ఇంగ్లీష్ (ఐల్ ఆఫ్ మాన్)',
'en_IN' => 'ఇంగ్లీష్ (భారతదేశం)',
'en_IO' => 'ఇంగ్లీష్ (బ్రిటిష్ హిందూ మహాసముద్ర ప్రాంతం)',
+ 'en_IT' => 'ఇంగ్లీష్ (ఇటలీ)',
'en_JE' => 'ఇంగ్లీష్ (జెర్సీ)',
'en_JM' => 'ఇంగ్లీష్ (జమైకా)',
'en_KE' => 'ఇంగ్లీష్ (కెన్యా)',
@@ -167,15 +173,19 @@
'en_NF' => 'ఇంగ్లీష్ (నార్ఫోక్ దీవి)',
'en_NG' => 'ఇంగ్లీష్ (నైజీరియా)',
'en_NL' => 'ఇంగ్లీష్ (నెదర్లాండ్స్)',
+ 'en_NO' => 'ఇంగ్లీష్ (నార్వే)',
'en_NR' => 'ఇంగ్లీష్ (నౌరు)',
'en_NU' => 'ఇంగ్లీష్ (నియూ)',
'en_NZ' => 'ఇంగ్లీష్ (న్యూజిలాండ్)',
'en_PG' => 'ఇంగ్లీష్ (పాపువా న్యూ గినియా)',
'en_PH' => 'ఇంగ్లీష్ (ఫిలిప్పైన్స్)',
'en_PK' => 'ఇంగ్లీష్ (పాకిస్తాన్)',
+ 'en_PL' => 'ఇంగ్లీష్ (పోలాండ్)',
'en_PN' => 'ఇంగ్లీష్ (పిట్కెయిర్న్ దీవులు)',
'en_PR' => 'ఇంగ్లీష్ (ప్యూర్టో రికో)',
+ 'en_PT' => 'ఇంగ్లీష్ (పోర్చుగల్)',
'en_PW' => 'ఇంగ్లీష్ (పాలావ్)',
+ 'en_RO' => 'ఇంగ్లీష్ (రోమేనియా)',
'en_RW' => 'ఇంగ్లీష్ (రువాండా)',
'en_SB' => 'ఇంగ్లీష్ (సోలమన్ దీవులు)',
'en_SC' => 'ఇంగ్లీష్ (సీషెల్స్)',
@@ -184,6 +194,7 @@
'en_SG' => 'ఇంగ్లీష్ (సింగపూర్)',
'en_SH' => 'ఇంగ్లీష్ (సెయింట్ హెలెనా)',
'en_SI' => 'ఇంగ్లీష్ (స్లోవేనియా)',
+ 'en_SK' => 'ఇంగ్లీష్ (స్లొవేకియా)',
'en_SL' => 'ఇంగ్లీష్ (సియెర్రా లియాన్)',
'en_SS' => 'ఇంగ్లీష్ (దక్షిణ సూడాన్)',
'en_SX' => 'ఇంగ్లీష్ (సింట్ మార్టెన్)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/tg.php b/src/Symfony/Component/Intl/Resources/data/locales/tg.php
index 0589d7da8a623..1375923e8d868 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/tg.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/tg.php
@@ -110,29 +110,35 @@
'en_CM' => 'англисӣ (Камерун)',
'en_CX' => 'англисӣ (Ҷазираи Крисмас)',
'en_CY' => 'англисӣ (Кипр)',
+ 'en_CZ' => 'англисӣ (Ҷумҳурии Чех)',
'en_DE' => 'англисӣ (Германия)',
'en_DK' => 'англисӣ (Дания)',
'en_DM' => 'англисӣ (Доминика)',
'en_ER' => 'англисӣ (Эритрея)',
+ 'en_ES' => 'англисӣ (Испания)',
'en_FI' => 'англисӣ (Финляндия)',
'en_FJ' => 'англисӣ (Фиҷи)',
'en_FK' => 'англисӣ (Ҷазираҳои Фолкленд)',
'en_FM' => 'англисӣ (Штатҳои Федеративии Микронезия)',
+ 'en_FR' => 'англисӣ (Фаронса)',
'en_GB' => 'англисӣ (Шоҳигарии Муттаҳида)',
'en_GD' => 'англисӣ (Гренада)',
'en_GG' => 'англисӣ (Гернси)',
'en_GH' => 'англисӣ (Гана)',
'en_GI' => 'англисӣ (Гибралтар)',
'en_GM' => 'англисӣ (Гамбия)',
+ 'en_GS' => 'англисӣ (Ҷорҷияи Ҷанубӣ ва Ҷазираҳои Сандвич)',
'en_GU' => 'англисӣ (Гуам)',
'en_GY' => 'англисӣ (Гайана)',
'en_HK' => 'англисӣ (Ҳонконг [МММ])',
+ 'en_HU' => 'англисӣ (Маҷористон)',
'en_ID' => 'англисӣ (Индонезия)',
'en_IE' => 'англисӣ (Ирландия)',
'en_IL' => 'англисӣ (Исроил)',
'en_IM' => 'англисӣ (Ҷазираи Мэн)',
'en_IN' => 'англисӣ (Ҳиндустон)',
'en_IO' => 'англисӣ (Қаламрави Британия дар уқёнуси Ҳинд)',
+ 'en_IT' => 'англисӣ (Италия)',
'en_JE' => 'англисӣ (Ҷерси)',
'en_JM' => 'англисӣ (Ямайка)',
'en_KE' => 'англисӣ (Кения)',
@@ -156,15 +162,19 @@
'en_NF' => 'англисӣ (Ҷазираи Норфолк)',
'en_NG' => 'англисӣ (Нигерия)',
'en_NL' => 'англисӣ (Нидерландия)',
+ 'en_NO' => 'англисӣ (Норвегия)',
'en_NR' => 'англисӣ (Науру)',
'en_NU' => 'англисӣ (Ниуэ)',
'en_NZ' => 'англисӣ (Зеландияи Нав)',
'en_PG' => 'англисӣ (Папуа Гвинеяи Нав)',
'en_PH' => 'англисӣ (Филиппин)',
'en_PK' => 'англисӣ (Покистон)',
+ 'en_PL' => 'англисӣ (Лаҳистон)',
'en_PN' => 'англисӣ (Ҷазираҳои Питкейрн)',
'en_PR' => 'англисӣ (Пуэрто-Рико)',
+ 'en_PT' => 'англисӣ (Португалия)',
'en_PW' => 'англисӣ (Палау)',
+ 'en_RO' => 'англисӣ (Руминия)',
'en_RW' => 'англисӣ (Руанда)',
'en_SB' => 'англисӣ (Ҷазираҳои Соломон)',
'en_SC' => 'англисӣ (Сейшел)',
@@ -173,6 +183,7 @@
'en_SG' => 'англисӣ (Сингапур)',
'en_SH' => 'англисӣ (Сент Елена)',
'en_SI' => 'англисӣ (Словения)',
+ 'en_SK' => 'англисӣ (Словакия)',
'en_SL' => 'англисӣ (Сиерра-Леоне)',
'en_SS' => 'англисӣ (Судони Ҷанубӣ)',
'en_SX' => 'англисӣ (Синт-Маартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/th.php b/src/Symfony/Component/Intl/Resources/data/locales/th.php
index 35ba32f87328f..38885b9443e36 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/th.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/th.php
@@ -121,29 +121,35 @@
'en_CM' => 'อังกฤษ (แคเมอรูน)',
'en_CX' => 'อังกฤษ (เกาะคริสต์มาส)',
'en_CY' => 'อังกฤษ (ไซปรัส)',
+ 'en_CZ' => 'อังกฤษ (เช็ก)',
'en_DE' => 'อังกฤษ (เยอรมนี)',
'en_DK' => 'อังกฤษ (เดนมาร์ก)',
'en_DM' => 'อังกฤษ (โดมินิกา)',
'en_ER' => 'อังกฤษ (เอริเทรีย)',
+ 'en_ES' => 'อังกฤษ (สเปน)',
'en_FI' => 'อังกฤษ (ฟินแลนด์)',
'en_FJ' => 'อังกฤษ (ฟิจิ)',
'en_FK' => 'อังกฤษ (หมู่เกาะฟอล์กแลนด์)',
'en_FM' => 'อังกฤษ (ไมโครนีเซีย)',
+ 'en_FR' => 'อังกฤษ (ฝรั่งเศส)',
'en_GB' => 'อังกฤษ (สหราชอาณาจักร)',
'en_GD' => 'อังกฤษ (เกรเนดา)',
'en_GG' => 'อังกฤษ (เกิร์นซีย์)',
'en_GH' => 'อังกฤษ (กานา)',
'en_GI' => 'อังกฤษ (ยิบรอลตาร์)',
'en_GM' => 'อังกฤษ (แกมเบีย)',
+ 'en_GS' => 'อังกฤษ (เกาะเซาท์จอร์เจียและหมู่เกาะเซาท์แซนด์วิช)',
'en_GU' => 'อังกฤษ (กวม)',
'en_GY' => 'อังกฤษ (กายอานา)',
'en_HK' => 'อังกฤษ (เขตปกครองพิเศษฮ่องกงแห่งสาธารณรัฐประชาชนจีน)',
+ 'en_HU' => 'อังกฤษ (ฮังการี)',
'en_ID' => 'อังกฤษ (อินโดนีเซีย)',
'en_IE' => 'อังกฤษ (ไอร์แลนด์)',
'en_IL' => 'อังกฤษ (อิสราเอล)',
'en_IM' => 'อังกฤษ (เกาะแมน)',
'en_IN' => 'อังกฤษ (อินเดีย)',
'en_IO' => 'อังกฤษ (บริติชอินเดียนโอเชียนเทร์ริทอรี)',
+ 'en_IT' => 'อังกฤษ (อิตาลี)',
'en_JE' => 'อังกฤษ (เจอร์ซีย์)',
'en_JM' => 'อังกฤษ (จาเมกา)',
'en_KE' => 'อังกฤษ (เคนยา)',
@@ -167,15 +173,19 @@
'en_NF' => 'อังกฤษ (เกาะนอร์ฟอล์ก)',
'en_NG' => 'อังกฤษ (ไนจีเรีย)',
'en_NL' => 'อังกฤษ (เนเธอร์แลนด์)',
+ 'en_NO' => 'อังกฤษ (นอร์เวย์)',
'en_NR' => 'อังกฤษ (นาอูรู)',
'en_NU' => 'อังกฤษ (นีอูเอ)',
'en_NZ' => 'อังกฤษ (นิวซีแลนด์)',
'en_PG' => 'อังกฤษ (ปาปัวนิวกินี)',
'en_PH' => 'อังกฤษ (ฟิลิปปินส์)',
'en_PK' => 'อังกฤษ (ปากีสถาน)',
+ 'en_PL' => 'อังกฤษ (โปแลนด์)',
'en_PN' => 'อังกฤษ (หมู่เกาะพิตแคร์น)',
'en_PR' => 'อังกฤษ (เปอร์โตริโก)',
+ 'en_PT' => 'อังกฤษ (โปรตุเกส)',
'en_PW' => 'อังกฤษ (ปาเลา)',
+ 'en_RO' => 'อังกฤษ (โรมาเนีย)',
'en_RW' => 'อังกฤษ (รวันดา)',
'en_SB' => 'อังกฤษ (หมู่เกาะโซโลมอน)',
'en_SC' => 'อังกฤษ (เซเชลส์)',
@@ -184,6 +194,7 @@
'en_SG' => 'อังกฤษ (สิงคโปร์)',
'en_SH' => 'อังกฤษ (เซนต์เฮเลนา)',
'en_SI' => 'อังกฤษ (สโลวีเนีย)',
+ 'en_SK' => 'อังกฤษ (สโลวะเกีย)',
'en_SL' => 'อังกฤษ (เซียร์ราลีโอน)',
'en_SS' => 'อังกฤษ (ซูดานใต้)',
'en_SX' => 'อังกฤษ (ซินต์มาร์เทน)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ti.php b/src/Symfony/Component/Intl/Resources/data/locales/ti.php
index 79c0e33163e45..f822726833dc2 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ti.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ti.php
@@ -121,29 +121,35 @@
'en_CM' => 'እንግሊዝኛ (ካሜሩን)',
'en_CX' => 'እንግሊዝኛ (ደሴት ክሪስማስ)',
'en_CY' => 'እንግሊዝኛ (ቆጵሮስ)',
+ 'en_CZ' => 'እንግሊዝኛ (ቸክያ)',
'en_DE' => 'እንግሊዝኛ (ጀርመን)',
'en_DK' => 'እንግሊዝኛ (ደንማርክ)',
'en_DM' => 'እንግሊዝኛ (ዶሚኒካ)',
'en_ER' => 'እንግሊዝኛ (ኤርትራ)',
+ 'en_ES' => 'እንግሊዝኛ (ስጳኛ)',
'en_FI' => 'እንግሊዝኛ (ፊንላንድ)',
'en_FJ' => 'እንግሊዝኛ (ፊጂ)',
'en_FK' => 'እንግሊዝኛ (ደሴታት ፎክላንድ)',
'en_FM' => 'እንግሊዝኛ (ማይክሮነዥያ)',
+ 'en_FR' => 'እንግሊዝኛ (ፈረንሳ)',
'en_GB' => 'እንግሊዝኛ (ብሪጣንያ)',
'en_GD' => 'እንግሊዝኛ (ግረናዳ)',
'en_GG' => 'እንግሊዝኛ (ገርንዚ)',
'en_GH' => 'እንግሊዝኛ (ጋና)',
'en_GI' => 'እንግሊዝኛ (ጂብራልታር)',
'en_GM' => 'እንግሊዝኛ (ጋምብያ)',
+ 'en_GS' => 'እንግሊዝኛ (ደሴታት ደቡብ ጆርጅያን ደቡብ ሳንድዊችን)',
'en_GU' => 'እንግሊዝኛ (ጓም)',
'en_GY' => 'እንግሊዝኛ (ጉያና)',
'en_HK' => 'እንግሊዝኛ (ፍሉይ ምምሕዳራዊ ዞባ ሆንግ ኮንግ [ቻይና])',
+ 'en_HU' => 'እንግሊዝኛ (ሃንጋሪ)',
'en_ID' => 'እንግሊዝኛ (ኢንዶነዥያ)',
'en_IE' => 'እንግሊዝኛ (ኣየርላንድ)',
'en_IL' => 'እንግሊዝኛ (እስራኤል)',
'en_IM' => 'እንግሊዝኛ (ኣይል ኦፍ ማን)',
'en_IN' => 'እንግሊዝኛ (ህንዲ)',
'en_IO' => 'እንግሊዝኛ (ብሪጣንያዊ ህንዳዊ ውቅያኖስ ግዝኣት)',
+ 'en_IT' => 'እንግሊዝኛ (ኢጣልያ)',
'en_JE' => 'እንግሊዝኛ (ጀርዚ)',
'en_JM' => 'እንግሊዝኛ (ጃማይካ)',
'en_KE' => 'እንግሊዝኛ (ኬንያ)',
@@ -167,15 +173,19 @@
'en_NF' => 'እንግሊዝኛ (ደሴት ኖርፎልክ)',
'en_NG' => 'እንግሊዝኛ (ናይጀርያ)',
'en_NL' => 'እንግሊዝኛ (ኔዘርላንድ)',
+ 'en_NO' => 'እንግሊዝኛ (ኖርወይ)',
'en_NR' => 'እንግሊዝኛ (ናውሩ)',
'en_NU' => 'እንግሊዝኛ (ኒዩ)',
'en_NZ' => 'እንግሊዝኛ (ኒው ዚላንድ)',
'en_PG' => 'እንግሊዝኛ (ፓፕዋ ኒው ጊኒ)',
'en_PH' => 'እንግሊዝኛ (ፊሊፒንስ)',
'en_PK' => 'እንግሊዝኛ (ፓኪስታን)',
+ 'en_PL' => 'እንግሊዝኛ (ፖላንድ)',
'en_PN' => 'እንግሊዝኛ (ደሴታት ፒትካርን)',
'en_PR' => 'እንግሊዝኛ (ፖርቶ ሪኮ)',
+ 'en_PT' => 'እንግሊዝኛ (ፖርቱጋል)',
'en_PW' => 'እንግሊዝኛ (ፓላው)',
+ 'en_RO' => 'እንግሊዝኛ (ሩማንያ)',
'en_RW' => 'እንግሊዝኛ (ርዋንዳ)',
'en_SB' => 'እንግሊዝኛ (ደሴታት ሰሎሞን)',
'en_SC' => 'እንግሊዝኛ (ሲሸልስ)',
@@ -184,6 +194,7 @@
'en_SG' => 'እንግሊዝኛ (ሲንጋፖር)',
'en_SH' => 'እንግሊዝኛ (ቅድስቲ ሄለና)',
'en_SI' => 'እንግሊዝኛ (ስሎቬንያ)',
+ 'en_SK' => 'እንግሊዝኛ (ስሎቫክያ)',
'en_SL' => 'እንግሊዝኛ (ሴራ ልዮን)',
'en_SS' => 'እንግሊዝኛ (ደቡብ ሱዳን)',
'en_SX' => 'እንግሊዝኛ (ሲንት ማርተን)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/tk.php b/src/Symfony/Component/Intl/Resources/data/locales/tk.php
index 48561a3a4fc7d..fb367f551a64e 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/tk.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/tk.php
@@ -121,29 +121,35 @@
'en_CM' => 'iňlis dili (Kamerun)',
'en_CX' => 'iňlis dili (Roždestwo adasy)',
'en_CY' => 'iňlis dili (Kipr)',
+ 'en_CZ' => 'iňlis dili (Çehiýa)',
'en_DE' => 'iňlis dili (Germaniýa)',
'en_DK' => 'iňlis dili (Daniýa)',
'en_DM' => 'iňlis dili (Dominika)',
'en_ER' => 'iňlis dili (Eritreýa)',
+ 'en_ES' => 'iňlis dili (Ispaniýa)',
'en_FI' => 'iňlis dili (Finlýandiýa)',
'en_FJ' => 'iňlis dili (Fiji)',
'en_FK' => 'iňlis dili (Folklend adalary)',
'en_FM' => 'iňlis dili (Mikroneziýa)',
+ 'en_FR' => 'iňlis dili (Fransiýa)',
'en_GB' => 'iňlis dili (Birleşen Patyşalyk)',
'en_GD' => 'iňlis dili (Grenada)',
'en_GG' => 'iňlis dili (Gernsi)',
'en_GH' => 'iňlis dili (Gana)',
'en_GI' => 'iňlis dili (Gibraltar)',
'en_GM' => 'iňlis dili (Gambiýa)',
+ 'en_GS' => 'iňlis dili (Günorta Georgiýa we Günorta Sendwiç adasy)',
'en_GU' => 'iňlis dili (Guam)',
'en_GY' => 'iňlis dili (Gaýana)',
'en_HK' => 'iňlis dili (Gonkong AAS Hytaý)',
+ 'en_HU' => 'iňlis dili (Wengriýa)',
'en_ID' => 'iňlis dili (Indoneziýa)',
'en_IE' => 'iňlis dili (Irlandiýa)',
'en_IL' => 'iňlis dili (Ysraýyl)',
'en_IM' => 'iňlis dili (Men adasy)',
'en_IN' => 'iňlis dili (Hindistan)',
'en_IO' => 'iňlis dili (Britaniýanyň Hindi okeanyndaky territoriýalary)',
+ 'en_IT' => 'iňlis dili (Italiýa)',
'en_JE' => 'iňlis dili (Jersi)',
'en_JM' => 'iňlis dili (Ýamaýka)',
'en_KE' => 'iňlis dili (Keniýa)',
@@ -167,15 +173,19 @@
'en_NF' => 'iňlis dili (Norfolk adasy)',
'en_NG' => 'iňlis dili (Nigeriýa)',
'en_NL' => 'iňlis dili (Niderlandlar)',
+ 'en_NO' => 'iňlis dili (Norwegiýa)',
'en_NR' => 'iňlis dili (Nauru)',
'en_NU' => 'iňlis dili (Niue)',
'en_NZ' => 'iňlis dili (Täze Zelandiýa)',
'en_PG' => 'iňlis dili (Papua - Täze Gwineýa)',
'en_PH' => 'iňlis dili (Filippinler)',
'en_PK' => 'iňlis dili (Pakistan)',
+ 'en_PL' => 'iňlis dili (Polşa)',
'en_PN' => 'iňlis dili (Pitkern adalary)',
'en_PR' => 'iňlis dili (Puerto-Riko)',
+ 'en_PT' => 'iňlis dili (Portugaliýa)',
'en_PW' => 'iňlis dili (Palau)',
+ 'en_RO' => 'iňlis dili (Rumyniýa)',
'en_RW' => 'iňlis dili (Ruanda)',
'en_SB' => 'iňlis dili (Solomon adalary)',
'en_SC' => 'iňlis dili (Seýşel adalary)',
@@ -184,6 +194,7 @@
'en_SG' => 'iňlis dili (Singapur)',
'en_SH' => 'iňlis dili (Keramatly Ýelena adasy)',
'en_SI' => 'iňlis dili (Sloweniýa)',
+ 'en_SK' => 'iňlis dili (Slowakiýa)',
'en_SL' => 'iňlis dili (Sýerra-Leone)',
'en_SS' => 'iňlis dili (Günorta Sudan)',
'en_SX' => 'iňlis dili (Sint-Marten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/to.php b/src/Symfony/Component/Intl/Resources/data/locales/to.php
index 109d269cb4746..b68a7aeda3c6f 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/to.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/to.php
@@ -121,29 +121,35 @@
'en_CM' => 'lea fakapālangi (Kameluni)',
'en_CX' => 'lea fakapālangi (Motu Kilisimasi)',
'en_CY' => 'lea fakapālangi (Saipalesi)',
+ 'en_CZ' => 'lea fakapālangi (Sēkia)',
'en_DE' => 'lea fakapālangi (Siamane)',
'en_DK' => 'lea fakapālangi (Tenimaʻake)',
'en_DM' => 'lea fakapālangi (Tominika)',
'en_ER' => 'lea fakapālangi (ʻElitulia)',
+ 'en_ES' => 'lea fakapālangi (Sipeini)',
'en_FI' => 'lea fakapālangi (Finilani)',
'en_FJ' => 'lea fakapālangi (Fisi)',
'en_FK' => 'lea fakapālangi (ʻOtumotu Fokulani)',
'en_FM' => 'lea fakapālangi (Mikolonīsia)',
+ 'en_FR' => 'lea fakapālangi (Falanisē)',
'en_GB' => 'lea fakapālangi (Pilitānia)',
'en_GD' => 'lea fakapālangi (Kelenatā)',
'en_GG' => 'lea fakapālangi (Kuenisī)',
'en_GH' => 'lea fakapālangi (Kana)',
'en_GI' => 'lea fakapālangi (Sipalālitā)',
'en_GM' => 'lea fakapālangi (Kamipia)',
+ 'en_GS' => 'lea fakapālangi (ʻOtumotu Seōsia-tonga mo Saniuisi-tonga)',
'en_GU' => 'lea fakapālangi (Kuamu)',
'en_GY' => 'lea fakapālangi (Kuiana)',
'en_HK' => 'lea fakapālangi (Hongi Kongi SAR Siaina)',
+ 'en_HU' => 'lea fakapālangi (Hungakalia)',
'en_ID' => 'lea fakapālangi (ʻInitonēsia)',
'en_IE' => 'lea fakapālangi (ʻAealani)',
'en_IL' => 'lea fakapālangi (ʻIsileli)',
'en_IM' => 'lea fakapālangi (Motu Mani)',
'en_IN' => 'lea fakapālangi (ʻInitia)',
'en_IO' => 'lea fakapālangi (Potu fonua moana ʻInitia fakapilitānia)',
+ 'en_IT' => 'lea fakapālangi (ʻĪtali)',
'en_JE' => 'lea fakapālangi (Selusī)',
'en_JM' => 'lea fakapālangi (Samaika)',
'en_KE' => 'lea fakapālangi (Keniā)',
@@ -167,15 +173,19 @@
'en_NF' => 'lea fakapālangi (Motu Nōfoliki)',
'en_NG' => 'lea fakapālangi (Naisilia)',
'en_NL' => 'lea fakapālangi (Hōlani)',
+ 'en_NO' => 'lea fakapālangi (Noauē)',
'en_NR' => 'lea fakapālangi (Naulu)',
'en_NU' => 'lea fakapālangi (Niuē)',
'en_NZ' => 'lea fakapālangi (Nuʻusila)',
'en_PG' => 'lea fakapālangi (Papuaniukini)',
'en_PH' => 'lea fakapālangi (Filipaini)',
'en_PK' => 'lea fakapālangi (Pākisitani)',
+ 'en_PL' => 'lea fakapālangi (Polani)',
'en_PN' => 'lea fakapālangi (ʻOtumotu Pitikeni)',
'en_PR' => 'lea fakapālangi (Puēto Liko)',
+ 'en_PT' => 'lea fakapālangi (Potukali)',
'en_PW' => 'lea fakapālangi (Palau)',
+ 'en_RO' => 'lea fakapālangi (Lomēnia)',
'en_RW' => 'lea fakapālangi (Luanitā)',
'en_SB' => 'lea fakapālangi (ʻOtumotu Solomone)',
'en_SC' => 'lea fakapālangi (ʻOtumotu Seiseli)',
@@ -184,6 +194,7 @@
'en_SG' => 'lea fakapālangi (Singapoa)',
'en_SH' => 'lea fakapālangi (Sā Helena)',
'en_SI' => 'lea fakapālangi (Silōvenia)',
+ 'en_SK' => 'lea fakapālangi (Silōvakia)',
'en_SL' => 'lea fakapālangi (Siela Leone)',
'en_SS' => 'lea fakapālangi (Sūtani fakatonga)',
'en_SX' => 'lea fakapālangi (Sā Mātini [fakahōlani])',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/tr.php b/src/Symfony/Component/Intl/Resources/data/locales/tr.php
index a1b5f1a6f13d0..ba3c3527fd7d9 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/tr.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/tr.php
@@ -121,29 +121,35 @@
'en_CM' => 'İngilizce (Kamerun)',
'en_CX' => 'İngilizce (Christmas Adası)',
'en_CY' => 'İngilizce (Kıbrıs)',
+ 'en_CZ' => 'İngilizce (Çekya)',
'en_DE' => 'İngilizce (Almanya)',
'en_DK' => 'İngilizce (Danimarka)',
'en_DM' => 'İngilizce (Dominika)',
'en_ER' => 'İngilizce (Eritre)',
+ 'en_ES' => 'İngilizce (İspanya)',
'en_FI' => 'İngilizce (Finlandiya)',
'en_FJ' => 'İngilizce (Fiji)',
'en_FK' => 'İngilizce (Falkland Adaları)',
'en_FM' => 'İngilizce (Mikronezya)',
+ 'en_FR' => 'İngilizce (Fransa)',
'en_GB' => 'İngilizce (Birleşik Krallık)',
'en_GD' => 'İngilizce (Grenada)',
'en_GG' => 'İngilizce (Guernsey)',
'en_GH' => 'İngilizce (Gana)',
'en_GI' => 'İngilizce (Cebelitarık)',
'en_GM' => 'İngilizce (Gambiya)',
+ 'en_GS' => 'İngilizce (Güney Georgia ve Güney Sandwich Adaları)',
'en_GU' => 'İngilizce (Guam)',
'en_GY' => 'İngilizce (Guyana)',
'en_HK' => 'İngilizce (Çin Hong Kong ÖİB)',
+ 'en_HU' => 'İngilizce (Macaristan)',
'en_ID' => 'İngilizce (Endonezya)',
'en_IE' => 'İngilizce (İrlanda)',
'en_IL' => 'İngilizce (İsrail)',
'en_IM' => 'İngilizce (Man Adası)',
'en_IN' => 'İngilizce (Hindistan)',
'en_IO' => 'İngilizce (Britanya Hint Okyanusu Toprakları)',
+ 'en_IT' => 'İngilizce (İtalya)',
'en_JE' => 'İngilizce (Jersey)',
'en_JM' => 'İngilizce (Jamaika)',
'en_KE' => 'İngilizce (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'İngilizce (Norfolk Adası)',
'en_NG' => 'İngilizce (Nijerya)',
'en_NL' => 'İngilizce (Hollanda)',
+ 'en_NO' => 'İngilizce (Norveç)',
'en_NR' => 'İngilizce (Nauru)',
'en_NU' => 'İngilizce (Niue)',
'en_NZ' => 'İngilizce (Yeni Zelanda)',
'en_PG' => 'İngilizce (Papua Yeni Gine)',
'en_PH' => 'İngilizce (Filipinler)',
'en_PK' => 'İngilizce (Pakistan)',
+ 'en_PL' => 'İngilizce (Polonya)',
'en_PN' => 'İngilizce (Pitcairn Adaları)',
'en_PR' => 'İngilizce (Porto Riko)',
+ 'en_PT' => 'İngilizce (Portekiz)',
'en_PW' => 'İngilizce (Palau)',
+ 'en_RO' => 'İngilizce (Romanya)',
'en_RW' => 'İngilizce (Ruanda)',
'en_SB' => 'İngilizce (Solomon Adaları)',
'en_SC' => 'İngilizce (Seyşeller)',
@@ -184,6 +194,7 @@
'en_SG' => 'İngilizce (Singapur)',
'en_SH' => 'İngilizce (Saint Helena)',
'en_SI' => 'İngilizce (Slovenya)',
+ 'en_SK' => 'İngilizce (Slovakya)',
'en_SL' => 'İngilizce (Sierra Leone)',
'en_SS' => 'İngilizce (Güney Sudan)',
'en_SX' => 'İngilizce (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/tt.php b/src/Symfony/Component/Intl/Resources/data/locales/tt.php
index 0b2a4529009f6..7f8b5bffce1b1 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/tt.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/tt.php
@@ -110,29 +110,35 @@
'en_CM' => 'инглиз (Камерун)',
'en_CX' => 'инглиз (Раштуа утравы)',
'en_CY' => 'инглиз (Кипр)',
+ 'en_CZ' => 'инглиз (Чехия Республикасы)',
'en_DE' => 'инглиз (Германия)',
'en_DK' => 'инглиз (Дания)',
'en_DM' => 'инглиз (Доминика)',
'en_ER' => 'инглиз (Эритрея)',
+ 'en_ES' => 'инглиз (Испания)',
'en_FI' => 'инглиз (Финляндия)',
'en_FJ' => 'инглиз (Фиджи)',
'en_FK' => 'инглиз (Фолкленд утраулары)',
'en_FM' => 'инглиз (Микронезия)',
+ 'en_FR' => 'инглиз (Франция)',
'en_GB' => 'инглиз (Берләшкән Корольлек)',
'en_GD' => 'инглиз (Гренада)',
'en_GG' => 'инглиз (Гернси)',
'en_GH' => 'инглиз (Гана)',
'en_GI' => 'инглиз (Гибралтар)',
'en_GM' => 'инглиз (Гамбия)',
+ 'en_GS' => 'инглиз (Көньяк Георгия һәм Көньяк Сандвич утраулары)',
'en_GU' => 'инглиз (Гуам)',
'en_GY' => 'инглиз (Гайана)',
'en_HK' => 'инглиз (Гонконг Махсус Идарәле Төбәге)',
+ 'en_HU' => 'инглиз (Венгрия)',
'en_ID' => 'инглиз (Индонезия)',
'en_IE' => 'инглиз (Ирландия)',
'en_IL' => 'инглиз (Израиль)',
'en_IM' => 'инглиз (Мэн утравы)',
'en_IN' => 'инглиз (Индия)',
'en_IO' => 'инглиз (Британиянең Һинд Океанындагы Территориясе)',
+ 'en_IT' => 'инглиз (Италия)',
'en_JE' => 'инглиз (Джерси)',
'en_JM' => 'инглиз (Ямайка)',
'en_KE' => 'инглиз (Кения)',
@@ -156,15 +162,19 @@
'en_NF' => 'инглиз (Норфолк утравы)',
'en_NG' => 'инглиз (Нигерия)',
'en_NL' => 'инглиз (Нидерланд)',
+ 'en_NO' => 'инглиз (Норвегия)',
'en_NR' => 'инглиз (Науру)',
'en_NU' => 'инглиз (Ниуэ)',
'en_NZ' => 'инглиз (Яңа Зеландия)',
'en_PG' => 'инглиз (Папуа - Яңа Гвинея)',
'en_PH' => 'инглиз (Филиппин)',
'en_PK' => 'инглиз (Пакистан)',
+ 'en_PL' => 'инглиз (Польша)',
'en_PN' => 'инглиз (Питкэрн утраулары)',
'en_PR' => 'инглиз (Пуэрто-Рико)',
+ 'en_PT' => 'инглиз (Португалия)',
'en_PW' => 'инглиз (Палау)',
+ 'en_RO' => 'инглиз (Румыния)',
'en_RW' => 'инглиз (Руанда)',
'en_SB' => 'инглиз (Сөләйман утраулары)',
'en_SC' => 'инглиз (Сейшел утраулары)',
@@ -173,6 +183,7 @@
'en_SG' => 'инглиз (Сингапур)',
'en_SH' => 'инглиз (Изге Елена утравы)',
'en_SI' => 'инглиз (Словения)',
+ 'en_SK' => 'инглиз (Словакия)',
'en_SL' => 'инглиз (Сьерра-Леоне)',
'en_SS' => 'инглиз (Көньяк Судан)',
'en_SX' => 'инглиз (Синт-Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ug.php b/src/Symfony/Component/Intl/Resources/data/locales/ug.php
index bcacc5bd1b6d9..172520efb367f 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ug.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ug.php
@@ -121,28 +121,34 @@
'en_CM' => 'ئىنگلىزچە (كامېرون)',
'en_CX' => 'ئىنگلىزچە (مىلاد ئارىلى)',
'en_CY' => 'ئىنگلىزچە (سىپرۇس)',
+ 'en_CZ' => 'ئىنگلىزچە (چېخ جۇمھۇرىيىتى)',
'en_DE' => 'ئىنگلىزچە (گېرمانىيە)',
'en_DK' => 'ئىنگلىزچە (دانىيە)',
'en_DM' => 'ئىنگلىزچە (دومىنىكا)',
'en_ER' => 'ئىنگلىزچە (ئېرىترىيە)',
+ 'en_ES' => 'ئىنگلىزچە (ئىسپانىيە)',
'en_FI' => 'ئىنگلىزچە (فىنلاندىيە)',
'en_FJ' => 'ئىنگلىزچە (فىجى)',
'en_FK' => 'ئىنگلىزچە (فالكلاند ئاراللىرى)',
'en_FM' => 'ئىنگلىزچە (مىكرونېزىيە)',
+ 'en_FR' => 'ئىنگلىزچە (فىرانسىيە)',
'en_GB' => 'ئىنگلىزچە (بىرلەشمە پادىشاھلىق)',
'en_GD' => 'ئىنگلىزچە (گىرېنادا)',
'en_GG' => 'ئىنگلىزچە (گۇرنسېي)',
'en_GH' => 'ئىنگلىزچە (گانا)',
'en_GI' => 'ئىنگلىزچە (جەبىلتارىق)',
'en_GM' => 'ئىنگلىزچە (گامبىيە)',
+ 'en_GS' => 'ئىنگلىزچە (جەنۇبىي جورجىيە ۋە جەنۇبىي ساندۋىچ ئاراللىرى)',
'en_GU' => 'ئىنگلىزچە (گۇئام)',
'en_GY' => 'ئىنگلىزچە (گىۋىيانا)',
'en_HK' => 'ئىنگلىزچە (شياڭگاڭ ئالاھىدە مەمۇرىي رايونى [جۇڭگو])',
+ 'en_HU' => 'ئىنگلىزچە (ۋېنگىرىيە)',
'en_ID' => 'ئىنگلىزچە (ھىندونېزىيە)',
'en_IE' => 'ئىنگلىزچە (ئىرېلاندىيە)',
'en_IL' => 'ئىنگلىزچە (ئىسرائىلىيە)',
'en_IM' => 'ئىنگلىزچە (مان ئارىلى)',
'en_IN' => 'ئىنگلىزچە (ھىندىستان)',
+ 'en_IT' => 'ئىنگلىزچە (ئىتالىيە)',
'en_JE' => 'ئىنگلىزچە (جېرسېي)',
'en_JM' => 'ئىنگلىزچە (يامايكا)',
'en_KE' => 'ئىنگلىزچە (كېنىيە)',
@@ -166,15 +172,19 @@
'en_NF' => 'ئىنگلىزچە (نورفولك ئارىلى)',
'en_NG' => 'ئىنگلىزچە (نىگېرىيە)',
'en_NL' => 'ئىنگلىزچە (گوللاندىيە)',
+ 'en_NO' => 'ئىنگلىزچە (نورۋېگىيە)',
'en_NR' => 'ئىنگلىزچە (ناۋرۇ)',
'en_NU' => 'ئىنگلىزچە (نيۇئې)',
'en_NZ' => 'ئىنگلىزچە (يېڭى زېلاندىيە)',
'en_PG' => 'ئىنگلىزچە (پاپۇئا يېڭى گىۋىنىيەسى)',
'en_PH' => 'ئىنگلىزچە (فىلىپپىن)',
'en_PK' => 'ئىنگلىزچە (پاكىستان)',
+ 'en_PL' => 'ئىنگلىزچە (پولشا)',
'en_PN' => 'ئىنگلىزچە (پىتكايرن ئاراللىرى)',
'en_PR' => 'ئىنگلىزچە (پۇئېرتو رىكو)',
+ 'en_PT' => 'ئىنگلىزچە (پورتۇگالىيە)',
'en_PW' => 'ئىنگلىزچە (پالائۇ)',
+ 'en_RO' => 'ئىنگلىزچە (رومىنىيە)',
'en_RW' => 'ئىنگلىزچە (رىۋاندا)',
'en_SB' => 'ئىنگلىزچە (سولومون ئاراللىرى)',
'en_SC' => 'ئىنگلىزچە (سېيشېل)',
@@ -183,6 +193,7 @@
'en_SG' => 'ئىنگلىزچە (سىنگاپور)',
'en_SH' => 'ئىنگلىزچە (ساينىت ھېلېنا)',
'en_SI' => 'ئىنگلىزچە (سىلوۋېنىيە)',
+ 'en_SK' => 'ئىنگلىزچە (سىلوۋاكىيە)',
'en_SL' => 'ئىنگلىزچە (سېررالېئون)',
'en_SS' => 'ئىنگلىزچە (جەنۇبىي سۇدان)',
'en_SX' => 'ئىنگلىزچە (سىنت مارتېن)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/uk.php b/src/Symfony/Component/Intl/Resources/data/locales/uk.php
index 5dadd306d7297..ff6438470ae7e 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/uk.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/uk.php
@@ -121,29 +121,35 @@
'en_CM' => 'англійська (Камерун)',
'en_CX' => 'англійська (Острів Різдва)',
'en_CY' => 'англійська (Кіпр)',
+ 'en_CZ' => 'англійська (Чехія)',
'en_DE' => 'англійська (Німеччина)',
'en_DK' => 'англійська (Данія)',
'en_DM' => 'англійська (Домініка)',
'en_ER' => 'англійська (Еритрея)',
+ 'en_ES' => 'англійська (Іспанія)',
'en_FI' => 'англійська (Фінляндія)',
'en_FJ' => 'англійська (Фіджі)',
'en_FK' => 'англійська (Фолклендські Острови)',
'en_FM' => 'англійська (Мікронезія)',
+ 'en_FR' => 'англійська (Франція)',
'en_GB' => 'англійська (Велика Британія)',
'en_GD' => 'англійська (Гренада)',
'en_GG' => 'англійська (Гернсі)',
'en_GH' => 'англійська (Гана)',
'en_GI' => 'англійська (Гібралтар)',
'en_GM' => 'англійська (Гамбія)',
+ 'en_GS' => 'англійська (Південна Джорджія та Південні Сандвічеві Острови)',
'en_GU' => 'англійська (Гуам)',
'en_GY' => 'англійська (Гаяна)',
'en_HK' => 'англійська (Гонконг, ОАР Китаю)',
+ 'en_HU' => 'англійська (Угорщина)',
'en_ID' => 'англійська (Індонезія)',
'en_IE' => 'англійська (Ірландія)',
'en_IL' => 'англійська (Ізраїль)',
'en_IM' => 'англійська (Острів Мен)',
'en_IN' => 'англійська (Індія)',
'en_IO' => 'англійська (Британська територія в Індійському океані)',
+ 'en_IT' => 'англійська (Італія)',
'en_JE' => 'англійська (Джерсі)',
'en_JM' => 'англійська (Ямайка)',
'en_KE' => 'англійська (Кенія)',
@@ -167,15 +173,19 @@
'en_NF' => 'англійська (Острів Норфолк)',
'en_NG' => 'англійська (Нігерія)',
'en_NL' => 'англійська (Нідерланди)',
+ 'en_NO' => 'англійська (Норвегія)',
'en_NR' => 'англійська (Науру)',
'en_NU' => 'англійська (Ніуе)',
'en_NZ' => 'англійська (Нова Зеландія)',
'en_PG' => 'англійська (Папуа-Нова Гвінея)',
'en_PH' => 'англійська (Філіппіни)',
'en_PK' => 'англійська (Пакистан)',
+ 'en_PL' => 'англійська (Польща)',
'en_PN' => 'англійська (Острови Піткерн)',
'en_PR' => 'англійська (Пуерто-Рико)',
+ 'en_PT' => 'англійська (Португалія)',
'en_PW' => 'англійська (Палау)',
+ 'en_RO' => 'англійська (Румунія)',
'en_RW' => 'англійська (Руанда)',
'en_SB' => 'англійська (Соломонові Острови)',
'en_SC' => 'англійська (Сейшельські Острови)',
@@ -184,6 +194,7 @@
'en_SG' => 'англійська (Сінгапур)',
'en_SH' => 'англійська (Острів Святої Єлени)',
'en_SI' => 'англійська (Словенія)',
+ 'en_SK' => 'англійська (Словаччина)',
'en_SL' => 'англійська (Сьєрра-Леоне)',
'en_SS' => 'англійська (Південний Судан)',
'en_SX' => 'англійська (Сінт-Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/ur.php b/src/Symfony/Component/Intl/Resources/data/locales/ur.php
index d7ac179c447c4..2f497ec8d340f 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/ur.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/ur.php
@@ -121,29 +121,35 @@
'en_CM' => 'انگریزی (کیمرون)',
'en_CX' => 'انگریزی (جزیرہ کرسمس)',
'en_CY' => 'انگریزی (قبرص)',
+ 'en_CZ' => 'انگریزی (چیکیا)',
'en_DE' => 'انگریزی (جرمنی)',
'en_DK' => 'انگریزی (ڈنمارک)',
'en_DM' => 'انگریزی (ڈومنیکا)',
'en_ER' => 'انگریزی (اریٹیریا)',
+ 'en_ES' => 'انگریزی (ہسپانیہ)',
'en_FI' => 'انگریزی (فن لینڈ)',
'en_FJ' => 'انگریزی (فجی)',
'en_FK' => 'انگریزی (فاکلینڈ جزائر)',
'en_FM' => 'انگریزی (مائکرونیشیا)',
+ 'en_FR' => 'انگریزی (فرانس)',
'en_GB' => 'انگریزی (سلطنت متحدہ)',
'en_GD' => 'انگریزی (گریناڈا)',
'en_GG' => 'انگریزی (گوئرنسی)',
'en_GH' => 'انگریزی (گھانا)',
'en_GI' => 'انگریزی (جبل الطارق)',
'en_GM' => 'انگریزی (گیمبیا)',
+ 'en_GS' => 'انگریزی (جنوبی جارجیا اور جنوبی سینڈوچ جزائر)',
'en_GU' => 'انگریزی (گوام)',
'en_GY' => 'انگریزی (گیانا)',
'en_HK' => 'انگریزی (ہانگ کانگ SAR چین)',
+ 'en_HU' => 'انگریزی (ہنگری)',
'en_ID' => 'انگریزی (انڈونیشیا)',
'en_IE' => 'انگریزی (آئرلینڈ)',
'en_IL' => 'انگریزی (اسرائیل)',
'en_IM' => 'انگریزی (آئل آف مین)',
'en_IN' => 'انگریزی (بھارت)',
'en_IO' => 'انگریزی (برطانوی بحر ہند کا علاقہ)',
+ 'en_IT' => 'انگریزی (اٹلی)',
'en_JE' => 'انگریزی (جرسی)',
'en_JM' => 'انگریزی (جمائیکا)',
'en_KE' => 'انگریزی (کینیا)',
@@ -167,15 +173,19 @@
'en_NF' => 'انگریزی (نارفوک آئلینڈ)',
'en_NG' => 'انگریزی (نائجیریا)',
'en_NL' => 'انگریزی (نیدر لینڈز)',
+ 'en_NO' => 'انگریزی (ناروے)',
'en_NR' => 'انگریزی (نؤرو)',
'en_NU' => 'انگریزی (نیئو)',
'en_NZ' => 'انگریزی (نیوزی لینڈ)',
'en_PG' => 'انگریزی (پاپوآ نیو گنی)',
'en_PH' => 'انگریزی (فلپائن)',
'en_PK' => 'انگریزی (پاکستان)',
+ 'en_PL' => 'انگریزی (پولینڈ)',
'en_PN' => 'انگریزی (پٹکائرن جزائر)',
'en_PR' => 'انگریزی (پیورٹو ریکو)',
+ 'en_PT' => 'انگریزی (پرتگال)',
'en_PW' => 'انگریزی (پلاؤ)',
+ 'en_RO' => 'انگریزی (رومانیہ)',
'en_RW' => 'انگریزی (روانڈا)',
'en_SB' => 'انگریزی (سولومن آئلینڈز)',
'en_SC' => 'انگریزی (سشلیز)',
@@ -184,6 +194,7 @@
'en_SG' => 'انگریزی (سنگاپور)',
'en_SH' => 'انگریزی (سینٹ ہیلینا)',
'en_SI' => 'انگریزی (سلووینیا)',
+ 'en_SK' => 'انگریزی (سلوواکیہ)',
'en_SL' => 'انگریزی (سیرالیون)',
'en_SS' => 'انگریزی (جنوبی سوڈان)',
'en_SX' => 'انگریزی (سنٹ مارٹن)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/uz.php b/src/Symfony/Component/Intl/Resources/data/locales/uz.php
index 6448491444f86..ed9a8c05baff6 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/uz.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/uz.php
@@ -121,29 +121,35 @@
'en_CM' => 'inglizcha (Kamerun)',
'en_CX' => 'inglizcha (Rojdestvo oroli)',
'en_CY' => 'inglizcha (Kipr)',
+ 'en_CZ' => 'inglizcha (Chexiya)',
'en_DE' => 'inglizcha (Germaniya)',
'en_DK' => 'inglizcha (Daniya)',
'en_DM' => 'inglizcha (Dominika)',
'en_ER' => 'inglizcha (Eritreya)',
+ 'en_ES' => 'inglizcha (Ispaniya)',
'en_FI' => 'inglizcha (Finlandiya)',
'en_FJ' => 'inglizcha (Fiji)',
'en_FK' => 'inglizcha (Folklend orollari)',
'en_FM' => 'inglizcha (Mikroneziya)',
+ 'en_FR' => 'inglizcha (Fransiya)',
'en_GB' => 'inglizcha (Buyuk Britaniya)',
'en_GD' => 'inglizcha (Grenada)',
'en_GG' => 'inglizcha (Gernsi)',
'en_GH' => 'inglizcha (Gana)',
'en_GI' => 'inglizcha (Gibraltar)',
'en_GM' => 'inglizcha (Gambiya)',
+ 'en_GS' => 'inglizcha (Janubiy Georgiya va Janubiy Sendvich orollari)',
'en_GU' => 'inglizcha (Guam)',
'en_GY' => 'inglizcha (Gayana)',
'en_HK' => 'inglizcha (Gonkong [Xitoy MMH])',
+ 'en_HU' => 'inglizcha (Vengriya)',
'en_ID' => 'inglizcha (Indoneziya)',
'en_IE' => 'inglizcha (Irlandiya)',
'en_IL' => 'inglizcha (Isroil)',
'en_IM' => 'inglizcha (Men oroli)',
'en_IN' => 'inglizcha (Hindiston)',
'en_IO' => 'inglizcha (Britaniyaning Hind okeanidagi hududi)',
+ 'en_IT' => 'inglizcha (Italiya)',
'en_JE' => 'inglizcha (Jersi)',
'en_JM' => 'inglizcha (Yamayka)',
'en_KE' => 'inglizcha (Keniya)',
@@ -167,15 +173,19 @@
'en_NF' => 'inglizcha (Norfolk oroli)',
'en_NG' => 'inglizcha (Nigeriya)',
'en_NL' => 'inglizcha (Niderlandiya)',
+ 'en_NO' => 'inglizcha (Norvegiya)',
'en_NR' => 'inglizcha (Nauru)',
'en_NU' => 'inglizcha (Niue)',
'en_NZ' => 'inglizcha (Yangi Zelandiya)',
'en_PG' => 'inglizcha (Papua – Yangi Gvineya)',
'en_PH' => 'inglizcha (Filippin)',
'en_PK' => 'inglizcha (Pokiston)',
+ 'en_PL' => 'inglizcha (Polsha)',
'en_PN' => 'inglizcha (Pitkern orollari)',
'en_PR' => 'inglizcha (Puerto-Riko)',
+ 'en_PT' => 'inglizcha (Portugaliya)',
'en_PW' => 'inglizcha (Palau)',
+ 'en_RO' => 'inglizcha (Ruminiya)',
'en_RW' => 'inglizcha (Ruanda)',
'en_SB' => 'inglizcha (Solomon orollari)',
'en_SC' => 'inglizcha (Seyshel orollari)',
@@ -184,6 +194,7 @@
'en_SG' => 'inglizcha (Singapur)',
'en_SH' => 'inglizcha (Muqaddas Yelena oroli)',
'en_SI' => 'inglizcha (Sloveniya)',
+ 'en_SK' => 'inglizcha (Slovakiya)',
'en_SL' => 'inglizcha (Syerra-Leone)',
'en_SS' => 'inglizcha (Janubiy Sudan)',
'en_SX' => 'inglizcha (Sint-Marten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/uz_Cyrl.php b/src/Symfony/Component/Intl/Resources/data/locales/uz_Cyrl.php
index c914c6278d563..96e39d0e0e49d 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/uz_Cyrl.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/uz_Cyrl.php
@@ -121,29 +121,35 @@
'en_CM' => 'инглизча (Камерун)',
'en_CX' => 'инглизча (Рождество ороли)',
'en_CY' => 'инглизча (Кипр)',
+ 'en_CZ' => 'инглизча (Чехия)',
'en_DE' => 'инглизча (Германия)',
'en_DK' => 'инглизча (Дания)',
'en_DM' => 'инглизча (Доминика)',
'en_ER' => 'инглизча (Эритрея)',
+ 'en_ES' => 'инглизча (Испания)',
'en_FI' => 'инглизча (Финляндия)',
'en_FJ' => 'инглизча (Фижи)',
'en_FK' => 'инглизча (Фолкленд ороллари)',
'en_FM' => 'инглизча (Микронезия)',
+ 'en_FR' => 'инглизча (Франция)',
'en_GB' => 'инглизча (Буюк Британия)',
'en_GD' => 'инглизча (Гренада)',
'en_GG' => 'инглизча (Гернси)',
'en_GH' => 'инглизча (Гана)',
'en_GI' => 'инглизча (Гибралтар)',
'en_GM' => 'инглизча (Гамбия)',
+ 'en_GS' => 'инглизча (Жанубий Георгия ва Жанубий Сендвич ороллари)',
'en_GU' => 'инглизча (Гуам)',
'en_GY' => 'инглизча (Гаяна)',
'en_HK' => 'инглизча (Гонконг [Хитой ММҲ])',
+ 'en_HU' => 'инглизча (Венгрия)',
'en_ID' => 'инглизча (Индонезия)',
'en_IE' => 'инглизча (Ирландия)',
'en_IL' => 'инглизча (Исроил)',
'en_IM' => 'инглизча (Мэн ороли)',
'en_IN' => 'инглизча (Ҳиндистон)',
'en_IO' => 'инглизча (Britaniyaning Hind okeanidagi hududi)',
+ 'en_IT' => 'инглизча (Италия)',
'en_JE' => 'инглизча (Жерси)',
'en_JM' => 'инглизча (Ямайка)',
'en_KE' => 'инглизча (Кения)',
@@ -167,15 +173,19 @@
'en_NF' => 'инглизча (Норфолк ороллари)',
'en_NG' => 'инглизча (Нигерия)',
'en_NL' => 'инглизча (Нидерландия)',
+ 'en_NO' => 'инглизча (Норвегия)',
'en_NR' => 'инглизча (Науру)',
'en_NU' => 'инглизча (Ниуэ)',
'en_NZ' => 'инглизча (Янги Зеландия)',
'en_PG' => 'инглизча (Папуа - Янги Гвинея)',
'en_PH' => 'инглизча (Филиппин)',
'en_PK' => 'инглизча (Покистон)',
+ 'en_PL' => 'инглизча (Польша)',
'en_PN' => 'инглизча (Питкэрн ороллари)',
'en_PR' => 'инглизча (Пуэрто-Рико)',
+ 'en_PT' => 'инглизча (Португалия)',
'en_PW' => 'инглизча (Палау)',
+ 'en_RO' => 'инглизча (Руминия)',
'en_RW' => 'инглизча (Руанда)',
'en_SB' => 'инглизча (Соломон ороллари)',
'en_SC' => 'инглизча (Сейшел ороллари)',
@@ -184,6 +194,7 @@
'en_SG' => 'инглизча (Сингапур)',
'en_SH' => 'инглизча (Муқаддас Елена ороли)',
'en_SI' => 'инглизча (Словения)',
+ 'en_SK' => 'инглизча (Словакия)',
'en_SL' => 'инглизча (Сьерра-Леоне)',
'en_SS' => 'инглизча (Жанубий Судан)',
'en_SX' => 'инглизча (Синт-Мартен)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/vi.php b/src/Symfony/Component/Intl/Resources/data/locales/vi.php
index b73a0b4c8ea36..6cd2b079873a1 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/vi.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/vi.php
@@ -121,29 +121,35 @@
'en_CM' => 'Tiếng Anh (Cameroon)',
'en_CX' => 'Tiếng Anh (Đảo Giáng Sinh)',
'en_CY' => 'Tiếng Anh (Síp)',
+ 'en_CZ' => 'Tiếng Anh (Séc)',
'en_DE' => 'Tiếng Anh (Đức)',
'en_DK' => 'Tiếng Anh (Đan Mạch)',
'en_DM' => 'Tiếng Anh (Dominica)',
'en_ER' => 'Tiếng Anh (Eritrea)',
+ 'en_ES' => 'Tiếng Anh (Tây Ban Nha)',
'en_FI' => 'Tiếng Anh (Phần Lan)',
'en_FJ' => 'Tiếng Anh (Fiji)',
'en_FK' => 'Tiếng Anh (Quần đảo Falkland)',
'en_FM' => 'Tiếng Anh (Micronesia)',
+ 'en_FR' => 'Tiếng Anh (Pháp)',
'en_GB' => 'Tiếng Anh (Vương quốc Anh)',
'en_GD' => 'Tiếng Anh (Grenada)',
'en_GG' => 'Tiếng Anh (Guernsey)',
'en_GH' => 'Tiếng Anh (Ghana)',
'en_GI' => 'Tiếng Anh (Gibraltar)',
'en_GM' => 'Tiếng Anh (Gambia)',
+ 'en_GS' => 'Tiếng Anh (Nam Georgia & Quần đảo Nam Sandwich)',
'en_GU' => 'Tiếng Anh (Guam)',
'en_GY' => 'Tiếng Anh (Guyana)',
'en_HK' => 'Tiếng Anh (Đặc khu Hành chính Hồng Kông, Trung Quốc)',
+ 'en_HU' => 'Tiếng Anh (Hungary)',
'en_ID' => 'Tiếng Anh (Indonesia)',
'en_IE' => 'Tiếng Anh (Ireland)',
'en_IL' => 'Tiếng Anh (Israel)',
'en_IM' => 'Tiếng Anh (Đảo Man)',
'en_IN' => 'Tiếng Anh (Ấn Độ)',
'en_IO' => 'Tiếng Anh (Lãnh thổ Ấn Độ Dương thuộc Anh)',
+ 'en_IT' => 'Tiếng Anh (Italy)',
'en_JE' => 'Tiếng Anh (Jersey)',
'en_JM' => 'Tiếng Anh (Jamaica)',
'en_KE' => 'Tiếng Anh (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Tiếng Anh (Đảo Norfolk)',
'en_NG' => 'Tiếng Anh (Nigeria)',
'en_NL' => 'Tiếng Anh (Hà Lan)',
+ 'en_NO' => 'Tiếng Anh (Na Uy)',
'en_NR' => 'Tiếng Anh (Nauru)',
'en_NU' => 'Tiếng Anh (Niue)',
'en_NZ' => 'Tiếng Anh (New Zealand)',
'en_PG' => 'Tiếng Anh (Papua New Guinea)',
'en_PH' => 'Tiếng Anh (Philippines)',
'en_PK' => 'Tiếng Anh (Pakistan)',
+ 'en_PL' => 'Tiếng Anh (Ba Lan)',
'en_PN' => 'Tiếng Anh (Quần đảo Pitcairn)',
'en_PR' => 'Tiếng Anh (Puerto Rico)',
+ 'en_PT' => 'Tiếng Anh (Bồ Đào Nha)',
'en_PW' => 'Tiếng Anh (Palau)',
+ 'en_RO' => 'Tiếng Anh (Romania)',
'en_RW' => 'Tiếng Anh (Rwanda)',
'en_SB' => 'Tiếng Anh (Quần đảo Solomon)',
'en_SC' => 'Tiếng Anh (Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'Tiếng Anh (Singapore)',
'en_SH' => 'Tiếng Anh (St. Helena)',
'en_SI' => 'Tiếng Anh (Slovenia)',
+ 'en_SK' => 'Tiếng Anh (Slovakia)',
'en_SL' => 'Tiếng Anh (Sierra Leone)',
'en_SS' => 'Tiếng Anh (Nam Sudan)',
'en_SX' => 'Tiếng Anh (Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/wo.php b/src/Symfony/Component/Intl/Resources/data/locales/wo.php
index d2cfe09c2eb3b..b6b651d9e27b0 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/wo.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/wo.php
@@ -110,29 +110,35 @@
'en_CM' => 'Àngale (Kamerun)',
'en_CX' => 'Àngale (Dunu Kirismas)',
'en_CY' => 'Àngale (Siipar)',
+ 'en_CZ' => 'Àngale (Réewum Cek)',
'en_DE' => 'Àngale (Almaañ)',
'en_DK' => 'Àngale (Danmàrk)',
'en_DM' => 'Àngale (Dominik)',
'en_ER' => 'Àngale (Eritere)',
+ 'en_ES' => 'Àngale (Españ)',
'en_FI' => 'Àngale (Finlànd)',
'en_FJ' => 'Àngale (Fijji)',
'en_FK' => 'Àngale (Duni Falkland)',
'en_FM' => 'Àngale (Mikoronesi)',
+ 'en_FR' => 'Àngale (Faraans)',
'en_GB' => 'Àngale (Ruwaayom Ini)',
'en_GD' => 'Àngale (Garanad)',
'en_GG' => 'Àngale (Gernase)',
'en_GH' => 'Àngale (Gana)',
'en_GI' => 'Àngale (Sibraltaar)',
'en_GM' => 'Àngale (Gàmbi)',
+ 'en_GS' => 'Àngale (Seworsi di Sid ak Duni Sàndwiis di Sid)',
'en_GU' => 'Àngale (Guwam)',
'en_GY' => 'Àngale (Giyaan)',
'en_HK' => 'Àngale (Ooŋ Koŋ)',
+ 'en_HU' => 'Àngale (Ongari)',
'en_ID' => 'Àngale (Indonesi)',
'en_IE' => 'Àngale (Irlànd)',
'en_IL' => 'Àngale (Israyel)',
'en_IM' => 'Àngale (Dunu Maan)',
'en_IN' => 'Àngale (End)',
'en_IO' => 'Àngale (Terituwaaru Brëtaañ ci Oseyaa Enjeŋ)',
+ 'en_IT' => 'Àngale (Itali)',
'en_JE' => 'Àngale (Serse)',
'en_JM' => 'Àngale (Samayig)',
'en_KE' => 'Àngale (Keeña)',
@@ -156,15 +162,19 @@
'en_NF' => 'Àngale (Dunu Norfolk)',
'en_NG' => 'Àngale (Niseriya)',
'en_NL' => 'Àngale (Peyi Baa)',
+ 'en_NO' => 'Àngale (Norwees)',
'en_NR' => 'Àngale (Nawru)',
'en_NU' => 'Àngale (Niw)',
'en_NZ' => 'Àngale (Nuwel Selànd)',
'en_PG' => 'Àngale (Papuwasi Gine Gu Bees)',
'en_PH' => 'Àngale (Filipin)',
'en_PK' => 'Àngale (Pakistaŋ)',
+ 'en_PL' => 'Àngale (Poloñ)',
'en_PN' => 'Àngale (Duni Pitkayirn)',
'en_PR' => 'Àngale (Porto Riko)',
+ 'en_PT' => 'Àngale (Portigaal)',
'en_PW' => 'Àngale (Palaw)',
+ 'en_RO' => 'Àngale (Rumani)',
'en_RW' => 'Àngale (Ruwànda)',
'en_SB' => 'Àngale (Duni Salmoon)',
'en_SC' => 'Àngale (Seysel)',
@@ -173,6 +183,7 @@
'en_SG' => 'Àngale (Singapuur)',
'en_SH' => 'Àngale (Saŋ Eleen)',
'en_SI' => 'Àngale (Esloweni)',
+ 'en_SK' => 'Àngale (Eslowaki)',
'en_SL' => 'Àngale (Siyera Lewon)',
'en_SS' => 'Àngale (Sudaŋ di Sid)',
'en_SX' => 'Àngale (Sin Marten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/xh.php b/src/Symfony/Component/Intl/Resources/data/locales/xh.php
index 545dae2d2f02c..a5fd201835683 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/xh.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/xh.php
@@ -70,29 +70,35 @@
'en_CM' => 'IsiNgesi (ECameroon)',
'en_CX' => 'IsiNgesi (EChristmas Island)',
'en_CY' => 'IsiNgesi (ECyprus)',
+ 'en_CZ' => 'IsiNgesi (ECzechia)',
'en_DE' => 'IsiNgesi (EJamani)',
'en_DK' => 'IsiNgesi (EDenmark)',
'en_DM' => 'IsiNgesi (EDominica)',
'en_ER' => 'IsiNgesi (E-Eritrea)',
+ 'en_ES' => 'IsiNgesi (ESpain)',
'en_FI' => 'IsiNgesi (EFinland)',
'en_FJ' => 'IsiNgesi (EFiji)',
'en_FK' => 'IsiNgesi (EFalkland Islands)',
'en_FM' => 'IsiNgesi (EMicronesia)',
+ 'en_FR' => 'IsiNgesi (EFrance)',
'en_GB' => 'IsiNgesi (E-United Kingdom)',
'en_GD' => 'IsiNgesi (EGrenada)',
'en_GG' => 'IsiNgesi (EGuernsey)',
'en_GH' => 'IsiNgesi (EGhana)',
'en_GI' => 'IsiNgesi (EGibraltar)',
'en_GM' => 'IsiNgesi (EGambia)',
+ 'en_GS' => 'IsiNgesi (ESouth Georgia & South Sandwich Islands)',
'en_GU' => 'IsiNgesi (EGuam)',
'en_GY' => 'IsiNgesi (EGuyana)',
'en_HK' => 'IsiNgesi (EHong Kong SAR China)',
+ 'en_HU' => 'IsiNgesi (EHungary)',
'en_ID' => 'IsiNgesi (E-Indonesia)',
'en_IE' => 'IsiNgesi (E-Ireland)',
'en_IL' => 'IsiNgesi (E-Israel)',
'en_IM' => 'IsiNgesi (E-Isle of Man)',
'en_IN' => 'IsiNgesi (E-Indiya)',
'en_IO' => 'IsiNgesi (EBritish Indian Ocean Territory)',
+ 'en_IT' => 'IsiNgesi (E-Italy)',
'en_JE' => 'IsiNgesi (EJersey)',
'en_JM' => 'IsiNgesi (EJamaica)',
'en_KE' => 'IsiNgesi (EKenya)',
@@ -116,15 +122,19 @@
'en_NF' => 'IsiNgesi (ENorfolk Island)',
'en_NG' => 'IsiNgesi (ENigeria)',
'en_NL' => 'IsiNgesi (ENetherlands)',
+ 'en_NO' => 'IsiNgesi (ENorway)',
'en_NR' => 'IsiNgesi (ENauru)',
'en_NU' => 'IsiNgesi (ENiue)',
'en_NZ' => 'IsiNgesi (ENew Zealand)',
'en_PG' => 'IsiNgesi (EPapua New Guinea)',
'en_PH' => 'IsiNgesi (EPhilippines)',
'en_PK' => 'IsiNgesi (EPakistan)',
+ 'en_PL' => 'IsiNgesi (EPoland)',
'en_PN' => 'IsiNgesi (EPitcairn Islands)',
'en_PR' => 'IsiNgesi (EPuerto Rico)',
+ 'en_PT' => 'IsiNgesi (EPortugal)',
'en_PW' => 'IsiNgesi (EPalau)',
+ 'en_RO' => 'IsiNgesi (ERomania)',
'en_RW' => 'IsiNgesi (ERwanda)',
'en_SB' => 'IsiNgesi (ESolomon Islands)',
'en_SC' => 'IsiNgesi (ESeychelles)',
@@ -133,6 +143,7 @@
'en_SG' => 'IsiNgesi (ESingapore)',
'en_SH' => 'IsiNgesi (ESt. Helena)',
'en_SI' => 'IsiNgesi (ESlovenia)',
+ 'en_SK' => 'IsiNgesi (ESlovakia)',
'en_SL' => 'IsiNgesi (ESierra Leone)',
'en_SS' => 'IsiNgesi (ESouth Sudan)',
'en_SX' => 'IsiNgesi (ESint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/yi.php b/src/Symfony/Component/Intl/Resources/data/locales/yi.php
index 637965efcd024..a4329df990afd 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/yi.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/yi.php
@@ -88,14 +88,17 @@
'en_CH' => 'ענגליש (שווייץ)',
'en_CK' => 'ענגליש (קוק אינזלען)',
'en_CM' => 'ענגליש (קאַמערון)',
+ 'en_CZ' => 'ענגליש (טשעכיי)',
'en_DE' => 'ענגליש (דייטשלאַנד)',
'en_DK' => 'ענגליש (דענמאַרק)',
'en_DM' => 'ענגליש (דאמיניקע)',
'en_ER' => 'ענגליש (עריטרעע)',
+ 'en_ES' => 'ענגליש (שפּאַניע)',
'en_FI' => 'ענגליש (פֿינלאַנד)',
'en_FJ' => 'ענגליש (פֿידזשי)',
'en_FK' => 'ענגליש (פֿאַלקלאַנד אינזלען)',
'en_FM' => 'ענגליש (מיקראנעזיע)',
+ 'en_FR' => 'ענגליש (פֿראַנקרייך)',
'en_GB' => 'ענגליש (פֿאַראייניגטע קעניגרייך)',
'en_GD' => 'ענגליש (גרענאַדאַ)',
'en_GG' => 'ענגליש (גערנזי)',
@@ -104,10 +107,12 @@
'en_GM' => 'ענגליש (גאַמביע)',
'en_GU' => 'ענגליש (גוואַם)',
'en_GY' => 'ענגליש (גויאַנע)',
+ 'en_HU' => 'ענגליש (אונגערן)',
'en_ID' => 'ענגליש (אינדאנעזיע)',
'en_IE' => 'ענגליש (אירלאַנד)',
'en_IL' => 'ענגליש (ישראל)',
'en_IN' => 'ענגליש (אינדיע)',
+ 'en_IT' => 'ענגליש (איטאַליע)',
'en_JE' => 'ענגליש (דזשערזי)',
'en_JM' => 'ענגליש (דזשאַמייקע)',
'en_KE' => 'ענגליש (קעניע)',
@@ -127,12 +132,16 @@
'en_NF' => 'ענגליש (נארפֿאלק אינזל)',
'en_NG' => 'ענגליש (ניגעריע)',
'en_NL' => 'ענגליש (האלאַנד)',
+ 'en_NO' => 'ענגליש (נארוועגיע)',
'en_NZ' => 'ענגליש (ניו זילאַנד)',
'en_PG' => 'ענגליש (פּאַפּואַ נײַ גינע)',
'en_PH' => 'ענגליש (פֿיליפּינען)',
'en_PK' => 'ענגליש (פּאַקיסטאַן)',
+ 'en_PL' => 'ענגליש (פּוילן)',
'en_PN' => 'ענגליש (פּיטקערן אינזלען)',
'en_PR' => 'ענגליש (פּארטא־ריקא)',
+ 'en_PT' => 'ענגליש (פּארטוגאַל)',
+ 'en_RO' => 'ענגליש (רומעניע)',
'en_RW' => 'ענגליש (רוואַנדע)',
'en_SB' => 'ענגליש (סאלאמאן אינזלען)',
'en_SC' => 'ענגליש (סיישעל)',
@@ -141,6 +150,7 @@
'en_SG' => 'ענגליש (סינגאַפּור)',
'en_SH' => 'ענגליש (סט העלענע)',
'en_SI' => 'ענגליש (סלאוועניע)',
+ 'en_SK' => 'ענגליש (סלאוואַקיי)',
'en_SL' => 'ענגליש (סיערע לעאנע)',
'en_SS' => 'ענגליש (דרום־סודאַן)',
'en_SZ' => 'ענגליש (סוואַזילאַנד)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/yo.php b/src/Symfony/Component/Intl/Resources/data/locales/yo.php
index ae6b18624fabb..e06835970cbf1 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/yo.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/yo.php
@@ -121,29 +121,35 @@
'en_CM' => 'Èdè Gẹ̀ẹ́sì (Kamerúúnì)',
'en_CX' => 'Èdè Gẹ̀ẹ́sì (Erékùsù Christmas)',
'en_CY' => 'Èdè Gẹ̀ẹ́sì (Kúrúsì)',
+ 'en_CZ' => 'Èdè Gẹ̀ẹ́sì (Ṣẹ́ẹ́kì)',
'en_DE' => 'Èdè Gẹ̀ẹ́sì (Jámánì)',
'en_DK' => 'Èdè Gẹ̀ẹ́sì (Dẹ́mákì)',
'en_DM' => 'Èdè Gẹ̀ẹ́sì (Dòmíníkà)',
'en_ER' => 'Èdè Gẹ̀ẹ́sì (Eritira)',
+ 'en_ES' => 'Èdè Gẹ̀ẹ́sì (Sípéìnì)',
'en_FI' => 'Èdè Gẹ̀ẹ́sì (Filandi)',
'en_FJ' => 'Èdè Gẹ̀ẹ́sì (Fíjì)',
'en_FK' => 'Èdè Gẹ̀ẹ́sì (Etikun Fakalandi)',
'en_FM' => 'Èdè Gẹ̀ẹ́sì (Makoronesia)',
+ 'en_FR' => 'Èdè Gẹ̀ẹ́sì (Faranse)',
'en_GB' => 'Èdè Gẹ̀ẹ́sì (Gẹ̀ẹ́sì)',
'en_GD' => 'Èdè Gẹ̀ẹ́sì (Genada)',
'en_GG' => 'Èdè Gẹ̀ẹ́sì (Guernsey)',
'en_GH' => 'Èdè Gẹ̀ẹ́sì (Gana)',
'en_GI' => 'Èdè Gẹ̀ẹ́sì (Gibaratara)',
'en_GM' => 'Èdè Gẹ̀ẹ́sì (Gambia)',
+ 'en_GS' => 'Èdè Gẹ̀ẹ́sì (Gúúsù Georgia àti Gúúsù Àwọn Erékùsù Sandwich)',
'en_GU' => 'Èdè Gẹ̀ẹ́sì (Guamu)',
'en_GY' => 'Èdè Gẹ̀ẹ́sì (Guyana)',
'en_HK' => 'Èdè Gẹ̀ẹ́sì (Agbègbè Ìṣàkóso Ìṣúná Hong Kong Tí Ṣánà Ń Darí)',
+ 'en_HU' => 'Èdè Gẹ̀ẹ́sì (Hungari)',
'en_ID' => 'Èdè Gẹ̀ẹ́sì (Indonéṣíà)',
'en_IE' => 'Èdè Gẹ̀ẹ́sì (Ailandi)',
'en_IL' => 'Èdè Gẹ̀ẹ́sì (Iserẹli)',
'en_IM' => 'Èdè Gẹ̀ẹ́sì (Erékùṣù ilẹ̀ Man)',
'en_IN' => 'Èdè Gẹ̀ẹ́sì (Íńdíà)',
'en_IO' => 'Èdè Gẹ̀ẹ́sì (Etíkun Índíánì ti Ìlú Bírítísì)',
+ 'en_IT' => 'Èdè Gẹ̀ẹ́sì (Itáli)',
'en_JE' => 'Èdè Gẹ̀ẹ́sì (Jẹsì)',
'en_JM' => 'Èdè Gẹ̀ẹ́sì (Jamaika)',
'en_KE' => 'Èdè Gẹ̀ẹ́sì (Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'Èdè Gẹ̀ẹ́sì (Erékùsù Nọ́úfókì)',
'en_NG' => 'Èdè Gẹ̀ẹ́sì (Nàìjíríà)',
'en_NL' => 'Èdè Gẹ̀ẹ́sì (Nedalandi)',
+ 'en_NO' => 'Èdè Gẹ̀ẹ́sì (Nọọwii)',
'en_NR' => 'Èdè Gẹ̀ẹ́sì (Nauru)',
'en_NU' => 'Èdè Gẹ̀ẹ́sì (Niue)',
'en_NZ' => 'Èdè Gẹ̀ẹ́sì (Ṣilandi Titun)',
'en_PG' => 'Èdè Gẹ̀ẹ́sì (Paapu ti Giini)',
'en_PH' => 'Èdè Gẹ̀ẹ́sì (Filipini)',
'en_PK' => 'Èdè Gẹ̀ẹ́sì (Pakisitan)',
+ 'en_PL' => 'Èdè Gẹ̀ẹ́sì (Polandi)',
'en_PN' => 'Èdè Gẹ̀ẹ́sì (Pikarini)',
'en_PR' => 'Èdè Gẹ̀ẹ́sì (Pọto Riko)',
+ 'en_PT' => 'Èdè Gẹ̀ẹ́sì (Pọ́túgà)',
'en_PW' => 'Èdè Gẹ̀ẹ́sì (Paalu)',
+ 'en_RO' => 'Èdè Gẹ̀ẹ́sì (Romaniya)',
'en_RW' => 'Èdè Gẹ̀ẹ́sì (Ruwanda)',
'en_SB' => 'Èdè Gẹ̀ẹ́sì (Etikun Solomoni)',
'en_SC' => 'Èdè Gẹ̀ẹ́sì (Ṣeṣẹlẹsi)',
@@ -184,6 +194,7 @@
'en_SG' => 'Èdè Gẹ̀ẹ́sì (Singapo)',
'en_SH' => 'Èdè Gẹ̀ẹ́sì (Hẹlena)',
'en_SI' => 'Èdè Gẹ̀ẹ́sì (Silofania)',
+ 'en_SK' => 'Èdè Gẹ̀ẹ́sì (Silofakia)',
'en_SL' => 'Èdè Gẹ̀ẹ́sì (Siria looni)',
'en_SS' => 'Èdè Gẹ̀ẹ́sì (Gúúsù Sudan)',
'en_SX' => 'Èdè Gẹ̀ẹ́sì (Síntì Mátẹ́ẹ̀nì)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/yo_BJ.php b/src/Symfony/Component/Intl/Resources/data/locales/yo_BJ.php
index e5dee9ccca219..c3133a658606f 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/yo_BJ.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/yo_BJ.php
@@ -53,29 +53,35 @@
'en_CM' => 'Èdè Gɛ̀ɛ́sì (Kamerúúnì)',
'en_CX' => 'Èdè Gɛ̀ɛ́sì (Erékùsù Christmas)',
'en_CY' => 'Èdè Gɛ̀ɛ́sì (Kúrúsì)',
+ 'en_CZ' => 'Èdè Gɛ̀ɛ́sì (Shɛ́ɛ́kì)',
'en_DE' => 'Èdè Gɛ̀ɛ́sì (Jámánì)',
'en_DK' => 'Èdè Gɛ̀ɛ́sì (Dɛ́mákì)',
'en_DM' => 'Èdè Gɛ̀ɛ́sì (Dòmíníkà)',
'en_ER' => 'Èdè Gɛ̀ɛ́sì (Eritira)',
+ 'en_ES' => 'Èdè Gɛ̀ɛ́sì (Sípéìnì)',
'en_FI' => 'Èdè Gɛ̀ɛ́sì (Filandi)',
'en_FJ' => 'Èdè Gɛ̀ɛ́sì (Fíjì)',
'en_FK' => 'Èdè Gɛ̀ɛ́sì (Etikun Fakalandi)',
'en_FM' => 'Èdè Gɛ̀ɛ́sì (Makoronesia)',
+ 'en_FR' => 'Èdè Gɛ̀ɛ́sì (Faranse)',
'en_GB' => 'Èdè Gɛ̀ɛ́sì (Gɛ̀ɛ́sì)',
'en_GD' => 'Èdè Gɛ̀ɛ́sì (Genada)',
'en_GG' => 'Èdè Gɛ̀ɛ́sì (Guernsey)',
'en_GH' => 'Èdè Gɛ̀ɛ́sì (Gana)',
'en_GI' => 'Èdè Gɛ̀ɛ́sì (Gibaratara)',
'en_GM' => 'Èdè Gɛ̀ɛ́sì (Gambia)',
+ 'en_GS' => 'Èdè Gɛ̀ɛ́sì (Gúúsù Georgia àti Gúúsù Àwɔn Erékùsù Sandwich)',
'en_GU' => 'Èdè Gɛ̀ɛ́sì (Guamu)',
'en_GY' => 'Èdè Gɛ̀ɛ́sì (Guyana)',
'en_HK' => 'Èdè Gɛ̀ɛ́sì (Agbègbè Ìshàkóso Ìshúná Hong Kong Tí Shánà Ń Darí)',
+ 'en_HU' => 'Èdè Gɛ̀ɛ́sì (Hungari)',
'en_ID' => 'Èdè Gɛ̀ɛ́sì (Indonéshíà)',
'en_IE' => 'Èdè Gɛ̀ɛ́sì (Ailandi)',
'en_IL' => 'Èdè Gɛ̀ɛ́sì (Iserɛli)',
'en_IM' => 'Èdè Gɛ̀ɛ́sì (Erékùshù ilɛ̀ Man)',
'en_IN' => 'Èdè Gɛ̀ɛ́sì (Íńdíà)',
'en_IO' => 'Èdè Gɛ̀ɛ́sì (Etíkun Índíánì ti Ìlú Bírítísì)',
+ 'en_IT' => 'Èdè Gɛ̀ɛ́sì (Itáli)',
'en_JE' => 'Èdè Gɛ̀ɛ́sì (Jɛsì)',
'en_JM' => 'Èdè Gɛ̀ɛ́sì (Jamaika)',
'en_KE' => 'Èdè Gɛ̀ɛ́sì (Kenya)',
@@ -99,15 +105,19 @@
'en_NF' => 'Èdè Gɛ̀ɛ́sì (Erékùsù Nɔ́úfókì)',
'en_NG' => 'Èdè Gɛ̀ɛ́sì (Nàìjíríà)',
'en_NL' => 'Èdè Gɛ̀ɛ́sì (Nedalandi)',
+ 'en_NO' => 'Èdè Gɛ̀ɛ́sì (Nɔɔwii)',
'en_NR' => 'Èdè Gɛ̀ɛ́sì (Nauru)',
'en_NU' => 'Èdè Gɛ̀ɛ́sì (Niue)',
'en_NZ' => 'Èdè Gɛ̀ɛ́sì (Shilandi Titun)',
'en_PG' => 'Èdè Gɛ̀ɛ́sì (Paapu ti Giini)',
'en_PH' => 'Èdè Gɛ̀ɛ́sì (Filipini)',
'en_PK' => 'Èdè Gɛ̀ɛ́sì (Pakisitan)',
+ 'en_PL' => 'Èdè Gɛ̀ɛ́sì (Polandi)',
'en_PN' => 'Èdè Gɛ̀ɛ́sì (Pikarini)',
'en_PR' => 'Èdè Gɛ̀ɛ́sì (Pɔto Riko)',
+ 'en_PT' => 'Èdè Gɛ̀ɛ́sì (Pɔ́túgà)',
'en_PW' => 'Èdè Gɛ̀ɛ́sì (Paalu)',
+ 'en_RO' => 'Èdè Gɛ̀ɛ́sì (Romaniya)',
'en_RW' => 'Èdè Gɛ̀ɛ́sì (Ruwanda)',
'en_SB' => 'Èdè Gɛ̀ɛ́sì (Etikun Solomoni)',
'en_SC' => 'Èdè Gɛ̀ɛ́sì (Sheshɛlɛsi)',
@@ -116,6 +126,7 @@
'en_SG' => 'Èdè Gɛ̀ɛ́sì (Singapo)',
'en_SH' => 'Èdè Gɛ̀ɛ́sì (Hɛlena)',
'en_SI' => 'Èdè Gɛ̀ɛ́sì (Silofania)',
+ 'en_SK' => 'Èdè Gɛ̀ɛ́sì (Silofakia)',
'en_SL' => 'Èdè Gɛ̀ɛ́sì (Siria looni)',
'en_SS' => 'Èdè Gɛ̀ɛ́sì (Gúúsù Sudan)',
'en_SX' => 'Èdè Gɛ̀ɛ́sì (Síntì Mátɛ́ɛ̀nì)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/zh.php b/src/Symfony/Component/Intl/Resources/data/locales/zh.php
index 3a7b27c3127bc..fecdd7be6bf63 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/zh.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/zh.php
@@ -121,29 +121,35 @@
'en_CM' => '英语(喀麦隆)',
'en_CX' => '英语(圣诞岛)',
'en_CY' => '英语(塞浦路斯)',
+ 'en_CZ' => '英语(捷克)',
'en_DE' => '英语(德国)',
'en_DK' => '英语(丹麦)',
'en_DM' => '英语(多米尼克)',
'en_ER' => '英语(厄立特里亚)',
+ 'en_ES' => '英语(西班牙)',
'en_FI' => '英语(芬兰)',
'en_FJ' => '英语(斐济)',
'en_FK' => '英语(福克兰群岛)',
'en_FM' => '英语(密克罗尼西亚)',
+ 'en_FR' => '英语(法国)',
'en_GB' => '英语(英国)',
'en_GD' => '英语(格林纳达)',
'en_GG' => '英语(根西岛)',
'en_GH' => '英语(加纳)',
'en_GI' => '英语(直布罗陀)',
'en_GM' => '英语(冈比亚)',
+ 'en_GS' => '英语(南乔治亚和南桑威奇群岛)',
'en_GU' => '英语(关岛)',
'en_GY' => '英语(圭亚那)',
'en_HK' => '英语(中国香港特别行政区)',
+ 'en_HU' => '英语(匈牙利)',
'en_ID' => '英语(印度尼西亚)',
'en_IE' => '英语(爱尔兰)',
'en_IL' => '英语(以色列)',
'en_IM' => '英语(马恩岛)',
'en_IN' => '英语(印度)',
'en_IO' => '英语(英属印度洋领地)',
+ 'en_IT' => '英语(意大利)',
'en_JE' => '英语(泽西岛)',
'en_JM' => '英语(牙买加)',
'en_KE' => '英语(肯尼亚)',
@@ -167,15 +173,19 @@
'en_NF' => '英语(诺福克岛)',
'en_NG' => '英语(尼日利亚)',
'en_NL' => '英语(荷兰)',
+ 'en_NO' => '英语(挪威)',
'en_NR' => '英语(瑙鲁)',
'en_NU' => '英语(纽埃)',
'en_NZ' => '英语(新西兰)',
'en_PG' => '英语(巴布亚新几内亚)',
'en_PH' => '英语(菲律宾)',
'en_PK' => '英语(巴基斯坦)',
+ 'en_PL' => '英语(波兰)',
'en_PN' => '英语(皮特凯恩群岛)',
'en_PR' => '英语(波多黎各)',
+ 'en_PT' => '英语(葡萄牙)',
'en_PW' => '英语(帕劳)',
+ 'en_RO' => '英语(罗马尼亚)',
'en_RW' => '英语(卢旺达)',
'en_SB' => '英语(所罗门群岛)',
'en_SC' => '英语(塞舌尔)',
@@ -184,6 +194,7 @@
'en_SG' => '英语(新加坡)',
'en_SH' => '英语(圣赫勒拿)',
'en_SI' => '英语(斯洛文尼亚)',
+ 'en_SK' => '英语(斯洛伐克)',
'en_SL' => '英语(塞拉利昂)',
'en_SS' => '英语(南苏丹)',
'en_SX' => '英语(荷属圣马丁)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/zh_Hant.php b/src/Symfony/Component/Intl/Resources/data/locales/zh_Hant.php
index d58286ccd5369..5cd6867b2c56a 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/zh_Hant.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/zh_Hant.php
@@ -121,29 +121,35 @@
'en_CM' => '英文(喀麥隆)',
'en_CX' => '英文(聖誕島)',
'en_CY' => '英文(賽普勒斯)',
+ 'en_CZ' => '英文(捷克)',
'en_DE' => '英文(德國)',
'en_DK' => '英文(丹麥)',
'en_DM' => '英文(多米尼克)',
'en_ER' => '英文(厄利垂亞)',
+ 'en_ES' => '英文(西班牙)',
'en_FI' => '英文(芬蘭)',
'en_FJ' => '英文(斐濟)',
'en_FK' => '英文(福克蘭群島)',
'en_FM' => '英文(密克羅尼西亞)',
+ 'en_FR' => '英文(法國)',
'en_GB' => '英文(英國)',
'en_GD' => '英文(格瑞那達)',
'en_GG' => '英文(根息)',
'en_GH' => '英文(迦納)',
'en_GI' => '英文(直布羅陀)',
'en_GM' => '英文(甘比亞)',
+ 'en_GS' => '英文(南喬治亞與南三明治群島)',
'en_GU' => '英文(關島)',
'en_GY' => '英文(蓋亞那)',
'en_HK' => '英文(中國香港特別行政區)',
+ 'en_HU' => '英文(匈牙利)',
'en_ID' => '英文(印尼)',
'en_IE' => '英文(愛爾蘭)',
'en_IL' => '英文(以色列)',
'en_IM' => '英文(曼島)',
'en_IN' => '英文(印度)',
'en_IO' => '英文(英屬印度洋領地)',
+ 'en_IT' => '英文(義大利)',
'en_JE' => '英文(澤西島)',
'en_JM' => '英文(牙買加)',
'en_KE' => '英文(肯亞)',
@@ -167,15 +173,19 @@
'en_NF' => '英文(諾福克島)',
'en_NG' => '英文(奈及利亞)',
'en_NL' => '英文(荷蘭)',
+ 'en_NO' => '英文(挪威)',
'en_NR' => '英文(諾魯)',
'en_NU' => '英文(紐埃島)',
'en_NZ' => '英文(紐西蘭)',
'en_PG' => '英文(巴布亞紐幾內亞)',
'en_PH' => '英文(菲律賓)',
'en_PK' => '英文(巴基斯坦)',
+ 'en_PL' => '英文(波蘭)',
'en_PN' => '英文(皮特肯群島)',
'en_PR' => '英文(波多黎各)',
+ 'en_PT' => '英文(葡萄牙)',
'en_PW' => '英文(帛琉)',
+ 'en_RO' => '英文(羅馬尼亞)',
'en_RW' => '英文(盧安達)',
'en_SB' => '英文(索羅門群島)',
'en_SC' => '英文(塞席爾)',
@@ -184,6 +194,7 @@
'en_SG' => '英文(新加坡)',
'en_SH' => '英文(聖赫勒拿島)',
'en_SI' => '英文(斯洛維尼亞)',
+ 'en_SK' => '英文(斯洛伐克)',
'en_SL' => '英文(獅子山)',
'en_SS' => '英文(南蘇丹)',
'en_SX' => '英文(荷屬聖馬丁)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/zh_Hant_HK.php b/src/Symfony/Component/Intl/Resources/data/locales/zh_Hant_HK.php
index e3e519fc059c7..b9ad2bc68fecb 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/zh_Hant_HK.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/zh_Hant_HK.php
@@ -52,8 +52,10 @@
'en_GD' => '英文(格林納達)',
'en_GH' => '英文(加納)',
'en_GM' => '英文(岡比亞)',
+ 'en_GS' => '英文(南佐治亞島與南桑威奇群島)',
'en_GY' => '英文(圭亞那)',
'en_IM' => '英文(馬恩島)',
+ 'en_IT' => '英文(意大利)',
'en_KE' => '英文(肯尼亞)',
'en_KN' => '英文(聖基茨和尼維斯)',
'en_LC' => '英文(聖盧西亞)',
diff --git a/src/Symfony/Component/Intl/Resources/data/locales/zu.php b/src/Symfony/Component/Intl/Resources/data/locales/zu.php
index 5f7a1748c2df8..38f51b7c133ce 100644
--- a/src/Symfony/Component/Intl/Resources/data/locales/zu.php
+++ b/src/Symfony/Component/Intl/Resources/data/locales/zu.php
@@ -121,29 +121,35 @@
'en_CM' => 'i-English (i-Cameroon)',
'en_CX' => 'i-English (i-Christmas Island)',
'en_CY' => 'i-English (i-Cyprus)',
+ 'en_CZ' => 'i-English (i-Czechia)',
'en_DE' => 'i-English (i-Germany)',
'en_DK' => 'i-English (i-Denmark)',
'en_DM' => 'i-English (i-Dominica)',
'en_ER' => 'i-English (i-Eritrea)',
+ 'en_ES' => 'i-English (i-Spain)',
'en_FI' => 'i-English (i-Finland)',
'en_FJ' => 'i-English (i-Fiji)',
'en_FK' => 'i-English (i-Falkland Islands)',
'en_FM' => 'i-English (i-Micronesia)',
+ 'en_FR' => 'i-English (i-France)',
'en_GB' => 'i-English (i-United Kingdom)',
'en_GD' => 'i-English (i-Grenada)',
'en_GG' => 'i-English (i-Guernsey)',
'en_GH' => 'i-English (i-Ghana)',
'en_GI' => 'i-English (i-Gibraltar)',
'en_GM' => 'i-English (i-Gambia)',
+ 'en_GS' => 'i-English (i-South Georgia ne-South Sandwich Islands)',
'en_GU' => 'i-English (i-Guam)',
'en_GY' => 'i-English (i-Guyana)',
'en_HK' => 'i-English (i-Hong Kong SAR China)',
+ 'en_HU' => 'i-English (i-Hungary)',
'en_ID' => 'i-English (i-Indonesia)',
'en_IE' => 'i-English (i-Ireland)',
'en_IL' => 'i-English (kwa-Israel)',
'en_IM' => 'i-English (i-Isle of Man)',
'en_IN' => 'i-English (i-India)',
'en_IO' => 'i-English (i-British Indian Ocean Territory)',
+ 'en_IT' => 'i-English (i-Italy)',
'en_JE' => 'i-English (i-Jersey)',
'en_JM' => 'i-English (i-Jamaica)',
'en_KE' => 'i-English (i-Kenya)',
@@ -167,15 +173,19 @@
'en_NF' => 'i-English (i-Norfolk Island)',
'en_NG' => 'i-English (i-Nigeria)',
'en_NL' => 'i-English (i-Netherlands)',
+ 'en_NO' => 'i-English (i-Norway)',
'en_NR' => 'i-English (i-Nauru)',
'en_NU' => 'i-English (i-Niue)',
'en_NZ' => 'i-English (i-New Zealand)',
'en_PG' => 'i-English (i-Papua New Guinea)',
'en_PH' => 'i-English (i-Philippines)',
'en_PK' => 'i-English (i-Pakistan)',
+ 'en_PL' => 'i-English (i-Poland)',
'en_PN' => 'i-English (i-Pitcairn Islands)',
'en_PR' => 'i-English (i-Puerto Rico)',
+ 'en_PT' => 'i-English (i-Portugal)',
'en_PW' => 'i-English (i-Palau)',
+ 'en_RO' => 'i-English (i-Romania)',
'en_RW' => 'i-English (i-Rwanda)',
'en_SB' => 'i-English (i-Solomon Islands)',
'en_SC' => 'i-English (i-Seychelles)',
@@ -184,6 +194,7 @@
'en_SG' => 'i-English (i-Singapore)',
'en_SH' => 'i-English (i-St. Helena)',
'en_SI' => 'i-English (i-Slovenia)',
+ 'en_SK' => 'i-English (i-Slovakia)',
'en_SL' => 'i-English (i-Sierra Leone)',
'en_SS' => 'i-English (i-South Sudan)',
'en_SX' => 'i-English (i-Sint Maarten)',
diff --git a/src/Symfony/Component/Intl/Resources/data/regions/meta.php b/src/Symfony/Component/Intl/Resources/data/regions/meta.php
index 8548a28f123a2..e0a99ccb7f5a8 100644
--- a/src/Symfony/Component/Intl/Resources/data/regions/meta.php
+++ b/src/Symfony/Component/Intl/Resources/data/regions/meta.php
@@ -1,14 +1,5 @@
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
return [
'Regions' => [
'AD',
@@ -764,7 +755,6 @@
'ZWE' => 'ZW',
],
'Alpha2ToNumeric' => [
- 'AA' => '958',
'AD' => '020',
'AE' => '784',
'AF' => '004',
@@ -952,18 +942,6 @@
'PW' => '585',
'PY' => '600',
'QA' => '634',
- 'QM' => '959',
- 'QN' => '960',
- 'QP' => '962',
- 'QQ' => '963',
- 'QR' => '964',
- 'QS' => '965',
- 'QT' => '966',
- 'QV' => '968',
- 'QW' => '969',
- 'QX' => '970',
- 'QY' => '971',
- 'QZ' => '972',
'RE' => '638',
'RO' => '642',
'RS' => '688',
@@ -1021,29 +999,6 @@
'VU' => '548',
'WF' => '876',
'WS' => '882',
- 'XC' => '975',
- 'XD' => '976',
- 'XE' => '977',
- 'XF' => '978',
- 'XG' => '979',
- 'XH' => '980',
- 'XI' => '981',
- 'XJ' => '982',
- 'XL' => '984',
- 'XM' => '985',
- 'XN' => '986',
- 'XO' => '987',
- 'XP' => '988',
- 'XQ' => '989',
- 'XR' => '990',
- 'XS' => '991',
- 'XT' => '992',
- 'XU' => '993',
- 'XV' => '994',
- 'XW' => '995',
- 'XX' => '996',
- 'XY' => '997',
- 'XZ' => '998',
'YE' => '887',
'YT' => '175',
'ZA' => '710',
@@ -1051,7 +1006,6 @@
'ZW' => '716',
],
'NumericToAlpha2' => [
- '_958' => 'AA',
'_020' => 'AD',
'_784' => 'AE',
'_004' => 'AF',
@@ -1239,18 +1193,6 @@
'_585' => 'PW',
'_600' => 'PY',
'_634' => 'QA',
- '_959' => 'QM',
- '_960' => 'QN',
- '_962' => 'QP',
- '_963' => 'QQ',
- '_964' => 'QR',
- '_965' => 'QS',
- '_966' => 'QT',
- '_968' => 'QV',
- '_969' => 'QW',
- '_970' => 'QX',
- '_971' => 'QY',
- '_972' => 'QZ',
'_638' => 'RE',
'_642' => 'RO',
'_688' => 'RS',
@@ -1308,29 +1250,6 @@
'_548' => 'VU',
'_876' => 'WF',
'_882' => 'WS',
- '_975' => 'XC',
- '_976' => 'XD',
- '_977' => 'XE',
- '_978' => 'XF',
- '_979' => 'XG',
- '_980' => 'XH',
- '_981' => 'XI',
- '_982' => 'XJ',
- '_984' => 'XL',
- '_985' => 'XM',
- '_986' => 'XN',
- '_987' => 'XO',
- '_988' => 'XP',
- '_989' => 'XQ',
- '_990' => 'XR',
- '_991' => 'XS',
- '_992' => 'XT',
- '_993' => 'XU',
- '_994' => 'XV',
- '_995' => 'XW',
- '_996' => 'XX',
- '_997' => 'XY',
- '_998' => 'XZ',
'_887' => 'YE',
'_175' => 'YT',
'_710' => 'ZA',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/bs.php b/src/Symfony/Component/Intl/Resources/data/timezones/bs.php
index 98230260811e7..e1b2d09fa0a74 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/bs.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/bs.php
@@ -157,7 +157,7 @@
'America/Nassau' => 'Sjevernoameričko istočno vrijeme (Nassau)',
'America/New_York' => 'Sjevernoameričko istočno vrijeme (New York)',
'America/Nome' => 'Aljaskansko vrijeme (Nome)',
- 'America/Noronha' => 'Vrijeme na ostrvu Fernando di Noronja (Noronha)',
+ 'America/Noronha' => 'Vrijeme na ostrvu Fernando di Noronja (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'Sjevernoameričko centralno vrijeme (Beulah, Sjeverna Dakota)',
'America/North_Dakota/Center' => 'Sjevernoameričko centralno vrijeme (Center, Sjeverna Dakota)',
'America/North_Dakota/New_Salem' => 'Sjevernoameričko centralno vrijeme (New Salem, Sjeverna Dakota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/cs.php b/src/Symfony/Component/Intl/Resources/data/timezones/cs.php
index 42e7cdacb1b13..7968b4e96125c 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/cs.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/cs.php
@@ -199,7 +199,7 @@
'America/Yakutat' => 'aljašský čas (Yakutat)',
'Antarctica/Casey' => 'západoaustralský čas (Casey)',
'Antarctica/Davis' => 'čas Davisovy stanice',
- 'Antarctica/DumontDUrville' => 'čas stanice Dumonta d’Urvilla (Dumont d’Urville)',
+ 'Antarctica/DumontDUrville' => 'čas stanice Dumonta d’Urvilla (Dumont-d’Urville)',
'Antarctica/Macquarie' => 'východoaustralský čas (Macquarie)',
'Antarctica/Mawson' => 'čas Mawsonovy stanice',
'Antarctica/McMurdo' => 'novozélandský čas (McMurdo)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/dz.php b/src/Symfony/Component/Intl/Resources/data/timezones/dz.php
index b5b341308b64d..58ff2f6405d79 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/dz.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/dz.php
@@ -157,7 +157,7 @@
'America/Nassau' => 'བྱང་ཨ་མི་རི་ཀ་ཤར་ཕྱོགས་ཆུ་ཚོད། (Nassau་)',
'America/New_York' => 'བྱང་ཨ་མི་རི་ཀ་ཤར་ཕྱོགས་ཆུ་ཚོད། (New York་)',
'America/Nome' => 'ཨ་ལསི་ཀ་ཆུ་ཚོད། (Nome་)',
- 'America/Noronha' => 'ཕར་ནེན་ཌོ་ ཌི་ ནོ་རཱོན་ཧ་ཆུ་ཚོད། (Noronha་)',
+ 'America/Noronha' => 'ཕར་ནེན་ཌོ་ ཌི་ ནོ་རཱོན་ཧ་ཆུ་ཚོད། (Fernando de Noronha་)',
'America/North_Dakota/Beulah' => 'བྱང་ཨ་མི་རི་ཀ་དབུས་ཕྱོགས་ཆུ་ཚོད། (Beulah, North Dakota་)',
'America/North_Dakota/Center' => 'བྱང་ཨ་མི་རི་ཀ་དབུས་ཕྱོགས་ཆུ་ཚོད། (Center, North Dakota་)',
'America/North_Dakota/New_Salem' => 'བྱང་ཨ་མི་རི་ཀ་དབུས་ཕྱོགས་ཆུ་ཚོད། (New Salem, North Dakota་)',
@@ -199,7 +199,7 @@
'America/Yakutat' => 'ཨ་ལསི་ཀ་ཆུ་ཚོད། (ཡ་ཀུ་ཏཏ་)',
'Antarctica/Casey' => 'ནུབ་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཆུ་ཚོད། (Casey་)',
'Antarctica/Davis' => 'འཛམ་གླིང་ལྷོ་མཐའི་ཁྱགས་གླིང་ཆུ་ཚོད།། (ཌེ་ཝིས།་)',
- 'Antarctica/DumontDUrville' => 'འཛམ་གླིང་ལྷོ་མཐའི་ཁྱགས་གླིང་ཆུ་ཚོད།། (Dumont d’Urville་)',
+ 'Antarctica/DumontDUrville' => 'འཛམ་གླིང་ལྷོ་མཐའི་ཁྱགས་གླིང་ཆུ་ཚོད།། (Dumont-d’Urville་)',
'Antarctica/Macquarie' => 'ཤར་ཕྱོགས་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཆུ་ཚོད། (Macquarie་)',
'Antarctica/Mawson' => 'འཛམ་གླིང་ལྷོ་མཐའི་ཁྱགས་གླིང་ཆུ་ཚོད།། (མའུ་སཱོན་)',
'Antarctica/McMurdo' => 'ནིའུ་ཛི་ལེནཌ་ཆུ་ཚོད། (McMurdo་)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/en.php b/src/Symfony/Component/Intl/Resources/data/timezones/en.php
index 06b0de9923d50..ac0c1da56977f 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/en.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/en.php
@@ -197,10 +197,10 @@
'America/Whitehorse' => 'Yukon Time (Whitehorse)',
'America/Winnipeg' => 'Central Time (Winnipeg)',
'America/Yakutat' => 'Alaska Time (Yakutat)',
- 'Antarctica/Casey' => 'Western Australia Time (Casey)',
+ 'Antarctica/Casey' => 'Australian Western Time (Casey)',
'Antarctica/Davis' => 'Davis Time',
- 'Antarctica/DumontDUrville' => 'Dumont-d’Urville Time',
- 'Antarctica/Macquarie' => 'Eastern Australia Time (Macquarie)',
+ 'Antarctica/DumontDUrville' => 'Dumont d’Urville Time',
+ 'Antarctica/Macquarie' => 'Australian Eastern Time (Macquarie Island)',
'Antarctica/Mawson' => 'Mawson Time',
'Antarctica/McMurdo' => 'New Zealand Time (McMurdo)',
'Antarctica/Palmer' => 'Chile Time (Palmer)',
@@ -224,13 +224,13 @@
'Asia/Barnaul' => 'Russia Time (Barnaul)',
'Asia/Beirut' => 'Eastern European Time (Beirut)',
'Asia/Bishkek' => 'Kyrgyzstan Time (Bishkek)',
- 'Asia/Brunei' => 'Brunei Darussalam Time',
+ 'Asia/Brunei' => 'Brunei Time',
'Asia/Calcutta' => 'India Standard Time (Kolkata)',
'Asia/Chita' => 'Yakutsk Time (Chita)',
'Asia/Colombo' => 'India Standard Time (Colombo)',
'Asia/Damascus' => 'Eastern European Time (Damascus)',
'Asia/Dhaka' => 'Bangladesh Time (Dhaka)',
- 'Asia/Dili' => 'East Timor Time (Dili)',
+ 'Asia/Dili' => 'Timor-Leste Time (Dili)',
'Asia/Dubai' => 'Gulf Standard Time (Dubai)',
'Asia/Dushanbe' => 'Tajikistan Time (Dushanbe)',
'Asia/Famagusta' => 'Eastern European Time (Famagusta)',
@@ -243,7 +243,7 @@
'Asia/Jayapura' => 'Eastern Indonesia Time (Jayapura)',
'Asia/Jerusalem' => 'Israel Time (Jerusalem)',
'Asia/Kabul' => 'Afghanistan Time (Kabul)',
- 'Asia/Kamchatka' => 'Petropavlovsk-Kamchatski Time (Kamchatka)',
+ 'Asia/Kamchatka' => 'Kamchatka Time',
'Asia/Karachi' => 'Pakistan Time (Karachi)',
'Asia/Katmandu' => 'Nepal Time (Kathmandu)',
'Asia/Khandyga' => 'Yakutsk Time (Khandyga)',
@@ -276,7 +276,7 @@
'Asia/Shanghai' => 'China Time (Shanghai)',
'Asia/Singapore' => 'Singapore Standard Time',
'Asia/Srednekolymsk' => 'Magadan Time (Srednekolymsk)',
- 'Asia/Taipei' => 'Taipei Time',
+ 'Asia/Taipei' => 'Taiwan Time (Taipei)',
'Asia/Tashkent' => 'Uzbekistan Time (Tashkent)',
'Asia/Tbilisi' => 'Georgia Time (Tbilisi)',
'Asia/Tehran' => 'Iran Time (Tehran)',
@@ -301,17 +301,17 @@
'Atlantic/South_Georgia' => 'South Georgia Time',
'Atlantic/St_Helena' => 'Greenwich Mean Time (St. Helena)',
'Atlantic/Stanley' => 'Falkland Islands Time (Stanley)',
- 'Australia/Adelaide' => 'Central Australia Time (Adelaide)',
- 'Australia/Brisbane' => 'Eastern Australia Time (Brisbane)',
- 'Australia/Broken_Hill' => 'Central Australia Time (Broken Hill)',
- 'Australia/Darwin' => 'Central Australia Time (Darwin)',
+ 'Australia/Adelaide' => 'Australian Central Time (Adelaide)',
+ 'Australia/Brisbane' => 'Australian Eastern Time (Brisbane)',
+ 'Australia/Broken_Hill' => 'Australian Central Time (Broken Hill)',
+ 'Australia/Darwin' => 'Australian Central Time (Darwin)',
'Australia/Eucla' => 'Australian Central Western Time (Eucla)',
- 'Australia/Hobart' => 'Eastern Australia Time (Hobart)',
- 'Australia/Lindeman' => 'Eastern Australia Time (Lindeman)',
- 'Australia/Lord_Howe' => 'Lord Howe Time',
- 'Australia/Melbourne' => 'Eastern Australia Time (Melbourne)',
- 'Australia/Perth' => 'Western Australia Time (Perth)',
- 'Australia/Sydney' => 'Eastern Australia Time (Sydney)',
+ 'Australia/Hobart' => 'Australian Eastern Time (Hobart)',
+ 'Australia/Lindeman' => 'Australian Eastern Time (Lindeman)',
+ 'Australia/Lord_Howe' => 'Lord Howe Time (Lord Howe Island)',
+ 'Australia/Melbourne' => 'Australian Eastern Time (Melbourne)',
+ 'Australia/Perth' => 'Australian Western Time (Perth)',
+ 'Australia/Sydney' => 'Australian Eastern Time (Sydney)',
'Etc/GMT' => 'Greenwich Mean Time',
'Etc/UTC' => 'Coordinated Universal Time',
'Europe/Amsterdam' => 'Central European Time (Amsterdam)',
@@ -383,7 +383,7 @@
'Indian/Mauritius' => 'Mauritius Time',
'Indian/Mayotte' => 'East Africa Time (Mayotte)',
'Indian/Reunion' => 'Réunion Time',
- 'Pacific/Apia' => 'Apia Time',
+ 'Pacific/Apia' => 'Samoa Time (Apia)',
'Pacific/Auckland' => 'New Zealand Time (Auckland)',
'Pacific/Bougainville' => 'Papua New Guinea Time (Bougainville)',
'Pacific/Chatham' => 'Chatham Time',
@@ -403,15 +403,15 @@
'Pacific/Kwajalein' => 'Marshall Islands Time (Kwajalein)',
'Pacific/Majuro' => 'Marshall Islands Time (Majuro)',
'Pacific/Marquesas' => 'Marquesas Time',
- 'Pacific/Midway' => 'Samoa Time (Midway)',
+ 'Pacific/Midway' => 'American Samoa Time (Midway)',
'Pacific/Nauru' => 'Nauru Time',
'Pacific/Niue' => 'Niue Time',
'Pacific/Norfolk' => 'Norfolk Island Time',
'Pacific/Noumea' => 'New Caledonia Time (Noumea)',
- 'Pacific/Pago_Pago' => 'Samoa Time (Pago Pago)',
+ 'Pacific/Pago_Pago' => 'American Samoa Time (Pago Pago)',
'Pacific/Palau' => 'Palau Time',
'Pacific/Pitcairn' => 'Pitcairn Time',
- 'Pacific/Ponape' => 'Ponape Time (Pohnpei)',
+ 'Pacific/Ponape' => 'Pohnpei Time',
'Pacific/Port_Moresby' => 'Papua New Guinea Time (Port Moresby)',
'Pacific/Rarotonga' => 'Cook Islands Time (Rarotonga)',
'Pacific/Saipan' => 'Chamorro Standard Time (Saipan)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/en_AU.php b/src/Symfony/Component/Intl/Resources/data/timezones/en_AU.php
deleted file mode 100644
index 0e7100bbc9736..0000000000000
--- a/src/Symfony/Component/Intl/Resources/data/timezones/en_AU.php
+++ /dev/null
@@ -1,37 +0,0 @@
- [
- 'Africa/Addis_Ababa' => 'Eastern Africa Time (Addis Ababa)',
- 'Africa/Asmera' => 'Eastern Africa Time (Asmara)',
- 'Africa/Dar_es_Salaam' => 'Eastern Africa Time (Dar es Salaam)',
- 'Africa/Djibouti' => 'Eastern Africa Time (Djibouti)',
- 'Africa/Kampala' => 'Eastern Africa Time (Kampala)',
- 'Africa/Mogadishu' => 'Eastern Africa Time (Mogadishu)',
- 'Africa/Nairobi' => 'Eastern Africa Time (Nairobi)',
- 'Antarctica/Casey' => 'Australian Western Time (Casey)',
- 'Antarctica/Macquarie' => 'Australian Eastern Time (Macquarie)',
- 'Asia/Aden' => 'Arabia Time (Aden)',
- 'Asia/Baghdad' => 'Arabia Time (Baghdad)',
- 'Asia/Bahrain' => 'Arabia Time (Bahrain)',
- 'Asia/Kuwait' => 'Arabia Time (Kuwait)',
- 'Asia/Pyongyang' => 'Korea Time (Pyongyang)',
- 'Asia/Qatar' => 'Arabia Time (Qatar)',
- 'Asia/Riyadh' => 'Arabia Time (Riyadh)',
- 'Asia/Seoul' => 'Korea Time (Seoul)',
- 'Australia/Adelaide' => 'Australian Central Time (Adelaide)',
- 'Australia/Brisbane' => 'Australian Eastern Time (Brisbane)',
- 'Australia/Broken_Hill' => 'Australian Central Time (Broken Hill)',
- 'Australia/Darwin' => 'Australian Central Time (Darwin)',
- 'Australia/Hobart' => 'Australian Eastern Time (Hobart)',
- 'Australia/Lindeman' => 'Australian Eastern Time (Lindeman)',
- 'Australia/Melbourne' => 'Australian Eastern Time (Melbourne)',
- 'Australia/Perth' => 'Australian Western Time (Perth)',
- 'Australia/Sydney' => 'Australian Eastern Time (Sydney)',
- 'Indian/Antananarivo' => 'Eastern Africa Time (Antananarivo)',
- 'Indian/Comoro' => 'Eastern Africa Time (Comoro)',
- 'Indian/Mayotte' => 'Eastern Africa Time (Mayotte)',
- 'Pacific/Rarotonga' => 'Cook Island Time (Rarotonga)',
- ],
- 'Meta' => [],
-];
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/eo.php b/src/Symfony/Component/Intl/Resources/data/timezones/eo.php
index dddbcb1144b92..785dfb2c5b82a 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/eo.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/eo.php
@@ -148,7 +148,7 @@
'America/Nassau' => 'tempo de Bahamoj (Nassau)',
'America/New_York' => 'tempo de Usono (New York)',
'America/Nome' => 'tempo de Usono (Nome)',
- 'America/Noronha' => 'tempo de Brazilo (Noronha)',
+ 'America/Noronha' => 'tempo de Brazilo (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'tempo de Usono (Beulah, North Dakota)',
'America/North_Dakota/Center' => 'tempo de Usono (Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'tempo de Usono (New Salem, North Dakota)',
@@ -189,7 +189,7 @@
'America/Yakutat' => 'tempo de Usono (Yakutat)',
'Antarctica/Casey' => 'tempo de Antarkto (Casey)',
'Antarctica/Davis' => 'tempo de Antarkto (Davis)',
- 'Antarctica/DumontDUrville' => 'tempo de Antarkto (Dumont d’Urville)',
+ 'Antarctica/DumontDUrville' => 'tempo de Antarkto (Dumont-d’Urville)',
'Antarctica/Macquarie' => 'tempo de Aŭstralio (Macquarie)',
'Antarctica/Mawson' => 'tempo de Antarkto (Mawson)',
'Antarctica/McMurdo' => 'tempo de Antarkto (McMurdo)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/ie.php b/src/Symfony/Component/Intl/Resources/data/timezones/ie.php
index a9d5fc9c63b56..997deca0a3e54 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/ie.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/ie.php
@@ -29,7 +29,7 @@
'America/Puerto_Rico' => 'témpor de Porto-Rico (Puerto Rico)',
'Antarctica/Casey' => 'témpor de Antarctica (Casey)',
'Antarctica/Davis' => 'témpor de Antarctica (Davis)',
- 'Antarctica/DumontDUrville' => 'témpor de Antarctica (Dumont d’Urville)',
+ 'Antarctica/DumontDUrville' => 'témpor de Antarctica (Dumont-d’Urville)',
'Antarctica/Mawson' => 'témpor de Antarctica (Mawson)',
'Antarctica/McMurdo' => 'témpor de Antarctica (McMurdo)',
'Antarctica/Palmer' => 'témpor de Antarctica (Palmer)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/ii.php b/src/Symfony/Component/Intl/Resources/data/timezones/ii.php
index 9ee3121c8b470..f5775723ad907 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/ii.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/ii.php
@@ -58,7 +58,7 @@
'America/Monterrey' => 'ꃀꑭꇬꄮꈉ(Monterrey)',
'America/New_York' => 'ꂰꇩꄮꈉ(New York)',
'America/Nome' => 'ꂰꇩꄮꈉ(Nome)',
- 'America/Noronha' => 'ꀠꑭꄮꈉ(Noronha)',
+ 'America/Noronha' => 'ꀠꑭꄮꈉ(Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'ꂰꇩꄮꈉ(Beulah, North Dakota)',
'America/North_Dakota/Center' => 'ꂰꇩꄮꈉ(Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'ꂰꇩꄮꈉ(New Salem, North Dakota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/ln.php b/src/Symfony/Component/Intl/Resources/data/timezones/ln.php
index 704e2057242f9..4c551a2c37741 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/ln.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/ln.php
@@ -151,7 +151,7 @@
'America/Nassau' => 'Ngonga ya Bahamasɛ (Nassau)',
'America/New_York' => 'Ngonga ya Ameriki (New York)',
'America/Nome' => 'Ngonga ya Ameriki (Nome)',
- 'America/Noronha' => 'Ngonga ya Brezílɛ (Noronha)',
+ 'America/Noronha' => 'Ngonga ya Brezílɛ (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'Ngonga ya Ameriki (Beulah, North Dakota)',
'America/North_Dakota/Center' => 'Ngonga ya Ameriki (Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'Ngonga ya Ameriki (New Salem, North Dakota)',
@@ -192,7 +192,7 @@
'America/Yakutat' => 'Ngonga ya Ameriki (Yakutat)',
'Antarctica/Casey' => 'Ngonga ya Antarctique (Casey)',
'Antarctica/Davis' => 'Ngonga ya Antarctique (Davis)',
- 'Antarctica/DumontDUrville' => 'Ngonga ya Antarctique (Dumont d’Urville)',
+ 'Antarctica/DumontDUrville' => 'Ngonga ya Antarctique (Dumont-d’Urville)',
'Antarctica/Macquarie' => 'Ngonga ya Ositáli (Macquarie)',
'Antarctica/Mawson' => 'Ngonga ya Antarctique (Mawson)',
'Antarctica/McMurdo' => 'Ngonga ya Antarctique (McMurdo)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/mt.php b/src/Symfony/Component/Intl/Resources/data/timezones/mt.php
index ed4c78b1cbc72..e5723e6a3457f 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/mt.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/mt.php
@@ -157,7 +157,7 @@
'America/Nassau' => 'Ħin ta’ il-Bahamas (Nassau)',
'America/New_York' => 'Ħin ta’ l-Istati Uniti (New York)',
'America/Nome' => 'Ħin ta’ l-Istati Uniti (Nome)',
- 'America/Noronha' => 'Ħin ta’ Il-Brażil (Noronha)',
+ 'America/Noronha' => 'Ħin ta’ Il-Brażil (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'Ħin ta’ l-Istati Uniti (Beulah, North Dakota)',
'America/North_Dakota/Center' => 'Ħin ta’ l-Istati Uniti (Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'Ħin ta’ l-Istati Uniti (New Salem, North Dakota)',
@@ -199,7 +199,7 @@
'America/Yakutat' => 'Ħin ta’ l-Istati Uniti (Yakutat)',
'Antarctica/Casey' => 'Ħin ta’ l-Antartika (Casey)',
'Antarctica/Davis' => 'Ħin ta’ l-Antartika (Davis)',
- 'Antarctica/DumontDUrville' => 'Ħin ta’ l-Antartika (Dumont d’Urville)',
+ 'Antarctica/DumontDUrville' => 'Ħin ta’ l-Antartika (Dumont-d’Urville)',
'Antarctica/Macquarie' => 'Ħin ta’ l-Awstralja (Macquarie)',
'Antarctica/Mawson' => 'Ħin ta’ l-Antartika (Mawson)',
'Antarctica/McMurdo' => 'Ħin ta’ l-Antartika (McMurdo)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/os.php b/src/Symfony/Component/Intl/Resources/data/timezones/os.php
index 8efcb75b8efa8..b386b8ae54f57 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/os.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/os.php
@@ -55,7 +55,7 @@
'America/Metlakatla' => 'АИШ рӕстӕг (Metlakatla)',
'America/New_York' => 'АИШ рӕстӕг (New York)',
'America/Nome' => 'АИШ рӕстӕг (Nome)',
- 'America/Noronha' => 'Бразили рӕстӕг (Noronha)',
+ 'America/Noronha' => 'Бразили рӕстӕг (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'АИШ рӕстӕг (Beulah, North Dakota)',
'America/North_Dakota/Center' => 'АИШ рӕстӕг (Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'АИШ рӕстӕг (New Salem, North Dakota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/rm.php b/src/Symfony/Component/Intl/Resources/data/timezones/rm.php
index 014b1a5ed9253..02e4c9e321282 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/rm.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/rm.php
@@ -199,7 +199,7 @@
'America/Yakutat' => 'temp: Stadis Unids da l’America (Yakutat)',
'Antarctica/Casey' => 'temp: Antarctica (Casey)',
'Antarctica/Davis' => 'temp: Antarctica (Davis)',
- 'Antarctica/DumontDUrville' => 'temp: Antarctica (Dumont d’Urville)',
+ 'Antarctica/DumontDUrville' => 'temp: Antarctica (Dumont-d’Urville)',
'Antarctica/Macquarie' => 'temp: Australia (Macquarie)',
'Antarctica/Mawson' => 'temp: Antarctica (Mawson)',
'Antarctica/McMurdo' => 'temp: Antarctica (Mac Murdo)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/sa.php b/src/Symfony/Component/Intl/Resources/data/timezones/sa.php
index edc6ffd16ce51..e0c6d8e9d2b13 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/sa.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/sa.php
@@ -98,7 +98,7 @@
'America/Nassau' => 'उत्तर अमेरिका: पौर्व समयः (Nassau)',
'America/New_York' => 'उत्तर अमेरिका: पौर्व समयः (New York)',
'America/Nome' => 'संयुक्त राज्य: समय: (Nome)',
- 'America/Noronha' => 'ब्राजील समय: (Noronha)',
+ 'America/Noronha' => 'ब्राजील समय: (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'उत्तर अमेरिका: मध्य समयः (Beulah, North Dakota)',
'America/North_Dakota/Center' => 'उत्तर अमेरिका: मध्य समयः (Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'उत्तर अमेरिका: मध्य समयः (New Salem, North Dakota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/se.php b/src/Symfony/Component/Intl/Resources/data/timezones/se.php
index 4befb16a6bcf6..e3d01049ea25d 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/se.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/se.php
@@ -156,7 +156,7 @@
'America/Nassau' => 'Nassau (Bahamas áigi)',
'America/New_York' => 'New York (Amerihká ovttastuvvan stáhtat áigi)',
'America/Nome' => 'Nome (Amerihká ovttastuvvan stáhtat áigi)',
- 'America/Noronha' => 'Noronha (Brasil áigi)',
+ 'America/Noronha' => 'Fernando de Noronha (Brasil áigi)',
'America/North_Dakota/Beulah' => 'Beulah, North Dakota (Amerihká ovttastuvvan stáhtat áigi)',
'America/North_Dakota/Center' => 'Center, North Dakota (Amerihká ovttastuvvan stáhtat áigi)',
'America/North_Dakota/New_Salem' => 'New Salem, North Dakota (Amerihká ovttastuvvan stáhtat áigi)',
@@ -198,7 +198,7 @@
'America/Yakutat' => 'Yakutat (Amerihká ovttastuvvan stáhtat áigi)',
'Antarctica/Casey' => 'Casey (Antárktis áigi)',
'Antarctica/Davis' => 'Davis (Antárktis áigi)',
- 'Antarctica/DumontDUrville' => 'Dumont d’Urville (Antárktis áigi)',
+ 'Antarctica/DumontDUrville' => 'Dumont-d’Urville (Antárktis áigi)',
'Antarctica/Macquarie' => 'Macquarie (Austrália áigi)',
'Antarctica/Mawson' => 'Mawson (Antárktis áigi)',
'Antarctica/McMurdo' => 'McMurdo (Antárktis áigi)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/sk.php b/src/Symfony/Component/Intl/Resources/data/timezones/sk.php
index 425959956c8bc..283d5df96951f 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/sk.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/sk.php
@@ -199,7 +199,7 @@
'America/Yakutat' => 'aljašský čas (Yakutat)',
'Antarctica/Casey' => 'západoaustrálsky čas (Casey)',
'Antarctica/Davis' => 'čas Davisovej stanice',
- 'Antarctica/DumontDUrville' => 'čas stanice Dumonta d’Urvillea (Dumont d’Urville)',
+ 'Antarctica/DumontDUrville' => 'čas stanice Dumonta d’Urvillea (Dumont-d’Urville)',
'Antarctica/Macquarie' => 'východoaustrálsky čas (Macquarie)',
'Antarctica/Mawson' => 'čas Mawsonovej stanice',
'Antarctica/McMurdo' => 'novozélandský čas (McMurdo)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/sl.php b/src/Symfony/Component/Intl/Resources/data/timezones/sl.php
index cf34c78aaa283..573adbfa6eb43 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/sl.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/sl.php
@@ -157,7 +157,7 @@
'America/Nassau' => 'Vzhodni čas (Nassau)',
'America/New_York' => 'Vzhodni čas (New York)',
'America/Nome' => 'Aljaški čas (Nome)',
- 'America/Noronha' => 'Fernando de Noronški čas (Noronha)',
+ 'America/Noronha' => 'Fernando de Noronški čas (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'Centralni čas (Beulah, Severna Dakota)',
'America/North_Dakota/Center' => 'Centralni čas (Center, Severna Dakota)',
'America/North_Dakota/New_Salem' => 'Centralni čas (New Salem, Severna Dakota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/so.php b/src/Symfony/Component/Intl/Resources/data/timezones/so.php
index 7808aa8f5dc50..87fe73b3c1e86 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/so.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/so.php
@@ -157,7 +157,7 @@
'America/Nassau' => 'Waqtiga Bariga ee Waqooyiga Ameerika (Nasaaw)',
'America/New_York' => 'Waqtiga Bariga ee Waqooyiga Ameerika (Niyuu Yook)',
'America/Nome' => 'Waqtiga Alaska (Noom)',
- 'America/Noronha' => 'Waqtiga Farnaando de Noronha',
+ 'America/Noronha' => 'Waqtiga Farnaando de Noronha (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'Waqtiga Bartamaha Waqooyiga Ameerika (Biyuulah, Waqooyiga Dakoota)',
'America/North_Dakota/Center' => 'Waqtiga Bartamaha Waqooyiga Ameerika (Bartamaha, Waqooyiga Dakoota)',
'America/North_Dakota/New_Salem' => 'Waqtiga Bartamaha Waqooyiga Ameerika (Niyuu Saalem, Waqooyiga Dakoota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/su.php b/src/Symfony/Component/Intl/Resources/data/timezones/su.php
index 23346ff65080c..18e47ad78398b 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/su.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/su.php
@@ -99,7 +99,7 @@
'America/Nassau' => 'Waktu Wétan (Nassau)',
'America/New_York' => 'Waktu Wétan (New York)',
'America/Nome' => 'Amérika Sarikat (Nome)',
- 'America/Noronha' => 'Brasil (Noronha)',
+ 'America/Noronha' => 'Brasil (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'Waktu Tengah (Beulah, North Dakota)',
'America/North_Dakota/Center' => 'Waktu Tengah (Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'Waktu Tengah (New Salem, North Dakota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/tk.php b/src/Symfony/Component/Intl/Resources/data/timezones/tk.php
index 45aaab71a7313..8996a15e9666b 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/tk.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/tk.php
@@ -157,7 +157,7 @@
'America/Nassau' => 'Demirgazyk Amerika gündogar wagty (Nassau)',
'America/New_York' => 'Demirgazyk Amerika gündogar wagty (Nýu-Ýork)',
'America/Nome' => 'Alýaska wagty (Nom)',
- 'America/Noronha' => 'Fernandu-di-Noronýa wagty (Noronha)',
+ 'America/Noronha' => 'Fernandu-di-Noronýa wagty (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'Merkezi Amerika (Boýla, Demirgazyk Dakota)',
'America/North_Dakota/Center' => 'Merkezi Amerika (Sentr, Demirgazyk Dakota)',
'America/North_Dakota/New_Salem' => 'Merkezi Amerika (Nýu-Salem, Demirgazyk Dakota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/to.php b/src/Symfony/Component/Intl/Resources/data/timezones/to.php
index 85eb55b63dd2c..6668f0a3cc1b1 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/to.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/to.php
@@ -157,7 +157,7 @@
'America/Nassau' => 'houa fakaʻamelika-tokelau hahake (Nassau)',
'America/New_York' => 'houa fakaʻamelika-tokelau hahake (Niu ʻIoke)',
'America/Nome' => 'houa fakaʻalasika (Nome)',
- 'America/Noronha' => 'houa fakafēnanito-te-nolōnia (Noronha)',
+ 'America/Noronha' => 'houa fakafēnanito-te-nolōnia (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'houa fakaʻamelika-tokelau loto (Beulah, North Dakota)',
'America/North_Dakota/Center' => 'houa fakaʻamelika-tokelau loto (Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'houa fakaʻamelika-tokelau loto (New Salem, North Dakota)',
@@ -199,7 +199,7 @@
'America/Yakutat' => 'houa fakaʻalasika (Yakutat)',
'Antarctica/Casey' => 'houa fakaʻaositelēlia-hihifo (Casey)',
'Antarctica/Davis' => 'houa fakatavisi (Davis)',
- 'Antarctica/DumontDUrville' => 'houa fakatūmoni-tūvile (Dumont d’Urville)',
+ 'Antarctica/DumontDUrville' => 'houa fakatūmoni-tūvile (Dumont-d’Urville)',
'Antarctica/Macquarie' => 'houa fakaʻaositelēlia-hahake (Macquarie)',
'Antarctica/Mawson' => 'houa fakamausoni (Mawson)',
'Antarctica/McMurdo' => 'houa fakanuʻusila (McMurdo)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/ug.php b/src/Symfony/Component/Intl/Resources/data/timezones/ug.php
index dcd0ef31b8a96..385cc4218f809 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/ug.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/ug.php
@@ -157,7 +157,7 @@
'America/Nassau' => 'شەرقىي قىسىم ۋاقتى (Nassau)',
'America/New_York' => 'شەرقىي قىسىم ۋاقتى (New York)',
'America/Nome' => 'ئالياسكا ۋاقتى (Nome)',
- 'America/Noronha' => 'فېرناندو-نورونخا ۋاقتى (Noronha)',
+ 'America/Noronha' => 'فېرناندو-نورونخا ۋاقتى (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'ئوتتۇرا قىسىم ۋاقتى (Beulah, North Dakota)',
'America/North_Dakota/Center' => 'ئوتتۇرا قىسىم ۋاقتى (Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'ئوتتۇرا قىسىم ۋاقتى (New Salem, North Dakota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/yi.php b/src/Symfony/Component/Intl/Resources/data/timezones/yi.php
index 2fc72448df90f..fba6712d58eaa 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/yi.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/yi.php
@@ -148,7 +148,7 @@
'America/Nassau' => 'באַהאַמאַס (Nassau)',
'America/New_York' => 'פֿאַראייניגטע שטאַטן (New York)',
'America/Nome' => 'פֿאַראייניגטע שטאַטן (Nome)',
- 'America/Noronha' => 'בראַזיל (Noronha)',
+ 'America/Noronha' => 'בראַזיל (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'פֿאַראייניגטע שטאַטן (Beulah, North Dakota)',
'America/North_Dakota/Center' => 'פֿאַראייניגטע שטאַטן (Center, North Dakota)',
'America/North_Dakota/New_Salem' => 'פֿאַראייניגטע שטאַטן (New Salem, North Dakota)',
@@ -184,7 +184,7 @@
'America/Yakutat' => 'פֿאַראייניגטע שטאַטן (Yakutat)',
'Antarctica/Casey' => 'אַנטאַרקטיקע (Casey)',
'Antarctica/Davis' => 'אַנטאַרקטיקע (Davis)',
- 'Antarctica/DumontDUrville' => 'אַנטאַרקטיקע (Dumont d’Urville)',
+ 'Antarctica/DumontDUrville' => 'אַנטאַרקטיקע (Dumont-d’Urville)',
'Antarctica/Macquarie' => 'אויסטראַליע (Macquarie)',
'Antarctica/Mawson' => 'אַנטאַרקטיקע (Mawson)',
'Antarctica/McMurdo' => 'אַנטאַרקטיקע (McMurdo)',
diff --git a/src/Symfony/Component/Intl/Resources/data/timezones/yo.php b/src/Symfony/Component/Intl/Resources/data/timezones/yo.php
index 2af1dedd0c379..84ff6f3d609b0 100644
--- a/src/Symfony/Component/Intl/Resources/data/timezones/yo.php
+++ b/src/Symfony/Component/Intl/Resources/data/timezones/yo.php
@@ -157,7 +157,7 @@
'America/Nassau' => 'Àkókò ìhà ìlà oòrùn (ìlú Nasaò)',
'America/New_York' => 'Àkókò ìhà ìlà oòrùn (ìlú New York)',
'America/Nome' => 'Àkókò Alásíkà (ìlú Nomi)',
- 'America/Noronha' => 'Aago Fenando de Norona (Noronha)',
+ 'America/Noronha' => 'Aago Fenando de Norona (Fernando de Noronha)',
'America/North_Dakota/Beulah' => 'àkókò àárín gbùngbùn (ìlú Beulà ní North Dakota)',
'America/North_Dakota/Center' => 'àkókò àárín gbùngbùn (ìlú Senta North Dakota)',
'America/North_Dakota/New_Salem' => 'àkókò àárín gbùngbùn (ìlú New Salem ni North Dakota)',
diff --git a/src/Symfony/Component/Intl/Resources/data/version.txt b/src/Symfony/Component/Intl/Resources/data/version.txt
index 9747bc6ec3066..1ed6f92dc764c 100644
--- a/src/Symfony/Component/Intl/Resources/data/version.txt
+++ b/src/Symfony/Component/Intl/Resources/data/version.txt
@@ -1 +1 @@
-76.1
+77.1
diff --git a/src/Symfony/Component/Intl/Tests/CountriesTest.php b/src/Symfony/Component/Intl/Tests/CountriesTest.php
index 7b921036b2a00..01f0f76f2e40a 100644
--- a/src/Symfony/Component/Intl/Tests/CountriesTest.php
+++ b/src/Symfony/Component/Intl/Tests/CountriesTest.php
@@ -527,7 +527,6 @@ class CountriesTest extends ResourceBundleTestCase
];
private const ALPHA2_TO_NUMERIC = [
- 'AA' => '958',
'AD' => '020',
'AE' => '784',
'AF' => '004',
@@ -715,18 +714,6 @@ class CountriesTest extends ResourceBundleTestCase
'PW' => '585',
'PY' => '600',
'QA' => '634',
- 'QM' => '959',
- 'QN' => '960',
- 'QP' => '962',
- 'QQ' => '963',
- 'QR' => '964',
- 'QS' => '965',
- 'QT' => '966',
- 'QV' => '968',
- 'QW' => '969',
- 'QX' => '970',
- 'QY' => '971',
- 'QZ' => '972',
'RE' => '638',
'RO' => '642',
'RS' => '688',
@@ -784,29 +771,6 @@ class CountriesTest extends ResourceBundleTestCase
'VU' => '548',
'WF' => '876',
'WS' => '882',
- 'XC' => '975',
- 'XD' => '976',
- 'XE' => '977',
- 'XF' => '978',
- 'XG' => '979',
- 'XH' => '980',
- 'XI' => '981',
- 'XJ' => '982',
- 'XL' => '984',
- 'XM' => '985',
- 'XN' => '986',
- 'XO' => '987',
- 'XP' => '988',
- 'XQ' => '989',
- 'XR' => '990',
- 'XS' => '991',
- 'XT' => '992',
- 'XU' => '993',
- 'XV' => '994',
- 'XW' => '995',
- 'XX' => '996',
- 'XY' => '997',
- 'XZ' => '998',
'YE' => '887',
'YT' => '175',
'ZA' => '710',
@@ -814,6 +778,19 @@ class CountriesTest extends ResourceBundleTestCase
'ZW' => '716',
];
+ public function testAllGettersGenerateTheSameDataSetCount()
+ {
+ $alpha2Count = count(Countries::getCountryCodes());
+ $alpha3Count = count(Countries::getAlpha3Codes());
+ $numericCodesCount = count(Countries::getNumericCodes());
+ $namesCount = count(Countries::getNames());
+
+ // we base all on Name count since it is the first to be generated
+ $this->assertEquals($namesCount, $alpha2Count, 'Alpha 2 count does not match');
+ $this->assertEquals($namesCount, $alpha3Count, 'Alpha 3 count does not match');
+ $this->assertEquals($namesCount, $numericCodesCount, 'Numeric codes count does not match');
+ }
+
public function testGetCountryCodes()
{
$this->assertSame(self::COUNTRIES, Countries::getCountryCodes());
@@ -992,7 +969,7 @@ public function testGetNumericCode()
public function testNumericCodeExists()
{
$this->assertTrue(Countries::numericCodeExists('250'));
- $this->assertTrue(Countries::numericCodeExists('982'));
+ $this->assertTrue(Countries::numericCodeExists('008'));
$this->assertTrue(Countries::numericCodeExists('716'));
$this->assertTrue(Countries::numericCodeExists('036'));
$this->assertFalse(Countries::numericCodeExists('667'));
diff --git a/src/Symfony/Component/Intl/Tests/LanguagesTest.php b/src/Symfony/Component/Intl/Tests/LanguagesTest.php
index 5df780260ec92..889ac571950f8 100644
--- a/src/Symfony/Component/Intl/Tests/LanguagesTest.php
+++ b/src/Symfony/Component/Intl/Tests/LanguagesTest.php
@@ -35,7 +35,6 @@ class LanguagesTest extends ResourceBundleTestCase
'afh',
'agq',
'ain',
- 'ajp',
'ak',
'akk',
'akz',
@@ -150,7 +149,6 @@ class LanguagesTest extends ResourceBundleTestCase
'csw',
'cu',
'cv',
- 'cwd',
'cy',
'da',
'dak',
@@ -240,7 +238,6 @@ class LanguagesTest extends ResourceBundleTestCase
'hak',
'haw',
'hax',
- 'hdn',
'he',
'hi',
'hif',
@@ -266,7 +263,6 @@ class LanguagesTest extends ResourceBundleTestCase
'ig',
'ii',
'ik',
- 'ike',
'ikt',
'ilo',
'inh',
@@ -451,7 +447,6 @@ class LanguagesTest extends ResourceBundleTestCase
'oj',
'ojb',
'ojc',
- 'ojg',
'ojs',
'ojw',
'oka',
@@ -679,7 +674,6 @@ class LanguagesTest extends ResourceBundleTestCase
'afr',
'agq',
'ain',
- 'ajp',
'aka',
'akk',
'akz',
@@ -797,7 +791,6 @@ class LanguagesTest extends ResourceBundleTestCase
'crs',
'csb',
'csw',
- 'cwd',
'cym',
'dak',
'dan',
@@ -888,7 +881,6 @@ class LanguagesTest extends ResourceBundleTestCase
'haw',
'hax',
'hbs',
- 'hdn',
'heb',
'her',
'hif',
@@ -910,7 +902,6 @@ class LanguagesTest extends ResourceBundleTestCase
'ibo',
'ido',
'iii',
- 'ike',
'ikt',
'iku',
'ile',
@@ -1098,7 +1089,6 @@ class LanguagesTest extends ResourceBundleTestCase
'oci',
'ojb',
'ojc',
- 'ojg',
'oji',
'ojs',
'ojw',
diff --git a/src/Symfony/Component/Intl/Tests/ResourceBundleTestCase.php b/src/Symfony/Component/Intl/Tests/ResourceBundleTestCase.php
index 9fab9c2c221f5..9e2301a8cf966 100644
--- a/src/Symfony/Component/Intl/Tests/ResourceBundleTestCase.php
+++ b/src/Symfony/Component/Intl/Tests/ResourceBundleTestCase.php
@@ -141,30 +141,36 @@ abstract class ResourceBundleTestCase extends TestCase
'en_CM',
'en_CX',
'en_CY',
+ 'en_CZ',
'en_DE',
'en_DG',
'en_DK',
'en_DM',
'en_ER',
+ 'en_ES',
'en_FI',
'en_FJ',
'en_FK',
'en_FM',
+ 'en_FR',
'en_GB',
'en_GD',
'en_GG',
'en_GH',
'en_GI',
'en_GM',
+ 'en_GS',
'en_GU',
'en_GY',
'en_HK',
+ 'en_HU',
'en_ID',
'en_IE',
'en_IL',
'en_IM',
'en_IN',
'en_IO',
+ 'en_IT',
'en_JE',
'en_JM',
'en_KE',
@@ -189,16 +195,20 @@ abstract class ResourceBundleTestCase extends TestCase
'en_NG',
'en_NH',
'en_NL',
+ 'en_NO',
'en_NR',
'en_NU',
'en_NZ',
'en_PG',
'en_PH',
'en_PK',
+ 'en_PL',
'en_PN',
'en_PR',
+ 'en_PT',
'en_PW',
'en_RH',
+ 'en_RO',
'en_RW',
'en_SB',
'en_SC',
@@ -207,6 +217,7 @@ abstract class ResourceBundleTestCase extends TestCase
'en_SG',
'en_SH',
'en_SI',
+ 'en_SK',
'en_SL',
'en_SS',
'en_SX',
diff --git a/src/Symfony/Component/JsonPath/JsonCrawler.php b/src/Symfony/Component/JsonPath/JsonCrawler.php
index 75c61e14f79d7..35ad6a93a080c 100644
--- a/src/Symfony/Component/JsonPath/JsonCrawler.php
+++ b/src/Symfony/Component/JsonPath/JsonCrawler.php
@@ -80,19 +80,7 @@ private function evaluate(JsonPath $query): array
throw new InvalidJsonStringInputException($e->getMessage(), $e);
}
- $current = [$data];
-
- foreach ($tokens as $token) {
- $next = [];
- foreach ($current as $value) {
- $result = $this->evaluateToken($token, $value);
- $next = array_merge($next, $result);
- }
-
- $current = $next;
- }
-
- return $current;
+ return $this->evaluateTokensOnDecodedData($tokens, $data);
} catch (InvalidArgumentException $e) {
throw $e;
} catch (\Throwable $e) {
@@ -100,6 +88,23 @@ private function evaluate(JsonPath $query): array
}
}
+ private function evaluateTokensOnDecodedData(array $tokens, array $data): array
+ {
+ $current = [$data];
+
+ foreach ($tokens as $token) {
+ $next = [];
+ foreach ($current as $value) {
+ $result = $this->evaluateToken($token, $value);
+ $next = array_merge($next, $result);
+ }
+
+ $current = $next;
+ }
+
+ return $current;
+ }
+
private function evaluateToken(JsonPathToken $token, mixed $value): array
{
return match ($token->type) {
@@ -222,15 +227,64 @@ private function evaluateBracket(string $expr, mixed $value): array
throw new JsonCrawlerException($expr, 'Invalid filter expression');
}
- // remove outrer filter parentheses
+ // remove outer filter parentheses
$innerExpr = substr(substr($filterExpr, 1), 0, -1);
return $this->evaluateFilter($innerExpr, $value);
}
- // quoted strings for object keys
+ // comma-separated values, e.g. `['key1', 'key2', 123]` or `[0, 1, 'key']`
+ if (str_contains($expr, ',')) {
+ $parts = $this->parseCommaSeparatedValues($expr);
+
+ $result = [];
+ $keysIndices = array_keys($value);
+ $isList = array_is_list($value);
+
+ foreach ($parts as $part) {
+ $part = trim($part);
+
+ if (preg_match('/^([\'"])(.*)\1$/', $part, $matches)) {
+ $key = JsonPathUtils::unescapeString($matches[2], $matches[1]);
+
+ if ($isList) {
+ foreach ($value as $item) {
+ if (\is_array($item) && \array_key_exists($key, $item)) {
+ $result[] = $item;
+ break;
+ }
+ }
+
+ continue; // no results here
+ }
+
+ if (\array_key_exists($key, $value)) {
+ $result[] = $value[$key];
+ }
+ } elseif (preg_match('/^-?\d+$/', $part)) {
+ // numeric index
+ $index = (int) $part;
+ if ($index < 0) {
+ $index = \count($value) + $index;
+ }
+
+ if ($isList && \array_key_exists($index, $value)) {
+ $result[] = $value[$index];
+ continue;
+ }
+
+ // numeric index on a hashmap
+ if (isset($keysIndices[$index]) && isset($value[$keysIndices[$index]])) {
+ $result[] = $value[$keysIndices[$index]];
+ }
+ }
+ }
+
+ return $result;
+ }
+
if (preg_match('/^([\'"])(.*)\1$/', $expr, $matches)) {
- $key = stripslashes($matches[2]);
+ $key = JsonPathUtils::unescapeString($matches[2], $matches[1]);
return \array_key_exists($key, $value) ? [$value[$key]] : [];
}
@@ -246,10 +300,6 @@ private function evaluateFilter(string $expr, mixed $value): array
$result = [];
foreach ($value as $item) {
- if (!\is_array($item)) {
- continue;
- }
-
if ($this->evaluateFilterExpression($expr, $item)) {
$result[] = $item;
}
@@ -258,7 +308,7 @@ private function evaluateFilter(string $expr, mixed $value): array
return $result;
}
- private function evaluateFilterExpression(string $expr, array $context): bool
+ private function evaluateFilterExpression(string $expr, mixed $context): bool
{
$expr = trim($expr);
@@ -294,10 +344,12 @@ private function evaluateFilterExpression(string $expr, array $context): bool
}
}
- if (str_starts_with($expr, '@.')) {
- $path = substr($expr, 2);
+ if ('@' === $expr) {
+ return true;
+ }
- return \array_key_exists($path, $context);
+ if (str_starts_with($expr, '@.')) {
+ return (bool) ($this->evaluateTokensOnDecodedData(JsonPathTokenizer::tokenize(new JsonPath('$'.substr($expr, 1))), $context)[0] ?? false);
}
// function calls
@@ -315,12 +367,16 @@ private function evaluateFilterExpression(string $expr, array $context): bool
return false;
}
- private function evaluateScalar(string $expr, array $context): mixed
+ private function evaluateScalar(string $expr, mixed $context): mixed
{
if (is_numeric($expr)) {
return str_contains($expr, '.') ? (float) $expr : (int) $expr;
}
+ if ('@' === $expr) {
+ return $context;
+ }
+
if ('true' === $expr) {
return true;
}
@@ -335,14 +391,16 @@ private function evaluateScalar(string $expr, array $context): mixed
// string literals
if (preg_match('/^([\'"])(.*)\1$/', $expr, $matches)) {
- return $matches[2];
+ return JsonPathUtils::unescapeString($matches[2], $matches[1]);
}
// current node references
- if (str_starts_with($expr, '@.')) {
- $path = substr($expr, 2);
+ if (str_starts_with($expr, '@')) {
+ if (!\is_array($context)) {
+ return null;
+ }
- return $context[$path] ?? null;
+ return $this->evaluateTokensOnDecodedData(JsonPathTokenizer::tokenize(new JsonPath('$'.substr($expr, 1))), $context)[0] ?? null;
}
// function calls
@@ -415,4 +473,44 @@ private function compare(mixed $left, mixed $right, string $operator): bool
default => false,
};
}
+
+ private function parseCommaSeparatedValues(string $expr): array
+ {
+ $parts = [];
+ $current = '';
+ $inQuotes = false;
+ $quoteChar = null;
+
+ for ($i = 0; $i < \strlen($expr); ++$i) {
+ $char = $expr[$i];
+
+ if ('\\' === $char && $i + 1 < \strlen($expr)) {
+ $current .= $char.$expr[++$i];
+ continue;
+ }
+
+ if ('"' === $char || "'" === $char) {
+ if (!$inQuotes) {
+ $inQuotes = true;
+ $quoteChar = $char;
+ } elseif ($char === $quoteChar) {
+ $inQuotes = false;
+ $quoteChar = null;
+ }
+ } elseif (!$inQuotes && ',' === $char) {
+ $parts[] = trim($current);
+ $current = '';
+
+ continue;
+ }
+
+ $current .= $char;
+ }
+
+ if ('' !== $current) {
+ $parts[] = trim($current);
+ }
+
+ return $parts;
+ }
}
diff --git a/src/Symfony/Component/JsonPath/JsonCrawlerInterface.php b/src/Symfony/Component/JsonPath/JsonCrawlerInterface.php
index 3e8a222f0ba8e..4859c2bde076b 100644
--- a/src/Symfony/Component/JsonPath/JsonCrawlerInterface.php
+++ b/src/Symfony/Component/JsonPath/JsonCrawlerInterface.php
@@ -25,7 +25,7 @@ interface JsonCrawlerInterface
* @return list
*
* @throws InvalidArgumentException When the JSON string provided to the crawler cannot be decoded
- * @throws JsonCrawlerException When a syntax error occurs in the provided JSON path
+ * @throws JsonCrawlerException When a syntax error occurs in the provided JSON path
*/
public function find(string|JsonPath $query): array;
}
diff --git a/src/Symfony/Component/JsonPath/JsonPath.php b/src/Symfony/Component/JsonPath/JsonPath.php
index b44f35795793c..e36fc9ffd2ef1 100644
--- a/src/Symfony/Component/JsonPath/JsonPath.php
+++ b/src/Symfony/Component/JsonPath/JsonPath.php
@@ -30,7 +30,9 @@ public function __construct(
public function key(string $key): static
{
- return new self($this->path.(str_ends_with($this->path, '..') ? '' : '.').$key);
+ $escaped = $this->escapeKey($key);
+
+ return new self($this->path.'["'.$escaped.'"]');
}
public function index(int $index): static
@@ -43,11 +45,21 @@ public function deepScan(): static
return new self($this->path.'..');
}
- public function anyIndex(): static
+ public function all(): static
{
return new self($this->path.'[*]');
}
+ public function first(): static
+ {
+ return new self($this->path.'[0]');
+ }
+
+ public function last(): static
+ {
+ return new self($this->path.'[-1]');
+ }
+
public function slice(int $start, ?int $end = null, ?int $step = null): static
{
$slice = $start;
@@ -70,4 +82,25 @@ public function __toString(): string
{
return $this->path;
}
+
+ private function escapeKey(string $key): string
+ {
+ $key = strtr($key, [
+ '\\' => '\\\\',
+ '"' => '\\"',
+ "\n" => '\\n',
+ "\r" => '\\r',
+ "\t" => '\\t',
+ "\b" => '\\b',
+ "\f" => '\\f',
+ ]);
+
+ for ($i = 0; $i <= 31; ++$i) {
+ if ($i < 8 || $i > 13) {
+ $key = str_replace(\chr($i), \sprintf('\\u%04x', $i), $key);
+ }
+ }
+
+ return $key;
+ }
}
diff --git a/src/Symfony/Component/JsonPath/JsonPathUtils.php b/src/Symfony/Component/JsonPath/JsonPathUtils.php
index 9d1e66a39f530..6f971d20115b2 100644
--- a/src/Symfony/Component/JsonPath/JsonPathUtils.php
+++ b/src/Symfony/Component/JsonPath/JsonPathUtils.php
@@ -11,10 +11,10 @@
namespace Symfony\Component\JsonPath;
-use Symfony\Component\JsonStreamer\Read\Splitter;
use Symfony\Component\JsonPath\Exception\InvalidArgumentException;
use Symfony\Component\JsonPath\Tokenizer\JsonPathToken;
use Symfony\Component\JsonPath\Tokenizer\TokenType;
+use Symfony\Component\JsonStreamer\Read\Splitter;
/**
* Get the smallest deserializable JSON string from a list of tokens that doesn't need any processing.
@@ -85,4 +85,78 @@ public static function findSmallestDeserializableStringAndPath(array $tokens, mi
'tokens' => $remainingTokens,
];
}
+
+ public static function unescapeString(string $str, string $quoteChar): string
+ {
+ if ('"' === $quoteChar) {
+ // try JSON decoding first for unicode sequences
+ $jsonStr = '"'.$str.'"';
+ $decoded = json_decode($jsonStr, true);
+
+ if (null !== $decoded) {
+ return $decoded;
+ }
+ }
+
+ $result = '';
+ $length = \strlen($str);
+
+ for ($i = 0; $i < $length; ++$i) {
+ if ('\\' === $str[$i] && $i + 1 < $length) {
+ $result .= match ($str[$i + 1]) {
+ '"' => '"',
+ "'" => "'",
+ '\\' => '\\',
+ '/' => '/',
+ 'b' => "\b",
+ 'f' => "\f",
+ 'n' => "\n",
+ 'r' => "\r",
+ 't' => "\t",
+ 'u' => self::unescapeUnicodeSequence($str, $length, $i),
+ default => $str[$i].$str[$i + 1], // keep the backslash
+ };
+
+ ++$i;
+ } else {
+ $result .= $str[$i];
+ }
+ }
+
+ return $result;
+ }
+
+ private static function unescapeUnicodeSequence(string $str, int $length, int &$i): string
+ {
+ if ($i + 5 >= $length) {
+ // not enough characters for Unicode escape, treat as literal
+ return $str[$i];
+ }
+
+ $hex = substr($str, $i + 2, 4);
+ if (!ctype_xdigit($hex)) {
+ // invalid hex, treat as literal
+ return $str[$i];
+ }
+
+ $codepoint = hexdec($hex);
+ // looks like a valid Unicode codepoint, string length is sufficient and it starts with \u
+ if (0xD800 <= $codepoint && $codepoint <= 0xDBFF && $i + 11 < $length && '\\' === $str[$i + 6] && 'u' === $str[$i + 7]) {
+ $lowHex = substr($str, $i + 8, 4);
+ if (ctype_xdigit($lowHex)) {
+ $lowSurrogate = hexdec($lowHex);
+ if (0xDC00 <= $lowSurrogate && $lowSurrogate <= 0xDFFF) {
+ $codepoint = 0x10000 + (($codepoint & 0x3FF) << 10) + ($lowSurrogate & 0x3FF);
+ $i += 10; // skip surrogate pair
+
+ return mb_chr($codepoint, 'UTF-8');
+ }
+ }
+ }
+
+ // single Unicode character or invalid surrogate, skip the sequence
+ $i += 4;
+
+ return mb_chr($codepoint, 'UTF-8');
+ }
}
diff --git a/src/Symfony/Component/JsonPath/Test/JsonPathAssertionsTrait.php b/src/Symfony/Component/JsonPath/Test/JsonPathAssertionsTrait.php
new file mode 100644
index 0000000000000..42d35339a5760
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Test/JsonPathAssertionsTrait.php
@@ -0,0 +1,80 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Test;
+
+use PHPUnit\Framework\Assert;
+use PHPUnit\Framework\ExpectationFailedException;
+use Symfony\Component\JsonPath\JsonPath;
+
+/**
+ * @author Alexandre Daubois
+ *
+ * @experimental
+ */
+trait JsonPathAssertionsTrait
+{
+ /**
+ * @throws ExpectationFailedException
+ */
+ final public static function assertJsonPathEquals(mixed $expectedValue, JsonPath|string $jsonPath, string $json, string $message = ''): void
+ {
+ Assert::assertThat($expectedValue, new JsonPathEquals($jsonPath, $json), $message);
+ }
+
+ /**
+ * @throws ExpectationFailedException
+ */
+ final public static function assertJsonPathNotEquals(mixed $expectedValue, JsonPath|string $jsonPath, string $json, string $message = ''): void
+ {
+ Assert::assertThat($expectedValue, new JsonPathNotEquals($jsonPath, $json), $message);
+ }
+
+ /**
+ * @throws ExpectationFailedException
+ */
+ final public static function assertJsonPathCount(int $expectedCount, JsonPath|string $jsonPath, string $json, string $message = ''): void
+ {
+ Assert::assertThat($expectedCount, new JsonPathCount($jsonPath, $json), $message);
+ }
+
+ /**
+ * @throws ExpectationFailedException
+ */
+ final public static function assertJsonPathSame(mixed $expectedValue, JsonPath|string $jsonPath, string $json, string $message = ''): void
+ {
+ Assert::assertThat($expectedValue, new JsonPathSame($jsonPath, $json), $message);
+ }
+
+ /**
+ * @throws ExpectationFailedException
+ */
+ final public static function assertJsonPathNotSame(mixed $expectedValue, JsonPath|string $jsonPath, string $json, string $message = ''): void
+ {
+ Assert::assertThat($expectedValue, new JsonPathNotSame($jsonPath, $json), $message);
+ }
+
+ /**
+ * @throws ExpectationFailedException
+ */
+ final public static function assertJsonPathContains(mixed $expectedValue, JsonPath|string $jsonPath, string $json, bool $strict = true, string $message = ''): void
+ {
+ Assert::assertThat($expectedValue, new JsonPathContains($jsonPath, $json, $strict), $message);
+ }
+
+ /**
+ * @throws ExpectationFailedException
+ */
+ final public static function assertJsonPathNotContains(mixed $expectedValue, JsonPath|string $jsonPath, string $json, bool $strict = true, string $message = ''): void
+ {
+ Assert::assertThat($expectedValue, new JsonPathNotContains($jsonPath, $json, $strict), $message);
+ }
+}
diff --git a/src/Symfony/Component/JsonPath/Test/JsonPathContains.php b/src/Symfony/Component/JsonPath/Test/JsonPathContains.php
new file mode 100644
index 0000000000000..e043b90a40637
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Test/JsonPathContains.php
@@ -0,0 +1,43 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Test;
+
+use PHPUnit\Framework\Constraint\Constraint;
+use Symfony\Component\JsonPath\JsonCrawler;
+use Symfony\Component\JsonPath\JsonPath;
+
+/**
+ * @author Alexandre Daubois
+ *
+ * @experimental
+ */
+class JsonPathContains extends Constraint
+{
+ public function __construct(
+ private JsonPath|string $jsonPath,
+ private string $json,
+ private bool $strict = true,
+ ) {
+ }
+
+ public function toString(): string
+ {
+ return \sprintf('is found in elements at JSON path "%s"', $this->jsonPath);
+ }
+
+ protected function matches(mixed $other): bool
+ {
+ $result = (new JsonCrawler($this->json))->find($this->jsonPath);
+
+ return \in_array($other, $result, $this->strict);
+ }
+}
diff --git a/src/Symfony/Component/JsonPath/Test/JsonPathCount.php b/src/Symfony/Component/JsonPath/Test/JsonPathCount.php
new file mode 100644
index 0000000000000..8c973a8309345
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Test/JsonPathCount.php
@@ -0,0 +1,40 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Test;
+
+use PHPUnit\Framework\Constraint\Constraint;
+use Symfony\Component\JsonPath\JsonCrawler;
+use Symfony\Component\JsonPath\JsonPath;
+
+/**
+ * @author Alexandre Daubois
+ *
+ * @experimental
+ */
+class JsonPathCount extends Constraint
+{
+ public function __construct(
+ private JsonPath|string $jsonPath,
+ private string $json,
+ ) {
+ }
+
+ public function toString(): string
+ {
+ return \sprintf('matches expected count of JSON path "%s"', $this->jsonPath);
+ }
+
+ protected function matches(mixed $other): bool
+ {
+ return $other === \count((new JsonCrawler($this->json))->find($this->jsonPath));
+ }
+}
diff --git a/src/Symfony/Component/JsonPath/Test/JsonPathEquals.php b/src/Symfony/Component/JsonPath/Test/JsonPathEquals.php
new file mode 100644
index 0000000000000..56825434b5faa
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Test/JsonPathEquals.php
@@ -0,0 +1,40 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Test;
+
+use PHPUnit\Framework\Constraint\Constraint;
+use Symfony\Component\JsonPath\JsonCrawler;
+use Symfony\Component\JsonPath\JsonPath;
+
+/**
+ * @author Alexandre Daubois
+ *
+ * @experimental
+ */
+class JsonPathEquals extends Constraint
+{
+ public function __construct(
+ private JsonPath|string $jsonPath,
+ private string $json,
+ ) {
+ }
+
+ public function toString(): string
+ {
+ return \sprintf('equals JSON path "%s" result', $this->jsonPath);
+ }
+
+ protected function matches(mixed $other): bool
+ {
+ return (new JsonCrawler($this->json))->find($this->jsonPath) == $other;
+ }
+}
diff --git a/src/Symfony/Component/JsonPath/Test/JsonPathNotContains.php b/src/Symfony/Component/JsonPath/Test/JsonPathNotContains.php
new file mode 100644
index 0000000000000..721d60fa29984
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Test/JsonPathNotContains.php
@@ -0,0 +1,43 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Test;
+
+use PHPUnit\Framework\Constraint\Constraint;
+use Symfony\Component\JsonPath\JsonCrawler;
+use Symfony\Component\JsonPath\JsonPath;
+
+/**
+ * @author Alexandre Daubois
+ *
+ * @experimental
+ */
+class JsonPathNotContains extends Constraint
+{
+ public function __construct(
+ private JsonPath|string $jsonPath,
+ private string $json,
+ private bool $strict = true,
+ ) {
+ }
+
+ public function toString(): string
+ {
+ return \sprintf('is not found in elements at JSON path "%s"', $this->jsonPath);
+ }
+
+ protected function matches(mixed $other): bool
+ {
+ $result = (new JsonCrawler($this->json))->find($this->jsonPath);
+
+ return !\in_array($other, $result, $this->strict);
+ }
+}
diff --git a/src/Symfony/Component/JsonPath/Test/JsonPathNotEquals.php b/src/Symfony/Component/JsonPath/Test/JsonPathNotEquals.php
new file mode 100644
index 0000000000000..d149dbb59c441
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Test/JsonPathNotEquals.php
@@ -0,0 +1,40 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Test;
+
+use PHPUnit\Framework\Constraint\Constraint;
+use Symfony\Component\JsonPath\JsonCrawler;
+use Symfony\Component\JsonPath\JsonPath;
+
+/**
+ * @author Alexandre Daubois
+ *
+ * @experimental
+ */
+class JsonPathNotEquals extends Constraint
+{
+ public function __construct(
+ private JsonPath|string $jsonPath,
+ private string $json,
+ ) {
+ }
+
+ public function toString(): string
+ {
+ return \sprintf('does not equal JSON path "%s" result', $this->jsonPath);
+ }
+
+ protected function matches(mixed $other): bool
+ {
+ return (new JsonCrawler($this->json))->find($this->jsonPath) != $other;
+ }
+}
diff --git a/src/Symfony/Component/JsonPath/Test/JsonPathNotSame.php b/src/Symfony/Component/JsonPath/Test/JsonPathNotSame.php
new file mode 100644
index 0000000000000..248ac456fcbef
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Test/JsonPathNotSame.php
@@ -0,0 +1,40 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Test;
+
+use PHPUnit\Framework\Constraint\Constraint;
+use Symfony\Component\JsonPath\JsonCrawler;
+use Symfony\Component\JsonPath\JsonPath;
+
+/**
+ * @author Alexandre Daubois
+ *
+ * @experimental
+ */
+class JsonPathNotSame extends Constraint
+{
+ public function __construct(
+ private JsonPath|string $jsonPath,
+ private string $json,
+ ) {
+ }
+
+ public function toString(): string
+ {
+ return \sprintf('is not identical to JSON path "%s" result', $this->jsonPath);
+ }
+
+ protected function matches(mixed $other): bool
+ {
+ return (new JsonCrawler($this->json))->find($this->jsonPath) !== $other;
+ }
+}
diff --git a/src/Symfony/Component/JsonPath/Test/JsonPathSame.php b/src/Symfony/Component/JsonPath/Test/JsonPathSame.php
new file mode 100644
index 0000000000000..469922d8a0b90
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Test/JsonPathSame.php
@@ -0,0 +1,40 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Test;
+
+use PHPUnit\Framework\Constraint\Constraint;
+use Symfony\Component\JsonPath\JsonCrawler;
+use Symfony\Component\JsonPath\JsonPath;
+
+/**
+ * @author Alexandre Daubois
+ *
+ * @experimental
+ */
+class JsonPathSame extends Constraint
+{
+ public function __construct(
+ private JsonPath|string $jsonPath,
+ private string $json,
+ ) {
+ }
+
+ public function toString(): string
+ {
+ return \sprintf('is identical to JSON path "%s" result', $this->jsonPath);
+ }
+
+ protected function matches(mixed $other): bool
+ {
+ return (new JsonCrawler($this->json))->find($this->jsonPath) === $other;
+ }
+}
diff --git a/src/Symfony/Component/JsonPath/Tests/Fixtures/Makefile b/src/Symfony/Component/JsonPath/Tests/Fixtures/Makefile
new file mode 100644
index 0000000000000..d9b4c353f4a76
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Tests/Fixtures/Makefile
@@ -0,0 +1,9 @@
+override hash := 05f6cac786bf0cce95437e6f1adedc3186d54a71
+
+.PHONY: cts.json
+cts.json:
+ curl -f https://raw.githubusercontent.com/jsonpath-standard/jsonpath-compliance-test-suite/$(hash)/cts.json -o cts.json
+
+.PHONY: clean
+clean:
+ rm -f cts.json
diff --git a/src/Symfony/Component/JsonPath/Tests/Fixtures/cts.json b/src/Symfony/Component/JsonPath/Tests/Fixtures/cts.json
new file mode 100644
index 0000000000000..363dce7893ca6
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Tests/Fixtures/cts.json
@@ -0,0 +1,12702 @@
+{
+ "description": "JSONPath Compliance Test Suite. This file is autogenerated, do not edit.",
+ "tests": [
+ {
+ "name": "basic, root",
+ "selector": "$",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [
+ [
+ "first",
+ "second"
+ ]
+ ],
+ "result_paths": [
+ "$"
+ ]
+ },
+ {
+ "name": "basic, no leading whitespace",
+ "selector": " $",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "basic, no trailing whitespace",
+ "selector": "$ ",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "basic, name shorthand",
+ "selector": "$.a",
+ "document": {
+ "a": "A",
+ "b": "B"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['a']"
+ ]
+ },
+ {
+ "name": "basic, name shorthand, extended unicode ☺",
+ "selector": "$.☺",
+ "document": {
+ "☺": "A",
+ "b": "B"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['☺']"
+ ]
+ },
+ {
+ "name": "basic, name shorthand, underscore",
+ "selector": "$._",
+ "document": {
+ "_": "A",
+ "_foo": "B"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['_']"
+ ]
+ },
+ {
+ "name": "basic, name shorthand, symbol",
+ "selector": "$.&",
+ "invalid_selector": true
+ },
+ {
+ "name": "basic, name shorthand, number",
+ "selector": "$.1",
+ "invalid_selector": true
+ },
+ {
+ "name": "basic, name shorthand, absent data",
+ "selector": "$.c",
+ "document": {
+ "a": "A",
+ "b": "B"
+ },
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "basic, name shorthand, array data",
+ "selector": "$.a",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "basic, name shorthand, object data, nested",
+ "selector": "$.a.b.c",
+ "document": {
+ "a": {
+ "b": {
+ "c": "C"
+ }
+ }
+ },
+ "result": [
+ "C"
+ ],
+ "result_paths": [
+ "$['a']['b']['c']"
+ ]
+ },
+ {
+ "name": "basic, wildcard shorthand, object data",
+ "selector": "$.*",
+ "document": {
+ "a": "A",
+ "b": "B"
+ },
+ "results": [
+ [
+ "A",
+ "B"
+ ],
+ [
+ "B",
+ "A"
+ ]
+ ],
+ "results_paths": [
+ [
+ "$['a']",
+ "$['b']"
+ ],
+ [
+ "$['b']",
+ "$['a']"
+ ]
+ ]
+ },
+ {
+ "name": "basic, wildcard shorthand, array data",
+ "selector": "$.*",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [
+ "first",
+ "second"
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "basic, wildcard selector, array data",
+ "selector": "$[*]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [
+ "first",
+ "second"
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "basic, wildcard shorthand, then name shorthand",
+ "selector": "$.*.a",
+ "document": {
+ "x": {
+ "a": "Ax",
+ "b": "Bx"
+ },
+ "y": {
+ "a": "Ay",
+ "b": "By"
+ }
+ },
+ "results": [
+ [
+ "Ax",
+ "Ay"
+ ],
+ [
+ "Ay",
+ "Ax"
+ ]
+ ],
+ "results_paths": [
+ [
+ "$['x']['a']",
+ "$['y']['a']"
+ ],
+ [
+ "$['y']['a']",
+ "$['x']['a']"
+ ]
+ ]
+ },
+ {
+ "name": "basic, multiple selectors",
+ "selector": "$[0,2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 0,
+ 2
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]"
+ ]
+ },
+ {
+ "name": "basic, multiple selectors, space instead of comma",
+ "selector": "$[0 2]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "basic, selector, leading comma",
+ "selector": "$[,0]",
+ "invalid_selector": true
+ },
+ {
+ "name": "basic, selector, trailing comma",
+ "selector": "$[0,]",
+ "invalid_selector": true
+ },
+ {
+ "name": "basic, multiple selectors, name and index, array data",
+ "selector": "$['a',1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 1
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "basic, multiple selectors, name and index, object data",
+ "selector": "$['a',1]",
+ "document": {
+ "a": 1,
+ "b": 2
+ },
+ "result": [
+ 1
+ ],
+ "result_paths": [
+ "$['a']"
+ ]
+ },
+ {
+ "name": "basic, multiple selectors, index and slice",
+ "selector": "$[1,5:7]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 1,
+ 5,
+ 6
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[5]",
+ "$[6]"
+ ]
+ },
+ {
+ "name": "basic, multiple selectors, index and slice, overlapping",
+ "selector": "$[1,0:3]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 1,
+ 0,
+ 1,
+ 2
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[0]",
+ "$[1]",
+ "$[2]"
+ ]
+ },
+ {
+ "name": "basic, multiple selectors, duplicate index",
+ "selector": "$[1,1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 1,
+ 1
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "basic, multiple selectors, wildcard and index",
+ "selector": "$[*,1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 1
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[2]",
+ "$[3]",
+ "$[4]",
+ "$[5]",
+ "$[6]",
+ "$[7]",
+ "$[8]",
+ "$[9]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "basic, multiple selectors, wildcard and name",
+ "selector": "$[*,'a']",
+ "document": {
+ "a": "A",
+ "b": "B"
+ },
+ "results": [
+ [
+ "A",
+ "B",
+ "A"
+ ],
+ [
+ "B",
+ "A",
+ "A"
+ ]
+ ],
+ "results_paths": [
+ [
+ "$['a']",
+ "$['b']",
+ "$['a']"
+ ],
+ [
+ "$['b']",
+ "$['a']",
+ "$['a']"
+ ]
+ ]
+ },
+ {
+ "name": "basic, multiple selectors, wildcard and slice",
+ "selector": "$[*,0:2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 0,
+ 1
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[2]",
+ "$[3]",
+ "$[4]",
+ "$[5]",
+ "$[6]",
+ "$[7]",
+ "$[8]",
+ "$[9]",
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "basic, multiple selectors, multiple wildcards",
+ "selector": "$[*,*]",
+ "document": [
+ 0,
+ 1,
+ 2
+ ],
+ "result": [
+ 0,
+ 1,
+ 2,
+ 0,
+ 1,
+ 2
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[2]",
+ "$[0]",
+ "$[1]",
+ "$[2]"
+ ]
+ },
+ {
+ "name": "basic, empty segment",
+ "selector": "$[]",
+ "invalid_selector": true
+ },
+ {
+ "name": "basic, descendant segment, index",
+ "selector": "$..[1]",
+ "document": {
+ "o": [
+ 0,
+ 1,
+ [
+ 2,
+ 3
+ ]
+ ]
+ },
+ "result": [
+ 1,
+ 3
+ ],
+ "result_paths": [
+ "$['o'][1]",
+ "$['o'][2][1]"
+ ]
+ },
+ {
+ "name": "basic, descendant segment, name shorthand",
+ "selector": "$..a",
+ "document": {
+ "o": [
+ {
+ "a": "b"
+ },
+ {
+ "a": "c"
+ }
+ ]
+ },
+ "result": [
+ "b",
+ "c"
+ ],
+ "result_paths": [
+ "$['o'][0]['a']",
+ "$['o'][1]['a']"
+ ]
+ },
+ {
+ "name": "basic, descendant segment, wildcard shorthand, array data",
+ "selector": "$..*",
+ "document": [
+ 0,
+ 1
+ ],
+ "result": [
+ 0,
+ 1
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "basic, descendant segment, wildcard selector, array data",
+ "selector": "$..[*]",
+ "document": [
+ 0,
+ 1
+ ],
+ "result": [
+ 0,
+ 1
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "basic, descendant segment, wildcard selector, nested arrays",
+ "selector": "$..[*]",
+ "document": [
+ [
+ [
+ 1
+ ]
+ ],
+ [
+ 2
+ ]
+ ],
+ "results": [
+ [
+ [
+ [
+ 1
+ ]
+ ],
+ [
+ 2
+ ],
+ [
+ 1
+ ],
+ 1,
+ 2
+ ],
+ [
+ [
+ [
+ 1
+ ]
+ ],
+ [
+ 2
+ ],
+ [
+ 1
+ ],
+ 2,
+ 1
+ ]
+ ],
+ "results_paths": [
+ [
+ "$[0]",
+ "$[1]",
+ "$[0][0]",
+ "$[0][0][0]",
+ "$[1][0]"
+ ],
+ [
+ "$[0]",
+ "$[1]",
+ "$[0][0]",
+ "$[1][0]",
+ "$[0][0][0]"
+ ]
+ ]
+ },
+ {
+ "name": "basic, descendant segment, wildcard selector, nested objects",
+ "selector": "$..[*]",
+ "document": {
+ "a": {
+ "c": {
+ "e": 1
+ }
+ },
+ "b": {
+ "d": 2
+ }
+ },
+ "results": [
+ [
+ {
+ "c": {
+ "e": 1
+ }
+ },
+ {
+ "d": 2
+ },
+ {
+ "e": 1
+ },
+ 1,
+ 2
+ ],
+ [
+ {
+ "c": {
+ "e": 1
+ }
+ },
+ {
+ "d": 2
+ },
+ {
+ "e": 1
+ },
+ 2,
+ 1
+ ],
+ [
+ {
+ "c": {
+ "e": 1
+ }
+ },
+ {
+ "d": 2
+ },
+ 2,
+ {
+ "e": 1
+ },
+ 1
+ ],
+ [
+ {
+ "d": 2
+ },
+ {
+ "c": {
+ "e": 1
+ }
+ },
+ {
+ "e": 1
+ },
+ 1,
+ 2
+ ],
+ [
+ {
+ "d": 2
+ },
+ {
+ "c": {
+ "e": 1
+ }
+ },
+ {
+ "e": 1
+ },
+ 2,
+ 1
+ ],
+ [
+ {
+ "d": 2
+ },
+ {
+ "c": {
+ "e": 1
+ }
+ },
+ 2,
+ {
+ "e": 1
+ },
+ 1
+ ]
+ ],
+ "results_paths": [
+ [
+ "$['a']",
+ "$['b']",
+ "$['a']['c']",
+ "$['a']['c']['e']",
+ "$['b']['d']"
+ ],
+ [
+ "$['a']",
+ "$['b']",
+ "$['a']['c']",
+ "$['b']['d']",
+ "$['a']['c']['e']"
+ ],
+ [
+ "$['a']",
+ "$['b']",
+ "$['b']['d']",
+ "$['a']['c']",
+ "$['a']['c']['e']"
+ ],
+ [
+ "$['b']",
+ "$['a']",
+ "$['a']['c']",
+ "$['a']['c']['e']",
+ "$['b']['d']"
+ ],
+ [
+ "$['b']",
+ "$['a']",
+ "$['a']['c']",
+ "$['b']['d']",
+ "$['a']['c']['e']"
+ ],
+ [
+ "$['b']",
+ "$['a']",
+ "$['b']['d']",
+ "$['a']['c']",
+ "$['a']['c']['e']"
+ ]
+ ]
+ },
+ {
+ "name": "basic, descendant segment, wildcard shorthand, object data",
+ "selector": "$..*",
+ "document": {
+ "a": "b"
+ },
+ "result": [
+ "b"
+ ],
+ "result_paths": [
+ "$['a']"
+ ]
+ },
+ {
+ "name": "basic, descendant segment, wildcard shorthand, nested data",
+ "selector": "$..*",
+ "document": {
+ "o": [
+ {
+ "a": "b"
+ }
+ ]
+ },
+ "result": [
+ [
+ {
+ "a": "b"
+ }
+ ],
+ {
+ "a": "b"
+ },
+ "b"
+ ],
+ "result_paths": [
+ "$['o']",
+ "$['o'][0]",
+ "$['o'][0]['a']"
+ ]
+ },
+ {
+ "name": "basic, descendant segment, multiple selectors",
+ "selector": "$..['a','d']",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ "b",
+ "e",
+ "c",
+ "f"
+ ],
+ "result_paths": [
+ "$[0]['a']",
+ "$[0]['d']",
+ "$[1]['a']",
+ "$[1]['d']"
+ ]
+ },
+ {
+ "name": "basic, descendant segment, object traversal, multiple selectors",
+ "selector": "$..['a','d']",
+ "document": {
+ "x": {
+ "a": "b",
+ "d": "e"
+ },
+ "y": {
+ "a": "c",
+ "d": "f"
+ }
+ },
+ "results": [
+ [
+ "b",
+ "e",
+ "c",
+ "f"
+ ],
+ [
+ "c",
+ "f",
+ "b",
+ "e"
+ ]
+ ],
+ "results_paths": [
+ [
+ "$['x']['a']",
+ "$['x']['d']",
+ "$['y']['a']",
+ "$['y']['d']"
+ ],
+ [
+ "$['y']['a']",
+ "$['y']['d']",
+ "$['x']['a']",
+ "$['x']['d']"
+ ]
+ ]
+ },
+ {
+ "name": "basic, bald descendant segment",
+ "selector": "$..",
+ "invalid_selector": true
+ },
+ {
+ "name": "basic, current node identifier without filter selector",
+ "selector": "$[@.a]",
+ "invalid_selector": true
+ },
+ {
+ "name": "basic, root node identifier in brackets without filter selector",
+ "selector": "$[$.a]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, existence, without segments",
+ "selector": "$[?@]",
+ "document": {
+ "a": 1,
+ "b": null
+ },
+ "results": [
+ [
+ 1,
+ null
+ ],
+ [
+ null,
+ 1
+ ]
+ ],
+ "results_paths": [
+ [
+ "$['a']",
+ "$['b']"
+ ],
+ [
+ "$['b']",
+ "$['a']"
+ ]
+ ]
+ },
+ {
+ "name": "filter, existence",
+ "selector": "$[?@.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, existence, present with null",
+ "selector": "$[?@.a]",
+ "document": [
+ {
+ "a": null,
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": null,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, absolute existence, without segments",
+ "selector": "$[?$]",
+ "document": {
+ "a": 1,
+ "b": null
+ },
+ "results": [
+ [
+ 1,
+ null
+ ],
+ [
+ null,
+ 1
+ ]
+ ],
+ "results_paths": [
+ [
+ "$['a']",
+ "$['b']"
+ ],
+ [
+ "$['b']",
+ "$['a']"
+ ]
+ ]
+ },
+ {
+ "name": "filter, absolute existence, with segments",
+ "selector": "$[?$.*.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, equals string, single quotes",
+ "selector": "$[?@.a=='b']",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals numeric string, single quotes",
+ "selector": "$[?@.a=='1']",
+ "document": [
+ {
+ "a": "1",
+ "d": "e"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "1",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals string, double quotes",
+ "selector": "$[?@.a==\"b\"]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals numeric string, double quotes",
+ "selector": "$[?@.a==\"1\"]",
+ "document": [
+ {
+ "a": "1",
+ "d": "e"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "1",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number",
+ "selector": "$[?@.a==1]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": 2,
+ "d": "f"
+ },
+ {
+ "a": "1",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals null",
+ "selector": "$[?@.a==null]",
+ "document": [
+ {
+ "a": null,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": null,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals null, absent from data",
+ "selector": "$[?@.a==null]",
+ "document": [
+ {
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "filter, equals true",
+ "selector": "$[?@.a==true]",
+ "document": [
+ {
+ "a": true,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": true,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals false",
+ "selector": "$[?@.a==false]",
+ "document": [
+ {
+ "a": false,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": false,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals self",
+ "selector": "$[?@==@]",
+ "document": [
+ 1,
+ null,
+ true,
+ {
+ "a": "b"
+ },
+ [
+ false
+ ]
+ ],
+ "result": [
+ 1,
+ null,
+ true,
+ {
+ "a": "b"
+ },
+ [
+ false
+ ]
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[2]",
+ "$[3]",
+ "$[4]"
+ ]
+ },
+ {
+ "name": "filter, absolute, equals self",
+ "selector": "$[?$==$]",
+ "document": [
+ 1,
+ null,
+ true,
+ {
+ "a": "b"
+ },
+ [
+ false
+ ]
+ ],
+ "result": [
+ 1,
+ null,
+ true,
+ {
+ "a": "b"
+ },
+ [
+ false
+ ]
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[2]",
+ "$[3]",
+ "$[4]"
+ ]
+ },
+ {
+ "name": "filter, equals, absent from index selector equals absent from name selector",
+ "selector": "$[?@.absent==@.list[9]]",
+ "document": [
+ {
+ "list": [
+ 1
+ ]
+ }
+ ],
+ "result": [
+ {
+ "list": [
+ 1
+ ]
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, deep equality, arrays",
+ "selector": "$[?@.a==@.b]",
+ "document": [
+ {
+ "a": false,
+ "b": [
+ 1,
+ 2
+ ]
+ },
+ {
+ "a": [
+ [
+ 1,
+ [
+ 2
+ ]
+ ]
+ ],
+ "b": [
+ [
+ 1,
+ [
+ 2
+ ]
+ ]
+ ]
+ },
+ {
+ "a": [
+ [
+ 1,
+ [
+ 2
+ ]
+ ]
+ ],
+ "b": [
+ [
+ [
+ 2
+ ],
+ 1
+ ]
+ ]
+ },
+ {
+ "a": [
+ [
+ 1,
+ [
+ 2
+ ]
+ ]
+ ],
+ "b": [
+ [
+ 1,
+ 2
+ ]
+ ]
+ }
+ ],
+ "result": [
+ {
+ "a": [
+ [
+ 1,
+ [
+ 2
+ ]
+ ]
+ ],
+ "b": [
+ [
+ 1,
+ [
+ 2
+ ]
+ ]
+ ]
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, deep equality, objects",
+ "selector": "$[?@.a==@.b]",
+ "document": [
+ {
+ "a": false,
+ "b": {
+ "x": 1,
+ "y": {
+ "z": 1
+ }
+ }
+ },
+ {
+ "a": {
+ "x": 1,
+ "y": {
+ "z": 1
+ }
+ },
+ "b": {
+ "x": 1,
+ "y": {
+ "z": 1
+ }
+ }
+ },
+ {
+ "a": {
+ "x": 1,
+ "y": {
+ "z": 1
+ }
+ },
+ "b": {
+ "y": {
+ "z": 1
+ },
+ "x": 1
+ }
+ },
+ {
+ "a": {
+ "x": 1,
+ "y": {
+ "z": 1
+ }
+ },
+ "b": {
+ "x": 1
+ }
+ },
+ {
+ "a": {
+ "x": 1,
+ "y": {
+ "z": 1
+ }
+ },
+ "b": {
+ "x": 1,
+ "y": {
+ "z": 2
+ }
+ }
+ }
+ ],
+ "result": [
+ {
+ "a": {
+ "x": 1,
+ "y": {
+ "z": 1
+ }
+ },
+ "b": {
+ "x": 1,
+ "y": {
+ "z": 1
+ }
+ }
+ },
+ {
+ "a": {
+ "x": 1,
+ "y": {
+ "z": 1
+ }
+ },
+ "b": {
+ "y": {
+ "z": 1
+ },
+ "x": 1
+ }
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]"
+ ]
+ },
+ {
+ "name": "filter, not-equals string, single quotes",
+ "selector": "$[?@.a!='b']",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals numeric string, single quotes",
+ "selector": "$[?@.a!='1']",
+ "document": [
+ {
+ "a": "1",
+ "d": "e"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals string, single quotes, different type",
+ "selector": "$[?@.a!='b']",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals string, double quotes",
+ "selector": "$[?@.a!=\"b\"]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals numeric string, double quotes",
+ "selector": "$[?@.a!=\"1\"]",
+ "document": [
+ {
+ "a": "1",
+ "d": "e"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals string, double quotes, different types",
+ "selector": "$[?@.a!=\"b\"]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals number",
+ "selector": "$[?@.a!=1]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": 2,
+ "d": "f"
+ },
+ {
+ "a": "1",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 2,
+ "d": "f"
+ },
+ {
+ "a": "1",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]"
+ ]
+ },
+ {
+ "name": "filter, not-equals number, different types",
+ "selector": "$[?@.a!=1]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals null",
+ "selector": "$[?@.a!=null]",
+ "document": [
+ {
+ "a": null,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals null, absent from data",
+ "selector": "$[?@.a!=null]",
+ "document": [
+ {
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals true",
+ "selector": "$[?@.a!=true]",
+ "document": [
+ {
+ "a": true,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not-equals false",
+ "selector": "$[?@.a!=false]",
+ "document": [
+ {
+ "a": false,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, less than string, single quotes",
+ "selector": "$[?@.a<'c']",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, less than string, double quotes",
+ "selector": "$[?@.a<\"c\"]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, less than number",
+ "selector": "$[?@.a<10]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": 10,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": 20,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, less than null",
+ "selector": "$[?@.a'c']",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ]
+ },
+ {
+ "name": "filter, greater than string, double quotes",
+ "selector": "$[?@.a>\"c\"]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ]
+ },
+ {
+ "name": "filter, greater than number",
+ "selector": "$[?@.a>10]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": 10,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": 20,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 20,
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[3]"
+ ]
+ },
+ {
+ "name": "filter, greater than null",
+ "selector": "$[?@.a>null]",
+ "document": [
+ {
+ "a": null,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "filter, greater than true",
+ "selector": "$[?@.a>true]",
+ "document": [
+ {
+ "a": true,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "filter, greater than false",
+ "selector": "$[?@.a>false]",
+ "document": [
+ {
+ "a": false,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "filter, greater than or equal to string, single quotes",
+ "selector": "$[?@.a>='c']",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]"
+ ]
+ },
+ {
+ "name": "filter, greater than or equal to string, double quotes",
+ "selector": "$[?@.a>=\"c\"]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]"
+ ]
+ },
+ {
+ "name": "filter, greater than or equal to number",
+ "selector": "$[?@.a>=10]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": 10,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": 20,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 10,
+ "d": "e"
+ },
+ {
+ "a": 20,
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ]
+ },
+ {
+ "name": "filter, greater than or equal to null",
+ "selector": "$[?@.a>=null]",
+ "document": [
+ {
+ "a": null,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": null,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, greater than or equal to true",
+ "selector": "$[?@.a>=true]",
+ "document": [
+ {
+ "a": true,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": true,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, greater than or equal to false",
+ "selector": "$[?@.a>=false]",
+ "document": [
+ {
+ "a": false,
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": false,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, exists and not-equals null, absent from data",
+ "selector": "$[?@.a&&@.a!=null]",
+ "document": [
+ {
+ "d": "e"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, exists and exists, data false",
+ "selector": "$[?@.a&&@.b]",
+ "document": [
+ {
+ "a": false,
+ "b": false
+ },
+ {
+ "b": false
+ },
+ {
+ "c": false
+ }
+ ],
+ "result": [
+ {
+ "a": false,
+ "b": false
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, exists or exists, data false",
+ "selector": "$[?@.a||@.b]",
+ "document": [
+ {
+ "a": false,
+ "b": false
+ },
+ {
+ "b": false
+ },
+ {
+ "c": false
+ }
+ ],
+ "result": [
+ {
+ "a": false,
+ "b": false
+ },
+ {
+ "b": false
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, and",
+ "selector": "$[?@.a>0&&@.a<10]",
+ "document": [
+ {
+ "a": -10,
+ "d": "e"
+ },
+ {
+ "a": 5,
+ "d": "f"
+ },
+ {
+ "a": 20,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": 5,
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, or",
+ "selector": "$[?@.a=='b'||@.a=='d']",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "b",
+ "d": "f"
+ },
+ {
+ "a": "c",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ]
+ },
+ {
+ "name": "filter, not expression",
+ "selector": "$[?!(@.a=='b')]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "b",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]"
+ ]
+ },
+ {
+ "name": "filter, not exists",
+ "selector": "$[?!@.a]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, not exists, data null",
+ "selector": "$[?!@.a]",
+ "document": [
+ {
+ "a": null,
+ "d": "e"
+ },
+ {
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, non-singular existence, wildcard",
+ "selector": "$[?@.*]",
+ "document": [
+ 1,
+ [],
+ [
+ 2
+ ],
+ {},
+ {
+ "a": 3
+ }
+ ],
+ "result": [
+ [
+ 2
+ ],
+ {
+ "a": 3
+ }
+ ],
+ "result_paths": [
+ "$[2]",
+ "$[4]"
+ ]
+ },
+ {
+ "name": "filter, non-singular existence, multiple",
+ "selector": "$[?@[0, 0, 'a']]",
+ "document": [
+ 1,
+ [],
+ [
+ 2
+ ],
+ [
+ 2,
+ 3
+ ],
+ {
+ "a": 3
+ },
+ {
+ "b": 4
+ },
+ {
+ "a": 3,
+ "b": 4
+ }
+ ],
+ "result": [
+ [
+ 2
+ ],
+ [
+ 2,
+ 3
+ ],
+ {
+ "a": 3
+ },
+ {
+ "a": 3,
+ "b": 4
+ }
+ ],
+ "result_paths": [
+ "$[2]",
+ "$[3]",
+ "$[4]",
+ "$[6]"
+ ]
+ },
+ {
+ "name": "filter, non-singular existence, slice",
+ "selector": "$[?@[0:2]]",
+ "document": [
+ 1,
+ [],
+ [
+ 2
+ ],
+ [
+ 2,
+ 3,
+ 4
+ ],
+ {},
+ {
+ "a": 3
+ }
+ ],
+ "result": [
+ [
+ 2
+ ],
+ [
+ 2,
+ 3,
+ 4
+ ]
+ ],
+ "result_paths": [
+ "$[2]",
+ "$[3]"
+ ]
+ },
+ {
+ "name": "filter, non-singular existence, negated",
+ "selector": "$[?!@.*]",
+ "document": [
+ 1,
+ [],
+ [
+ 2
+ ],
+ {},
+ {
+ "a": 3
+ }
+ ],
+ "result": [
+ 1,
+ [],
+ {}
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[3]"
+ ]
+ },
+ {
+ "name": "filter, non-singular query in comparison, slice",
+ "selector": "$[?@[0:0]==0]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, non-singular query in comparison, all children",
+ "selector": "$[?@[*]==0]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, non-singular query in comparison, descendants",
+ "selector": "$[?@..a==0]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, non-singular query in comparison, combined",
+ "selector": "$[?@.a[*].a==0]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, nested",
+ "selector": "$[?@[?@>1]]",
+ "document": [
+ [
+ 0
+ ],
+ [
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 1,
+ 2
+ ],
+ [
+ 42
+ ]
+ ],
+ "result": [
+ [
+ 0,
+ 1,
+ 2
+ ],
+ [
+ 42
+ ]
+ ],
+ "result_paths": [
+ "$[2]",
+ "$[3]"
+ ]
+ },
+ {
+ "name": "filter, name segment on primitive, selects nothing",
+ "selector": "$[?@.a == 1]",
+ "document": {
+ "a": 1
+ },
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "filter, name segment on array, selects nothing",
+ "selector": "$[?@['0'] == 5]",
+ "document": [
+ [
+ 5,
+ 6
+ ]
+ ],
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "filter, index segment on object, selects nothing",
+ "selector": "$[?@[0] == 5]",
+ "document": [
+ {
+ "0": 5
+ }
+ ],
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "filter, followed by name selector",
+ "selector": "$[?@.a==1].b.x",
+ "document": [
+ {
+ "a": 1,
+ "b": {
+ "x": 2
+ }
+ }
+ ],
+ "result": [
+ 2
+ ],
+ "result_paths": [
+ "$[0]['b']['x']"
+ ]
+ },
+ {
+ "name": "filter, followed by child segment that selects multiple elements",
+ "selector": "$[?@.z=='_']['x','y']",
+ "document": [
+ {
+ "x": 1,
+ "y": null,
+ "z": "_"
+ }
+ ],
+ "result": [
+ 1,
+ null
+ ],
+ "result_paths": [
+ "$[0]['x']",
+ "$[0]['y']"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, index, equal",
+ "selector": "$[?(@[0, 0]==42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, index, not equal",
+ "selector": "$[?(@[0, 0]!=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, index, less-or-equal",
+ "selector": "$[?(@[0, 0]<=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, name, equal",
+ "selector": "$[?(@['a', 'a']==42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, name, not equal",
+ "selector": "$[?(@['a', 'a']!=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, name, less-or-equal",
+ "selector": "$[?(@['a', 'a']<=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, combined, equal",
+ "selector": "$[?(@[0, '0']==42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, combined, not equal",
+ "selector": "$[?(@[0, '0']!=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, combined, less-or-equal",
+ "selector": "$[?(@[0, '0']<=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, relative non-singular query, wildcard, equal",
+ "selector": "$[?(@.*==42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, relative non-singular query, wildcard, not equal",
+ "selector": "$[?(@.*!=42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, relative non-singular query, wildcard, less-or-equal",
+ "selector": "$[?(@.*<=42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, relative non-singular query, slice, equal",
+ "selector": "$[?(@[0:0]==42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, relative non-singular query, slice, not equal",
+ "selector": "$[?(@[0:0]!=42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, relative non-singular query, slice, less-or-equal",
+ "selector": "$[?(@[0:0]<=42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, absolute non-singular query, index, equal",
+ "selector": "$[?($[0, 0]==42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, absolute non-singular query, index, not equal",
+ "selector": "$[?($[0, 0]!=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, absolute non-singular query, index, less-or-equal",
+ "selector": "$[?($[0, 0]<=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, absolute non-singular query, name, equal",
+ "selector": "$[?($['a', 'a']==42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, absolute non-singular query, name, not equal",
+ "selector": "$[?($['a', 'a']!=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, absolute non-singular query, name, less-or-equal",
+ "selector": "$[?($['a', 'a']<=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, absolute non-singular query, combined, equal",
+ "selector": "$[?($[0, '0']==42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, absolute non-singular query, combined, not equal",
+ "selector": "$[?($[0, '0']!=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, absolute non-singular query, combined, less-or-equal",
+ "selector": "$[?($[0, '0']<=42)]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, absolute non-singular query, wildcard, equal",
+ "selector": "$[?($.*==42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, absolute non-singular query, wildcard, not equal",
+ "selector": "$[?($.*!=42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, absolute non-singular query, wildcard, less-or-equal",
+ "selector": "$[?($.*<=42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, absolute non-singular query, slice, equal",
+ "selector": "$[?($[0:0]==42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, absolute non-singular query, slice, not equal",
+ "selector": "$[?($[0:0]!=42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, absolute non-singular query, slice, less-or-equal",
+ "selector": "$[?($[0:0]<=42)]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, multiple selectors",
+ "selector": "$[?@.a,?@.b]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, multiple selectors, comparison",
+ "selector": "$[?@.a=='b',?@.b=='x']",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, multiple selectors, overlapping",
+ "selector": "$[?@.a,?@.d]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, multiple selectors, filter and index",
+ "selector": "$[?@.a,1]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, multiple selectors, filter and wildcard",
+ "selector": "$[?@.a,*]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[0]",
+ "$[1]"
+ ]
+ },
+ {
+ "name": "filter, multiple selectors, filter and slice",
+ "selector": "$[?@.a,1:]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ },
+ {
+ "g": "h"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ },
+ {
+ "g": "h"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[2]"
+ ]
+ },
+ {
+ "name": "filter, multiple selectors, comparison filter, index and slice",
+ "selector": "$[1, ?@.a=='b', 1:]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "b": "c",
+ "d": "f"
+ },
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, equals number, zero and negative zero",
+ "selector": "$[?@.a==0]",
+ "document": [
+ {
+ "a": 0,
+ "d": "e"
+ },
+ {
+ "a": 0.1,
+ "d": "f"
+ },
+ {
+ "a": "0",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 0,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, negative zero and zero",
+ "selector": "$[?@.a==-0]",
+ "document": [
+ {
+ "a": 0,
+ "d": "e"
+ },
+ {
+ "a": 0.1,
+ "d": "f"
+ },
+ {
+ "a": "0",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 0,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, with and without decimal fraction",
+ "selector": "$[?@.a==1.0]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": 2,
+ "d": "f"
+ },
+ {
+ "a": "1",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, exponent",
+ "selector": "$[?@.a==1e2]",
+ "document": [
+ {
+ "a": 100,
+ "d": "e"
+ },
+ {
+ "a": 100.1,
+ "d": "f"
+ },
+ {
+ "a": "100",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 100,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, exponent upper e",
+ "selector": "$[?@.a==1E2]",
+ "document": [
+ {
+ "a": 100,
+ "d": "e"
+ },
+ {
+ "a": 100.1,
+ "d": "f"
+ },
+ {
+ "a": "100",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 100,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, positive exponent",
+ "selector": "$[?@.a==1e+2]",
+ "document": [
+ {
+ "a": 100,
+ "d": "e"
+ },
+ {
+ "a": 100.1,
+ "d": "f"
+ },
+ {
+ "a": "100",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 100,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, negative exponent",
+ "selector": "$[?@.a==1e-2]",
+ "document": [
+ {
+ "a": 0.01,
+ "d": "e"
+ },
+ {
+ "a": 0.02,
+ "d": "f"
+ },
+ {
+ "a": "0.01",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 0.01,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, exponent 0",
+ "selector": "$[?@.a==1e0]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": 2,
+ "d": "f"
+ },
+ {
+ "a": "1",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, exponent -0",
+ "selector": "$[?@.a==1e-0]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": 2,
+ "d": "f"
+ },
+ {
+ "a": "1",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, exponent +0",
+ "selector": "$[?@.a==1e+0]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": 2,
+ "d": "f"
+ },
+ {
+ "a": "1",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, exponent leading -0",
+ "selector": "$[?@.a==1e-02]",
+ "document": [
+ {
+ "a": 0.01,
+ "d": "e"
+ },
+ {
+ "a": 0.02,
+ "d": "f"
+ },
+ {
+ "a": "0.01",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 0.01,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, exponent +00",
+ "selector": "$[?@.a==1e+00]",
+ "document": [
+ {
+ "a": 1,
+ "d": "e"
+ },
+ {
+ "a": 2,
+ "d": "f"
+ },
+ {
+ "a": "1",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, decimal fraction",
+ "selector": "$[?@.a==1.1]",
+ "document": [
+ {
+ "a": 1.1,
+ "d": "e"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ },
+ {
+ "a": "1.1",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 1.1,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, decimal fraction, trailing 0",
+ "selector": "$[?@.a==1.10]",
+ "document": [
+ {
+ "a": 1.1,
+ "d": "e"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ },
+ {
+ "a": "1.1",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 1.1,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, decimal fraction, exponent",
+ "selector": "$[?@.a==1.1e2]",
+ "document": [
+ {
+ "a": 110,
+ "d": "e"
+ },
+ {
+ "a": 110.1,
+ "d": "f"
+ },
+ {
+ "a": "110",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 110,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, decimal fraction, positive exponent",
+ "selector": "$[?@.a==1.1e+2]",
+ "document": [
+ {
+ "a": 110,
+ "d": "e"
+ },
+ {
+ "a": 110.1,
+ "d": "f"
+ },
+ {
+ "a": "110",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 110,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, decimal fraction, negative exponent",
+ "selector": "$[?@.a==1.1e-2]",
+ "document": [
+ {
+ "a": 0.011,
+ "d": "e"
+ },
+ {
+ "a": 0.012,
+ "d": "f"
+ },
+ {
+ "a": "0.011",
+ "d": "g"
+ }
+ ],
+ "result": [
+ {
+ "a": 0.011,
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, equals number, invalid plus",
+ "selector": "$[?@.a==+1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid minus space",
+ "selector": "$[?@.a==- 1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid double minus",
+ "selector": "$[?@.a==--1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid no int digit",
+ "selector": "$[?@.a==.1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid minus no int digit",
+ "selector": "$[?@.a==-.1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid 00",
+ "selector": "$[?@.a==00]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid leading 0",
+ "selector": "$[?@.a==01]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid no fractional digit",
+ "selector": "$[?@.a==1.]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid middle minus",
+ "selector": "$[?@.a==1.-1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid no fractional digit e",
+ "selector": "$[?@.a==1.e1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid no e digit",
+ "selector": "$[?@.a==1e]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid no e digit minus",
+ "selector": "$[?@.a==1e-]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid double e",
+ "selector": "$[?@.a==1eE1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid e digit double minus",
+ "selector": "$[?@.a==1e--1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid e digit plus minus",
+ "selector": "$[?@.a==1e+-1]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid e decimal",
+ "selector": "$[?@.a==1e2.3]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals number, invalid multi e",
+ "selector": "$[?@.a==1e2e3]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, equals, special nothing",
+ "selector": "$.values[?length(@.a) == value($..c)]",
+ "document": {
+ "c": "cd",
+ "values": [
+ {
+ "a": "ab"
+ },
+ {
+ "c": "d"
+ },
+ {
+ "a": null
+ }
+ ]
+ },
+ "result": [
+ {
+ "c": "d"
+ },
+ {
+ "a": null
+ }
+ ],
+ "result_paths": [
+ "$['values'][1]",
+ "$['values'][2]"
+ ],
+ "tags": [
+ "function"
+ ]
+ },
+ {
+ "name": "filter, equals, empty node list and empty node list",
+ "selector": "$[?@.a == @.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "c": 3
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ]
+ },
+ {
+ "name": "filter, equals, empty node list and special nothing",
+ "selector": "$[?@.a == length(@.b)]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]"
+ ],
+ "tags": [
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, object data",
+ "selector": "$[?@<3]",
+ "document": {
+ "a": 1,
+ "b": 2,
+ "c": 3
+ },
+ "results": [
+ [
+ 1,
+ 2
+ ],
+ [
+ 2,
+ 1
+ ]
+ ],
+ "results_paths": [
+ [
+ "$['a']",
+ "$['b']"
+ ],
+ [
+ "$['b']",
+ "$['a']"
+ ]
+ ]
+ },
+ {
+ "name": "filter, and binds more tightly than or",
+ "selector": "$[?@.a || @.b && @.c]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2,
+ "c": 3
+ },
+ {
+ "c": 3
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2,
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2,
+ "c": 3
+ },
+ {
+ "a": 1,
+ "b": 2,
+ "c": 3
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[4]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, left to right evaluation",
+ "selector": "$[?@.a && @.b || @.c]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 1,
+ "c": 3
+ },
+ {
+ "b": 1,
+ "c": 3
+ },
+ {
+ "c": 3
+ },
+ {
+ "a": 1,
+ "b": 2,
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 1,
+ "c": 3
+ },
+ {
+ "b": 1,
+ "c": 3
+ },
+ {
+ "c": 3
+ },
+ {
+ "a": 1,
+ "b": 2,
+ "c": 3
+ }
+ ],
+ "result_paths": [
+ "$[2]",
+ "$[3]",
+ "$[4]",
+ "$[5]",
+ "$[6]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, group terms, left",
+ "selector": "$[?(@.a || @.b) && @.c]",
+ "document": [
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 1,
+ "c": 3
+ },
+ {
+ "b": 2,
+ "c": 3
+ },
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ },
+ {
+ "a": 1,
+ "b": 2,
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "c": 3
+ },
+ {
+ "b": 2,
+ "c": 3
+ },
+ {
+ "a": 1,
+ "b": 2,
+ "c": 3
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]",
+ "$[6]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, group terms, right",
+ "selector": "$[?@.a && (@.b || @.c)]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 1,
+ "c": 2
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 2
+ },
+ {
+ "a": 1,
+ "b": 2,
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 1,
+ "c": 2
+ },
+ {
+ "a": 1,
+ "b": 2,
+ "c": 3
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]",
+ "$[5]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, string literal, single quote in double quotes",
+ "selector": "$[?@ == \"quoted' literal\"]",
+ "document": [
+ "quoted' literal",
+ "a",
+ "quoted\\' literal"
+ ],
+ "result": [
+ "quoted' literal"
+ ],
+ "result_paths": [
+ "$[0]"
+ ]
+ },
+ {
+ "name": "filter, string literal, double quote in single quotes",
+ "selector": "$[?@ == 'quoted\" literal']",
+ "document": [
+ "quoted\" literal",
+ "a",
+ "quoted\\\" literal",
+ "'quoted\" literal'"
+ ],
+ "result": [
+ "quoted\" literal"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, string literal, escaped single quote in single quotes",
+ "selector": "$[?@ == 'quoted\\' literal']",
+ "document": [
+ "quoted' literal",
+ "a",
+ "quoted\\' literal",
+ "'quoted\" literal'"
+ ],
+ "result": [
+ "quoted' literal"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, string literal, escaped double quote in double quotes",
+ "selector": "$[?@ == \"quoted\\\" literal\"]",
+ "document": [
+ "quoted\" literal",
+ "a",
+ "quoted\\\" literal",
+ "'quoted\" literal'"
+ ],
+ "result": [
+ "quoted\" literal"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, literal true must be compared",
+ "selector": "$[?true]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, literal false must be compared",
+ "selector": "$[?false]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, literal string must be compared",
+ "selector": "$[?'abc']",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, literal int must be compared",
+ "selector": "$[?2]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, literal float must be compared",
+ "selector": "$[?2.2]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, literal null must be compared",
+ "selector": "$[?null]",
+ "invalid_selector": true
+ },
+ {
+ "name": "filter, and, literals must be compared",
+ "selector": "$[?true && false]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, or, literals must be compared",
+ "selector": "$[?true || false]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, and, right hand literal must be compared",
+ "selector": "$[?true == false && false]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, or, right hand literal must be compared",
+ "selector": "$[?true == false || false]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, and, left hand literal must be compared",
+ "selector": "$[?false && true == false]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, or, left hand literal must be compared",
+ "selector": "$[?false || true == false]",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "filter, true, incorrectly capitalized",
+ "selector": "$[?@==True]",
+ "invalid_selector": true,
+ "tags": [
+ "case"
+ ]
+ },
+ {
+ "name": "filter, false, incorrectly capitalized",
+ "selector": "$[?@==False]",
+ "invalid_selector": true,
+ "tags": [
+ "case"
+ ]
+ },
+ {
+ "name": "filter, null, incorrectly capitalized",
+ "selector": "$[?@==Null]",
+ "invalid_selector": true,
+ "tags": [
+ "case"
+ ]
+ },
+ {
+ "name": "index selector, first element",
+ "selector": "$[0]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [
+ "first"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, second element",
+ "selector": "$[1]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [
+ "second"
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, out of bound",
+ "selector": "$[2]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, min exact index",
+ "selector": "$[-9007199254740991]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, max exact index",
+ "selector": "$[9007199254740991]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, min exact index - 1",
+ "selector": "$[-9007199254740992]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, max exact index + 1",
+ "selector": "$[9007199254740992]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, overflowing index",
+ "selector": "$[231584178474632390847141970017375815706539969331281128078915168015826259279872]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, not actually an index, overflowing index leads into general text",
+ "selector": "$[231584178474632390847141970017375815706539969331281128078915168SomeRandomText]",
+ "invalid_selector": true,
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, negative",
+ "selector": "$[-1]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [
+ "second"
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, more negative",
+ "selector": "$[-2]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [
+ "first"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, negative out of bound",
+ "selector": "$[-3]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, on object",
+ "selector": "$[0]",
+ "document": {
+ "foo": 1
+ },
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, leading 0",
+ "selector": "$[01]",
+ "invalid_selector": true,
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, decimal",
+ "selector": "$[1.0]",
+ "invalid_selector": true,
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, plus",
+ "selector": "$[+1]",
+ "invalid_selector": true,
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, minus space",
+ "selector": "$[- 1]",
+ "invalid_selector": true,
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "index selector, -0",
+ "selector": "$[-0]",
+ "invalid_selector": true,
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "index selector, leading -0",
+ "selector": "$[-01]",
+ "invalid_selector": true,
+ "tags": [
+ "index"
+ ]
+ },
+ {
+ "name": "name selector, double quotes",
+ "selector": "$[\"a\"]",
+ "document": {
+ "a": "A",
+ "b": "B"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['a']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, absent data",
+ "selector": "$[\"c\"]",
+ "document": {
+ "a": "A",
+ "b": "B"
+ },
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "name selector, double quotes, array data",
+ "selector": "$[\"a\"]",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "name selector, name, double quotes, contains single quote",
+ "selector": "$[\"a'\"]",
+ "document": {
+ "a'": "A",
+ "b": "B"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['a\\'']"
+ ]
+ },
+ {
+ "name": "name selector, name, double quotes, nested",
+ "selector": "$[\"a\"][\"b\"][\"c\"]",
+ "document": {
+ "a": {
+ "b": {
+ "c": "C"
+ }
+ }
+ },
+ "result": [
+ "C"
+ ],
+ "result_paths": [
+ "$['a']['b']['c']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0000",
+ "selector": "$[\"\u0000\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0001",
+ "selector": "$[\"\u0001\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0002",
+ "selector": "$[\"\u0002\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0003",
+ "selector": "$[\"\u0003\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0004",
+ "selector": "$[\"\u0004\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0005",
+ "selector": "$[\"\u0005\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0006",
+ "selector": "$[\"\u0006\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0007",
+ "selector": "$[\"\u0007\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0008",
+ "selector": "$[\"\b\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0009",
+ "selector": "$[\"\t\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+000A",
+ "selector": "$[\"\n\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+000B",
+ "selector": "$[\"\u000b\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+000C",
+ "selector": "$[\"\f\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+000D",
+ "selector": "$[\"\r\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+000E",
+ "selector": "$[\"\u000e\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+000F",
+ "selector": "$[\"\u000f\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0010",
+ "selector": "$[\"\u0010\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0011",
+ "selector": "$[\"\u0011\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0012",
+ "selector": "$[\"\u0012\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0013",
+ "selector": "$[\"\u0013\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0014",
+ "selector": "$[\"\u0014\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0015",
+ "selector": "$[\"\u0015\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0016",
+ "selector": "$[\"\u0016\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0017",
+ "selector": "$[\"\u0017\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0018",
+ "selector": "$[\"\u0018\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0019",
+ "selector": "$[\"\u0019\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+001A",
+ "selector": "$[\"\u001a\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+001B",
+ "selector": "$[\"\u001b\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+001C",
+ "selector": "$[\"\u001c\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+001D",
+ "selector": "$[\"\u001d\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+001E",
+ "selector": "$[\"\u001e\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+001F",
+ "selector": "$[\"\u001f\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+0020",
+ "selector": "$[\" \"]",
+ "document": {
+ " ": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$[' ']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, embedded U+007F",
+ "selector": "$[\"\"]",
+ "document": {
+ "": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, supplementary plane character",
+ "selector": "$[\"𝄞\"]",
+ "document": {
+ "𝄞": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['𝄞']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped double quote",
+ "selector": "$[\"\\\"\"]",
+ "document": {
+ "\"": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\"']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped reverse solidus",
+ "selector": "$[\"\\\\\"]",
+ "document": {
+ "\\": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\\\']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped solidus",
+ "selector": "$[\"\\/\"]",
+ "document": {
+ "/": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['/']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped backspace",
+ "selector": "$[\"\\b\"]",
+ "document": {
+ "\b": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\b']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped form feed",
+ "selector": "$[\"\\f\"]",
+ "document": {
+ "\f": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\f']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped line feed",
+ "selector": "$[\"\\n\"]",
+ "document": {
+ "\n": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\n']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped carriage return",
+ "selector": "$[\"\\r\"]",
+ "document": {
+ "\r": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\r']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped tab",
+ "selector": "$[\"\\t\"]",
+ "document": {
+ "\t": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\t']"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped ☺, upper case hex",
+ "selector": "$[\"\\u263A\"]",
+ "document": {
+ "☺": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['☺']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, escaped ☺, lower case hex",
+ "selector": "$[\"\\u263a\"]",
+ "document": {
+ "☺": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['☺']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, surrogate pair 𝄞",
+ "selector": "$[\"\\uD834\\uDD1E\"]",
+ "document": {
+ "𝄞": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['𝄞']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, surrogate pair 😀",
+ "selector": "$[\"\\uD83D\\uDE00\"]",
+ "document": {
+ "😀": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['😀']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, before high surrogates",
+ "selector": "$[\"\\uD7FF\\uD7FF\"]",
+ "document": {
+ "": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, after low surrogates",
+ "selector": "$[\"\\uE000\\uE000\"]",
+ "document": {
+ "": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, invalid escaped single quote",
+ "selector": "$[\"\\'\"]",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, embedded double quote",
+ "selector": "$[\"\"\"]",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, incomplete escape",
+ "selector": "$[\"\\\"]",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, escape at end of line",
+ "selector": "$[\"\\\n\"]",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, question mark escape",
+ "selector": "$[\"\\?\"]",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, bell escape",
+ "selector": "$[\"\\a\"]",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, vertical tab escape",
+ "selector": "$[\"\\v\"]",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, 0 escape",
+ "selector": "$[\"\\0\"]",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, x escape",
+ "selector": "$[\"\\x12\"]",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, n escape",
+ "selector": "$[\"\\N{LATIN CAPITAL LETTER A}\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, unicode escape no hex",
+ "selector": "$[\"\\u\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, unicode escape too few hex",
+ "selector": "$[\"\\u123\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, unicode escape upper u",
+ "selector": "$[\"\\U1234\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, unicode escape upper u long",
+ "selector": "$[\"\\U0010FFFF\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, unicode escape plus",
+ "selector": "$[\"\\u+1234\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, unicode escape brackets",
+ "selector": "$[\"\\u{1234}\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, unicode escape brackets long",
+ "selector": "$[\"\\u{10ffff}\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, single high surrogate",
+ "selector": "$[\"\\uD800\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, single low surrogate",
+ "selector": "$[\"\\uDC00\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, high high surrogate",
+ "selector": "$[\"\\uD800\\uD800\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, low low surrogate",
+ "selector": "$[\"\\uDC00\\uDC00\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, surrogate non-surrogate",
+ "selector": "$[\"\\uD800\\u1234\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, non-surrogate surrogate",
+ "selector": "$[\"\\u1234\\uDC00\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, surrogate supplementary",
+ "selector": "$[\"\\uD800𝄞\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, supplementary surrogate",
+ "selector": "$[\"𝄞\\uDC00\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, double quotes, surrogate incomplete low",
+ "selector": "$[\"\\uD800\\uDC0\"]",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes",
+ "selector": "$['a']",
+ "document": {
+ "a": "A",
+ "b": "B"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['a']"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, absent data",
+ "selector": "$['c']",
+ "document": {
+ "a": "A",
+ "b": "B"
+ },
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "name selector, single quotes, array data",
+ "selector": "$['a']",
+ "document": [
+ "first",
+ "second"
+ ],
+ "result": [],
+ "result_paths": []
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0000",
+ "selector": "$['\u0000']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0001",
+ "selector": "$['\u0001']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0002",
+ "selector": "$['\u0002']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0003",
+ "selector": "$['\u0003']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0004",
+ "selector": "$['\u0004']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0005",
+ "selector": "$['\u0005']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0006",
+ "selector": "$['\u0006']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0007",
+ "selector": "$['\u0007']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0008",
+ "selector": "$['\b']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0009",
+ "selector": "$['\t']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+000A",
+ "selector": "$['\n']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+000B",
+ "selector": "$['\u000b']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+000C",
+ "selector": "$['\f']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+000D",
+ "selector": "$['\r']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+000E",
+ "selector": "$['\u000e']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+000F",
+ "selector": "$['\u000f']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0010",
+ "selector": "$['\u0010']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0011",
+ "selector": "$['\u0011']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0012",
+ "selector": "$['\u0012']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0013",
+ "selector": "$['\u0013']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0014",
+ "selector": "$['\u0014']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0015",
+ "selector": "$['\u0015']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0016",
+ "selector": "$['\u0016']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0017",
+ "selector": "$['\u0017']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0018",
+ "selector": "$['\u0018']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0019",
+ "selector": "$['\u0019']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+001A",
+ "selector": "$['\u001a']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+001B",
+ "selector": "$['\u001b']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+001C",
+ "selector": "$['\u001c']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+001D",
+ "selector": "$['\u001d']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+001E",
+ "selector": "$['\u001e']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+001F",
+ "selector": "$['\u001f']",
+ "invalid_selector": true,
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, embedded U+0020",
+ "selector": "$[' ']",
+ "document": {
+ " ": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$[' ']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped single quote",
+ "selector": "$['\\'']",
+ "document": {
+ "'": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\'']"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped reverse solidus",
+ "selector": "$['\\\\']",
+ "document": {
+ "\\": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\\\']"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped solidus",
+ "selector": "$['\\/']",
+ "document": {
+ "/": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['/']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped backspace",
+ "selector": "$['\\b']",
+ "document": {
+ "\b": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\b']"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped form feed",
+ "selector": "$['\\f']",
+ "document": {
+ "\f": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\f']"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped line feed",
+ "selector": "$['\\n']",
+ "document": {
+ "\n": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\n']"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped carriage return",
+ "selector": "$['\\r']",
+ "document": {
+ "\r": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\r']"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped tab",
+ "selector": "$['\\t']",
+ "document": {
+ "\t": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['\\t']"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped ☺, upper case hex",
+ "selector": "$['\\u263A']",
+ "document": {
+ "☺": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['☺']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, escaped ☺, lower case hex",
+ "selector": "$['\\u263a']",
+ "document": {
+ "☺": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['☺']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, surrogate pair 𝄞",
+ "selector": "$['\\uD834\\uDD1E']",
+ "document": {
+ "𝄞": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['𝄞']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, surrogate pair 😀",
+ "selector": "$['\\uD83D\\uDE00']",
+ "document": {
+ "😀": "A"
+ },
+ "result": [
+ "A"
+ ],
+ "result_paths": [
+ "$['😀']"
+ ],
+ "tags": [
+ "unicode"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, invalid escaped double quote",
+ "selector": "$['\\\"']",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, single quotes, embedded single quote",
+ "selector": "$[''']",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, single quotes, incomplete escape",
+ "selector": "$['\\']",
+ "invalid_selector": true
+ },
+ {
+ "name": "name selector, double quotes, empty",
+ "selector": "$[\"\"]",
+ "document": {
+ "a": "A",
+ "b": "B",
+ "": "C"
+ },
+ "result": [
+ "C"
+ ],
+ "result_paths": [
+ "$['']"
+ ]
+ },
+ {
+ "name": "name selector, single quotes, empty",
+ "selector": "$['']",
+ "document": {
+ "a": "A",
+ "b": "B",
+ "": "C"
+ },
+ "result": [
+ "C"
+ ],
+ "result_paths": [
+ "$['']"
+ ]
+ },
+ {
+ "name": "slice selector, slice selector",
+ "selector": "$[1:3]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 1,
+ 2
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, slice selector with step",
+ "selector": "$[1:6:2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 1,
+ 3,
+ 5
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]",
+ "$[5]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, slice selector with everything omitted, short form",
+ "selector": "$[:]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "result": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[2]",
+ "$[3]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, slice selector with everything omitted, long form",
+ "selector": "$[::]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "result": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[2]",
+ "$[3]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, slice selector with start omitted",
+ "selector": "$[:2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 0,
+ 1
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, slice selector with start and end omitted",
+ "selector": "$[::2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 0,
+ 2,
+ 4,
+ 6,
+ 8
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]",
+ "$[4]",
+ "$[6]",
+ "$[8]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative step with default start and end",
+ "selector": "$[::-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "result": [
+ 3,
+ 2,
+ 1,
+ 0
+ ],
+ "result_paths": [
+ "$[3]",
+ "$[2]",
+ "$[1]",
+ "$[0]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative step with default start",
+ "selector": "$[:0:-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "result": [
+ 3,
+ 2,
+ 1
+ ],
+ "result_paths": [
+ "$[3]",
+ "$[2]",
+ "$[1]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative step with default end",
+ "selector": "$[2::-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "result": [
+ 2,
+ 1,
+ 0
+ ],
+ "result_paths": [
+ "$[2]",
+ "$[1]",
+ "$[0]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, larger negative step",
+ "selector": "$[::-2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "result": [
+ 3,
+ 1
+ ],
+ "result_paths": [
+ "$[3]",
+ "$[1]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative range with default step",
+ "selector": "$[-1:-3]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative range with negative step",
+ "selector": "$[-1:-3:-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 9,
+ 8
+ ],
+ "result_paths": [
+ "$[9]",
+ "$[8]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative range with larger negative step",
+ "selector": "$[-1:-6:-2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 9,
+ 7,
+ 5
+ ],
+ "result_paths": [
+ "$[9]",
+ "$[7]",
+ "$[5]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, larger negative range with larger negative step",
+ "selector": "$[-1:-7:-2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 9,
+ 7,
+ 5
+ ],
+ "result_paths": [
+ "$[9]",
+ "$[7]",
+ "$[5]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative from, positive to",
+ "selector": "$[-5:7]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 5,
+ 6
+ ],
+ "result_paths": [
+ "$[5]",
+ "$[6]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative from",
+ "selector": "$[-2:]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 8,
+ 9
+ ],
+ "result_paths": [
+ "$[8]",
+ "$[9]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, positive from, negative to",
+ "selector": "$[1:-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]",
+ "$[3]",
+ "$[4]",
+ "$[5]",
+ "$[6]",
+ "$[7]",
+ "$[8]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative from, positive to, negative step",
+ "selector": "$[-1:1:-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 9,
+ 8,
+ 7,
+ 6,
+ 5,
+ 4,
+ 3,
+ 2
+ ],
+ "result_paths": [
+ "$[9]",
+ "$[8]",
+ "$[7]",
+ "$[6]",
+ "$[5]",
+ "$[4]",
+ "$[3]",
+ "$[2]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, positive from, negative to, negative step",
+ "selector": "$[7:-5:-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 7,
+ 6
+ ],
+ "result_paths": [
+ "$[7]",
+ "$[6]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, in serial, on nested array",
+ "selector": "$[1:3][1:2]",
+ "document": [
+ [
+ "a",
+ "b",
+ "c"
+ ],
+ [
+ "d",
+ "e",
+ "f"
+ ],
+ [
+ "g",
+ "h",
+ "i"
+ ]
+ ],
+ "result": [
+ "e",
+ "h"
+ ],
+ "result_paths": [
+ "$[1][1]",
+ "$[2][1]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, in serial, on flat array",
+ "selector": "$[1:3][::]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative from, negative to, positive step",
+ "selector": "$[-5:-2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 5,
+ 6,
+ 7
+ ],
+ "result_paths": [
+ "$[5]",
+ "$[6]",
+ "$[7]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, too many colons",
+ "selector": "$[1:2:3:4]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, non-integer array index",
+ "selector": "$[1:2:a]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, zero step",
+ "selector": "$[1:2:0]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, empty range",
+ "selector": "$[2:2]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, slice selector with everything omitted with empty array",
+ "selector": "$[:]",
+ "document": [],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, negative step with empty array",
+ "selector": "$[::-1]",
+ "document": [],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, maximal range with positive step",
+ "selector": "$[0:10]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]",
+ "$[2]",
+ "$[3]",
+ "$[4]",
+ "$[5]",
+ "$[6]",
+ "$[7]",
+ "$[8]",
+ "$[9]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, maximal range with negative step",
+ "selector": "$[9:0:-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 9,
+ 8,
+ 7,
+ 6,
+ 5,
+ 4,
+ 3,
+ 2,
+ 1
+ ],
+ "result_paths": [
+ "$[9]",
+ "$[8]",
+ "$[7]",
+ "$[6]",
+ "$[5]",
+ "$[4]",
+ "$[3]",
+ "$[2]",
+ "$[1]"
+ ],
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, excessively large to value",
+ "selector": "$[2:113667776004]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result_paths": [
+ "$[2]",
+ "$[3]",
+ "$[4]",
+ "$[5]",
+ "$[6]",
+ "$[7]",
+ "$[8]",
+ "$[9]"
+ ],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, excessively small from value",
+ "selector": "$[-113667776004:1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 0
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, excessively large from value with negative step",
+ "selector": "$[113667776004:0:-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 9,
+ 8,
+ 7,
+ 6,
+ 5,
+ 4,
+ 3,
+ 2,
+ 1
+ ],
+ "result_paths": [
+ "$[9]",
+ "$[8]",
+ "$[7]",
+ "$[6]",
+ "$[5]",
+ "$[4]",
+ "$[3]",
+ "$[2]",
+ "$[1]"
+ ],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, excessively small to value with negative step",
+ "selector": "$[3:-113667776004:-1]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 3,
+ 2,
+ 1,
+ 0
+ ],
+ "result_paths": [
+ "$[3]",
+ "$[2]",
+ "$[1]",
+ "$[0]"
+ ],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, excessively large step",
+ "selector": "$[1:10:113667776004]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 1
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, excessively small step",
+ "selector": "$[-1:-10:-113667776004]",
+ "document": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "result": [
+ 9
+ ],
+ "result_paths": [
+ "$[9]"
+ ],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, min exact",
+ "selector": "$[-9007199254740991::]",
+ "document": [],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, max exact",
+ "selector": "$[9007199254740991::]",
+ "document": [],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, min exact - 1",
+ "selector": "$[-9007199254740992::]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, max exact + 1",
+ "selector": "$[9007199254740992::]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, min exact",
+ "selector": "$[:-9007199254740991:]",
+ "document": [],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, max exact",
+ "selector": "$[:9007199254740991:]",
+ "document": [],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, min exact - 1",
+ "selector": "$[:-9007199254740992:]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, max exact + 1",
+ "selector": "$[:9007199254740992:]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, min exact",
+ "selector": "$[::-9007199254740991]",
+ "document": [],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, max exact",
+ "selector": "$[::9007199254740991]",
+ "document": [],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, min exact - 1",
+ "selector": "$[::-9007199254740992]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, max exact + 1",
+ "selector": "$[::9007199254740992]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, overflowing to value",
+ "selector": "$[2:231584178474632390847141970017375815706539969331281128078915168015826259279872]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, underflowing from value",
+ "selector": "$[-231584178474632390847141970017375815706539969331281128078915168015826259279872:1]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, overflowing from value with negative step",
+ "selector": "$[231584178474632390847141970017375815706539969331281128078915168015826259279872:0:-1]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, underflowing to value with negative step",
+ "selector": "$[3:-231584178474632390847141970017375815706539969331281128078915168015826259279872:-1]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, overflowing step",
+ "selector": "$[1:10:231584178474632390847141970017375815706539969331281128078915168015826259279872]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, underflowing step",
+ "selector": "$[-1:-10:-231584178474632390847141970017375815706539969331281128078915168015826259279872]",
+ "invalid_selector": true,
+ "tags": [
+ "boundary",
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, leading 0",
+ "selector": "$[01::]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, decimal",
+ "selector": "$[1.0::]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, plus",
+ "selector": "$[+1::]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, minus space",
+ "selector": "$[- 1::]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, -0",
+ "selector": "$[-0::]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, start, leading -0",
+ "selector": "$[-01::]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, leading 0",
+ "selector": "$[:01:]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, decimal",
+ "selector": "$[:1.0:]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, plus",
+ "selector": "$[:+1:]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, minus space",
+ "selector": "$[:- 1:]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, -0",
+ "selector": "$[:-0:]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, end, leading -0",
+ "selector": "$[:-01:]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, leading 0",
+ "selector": "$[::01]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, decimal",
+ "selector": "$[::1.0]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, plus",
+ "selector": "$[::+1]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, minus space",
+ "selector": "$[::- 1]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, -0",
+ "selector": "$[::-0]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "slice selector, step, leading -0",
+ "selector": "$[::-01]",
+ "invalid_selector": true,
+ "tags": [
+ "slice"
+ ]
+ },
+ {
+ "name": "functions, count, count function",
+ "selector": "$[?count(@..*)>2]",
+ "document": [
+ {
+ "a": [
+ 1,
+ 2,
+ 3
+ ]
+ },
+ {
+ "a": [
+ 1
+ ],
+ "d": "f"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": [
+ 1,
+ 2,
+ 3
+ ]
+ },
+ {
+ "a": [
+ 1
+ ],
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, single-node arg",
+ "selector": "$[?count(@.a)>1]",
+ "document": [
+ {
+ "a": [
+ 1,
+ 2,
+ 3
+ ]
+ },
+ {
+ "a": [
+ 1
+ ],
+ "d": "f"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, multiple-selector arg",
+ "selector": "$[?count(@['a','d'])>1]",
+ "document": [
+ {
+ "a": [
+ 1,
+ 2,
+ 3
+ ]
+ },
+ {
+ "a": [
+ 1
+ ],
+ "d": "f"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": [
+ 1
+ ],
+ "d": "f"
+ },
+ {
+ "a": 1,
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[2]"
+ ],
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, non-query arg, number",
+ "selector": "$[?count(1)>2]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, non-query arg, string",
+ "selector": "$[?count('string')>2]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, non-query arg, true",
+ "selector": "$[?count(true)>2]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, non-query arg, false",
+ "selector": "$[?count(false)>2]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, non-query arg, null",
+ "selector": "$[?count(null)>2]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, result must be compared",
+ "selector": "$[?count(@..*)]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, no params",
+ "selector": "$[?count()==1]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, count, too many params",
+ "selector": "$[?count(@.a,@.b)==1]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function"
+ ]
+ },
+ {
+ "name": "functions, length, string data",
+ "selector": "$[?length(@.a)>=2]",
+ "document": [
+ {
+ "a": "ab"
+ },
+ {
+ "a": "d"
+ }
+ ],
+ "result": [
+ {
+ "a": "ab"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, string data, unicode",
+ "selector": "$[?length(@)==2]",
+ "document": [
+ "☺",
+ "☺☺",
+ "☺☺☺",
+ "ж",
+ "жж",
+ "жжж",
+ "磨",
+ "阿美",
+ "形声字"
+ ],
+ "result": [
+ "☺☺",
+ "жж",
+ "阿美"
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[4]",
+ "$[7]"
+ ],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, array data",
+ "selector": "$[?length(@.a)>=2]",
+ "document": [
+ {
+ "a": [
+ 1,
+ 2,
+ 3
+ ]
+ },
+ {
+ "a": [
+ 1
+ ]
+ }
+ ],
+ "result": [
+ {
+ "a": [
+ 1,
+ 2,
+ 3
+ ]
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, missing data",
+ "selector": "$[?length(@.a)>=2]",
+ "document": [
+ {
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, number arg",
+ "selector": "$[?length(1)>=2]",
+ "document": [
+ {
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, true arg",
+ "selector": "$[?length(true)>=2]",
+ "document": [
+ {
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, false arg",
+ "selector": "$[?length(false)>=2]",
+ "document": [
+ {
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, null arg",
+ "selector": "$[?length(null)>=2]",
+ "document": [
+ {
+ "d": "f"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, result must be compared",
+ "selector": "$[?length(@.a)]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, no params",
+ "selector": "$[?length()==1]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, too many params",
+ "selector": "$[?length(@.a,@.b)==1]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, non-singular query arg",
+ "selector": "$[?length(@.*)<3]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, arg is a function expression",
+ "selector": "$.values[?length(@.a)==length(value($..c))]",
+ "document": {
+ "c": "cd",
+ "values": [
+ {
+ "a": "ab"
+ },
+ {
+ "a": "d"
+ }
+ ]
+ },
+ "result": [
+ {
+ "a": "ab"
+ }
+ ],
+ "result_paths": [
+ "$['values'][0]"
+ ],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, length, arg is special nothing",
+ "selector": "$[?length(value(@.a))>0]",
+ "document": [
+ {
+ "a": "ab"
+ },
+ {
+ "c": "d"
+ },
+ {
+ "a": null
+ }
+ ],
+ "result": [
+ {
+ "a": "ab"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "length"
+ ]
+ },
+ {
+ "name": "functions, match, found match",
+ "selector": "$[?match(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "ab"
+ }
+ ],
+ "result": [
+ {
+ "a": "ab"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, double quotes",
+ "selector": "$[?match(@.a, \"a.*\")]",
+ "document": [
+ {
+ "a": "ab"
+ }
+ ],
+ "result": [
+ {
+ "a": "ab"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, regex from the document",
+ "selector": "$.values[?match(@, $.regex)]",
+ "document": {
+ "regex": "b.?b",
+ "values": [
+ "abc",
+ "bcd",
+ "bab",
+ "bba",
+ "bbab",
+ "b",
+ true,
+ [],
+ {}
+ ]
+ },
+ "result": [
+ "bab"
+ ],
+ "result_paths": [
+ "$['values'][2]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, don't select match",
+ "selector": "$[?!match(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "ab"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, not a match",
+ "selector": "$[?match(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, select non-match",
+ "selector": "$[?!match(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, non-string first arg",
+ "selector": "$[?match(1, 'a.*')]",
+ "document": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, non-string second arg",
+ "selector": "$[?match(@.a, 1)]",
+ "document": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, filter, match function, unicode char class, uppercase",
+ "selector": "$[?match(@, '\\\\p{Lu}')]",
+ "document": [
+ "ж",
+ "Ж",
+ "1",
+ "жЖ",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "Ж"
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, filter, match function, unicode char class negated, uppercase",
+ "selector": "$[?match(@, '\\\\P{Lu}')]",
+ "document": [
+ "ж",
+ "Ж",
+ "1",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "ж",
+ "1"
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, filter, match function, unicode, surrogate pair",
+ "selector": "$[?match(@, 'a.b')]",
+ "document": [
+ "a𐄁b",
+ "ab",
+ "1",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "a𐄁b"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, dot matcher on \\u2028",
+ "selector": "$[?match(@, '.')]",
+ "document": [
+ "
",
+ "\r",
+ "\n",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "
"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, dot matcher on \\u2029",
+ "selector": "$[?match(@, '.')]",
+ "document": [
+ "
",
+ "\r",
+ "\n",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "
"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, result cannot be compared",
+ "selector": "$[?match(@.a, 'a.*')==true]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, too few params",
+ "selector": "$[?match(@.a)==1]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, too many params",
+ "selector": "$[?match(@.a,@.b,@.c)==1]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, arg is a function expression",
+ "selector": "$.values[?match(@.a, value($..['regex']))]",
+ "document": {
+ "regex": "a.*",
+ "values": [
+ {
+ "a": "ab"
+ },
+ {
+ "a": "ba"
+ }
+ ]
+ },
+ "result": [
+ {
+ "a": "ab"
+ }
+ ],
+ "result_paths": [
+ "$['values'][0]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, dot in character class",
+ "selector": "$[?match(@, 'a[.b]c')]",
+ "document": [
+ "abc",
+ "a.c",
+ "axc"
+ ],
+ "result": [
+ "abc",
+ "a.c"
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, escaped dot",
+ "selector": "$[?match(@, 'a\\\\.c')]",
+ "document": [
+ "abc",
+ "a.c",
+ "axc"
+ ],
+ "result": [
+ "a.c"
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, escaped backslash before dot",
+ "selector": "$[?match(@, 'a\\\\\\\\.c')]",
+ "document": [
+ "abc",
+ "a.c",
+ "axc",
+ "a\\
c"
+ ],
+ "result": [
+ "a\\
c"
+ ],
+ "result_paths": [
+ "$[3]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, escaped left square bracket",
+ "selector": "$[?match(@, 'a\\\\[.c')]",
+ "document": [
+ "abc",
+ "a.c",
+ "a[
c"
+ ],
+ "result": [
+ "a[
c"
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, escaped right square bracket",
+ "selector": "$[?match(@, 'a[\\\\].]c')]",
+ "document": [
+ "abc",
+ "a.c",
+ "a
c",
+ "a]c"
+ ],
+ "result": [
+ "a.c",
+ "a]c"
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, explicit caret",
+ "selector": "$[?match(@, '^ab.*')]",
+ "document": [
+ "abc",
+ "axc",
+ "ab",
+ "xab"
+ ],
+ "result": [
+ "abc",
+ "ab"
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, match, explicit dollar",
+ "selector": "$[?match(@, '.*bc$')]",
+ "document": [
+ "abc",
+ "axc",
+ "ab",
+ "abcx"
+ ],
+ "result": [
+ "abc"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "match"
+ ]
+ },
+ {
+ "name": "functions, search, at the end",
+ "selector": "$[?search(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "the end is ab"
+ }
+ ],
+ "result": [
+ {
+ "a": "the end is ab"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, double quotes",
+ "selector": "$[?search(@.a, \"a.*\")]",
+ "document": [
+ {
+ "a": "the end is ab"
+ }
+ ],
+ "result": [
+ {
+ "a": "the end is ab"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, at the start",
+ "selector": "$[?search(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "ab is at the start"
+ }
+ ],
+ "result": [
+ {
+ "a": "ab is at the start"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, in the middle",
+ "selector": "$[?search(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "contains two matches"
+ }
+ ],
+ "result": [
+ {
+ "a": "contains two matches"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, regex from the document",
+ "selector": "$.values[?search(@, $.regex)]",
+ "document": {
+ "regex": "b.?b",
+ "values": [
+ "abc",
+ "bcd",
+ "bab",
+ "bba",
+ "bbab",
+ "b",
+ true,
+ [],
+ {}
+ ]
+ },
+ "result": [
+ "bab",
+ "bba",
+ "bbab"
+ ],
+ "result_paths": [
+ "$['values'][2]",
+ "$['values'][3]",
+ "$['values'][4]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, don't select match",
+ "selector": "$[?!search(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "contains two matches"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, not a match",
+ "selector": "$[?search(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, select non-match",
+ "selector": "$[?!search(@.a, 'a.*')]",
+ "document": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, non-string first arg",
+ "selector": "$[?search(1, 'a.*')]",
+ "document": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, non-string second arg",
+ "selector": "$[?search(@.a, 1)]",
+ "document": [
+ {
+ "a": "bc"
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, filter, search function, unicode char class, uppercase",
+ "selector": "$[?search(@, '\\\\p{Lu}')]",
+ "document": [
+ "ж",
+ "Ж",
+ "1",
+ "жЖ",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "Ж",
+ "жЖ"
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, filter, search function, unicode char class negated, uppercase",
+ "selector": "$[?search(@, '\\\\P{Lu}')]",
+ "document": [
+ "ж",
+ "Ж",
+ "1",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "ж",
+ "1"
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, filter, search function, unicode, surrogate pair",
+ "selector": "$[?search(@, 'a.b')]",
+ "document": [
+ "a𐄁bc",
+ "abc",
+ "1",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "a𐄁bc"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, dot matcher on \\u2028",
+ "selector": "$[?search(@, '.')]",
+ "document": [
+ "
",
+ "\r
\n",
+ "\r",
+ "\n",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "
",
+ "\r
\n"
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, dot matcher on \\u2029",
+ "selector": "$[?search(@, '.')]",
+ "document": [
+ "
",
+ "\r
\n",
+ "\r",
+ "\n",
+ true,
+ [],
+ {}
+ ],
+ "result": [
+ "
",
+ "\r
\n"
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, result cannot be compared",
+ "selector": "$[?search(@.a, 'a.*')==true]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, too few params",
+ "selector": "$[?search(@.a)]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, too many params",
+ "selector": "$[?search(@.a,@.b,@.c)]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, arg is a function expression",
+ "selector": "$.values[?search(@, value($..['regex']))]",
+ "document": {
+ "regex": "b.?b",
+ "values": [
+ "abc",
+ "bcd",
+ "bab",
+ "bba",
+ "bbab",
+ "b",
+ true,
+ [],
+ {}
+ ]
+ },
+ "result": [
+ "bab",
+ "bba",
+ "bbab"
+ ],
+ "result_paths": [
+ "$['values'][2]",
+ "$['values'][3]",
+ "$['values'][4]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, dot in character class",
+ "selector": "$[?search(@, 'a[.b]c')]",
+ "document": [
+ "x abc y",
+ "x a.c y",
+ "x axc y"
+ ],
+ "result": [
+ "x abc y",
+ "x a.c y"
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, escaped dot",
+ "selector": "$[?search(@, 'a\\\\.c')]",
+ "document": [
+ "x abc y",
+ "x a.c y",
+ "x axc y"
+ ],
+ "result": [
+ "x a.c y"
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, escaped backslash before dot",
+ "selector": "$[?search(@, 'a\\\\\\\\.c')]",
+ "document": [
+ "x abc y",
+ "x a.c y",
+ "x axc y",
+ "x a\\
c y"
+ ],
+ "result": [
+ "x a\\
c y"
+ ],
+ "result_paths": [
+ "$[3]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, escaped left square bracket",
+ "selector": "$[?search(@, 'a\\\\[.c')]",
+ "document": [
+ "x abc y",
+ "x a.c y",
+ "x a[
c y"
+ ],
+ "result": [
+ "x a[
c y"
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, search, escaped right square bracket",
+ "selector": "$[?search(@, 'a[\\\\].]c')]",
+ "document": [
+ "x abc y",
+ "x a.c y",
+ "x a
c y",
+ "x a]c y"
+ ],
+ "result": [
+ "x a.c y",
+ "x a]c y"
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "function",
+ "search"
+ ]
+ },
+ {
+ "name": "functions, value, single-value nodelist",
+ "selector": "$[?value(@.*)==4]",
+ "document": [
+ [
+ 4
+ ],
+ {
+ "foo": 4
+ },
+ [
+ 5
+ ],
+ {
+ "foo": 5
+ },
+ 4
+ ],
+ "result": [
+ [
+ 4
+ ],
+ {
+ "foo": 4
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "function",
+ "value"
+ ]
+ },
+ {
+ "name": "functions, value, multi-value nodelist",
+ "selector": "$[?value(@.*)==4]",
+ "document": [
+ [
+ 4,
+ 4
+ ],
+ {
+ "foo": 4,
+ "bar": 4
+ }
+ ],
+ "result": [],
+ "result_paths": [],
+ "tags": [
+ "function",
+ "value"
+ ]
+ },
+ {
+ "name": "functions, value, too few params",
+ "selector": "$[?value()==4]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "value"
+ ]
+ },
+ {
+ "name": "functions, value, too many params",
+ "selector": "$[?value(@.a,@.b)==4]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "value"
+ ]
+ },
+ {
+ "name": "functions, value, result must be compared",
+ "selector": "$[?value(@.a)]",
+ "invalid_selector": true,
+ "tags": [
+ "function",
+ "value"
+ ]
+ },
+ {
+ "name": "whitespace, filter, space between question mark and expression",
+ "selector": "$[? @.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, newline between question mark and expression",
+ "selector": "$[?\n@.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, tab between question mark and expression",
+ "selector": "$[?\t@.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, return between question mark and expression",
+ "selector": "$[?\r@.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, space between question mark and parenthesized expression",
+ "selector": "$[? (@.a)]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, newline between question mark and parenthesized expression",
+ "selector": "$[?\n(@.a)]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, tab between question mark and parenthesized expression",
+ "selector": "$[?\t(@.a)]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, return between question mark and parenthesized expression",
+ "selector": "$[?\r(@.a)]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, space between parenthesized expression and bracket",
+ "selector": "$[?(@.a) ]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, newline between parenthesized expression and bracket",
+ "selector": "$[?(@.a)\n]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, tab between parenthesized expression and bracket",
+ "selector": "$[?(@.a)\t]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, return between parenthesized expression and bracket",
+ "selector": "$[?(@.a)\r]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, space between bracket and question mark",
+ "selector": "$[ ?@.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, newline between bracket and question mark",
+ "selector": "$[\n?@.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, tab between bracket and question mark",
+ "selector": "$[\t?@.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, filter, return between bracket and question mark",
+ "selector": "$[\r?@.a]",
+ "document": [
+ {
+ "a": "b",
+ "d": "e"
+ },
+ {
+ "b": "c",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "b",
+ "d": "e"
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, space between function name and parenthesis",
+ "selector": "$[?count (@.*)==1]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, newline between function name and parenthesis",
+ "selector": "$[?count\n(@.*)==1]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, tab between function name and parenthesis",
+ "selector": "$[?count\t(@.*)==1]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, return between function name and parenthesis",
+ "selector": "$[?count\r(@.*)==1]",
+ "invalid_selector": true,
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, space between parenthesis and arg",
+ "selector": "$[?count( @.*)==1]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, newline between parenthesis and arg",
+ "selector": "$[?count(\n@.*)==1]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, tab between parenthesis and arg",
+ "selector": "$[?count(\t@.*)==1]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, return between parenthesis and arg",
+ "selector": "$[?count(\r@.*)==1]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, space between arg and comma",
+ "selector": "$[?search(@ ,'[a-z]+')]",
+ "document": [
+ "foo",
+ "123"
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, newline between arg and comma",
+ "selector": "$[?search(@\n,'[a-z]+')]",
+ "document": [
+ "foo",
+ "123"
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, tab between arg and comma",
+ "selector": "$[?search(@\t,'[a-z]+')]",
+ "document": [
+ "foo",
+ "123"
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, return between arg and comma",
+ "selector": "$[?search(@\r,'[a-z]+')]",
+ "document": [
+ "foo",
+ "123"
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, space between comma and arg",
+ "selector": "$[?search(@, '[a-z]+')]",
+ "document": [
+ "foo",
+ "123"
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, newline between comma and arg",
+ "selector": "$[?search(@,\n'[a-z]+')]",
+ "document": [
+ "foo",
+ "123"
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, tab between comma and arg",
+ "selector": "$[?search(@,\t'[a-z]+')]",
+ "document": [
+ "foo",
+ "123"
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, return between comma and arg",
+ "selector": "$[?search(@,\r'[a-z]+')]",
+ "document": [
+ "foo",
+ "123"
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "search",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, space between arg and parenthesis",
+ "selector": "$[?count(@.* )==1]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "function",
+ "search",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, newline between arg and parenthesis",
+ "selector": "$[?count(@.*\n)==1]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, tab between arg and parenthesis",
+ "selector": "$[?count(@.*\t)==1]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, return between arg and parenthesis",
+ "selector": "$[?count(@.*\r)==1]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "count",
+ "function",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, spaces in a relative singular selector",
+ "selector": "$[?length(@ .a .b) == 3]",
+ "document": [
+ {
+ "a": {
+ "b": "foo"
+ }
+ },
+ {}
+ ],
+ "result": [
+ {
+ "a": {
+ "b": "foo"
+ }
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "length",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, newlines in a relative singular selector",
+ "selector": "$[?length(@\n.a\n.b) == 3]",
+ "document": [
+ {
+ "a": {
+ "b": "foo"
+ }
+ },
+ {}
+ ],
+ "result": [
+ {
+ "a": {
+ "b": "foo"
+ }
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "length",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, tabs in a relative singular selector",
+ "selector": "$[?length(@\t.a\t.b) == 3]",
+ "document": [
+ {
+ "a": {
+ "b": "foo"
+ }
+ },
+ {}
+ ],
+ "result": [
+ {
+ "a": {
+ "b": "foo"
+ }
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "length",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, returns in a relative singular selector",
+ "selector": "$[?length(@\r.a\r.b) == 3]",
+ "document": [
+ {
+ "a": {
+ "b": "foo"
+ }
+ },
+ {}
+ ],
+ "result": [
+ {
+ "a": {
+ "b": "foo"
+ }
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "function",
+ "length",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, spaces in an absolute singular selector",
+ "selector": "$..[?length(@)==length($ [0] .a)]",
+ "document": [
+ {
+ "a": "foo"
+ },
+ {}
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]['a']"
+ ],
+ "tags": [
+ "function",
+ "length",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, newlines in an absolute singular selector",
+ "selector": "$..[?length(@)==length($\n[0]\n.a)]",
+ "document": [
+ {
+ "a": "foo"
+ },
+ {}
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]['a']"
+ ],
+ "tags": [
+ "function",
+ "length",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, tabs in an absolute singular selector",
+ "selector": "$..[?length(@)==length($\t[0]\t.a)]",
+ "document": [
+ {
+ "a": "foo"
+ },
+ {}
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]['a']"
+ ],
+ "tags": [
+ "function",
+ "length",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, functions, returns in an absolute singular selector",
+ "selector": "$..[?length(@)==length($\r[0]\r.a)]",
+ "document": [
+ {
+ "a": "foo"
+ },
+ {}
+ ],
+ "result": [
+ "foo"
+ ],
+ "result_paths": [
+ "$[0]['a']"
+ ],
+ "tags": [
+ "function",
+ "length",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space before ||",
+ "selector": "$[?@.a ||@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline before ||",
+ "selector": "$[?@.a\n||@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab before ||",
+ "selector": "$[?@.a\t||@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return before ||",
+ "selector": "$[?@.a\r||@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space after ||",
+ "selector": "$[?@.a|| @.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline after ||",
+ "selector": "$[?@.a||\n@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab after ||",
+ "selector": "$[?@.a||\t@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return after ||",
+ "selector": "$[?@.a||\r@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "c": 3
+ }
+ ],
+ "result": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space before &&",
+ "selector": "$[?@.a &&@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline before &&",
+ "selector": "$[?@.a\n&&@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab before &&",
+ "selector": "$[?@.a\t&&@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return before &&",
+ "selector": "$[?@.a\r&&@.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space after &&",
+ "selector": "$[?@.a&& @.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline after &&",
+ "selector": "$[?@.a&& @.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab after &&",
+ "selector": "$[?@.a&& @.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return after &&",
+ "selector": "$[?@.a&& @.b]",
+ "document": [
+ {
+ "a": 1
+ },
+ {
+ "b": 2
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space before ==",
+ "selector": "$[?@.a ==@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline before ==",
+ "selector": "$[?@.a\n==@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab before ==",
+ "selector": "$[?@.a\t==@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return before ==",
+ "selector": "$[?@.a\r==@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space after ==",
+ "selector": "$[?@.a== @.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline after ==",
+ "selector": "$[?@.a==\n@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab after ==",
+ "selector": "$[?@.a==\t@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return after ==",
+ "selector": "$[?@.a==\r@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ }
+ ],
+ "result_paths": [
+ "$[0]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space before !=",
+ "selector": "$[?@.a !=@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline before !=",
+ "selector": "$[?@.a\n!=@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab before !=",
+ "selector": "$[?@.a\t!=@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return before !=",
+ "selector": "$[?@.a\r!=@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space after !=",
+ "selector": "$[?@.a!= @.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline after !=",
+ "selector": "$[?@.a!=\n@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab after !=",
+ "selector": "$[?@.a!=\t@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return after !=",
+ "selector": "$[?@.a!=\r@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space before <",
+ "selector": "$[?@.a <@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline before <",
+ "selector": "$[?@.a\n<@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab before <",
+ "selector": "$[?@.a\t<@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return before <",
+ "selector": "$[?@.a\r<@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space after <",
+ "selector": "$[?@.a< @.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline after <",
+ "selector": "$[?@.a<\n@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab after <",
+ "selector": "$[?@.a<\t@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return after <",
+ "selector": "$[?@.a<\r@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space before >",
+ "selector": "$[?@.b >@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline before >",
+ "selector": "$[?@.b\n>@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab before >",
+ "selector": "$[?@.b\t>@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return before >",
+ "selector": "$[?@.b\r>@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space after >",
+ "selector": "$[?@.b> @.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline after >",
+ "selector": "$[?@.b>\n@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab after >",
+ "selector": "$[?@.b>\t@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return after >",
+ "selector": "$[?@.b>\r@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space before <=",
+ "selector": "$[?@.a <=@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline before <=",
+ "selector": "$[?@.a\n<=@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab before <=",
+ "selector": "$[?@.a\t<=@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return before <=",
+ "selector": "$[?@.a\r<=@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space after <=",
+ "selector": "$[?@.a<= @.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline after <=",
+ "selector": "$[?@.a<=\n@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab after <=",
+ "selector": "$[?@.a<=\t@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return after <=",
+ "selector": "$[?@.a<=\r@.b]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space before >=",
+ "selector": "$[?@.b >=@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline before >=",
+ "selector": "$[?@.b\n>=@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab before >=",
+ "selector": "$[?@.b\t>=@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return before >=",
+ "selector": "$[?@.b\r>=@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space after >=",
+ "selector": "$[?@.b>= @.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline after >=",
+ "selector": "$[?@.b>=\n@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab after >=",
+ "selector": "$[?@.b>=\t@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return after >=",
+ "selector": "$[?@.b>=\r@.a]",
+ "document": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ },
+ {
+ "a": 2,
+ "b": 1
+ }
+ ],
+ "result": [
+ {
+ "a": 1,
+ "b": 1
+ },
+ {
+ "a": 1,
+ "b": 2
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space between logical not and test expression",
+ "selector": "$[?! @.a]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline between logical not and test expression",
+ "selector": "$[?!\n@.a]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab between logical not and test expression",
+ "selector": "$[?!\t@.a]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return between logical not and test expression",
+ "selector": "$[?!\r@.a]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[1]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, space between logical not and parenthesized expression",
+ "selector": "$[?! (@.a=='b')]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "b",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, newline between logical not and parenthesized expression",
+ "selector": "$[?!\n(@.a=='b')]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "b",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, tab between logical not and parenthesized expression",
+ "selector": "$[?!\t(@.a=='b')]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "b",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, operators, return between logical not and parenthesized expression",
+ "selector": "$[?!\r(@.a=='b')]",
+ "document": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "b",
+ "d": "f"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result": [
+ {
+ "a": "a",
+ "d": "e"
+ },
+ {
+ "a": "d",
+ "d": "f"
+ }
+ ],
+ "result_paths": [
+ "$[0]",
+ "$[2]"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, space between root and bracket",
+ "selector": "$ ['a']",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, newline between root and bracket",
+ "selector": "$\n['a']",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, tab between root and bracket",
+ "selector": "$\t['a']",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, return between root and bracket",
+ "selector": "$\r['a']",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, space between bracket and bracket",
+ "selector": "$['a'] ['b']",
+ "document": {
+ "a": {
+ "b": "ab"
+ }
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, newline between bracket and bracket",
+ "selector": "$['a'] \n['b']",
+ "document": {
+ "a": {
+ "b": "ab"
+ }
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, tab between bracket and bracket",
+ "selector": "$['a'] \t['b']",
+ "document": {
+ "a": {
+ "b": "ab"
+ }
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, return between bracket and bracket",
+ "selector": "$['a'] \r['b']",
+ "document": {
+ "a": {
+ "b": "ab"
+ }
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, space between root and dot",
+ "selector": "$ .a",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, newline between root and dot",
+ "selector": "$\n.a",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, tab between root and dot",
+ "selector": "$\t.a",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, return between root and dot",
+ "selector": "$\r.a",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, space between dot and name",
+ "selector": "$. a",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, newline between dot and name",
+ "selector": "$.\na",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, tab between dot and name",
+ "selector": "$.\ta",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, return between dot and name",
+ "selector": "$.\ra",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, space between recursive descent and name",
+ "selector": "$.. a",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, newline between recursive descent and name",
+ "selector": "$..\na",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, tab between recursive descent and name",
+ "selector": "$..\ta",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, return between recursive descent and name",
+ "selector": "$..\ra",
+ "invalid_selector": true,
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, space between bracket and selector",
+ "selector": "$[ 'a']",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, newline between bracket and selector",
+ "selector": "$[\n'a']",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, tab between bracket and selector",
+ "selector": "$[\t'a']",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, return between bracket and selector",
+ "selector": "$[\r'a']",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, space between selector and bracket",
+ "selector": "$['a' ]",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, newline between selector and bracket",
+ "selector": "$['a'\n]",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, tab between selector and bracket",
+ "selector": "$['a'\t]",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, return between selector and bracket",
+ "selector": "$['a'\r]",
+ "document": {
+ "a": "ab"
+ },
+ "result": [
+ "ab"
+ ],
+ "result_paths": [
+ "$['a']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, space between selector and comma",
+ "selector": "$['a' ,'b']",
+ "document": {
+ "a": "ab",
+ "b": "bc"
+ },
+ "result": [
+ "ab",
+ "bc"
+ ],
+ "result_paths": [
+ "$['a']",
+ "$['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, newline between selector and comma",
+ "selector": "$['a'\n,'b']",
+ "document": {
+ "a": "ab",
+ "b": "bc"
+ },
+ "result": [
+ "ab",
+ "bc"
+ ],
+ "result_paths": [
+ "$['a']",
+ "$['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, tab between selector and comma",
+ "selector": "$['a'\t,'b']",
+ "document": {
+ "a": "ab",
+ "b": "bc"
+ },
+ "result": [
+ "ab",
+ "bc"
+ ],
+ "result_paths": [
+ "$['a']",
+ "$['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, return between selector and comma",
+ "selector": "$['a'\r,'b']",
+ "document": {
+ "a": "ab",
+ "b": "bc"
+ },
+ "result": [
+ "ab",
+ "bc"
+ ],
+ "result_paths": [
+ "$['a']",
+ "$['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, space between comma and selector",
+ "selector": "$['a', 'b']",
+ "document": {
+ "a": "ab",
+ "b": "bc"
+ },
+ "result": [
+ "ab",
+ "bc"
+ ],
+ "result_paths": [
+ "$['a']",
+ "$['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, newline between comma and selector",
+ "selector": "$['a',\n'b']",
+ "document": {
+ "a": "ab",
+ "b": "bc"
+ },
+ "result": [
+ "ab",
+ "bc"
+ ],
+ "result_paths": [
+ "$['a']",
+ "$['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, tab between comma and selector",
+ "selector": "$['a',\t'b']",
+ "document": {
+ "a": "ab",
+ "b": "bc"
+ },
+ "result": [
+ "ab",
+ "bc"
+ ],
+ "result_paths": [
+ "$['a']",
+ "$['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, selectors, return between comma and selector",
+ "selector": "$['a',\r'b']",
+ "document": {
+ "a": "ab",
+ "b": "bc"
+ },
+ "result": [
+ "ab",
+ "bc"
+ ],
+ "result_paths": [
+ "$['a']",
+ "$['b']"
+ ],
+ "tags": [
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, space between start and colon",
+ "selector": "$[1 :5:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, newline between start and colon",
+ "selector": "$[1\n:5:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, tab between start and colon",
+ "selector": "$[1\t:5:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, return between start and colon",
+ "selector": "$[1\r:5:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, space between colon and end",
+ "selector": "$[1: 5:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, newline between colon and end",
+ "selector": "$[1:\n5:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, tab between colon and end",
+ "selector": "$[1:\t5:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, return between colon and end",
+ "selector": "$[1:\r5:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, space between end and colon",
+ "selector": "$[1:5 :2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, newline between end and colon",
+ "selector": "$[1:5\n:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, tab between end and colon",
+ "selector": "$[1:5\t:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, return between end and colon",
+ "selector": "$[1:5\r:2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, space between colon and step",
+ "selector": "$[1:5: 2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, newline between colon and step",
+ "selector": "$[1:5:\n2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, tab between colon and step",
+ "selector": "$[1:5:\t2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ },
+ {
+ "name": "whitespace, slice, return between colon and step",
+ "selector": "$[1:5:\r2]",
+ "document": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ],
+ "result": [
+ 2,
+ 4
+ ],
+ "result_paths": [
+ "$[1]",
+ "$[3]"
+ ],
+ "tags": [
+ "index",
+ "whitespace"
+ ]
+ }
+ ]
+}
diff --git a/src/Symfony/Component/JsonPath/Tests/JsonCrawlerTest.php b/src/Symfony/Component/JsonPath/Tests/JsonCrawlerTest.php
index 6871a56511890..a52d586fac869 100644
--- a/src/Symfony/Component/JsonPath/Tests/JsonCrawlerTest.php
+++ b/src/Symfony/Component/JsonPath/Tests/JsonCrawlerTest.php
@@ -49,6 +49,19 @@ public function testAllAuthors()
], $result);
}
+ public function testAllAuthorsWithBrackets()
+ {
+ $result = self::getBookstoreCrawler()->find('$..["author"]');
+
+ $this->assertCount(4, $result);
+ $this->assertSame([
+ 'Nigel Rees',
+ 'Evelyn Waugh',
+ 'Herman Melville',
+ 'J. R. R. Tolkien',
+ ], $result);
+ }
+
public function testAllThingsInStore()
{
$result = self::getBookstoreCrawler()->find('$.store.*');
@@ -58,6 +71,15 @@ public function testAllThingsInStore()
$this->assertArrayHasKey('color', $result[1]);
}
+ public function testAllThingsInStoreWithBrackets()
+ {
+ $result = self::getBookstoreCrawler()->find('$["store"][*]');
+
+ $this->assertCount(2, $result);
+ $this->assertCount(4, $result[0]);
+ $this->assertArrayHasKey('color', $result[1]);
+ }
+
public function testEscapedDoubleQuotesInFieldName()
{
$crawler = new JsonCrawler(<<assertSame(42, $result[0]);
}
+ public function testMultipleKeysAtOnce()
+ {
+ $crawler = new JsonCrawler(<<find("$['a', 'b', 3]");
+
+ $this->assertSame([
+ ['b"c' => 42],
+ ['c' => 43],
+ ], $result);
+ }
+
+ public function testMultipleKeysAtOnceOnArray()
+ {
+ $crawler = new JsonCrawler(<<find("$[0, 2, 'a,b,c', -1]");
+
+ $this->assertCount(4, $result);
+ $this->assertSame(['a' => 1], $result[0]);
+ $this->assertSame(['c' => 3], $result[1]);
+ $this->assertSame(['a,b,c' => 5], $result[2]);
+ $this->assertSame(['d' => 4], $result[3]);
+ }
+
public function testBasicNameSelector()
{
$result = self::getBookstoreCrawler()->find('$.store.book')[0];
@@ -77,6 +128,14 @@ public function testBasicNameSelector()
$this->assertSame('Nigel Rees', $result[0]['author']);
}
+ public function testBasicNameSelectorWithBrackts()
+ {
+ $result = self::getBookstoreCrawler()->find('$["store"]["book"]')[0];
+
+ $this->assertCount(4, $result);
+ $this->assertSame('Nigel Rees', $result[0]['author']);
+ }
+
public function testAllPrices()
{
$result = self::getBookstoreCrawler()->find('$.store..price');
@@ -121,6 +180,25 @@ public function testBooksWithIsbn()
], [$result[0]['isbn'], $result[1]['isbn']]);
}
+ public function testBooksWithPublisherAddress()
+ {
+ $result = self::getBookstoreCrawler()->find('$..book[?(@.publisher.address)]');
+
+ $this->assertCount(1, $result);
+ $this->assertSame('Sword of Honour', $result[0]['title']);
+ }
+
+ public function testBooksWithBracketsAndFilter()
+ {
+ $result = self::getBookstoreCrawler()->find('$..["book"][?(@.isbn)]');
+
+ $this->assertCount(2, $result);
+ $this->assertSame([
+ '0-553-21311-3',
+ '0-395-19395-8',
+ ], [$result[0]['isbn'], $result[1]['isbn']]);
+ }
+
public function testBooksLessThanTenDollars()
{
$result = self::getBookstoreCrawler()->find('$..book[?(@.price < 10)]');
@@ -216,6 +294,14 @@ public function testEverySecondElementReverseSlice()
$this->assertSame([6, 2, 5], $result);
}
+ public function testEverySecondElementReverseSliceAndBrackets()
+ {
+ $crawler = self::getSimpleCollectionCrawler();
+
+ $result = $crawler->find('$["a"][::-2]');
+ $this->assertSame([6, 2, 5], $result);
+ }
+
public function testEmptyResults()
{
$crawler = self::getSimpleCollectionCrawler();
@@ -344,6 +430,50 @@ public function testValueFunction()
$this->assertSame('Sayings of the Century', $result[0]['title']);
}
+ public function testDeepExpressionInFilter()
+ {
+ $result = self::getBookstoreCrawler()->find('$.store.book[?(@.publisher.address.city == "Springfield")]');
+
+ $this->assertCount(1, $result);
+ $this->assertSame('Sword of Honour', $result[0]['title']);
+ }
+
+ public function testWildcardInFilter()
+ {
+ $result = self::getBookstoreCrawler()->find('$.store.book[?(@.publisher.* == "my-publisher")]');
+
+ $this->assertCount(1, $result);
+ $this->assertSame('Sword of Honour', $result[0]['title']);
+ }
+
+ public function testWildcardInFunction()
+ {
+ $result = self::getBookstoreCrawler()->find('$.store.book[?match(@.publisher.*.city, "Spring.+")]');
+
+ $this->assertCount(1, $result);
+ $this->assertSame('Sword of Honour', $result[0]['title']);
+ }
+
+ public function testUseAtSymbolReturnsAll()
+ {
+ $result = self::getBookstoreCrawler()->find('$.store.bicycle[?(@ == @)]');
+
+ $this->assertSame([
+ 'red',
+ 399,
+ ], $result);
+ }
+
+ public function testUseAtSymbolAloneReturnsAll()
+ {
+ $result = self::getBookstoreCrawler()->find('$.store.bicycle[?(@)]');
+
+ $this->assertSame([
+ 'red',
+ 399,
+ ], $result);
+ }
+
public function testValueFunctionWithOuterParentheses()
{
$result = self::getBookstoreCrawler()->find('$.store.book[?(value(@.price) == 8.95)]');
@@ -404,6 +534,264 @@ public function testAcceptsJsonPath()
$this->assertSame('red', $result[0]['color']);
}
+ public function testStarAsKey()
+ {
+ $crawler = new JsonCrawler(<<find('$["*"]');
+
+ $this->assertCount(1, $result);
+ $this->assertSame(['a' => 1, 'b' => 2], $result[0]);
+ }
+
+ /**
+ * @dataProvider provideUnicodeEscapeSequencesProvider
+ */
+ public function testUnicodeEscapeSequences(string $jsonPath, array $expected)
+ {
+ $this->assertSame($expected, self::getUnicodeDocumentCrawler()->find($jsonPath));
+ }
+
+ public static function provideUnicodeEscapeSequencesProvider(): array
+ {
+ return [
+ [
+ '$["caf\u00e9"]',
+ ['coffee'],
+ ],
+ [
+ '$["\u65e5\u672c"]',
+ ['Japan'],
+ ],
+ [
+ '$["M\u00fcller"]',
+ [],
+ ],
+ [
+ '$["emoji\ud83d\ude00"]',
+ ['smiley'],
+ ],
+ [
+ '$["tab\there"]',
+ ['with tab'],
+ ],
+ [
+ '$["new\nline"]',
+ ['with newline'],
+ ],
+ [
+ '$["quote\"here"]',
+ ['with quote'],
+ ],
+ [
+ '$["backslash\\\\here"]',
+ ['with backslash'],
+ ],
+ [
+ '$["apostrophe\'here"]',
+ ['with apostrophe'],
+ ],
+ [
+ '$["control\u0001char"]',
+ ['with control char'],
+ ],
+ [
+ '$["\u0063af\u00e9"]',
+ ['coffee'],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideSingleQuotedStringProvider
+ */
+ public function testSingleQuotedStrings(string $jsonPath, array $expected)
+ {
+ $this->assertSame($expected, self::getUnicodeDocumentCrawler()->find($jsonPath));
+ }
+
+ public static function provideSingleQuotedStringProvider(): array
+ {
+ return [
+ [
+ "$['caf\\u00e9']",
+ ['coffee'],
+ ],
+ [
+ "$['\\u65e5\\u672c']",
+ ['Japan'],
+ ],
+ [
+ "$['quote\"here']",
+ ['with quote'],
+ ],
+ [
+ "$['M\\u00fcller']",
+ [],
+ ],
+ [
+ "$['emoji\\ud83d\\ude00']",
+ ['smiley'],
+ ],
+ [
+ "$['tab\\there']",
+ ['with tab'],
+ ],
+ [
+ "$['quote\\\"here']",
+ ['with quote'],
+ ],
+ [
+ "$['backslash\\\\here']",
+ ['with backslash'],
+ ],
+ [
+ "$['apostrophe\\'here']",
+ ['with apostrophe'],
+ ],
+ [
+ "$['control\\u0001char']",
+ ['with control char'],
+ ],
+ [
+ "$['\\u0063af\\u00e9']",
+ ['coffee'],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideFilterWithUnicodeProvider
+ */
+ public function testFilterWithUnicodeStrings(string $jsonPath, int $expectedCount, string $expectedCountry)
+ {
+ $result = self::getUnicodeDocumentCrawler()->find($jsonPath);
+
+ $this->assertCount($expectedCount, $result);
+
+ if ($expectedCount > 0) {
+ $this->assertSame($expectedCountry, $result[0]['country']);
+ }
+ }
+
+ public static function provideFilterWithUnicodeProvider(): array
+ {
+ return [
+ [
+ '$.users[?(@.name == "caf\u00e9")]',
+ 1,
+ 'France',
+ ],
+ [
+ '$.users[?(@.name == "\u65e5\u672c\u592a\u90ce")]',
+ 1,
+ 'Japan',
+ ],
+ [
+ '$.users[?(@.name == "Jos\u00e9")]',
+ 1,
+ 'Spain',
+ ],
+ [
+ '$.users[?(@.name == "John")]',
+ 1,
+ 'USA',
+ ],
+ [
+ '$.users[?(@.name == "NonExistent\u0020Name")]',
+ 0,
+ '',
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideInvalidUnicodeSequenceProvider
+ */
+ public function testInvalidUnicodeSequencesAreProcessedAsLiterals(string $jsonPath)
+ {
+ $this->assertIsArray(self::getUnicodeDocumentCrawler()->find($jsonPath), 'invalid unicode sequence should be treated as literal and not throw');
+ }
+
+ public static function provideInvalidUnicodeSequenceProvider(): array
+ {
+ return [
+ [
+ '$["test\uZZZZ"]',
+ ],
+ [
+ '$["test\u123"]',
+ ],
+ [
+ '$["test\u"]',
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideComplexUnicodePath
+ */
+ public function testComplexUnicodePaths(string $jsonPath, array $expected)
+ {
+ $complexJson = [
+ 'データ' => [
+ 'ユーザー' => [
+ ['名前' => 'テスト', 'ID' => 1],
+ ['名前' => 'サンプル', 'ID' => 2],
+ ],
+ ],
+ 'special🔑' => [
+ 'value💎' => 'treasure',
+ ],
+ ];
+
+ $crawler = new JsonCrawler(json_encode($complexJson));
+
+ $this->assertSame($expected, $crawler->find($jsonPath));
+ }
+
+ public static function provideComplexUnicodePath(): array
+ {
+ return [
+ [
+ '$["\u30c7\u30fc\u30bf"]["\u30e6\u30fc\u30b6\u30fc"][0]["\u540d\u524d"]',
+ ['テスト'],
+ ],
+ [
+ '$["special\ud83d\udd11"]["value\ud83d\udc8e"]',
+ ['treasure'],
+ ],
+ [
+ '$["\u30c7\u30fc\u30bf"]["\u30e6\u30fc\u30b6\u30fc"][*]["\u540d\u524d"]',
+ ['テスト', 'サンプル'],
+ ],
+ ];
+ }
+
+ public function testSurrogatePairHandling()
+ {
+ $json = ['𝒽𝑒𝓁𝓁𝑜' => 'mathematical script hello'];
+ $crawler = new JsonCrawler(json_encode($json));
+
+ // mathematical script "hello" requires surrogate pairs for each character
+ $result = $crawler->find('$["\ud835\udcbd\ud835\udc52\ud835\udcc1\ud835\udcc1\ud835\udc5c"]');
+ $this->assertSame(['mathematical script hello'], $result);
+ }
+
+ public function testMixedQuoteTypes()
+ {
+ $json = ['key"with"quotes' => 'value1', "key'with'apostrophes" => 'value2'];
+ $crawler = new JsonCrawler(json_encode($json));
+
+ $result = $crawler->find('$[\'key"with"quotes\']');
+ $this->assertSame(['value1'], $result);
+
+ $result = $crawler->find('$["key\'with\'apostrophes"]');
+ $this->assertSame(['value2'], $result);
+ }
+
private static function getBookstoreCrawler(): JsonCrawler
{
return new JsonCrawler(<< 'coffee',
+ '日本' => 'Japan',
+ 'emoji😀' => 'smiley',
+ 'tab here' => 'with tab',
+ "new\nline" => 'with newline',
+ 'quote"here' => 'with quote',
+ 'backslash\\here' => 'with backslash',
+ 'apostrophe\'here' => 'with apostrophe',
+ "control\x01char" => 'with control char',
+ 'users' => [
+ ['name' => 'café', 'country' => 'France'],
+ ['name' => '日本太郎', 'country' => 'Japan'],
+ ['name' => 'John', 'country' => 'USA'],
+ ['name' => 'Müller', 'country' => 'Germany'],
+ ['name' => 'José', 'country' => 'Spain'],
+ ],
+ ];
+
+ return new JsonCrawler(json_encode($json));
+ }
}
diff --git a/src/Symfony/Component/JsonPath/Tests/JsonPathComplianceTestSuiteTest.php b/src/Symfony/Component/JsonPath/Tests/JsonPathComplianceTestSuiteTest.php
new file mode 100644
index 0000000000000..851a45e275e7c
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Tests/JsonPathComplianceTestSuiteTest.php
@@ -0,0 +1,557 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Tests;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\JsonPath\Exception\JsonCrawlerException;
+use Symfony\Component\JsonPath\JsonCrawler;
+
+final class JsonPathComplianceTestSuiteTest extends TestCase
+{
+ private const UNSUPPORTED_TEST_CASES = [
+ 'basic, multiple selectors, name and index, array data',
+ 'basic, multiple selectors, name and index, object data',
+ 'basic, multiple selectors, index and slice',
+ 'basic, multiple selectors, index and slice, overlapping',
+ 'basic, multiple selectors, wildcard and index',
+ 'basic, multiple selectors, wildcard and name',
+ 'basic, multiple selectors, wildcard and slice',
+ 'basic, multiple selectors, multiple wildcards',
+ 'basic, selector, leading comma',
+ 'basic, selector, trailing comma',
+ 'filter, existence, without segments',
+ 'filter, existence',
+ 'filter, existence, present with null',
+ 'filter, absolute existence, without segments',
+ 'filter, absolute existence, with segments',
+ 'filter, equals string, single quotes',
+ 'filter, equals numeric string, single quotes',
+ 'filter, equals string, double quotes',
+ 'filter, equals numeric string, double quotes',
+ 'filter, equals number',
+ 'filter, equals null',
+ 'filter, equals null, absent from data',
+ 'filter, equals true',
+ 'filter, equals false',
+ 'filter, equals self',
+ 'filter, absolute, equals self',
+ 'filter, equals, absent from index selector equals absent from name selector',
+ 'filter, deep equality, arrays',
+ 'filter, deep equality, objects',
+ 'filter, not-equals string, single quotes',
+ 'filter, not-equals numeric string, single quotes',
+ 'filter, not-equals string, single quotes, different type',
+ 'filter, not-equals string, double quotes',
+ 'filter, not-equals numeric string, double quotes',
+ 'filter, not-equals string, double quotes, different types',
+ 'filter, not-equals number',
+ 'filter, not-equals number, different types',
+ 'filter, not-equals null',
+ 'filter, not-equals null, absent from data',
+ 'filter, not-equals true',
+ 'filter, not-equals false',
+ 'filter, less than string, single quotes',
+ 'filter, less than string, double quotes',
+ 'filter, less than number',
+ 'filter, less than null',
+ 'filter, less than true',
+ 'filter, less than false',
+ 'filter, less than or equal to string, single quotes',
+ 'filter, less than or equal to string, double quotes',
+ 'filter, less than or equal to number',
+ 'filter, less than or equal to null',
+ 'filter, less than or equal to true',
+ 'filter, less than or equal to false',
+ 'filter, greater than string, single quotes',
+ 'filter, greater than string, double quotes',
+ 'filter, greater than number',
+ 'filter, greater than null',
+ 'filter, greater than true',
+ 'filter, greater than false',
+ 'filter, greater than or equal to string, single quotes',
+ 'filter, greater than or equal to string, double quotes',
+ 'filter, greater than or equal to number',
+ 'filter, greater than or equal to null',
+ 'filter, greater than or equal to true',
+ 'filter, greater than or equal to false',
+ 'filter, exists and not-equals null, absent from data',
+ 'filter, exists and exists, data false',
+ 'filter, exists or exists, data false',
+ 'filter, and',
+ 'filter, or',
+ 'filter, not expression',
+ 'filter, not exists',
+ 'filter, not exists, data null',
+ 'filter, non-singular existence, wildcard',
+ 'filter, non-singular existence, multiple',
+ 'filter, non-singular existence, slice',
+ 'filter, non-singular existence, negated',
+ 'filter, nested',
+ 'filter, name segment on primitive, selects nothing',
+ 'filter, name segment on array, selects nothing',
+ 'filter, index segment on object, selects nothing',
+ 'filter, followed by name selector',
+ 'filter, followed by child segment that selects multiple elements',
+ 'filter, multiple selectors',
+ 'filter, multiple selectors, comparison',
+ 'filter, multiple selectors, overlapping',
+ 'filter, multiple selectors, filter and index',
+ 'filter, multiple selectors, filter and wildcard',
+ 'filter, multiple selectors, filter and slice',
+ 'filter, multiple selectors, comparison filter, index and slice',
+ 'filter, equals number, zero and negative zero',
+ 'filter, equals number, negative zero and zero',
+ 'filter, equals number, with and without decimal fraction',
+ 'filter, equals number, exponent',
+ 'filter, equals number, exponent upper e',
+ 'filter, equals number, positive exponent',
+ 'filter, equals number, negative exponent',
+ 'filter, equals number, exponent 0',
+ 'filter, equals number, exponent -0',
+ 'filter, equals number, exponent +0',
+ 'filter, equals number, exponent leading -0',
+ 'filter, equals number, exponent +00',
+ 'filter, equals number, decimal fraction',
+ 'filter, equals number, decimal fraction, trailing 0',
+ 'filter, equals number, decimal fraction, exponent',
+ 'filter, equals number, decimal fraction, positive exponent',
+ 'filter, equals number, decimal fraction, negative exponent',
+ 'filter, equals, empty node list and empty node list',
+ 'filter, equals, empty node list and special nothing',
+ 'filter, object data',
+ 'filter, and binds more tightly than or',
+ 'filter, left to right evaluation',
+ 'filter, group terms, right',
+ 'filter, string literal, single quote in double quotes',
+ 'filter, string literal, double quote in single quotes',
+ 'filter, string literal, escaped single quote in single quotes',
+ 'filter, string literal, escaped double quote in double quotes',
+ 'functions, value, multi-value nodelist',
+ 'name selector, double quotes, escaped reverse solidus',
+ 'name selector, single quotes, escaped reverse solidus',
+ 'slice selector, slice selector with everything omitted, long form',
+ 'slice selector, start, min exact',
+ 'slice selector, start, max exact',
+ 'slice selector, end, min exact',
+ 'slice selector, end, max exact',
+ 'functions, length, arg is special nothing',
+ 'functions, match, don\'t select match',
+ 'functions, match, select non-match',
+ 'functions, match, arg is a function expression',
+ 'functions, search, don\'t select match',
+ 'functions, search, select non-match',
+ 'functions, search, arg is a function expression',
+ 'whitespace, filter, space between question mark and expression',
+ 'whitespace, filter, newline between question mark and expression',
+ 'whitespace, filter, tab between question mark and expression',
+ 'whitespace, filter, return between question mark and expression',
+ 'whitespace, filter, space between question mark and parenthesized expression',
+ 'whitespace, filter, newline between question mark and parenthesized expression',
+ 'whitespace, filter, tab between question mark and parenthesized expression',
+ 'whitespace, filter, return between question mark and parenthesized expression',
+ 'whitespace, filter, space between bracket and question mark',
+ 'whitespace, filter, newline between bracket and question mark',
+ 'whitespace, filter, tab between bracket and question mark',
+ 'whitespace, filter, return between bracket and question mark',
+ 'whitespace, functions, newline between parenthesis and arg',
+ 'whitespace, functions, newline between arg and comma',
+ 'whitespace, functions, newline between comma and arg',
+ 'whitespace, functions, newline between arg and parenthesis',
+ 'whitespace, functions, newlines in a relative singular selector',
+ 'whitespace, functions, newlines in an absolute singular selector',
+ 'whitespace, operators, space before ||',
+ 'whitespace, operators, newline before ||',
+ 'whitespace, operators, tab before ||',
+ 'whitespace, operators, return before ||',
+ 'whitespace, operators, space after ||',
+ 'whitespace, operators, newline after ||',
+ 'whitespace, operators, tab after ||',
+ 'whitespace, operators, return after ||',
+ 'whitespace, operators, space before &&',
+ 'whitespace, operators, newline before &&',
+ 'whitespace, operators, tab before &&',
+ 'whitespace, operators, return before &&',
+ 'whitespace, operators, space after &&',
+ 'whitespace, operators, newline after &&',
+ 'whitespace, operators, tab after &&',
+ 'whitespace, operators, return after &&',
+ 'whitespace, operators, space before ==',
+ 'whitespace, operators, newline before ==',
+ 'whitespace, operators, tab before ==',
+ 'whitespace, operators, return before ==',
+ 'whitespace, operators, space after ==',
+ 'whitespace, operators, newline after ==',
+ 'whitespace, operators, tab after ==',
+ 'whitespace, operators, return after ==',
+ 'whitespace, operators, space before !=',
+ 'whitespace, operators, newline before !=',
+ 'whitespace, operators, tab before !=',
+ 'whitespace, operators, return before !=',
+ 'whitespace, operators, space after !=',
+ 'whitespace, operators, newline after !=',
+ 'whitespace, operators, tab after !=',
+ 'whitespace, operators, return after !=',
+ 'whitespace, operators, space before <',
+ 'whitespace, operators, newline before <',
+ 'whitespace, operators, tab before <',
+ 'whitespace, operators, return before <',
+ 'whitespace, operators, space after <',
+ 'whitespace, operators, newline after <',
+ 'whitespace, operators, tab after <',
+ 'whitespace, operators, return after <',
+ 'whitespace, operators, space before >',
+ 'whitespace, operators, newline before >',
+ 'whitespace, operators, tab before >',
+ 'whitespace, operators, return before >',
+ 'whitespace, operators, space after >',
+ 'whitespace, operators, newline after >',
+ 'whitespace, operators, tab after >',
+ 'whitespace, operators, return after >',
+ 'whitespace, operators, space before <=',
+ 'whitespace, operators, newline before <=',
+ 'whitespace, operators, tab before <=',
+ 'whitespace, operators, return before <=',
+ 'whitespace, operators, space after <=',
+ 'whitespace, operators, newline after <=',
+ 'whitespace, operators, tab after <=',
+ 'whitespace, operators, return after <=',
+ 'whitespace, operators, space before >=',
+ 'whitespace, operators, newline before >=',
+ 'whitespace, operators, tab before >=',
+ 'whitespace, operators, return before >=',
+ 'whitespace, operators, space after >=',
+ 'whitespace, operators, newline after >=',
+ 'whitespace, operators, tab after >=',
+ 'whitespace, operators, return after >=',
+ 'whitespace, operators, space between logical not and test expression',
+ 'whitespace, operators, newline between logical not and test expression',
+ 'whitespace, operators, tab between logical not and test expression',
+ 'whitespace, operators, return between logical not and test expression',
+ 'whitespace, operators, space between logical not and parenthesized expression',
+ 'whitespace, operators, newline between logical not and parenthesized expression',
+ 'whitespace, operators, tab between logical not and parenthesized expression',
+ 'whitespace, operators, return between logical not and parenthesized expression',
+ 'whitespace, selectors, space between bracket and selector',
+ 'whitespace, selectors, newline between bracket and selector',
+ 'whitespace, selectors, tab between bracket and selector',
+ 'whitespace, selectors, return between bracket and selector',
+ 'whitespace, selectors, space between selector and bracket',
+ 'whitespace, selectors, tab between selector and bracket',
+ 'whitespace, selectors, return between selector and bracket',
+ 'whitespace, selectors, newline between selector and comma',
+ 'whitespace, selectors, newline between comma and selector',
+ 'whitespace, slice, space between start and colon',
+ 'whitespace, slice, newline between start and colon',
+ 'whitespace, slice, tab between start and colon',
+ 'whitespace, slice, return between start and colon',
+ 'whitespace, slice, space between colon and end',
+ 'whitespace, slice, newline between colon and end',
+ 'whitespace, slice, tab between colon and end',
+ 'whitespace, slice, return between colon and end',
+ 'whitespace, slice, space between end and colon',
+ 'whitespace, slice, newline between end and colon',
+ 'whitespace, slice, tab between end and colon',
+ 'whitespace, slice, return between end and colon',
+ 'whitespace, slice, space between colon and step',
+ 'whitespace, slice, newline between colon and step',
+ 'whitespace, slice, tab between colon and step',
+ 'whitespace, slice, return between colon and step',
+ 'basic, descendant segment, multiple selectors',
+ 'basic, descendant segment, object traversal, multiple selectors',
+ 'basic, bald descendant segment',
+ 'filter, relative non-singular query, index, equal',
+ 'filter, relative non-singular query, index, not equal',
+ 'filter, relative non-singular query, index, less-or-equal',
+ 'filter, relative non-singular query, name, equal',
+ 'filter, relative non-singular query, name, not equal',
+ 'filter, relative non-singular query, name, less-or-equal',
+ 'filter, relative non-singular query, combined, equal',
+ 'filter, relative non-singular query, combined, not equal',
+ 'filter, relative non-singular query, combined, less-or-equal',
+ 'filter, relative non-singular query, wildcard, equal',
+ 'filter, relative non-singular query, wildcard, not equal',
+ 'filter, relative non-singular query, wildcard, less-or-equal',
+ 'filter, relative non-singular query, slice, equal',
+ 'filter, relative non-singular query, slice, not equal',
+ 'filter, relative non-singular query, slice, less-or-equal',
+ 'filter, absolute non-singular query, index, equal',
+ 'filter, absolute non-singular query, index, not equal',
+ 'filter, absolute non-singular query, index, less-or-equal',
+ 'filter, absolute non-singular query, name, equal',
+ 'filter, absolute non-singular query, name, not equal',
+ 'filter, absolute non-singular query, name, less-or-equal',
+ 'filter, absolute non-singular query, combined, equal',
+ 'filter, absolute non-singular query, combined, not equal',
+ 'filter, absolute non-singular query, combined, less-or-equal',
+ 'filter, absolute non-singular query, wildcard, equal',
+ 'filter, absolute non-singular query, wildcard, not equal',
+ 'filter, absolute non-singular query, wildcard, less-or-equal',
+ 'filter, absolute non-singular query, slice, equal',
+ 'filter, absolute non-singular query, slice, not equal',
+ 'filter, absolute non-singular query, slice, less-or-equal',
+ 'filter, equals, special nothing',
+ 'filter, group terms, left',
+ 'index selector, min exact index - 1',
+ 'index selector, max exact index + 1',
+ 'index selector, overflowing index',
+ 'index selector, leading 0',
+ 'index selector, -0',
+ 'index selector, leading -0',
+ 'name selector, double quotes, embedded U+0000',
+ 'name selector, double quotes, embedded U+0001',
+ 'name selector, double quotes, embedded U+0002',
+ 'name selector, double quotes, embedded U+0003',
+ 'name selector, double quotes, embedded U+0004',
+ 'name selector, double quotes, embedded U+0005',
+ 'name selector, double quotes, embedded U+0006',
+ 'name selector, double quotes, embedded U+0007',
+ 'name selector, double quotes, embedded U+0008',
+ 'name selector, double quotes, embedded U+0009',
+ 'name selector, double quotes, embedded U+000B',
+ 'name selector, double quotes, embedded U+000C',
+ 'name selector, double quotes, embedded U+000D',
+ 'name selector, double quotes, embedded U+000E',
+ 'name selector, double quotes, embedded U+000F',
+ 'name selector, double quotes, embedded U+0010',
+ 'name selector, double quotes, embedded U+0011',
+ 'name selector, double quotes, embedded U+0012',
+ 'name selector, double quotes, embedded U+0013',
+ 'name selector, double quotes, embedded U+0014',
+ 'name selector, double quotes, embedded U+0015',
+ 'name selector, double quotes, embedded U+0016',
+ 'name selector, double quotes, embedded U+0017',
+ 'name selector, double quotes, embedded U+0018',
+ 'name selector, double quotes, embedded U+0019',
+ 'name selector, double quotes, embedded U+001A',
+ 'name selector, double quotes, embedded U+001B',
+ 'name selector, double quotes, embedded U+001C',
+ 'name selector, double quotes, embedded U+001D',
+ 'name selector, double quotes, embedded U+001E',
+ 'name selector, double quotes, embedded U+001F',
+ 'name selector, double quotes, escaped backspace',
+ 'name selector, double quotes, escaped form feed',
+ 'name selector, double quotes, escaped line feed',
+ 'name selector, double quotes, escaped carriage return',
+ 'name selector, double quotes, escaped tab',
+ 'name selector, double quotes, escaped ☺, upper case hex',
+ 'name selector, double quotes, escaped ☺, lower case hex',
+ 'name selector, double quotes, surrogate pair 𝄞',
+ 'name selector, double quotes, surrogate pair 😀',
+ 'name selector, double quotes, before high surrogates',
+ 'name selector, double quotes, after low surrogates',
+ 'name selector, double quotes, invalid escaped single quote',
+ 'name selector, double quotes, question mark escape',
+ 'name selector, double quotes, bell escape',
+ 'name selector, double quotes, vertical tab escape',
+ 'name selector, double quotes, 0 escape',
+ 'name selector, double quotes, x escape',
+ 'name selector, double quotes, n escape',
+ 'name selector, double quotes, unicode escape no hex',
+ 'name selector, double quotes, unicode escape too few hex',
+ 'name selector, double quotes, unicode escape upper u',
+ 'name selector, double quotes, unicode escape upper u long',
+ 'name selector, double quotes, unicode escape plus',
+ 'name selector, double quotes, unicode escape brackets',
+ 'name selector, double quotes, unicode escape brackets long',
+ 'name selector, double quotes, single high surrogate',
+ 'name selector, double quotes, single low surrogate',
+ 'name selector, double quotes, high high surrogate',
+ 'name selector, double quotes, low low surrogate',
+ 'name selector, double quotes, surrogate non-surrogate',
+ 'name selector, double quotes, non-surrogate surrogate',
+ 'name selector, double quotes, surrogate supplementary',
+ 'name selector, double quotes, supplementary surrogate',
+ 'name selector, double quotes, surrogate incomplete low',
+ 'name selector, single quotes, embedded U+0000',
+ 'name selector, single quotes, embedded U+0001',
+ 'name selector, single quotes, embedded U+0002',
+ 'name selector, single quotes, embedded U+0003',
+ 'name selector, single quotes, embedded U+0004',
+ 'name selector, single quotes, embedded U+0005',
+ 'name selector, single quotes, embedded U+0006',
+ 'name selector, single quotes, embedded U+0007',
+ 'name selector, single quotes, embedded U+0008',
+ 'name selector, single quotes, embedded U+0009',
+ 'name selector, single quotes, embedded U+000B',
+ 'name selector, single quotes, embedded U+000C',
+ 'name selector, single quotes, embedded U+000D',
+ 'name selector, single quotes, embedded U+000E',
+ 'name selector, single quotes, embedded U+000F',
+ 'name selector, single quotes, embedded U+0010',
+ 'name selector, single quotes, embedded U+0011',
+ 'name selector, single quotes, embedded U+0012',
+ 'name selector, single quotes, embedded U+0013',
+ 'name selector, single quotes, embedded U+0014',
+ 'name selector, single quotes, embedded U+0015',
+ 'name selector, single quotes, embedded U+0016',
+ 'name selector, single quotes, embedded U+0017',
+ 'name selector, single quotes, embedded U+0018',
+ 'name selector, single quotes, embedded U+0019',
+ 'name selector, single quotes, embedded U+001A',
+ 'name selector, single quotes, embedded U+001B',
+ 'name selector, single quotes, embedded U+001C',
+ 'name selector, single quotes, embedded U+001D',
+ 'name selector, single quotes, embedded U+001E',
+ 'name selector, single quotes, embedded U+001F',
+ 'name selector, single quotes, escaped backspace',
+ 'name selector, single quotes, escaped form feed',
+ 'name selector, single quotes, escaped line feed',
+ 'name selector, single quotes, escaped carriage return',
+ 'name selector, single quotes, escaped tab',
+ 'name selector, single quotes, escaped ☺, upper case hex',
+ 'name selector, single quotes, escaped ☺, lower case hex',
+ 'name selector, single quotes, surrogate pair 𝄞',
+ 'name selector, single quotes, surrogate pair 😀',
+ 'name selector, single quotes, invalid escaped double quote',
+ 'slice selector, excessively large from value with negative step',
+ 'slice selector, step, min exact - 1',
+ 'slice selector, step, max exact + 1',
+ 'slice selector, overflowing to value',
+ 'slice selector, underflowing from value',
+ 'slice selector, overflowing from value with negative step',
+ 'slice selector, underflowing to value with negative step',
+ 'slice selector, overflowing step',
+ 'slice selector, underflowing step',
+ 'slice selector, step, leading 0',
+ 'slice selector, step, -0',
+ 'slice selector, step, leading -0',
+ 'functions, count, count function',
+ 'functions, count, single-node arg',
+ 'functions, count, multiple-selector arg',
+ 'functions, count, non-query arg, number',
+ 'functions, count, non-query arg, string',
+ 'functions, count, non-query arg, true',
+ 'functions, count, non-query arg, false',
+ 'functions, count, non-query arg, null',
+ 'functions, count, result must be compared',
+ 'functions, count, no params',
+ 'functions, count, too many params',
+ 'functions, length, string data, unicode',
+ 'functions, length, result must be compared',
+ 'functions, length, no params',
+ 'functions, length, too many params',
+ 'functions, length, non-singular query arg',
+ 'functions, length, arg is a function expression',
+ 'functions, match, regex from the document',
+ 'functions, match, filter, match function, unicode char class, uppercase',
+ 'functions, match, filter, match function, unicode char class negated, uppercase',
+ 'functions, match, filter, match function, unicode, surrogate pair',
+ 'functions, match, dot matcher on \u2028',
+ 'functions, match, dot matcher on \u2029',
+ 'functions, match, result cannot be compared',
+ 'functions, match, too few params',
+ 'functions, match, too many params',
+ 'functions, match, dot in character class',
+ 'functions, match, escaped dot',
+ 'functions, match, escaped backslash before dot',
+ 'functions, match, escaped left square bracket',
+ 'functions, match, escaped right square bracket',
+ 'functions, match, explicit caret',
+ 'functions, match, explicit dollar',
+ 'functions, search, regex from the document',
+ 'functions, search, filter, search function, unicode char class, uppercase',
+ 'functions, search, filter, search function, unicode char class negated, uppercase',
+ 'functions, search, filter, search function, unicode, surrogate pair',
+ 'functions, search, dot matcher on \u2028',
+ 'functions, search, dot matcher on \u2029',
+ 'functions, search, result cannot be compared',
+ 'functions, search, too few params',
+ 'functions, search, too many params',
+ 'functions, search, dot in character class',
+ 'functions, search, escaped dot',
+ 'functions, search, escaped backslash before dot',
+ 'functions, search, escaped left square bracket',
+ 'functions, search, escaped right square bracket',
+ 'functions, value, single-value nodelist',
+ 'functions, value, too few params',
+ 'functions, value, too many params',
+ 'functions, value, result must be compared',
+ 'whitespace, filter, space between parenthesized expression and bracket',
+ 'whitespace, filter, tab between parenthesized expression and bracket',
+ 'whitespace, filter, return between parenthesized expression and bracket',
+ 'whitespace, functions, space between function name and parenthesis',
+ 'whitespace, functions, tab between function name and parenthesis',
+ 'whitespace, functions, return between function name and parenthesis',
+ 'whitespace, functions, space between parenthesis and arg',
+ 'whitespace, functions, tab between parenthesis and arg',
+ 'whitespace, functions, return between parenthesis and arg',
+ 'whitespace, functions, space between arg and comma',
+ 'whitespace, functions, tab between arg and comma',
+ 'whitespace, functions, return between arg and comma',
+ 'whitespace, functions, space between comma and arg',
+ 'whitespace, functions, tab between comma and arg',
+ 'whitespace, functions, return between comma and arg',
+ 'whitespace, functions, space between arg and parenthesis',
+ 'whitespace, functions, tab between arg and parenthesis',
+ 'whitespace, functions, return between arg and parenthesis',
+ 'whitespace, functions, spaces in a relative singular selector',
+ 'whitespace, functions, tabs in a relative singular selector',
+ 'whitespace, functions, returns in a relative singular selector',
+ 'whitespace, functions, spaces in an absolute singular selector',
+ 'whitespace, functions, tabs in an absolute singular selector',
+ 'whitespace, functions, returns in an absolute singular selector',
+ 'whitespace, selectors, space between root and bracket',
+ 'whitespace, selectors, newline between root and bracket',
+ 'whitespace, selectors, tab between root and bracket',
+ 'whitespace, selectors, return between root and bracket',
+ 'whitespace, selectors, space between bracket and bracket',
+ 'whitespace, selectors, newline between bracket and bracket',
+ 'whitespace, selectors, tab between bracket and bracket',
+ 'whitespace, selectors, return between bracket and bracket',
+ 'whitespace, selectors, space between root and dot',
+ 'whitespace, selectors, newline between root and dot',
+ 'whitespace, selectors, tab between root and dot',
+ 'whitespace, selectors, return between root and dot',
+ 'whitespace, selectors, space between selector and comma',
+ 'whitespace, selectors, tab between selector and comma',
+ 'whitespace, selectors, return between selector and comma',
+ 'whitespace, selectors, space between comma and selector',
+ 'whitespace, selectors, tab between comma and selector',
+ 'whitespace, selectors, return between comma and selector',
+ ];
+
+ /**
+ * @dataProvider complianceCaseProvider
+ */
+ public function testComplianceTestCase(string $selector, array $document, array $expectedResults, bool $invalidSelector)
+ {
+ $jsonCrawler = new JsonCrawler(json_encode($document));
+
+ if ($invalidSelector) {
+ $this->expectException(JsonCrawlerException::class);
+ }
+
+ $result = $jsonCrawler->find($selector);
+
+ if (!$invalidSelector) {
+ $this->assertContains($result, $expectedResults);
+ }
+ }
+
+ public static function complianceCaseProvider(): iterable
+ {
+ $data = json_decode(file_get_contents(__DIR__ . '/Fixtures/cts.json'), true, flags: JSON_THROW_ON_ERROR);
+
+ foreach ($data['tests'] as $test) {
+ if (\in_array($test['name'], self::UNSUPPORTED_TEST_CASES, true)) {
+ continue;
+ }
+
+ yield $test['name'] => [
+ $test['selector'],
+ $test['document'] ?? [],
+ isset($test['result']) ? [$test['result']] : ($test['results'] ?? []),
+ $test['invalid_selector'] ?? false,
+ ];
+ }
+ }
+}
diff --git a/src/Symfony/Component/JsonPath/Tests/JsonPathTest.php b/src/Symfony/Component/JsonPath/Tests/JsonPathTest.php
index 66b27356c07e1..cbe6f20d17c0b 100644
--- a/src/Symfony/Component/JsonPath/Tests/JsonPathTest.php
+++ b/src/Symfony/Component/JsonPath/Tests/JsonPathTest.php
@@ -23,8 +23,8 @@ public function testBuildPath()
->index(0)
->key('address');
- $this->assertSame('$.users[0].address', (string) $path);
- $this->assertSame('$.users[0].address..city', (string) $path->deepScan()->key('city'));
+ $this->assertSame('$["users"][0]["address"]', (string) $path);
+ $this->assertSame('$["users"][0]["address"]..["city"]', (string) $path->deepScan()->key('city'));
}
public function testBuildWithFilter()
@@ -33,6 +33,74 @@ public function testBuildWithFilter()
$path = $path->key('users')
->filter('@.age > 18');
- $this->assertSame('$.users[?(@.age > 18)]', (string) $path);
+ $this->assertSame('$["users"][?(@.age > 18)]', (string) $path);
+ }
+
+ public function testAll()
+ {
+ $path = new JsonPath();
+ $path = $path->key('users')
+ ->all();
+
+ $this->assertSame('$["users"][*]', (string) $path);
+ }
+
+ public function testFirst()
+ {
+ $path = new JsonPath();
+ $path = $path->key('users')
+ ->first();
+
+ $this->assertSame('$["users"][0]', (string) $path);
+ }
+
+ public function testLast()
+ {
+ $path = new JsonPath();
+ $path = $path->key('users')
+ ->last();
+
+ $this->assertSame('$["users"][-1]', (string) $path);
+ }
+
+ /**
+ * @dataProvider provideKeysToEscape
+ */
+ public function testEscapedKey(string $key, string $expectedPath)
+ {
+ $path = new JsonPath();
+ $path = $path->key($key);
+
+ $this->assertSame($expectedPath, (string) $path);
+ }
+
+ public static function provideKeysToEscape(): iterable
+ {
+ yield ['simple_key', '$["simple_key"]'];
+ yield ['key"with"quotes', '$["key\\"with\\"quotes"]'];
+ yield ['path\\backslash', '$["path\\backslash"]'];
+ yield ['mixed\\"case', '$["mixed\\\\\\"case"]'];
+ yield ['unicode_🔑', '$["unicode_🔑"]'];
+ yield ['"quotes_only"', '$["\\"quotes_only\\""]'];
+ yield ['\\\\multiple\\\\backslashes', '$["\\\\\\\\multiple\\\\\\backslashes"]'];
+ yield ["control\x00\x1f\x1echar", '$["control\u0000\u001f\u001echar"]'];
+
+ yield ['key"with\\"mixed', '$["key\\"with\\\\\\"mixed"]'];
+ yield ['\\"complex\\"case\\"', '$["\\\\\\"complex\\\\\\"case\\\\\\""]'];
+ yield ['json_like":{"value":"test"}', '$["json_like\\":{\\"value\\":\\"test\\"}"]'];
+ yield ['C:\\Program Files\\"App Name"', '$["C:\\\\Program Files\\\\\\"App Name\\""]'];
+
+ yield ['key_with_é_accents', '$["key_with_é_accents"]'];
+ yield ['unicode_→_arrows', '$["unicode_→_arrows"]'];
+ yield ['chinese_中文_key', '$["chinese_中文_key"]'];
+
+ yield ['', '$[""]'];
+ yield [' ', '$[" "]'];
+ yield [' spaces ', '$[" spaces "]'];
+ yield ["\t\n\r", '$["\\t\\n\\r"]'];
+ yield ["control\x00char", '$["control\u0000char"]'];
+ yield ["newline\nkey", '$["newline\\nkey"]'];
+ yield ["tab\tkey", '$["tab\\tkey"]'];
+ yield ["carriage\rreturn", '$["carriage\\rreturn"]'];
}
}
diff --git a/src/Symfony/Component/JsonPath/Tests/Test/JsonPathAssertionsTraitTest.php b/src/Symfony/Component/JsonPath/Tests/Test/JsonPathAssertionsTraitTest.php
new file mode 100644
index 0000000000000..1044e7658672b
--- /dev/null
+++ b/src/Symfony/Component/JsonPath/Tests/Test/JsonPathAssertionsTraitTest.php
@@ -0,0 +1,200 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\JsonPath\Tests\Test;
+
+use PHPUnit\Framework\AssertionFailedError;
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\JsonPath\Test\JsonPathAssertionsTrait;
+
+class JsonPathAssertionsTraitTest extends TestCase
+{
+ use JsonPathAssertionsTrait;
+
+ public function testAssertJsonPathEqualsOk()
+ {
+ self::assertJsonPathEquals([1], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ }
+
+ public function testAssertJsonPathEqualsOkWithTypeCoercion()
+ {
+ self::assertJsonPathEquals(['1'], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ }
+
+ public function testAssertJsonPathEqualsKo()
+ {
+ $thrown = false;
+ try {
+ self::assertJsonPathEquals([2], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ } catch (AssertionFailedError $exception) {
+ self::assertMatchesRegularExpression('/Failed asserting that .+ equals JSON path "\$\.a\[2]" result./s', $exception->getMessage());
+
+ $thrown = true;
+ }
+
+ self::assertTrue($thrown);
+ }
+
+ public function testAssertJsonPathNotEqualsOk()
+ {
+ self::assertJsonPathNotEquals([2], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ }
+
+ public function testAssertJsonPathNotEqualsKo()
+ {
+ $thrown = false;
+ try {
+ self::assertJsonPathNotEquals([1], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ } catch (AssertionFailedError $exception) {
+ self::assertMatchesRegularExpression('/Failed asserting that .+ does not equal JSON path "\$\.a\[2]" result./s', $exception->getMessage());
+
+ $thrown = true;
+ }
+
+ self::assertTrue($thrown);
+ }
+
+ public function testAssertJsonPathCountOk()
+ {
+ self::assertJsonPathCount(6, '$.a[*]', self::getSimpleCollectionCrawlerData());
+ }
+
+ public function testAssertJsonPathCountOkWithFilter()
+ {
+ self::assertJsonPathCount(2, '$.book[?(@.price > 25)]', <<getMessage());
+
+ $thrown = true;
+ }
+
+ self::assertTrue($thrown);
+ }
+
+ public function testAssertJsonPathSameOk()
+ {
+ self::assertJsonPathSame([1], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ }
+
+ public function testAssertJsonPathSameKo()
+ {
+ $thrown = false;
+ try {
+ self::assertJsonPathSame([2], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ } catch (AssertionFailedError $exception) {
+ self::assertMatchesRegularExpression('/Failed asserting that .+ is identical to JSON path "\$\.a\[2]" result\./s', $exception->getMessage());
+
+ $thrown = true;
+ }
+
+ self::assertTrue($thrown);
+ }
+
+ public function testAssertJsonPathHasNoTypeCoercion()
+ {
+ $thrown = false;
+ try {
+ self::assertJsonPathSame(['1'], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ } catch (AssertionFailedError $exception) {
+ self::assertMatchesRegularExpression('/Failed asserting that .+ is identical to JSON path "\$\.a\[2]" result\./s', $exception->getMessage());
+
+ $thrown = true;
+ }
+
+ self::assertTrue($thrown);
+ }
+
+ public function testAssertJsonPathNotSameOk()
+ {
+ self::assertJsonPathNotSame([2], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ }
+
+ public function testAssertJsonPathNotSameKo()
+ {
+ $thrown = false;
+ try {
+ self::assertJsonPathNotSame([1], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ } catch (AssertionFailedError $exception) {
+ self::assertMatchesRegularExpression('/Failed asserting that .+ is not identical to JSON path "\$\.a\[2]" result\./s', $exception->getMessage());
+
+ $thrown = true;
+ }
+
+ self::assertTrue($thrown);
+ }
+
+ public function testAssertJsonPathNotSameHasNoTypeCoercion()
+ {
+ self::assertJsonPathNotSame(['1'], '$.a[2]', self::getSimpleCollectionCrawlerData());
+ }
+
+ public function testAssertJsonPathContainsOk()
+ {
+ self::assertJsonPathContains(1, '$.a[*]', self::getSimpleCollectionCrawlerData());
+ }
+
+ public function testAssertJsonPathContainsKo()
+ {
+ $thrown = false;
+ try {
+ self::assertJsonPathContains(0, '$.a[*]', self::getSimpleCollectionCrawlerData());
+ } catch (AssertionFailedError $exception) {
+ self::assertSame('Failed asserting that 0 is found in elements at JSON path "$.a[*]".', $exception->getMessage());
+
+ $thrown = true;
+ }
+
+ self::assertTrue($thrown);
+ }
+
+ public function testAssertJsonPathNotContainsOk()
+ {
+ self::assertJsonPathNotContains(0, '$.a[*]', self::getSimpleCollectionCrawlerData());
+ }
+
+ public function testAssertJsonPathNotContainsKo()
+ {
+ $thrown = false;
+ try {
+ self::assertJsonPathNotContains(1, '$.a[*]', self::getSimpleCollectionCrawlerData());
+ } catch (AssertionFailedError $exception) {
+ self::assertSame('Failed asserting that 1 is not found in elements at JSON path "$.a[*]".', $exception->getMessage());
+
+ $thrown = true;
+ }
+
+ self::assertTrue($thrown);
+ }
+
+ private static function getSimpleCollectionCrawlerData(): string
+ {
+ return << [
@@ -77,7 +77,7 @@ public function testBracketNotation(string $path, array $expectedTokens)
}
}
- public function bracketNotationProvider(): array
+ public static function bracketNotationProvider(): array
{
return [
'bracket with quotes' => [
@@ -117,7 +117,7 @@ public function testFilterExpressions(string $path, array $expectedTokens)
}
}
- public function filterExpressionProvider(): array
+ public static function filterExpressionProvider(): array
{
return [
'simple filter' => [
@@ -162,7 +162,7 @@ public function testComplexPaths(string $path, array $expectedTokens)
}
}
- public function complexPathProvider(): array
+ public static function complexPathProvider(): array
{
return [
'mixed with recursive' => [
diff --git a/src/Symfony/Component/JsonPath/composer.json b/src/Symfony/Component/JsonPath/composer.json
index 95b02675e7459..feb8158aa5be2 100644
--- a/src/Symfony/Component/JsonPath/composer.json
+++ b/src/Symfony/Component/JsonPath/composer.json
@@ -17,10 +17,14 @@
],
"require": {
"php": ">=8.2",
+ "symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "~1.0"
},
"require-dev": {
- "symfony/json-streamer": "^7.3"
+ "symfony/json-streamer": "7.3.*"
+ },
+ "conflict": {
+ "symfony/json-streamer": ">=7.4"
},
"autoload": {
"psr-4": { "Symfony\\Component\\JsonPath\\": "" },
diff --git a/src/Symfony/Component/JsonStreamer/JsonStreamReader.php b/src/Symfony/Component/JsonStreamer/JsonStreamReader.php
index b2f2fabaa3dad..e813f4a8a5408 100644
--- a/src/Symfony/Component/JsonStreamer/JsonStreamReader.php
+++ b/src/Symfony/Component/JsonStreamer/JsonStreamReader.php
@@ -45,7 +45,7 @@ public function __construct(
private ContainerInterface $valueTransformers,
PropertyMetadataLoaderInterface $propertyMetadataLoader,
string $streamReadersDir,
- string $lazyGhostsDir,
+ ?string $lazyGhostsDir = null,
) {
$this->streamReaderGenerator = new StreamReaderGenerator($propertyMetadataLoader, $streamReadersDir);
$this->instantiator = new Instantiator();
diff --git a/src/Symfony/Component/JsonStreamer/Mapping/GenericTypePropertyMetadataLoader.php b/src/Symfony/Component/JsonStreamer/Mapping/GenericTypePropertyMetadataLoader.php
index ccc705e7c8e33..a89394283dd52 100644
--- a/src/Symfony/Component/JsonStreamer/Mapping/GenericTypePropertyMetadataLoader.php
+++ b/src/Symfony/Component/JsonStreamer/Mapping/GenericTypePropertyMetadataLoader.php
@@ -43,10 +43,7 @@ public function load(string $className, array $options = [], array $context = []
foreach ($result as &$metadata) {
$type = $metadata->getType();
-
- if (isset($variableTypes[(string) $type])) {
- $metadata = $metadata->withType($this->replaceVariableTypes($type, $variableTypes));
- }
+ $metadata = $metadata->withType($this->replaceVariableTypes($type, $variableTypes));
}
return $result;
@@ -122,11 +119,11 @@ private function replaceVariableTypes(Type $type, array $variableTypes): Type
}
if ($type instanceof UnionType) {
- return new UnionType(...array_map(fn (Type $t): Type => $this->replaceVariableTypes($t, $variableTypes), $type->getTypes()));
+ return Type::union(...array_map(fn (Type $t): Type => $this->replaceVariableTypes($t, $variableTypes), $type->getTypes()));
}
if ($type instanceof IntersectionType) {
- return new IntersectionType(...array_map(fn (Type $t): Type => $this->replaceVariableTypes($t, $variableTypes), $type->getTypes()));
+ return Type::intersection(...array_map(fn (Type $t): Type => $this->replaceVariableTypes($t, $variableTypes), $type->getTypes()));
}
if ($type instanceof CollectionType) {
@@ -134,7 +131,7 @@ private function replaceVariableTypes(Type $type, array $variableTypes): Type
}
if ($type instanceof GenericType) {
- return new GenericType(
+ return Type::generic(
$this->replaceVariableTypes($type->getWrappedType(), $variableTypes),
...array_map(fn (Type $t): Type => $this->replaceVariableTypes($t, $variableTypes), $type->getVariableTypes()),
);
diff --git a/src/Symfony/Component/JsonStreamer/Mapping/Read/DateTimeTypePropertyMetadataLoader.php b/src/Symfony/Component/JsonStreamer/Mapping/Read/DateTimeTypePropertyMetadataLoader.php
index 11ce2b4f93962..26bc022cae2e3 100644
--- a/src/Symfony/Component/JsonStreamer/Mapping/Read/DateTimeTypePropertyMetadataLoader.php
+++ b/src/Symfony/Component/JsonStreamer/Mapping/Read/DateTimeTypePropertyMetadataLoader.php
@@ -38,7 +38,7 @@ public function load(string $className, array $options = [], array $context = []
$type = $metadata->getType();
if ($type instanceof ObjectType && is_a($type->getClassName(), \DateTimeInterface::class, true)) {
- if (\DateTime::class === $type->getClassName()) {
+ if (is_a($type->getClassName(), \DateTime::class, true)) {
throw new InvalidArgumentException('The "DateTime" class is not supported. Use "DateTimeImmutable" instead.');
}
diff --git a/src/Symfony/Component/JsonStreamer/Read/StreamReaderGenerator.php b/src/Symfony/Component/JsonStreamer/Read/StreamReaderGenerator.php
index c363cb7b70284..18720297b16c6 100644
--- a/src/Symfony/Component/JsonStreamer/Read/StreamReaderGenerator.php
+++ b/src/Symfony/Component/JsonStreamer/Read/StreamReaderGenerator.php
@@ -34,6 +34,7 @@
use Symfony\Component\TypeInfo\Type\BuiltinType;
use Symfony\Component\TypeInfo\Type\CollectionType;
use Symfony\Component\TypeInfo\Type\EnumType;
+use Symfony\Component\TypeInfo\Type\GenericType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\TypeInfo\Type\UnionType;
@@ -118,6 +119,10 @@ public function createDataModel(Type $type, array $options = [], array $context
return new BackedEnumNode($type);
}
+ if ($type instanceof GenericType) {
+ $type = $type->getWrappedType();
+ }
+
if ($type instanceof ObjectType && !$type instanceof EnumType) {
$typeString = (string) $type;
$className = $type->getClassName();
diff --git a/src/Symfony/Component/JsonStreamer/Tests/Fixtures/Model/DummyWithGenerics.php b/src/Symfony/Component/JsonStreamer/Tests/Fixtures/Model/DummyWithGenerics.php
index 18baf108aebe2..74c2dc212707b 100644
--- a/src/Symfony/Component/JsonStreamer/Tests/Fixtures/Model/DummyWithGenerics.php
+++ b/src/Symfony/Component/JsonStreamer/Tests/Fixtures/Model/DummyWithGenerics.php
@@ -8,7 +8,7 @@
class DummyWithGenerics
{
/**
- * @var array
+ * @var list
*/
public array $dummies = [];
}
diff --git a/src/Symfony/Component/JsonStreamer/Tests/JsonStreamReaderTest.php b/src/Symfony/Component/JsonStreamer/Tests/JsonStreamReaderTest.php
index f93dd8ba13ce4..6538a6d32383c 100644
--- a/src/Symfony/Component/JsonStreamer/Tests/JsonStreamReaderTest.php
+++ b/src/Symfony/Component/JsonStreamer/Tests/JsonStreamReaderTest.php
@@ -16,6 +16,7 @@
use Symfony\Component\JsonStreamer\Tests\Fixtures\Enum\DummyBackedEnum;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\ClassicDummy;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithDateTimes;
+use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithGenerics;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNameAttributes;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNullableProperties;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithPhpDoc;
@@ -100,6 +101,17 @@ public function testReadObject()
}, '{"id": 10, "name": "dummy name"}', Type::object(ClassicDummy::class));
}
+ public function testReadObjectWithGenerics()
+ {
+ $reader = JsonStreamReader::create(streamReadersDir: $this->streamReadersDir, lazyGhostsDir: $this->lazyGhostsDir);
+
+ $this->assertRead($reader, function (mixed $read) {
+ $this->assertInstanceOf(DummyWithGenerics::class, $read);
+ $this->assertSame(10, $read->dummies[0]->id);
+ $this->assertSame('dummy name', $read->dummies[0]->name);
+ }, '{"dummies":[{"id":10,"name":"dummy name"}]}', Type::generic(Type::object(DummyWithGenerics::class), Type::object(ClassicDummy::class)));
+ }
+
public function testReadObjectWithStreamedName()
{
$reader = JsonStreamReader::create(streamReadersDir: $this->streamReadersDir, lazyGhostsDir: $this->lazyGhostsDir);
diff --git a/src/Symfony/Component/JsonStreamer/Tests/JsonStreamWriterTest.php b/src/Symfony/Component/JsonStreamer/Tests/JsonStreamWriterTest.php
index 4fd987a6d4d11..14cc50881d0d1 100644
--- a/src/Symfony/Component/JsonStreamer/Tests/JsonStreamWriterTest.php
+++ b/src/Symfony/Component/JsonStreamer/Tests/JsonStreamWriterTest.php
@@ -17,6 +17,7 @@
use Symfony\Component\JsonStreamer\Tests\Fixtures\Enum\DummyBackedEnum;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\ClassicDummy;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithDateTimes;
+use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithGenerics;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNameAttributes;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNullableProperties;
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithPhpDoc;
@@ -117,6 +118,18 @@ public function testWriteObject()
$this->assertWritten('{"id":10,"name":"dummy name"}', $dummy, Type::object(ClassicDummy::class));
}
+ public function testWriteObjectWithGenerics()
+ {
+ $nestedDummy = new DummyWithNameAttributes();
+ $nestedDummy->id = 10;
+ $nestedDummy->name = 'dummy name';
+
+ $dummy = new DummyWithGenerics();
+ $dummy->dummies = [$nestedDummy];
+
+ $this->assertWritten('{"dummies":[{"id":10,"name":"dummy name"}]}', $dummy, Type::generic(Type::object(DummyWithGenerics::class), Type::object(ClassicDummy::class)));
+ }
+
public function testWriteObjectWithStreamedName()
{
$dummy = new DummyWithNameAttributes();
diff --git a/src/Symfony/Component/JsonStreamer/Tests/Mapping/Read/DateTimeTypePropertyMetadataLoaderTest.php b/src/Symfony/Component/JsonStreamer/Tests/Mapping/Read/DateTimeTypePropertyMetadataLoaderTest.php
index c71189815be29..779499adf21c2 100644
--- a/src/Symfony/Component/JsonStreamer/Tests/Mapping/Read/DateTimeTypePropertyMetadataLoaderTest.php
+++ b/src/Symfony/Component/JsonStreamer/Tests/Mapping/Read/DateTimeTypePropertyMetadataLoaderTest.php
@@ -47,6 +47,18 @@ public function testThrowWhenDateTimeType()
$loader->load(self::class);
}
+ public function testThrowWhenDateTimeSubclassType()
+ {
+ $this->expectException(InvalidArgumentException::class);
+ $this->expectExceptionMessage('The "DateTime" class is not supported. Use "DateTimeImmutable" instead.');
+
+ $loader = new DateTimeTypePropertyMetadataLoader(self::propertyMetadataLoader([
+ 'mutable' => new PropertyMetadata('mutable', Type::object(DateTimeChild::class)),
+ ]));
+
+ $loader->load(self::class);
+ }
+
/**
* @param array $propertiesMetadata
*/
@@ -64,3 +76,7 @@ public function load(string $className, array $options = [], array $context = []
};
}
}
+
+class DateTimeChild extends \DateTime
+{
+}
diff --git a/src/Symfony/Component/JsonStreamer/Write/StreamWriterGenerator.php b/src/Symfony/Component/JsonStreamer/Write/StreamWriterGenerator.php
index 41618e8e7f303..c437ca0d179f5 100644
--- a/src/Symfony/Component/JsonStreamer/Write/StreamWriterGenerator.php
+++ b/src/Symfony/Component/JsonStreamer/Write/StreamWriterGenerator.php
@@ -35,6 +35,7 @@
use Symfony\Component\TypeInfo\Type\BuiltinType;
use Symfony\Component\TypeInfo\Type\CollectionType;
use Symfony\Component\TypeInfo\Type\EnumType;
+use Symfony\Component\TypeInfo\Type\GenericType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\TypeInfo\Type\UnionType;
@@ -124,6 +125,10 @@ private function createDataModel(Type $type, DataAccessorInterface $accessor, ar
return new BackedEnumNode($accessor, $type);
}
+ if ($type instanceof GenericType) {
+ $type = $type->getWrappedType();
+ }
+
if ($type instanceof ObjectType && !$type instanceof EnumType) {
$typeString = (string) $type;
$className = $type->getClassName();
@@ -133,7 +138,7 @@ private function createDataModel(Type $type, DataAccessorInterface $accessor, ar
}
$context['generated_classes'][$typeString] = true;
- $propertiesMetadata = $this->propertyMetadataLoader->load($className, $options, ['original_type' => $type] + $context);
+ $propertiesMetadata = $this->propertyMetadataLoader->load($className, $options, $context);
try {
$classReflection = new \ReflectionClass($className);
diff --git a/src/Symfony/Component/Ldap/Security/LdapUser.php b/src/Symfony/Component/Ldap/Security/LdapUser.php
index ef73b82422d0b..020fcb5441596 100644
--- a/src/Symfony/Component/Ldap/Security/LdapUser.php
+++ b/src/Symfony/Component/Ldap/Security/LdapUser.php
@@ -47,7 +47,7 @@ public function getRoles(): array
public function getPassword(): ?string
{
- return $this->password;
+ return $this->password ?? null;
}
public function getSalt(): ?string
@@ -89,7 +89,7 @@ public function isEqualTo(UserInterface $user): bool
return false;
}
- if ($this->getPassword() !== $user->getPassword()) {
+ if (($this->getPassword() ?? $user->getPassword()) !== $user->getPassword()) {
return false;
}
diff --git a/src/Symfony/Component/Ldap/Tests/Security/LdapUserTest.php b/src/Symfony/Component/Ldap/Tests/Security/LdapUserTest.php
new file mode 100644
index 0000000000000..0a696bcd0c29d
--- /dev/null
+++ b/src/Symfony/Component/Ldap/Tests/Security/LdapUserTest.php
@@ -0,0 +1,27 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Ldap\Tests\Security;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Ldap\Entry;
+use Symfony\Component\Ldap\Security\LdapUser;
+
+class LdapUserTest extends TestCase
+{
+ public function testIsEqualToWorksOnUnserializedUser()
+ {
+ $user = new LdapUser(new Entry('uid=jonhdoe,ou=MyBusiness,dc=symfony,dc=com', []), 'jonhdoe', 'p455w0rd');
+ $unserializedUser = unserialize(serialize($user));
+
+ $this->assertTrue($unserializedUser->isEqualTo($user));
+ }
+}
diff --git a/src/Symfony/Component/Lock/Store/DoctrineDbalStore.php b/src/Symfony/Component/Lock/Store/DoctrineDbalStore.php
index f042620b71a6b..cf390a046040c 100644
--- a/src/Symfony/Component/Lock/Store/DoctrineDbalStore.php
+++ b/src/Symfony/Component/Lock/Store/DoctrineDbalStore.php
@@ -14,6 +14,7 @@
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\DriverManager;
+use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Exception as DBALException;
use Doctrine\DBAL\Exception\TableNotFoundException;
use Doctrine\DBAL\ParameterType;
@@ -242,9 +243,16 @@ private function getCurrentTimestampStatement(): string
{
$platform = $this->conn->getDatabasePlatform();
+ if (interface_exists(Exception::class)) {
+ // DBAL 4+
+ $sqlitePlatformClass = 'Doctrine\DBAL\Platforms\SQLitePlatform';
+ } else {
+ $sqlitePlatformClass = 'Doctrine\DBAL\Platforms\SqlitePlatform';
+ }
+
return match (true) {
$platform instanceof \Doctrine\DBAL\Platforms\AbstractMySQLPlatform => 'UNIX_TIMESTAMP()',
- $platform instanceof \Doctrine\DBAL\Platforms\SqlitePlatform => 'strftime(\'%s\',\'now\')',
+ $platform instanceof $sqlitePlatformClass => 'strftime(\'%s\',\'now\')',
$platform instanceof \Doctrine\DBAL\Platforms\PostgreSQLPlatform => 'CAST(EXTRACT(epoch FROM NOW()) AS INT)',
$platform instanceof \Doctrine\DBAL\Platforms\OraclePlatform => '(SYSDATE - TO_DATE(\'19700101\',\'yyyymmdd\'))*86400 - TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone), 1, 3))*3600',
$platform instanceof \Doctrine\DBAL\Platforms\SQLServerPlatform => 'DATEDIFF(s, \'1970-01-01\', GETUTCDATE())',
@@ -259,9 +267,16 @@ private function platformSupportsTableCreationInTransaction(): bool
{
$platform = $this->conn->getDatabasePlatform();
+ if (interface_exists(Exception::class)) {
+ // DBAL 4+
+ $sqlitePlatformClass = 'Doctrine\DBAL\Platforms\SQLitePlatform';
+ } else {
+ $sqlitePlatformClass = 'Doctrine\DBAL\Platforms\SqlitePlatform';
+ }
+
return match (true) {
$platform instanceof \Doctrine\DBAL\Platforms\PostgreSQLPlatform,
- $platform instanceof \Doctrine\DBAL\Platforms\SqlitePlatform,
+ $platform instanceof $sqlitePlatformClass,
$platform instanceof \Doctrine\DBAL\Platforms\SQLServerPlatform => true,
default => false,
};
diff --git a/src/Symfony/Component/Lock/Store/RedisStore.php b/src/Symfony/Component/Lock/Store/RedisStore.php
index f41d4feccc1f9..e23856f79a5d8 100644
--- a/src/Symfony/Component/Lock/Store/RedisStore.php
+++ b/src/Symfony/Component/Lock/Store/RedisStore.php
@@ -265,7 +265,7 @@ private function evaluate(string $script, string $resource, array $args): mixed
$client = $this->redis->_instance($this->redis->_target($resource));
$client->clearLastError();
$result = $client->evalSha($scriptSha, array_merge([$resource], $args), 1);
- if (null !== ($err = $this->redis->getLastError()) && str_starts_with($err, self::NO_SCRIPT_ERROR_MESSAGE_PREFIX)) {
+ if (null !== ($err = $client->getLastError()) && str_starts_with($err, self::NO_SCRIPT_ERROR_MESSAGE_PREFIX)) {
$client->clearLastError();
$client->script('LOAD', $script);
diff --git a/src/Symfony/Component/Lock/Tests/Store/DoctrineDbalStoreTest.php b/src/Symfony/Component/Lock/Tests/Store/DoctrineDbalStoreTest.php
index c20d5341b0ed3..bb4ed1d89c04c 100644
--- a/src/Symfony/Component/Lock/Tests/Store/DoctrineDbalStoreTest.php
+++ b/src/Symfony/Component/Lock/Tests/Store/DoctrineDbalStoreTest.php
@@ -14,6 +14,7 @@
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\DriverManager;
+use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Exception\TableNotFoundException;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Schema\DefaultSchemaManagerFactory;
@@ -176,7 +177,13 @@ public static function providePlatforms(): \Generator
yield [\Doctrine\DBAL\Platforms\PostgreSQL94Platform::class];
}
- yield [\Doctrine\DBAL\Platforms\SqlitePlatform::class];
+ if (interface_exists(Exception::class)) {
+ // DBAL 4+
+ yield [\Doctrine\DBAL\Platforms\SQLitePlatform::class];
+ } else {
+ yield [\Doctrine\DBAL\Platforms\SqlitePlatform::class];
+ }
+
yield [\Doctrine\DBAL\Platforms\SQLServerPlatform::class];
// DBAL < 4
diff --git a/src/Symfony/Component/Mailer/Bridge/Azure/README.md b/src/Symfony/Component/Mailer/Bridge/Azure/README.md
index acd9cc25abb53..36b81fccfa385 100644
--- a/src/Symfony/Component/Mailer/Bridge/Azure/README.md
+++ b/src/Symfony/Component/Mailer/Bridge/Azure/README.md
@@ -21,8 +21,8 @@ where:
Resources
---------
- * [Microsoft Azure (ACS) Email API Docs](https://learn.microsoft.com/en-us/rest/api/communication/dataplane/email/send)
+ * [Microsoft Azure (ACS) Email API Docs](https://learn.microsoft.com/en-us/rest/api/communication/email/email/send)
* [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)
\ No newline at end of file
+ in the [main Symfony repository](https://github.com/symfony/symfony)
diff --git a/src/Symfony/Component/Mailer/Bridge/MailerSend/Transport/MailerSendSmtpTransport.php b/src/Symfony/Component/Mailer/Bridge/MailerSend/Transport/MailerSendSmtpTransport.php
index 84e2553a627cc..e5bfb4daddc2e 100644
--- a/src/Symfony/Component/Mailer/Bridge/MailerSend/Transport/MailerSendSmtpTransport.php
+++ b/src/Symfony/Component/Mailer/Bridge/MailerSend/Transport/MailerSendSmtpTransport.php
@@ -22,7 +22,7 @@ final class MailerSendSmtpTransport extends EsmtpTransport
{
public function __construct(string $username, #[\SensitiveParameter] string $password, ?EventDispatcherInterface $dispatcher = null, ?LoggerInterface $logger = null)
{
- parent::__construct('smtp.mailersend.net', 587, true, $dispatcher, $logger);
+ parent::__construct('smtp.mailersend.net', 587, false, $dispatcher, $logger);
$this->setUsername($username);
$this->setPassword($password);
diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php
index 32bb32d744506..e692357aef3cf 100644
--- a/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php
+++ b/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php
@@ -71,6 +71,18 @@ public function testCustomHeader()
$this->assertEquals(['Name' => 'foo', 'Value' => 'bar'], $payload['Headers'][0]);
}
+ public function testBypassHeaders()
+ {
+ $email = (new Email())->date(new \DateTimeImmutable());
+ $envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]);
+
+ $transport = new PostmarkApiTransport('ACCESS_KEY');
+ $method = new \ReflectionMethod(PostmarkApiTransport::class, 'getPayload');
+ $payload = $method->invoke($transport, $email, $envelope);
+
+ $this->assertArrayNotHasKey('Headers', $payload);
+ }
+
public function testSend()
{
$client = new MockHttpClient(function (string $method, string $url, array $options): ResponseInterface {
diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php
index 734da0172f185..a5e433293d6bc 100644
--- a/src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php
+++ b/src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php
@@ -110,7 +110,7 @@ private function getPayload(Email $email, Envelope $envelope): array
'Attachments' => $this->getAttachments($email),
];
- $headersToBypass = ['from', 'to', 'cc', 'bcc', 'subject', 'content-type', 'sender', 'reply-to'];
+ $headersToBypass = ['from', 'to', 'cc', 'bcc', 'subject', 'content-type', 'sender', 'reply-to', 'date'];
foreach ($email->getHeaders()->all() as $name => $header) {
if (\in_array($name, $headersToBypass, true)) {
continue;
diff --git a/src/Symfony/Component/Mailer/Transport/Smtp/Stream/AbstractStream.php b/src/Symfony/Component/Mailer/Transport/Smtp/Stream/AbstractStream.php
index 884e6e146bc38..9cd8463a28b78 100644
--- a/src/Symfony/Component/Mailer/Transport/Smtp/Stream/AbstractStream.php
+++ b/src/Symfony/Component/Mailer/Transport/Smtp/Stream/AbstractStream.php
@@ -88,7 +88,7 @@ public function readLine(): string
throw new TransportException(\sprintf('Connection to "%s" has been closed unexpectedly.', $this->getReadConnectionDescription()));
}
if (false === $line) {
- throw new TransportException(\sprintf('Unable to read from connection to "%s": ', $this->getReadConnectionDescription()).error_get_last()['message']);
+ throw new TransportException(\sprintf('Unable to read from connection to "%s": ', $this->getReadConnectionDescription().error_get_last()['message'] ?? ''));
}
}
diff --git a/src/Symfony/Component/Messenger/Bridge/Amqp/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Amqp/Transport/Connection.php
index d5a6b666075f7..2599586f8f3d8 100644
--- a/src/Symfony/Component/Messenger/Bridge/Amqp/Transport/Connection.php
+++ b/src/Symfony/Component/Messenger/Bridge/Amqp/Transport/Connection.php
@@ -31,6 +31,7 @@ class Connection
'x-max-length-bytes',
'x-max-priority',
'x-message-ttl',
+ 'x-delivery-limit',
];
/**
diff --git a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/ConnectionTest.php
index c36270d81498e..9ebea2d115439 100644
--- a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/ConnectionTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/ConnectionTest.php
@@ -16,6 +16,7 @@
use Pheanstalk\Contract\PheanstalkSubscriberInterface;
use Pheanstalk\Exception;
use Pheanstalk\Exception\ClientException;
+use Pheanstalk\Exception\ConnectionException;
use Pheanstalk\Exception\DeadlineSoonException;
use Pheanstalk\Exception\ServerException;
use Pheanstalk\Pheanstalk;
@@ -131,6 +132,7 @@ public function testItThrowsAnExceptionIfAnExtraOptionIsDefinedInDSN()
public function testGet()
{
$id = '1234';
+ $id2 = '1235';
$beanstalkdEnvelope = [
'body' => 'foo',
'headers' => 'bar',
@@ -140,13 +142,52 @@ public function testGet()
$timeout = 44;
$tubeList = new TubeList($tubeName = new TubeName($tube), $tubeNameDefault = new TubeName('default'));
- $job = new Job(new JobId($id), json_encode($beanstalkdEnvelope));
$client = $this->createMock(PheanstalkInterface::class);
$client->expects($this->once())->method('watch')->with($tubeName)->willReturn(2);
$client->expects($this->once())->method('listTubesWatched')->willReturn($tubeList);
$client->expects($this->once())->method('ignore')->with($tubeNameDefault)->willReturn(1);
- $client->expects($this->once())->method('reserveWithTimeout')->with($timeout)->willReturn($job);
+ $client->expects($this->exactly(2))->method('reserveWithTimeout')->with($timeout)->willReturnOnConsecutiveCalls(
+ new Job(new JobId($id), json_encode($beanstalkdEnvelope)),
+ new Job(new JobId($id2), json_encode($beanstalkdEnvelope)),
+ );
+
+ $connection = new Connection(['tube_name' => $tube, 'timeout' => $timeout], $client);
+
+ $envelope = $connection->get();
+
+ $this->assertSame($id, $envelope['id']);
+ $this->assertSame($beanstalkdEnvelope['body'], $envelope['body']);
+ $this->assertSame($beanstalkdEnvelope['headers'], $envelope['headers']);
+
+ $envelope = $connection->get();
+
+ $this->assertSame($id2, $envelope['id']);
+ $this->assertSame($beanstalkdEnvelope['body'], $envelope['body']);
+ $this->assertSame($beanstalkdEnvelope['headers'], $envelope['headers']);
+ }
+
+ public function testGetOnReconnect()
+ {
+ $id = '1234';
+ $beanstalkdEnvelope = [
+ 'body' => 'foo',
+ 'headers' => 'bar',
+ ];
+
+ $tube = 'baz';
+ $timeout = 44;
+
+ $tubeList = new TubeList($tubeName = new TubeName($tube), $tubeNameDefault = new TubeName('default'));
+
+ $client = $this->createMock(PheanstalkInterface::class);
+ $client->expects($this->exactly(2))->method('watch')->with($tubeName)->willReturn(2);
+ $client->expects($this->exactly(2))->method('listTubesWatched')->willReturn($tubeList);
+ $client->expects($this->exactly(2))->method('ignore')->with($tubeNameDefault)->willReturn(1);
+ $client->expects($this->exactly(2))->method('reserveWithTimeout')->with($timeout)->willReturnOnConsecutiveCalls(
+ $this->throwException(new ConnectionException('123', 'foobar')),
+ new Job(new JobId($id), json_encode($beanstalkdEnvelope)),
+ );
$connection = new Connection(['tube_name' => $tube, 'timeout' => $timeout], $client);
@@ -370,10 +411,11 @@ public function testSend()
$expectedDelay = $delay / 1000;
$id = '110';
+ $id2 = '111';
$client = $this->createMock(PheanstalkInterface::class);
$client->expects($this->once())->method('useTube')->with(new TubeName($tube));
- $client->expects($this->once())->method('put')->with(
+ $client->expects($this->exactly(2))->method('put')->with(
$this->callback(function (string $data) use ($body, $headers): bool {
$expectedMessage = json_encode([
'body' => $body,
@@ -385,7 +427,51 @@ public function testSend()
1024,
$expectedDelay,
90
- )->willReturn(new Job(new JobId($id), 'foobar'));
+ )->willReturnOnConsecutiveCalls(
+ new Job(new JobId($id), 'foobar'),
+ new Job(new JobId($id2), 'foobar'),
+ );
+
+ $connection = new Connection(['tube_name' => $tube], $client);
+
+ $returnedId = $connection->send($body, $headers, $delay);
+
+ $this->assertSame($id, $returnedId);
+
+ $returnedId = $connection->send($body, $headers, $delay);
+
+ $this->assertSame($id2, $returnedId);
+ }
+
+ public function testSendOnReconnect()
+ {
+ $tube = 'xyz';
+
+ $body = 'foo';
+ $headers = ['test' => 'bar'];
+ $delay = 1000;
+ $expectedDelay = $delay / 1000;
+
+ $id = '110';
+
+ $client = $this->createMock(PheanstalkInterface::class);
+ $client->expects($this->exactly(2))->method('useTube')->with(new TubeName($tube));
+ $client->expects($this->exactly(2))->method('put')->with(
+ $this->callback(function (string $data) use ($body, $headers): bool {
+ $expectedMessage = json_encode([
+ 'body' => $body,
+ 'headers' => $headers,
+ ]);
+
+ return $expectedMessage === $data;
+ }),
+ 1024,
+ $expectedDelay,
+ 90
+ )->willReturnOnConsecutiveCalls(
+ $this->throwException(new ConnectionException('123', 'foobar')),
+ new Job(new JobId($id), 'foobar'),
+ );
$connection = new Connection(['tube_name' => $tube], $client);
@@ -520,4 +606,5 @@ public function testSendWithRoundedDelay()
interface PheanstalkInterface extends PheanstalkPublisherInterface, PheanstalkSubscriberInterface, PheanstalkManagerInterface
{
+ public function disconnect(): void;
}
diff --git a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Transport/Connection.php
index 232d8596336cf..380186445889f 100644
--- a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Transport/Connection.php
+++ b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Transport/Connection.php
@@ -18,7 +18,6 @@
use Pheanstalk\Exception;
use Pheanstalk\Exception\ConnectionException;
use Pheanstalk\Pheanstalk;
-use Pheanstalk\Values\Job as PheanstalkJob;
use Pheanstalk\Values\JobId;
use Pheanstalk\Values\TubeName;
use Symfony\Component\Messenger\Exception\InvalidArgumentException;
@@ -45,6 +44,9 @@ class Connection
private int $ttr;
private bool $buryOnReject;
+ private bool $usingTube = false;
+ private bool $watchingTube = false;
+
/**
* Constructor.
*
@@ -139,7 +141,7 @@ public function send(string $body, array $headers, int $delay = 0, ?int $priorit
}
return $this->withReconnect(function () use ($message, $delay, $priority) {
- $this->client->useTube($this->tube);
+ $this->useTube();
$job = $this->client->put(
$message,
$priority ?? PheanstalkPublisherInterface::DEFAULT_PRIORITY,
@@ -153,7 +155,11 @@ public function send(string $body, array $headers, int $delay = 0, ?int $priorit
public function get(): ?array
{
- $job = $this->getFromTube();
+ $job = $this->withReconnect(function () {
+ $this->watchTube();
+
+ return $this->client->reserveWithTimeout($this->timeout);
+ });
if (null === $job) {
return null;
@@ -174,25 +180,10 @@ public function get(): ?array
];
}
- private function getFromTube(): ?PheanstalkJob
- {
- return $this->withReconnect(function () {
- if ($this->client->watch($this->tube) > 1) {
- foreach ($this->client->listTubesWatched() as $tube) {
- if ((string) $tube !== (string) $this->tube) {
- $this->client->ignore($tube);
- }
- }
- }
-
- return $this->client->reserveWithTimeout($this->timeout);
- });
- }
-
public function ack(string $id): void
{
$this->withReconnect(function () use ($id) {
- $this->client->useTube($this->tube);
+ $this->useTube();
$this->client->delete(new JobId($id));
});
}
@@ -200,7 +191,7 @@ public function ack(string $id): void
public function reject(string $id, ?int $priority = null, bool $forceDelete = false): void
{
$this->withReconnect(function () use ($id, $priority, $forceDelete) {
- $this->client->useTube($this->tube);
+ $this->useTube();
if (!$forceDelete && $this->buryOnReject) {
$this->client->bury(new JobId($id), $priority ?? PheanstalkPublisherInterface::DEFAULT_PRIORITY);
@@ -213,7 +204,7 @@ public function reject(string $id, ?int $priority = null, bool $forceDelete = fa
public function keepalive(string $id): void
{
$this->withReconnect(function () use ($id) {
- $this->client->useTube($this->tube);
+ $this->useTube();
$this->client->touch(new JobId($id));
});
}
@@ -221,7 +212,7 @@ public function keepalive(string $id): void
public function getMessageCount(): int
{
return $this->withReconnect(function () {
- $this->client->useTube($this->tube);
+ $this->useTube();
$tubeStats = $this->client->statsTube($this->tube);
return $tubeStats->currentJobsReady;
@@ -237,6 +228,33 @@ public function getMessagePriority(string $id): int
});
}
+ private function useTube(): void
+ {
+ if ($this->usingTube) {
+ return;
+ }
+
+ $this->client->useTube($this->tube);
+ $this->usingTube = true;
+ }
+
+ private function watchTube(): void
+ {
+ if ($this->watchingTube) {
+ return;
+ }
+
+ if ($this->client->watch($this->tube) > 1) {
+ foreach ($this->client->listTubesWatched() as $tube) {
+ if ((string) $tube !== (string) $this->tube) {
+ $this->client->ignore($tube);
+ }
+ }
+ }
+
+ $this->watchingTube = true;
+ }
+
private function withReconnect(callable $command): mixed
{
try {
@@ -245,6 +263,9 @@ private function withReconnect(callable $command): mixed
} catch (ConnectionException) {
$this->client->disconnect();
+ $this->usingTube = false;
+ $this->watchingTube = false;
+
return $command();
}
} catch (Exception $exception) {
diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisExtIntegrationTest.php b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisExtIntegrationTest.php
index aa87d8bebbe57..d1b9b67954abd 100644
--- a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisExtIntegrationTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisExtIntegrationTest.php
@@ -460,7 +460,7 @@ private function getConnectionStream(Connection $connection): string
private function skipIfRedisClusterUnavailable()
{
try {
- new \RedisCluster(null, explode(' ', getenv('REDIS_CLUSTER_HOSTS')));
+ new \RedisCluster(null, getenv('REDIS_CLUSTER_HOST') ? explode(' ', getenv('REDIS_CLUSTER_HOST')) : []);
} catch (\Exception $e) {
self::markTestSkipped($e->getMessage());
}
diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md
index a48e4c254ca25..c4eae318d3518 100644
--- a/src/Symfony/Component/Messenger/CHANGELOG.md
+++ b/src/Symfony/Component/Messenger/CHANGELOG.md
@@ -9,6 +9,7 @@ CHANGELOG
* Add `Symfony\Component\Messenger\Middleware\DeduplicateMiddleware` and `Symfony\Component\Messenger\Stamp\DeduplicateStamp`
* Add `--class-filter` option to the `messenger:failed:remove` command
* Add `$stamps` parameter to `HandleTrait::handle`
+ * Add `Symfony\Component\Messenger\EventListener\ResetMemoryUsageListener` to reset PHP's peak memory usage for each processed message
7.2
---
diff --git a/src/Symfony/Component/Messenger/Command/FailedMessagesRetryCommand.php b/src/Symfony/Component/Messenger/Command/FailedMessagesRetryCommand.php
index 47bcd1463a915..15dbe84a37da3 100644
--- a/src/Symfony/Component/Messenger/Command/FailedMessagesRetryCommand.php
+++ b/src/Symfony/Component/Messenger/Command/FailedMessagesRetryCommand.php
@@ -224,8 +224,8 @@ private function runWorker(string $failureTransportName, ReceiverInterface $rece
$this->forceExit = true;
try {
- $choice = $io->choice('Please select an action', ['retry', 'delete', 'skip'], 'retry');
- $shouldHandle = $shouldForce || 'retry' === $choice;
+ $choice = $shouldForce ? 'retry' : $io->choice('Please select an action', ['retry', 'delete', 'skip'], 'retry');
+ $shouldHandle = 'retry' === $choice;
} finally {
$this->forceExit = false;
}
diff --git a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php
index ff81188b87857..41985459c63f1 100644
--- a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php
+++ b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php
@@ -337,7 +337,7 @@ private function registerBusToCollector(ContainerBuilder $container, string $bus
{
$container->setDefinition(
$tracedBusId = 'debug.traced.'.$busId,
- (new Definition(TraceableMessageBus::class, [new Reference($tracedBusId.'.inner')]))->setDecoratedService($busId)
+ (new Definition(TraceableMessageBus::class, [new Reference($tracedBusId.'.inner'), new Reference('profiler.is_disabled_state_checker', ContainerBuilder::IGNORE_ON_INVALID_REFERENCE)]))->setDecoratedService($busId)
);
$container->getDefinition('data_collector.messenger')->addMethodCall('registerBus', [$busId, new Reference($tracedBusId)]);
diff --git a/src/Symfony/Component/Messenger/EventListener/ResetMemoryUsageListener.php b/src/Symfony/Component/Messenger/EventListener/ResetMemoryUsageListener.php
new file mode 100644
index 0000000000000..7a06501c508c8
--- /dev/null
+++ b/src/Symfony/Component/Messenger/EventListener/ResetMemoryUsageListener.php
@@ -0,0 +1,48 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Messenger\EventListener;
+
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent;
+use Symfony\Component\Messenger\Event\WorkerRunningEvent;
+
+/**
+ * @author Tim Düsterhus
+ */
+final class ResetMemoryUsageListener implements EventSubscriberInterface
+{
+ private bool $collect = false;
+
+ public function resetBefore(WorkerMessageReceivedEvent $event): void
+ {
+ // Reset the peak memory usage for accurate measurement of the
+ // memory usage on a per-message basis.
+ memory_reset_peak_usage();
+ $this->collect = true;
+ }
+
+ public function collectAfter(WorkerRunningEvent $event): void
+ {
+ if ($event->isWorkerIdle() && $this->collect) {
+ gc_collect_cycles();
+ $this->collect = false;
+ }
+ }
+
+ public static function getSubscribedEvents(): array
+ {
+ return [
+ WorkerMessageReceivedEvent::class => ['resetBefore', -1024],
+ WorkerRunningEvent::class => ['collectAfter', -1024],
+ ];
+ }
+}
diff --git a/src/Symfony/Component/Messenger/Stamp/DeduplicateStamp.php b/src/Symfony/Component/Messenger/Stamp/DeduplicateStamp.php
index 4e08d5369f261..1b9ff480b4f49 100644
--- a/src/Symfony/Component/Messenger/Stamp/DeduplicateStamp.php
+++ b/src/Symfony/Component/Messenger/Stamp/DeduplicateStamp.php
@@ -12,6 +12,7 @@
namespace Symfony\Component\Messenger\Stamp;
use Symfony\Component\Lock\Key;
+use Symfony\Component\Messenger\Exception\LogicException;
final class DeduplicateStamp implements StampInterface
{
@@ -22,6 +23,10 @@ public function __construct(
private ?float $ttl = 300.0,
private bool $onlyDeduplicateInQueue = false,
) {
+ if (!class_exists(Key::class)) {
+ throw new LogicException(\sprintf('You cannot use the "%s" as the Lock component is not installed. Try running "composer require symfony/lock".', self::class));
+ }
+
$this->key = new Key($key);
}
diff --git a/src/Symfony/Component/Messenger/Tests/Transport/TransportFactoryTest.php b/src/Symfony/Component/Messenger/Tests/Transport/TransportFactoryTest.php
new file mode 100644
index 0000000000000..b3a8647848b0c
--- /dev/null
+++ b/src/Symfony/Component/Messenger/Tests/Transport/TransportFactoryTest.php
@@ -0,0 +1,103 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Messenger\Tests\Transport;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Messenger\Exception\InvalidArgumentException;
+use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
+use Symfony\Component\Messenger\Transport\TransportFactory;
+use Symfony\Component\Messenger\Transport\TransportFactoryInterface;
+use Symfony\Component\Messenger\Transport\TransportInterface;
+
+class TransportFactoryTest extends TestCase
+{
+ /**
+ * @dataProvider provideThrowsExceptionOnUnsupportedTransport
+ */
+ public function testThrowsExceptionOnUnsupportedTransport(array $transportSupport, string $dsn, ?string $expectedMessage)
+ {
+ if (null !== $expectedMessage) {
+ $this->expectException(InvalidArgumentException::class);
+ $this->expectExceptionMessage($expectedMessage);
+ }
+ $serializer = $this->createMock(SerializerInterface::class);
+ $factories = [];
+ foreach ($transportSupport as $supported) {
+ $factory = $this->createMock(TransportFactoryInterface::class);
+ $factory->method('supports', $dsn, [])->willReturn($supported);
+ $factories[] = $factory;
+ }
+
+ $factory = new TransportFactory($factories);
+ $transport = $factory->createTransport($dsn, [], $serializer);
+
+ if (null !== $expectedMessage) {
+ return;
+ }
+
+ self::assertInstanceOf(TransportInterface::class, $transport);
+ }
+
+ public static function provideThrowsExceptionOnUnsupportedTransport(): \Generator
+ {
+ yield 'transport supports dsn' => [
+ [true],
+ 'foobar://barfoo',
+ null,
+ ];
+ yield 'show dsn when no transport supports' => [
+ [false],
+ 'foobar://barfoo',
+ 'No transport supports Messenger DSN "foobar://barfoo".',
+ ];
+ yield 'empty dsn' => [
+ [false],
+ '',
+ 'No transport supports the given Messenger DSN.',
+ ];
+ yield 'dsn with no scheme' => [
+ [false],
+ 'barfoo@bar',
+ 'No transport supports Messenger DSN "barfoo@bar".',
+ ];
+ yield 'dsn with empty scheme ' => [
+ [false],
+ '://barfoo@bar',
+ 'No transport supports Messenger DSN "://barfoo@bar".',
+ ];
+ yield 'https dsn' => [
+ [false],
+ 'https://sqs.foobar.amazonaws.com',
+ 'No transport supports Messenger DSN "https://sqs.foobar.amazonaws.com"',
+ ];
+ yield 'with package suggestion amqp://' => [
+ [false],
+ 'amqp://foo:barfoo@bar',
+ 'No transport supports Messenger DSN "amqp://foo:******@bar". Run "composer require symfony/amqp-messenger" to install AMQP transport.',
+ ];
+ yield 'replaces password with stars' => [
+ [false],
+ 'amqp://myuser:mypassword@broker:5672/vhost',
+ 'No transport supports Messenger DSN "amqp://myuser:******@broker:5672/vhost". Run "composer require symfony/amqp-messenger" to install AMQP transport.',
+ ];
+ yield 'username only is blanked out (as this could be a secret token)' => [
+ [false],
+ 'amqp://myuser@broker:5672/vhost',
+ 'No transport supports Messenger DSN "amqp://******@broker:5672/vhost". Run "composer require symfony/amqp-messenger" to install AMQP transport.',
+ ];
+ yield 'empty password' => [
+ [false],
+ 'amqp://myuser:@broker:5672/vhost',
+ 'No transport supports Messenger DSN "amqp://myuser:******@broker:5672/vhost". Run "composer require symfony/amqp-messenger" to install AMQP transport.',
+ ];
+ }
+}
diff --git a/src/Symfony/Component/Messenger/Tests/WorkerTest.php b/src/Symfony/Component/Messenger/Tests/WorkerTest.php
index 553368a193c09..adb50541a9104 100644
--- a/src/Symfony/Component/Messenger/Tests/WorkerTest.php
+++ b/src/Symfony/Component/Messenger/Tests/WorkerTest.php
@@ -26,6 +26,7 @@
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
use Symfony\Component\Messenger\Event\WorkerStartedEvent;
use Symfony\Component\Messenger\Event\WorkerStoppedEvent;
+use Symfony\Component\Messenger\EventListener\ResetMemoryUsageListener;
use Symfony\Component\Messenger\EventListener\ResetServicesListener;
use Symfony\Component\Messenger\EventListener\StopWorkerOnMessageLimitListener;
use Symfony\Component\Messenger\Exception\RuntimeException;
@@ -586,7 +587,7 @@ public function testFlushBatchOnStop()
$this->assertSame($expectedMessages, $handler->processedMessages);
}
- public function testGcCollectCyclesIsCalledOnMessageHandle()
+ public function testGcCollectCyclesIsCalledOnIdleWorker()
{
$apiMessage = new DummyMessage('API');
@@ -595,14 +596,63 @@ public function testGcCollectCyclesIsCalledOnMessageHandle()
$bus = $this->createMock(MessageBusInterface::class);
$dispatcher = new EventDispatcher();
+ $dispatcher->addSubscriber(new ResetMemoryUsageListener());
+ $before = 0;
+ $dispatcher->addListener(WorkerRunningEvent::class, function (WorkerRunningEvent $event) use (&$before) {
+ static $i = 0;
+
+ $after = gc_status()['runs'];
+ if (0 === $i) {
+ $this->assertFalse($event->isWorkerIdle());
+ $this->assertSame(0, $after - $before);
+ } elseif (1 === $i) {
+ $this->assertTrue($event->isWorkerIdle());
+ $this->assertSame(1, $after - $before);
+ } elseif (3 === $i) {
+ // Wait a few idle phases before stopping.
+ $this->assertSame(1, $after - $before);
+ $event->getWorker()->stop();
+ }
+
+ ++$i;
+ }, \PHP_INT_MIN);
+
+ $worker = new Worker(['transport' => $receiver], $bus, $dispatcher);
+
+ gc_collect_cycles();
+ $before = gc_status()['runs'];
+
+ $worker->run([
+ 'sleep' => 0,
+ ]);
+ }
+
+ public function testMemoryUsageIsResetOnMessageHandle()
+ {
+ $apiMessage = new DummyMessage('API');
+
+ $receiver = new DummyReceiver([[new Envelope($apiMessage)]]);
+
+ $bus = $this->createMock(MessageBusInterface::class);
+
+ $dispatcher = new EventDispatcher();
+ $dispatcher->addSubscriber(new ResetMemoryUsageListener());
$dispatcher->addSubscriber(new StopWorkerOnMessageLimitListener(1));
+ // Allocate and deallocate 4 MB. The use of random_int() is to
+ // prevent compile-time optimization.
+ $memory = str_repeat(random_int(0, 1), 4 * 1024 * 1024);
+ unset($memory);
+
+ $before = memory_get_peak_usage();
+
$worker = new Worker(['transport' => $receiver], $bus, $dispatcher);
$worker->run();
- $gcStatus = gc_status();
+ // This should be roughly 4 MB smaller than $before.
+ $after = memory_get_peak_usage();
- $this->assertGreaterThan(0, $gcStatus['runs']);
+ $this->assertTrue($after < $before);
}
/**
diff --git a/src/Symfony/Component/Messenger/TraceableMessageBus.php b/src/Symfony/Component/Messenger/TraceableMessageBus.php
index 7f0ac09219f18..b5fb6eea3782a 100644
--- a/src/Symfony/Component/Messenger/TraceableMessageBus.php
+++ b/src/Symfony/Component/Messenger/TraceableMessageBus.php
@@ -20,11 +20,16 @@ class TraceableMessageBus implements MessageBusInterface
public function __construct(
private MessageBusInterface $decoratedBus,
+ protected readonly ?\Closure $disabled = null,
) {
}
public function dispatch(object $message, array $stamps = []): Envelope
{
+ if ($this->disabled?->__invoke()) {
+ return $this->decoratedBus->dispatch($message, $stamps);
+ }
+
$envelope = Envelope::wrap($message, $stamps);
$context = [
'stamps' => array_merge([], ...array_values($envelope->all())),
diff --git a/src/Symfony/Component/Messenger/Transport/TransportFactory.php b/src/Symfony/Component/Messenger/Transport/TransportFactory.php
index ae0db36d31127..e939a77ffa401 100644
--- a/src/Symfony/Component/Messenger/Transport/TransportFactory.php
+++ b/src/Symfony/Component/Messenger/Transport/TransportFactory.php
@@ -53,6 +53,10 @@ public function createTransport(#[\SensitiveParameter] string $dsn, array $optio
$packageSuggestion = ' Run "composer require symfony/beanstalkd-messenger" to install Beanstalkd transport.';
}
+ if ($dsn = $this->santitizeDsn($dsn)) {
+ throw new InvalidArgumentException(\sprintf('No transport supports Messenger DSN "%s".', $dsn).$packageSuggestion);
+ }
+
throw new InvalidArgumentException('No transport supports the given Messenger DSN.'.$packageSuggestion);
}
@@ -66,4 +70,41 @@ public function supports(#[\SensitiveParameter] string $dsn, array $options): bo
return false;
}
+
+ private function santitizeDsn(string $dsn): string
+ {
+ $parts = parse_url($dsn);
+ $dsn = '';
+
+ if (isset($parts['scheme'])) {
+ $dsn .= $parts['scheme'].'://';
+ }
+
+ if (isset($parts['user']) && !isset($parts['pass'])) {
+ $dsn .= '******';
+ } elseif (isset($parts['user'])) {
+ $dsn .= $parts['user'];
+ }
+
+ if (isset($parts['pass'])) {
+ $dsn .= ':******';
+ }
+
+ if (isset($parts['host'])) {
+ if (isset($parts['user'])) {
+ $dsn .= '@';
+ }
+ $dsn .= $parts['host'];
+ }
+
+ if (isset($parts['port'])) {
+ $dsn .= ':'.$parts['port'];
+ }
+
+ if (isset($parts['path'])) {
+ $dsn .= $parts['path'];
+ }
+
+ return $dsn;
+ }
}
diff --git a/src/Symfony/Component/Messenger/Worker.php b/src/Symfony/Component/Messenger/Worker.php
index 14b30ba5645bf..f2500e3e779e8 100644
--- a/src/Symfony/Component/Messenger/Worker.php
+++ b/src/Symfony/Component/Messenger/Worker.php
@@ -128,8 +128,6 @@ public function run(array $options = []): void
// this should prevent multiple lower priority receivers from
// blocking too long before the higher priority are checked
if ($envelopeHandled) {
- gc_collect_cycles();
-
break;
}
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Bluesky/Tests/BlueskyTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Bluesky/Tests/BlueskyTransportTest.php
index b47a817ca551d..b3aad04279e93 100644
--- a/src/Symfony/Component/Notifier/Bridge/Bluesky/Tests/BlueskyTransportTest.php
+++ b/src/Symfony/Component/Notifier/Bridge/Bluesky/Tests/BlueskyTransportTest.php
@@ -344,28 +344,28 @@ public function testReturnedMessageId()
public static function sendMessageWithEmbedDataProvider(): iterable
{
yield 'With media' => [
- 'options' => (new BlueskyOptions())->attachMedia(new File(__DIR__.'/fixtures.gif'), 'A fixture'),
- 'expectedResponse' => '{"repo":null,"collection":"app.bsky.feed.post","record":{"$type":"app.bsky.feed.post","text":"Hello World!","createdAt":"2024-04-28T08:40:17.000000Z","embed":{"$type":"app.bsky.embed.images","images":[{"alt":"A fixture","image":{"$type":"blob","ref":{"$link":"bafkreibabalobzn6cd366ukcsjycp4yymjymgfxcv6xczmlgpemzkz3cfa"},"mimeType":"image\/png","size":760898}}]}}}',
+ 'blueskyOptions' => (new BlueskyOptions())->attachMedia(new File(__DIR__.'/fixtures.gif'), 'A fixture'),
+ 'expectedJsonResponse' => '{"repo":null,"collection":"app.bsky.feed.post","record":{"$type":"app.bsky.feed.post","text":"Hello World!","createdAt":"2024-04-28T08:40:17.000000Z","embed":{"$type":"app.bsky.embed.images","images":[{"alt":"A fixture","image":{"$type":"blob","ref":{"$link":"bafkreibabalobzn6cd366ukcsjycp4yymjymgfxcv6xczmlgpemzkz3cfa"},"mimeType":"image\/png","size":760898}}]}}}',
];
yield 'With website preview card and all optionnal informations' => [
- 'options' => (new BlueskyOptions())
+ 'blueskyOptions' => (new BlueskyOptions())
->attachCard(
'https://example.com',
new File(__DIR__.'/fixtures.gif'),
'Fork me im famous',
'Click here to go to website!'
),
- 'expectedResponse' => '{"repo":null,"collection":"app.bsky.feed.post","record":{"$type":"app.bsky.feed.post","text":"Hello World!","createdAt":"2024-04-28T08:40:17.000000Z","embed":{"$type":"app.bsky.embed.external","external":{"uri":"https:\/\/example.com","title":"Fork me im famous","description":"Click here to go to website!","thumb":{"$type":"blob","ref":{"$link":"bafkreibabalobzn6cd366ukcsjycp4yymjymgfxcv6xczmlgpemzkz3cfa"},"mimeType":"image\/png","size":760898}}}}}',
+ 'expectedJsonResponse' => '{"repo":null,"collection":"app.bsky.feed.post","record":{"$type":"app.bsky.feed.post","text":"Hello World!","createdAt":"2024-04-28T08:40:17.000000Z","embed":{"$type":"app.bsky.embed.external","external":{"uri":"https:\/\/example.com","title":"Fork me im famous","description":"Click here to go to website!","thumb":{"$type":"blob","ref":{"$link":"bafkreibabalobzn6cd366ukcsjycp4yymjymgfxcv6xczmlgpemzkz3cfa"},"mimeType":"image\/png","size":760898}}}}}',
];
yield 'With website preview card and minimal information' => [
- 'options' => (new BlueskyOptions())
+ 'blueskyOptions' => (new BlueskyOptions())
->attachCard(
'https://example.com',
new File(__DIR__.'/fixtures.gif')
),
- 'expectedResponse' => '{"repo":null,"collection":"app.bsky.feed.post","record":{"$type":"app.bsky.feed.post","text":"Hello World!","createdAt":"2024-04-28T08:40:17.000000Z","embed":{"$type":"app.bsky.embed.external","external":{"uri":"https:\/\/example.com","title":"","description":"","thumb":{"$type":"blob","ref":{"$link":"bafkreibabalobzn6cd366ukcsjycp4yymjymgfxcv6xczmlgpemzkz3cfa"},"mimeType":"image\/png","size":760898}}}}}',
+ 'expectedJsonResponse' => '{"repo":null,"collection":"app.bsky.feed.post","record":{"$type":"app.bsky.feed.post","text":"Hello World!","createdAt":"2024-04-28T08:40:17.000000Z","embed":{"$type":"app.bsky.embed.external","external":{"uri":"https:\/\/example.com","title":"","description":"","thumb":{"$type":"blob","ref":{"$link":"bafkreibabalobzn6cd366ukcsjycp4yymjymgfxcv6xczmlgpemzkz3cfa"},"mimeType":"image\/png","size":760898}}}}}',
];
}
diff --git a/src/Symfony/Component/Notifier/Bridge/ClickSend/ClickSendTransport.php b/src/Symfony/Component/Notifier/Bridge/ClickSend/ClickSendTransport.php
index 8d8987e4f7c7a..65f48bcd7ac19 100644
--- a/src/Symfony/Component/Notifier/Bridge/ClickSend/ClickSendTransport.php
+++ b/src/Symfony/Component/Notifier/Bridge/ClickSend/ClickSendTransport.php
@@ -75,19 +75,19 @@ protected function doSend(MessageInterface $message): SentMessage
$options['from'] = $message->getFrom() ?: $this->from;
$options['source'] ??= $this->source;
$options['list_id'] ??= $this->listId;
- $options['from_email'] ?? $this->fromEmail;
+ $options['from_email'] ??= $this->fromEmail;
if (isset($options['from']) && !preg_match('/^[a-zA-Z0-9\s]{3,11}$/', $options['from']) && !preg_match('/^\+[1-9]\d{1,14}$/', $options['from'])) {
throw new InvalidArgumentException(\sprintf('The "From" number "%s" is not a valid phone number, shortcode, or alphanumeric sender ID.', $options['from']));
}
- if ($options['list_id'] ?? false) {
+ if (!$options['list_id']) {
$options['to'] = $message->getPhone();
}
$response = $this->client->request('POST', $endpoint, [
'auth_basic' => [$this->apiUsername, $this->apiKey],
- 'json' => array_filter($options),
+ 'json' => ['messages' => [array_filter($options)]],
]);
try {
diff --git a/src/Symfony/Component/Notifier/Bridge/ClickSend/Tests/ClickSendTransportTest.php b/src/Symfony/Component/Notifier/Bridge/ClickSend/Tests/ClickSendTransportTest.php
index 6afae4409fa57..532c5aceba3aa 100644
--- a/src/Symfony/Component/Notifier/Bridge/ClickSend/Tests/ClickSendTransportTest.php
+++ b/src/Symfony/Component/Notifier/Bridge/ClickSend/Tests/ClickSendTransportTest.php
@@ -24,7 +24,7 @@
final class ClickSendTransportTest extends TransportTestCase
{
- public static function createTransport(?HttpClientInterface $client = null, string $from = 'test_from', string $source = 'test_source', int $listId = 99, string $fromEmail = 'foo@bar.com'): ClickSendTransport
+ public static function createTransport(?HttpClientInterface $client = null, ?string $from = 'test_from', ?string $source = 'test_source', ?int $listId = 99, ?string $fromEmail = 'foo@bar.com'): ClickSendTransport
{
return new ClickSendTransport('test_username', 'test_key', $from, $source, $listId, $fromEmail, $client ?? new MockHttpClient());
}
@@ -63,16 +63,47 @@ public function testNoInvalidArgumentExceptionIsThrownIfFromIsValid(string $from
$response = $this->createMock(ResponseInterface::class);
$response->expects(self::exactly(2))->method('getStatusCode')->willReturn(200);
$response->expects(self::once())->method('getContent')->willReturn('');
- $client = new MockHttpClient(function (string $method, string $url) use ($response): ResponseInterface {
+ $client = new MockHttpClient(function (string $method, string $url, array $options) use ($response): ResponseInterface {
self::assertSame('POST', $method);
self::assertSame('https://rest.clicksend.com/v3/sms/send', $url);
+ $body = json_decode($options['body'], true);
+ self::assertIsArray($body);
+ self::assertArrayHasKey('messages', $body);
+ $message = reset($body['messages']);
+ self::assertArrayHasKey('from_email', $message);
+ self::assertArrayHasKey('list_id', $message);
+ self::assertArrayNotHasKey('to', $message);
+
return $response;
});
$transport = $this->createTransport($client, $from);
$transport->send($message);
}
+ public function testNoInvalidArgumentExceptionIsThrownIfFromIsValidWithoutOptionalParameters()
+ {
+ $message = new SmsMessage('+33612345678', 'Hello!');
+ $response = $this->createMock(ResponseInterface::class);
+ $response->expects(self::exactly(2))->method('getStatusCode')->willReturn(200);
+ $response->expects(self::once())->method('getContent')->willReturn('');
+ $client = new MockHttpClient(function (string $method, string $url, array $options) use ($response): ResponseInterface {
+ self::assertSame('POST', $method);
+ self::assertSame('https://rest.clicksend.com/v3/sms/send', $url);
+
+ $body = json_decode($options['body'], true);
+ self::assertIsArray($body);
+ self::assertArrayHasKey('messages', $body);
+ $message = reset($body['messages']);
+ self::assertArrayNotHasKey('list_id', $message);
+ self::assertArrayHasKey('to', $message);
+
+ return $response;
+ });
+ $transport = $this->createTransport($client, null, null, null, null);
+ $transport->send($message);
+ }
+
public static function toStringProvider(): iterable
{
yield ['clicksend://rest.clicksend.com?from=test_from&source=test_source&list_id=99&from_email=foo%40bar.com', self::createTransport()];
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordAuthorEmbedObject.php b/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordAuthorEmbedObject.php
index a69b8846df48c..4a8356baceec5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordAuthorEmbedObject.php
+++ b/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordAuthorEmbedObject.php
@@ -25,7 +25,7 @@ final class DiscordAuthorEmbedObject extends AbstractDiscordEmbedObject
*/
public function name(string $name): static
{
- if (\strlen($name) > self::NAME_LIMIT) {
+ if (mb_strlen($name, 'UTF-8') > self::NAME_LIMIT) {
throw new LengthException(\sprintf('Maximum length for the name is %d characters.', self::NAME_LIMIT));
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordEmbed.php b/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordEmbed.php
index 262877f7907dc..29f6750ebd3fb 100644
--- a/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordEmbed.php
+++ b/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordEmbed.php
@@ -27,7 +27,7 @@ final class DiscordEmbed extends AbstractDiscordEmbed
*/
public function title(string $title): static
{
- if (\strlen($title) > self::TITLE_LIMIT) {
+ if (mb_strlen($title, 'UTF-8') > self::TITLE_LIMIT) {
throw new LengthException(\sprintf('Maximum length for the title is %d characters.', self::TITLE_LIMIT));
}
@@ -41,7 +41,7 @@ public function title(string $title): static
*/
public function description(string $description): static
{
- if (\strlen($description) > self::DESCRIPTION_LIMIT) {
+ if (mb_strlen($description, 'UTF-8') > self::DESCRIPTION_LIMIT) {
throw new LengthException(\sprintf('Maximum length for the description is %d characters.', self::DESCRIPTION_LIMIT));
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordFieldEmbedObject.php b/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordFieldEmbedObject.php
index 5ff44c3cf6c88..b529f55d602ee 100644
--- a/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordFieldEmbedObject.php
+++ b/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordFieldEmbedObject.php
@@ -26,7 +26,7 @@ final class DiscordFieldEmbedObject extends AbstractDiscordEmbedObject
*/
public function name(string $name): static
{
- if (\strlen($name) > self::NAME_LIMIT) {
+ if (mb_strlen($name, 'UTF-8') > self::NAME_LIMIT) {
throw new LengthException(\sprintf('Maximum length for the name is %d characters.', self::NAME_LIMIT));
}
@@ -40,7 +40,7 @@ public function name(string $name): static
*/
public function value(string $value): static
{
- if (\strlen($value) > self::VALUE_LIMIT) {
+ if (mb_strlen($value, 'UTF-8') > self::VALUE_LIMIT) {
throw new LengthException(\sprintf('Maximum length for the value is %d characters.', self::VALUE_LIMIT));
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordFooterEmbedObject.php b/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordFooterEmbedObject.php
index d768da6d5b641..8d606ee6c4e68 100644
--- a/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordFooterEmbedObject.php
+++ b/src/Symfony/Component/Notifier/Bridge/Discord/Embeds/DiscordFooterEmbedObject.php
@@ -25,7 +25,7 @@ final class DiscordFooterEmbedObject extends AbstractDiscordEmbedObject
*/
public function text(string $text): static
{
- if (\strlen($text) > self::TEXT_LIMIT) {
+ if (mb_strlen($text, 'UTF-8') > self::TEXT_LIMIT) {
throw new LengthException(\sprintf('Maximum length for the text is %d characters.', self::TEXT_LIMIT));
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordAuthorEmbedObjectTest.php b/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordAuthorEmbedObjectTest.php
index 1fa525505d909..dcc6d2198b527 100644
--- a/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordAuthorEmbedObjectTest.php
+++ b/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordAuthorEmbedObjectTest.php
@@ -38,6 +38,6 @@ public function testThrowsWhenNameExceedsCharacterLimit()
$this->expectException(LengthException::class);
$this->expectExceptionMessage('Maximum length for the name is 256 characters.');
- (new DiscordAuthorEmbedObject())->name(str_repeat('h', 257));
+ (new DiscordAuthorEmbedObject())->name(str_repeat('š', 257));
}
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordEmbedTest.php b/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordEmbedTest.php
index 02fdd40b5d64a..f79786f6ae7e2 100644
--- a/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordEmbedTest.php
+++ b/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordEmbedTest.php
@@ -45,7 +45,7 @@ public function testThrowsWhenTitleExceedsCharacterLimit()
$this->expectException(LengthException::class);
$this->expectExceptionMessage('Maximum length for the title is 256 characters.');
- (new DiscordEmbed())->title(str_repeat('h', 257));
+ (new DiscordEmbed())->title(str_repeat('š', 257));
}
public function testThrowsWhenDescriptionExceedsCharacterLimit()
@@ -53,7 +53,7 @@ public function testThrowsWhenDescriptionExceedsCharacterLimit()
$this->expectException(LengthException::class);
$this->expectExceptionMessage('Maximum length for the description is 4096 characters.');
- (new DiscordEmbed())->description(str_repeat('h', 4097));
+ (new DiscordEmbed())->description(str_repeat('š', 4097));
}
public function testThrowsWhenFieldsLimitReached()
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordFieldEmbedObjectTest.php b/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordFieldEmbedObjectTest.php
index c432aab995385..77594c458793e 100644
--- a/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordFieldEmbedObjectTest.php
+++ b/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordFieldEmbedObjectTest.php
@@ -36,7 +36,7 @@ public function testThrowsWhenNameExceedsCharacterLimit()
$this->expectException(LengthException::class);
$this->expectExceptionMessage('Maximum length for the name is 256 characters.');
- (new DiscordFieldEmbedObject())->name(str_repeat('h', 257));
+ (new DiscordFieldEmbedObject())->name(str_repeat('š', 257));
}
public function testThrowsWhenValueExceedsCharacterLimit()
@@ -44,6 +44,6 @@ public function testThrowsWhenValueExceedsCharacterLimit()
$this->expectException(LengthException::class);
$this->expectExceptionMessage('Maximum length for the value is 1024 characters.');
- (new DiscordFieldEmbedObject())->value(str_repeat('h', 1025));
+ (new DiscordFieldEmbedObject())->value(str_repeat('š', 1025));
}
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordFooterEmbedObjectTest.php b/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordFooterEmbedObjectTest.php
index c9d50a46b89d2..b1c60d6f74d91 100644
--- a/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordFooterEmbedObjectTest.php
+++ b/src/Symfony/Component/Notifier/Bridge/Discord/Tests/Embeds/DiscordFooterEmbedObjectTest.php
@@ -36,6 +36,6 @@ public function testThrowsWhenTextExceedsCharacterLimit()
$this->expectException(LengthException::class);
$this->expectExceptionMessage('Maximum length for the text is 2048 characters.');
- (new DiscordFooterEmbedObject())->text(str_repeat('h', 2049));
+ (new DiscordFooterEmbedObject())->text(str_repeat('š', 2049));
}
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Mercure/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/Mercure/CHANGELOG.md
index 1f2b652ac20ea..956a1d641042e 100644
--- a/src/Symfony/Component/Notifier/Bridge/Mercure/CHANGELOG.md
+++ b/src/Symfony/Component/Notifier/Bridge/Mercure/CHANGELOG.md
@@ -1,6 +1,11 @@
CHANGELOG
=========
+7.3
+---
+
+* Add `content` option
+
5.3
---
diff --git a/src/Symfony/Component/Notifier/Bridge/Mercure/MercureOptions.php b/src/Symfony/Component/Notifier/Bridge/Mercure/MercureOptions.php
index e47a0113cd34b..85a513cee6901 100644
--- a/src/Symfony/Component/Notifier/Bridge/Mercure/MercureOptions.php
+++ b/src/Symfony/Component/Notifier/Bridge/Mercure/MercureOptions.php
@@ -22,6 +22,21 @@ final class MercureOptions implements MessageOptionsInterface
/**
* @param string|string[]|null $topics
+ * @param array{
+ * badge?: string,
+ * body?: string,
+ * data?: mixed,
+ * dir?: 'auto'|'ltr'|'rtl',
+ * icon?: string,
+ * image?: string,
+ * lang?: string,
+ * renotify?: bool,
+ * requireInteraction?: bool,
+ * silent?: bool,
+ * tag?: string,
+ * timestamp?: int,
+ * vibrate?: int|list,
+ * }|null $content
*/
public function __construct(
string|array|null $topics = null,
@@ -29,6 +44,7 @@ public function __construct(
private ?string $id = null,
private ?string $type = null,
private ?int $retry = null,
+ private ?array $content = null,
) {
$this->topics = null !== $topics ? (array) $topics : null;
}
@@ -61,6 +77,28 @@ public function getRetry(): ?int
return $this->retry;
}
+ /**
+ * @return array{
+ * badge?: string,
+ * body?: string,
+ * data?: mixed,
+ * dir?: 'auto'|'ltr'|'rtl',
+ * icon?: string,
+ * image?: string,
+ * lang?: string,
+ * renotify?: bool,
+ * requireInteraction?: bool,
+ * silent?: bool,
+ * tag?: string,
+ * timestamp?: int,
+ * vibrate?: int|list,
+ * }|null
+ */
+ public function getContent(): ?array
+ {
+ return $this->content;
+ }
+
public function toArray(): array
{
return [
@@ -69,6 +107,7 @@ public function toArray(): array
'id' => $this->id,
'type' => $this->type,
'retry' => $this->retry,
+ 'content' => $this->content,
];
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Mercure/MercureTransport.php b/src/Symfony/Component/Notifier/Bridge/Mercure/MercureTransport.php
index 1be37a534ff88..cfdaed50964c2 100644
--- a/src/Symfony/Component/Notifier/Bridge/Mercure/MercureTransport.php
+++ b/src/Symfony/Component/Notifier/Bridge/Mercure/MercureTransport.php
@@ -77,6 +77,8 @@ protected function doSend(MessageInterface $message): SentMessage
'@context' => 'https://www.w3.org/ns/activitystreams',
'type' => 'Announce',
'summary' => $message->getSubject(),
+ 'mediaType' => 'application/json',
+ 'content' => $options->getContent(),
]), $options->isPrivate(), $options->getId(), $options->getType(), $options->getRetry());
try {
diff --git a/src/Symfony/Component/Notifier/Bridge/Mercure/Tests/MercureOptionsTest.php b/src/Symfony/Component/Notifier/Bridge/Mercure/Tests/MercureOptionsTest.php
index 7503f9e40456f..aa5d3ce8f024c 100644
--- a/src/Symfony/Component/Notifier/Bridge/Mercure/Tests/MercureOptionsTest.php
+++ b/src/Symfony/Component/Notifier/Bridge/Mercure/Tests/MercureOptionsTest.php
@@ -24,12 +24,13 @@ public function testConstructWithDefaults()
'id' => null,
'type' => null,
'retry' => null,
+ 'content' => null,
]);
}
public function testConstructWithParameters()
{
- $options = (new MercureOptions('/topic/1', true, 'id', 'type', 1));
+ $options = (new MercureOptions('/topic/1', true, 'id', 'type', 1, ['tag' => '1234', 'body' => 'TEST']));
$this->assertSame($options->toArray(), [
'topics' => ['/topic/1'],
@@ -37,6 +38,7 @@ public function testConstructWithParameters()
'id' => 'id',
'type' => 'type',
'retry' => 1,
+ 'content' => ['tag' => '1234', 'body' => 'TEST'],
]);
}
diff --git a/src/Symfony/Component/Notifier/Bridge/Mercure/Tests/MercureTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Mercure/Tests/MercureTransportTest.php
index bfe9190a8e592..40b07f1ffc58b 100644
--- a/src/Symfony/Component/Notifier/Bridge/Mercure/Tests/MercureTransportTest.php
+++ b/src/Symfony/Component/Notifier/Bridge/Mercure/Tests/MercureTransportTest.php
@@ -114,7 +114,7 @@ public function testSendWithMercureOptions()
{
$hub = new MockHub('https://foo.com/.well-known/mercure', new StaticTokenProvider('foo'), function (Update $update): string {
$this->assertSame(['/topic/1', '/topic/2'], $update->getTopics());
- $this->assertSame('{"@context":"https:\/\/www.w3.org\/ns\/activitystreams","type":"Announce","summary":"subject"}', $update->getData());
+ $this->assertSame('{"@context":"https:\/\/www.w3.org\/ns\/activitystreams","type":"Announce","summary":"subject","mediaType":"application\/json","content":{"tag":"1234","body":"TEST"}}', $update->getData());
$this->assertSame('id', $update->getId());
$this->assertSame('type', $update->getType());
$this->assertSame(1, $update->getRetry());
@@ -123,14 +123,14 @@ public function testSendWithMercureOptions()
return 'id';
});
- self::createTransport(null, $hub)->send(new ChatMessage('subject', new MercureOptions(['/topic/1', '/topic/2'], true, 'id', 'type', 1)));
+ self::createTransport(null, $hub)->send(new ChatMessage('subject', new MercureOptions(['/topic/1', '/topic/2'], true, 'id', 'type', 1, ['tag' => '1234', 'body' => 'TEST'])));
}
public function testSendWithMercureOptionsButWithoutOptionTopic()
{
$hub = new MockHub('https://foo.com/.well-known/mercure', new StaticTokenProvider('foo'), function (Update $update): string {
$this->assertSame(['https://symfony.com/notifier'], $update->getTopics());
- $this->assertSame('{"@context":"https:\/\/www.w3.org\/ns\/activitystreams","type":"Announce","summary":"subject"}', $update->getData());
+ $this->assertSame('{"@context":"https:\/\/www.w3.org\/ns\/activitystreams","type":"Announce","summary":"subject","mediaType":"application\/json","content":null}', $update->getData());
$this->assertSame('id', $update->getId());
$this->assertSame('type', $update->getType());
$this->assertSame(1, $update->getRetry());
@@ -146,7 +146,7 @@ public function testSendWithoutMercureOptions()
{
$hub = new MockHub('https://foo.com/.well-known/mercure', new StaticTokenProvider('foo'), function (Update $update): string {
$this->assertSame(['https://symfony.com/notifier'], $update->getTopics());
- $this->assertSame('{"@context":"https:\/\/www.w3.org\/ns\/activitystreams","type":"Announce","summary":"subject"}', $update->getData());
+ $this->assertSame('{"@context":"https:\/\/www.w3.org\/ns\/activitystreams","type":"Announce","summary":"subject","mediaType":"application\/json","content":null}', $update->getData());
$this->assertFalse($update->isPrivate());
return 'id';
diff --git a/src/Symfony/Component/Notifier/Bridge/Smsbox/composer.json b/src/Symfony/Component/Notifier/Bridge/Smsbox/composer.json
index 259fb81e9bcae..0b1907fb71f15 100644
--- a/src/Symfony/Component/Notifier/Bridge/Smsbox/composer.json
+++ b/src/Symfony/Component/Notifier/Bridge/Smsbox/composer.json
@@ -31,7 +31,7 @@
"symfony/polyfill-php83": "^1.28"
},
"require-dev": {
- "symfony/webhook": "^6.4|^7.0|^7.2"
+ "symfony/webhook": "^6.4|^7.0"
},
"autoload": {
"psr-4": {
diff --git a/src/Symfony/Component/Notifier/Tests/Channel/AbstractChannelTest.php b/src/Symfony/Component/Notifier/Tests/Channel/AbstractChannelTest.php
index ae93ba2732d85..2f360d83c1685 100644
--- a/src/Symfony/Component/Notifier/Tests/Channel/AbstractChannelTest.php
+++ b/src/Symfony/Component/Notifier/Tests/Channel/AbstractChannelTest.php
@@ -34,7 +34,6 @@ class DummyChannel extends AbstractChannel
{
public function notify(Notification $notification, RecipientInterface $recipient, ?string $transportName = null): void
{
- return;
}
public function supports(Notification $notification, RecipientInterface $recipient): bool
diff --git a/src/Symfony/Component/ObjectMapper/Attribute/Map.php b/src/Symfony/Component/ObjectMapper/Attribute/Map.php
index f3057bf14cd26..143842221d496 100644
--- a/src/Symfony/Component/ObjectMapper/Attribute/Map.php
+++ b/src/Symfony/Component/ObjectMapper/Attribute/Map.php
@@ -19,7 +19,7 @@
* @author Antoine Bluchet
*/
#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_PROPERTY | \Attribute::IS_REPEATABLE)]
-readonly class Map
+class Map
{
/**
* @param string|class-string|null $source The property or the class to map from
@@ -28,10 +28,10 @@
* @param (string|callable(mixed, object): mixed)|(string|callable(mixed, object): mixed)[]|null $transform A service id or a callable that transforms the value during mapping
*/
public function __construct(
- public ?string $target = null,
- public ?string $source = null,
- public mixed $if = null,
- public mixed $transform = null,
+ public readonly ?string $target = null,
+ public readonly ?string $source = null,
+ public readonly mixed $if = null,
+ public readonly mixed $transform = null,
) {
}
}
diff --git a/src/Symfony/Component/ObjectMapper/Condition/TargetClass.php b/src/Symfony/Component/ObjectMapper/Condition/TargetClass.php
new file mode 100644
index 0000000000000..c44dccc840d24
--- /dev/null
+++ b/src/Symfony/Component/ObjectMapper/Condition/TargetClass.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\ObjectMapper\Condition;
+
+use Symfony\Component\ObjectMapper\ConditionCallableInterface;
+
+/**
+ * @template T of object
+ *
+ * @implements ConditionCallableInterface
Too many failed login attempts, please try again in %minutes% minutes.
- Занадта шмат няўдалых спробаў уваходу, калі ласка, паспрабуйце зноў праз %minutes% хвіліну.|Занадта шмат няўдалых спробаў уваходу, калі ласка, паспрабуйце зноў праз %minutes% хвіліны.|Занадта шмат няўдалых спробаў уваходу, калі ласка, паспрабуйце зноў праз %minutes% хвілін.
+ Занадта вялікая колькасць няўдалых спробаў уваходу. Калі ласка, паспрабуйце зноў праз %minutes% хвіліну.|Занадта вялікая колькасць няўдалых спробаў уваходу. Калі ласка, паспрабуйце зноў праз %minutes% хвіліны.|Занадта вялікая колькасць няўдалых спробаў уваходу. Калі ласка, паспрабуйце зноў праз %minutes% хвілін.