Wie erhalte ich den Ländernamen aus dem Ländercode in Magento 2?

10

Ich möchte den Ländernamen aus dem Ländercode erhalten. Ich habe den Ländercode aus der Datenreihenfolge wie folgt erhalten:

$data = $order->getShippingAddress()->getData();
$countryCode = $data['country_id'];
echo $countryCode;

Es wird "US" oder ein anderer Ländercode gedruckt. Gibt es eine Möglichkeit, den Ländernamen aus diesem Ländercode zu ermitteln?

einfacher Kerl
quelle
Haben Sie den Code überprüft, um den Ländernamen zu erhalten?
Rakesh Jesadiya

Antworten:

31

Blockdatei erstellen,

   public function __construct(
            \Magento\Directory\Model\CountryFactory $countryFactory
        ) {
            $this->_countryFactory = $countryFactory;
        }

    public function getCountryname($countryCode){    
        $country = $this->_countryFactory->create()->loadByCode($countryCode);
        return $country->getName();
    }

Aufruf aus der HTML-Datei,

echo $block->getCountryname($countryCode);
Rakesh Jesadiya
quelle
1
Richtig, außer dass Ihnen nach $ country = $ this -> _ countryFactory-> create () -> loadByCode ($ countryCode) ein Semikolon fehlt. Es sollte $ country = $ this -> _ countryFactory-> create () -> loadByCode ($ sein countryCode);
Eirik
Ist es möglich, den Ländercode vom Ländernamen zu erhalten?
Vindhuja
@ Vindhuja Check rakeshjesadiya.com/…
Rakesh Jesadiya
8

Wir können verwenden Magento\Directory\Api\CountryInformationAcquirerInterface, um die Länderinformationen zu erhalten:

/** @var \Magento\Directory\Api\CountryInformationAcquirerInterface $country */

/** @var \Magento\Directory\Api\Data\CountryInformationInterface $data */
    $data = $country->getCountryInfo($data['country_id']);
    $data->getFullNameEnglish();
    $data->getFullNameLocale();

Weitere Informationen zu den zurückgegebenen Werten finden Sie hier: Magento\Directory\Api\Data\CountryInformationInterface

Khoa TruongDinh
quelle
Hallo, können Sie mir bitte sagen, wie man dies verwendet, um einen engilsh Ländernamen in Magento 2 zu erhalten
Ask Bytes
Das ist einfach perfekt. Ich schreibe einen Artikel basierend auf dieser Lösung für Details blog.equaltrue.com/… das kann dir helfen @AskBytes
Shuvankar Paul
0

Überprüfen Sie das angegebene Modell des Landes und seine Methoden:

/**
     * 
     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
     * @param \Magento\Directory\Model\CountryFactory $countryFactory
     */
    public function __construct(
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, 
        \Magento\Directory\Model\CountryFactory $countryFactory    
    ) {  
        $this->scopeConfig = $scopeConfig;
        $this->countryFactory = $countryFactory;
    }

Eine der darin enthaltenen Methoden ist. $this->countryFactory->create()->getName();Sie können die Modellfabrik basierend auf Ihren Anforderungen verwenden.

Sanjay Chaudhary
quelle
0

Im folgenden Beispiel benötige ich in einer der Aufgaben, in denen ich PDF auf benutzerdefinierte Weise drucken muss, das Land der Rechnungsadresse und das Land der Lieferadresse, aber aus Kundenauftragsdaten erhalte ich es als Länder-ID wie "SE". (für Schweden)

In der Methode können Sie die Methode getCountryName () auf zwei Arten bewerten, auf Englisch oder auf lokal.

Hier wird CountryInformationAcquirerInterface verwendet.

Hier ist der vollständige Code

namespace Equaltrue\Orderprint\Block\Order;

use Magento\Backend\Block\Template\Context;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Registry;
use Magento\Framework\View\Element\Template;
use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Directory\Api\CountryInformationAcquirerInterface;

class Print extends Template
{
    protected $_coreRegistry;
    protected $orderRepository;
    protected $countryInformationAcquirerInterface;

    /**
     * Constructor
     *
     * @param CountryInformationAcquirerInterface $countryInformationAcquirerInterface
     * @param OrderRepositoryInterface $orderRepository
     * @param Context $context
     * @param Registry $coreRegistry
     * @param array $data
     */
    public function __construct(
        CountryInformationAcquirerInterface $countryInformationAcquirerInterface,
        OrderRepositoryInterface $orderRepository,
        Context $context,
        Registry $coreRegistry,
        array $data = []
    ) {
        $this->orderRepository = $orderRepository;
        $this->countryInformationAcquirerInterface = $countryInformationAcquirerInterface;
        $this->_coreRegistry = $coreRegistry;
        parent::__construct($context, $data);
    }

    /**
     * Retrieve Current Data
     */
    public function getOrderData()
    {
        $orderId = $this->getRequest()->getParam('order_id', 0);
        $order =  $this->getOrder($orderId);

        /*
         * Get billing Address
         * */
        $billingAddress = $order->getBillingAddress();
        $firstNameBilling = $billingAddress->getFirstName();
        $lastNameBilling = $billingAddress->getLastName();
        $streetBilling = implode( ", ", $billingAddress->getStreet());
        $cityBilling = $billingAddress->getCity();
        $postCodeBilling = $billingAddress->getPostCode();
        $countryIdBilling = $billingAddress->getCountryId();
        $countryNameBilling = $this->getCountryName($countryIdBilling);
        $telephoneBilling = "T: ".$billingAddress->getTelephone();
        $formattedBillingAddress = $firstNameBilling." ".$lastNameBilling."<br>". $streetBilling."<br>". $cityBilling.",".$postCodeBilling."<br>".$countryNameBilling."<br>".$telephoneBilling;

        /*
         * Get billing Address
         * */
        $shippingAddress = $order->getShippingAddress();
        $firstNameShipping = $shippingAddress->getFirstName();
        $lastNameShipping = $shippingAddress->getLastName();
        $streetShipping = implode( ", ", $shippingAddress->getStreet());
        $cityShipping = $shippingAddress->getCity();
        $postCodeShipping = $shippingAddress->getPostCode();
        $countryIdShipping = $billingAddress->getCountryId();
        $countryNameShipping = $this->getCountryName($countryIdShipping);
        $telephoneShipping = "T: ".$shippingAddress->getTelephone();
        $formattedShippingAddress = $firstNameShipping." ".$lastNameShipping."<br>". $streetShipping."<br>". $cityShipping.",".$postCodeShipping."<br>".$countryNameShipping."<br>".$telephoneShipping;

        return array(
            "formatted_billing_address" => $formattedBillingAddress,
            "formatted_shipping_address" => $formattedShippingAddress
        );
    }

    /**
     * Getting Country Name
     * @param string $countryCode
     * @param string $type
     *
     * @return null|string
     * */
    public function getCountryName($countryCode, $type="local"){
        $countryName = null;
        try {
            $data = $this->countryInformationAcquirerInterface->getCountryInfo($countryCode);
            if($type == "local"){
                $countryName = $data->getFullNameLocale();
            }else {
                $countryName = $data->getFullNameLocale();
            }
        } catch (NoSuchEntityException $e) {}
        return $countryName;
    }

    protected function getOrder($id)
    {
        return $this->orderRepository->get($id);
    }
}
Shuvankar Paul
quelle
0

Rufen Sie mit objectManager den Ländernamen nach Ländercode ab.

<?php
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $countryCode = 'US'; // Enter country code here
    $country = $objectManager->create('\Magento\Directory\Model\Country')->load($countryCode)->getName();
    echo $country;
?>

Vielen Dank

Sohel Khan
quelle
-3
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
            $allowerdContries = $objectManager->get('Magento\Directory\Model\AllowedCountries')->getAllowedCountries() ;
            $countryFactory = $objectManager->get('\Magento\Directory\Model\CountryFactory');
            //echo "<pre>"; print_r($allowerdContries);

            $countries = array();
            foreach($allowerdContries as $countryCode)
            {
                    if($countryCode)
                    {

                        $data = $countryFactory->create()->loadByCode($countryCode);
                        $countries[$countryCode] =  $data->getName();
                    }
            }
Jaykumar R.
quelle