mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-08 01:37:36 +00:00
- Fix unable to set local though \Magento\Backend\Model\Locale\Resolver::setLocale()
90 lines
2.5 KiB
PHP
90 lines
2.5 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Backend\Model\Locale;
|
|
|
|
/**
|
|
* Backend locale model
|
|
*
|
|
* @api
|
|
* @since 100.0.2
|
|
* @SuppressWarnings(PHPMD.CookieAndSessionMisuse)
|
|
*/
|
|
class Resolver extends \Magento\Framework\Locale\Resolver
|
|
{
|
|
/**
|
|
* @var \Magento\Backend\Model\Session
|
|
*/
|
|
protected $_session;
|
|
|
|
/**
|
|
* @var \Magento\Backend\Model\Locale\Manager
|
|
*/
|
|
protected $_localeManager;
|
|
|
|
/**
|
|
* @var \Magento\Framework\App\RequestInterface
|
|
*/
|
|
protected $_request;
|
|
|
|
/**
|
|
* @var \Magento\Framework\Validator\Locale
|
|
*/
|
|
protected $_localeValidator;
|
|
|
|
/**
|
|
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
|
|
* @param string $defaultLocalePath
|
|
* @param string $scopeType
|
|
* @param \Magento\Backend\Model\Session $session
|
|
* @param Manager $localeManager
|
|
* @param \Magento\Framework\App\RequestInterface $request
|
|
* @param \Magento\Framework\Validator\Locale $localeValidator
|
|
* @param string|null $locale
|
|
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
|
|
*/
|
|
public function __construct(
|
|
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
|
|
$defaultLocalePath,
|
|
$scopeType,
|
|
\Magento\Backend\Model\Session $session,
|
|
\Magento\Backend\Model\Locale\Manager $localeManager,
|
|
\Magento\Framework\App\RequestInterface $request,
|
|
\Magento\Framework\Validator\Locale $localeValidator,
|
|
$locale = null
|
|
) {
|
|
$this->_session = $session;
|
|
$this->_localeManager = $localeManager;
|
|
$this->_request = $request;
|
|
$this->_localeValidator = $localeValidator;
|
|
parent::__construct($scopeConfig, $defaultLocalePath, $scopeType, $locale);
|
|
}
|
|
|
|
/**
|
|
* Set locale
|
|
*
|
|
* @param string $locale
|
|
* @return $this
|
|
*/
|
|
public function setLocale($locale = null)
|
|
{
|
|
$forceLocale = $this->_request->getParam('locale', null);
|
|
if (!$this->_localeValidator->isValid($forceLocale)) {
|
|
$forceLocale = false;
|
|
}
|
|
|
|
$sessionLocale = $this->_session->getSessionLocale();
|
|
$userLocale = $this->_localeManager->getUserInterfaceLocale();
|
|
|
|
$localeCodes = array_filter([$forceLocale, $locale, $sessionLocale, $userLocale]);
|
|
|
|
if (count($localeCodes)) {
|
|
$locale = reset($localeCodes);
|
|
}
|
|
|
|
return parent::setLocale($locale);
|
|
}
|
|
}
|