Magento 2: Làm thế nào để có được ngôn ngữ hiện tại của cửa hàng?


10

Tôi đang cố gắng hiển thị một khối tùy chỉnh cho mỗi lượt xem / ngôn ngữ của cửa hàng. Vì vậy, tôi muốn tạo câu lệnh chuyển đổi như:

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

Làm thế nào tôi có thể nhận được điều này? Tôi cần nó trong tập tin này\app\design\frontend\Venustheme\floristy\Ves_Themesettings\templates\header\default.phtml

Câu trả lời:


14

Bạn có thể sử dụng \Magento\Store\Api\Data\StoreInterfacehoặc Magento\Framework\Locale\Resolverlớp để có được ngôn ngữ cửa hàng.

1) B CLASSNG CÁCH SỬ DỤNG \Magento\Store\Api\Data\StoreInterfaceLỚP

Với objectManager

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

echo $store->getLocaleCode();

Với tiêm phụ thuộc

protected $_store;

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

Bây giờ sử dụng getLocaleCode()để có được laguage:

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

if($currentStore == 'en_US'){

}

2) THEO Magento\Framework\Locale\ResolverLỚP SỬ DỤNG

Với objectManager

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

echo $store->getLocale();

Với phương pháp nhà máy

protected $_store;

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

Bây giờ sử dụng getLocale()để có được laguage:

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

if($currentStore == 'en_US'){

}

1
Tôi nghĩ bạn có nghĩa là "Với tiêm phụ thuộc"
Milan Simek

@MilanSimek vâng, bạn đúng với Phương pháp nhà máy có nghĩa là tiêm phụ thuộc
Hoàng tử Patel

rakeshjesadiya.com/ Quảng cáo Bạn có thể kiểm tra thêm chi tiết.
Rakesh Jesadiya

5

Bạn có thể lấy ngôn ngữ hiện tại bằng cách sử dụng cách bên dưới,

Sử dụng Directman Objectmanager trong tệp phtml không phải là cách hoàn hảo cho tiêu chuẩn 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;
}

Bạn có thể gọi tệp Chặn và đặt một chức năng cho yêu cầu của bạn và gọi các chức năng đó trong tệp phtml.

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

gọi bên trong tập tin phtml,

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

}

+1 cho strstr($haystack, '_', true); , mẹo hay
Milan Simek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.