Magento 2: Як отримати сучасну мову магазину?


10

Я намагаюся показати спеціальний блок для кожного перегляду / мови магазину. Тому я хочу створити оператор переключення на зразок:

$lang = // Get language code or store view code here;
switch ($lang) {

    case 'en':
        // English block
        break;

    case 'nl':
        // Dutch block
        break;

    default:
        // Dutch block
        break;
}

Як я можу це отримати? Мені це потрібно в цьому файлі\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Відповіді:


14

Ви можете користуватися класом \Magento\Store\Api\Data\StoreInterfaceабо Magento\Framework\Locale\Resolverкласом, щоб отримати мову магазину.

1) ЗА ВИКОРИСТАННЯ \Magento\Store\Api\Data\StoreInterfaceКЛАСУ

З objectManager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$store = $objectManager->get('Magento\Store\Api\Data\StoreInterface'); 

echo $store->getLocaleCode();

З ін'єкцією в залежність

protected $_store;

public function __construct(
    ...
    \Magento\Store\Api\Data\StoreInterface $store,
    ...
) {
    ...
    $this->_store = $store;
    ...
}

Тепер використовуйте getLocaleCode()для отримання міток:

$currentStore = $this->_store->getLocaleCode();

if($currentStore == 'en_US'){

}

2) ЗА ВИКОРИСТАННЯ Magento\Framework\Locale\ResolverКЛАСУ

З objectManager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$store = $objectManager->get('Magento\Framework\Locale\Resolver'); 

echo $store->getLocale();

Заводським методом

protected $_store;

public function __construct(
    ...
    Magento\Framework\Locale\Resolver $store,
    ...
) {
    ...
    $this->_store = $store;
    ...
}

Тепер використовуйте getLocale()для отримання міток:

$currentStore = $this->_store->getLocale();

if($currentStore == 'en_US'){

}

1
Я думаю, ви маєте на увазі "З ін'єкцією залежності"
Мілан Симек

@MilanSimek так, ти маєш рацію. Фабричний метод означає введення залежності
Принц Патель

rakeshjesadiya.com/… Ви можете перевірити більше деталей.
Ракеш Єсадія

5

Ви можете отримати поточний локальний код, скориставшись способом нижче,

Використання безпосередньо Objectmanager у файлі phtml не є ідеальним способом для стандарту magento 2,

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$getLocale = $objectManager->get('Magento\Framework\Locale\Resolver');
$haystack  = $getLocale->getLocale(); 
$lang = strstr($haystack, '_', true); 
switch ($lang) {

    case 'en':
        // English block
        break;

    case 'nl':
        // Dutch block
        break;

    default:
        // Dutch block
        break;
}

Ви можете зателефонувати у файл «Блокувати» та встановити одну функцію для вашої потреби та викликати ці функції у файлі phtml

public function __construct(
        \Magento\Framework\Locale\Resolver $locale
    ) {
        $this->locale = $locale;
    }

зателефонувати у файл phtml,

$currentCode = $this->locale->getLocale();
$langCode = strstr($currentCode, '_', true);
if($langCode == 'en_US'){

}

+1 за strstr($haystack, '_', true); , хороший трюк
Мілан Симек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.