Here is possible solution. Not the most elegant but it should work.
First you should get all the languages that appear in the backend in the locale config section.
$allLanguages = Mage::app()->getLocale()->getOptionLocales();
This will get you an array like this:
Array
(
[0] => Array
(
[value] => af_ZA
[label] => Afrikaans (South Africa)
)
[1] => Array
(
[value] => sq_AL
[label] => Albanian (Albania)
)
...
)
You can get the current locale code like you already do
$localeCode = Mage::getStoreConfig('general/locale/code', $_lang->getId());
Now all you have to do is to loop through all the languages and see if one matches your code.
$languageLabel = '';
foreach ($allLanguages as $language) {
if ($language['value'] == $localeCode) {
$languageLabel = $language['label'];
break;
}
}
If you want to lose the country name just do this.
$parts = explode('(', $languageLabel);
$languageLabel = trim($parts[0]);
Or you can use a regex that seams cleaner.
Of course you should wrap all this code in a method and just use that method.
[EDIT]
An other approach would be to get all the languages based on the language code only:
$languages = Zend_Locale::getTranslationList('language', Mage::app()->getLocale()->getLocaleCode());//replace with own locale.
this should return something like
[en] -> English
[fr] -> French
Then you have to get the lang code like this (you already do that):
$_languageCode = substr(Mage::getStoreConfig('general/locale/code', $_lang->getId()),0,2);
And just check
`if (isset($languages[$langCode]))`
This seams cleaner but I'm not sure if it works correctly for all the values.
The first method seams safer because it uses the same options that you see in the backend.
Give either one of them a try.
[EDIT] Example of the final code from the question author (works like a charm)
<!-- LANGUAGES BOF -->
<?php if(count($this->getStores())>1): ?>
<?php
$stores = array();
$_current = null;
$languages = Zend_Locale::getTranslationList('language', Mage::app()->getLocale()->getLocaleCode());
foreach ($this->getStores() as $_lang) {
$_selected = $_selected_option = $_language_name = '';
$_language_code = substr(Mage::getStoreConfig('general/locale/code', $_lang->getId()),0,2);
if (isset($languages[$_language_code])) {$_language_name = $languages[$_language_code];}
$parts = explode('(', $_language_name);
$_language_name = trim($parts[0]);
if ( ($_lang->getId() == $this->getCurrentStoreId()) ) {
$_current = $_lang;
$_current_lang = $_language_name;
$_selected = ' class="selected"';
$_selected_option = ' selected="selected"';
}
// $stores[] = '<li'. $_selected .'><a style="background-image:url(\''. $this->getSkinUrl('images/flags/'.$_lang->getCode().'.png') .'\');" href="'. $_lang->getCurrentUrl() .'">'. $this->htmlEscape($_lang->getName()) .'</a></li>';
$stores[] = '<li'. $_selected .'><a style="background-image:url(\''. $this->getSkinUrl('images/flags/'.$_language_code.'.png') .'\');" href="'. $_lang->getCurrentUrl() .'">'. $this->htmlEscape($_language_name) .'</a></li>';
$select_stores[] = '<option '.$_selected_option.' value="'. $_lang->getCurrentUrl() .'">'. $this->htmlEscape($_lang->getName()) .'</option>';
}
?>
<div class="header-switch language-switch">
<span><?php echo $this->__('Your Language:') ?>
<span class="current"><?php echo $this->htmlEscape($_current_lang); ?></span>
</span>
<div class="header-dropdown">
<ul><?php echo implode('', $stores); ?></ul>
</div>
</div>
Step 1: collect the phrases
First, you need to find out the phrases that you need to translate.
You can do so by running:
php bin/magento i18n:collect-phrases -o "/path/to/magento2/app/i18n/vendor/lg_lg/dictionary.csv"
Note that vendor
is the same as when you develop module and lg_lg
is the lang code of your language.
Step 2: create the composer.json
file
Go to your app/i18n/vendor/lg_lg
folder and create the composer.json
file:
{
"name": "vendor/lg"
,"type": "magento2-language"
,"description": "Tamil language"
,"authors": [{
"name": "Bilal Usean",
"email": "bla@bla.com",
"role": "Developer"
}]
,"extra": {"map": [["*", "vendor/lg_lg"]]}
}
Step 3: create the language.xml
file
Still in your app/i18n/vendor/lg_lg
folder you need to create a language.xml
file:
<?xml version='1.0'?>
<language xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='urn:magento:framework:App/Language/package.xsd'>
<code>lg_LG</code>
<vendor>vendor</vendor>
<package>lg_lg</package>
</language>
Step 4: create the registration.php
file
Still in the same folder, you need to create a registration.php
file:
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
'vendor_lg_lg',
__DIR__
);
Step 5: translate
Still in your folder, you can start writing your translations in a lg_lg.csv
file based on the dictionary you retrieved in step 1. You can use the offical guide to follow the translation guidelines: http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-i18n.html#config-cli-subcommands-xlate-dict-trans
Step 6: create the language pack
Run the following command:
php bin/magento i18n:pack app/i18n/vendor/lg_lg/lg_lg.csv lg_Lg lg_LG
Important note
For this to work, your .csv file name must exactly match the locale, including the characters' case.
Official documentation: http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-i18n.html#config-cli-subcommands-xlate-example2
Best Answer
you can get all language declaration list from
vendor
folderMagento\Framework\Locale\Config.php
file.you can check here from above class,