Magento 2: come ottenere la lingua corrente del negozio?


10

Sto cercando di mostrare un blocco personalizzato per ogni vista / lingua del negozio. Pertanto, voglio creare un'istruzione switch come:

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

Come posso ottenerlo? Ne ho bisogno in questo file\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Risposte:


14

È possibile utilizzare \Magento\Store\Api\Data\StoreInterfaceo Magento\Framework\Locale\Resolverclasse per ottenere la lingua del negozio.

1) UTILIZZANDO \Magento\Store\Api\Data\StoreInterfaceLA CLASSE

Con objectManager

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

echo $store->getLocaleCode();

Con iniezione di dipendenza

protected $_store;

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

Ora usa getLocaleCode()per ottenere laguage:

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

if($currentStore == 'en_US'){

}

2) UTILIZZANDO Magento\Framework\Locale\ResolverLA CLASSE

Con objectManager

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

echo $store->getLocale();

Con il metodo di fabbrica

protected $_store;

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

Ora usa getLocale()per ottenere laguage:

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

if($currentStore == 'en_US'){

}

1
Penso che intendi "Con iniezione di dipendenza"
Milan Simek,

@MilanSimek sì hai ragione Con il metodo di fabbrica significa con l'iniezione di dipendenza
Prince Patel

rakeshjesadiya.com/… Puoi controllare maggiori dettagli.
Rakesh Jesadiya,

5

Puoi ottenere le impostazioni internazionali correnti utilizzando la modalità seguente,

L'uso di Directly Objectmanager nel file phtml non è il modo perfetto per magento 2 standard,

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

Puoi chiamare il file Block e impostare una funzione per il tuo requisito e chiamare quella funzione all'interno del file phtml.

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

chiama all'interno del file phtml,

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

}

+1 per strstr($haystack, '_', true); , buon trucco
Milan Simek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.