Magento 2: Comment obtenir la langue actuelle du magasin?

10

J'essaie d'afficher un bloc personnalisé pour chaque vue / langue de magasin. Par conséquent, je veux créer une instruction switch comme:

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

Comment puis-je l'obtenir? J'en ai besoin dans ce fichier\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Meule
la source

Réponses:

14

Vous pouvez utiliser \Magento\Store\Api\Data\StoreInterfaceou Magento\Framework\Locale\Resolverclass pour obtenir la langue du magasin.

1) EN UTILISANT \Magento\Store\Api\Data\StoreInterfaceLA CLASSE

Avec objectManager

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

echo $store->getLocaleCode();

Avec injection de dépendance

protected $_store;

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

Maintenant, utilisez getLocaleCode()pour obtenir le laguage:

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

if($currentStore == 'en_US'){

}

2) EN UTILISANT Magento\Framework\Locale\ResolverLA CLASSE

Avec objectManager

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

echo $store->getLocale();

Avec la méthode d'usine

protected $_store;

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

Maintenant, utilisez getLocale()pour obtenir le laguage:

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

if($currentStore == 'en_US'){

}
Prince Patel
la source
1
Je pense que vous voulez dire "avec injection de dépendance"
Milan Simek
@MilanSimek oui vous avez raison Avec la méthode d'usine signifie avec l'injection de dépendance
Prince Patel
rakeshjesadiya.com/… Vous pouvez vérifier plus de détails.
Rakesh Jesadiya
5

Vous pouvez obtenir les paramètres régionaux actuels en utilisant ci-dessous,

L'utilisation de Directly Objectmanager dans un fichier phtml n'est pas un moyen parfait pour la norme 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;
}

Vous pouvez appeler le fichier Block et définir une fonction pour vos besoins et appeler ces fonctions dans le fichier phtml.

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

appeler à l'intérieur du fichier phtml,

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

}
Rakesh Jesadiya
la source
+1 pour strstr($haystack, '_', true); , bon tour
Milan Simek