Magento 2: Как узнать текущий язык магазина?

10

Я пытаюсь показать пользовательский блок для каждого магазина / языка. Поэтому я хочу создать оператор switch следующим образом:

$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 да, вы правы. Фабричный метод означает внедрение зависимостей
Prince Patel
rakeshjesadiya.com/… Вы можете проверить более подробную информацию.
Ракеш Джесадия
5

Вы можете получить текущую локаль, используя следующий способ,

Использование Directly 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;
}

Вы можете вызвать Block file и установить одну функцию по вашему требованию и вызвать эти функции внутри 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); хороший трюк
Милан Симек