Foros de discusión

Language Linking issue

Luc Foisy, modificado hace 14 años.

Language Linking issue

New Member Mensajes: 9 Fecha de incorporación: 11/11/09 Mensajes recientes
I am trying to create a single language link in the template, if the current locale is not english, then the link should be english, else it should be french... I am also checking to see if there is Canadian locales...

Here is the code in the init_custom.vm

#set ($gocTemplateAvailableLocales = $languageUtil.getAvailableLocales())
#set ($gocTemplateTest = "")
#if ($locale.getLanguage() != "en")
    #set ($gocTemplateTest = "should be first en")
    #set ($gocTemplateLanguageIds = [$languageUtil.getLanguageId($languageUtil.getLocale("en"))])
    #foreach ($gocTemplateEachlocale in $gocTemplateAvailableLocales)
        #if ($gocTemplateEachlocale.getLanguage() == "en" && $gocTemplateEachlocale.getCountry() == "CA")
            #set ($gocTemplateTest = "should be en_CA")
            #set ($gocTemplateLanguageIds = [$languageUtil.getLanguageId($gocTemplateEachlocale)])
        #end
    #end
#else
    #set ($gocTemplateTest = "should be first fr")
    #set ($gocTemplateLanguageIds = [$languageUtil.getLanguageId($languageUtil.getLocale("fr"))])
    #foreach ($gocTemplateEachlocale in $gocTemplateAvailableLocales)
        #if ($gocTemplateEachlocale.getLanguage() == "fr" && $gocTemplateEachlocale.getCountry() == "CA")
            #set ($gocTemplateTest = "should be fr_CA")
            #set ($gocTemplateLanguageIds = [$languageUtil.getLanguageId($gocTemplateEachlocale)])
        #end
    #end
#end

#set ($gocTemplateLanguageLinkName = $request.getAttribute("liferay-ui:language:name"))
#set ($gocTemplateLanguageLink = $taglibLiferay.language("", "", $gocTemplateLanguageLinkName, $gocTemplateLanguageIds, 1))


Just ignore the $gocTemplateTest variable...

So the issue here is, this will render me a blank page... assuming that there is a java exception happening...

trying to use the following function from com.liferay.taglib.util.VelocityTaglib (which is $taglibLiferay)

public String language(
            String formName, String formAction, String name,
            String[] languageIds, int displayStyle)


if I use

#set ($gocTemplateLanguageLink = $taglibLiferay.language("", "", $gocTemplateLanguageLinkName, 1))

i get the full list of language links... which I don't want...

I am not sure $gocTemplateLanguageIds is a String[]....

Is that my problem... or is it something else someone might know about? If so, how do I make the String[]?

using Liferay Portal Standard Edition 5.2.3 (Augustine / Build 5203 / May 20, 2009) bundles with tomcat-6.0.18
Luc Foisy, modificado hace 14 años.

RE: Language Linking issue

New Member Mensajes: 9 Fecha de incorporación: 11/11/09 Mensajes recientes
I ended up with doing it this way (though I wanted to do it my way!)


#set ($gocTemplateAvailableLocales = $languageUtil.getAvailableLocales())

#if ($locale.getLanguage() != "en")
    ##set ($gocTemplateLanguageIds = [$languageUtil.getLanguageId($languageUtil.getLocale("en"))])
    #set ($gocTemplateLanguageLocale = $languageUtil.getLocale("en"))
    #foreach ($gocTemplateEachlocale in $gocTemplateAvailableLocales)
        #if ($gocTemplateEachlocale.getLanguage() == "en" && $gocTemplateEachlocale.getCountry() == "CA")
            ##set ($gocTemplateLanguageIds = [$languageUtil.getLanguageId($gocTemplateEachlocale)])
            #set ($gocTemplateLanguageLocale = $gocTemplateEachlocale)
        #end
    #end
#else
    ##set ($gocTemplateLanguageIds = [$languageUtil.getLanguageId($languageUtil.getLocale("fr"))])
    #set ($gocTemplateLanguageLocale = $languageUtil.getLocale("fr"))
    #foreach ($gocTemplateEachlocale in $gocTemplateAvailableLocales)
        #if ($gocTemplateEachlocale.getLanguage() == "fr" && $gocTemplateEachlocale.getCountry() == "CA")
            ##set ($gocTemplateLanguageIds = [$languageUtil.getLanguageId($gocTemplateEachlocale)])
            #set ($gocTemplateLanguageLocale = $gocTemplateEachlocale)
        #end
    #end
#end

#set ($gocTemplateLanguageId = $languageUtil.getLanguageId($gocTemplateLanguageLocale))
#set ($gocTemplateLanguageName = $gocTemplateLanguageLocale.getDisplayLanguage($gocTemplateLanguageLocale))
#set ($gocTemplateLanguageLinkName = $request.getAttribute("liferay-ui:language:name"))

#set ($gocTemplatePortalURLImpl = $portletURLFactory.create($request, "82", $page.getPlid(), "ACTION_PHASE"))
$gocTemplatePortalURLImpl.setWindowState("normal")
$gocTemplatePortalURLImpl.setPortletMode("view")
$gocTemplatePortalURLImpl.setParameter("struts_action", "/language/view")
$gocTemplatePortalURLImpl.setParameter("redirect", "$portalUtil.getCurrentURL($request)")
#set ($gocTemplateLanguageLink = $gocTemplatePortalURLImpl.toString()+"&languageId="+$gocTemplateLanguageId)


As a side note....
#set ($gocTemplateLanguageLinkName = $request.getAttribute("liferay-ui:language:name"))

This "WAS" providing me with "languageId" but it stopped working for some reason... why would that stop working... I didn't want to have to statically put "languageId" in the link if I was supposed to get it from somewhere...
thumbnail
Olivier ROMAND, modificado hace 12 años.

RE: Language Linking issue

New Member Mensajes: 24 Fecha de incorporación: 7/01/12 Mensajes recientes
That's some super nice hint.
Thanks for sharing.

Though I must say that the following line caused me some troubled as I was looping over the url that contained the tag "en". So the interface would remains in English
even though the cookie has been set back to the desired value.


$gocTemplatePortalURLImpl.setParameter("redirect", "$portalUtil.getCurrentURL($request)")


Hope it can help