1<#assign
2 portalURL = themeDisplay.getURLPortal()
3 siteGroupId = themeDisplay.getSiteGroupId()
4 currentLangCode = themeDisplay.getLanguageId()?substring(0, 2)
5
6 defaultLangCode = "en"
7/>
8
9<#attempt><#assign defaultLangCode = themeDisplay.getSiteDefaultLocale().getLanguage() /><#recover></#attempt />
10
11<#assign
12 translatedCodes = []
13 translatedCodesResolved = false
14/>
15
16<#attempt>
17 <#assign infoItem = request.getAttribute("INFO_ITEM") />
18 <#if infoItem??>
19 <#attempt>
20 <#list infoItem.getAvailableLanguageIds() as languageId>
21 <#assign translatedCodes = translatedCodes + [languageId?substring(0, 2)] />
22 </#list>
23 <#if translatedCodes?has_content><#assign translatedCodesResolved = true /></#if />
24 <#recover></#attempt>
25
26 <#if !translatedCodesResolved>
27 <#attempt>
28 <#assign values = infoItem.getValues() />
29 <#list values?keys as key>
30 <#if key?ends_with("_i18n")>
31 <#attempt>
32 <#list values[key]?keys as localeKey>
33 <#assign code = localeKey?substring(0, 2) />
34 <#if !translatedCodes?seq_contains(code)>
35 <#assign translatedCodes = translatedCodes + [code] />
36 </#if>
37 </#list>
38 <#recover></#attempt>
39 </#if>
40 </#list>
41 <#if translatedCodes?has_content><#assign translatedCodesResolved = true /></#if />
42 <#recover></#attempt>
43 </#if>
44 </#if>
45<#recover></#attempt>
46
47<#if !translatedCodesResolved>
48 <#assign layout = themeDisplay.getLayout()! />
49 <#if layout?? && layout.isTypeContent()>
50 <#attempt>
51 <#list layout.getAvailableLanguageIds() as languageId>
52 <#assign translatedCodes = translatedCodes + [languageId?substring(0, 2)] />
53 </#list>
54 <#if translatedCodes?has_content><#assign translatedCodesResolved = true /></#if />
55 <#recover></#attempt>
56 </#if>
57</#if>
58
59<#if !(translatedCodes?has_content)>
60 <#assign translatedCodes = [defaultLangCode] />
61</#if>
62<#if !translatedCodes?seq_contains(currentLangCode)>
63 <#assign translatedCodes = translatedCodes + [currentLangCode] />
64</#if>
65
66<#assign cleanedURL = themeDisplay.getURLCurrent() />
67<#if cleanedURL?contains("?")><#assign
68 cleanedURL = cleanedURL?substring(0, cleanedURL?index_of("?")) </#if
69 ctxPath = themeDisplay.getPathContext()
70/>
71
72<#if ctxPath?has_content && cleanedURL?starts_with(ctxPath)><#assign
73 cleanedURL = cleanedURL?substring(ctxPath?length) </#if
74 currentPrefix = "/" + currentLangCode
75/>
76
77<#if cleanedURL?starts_with(currentPrefix + "/")>
78 <#assign cleanedURL = cleanedURL?substring(currentPrefix?length) />
79<#elseif cleanedURL == currentPrefix>
80 <#assign cleanedURL = "/" />
81</#if>
82<#if !cleanedURL?starts_with("/")><#assign cleanedURL = "/" + cleanedURL /></#if />
83<#if cleanedURL == "/home"><#assign
84 cleanedURL = "/" </#if
85
86 siteLocales = languageUtil.getAvailableLocales(siteGroupId)
87/>
88
89<ul>
90 <#list siteLocales as curLocale>
91 <#assign
92 langCode = curLocale.getLanguage()
93 isTranslated = translatedCodes?seq_contains(langCode)
94 targetURL = isTranslated?then(portalURL + "/" + langCode + cleanedURL, portalURL + "/" + langCode + "/")
95 />
96
97 <li class="language-nav-item">
98 <@clay["link"]
99 cssClass="liferay-nav-item ${(langCode == currentLangCode)?then('selected', '')}"
100 href=targetURL
101 label=curLocale.getDisplayLanguage(curLocale)?cap_first
102 lang=curLocale.toLanguageTag()
103 rel="nofollow"
104 />
105 </li>
106 </#list>
107</ul>