Magento 2: Mevcut mağaza dili nasıl alınır?


10

Her mağaza görünümü / dili için özel bir blok göstermeye çalışıyorum. Bu nedenle gibi switch deyimi oluşturmak istiyorum:

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

Bunu nasıl alabilirim? Bu dosyada ihtiyacım var\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Yanıtlar:


14

Mağaza dilini almak için \Magento\Store\Api\Data\StoreInterfaceveya Magento\Framework\Locale\Resolversınıfını kullanabilirsiniz .

1) \Magento\Store\Api\Data\StoreInterfaceSINIF KULLANARAK

ObjectManager ile

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

echo $store->getLocaleCode();

Bağımlılık Enjeksiyonu ile

protected $_store;

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

Şimdi getLocaleCode()dil almak için kullanın :

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

if($currentStore == 'en_US'){

}

2) Magento\Framework\Locale\ResolverSINIF KULLANARAK

ObjectManager ile

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

echo $store->getLocale();

Fabrika Yöntemi ile

protected $_store;

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

Şimdi getLocale()dil almak için kullanın :

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

if($currentStore == 'en_US'){

}

1
Sanırım "Bağımlılık enjeksiyonuyla" demek istediniz
Milan Simek

@MilanSimek evet haklısın Fabrika Yöntemi ile bağımlılık enjeksiyon anlamına gelir
Prince Patel

rakeshjesadiya.com/… Daha fazla ayrıntıyı kontrol edebilirsiniz.
Rakesh Jesadiya

5

Aşağıdaki yolu kullanarak geçerli yerel ayarları alabilirsiniz,

Doğrudan Objectmanager'ın phtml dosyasında kullanımı magento 2 standardı için mükemmel bir yol değildir,

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

Engelleme dosyasını arayabilir ve gereksiniminiz için bir işlev ayarlayabilir ve bu işlevi phtml dosyası içinde çağırabilirsiniz.

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

phtml dosyasının içinde arayın,

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

}

+1 strstr($haystack, '_', true); , iyi hile
Milan Simek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.