Magento 2: Wie erhalte ich die aktuelle Geschäftssprache?

10

Ich versuche, einen benutzerdefinierten Block für jede Geschäftsansicht / Sprache anzuzeigen. Daher möchte ich eine switch-Anweisung erstellen wie:

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

Wie kann ich das bekommen? Ich brauche es in dieser Datei\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Rick
quelle

Antworten:

14

Sie können \Magento\Store\Api\Data\StoreInterfaceoder Magento\Framework\Locale\Resolverclass verwenden, um die Geschäftssprache abzurufen.

1) MIT \Magento\Store\Api\Data\StoreInterfaceKLASSE

Mit objectManager

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

echo $store->getLocaleCode();

Mit Abhängigkeitsinjektion

protected $_store;

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

Verwenden Sie jetzt getLocaleCode(), um die Sprache zu erhalten:

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

if($currentStore == 'en_US'){

}

2) MIT Magento\Framework\Locale\ResolverKLASSE

Mit objectManager

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

echo $store->getLocale();

Mit Werksmethode

protected $_store;

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

Verwenden Sie jetzt getLocale(), um die Sprache zu erhalten:

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

if($currentStore == 'en_US'){

}
Prinz Patel
quelle
1
Ich denke du meinst "Mit Abhängigkeitsinjektion"
Milan Simek
@MilanSimek ja du hast recht Mit Factory Method bedeutet mit Abhängigkeitsinjektion
Prince Patel
rakeshjesadiya.com/… Sie können weitere Details überprüfen.
Rakesh Jesadiya
5

Sie können das aktuelle Gebietsschema mithilfe der folgenden Methode abrufen:

Die Verwendung von Directly Objectmanager in einer HTML-Datei ist für den Magento 2-Standard nicht perfekt.

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

Sie können die Blockdatei aufrufen und eine Funktion für Ihre Anforderung festlegen und diese Funktion in der HTML-Datei aufrufen.

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

Aufruf in der HTML-Datei,

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

}
Rakesh Jesadiya
quelle
+1 für strstr($haystack, '_', true); , guter Trick
Milan Simek