In portals, all the resources that are not portlets themselves but are accessed through portlets - reading
data through PortletRequest, and writing to PortletResponse - are referred to as 'bridged'.
Any resources that are accessed directly, bypassing portal filters and servlets, are referred to as 'non-bridged'.
Non-bridged servlets, and .jsps have no access to PortalRequest. They do not use
PortletRequest.getLocale()
to determine current Locale. Instead, they use
ServletRequest.getLocale()
which is subject to precise semantics defined by Servlet specification - it reflects browser's language
preference.
In other words, non-bridged resources do not have a notion of current
Locale
in the same sense that portlets do. The result is that when mixing portlets and non-bridged resources there may be
a localization mismatch - an inconsistency in the language used by different resources composing your portal page.
This problem is addressed by LocalizationFilter. This is a filter that changes the behaviour of
ServletRequest.getLocale()
method so that it behaves the same way as PortletRequest.getLocale(). That way even localization of
servlets, and .jsps accessed in a non-bridged manner can stay in synchronization with the portlet localization.
LocalizationFilter
is installed through the
gatein.ear/portal.war/WEB-INF/web.xml
file of the portal.
<filter>
<filter-name>LocalizationFilter</filter-name>
<filter-class>org.exoplatform.portal.application.localization.LocalizationFilter</filter-class>
</filter>
...
<filter-mapping>
<filter-name>LocalizationFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
One tiny limitation to this mechanism is that it is unable to determine the current portal, and consequently
its default language. As a result, the
portalLocale
defaults to English, but can be configured to something else by using filter's
PortalLocale
init param. For example:
<filter>
<filter-name>LocalizationFilter</filter-name>
<filter-class>org.exoplatform.portal.application.localization.LocalizationFilter</filter-class>
<init-param>
<param-name>PortalLocale</param-name>
<param-value>fr_FR</param-value>
</init-param>
</filter>
By default,
LocalizationFilter
is applied to *.jsp, which is considered the minimum required by GateIn 3.5 to properly keep its non-bridged
resources in synchronization with the rest of the portal. Additionally, deployed portlets and portal applications
may need broader mapping to cover their non-bridged resources.
Avoid using
/,
/public/
,/private/*, and similar broad mappings as
LocalizationFilter
sometimes adversely interacts with the processing of portlet requests. Use multiple filter-mappings instead to
specifically target non-bridged resources.
Keeping the mapping limited to only non-bridged resources will minimize any impact on performance as well.