Magento 2: Cara mendapatkan bahasa toko saat ini?

10

Saya mencoba menampilkan blok khusus untuk setiap tampilan / bahasa toko. Karena itu saya ingin membuat pernyataan switch seperti:

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

Bagaimana saya bisa mendapatkan ini? Saya membutuhkannya di file ini\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Rick
sumber

Jawaban:

14

Anda dapat menggunakan \Magento\Store\Api\Data\StoreInterfaceatau Magento\Framework\Locale\Resolverkelas untuk mendapatkan bahasa toko.

1) DENGAN MENGGUNAKAN \Magento\Store\Api\Data\StoreInterfaceCLASS

Dengan objectManager

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

echo $store->getLocaleCode();

Dengan Injeksi Ketergantungan

protected $_store;

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

Sekarang gunakan getLocaleCode()untuk mendapatkan lagu:

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

if($currentStore == 'en_US'){

}

2) DENGAN MENGGUNAKAN Magento\Framework\Locale\ResolverCLASS

Dengan objectManager

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

echo $store->getLocale();

Dengan Metode Pabrik

protected $_store;

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

Sekarang gunakan getLocale()untuk mendapatkan lagu:

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

if($currentStore == 'en_US'){

}
Pangeran Patel
sumber
1
Saya pikir maksud Anda "Dengan injeksi ketergantungan"
Milan Simek
@MilanSimek ya Anda benar Dengan Metode Pabrik berarti dengan injeksi ketergantungan
Pangeran Patel
rakeshjesadiya.com/... Anda dapat memeriksa detail lebih lanjut.
Rakesh Jesadiya
5

Anda bisa mendapatkan lokal saat ini dengan menggunakan cara di bawah ini,

Penggunaan Directly Objectmanager dalam file phtml bukanlah cara yang sempurna untuk magento 2 standar,

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

Anda dapat memanggil Blokir file dan mengatur satu fungsi untuk kebutuhan Anda dan memanggil fungsi tersebut di dalam file phtml.

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

panggil di dalam file phtml,

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

}
Rakesh Jesadiya
sumber
+1 untuk strstr($haystack, '_', true); , trik bagus
Milan Simek