Ändern Sie die Antwort der Magento 2-Controller-Sprache

7

Ich habe einen Controller, der als API-Endpunkt in Magento 2 fungiert. Ich muss eine Antwort auf eine andere Sprachbasis haben, die auf übergebenen Parametern basiert. Dieser Controller kann auf das Modell usw. zugreifen.

zum Beispiel:

public function execute()
{
     if (isset($_SERVER['HTTP_ORIGIN'])) {
        header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Max-Age: 86400');     
    }

     if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
            header("Access-Control-Allow-Methods: GET, POST, OPTIONS");

        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
            header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

        exit(0);
    }

    try {
        $lang = $this->getRequest()->getParam('lang');
        if($lang == 'en'){
          $message = 'who are you';
          $data['var_1'] = "Live";
        }elseif($lang == 'jp'){
          $messsage = 'あなたは誰';
          $data['var_1'] = "ライブ";
        } 
        return $this->_formatResponse(500,$message,$data);
    } catch (\Exception $ex) {
        $message = $ex->getMessage();
        return $this->_formatResponse(500,$message);
    }
}

protected function _formatResponse($status, $message = '', $data = [])
{ 
    $result = $this->_resultJsonFactory->create();
    $result->setHttpResponseCode($status);
    return $result->setData([
        'status' => $status,
        'message' => $message,
        'data' => $data
    ]);
}

Wie kann ich erreichen, dass diese Übersetzungsnachricht dynamisch verwaltet wird, wenn viele Benutzer auf meinen Controller zugreifen?

Kleiner Tänzer
quelle
Können Sie bitte Ihren gesamten Controller-Code hochladen?
Rohan Hapani
@ RohanHapani überprüfen Sie meine aktualisierte Frage
Tiny Dancer

Antworten:

0

Der folgende Controller-Code funktioniert für mich, ändert jedoch auch die Store-Ansicht für das Front-End (falls dieselbe Sitzung für den API-Aufruf und die Website selbst vorhanden ist).

<?php

namespace Vendor\MyModule\Controller\Index;

use Magento\Store\Model\Store;
use Magento\Framework\Controller\ResultFactory;
use Company\OrderDevice\Helper\Data;


class Index extends \Magento\Framework\App\Action\Action
{


protected $_storeManagerInterface;
protected $_resultJsonFactory;
protected $_httpContext;
protected $_storeRepository;
protected $storeCookieManager;

public function __construct(
        \Magento\Framework\App\Action\Context $context,        
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Store\Api\StoreCookieManagerInterface $storeCookieManager,
        \Magento\Framework\App\Http\Context $httpContext,
        \Magento\Store\Api\StoreRepositoryInterface $storeRepository,
        \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory        
    ) {

        $this->_storeManagerInterface        = $storeManager;
        $this->storeCookieManager = $storeCookieManager;
        $this->_httpContext = $httpContext;
        $this->_storeRepository = $storeRepository;
        $this->_resultJsonFactory   = $resultJsonFactory;        
        parent::__construct($context);
    }


 public function execute(){
   $fromStore= 'default'; // English
   $toStore  = 'cn';      // Chinese
   $store = $this->_storeRepository->getActiveStoreByCode($toStore);
   $this->_httpContext->setValue(Store::ENTITY, $toStore, $fromStore);
   $this->storeCookieManager->setStoreCookie($store);   
   $result = $this->_resultJsonFactory->create();       
   $message  = __('Contact Us');    
   return $result->setData(array(
                    'success' => 1,
                    'error' => 0,
                    'message' => $message
                   ));   

 }

}
Pritam Info 24
quelle