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

Answers:


14

您可以使用\Magento\Store\Api\Data\StoreInterfaceMagento\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()获取Laguage:

$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()获取Laguage:

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

if($currentStore == 'en_US'){

}

1
我认为您的意思是“使用依赖注入”
Milan Simek

@MilanSimek是的,您是正确的使用工厂方法意味着进行依赖注入
Prince Patel

rakeshjesadiya.com/…您可以查看更多详细信息。
Rakesh Jesadiya

5

您可以通过以下方式获取当前语言环境,

对于magento 2标准,在phtml文件中直接使用Objectmanager并不是完美的方法,

$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文件并根据需要设置一个功能,然后在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); 好技巧
米兰·西梅克,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.