The first challenge you're likely to face when building a localized application is to figure out what Locale to use for a given request. Chances are you will support a limited number of languages and locales. When a user submits a request, the request can contain a ordered list of locales that the user prefers. Somehow you have to decide, based upon your supported locales, and the user's preferred locales, what locale to serve them with. This is all compounded by the fact that locales can be one, two or three segments long, denoting the language, locale and variant.
Stripes uses a LocalePicker to determine the locale to use for a request. The
LocalePicker is executed from the Stripes Filter, so it will execute even for direct-to-JSP navigation (read: you don't have to go through an ActionBean to take advantage of it). Once the
LocalePicker has determined the locale to use, Stripes uses a
HttpServletRequestWrapper to make calls to
request.getLocales() to return only the chosen locale. This means that not only will Stripes use the correct locale without having to re-determine it, but that any other localization tool that relies on
request.getLocale[s]() should also default to the correct locale. This includes the JSTL
fmt:* tags - cool huh?
Stripes uses the DefaultLocalePicker by default. The
DefaultLocalePicker uses a configured list of locales to determine the locales that the system supports. If no list is supplied it will be defaulted to a single locale equal to the system locale, i.e. the one obtained by calling
java.util.Locale.getDefault(). An example list for a site that supports English (of the American variety) and Japanese might look like this:
Stripes recognizes two types of localizable information that it uses. The first type is error messages. The second is field names. Each type of information is looked up using a resource bundle. If you are writing a localized application it is worth spending some time understanding resource bundles in depth - I'm not going to explain everything about them here. Suffice to say that probably the most common type of resource bundle is the PropertyResourceBundle which is simply a set of properties files with similar names.