Magento 2: ¿Cómo obtener el idioma actual de la tienda?

10

Estoy tratando de mostrar un bloque personalizado para cada vista / idioma de la tienda. Por lo tanto, quiero crear una declaración de cambio 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;
}

¿Cómo puedo conseguir esto? Lo necesito en este archivo\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Almiar
fuente

Respuestas:

14

Puede usar \Magento\Store\Api\Data\StoreInterfaceo Magento\Framework\Locale\Resolverclase para obtener el idioma de la tienda.

1) AL USAR \Magento\Store\Api\Data\StoreInterfaceCLASE

Con objectManager

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

echo $store->getLocaleCode();

Con inyección de dependencia

protected $_store;

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

Ahora use getLocaleCode()para obtener el idioma:

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

if($currentStore == 'en_US'){

}

2) AL USAR Magento\Framework\Locale\ResolverCLASE

Con objectManager

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

echo $store->getLocale();

Con el método de fábrica

protected $_store;

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

Ahora use getLocale()para obtener el idioma:

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

if($currentStore == 'en_US'){

}
Príncipe Patel
fuente
1
Creo que te refieres a "Con inyección de dependencia"
Milan Simek
@MilanSimek sí, tienes razón Con el Método de Fábrica significa inyección de dependencia
Prince Patel
rakeshjesadiya.com/… Puede consultar más detalles.
Rakesh Jesadiya
5

Puede obtener la configuración regional actual mediante el uso a continuación,

El uso de Directly Objectmanager en el archivo phtml no es la manera perfecta para el estándar 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;
}

Puede llamar al archivo de bloqueo y establecer una función para sus requisitos y llamar a esa función dentro del archivo phtml.

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

llamar dentro del archivo phtml,

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

}
Rakesh Jesadiya
fuente
+1 para strstr($haystack, '_', true); , buen truco
Milan Simek