123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\Framework\Locale\Deployed;
- use Magento\Framework\App\DeploymentConfig;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\App\State;
- use Magento\Framework\Config\ConfigOptionsListConstants as Constants;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Framework\Locale\AvailableLocalesInterface;
- use Magento\Framework\Locale\ListsInterface;
- use Magento\Framework\Locale\OptionInterface;
- use Magento\Framework\View\DesignInterface;
- /**
- * Returns options array of locales that have deployed static content.
- */
- class Options implements OptionInterface
- {
- /**
- * Application state class.
- *
- * @var State
- */
- private $state;
- /**
- * Operates with available locales.
- *
- * @var AvailableLocalesInterface
- */
- private $availableLocales;
- /**
- * Operates with magento design settings.
- *
- * @var DesignInterface
- */
- private $design;
- /**
- * Locales lists.
- *
- * @var ListsInterface
- */
- private $localeLists;
- /**
- * @var DeploymentConfig
- */
- private $deploymentConfig;
- /**
- * @param ListsInterface $localeLists locales list
- * @param State $state application state class
- * @param AvailableLocalesInterface $availableLocales operates with available locales
- * @param DesignInterface $design operates with magento design settings
- * @param DeploymentConfig $deploymentConfig
- */
- public function __construct(
- ListsInterface $localeLists,
- State $state,
- AvailableLocalesInterface $availableLocales,
- DesignInterface $design,
- DeploymentConfig $deploymentConfig = null
- ) {
- $this->localeLists = $localeLists;
- $this->state = $state;
- $this->availableLocales = $availableLocales;
- $this->design = $design;
- $this->deploymentConfig = $deploymentConfig ?: ObjectManager::getInstance()->get(DeploymentConfig::class);
- }
- /**
- * {@inheritdoc}
- */
- public function getOptionLocales(): array
- {
- return $this->filterLocales($this->localeLists->getOptionLocales());
- }
- /**
- * {@inheritdoc}
- */
- public function getTranslatedOptionLocales(): array
- {
- return $this->filterLocales($this->localeLists->getTranslatedOptionLocales());
- }
- /**
- * Filter list of locales by available locales for current theme and depends on running application mode.
- *
- * Applies filters only in production mode when flag 'static_content_on_demand_in_production' is not enabled.
- * For example, if the current design theme has only one generated locale en_GB then for given array of locales:
- * ```php
- * $locales = [
- * 0 => [
- * 'value' => 'da_DK'
- * 'label' => 'Danish (Denmark)'
- * ],
- * 1 => [
- * 'value' => 'de_DE'
- * 'label' => 'German (Germany)'
- * ],
- * 2 => [
- * 'value' => 'en_GB'
- * 'label' => 'English (United Kingdom)'
- * ],
- * ]
- * ```
- * result will be:
- * ```php
- * [
- * 2 => [
- * 'value' => 'en_GB'
- * 'label' => 'English (United Kingdom)'
- * ],
- * ]
- * ```
- *
- * @param array $locales list of locales for filtering
- * @return array of filtered locales
- */
- private function filterLocales(array $locales): array
- {
- if ($this->state->getMode() != State::MODE_PRODUCTION
- || $this->deploymentConfig->getConfigData(Constants::CONFIG_PATH_SCD_ON_DEMAND_IN_PRODUCTION)) {
- return $locales;
- }
- $theme = $this->design->getDesignTheme();
- try {
- $availableLocales = $this->availableLocales->getList($theme->getCode(), $theme->getArea());
- } catch (LocalizedException $e) {
- $availableLocales = [];
- }
- return array_filter($locales, function ($localeData) use ($availableLocales) {
- return in_array($localeData['value'], $availableLocales);
- });
- }
- }
|