Switch between languages
From OpenCms Wiki
How to link between the same content page in different languages: (short summary: retrieve current url - replace "language folder" name - link to new url)
Switch between siblings
One way to switch between languages is to check if the currently active content has a sibling, and if it does, link to that. An example of how you could implement this:
<%@ page import="java.util.HashMap"%> <%@ page import="java.util.Map"%> <%@ page import="java.util.List"%> <%@ page import="org.opencms.jsp.CmsJspActionElement"%> <%@ page import="org.opencms.file.CmsObject"%> <%@ page import="org.opencms.main.CmsException"%> <%@ page import="org.opencms.flex.CmsFlexController"%> <%@ page import="org.opencms.file.CmsResourceFilter"%> <%@ page import="org.opencms.file.CmsResource"%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% CmsJspActionElement cms = new CmsJspActionElement(pageContext, request, response); CmsObject cmso = CmsFlexController.getCmsObject(request); String strPagename = cms.getRequestContext().getUri(); String homePage = "/playground/index.html"; Map<String, String> linksByLocale = new HashMap<String, String>(); linksByLocale.put("en", homePage); linksByLocale.put("de", homePage); linksByLocale.put("fr", homePage); linksByLocale.put("nl", homePage); try { List<CmsResource> siblings = cmso.readSiblings(strPagename, CmsResourceFilter.ALL); for (CmsResource sibling : siblings) { String uri = cmso.getSitePath(sibling); linksByLocale.put(cmso.readPropertyObject(sibling, "locale", true).getValue(), uri); } } catch (CmsException e) { } %> <a href="<%= cms.link(linksByLocale.get("en")) %>">en</a><br/> <a href="<%= cms.link(linksByLocale.get("nl")) %>">nl</a><br/> <a href="<%= cms.link(linksByLocale.get("fr")) %>">fr</a><br/> <a href="<%= cms.link(linksByLocale.get("de")) %>">de</a><br/>
The above could be saved as a separate jsp element and then included in your templates.