org.apache.cocoon.acting
public class: LangSelect [javadoc |
source]
java.lang.Object
org.apache.avalon.framework.logger.AbstractLoggable
org.apache.cocoon.acting.LangSelect
All Implemented Interfaces:
Action, org.apache.avalon.framework.thread.ThreadSafe, org.apache.avalon.framework.configuration.Configurable
Deprecated! Use - LocaleAction instead.
LangSelect Action returns two character language code to sitemap.
Definition in sitemap:
<map:actions>
<map:action name="lang_select" src="org.apache.cocoon.acting.LangSelect"/>
And you use it in following way:
<map:match pattern="file">
<map:act type="lang_select">
<map:generate src="file_{lang}.xml"/>
</map:act>
{lang} is substituted with language code.
eg. if user selects url ../file?lang=en
then Sitemap engine generates file_en.xml source.
Creation date: (3.11.2000 14:32:19)
Modification date: (29.05.2001 0:30:01)
- author:
< - a href="mailto:kpiroumian@flagship.ru">Konstantin Piroumian
- author:
< - a href="mailto:lassi.immonen@valkeus.com">Lassi Immonen
- version:
CVS - $Id: LangSelect.java,v 1.7.2.1 2002/07/15 14:42:48 cziegeler Exp $
| Method from org.apache.cocoon.acting.LangSelect Detail: |
public Map act(Redirector redirector,
SourceResolver resolver,
Map objectModel,
String source,
Parameters par) throws Exception {
String lang;
if (objectModel.containsKey(PARAM_LANG)) {
lang = (String)(objectModel.get(PARAM_LANG));
} else {
lang = getLang(objectModel, par);
objectModel.put(PARAM_LANG, lang);
}
// Creating session to store the language code
Request request = ObjectModelHelper.getRequest(objectModel);
request.getSession(createSession);
if (storeInSession || storeInCookie) {
storeLang(objectModel, lang);
}
Map m = new HashMap(1);
m.put(PARAM_LANG, lang);
return m;
} Deprecated!Selects language if it is not set already in objectModel
Puts lang parameter to session and to objectModel
if it is not already there. |
public void configure(Configuration conf) throws ConfigurationException {
getLogger().warn("LangSelect action is deprecated. Please use LocaleAction");
if (conf != null) {
Configuration child = conf.getChild("store-in-request");
this.storeInRequest = child.getValueAsBoolean(false);
child = conf.getChild("create-session");
this.createSession = child.getValueAsBoolean(false);
child = conf.getChild("store-in-session");
this.storeInSession = child.getValueAsBoolean(false);
child = conf.getChild("store-in-cookie");
this.storeInCookie = child.getValueAsBoolean(false);
}
} Deprecated! |
public static String getLang(Map objectModel,
Parameters par) {
List langs_avail = new ArrayList();
List langs_user = new ArrayList();
Iterator params = par.getParameterNames();
while (params.hasNext()) {
String paramname = (String)(params.next());
if (paramname.startsWith("available_lang")) {
langs_avail.add(par.getParameter(paramname, null));
}
}
String def_lang = par.getParameter("default_lang", LangSelect.DEFAULT_LANG);
Request request = ObjectModelHelper.getRequest(objectModel);
String lang = null;
lang = request.getParameter(PARAM_LANG);
if (lang == null) {
Session session = request.getSession(false);
if (session != null) {
Object session_lang = session.getAttribute(PARAM_LANG);
if (session_lang != null) {
lang = session_lang.toString();
}
}
}
if (lang == null) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for ( int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals(PARAM_LANG)) {
lang = cookie.getValue();
}
}
}
}
if (lang == null) {
Enumeration locales = request.getLocales();
while (locales.hasMoreElements()) {
Locale locale = (Locale)(locales.nextElement());
langs_user.add(locale.getLanguage());
}
boolean match = false;
int i = 0;
for ( ; i < langs_user.size() && !match; i++) {
for ( int j = 0; j < langs_avail.size(); j++) {
if (((String)(langs_user.get(i))).equals(
(String)(langs_avail.get(j)))) {
match = true;
break;
}
}
}
if (match) {
lang = (String)(langs_user.get(i - 1));
} else {
lang = def_lang;
}
}
return lang;
} Deprecated!Returns two character language code by checking environment in following order
- Http request has parameter lang
- Http session has parameter lang
- Cookies has parameter lang
- User locales has matching language we are providing
- Otherwise we return default_lang from sitemap or if that is not found then 'en'
|
public void storeLang(Map objectModel,
String lang) throws Exception {
if (lang == null) {
lang = DEFAULT_LANG;
}
Request request = ObjectModelHelper.getRequest(objectModel);
if (storeInRequest) {
request.setAttribute(PARAM_LANG, lang);
}
if (storeInSession) {
// We do not create session here to keep this method static.
// Session must be created outside if needed.
Session session = request.getSession(false);
// Try to store in a session.
if (session != null) {
synchronized (session) {
session.setAttribute(PARAM_LANG, lang);
}
}
else {
throw new Exception("LangSelect: session is not available.");
}
}
if (storeInCookie) {
Response response = ObjectModelHelper.getResponse(objectModel);
Cookie langCookie = response.createCookie(PARAM_LANG, lang);
response.addCookie(langCookie);
}
} Deprecated!Stores language code in the session or a cookie |