Magento – How to Add Language Switcher to Top Links

languagetoplinks

I'm looking for a way to add the language switcher to my top links menu. My store has 2 languages and I've modified the languages.phtml file to show the alternate language.

Example: if you are on the English site, then the language switcher will show French as a clickable option to bring you to that store view.

I know that in order to add options to the top links menu, you need to modify the customer.xml file. I know how to add alternate links as I've read plenty of "how to's" however none cover how to add the language bar.

Here is the modifications to
languages.phtml

<?php if(count($this->getStores())>1): ?>
<div class="form-language">    
<ul>
<?php foreach ($this->getStores() as $_lang): ?>
    <?php if($_lang->getId() != $this->getCurrentStoreId()): ?>
    <li><a href="<?php echo $_lang->getCurrentUrl(false) ?>"<?php echo $_selected; ?>><?php echo $this->htmlEscape($_lang->getName()) ?></a></li>
    <?php endif; ?>
<?php endforeach; ?>
</ul>

The end result should be:

Login | My Cart | Compare | Wish List | LANGUAGE

How can I add the language bar to the top links menu items?

UPDATE

I've tried adding the following to the customer.xml file under :

<block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>

Nothing appears.

Best Answer

Create your extension with it's own layout file and block that adds links to the top menu.
Let's call that Easylife_Locale. You will need the following files:

app/etc/modules/Easylife_Locale.xml - the declaration file

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Locale>
            <codePool>local</codePool>
            <active>true</active>
            <depends>
                <Mage_Core />
            </depends>
        </Easylife_Locale>
    </modules>
</config>

app/code/local/Easylife/Locale/etc/config.xml - the configuration file

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Locale>
            <version>1.0.0</version>
        </Easylife_Locale>
    </modules>
    <global>
        <blocks>
            <easylife_locale>
                <class>Easylife_Locale_Block</class>
            </easylife_locale>
        </blocks>
    </global>
    <frontend>
        <layout>
            <updates>
                <easylife_locale>
                    <file>easylife_locale.xml</file>
                </easylife_locale>
            </updates>
        </layout>
    </frontend>
</config>

app/design/frontend/base/default/layout/easylife_locale.xml - the frontend layout file

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="top.links">
            <block type="easylife_locale/stores" name="stores_links">
                <action method="addStoreLinks"></action>
            </block>
        </reference>
    </default>
</layout>

app/code/local/Easylife/Locale/Block/Stores.php - the block that adds the links to the top.

<?php

class Easylife_Locale_Block_Stores extends Mage_Page_Block_Switch {
    public function addStoreLinks() {
        $parentBlock = $this->getParentBlock();
        if ($parentBlock) {
            $position = 200; //start position
            foreach ($this->getStores() as $store) {
                $params = null;
                if ($store->getId() == $this->getCurrentStoreId()) {
                    $params = 'class="current-store"';
                    //if you want to skip the current store view just uncomment the next line
                    //continue;
                }
                //Print the language code (en, fr)
                $text = substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2);
                //if your want to display the store name comment the line above and uncomment the one below
                //$text = $store->getName();
                $title = $store->getName();

                $parentBlock->addLink($text, $store->getCurrentUrl(), $title, false, array(), $position, null, $params);
                $position += 10;
            }
        }
        return $this;
    }
}

Clear the cache and try it out.

Related Topic