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()เพื่อรับ laguage:

$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()เพื่อรับ laguage:

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

if($currentStore == 'en_US'){

}

1
ฉันคิดว่าคุณหมายถึง "With injection dependence"
Milan Simek

@MilanSimek ใช่คุณพูดถูกด้วยวิธีการแบบโรงงานหมายความว่าด้วยการฉีดพึ่งพา
เจ้าชาย Patel

rakeshjesadiya.com/คุณสามารถตรวจสอบรายละเอียดเพิ่มเติมได้
Rakesh Jesadiya

5

คุณสามารถรับสถานที่ปัจจุบันโดยใช้วิธีด้านล่าง

การใช้ Directman Objectmanager ในไฟล์ php ไม่ใช่วิธีที่สมบูรณ์แบบสำหรับมาตรฐานวีโอไอพี 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;
}

คุณสามารถเรียกไฟล์ Block และตั้งค่าหนึ่งฟังก์ชั่นสำหรับความต้องการของคุณและเรียกใช้ฟังก์ชั่นเหล่านั้นภายในไฟล์ phtml

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

โทรภายในไฟล์ HTML

$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.