Magento 2: Jak uzyskać aktualny język sklepu?

10

Próbuję wyświetlić niestandardowy blok dla każdego widoku / języka sklepu. Dlatego chcę utworzyć instrukcję switch, taką jak:

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

Jak mogę to zdobyć? Potrzebuję tego w tym pliku\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Stóg
źródło

Odpowiedzi:

14

Możesz użyć \Magento\Store\Api\Data\StoreInterfacelub Magento\Framework\Locale\Resolverklasy, aby uzyskać język sklepu.

1) ZA POMOCĄ \Magento\Store\Api\Data\StoreInterfaceKLASY

Z objectManager

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

echo $store->getLocaleCode();

Z wtryskiem zależnym

protected $_store;

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

Teraz użyj, getLocaleCode()aby uzyskać język:

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

if($currentStore == 'en_US'){

}

2) ZA POMOCĄ Magento\Framework\Locale\ResolverKLASY

Z objectManager

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

echo $store->getLocale();

Metodą fabryczną

protected $_store;

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

Teraz użyj, getLocale()aby uzyskać język:

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

if($currentStore == 'en_US'){

}
Książę Patel
źródło
1
Myślę, że masz na myśli „Z zastrzykiem uzależnienia”
Milan Simek
@MilanSimek tak masz rację Metoda fabryczna oznacza wstrzyknięcie zależności
Prince Patel
rakeshjesadiya.com/… Możesz sprawdzić więcej szczegółów.
Rakesh Jesadiya
5

Możesz uzyskać bieżące ustawienia regionalne, korzystając z poniższych sposobów,

Użycie Directly Objectmanager w pliku phtml nie jest idealnym sposobem dla standardu 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;
}

Możesz wywołać plik bloku i ustawić jedną funkcję dla swoich wymagań i wywołać tę funkcję w pliku phtml.

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

wywołanie w pliku phtml,

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

}
Rakesh Jesadiya
źródło
+1 za strstr($haystack, '_', true); , dobra sztuczka
Milan Simek