마 젠토 2 : 상점의 현재 언어를 얻는 방법?


10

각 상점보기 / 언어에 대해 사용자 정의 블록을 표시하려고합니다. 따라서 다음과 같은 스위치 문을 만들고 싶습니다.

$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'){

}

1
"당신은 의존성 주입"을 의미한다고 생각합니다
Milan Simek

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

차단 파일을 호출하고 요구 사항에 대해 하나의 기능을 설정하고 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 strstr($haystack, '_', true); , 좋은 트릭
Milan Simek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.