Magento 2:ストアの現在の言語を取得する方法?


10

各ストアビュー/言語のカスタムブロックを表示しようとしています。したがって、次のようなswitchステートメントを作成します。

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

どうすれば入手できますか?このファイルで必要です\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

回答:


14

\Magento\Store\Api\Data\StoreInterfaceまたはMagento\Framework\Locale\Resolverクラスを使用して、ストアの言語を取得できます。

1)\Magento\Store\Api\Data\StoreInterfaceクラスを使用する

objectManagerを使用

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

echo $store->getLocaleCode();

依存性注入あり

protected $_store;

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

次にgetLocaleCode()、言語を取得するために使用します。

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

if($currentStore == 'en_US'){

}

2)Magento\Framework\Locale\Resolverクラスを使用する

objectManagerを使用

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

echo $store->getLocale();

工場での方法

protected $_store;

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

次にgetLocale()、言語を取得するために使用します。

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

if($currentStore == 'en_US'){

}


@MilanSimekはい、あなたは正しいです依存関係注入を伴うファクトリーメソッドの手段
Prince Patel

rakeshjesadiya.com/…詳細を確認できます。
Rakesh Jesadiya

5

以下の方法で現在のロケールを取得できます、

phtmlファイルで直接Objectmanagerを使用することは、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;
}

ブロックファイルを呼び出して要件に1つの関数を設定し、phtmlファイル内でそれらの関数を呼び出すことができます。

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

phtmlファイル内で呼び出し、

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

}

+1 for strstr($haystack, '_', true); 、良いトリック
Milan Simek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.