Magento 2: Como obter o idioma atual da loja?

10

Estou tentando mostrar um bloco personalizado para cada visualização / idioma da loja. Portanto, eu quero criar uma instrução switch como:

$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;
}

Como posso conseguir isso? Eu preciso neste arquivo\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Rick
fonte

Respostas:

14

Você pode usar \Magento\Store\Api\Data\StoreInterfaceou Magento\Framework\Locale\Resolverclasse para obter o idioma da loja.

1) USANDO A \Magento\Store\Api\Data\StoreInterfaceCLASSE

Com objectManager

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

echo $store->getLocaleCode();

Com injeção de dependência

protected $_store;

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

Agora use getLocaleCode()para obter o idioma:

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

if($currentStore == 'en_US'){

}

2) USANDO A Magento\Framework\Locale\ResolverCLASSE

Com objectManager

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

echo $store->getLocale();

Com Método de Fábrica

protected $_store;

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

Agora use getLocale()para obter o idioma:

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

if($currentStore == 'en_US'){

}
Prince Patel
fonte
11
Eu acho que você quer dizer "Com injeção de dependência"
Milan Simek
@MilanSimek sim você está certo com meios método de fábrica com injeção de dependência
Príncipe Patel
rakeshjesadiya.com/… Você pode conferir mais detalhes.
Rakesh Jesadiya 19/07/19
5

Você pode obter a localidade atual usando o caminho abaixo,

O uso do Directly Objectmanager no arquivo phtml não é a maneira perfeita para o padrão 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;
}

Você pode chamar o arquivo Block e definir uma função para sua exigência e chamar essas funções dentro do arquivo phtml.

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

chamar dentro do arquivo phtml,

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

}
Rakesh Jesadiya
fonte
+1 para strstr($haystack, '_', true); , bom truque
Milan Simek