- Browser language
- FSP_LANGUAGE_PREFERENCE preference
- FSP_LANGUAGE_PREFERENCE item
To select the Application Language Derived From , go in the Shared Components - Edit Globalization Attributes.
FSP_LANGUAGE_PREFERENCE item is the option that we use the most. With that option you can create a button with a process to set the value of FSP_LANGUAGE_PREFERENCE to the language of your choice. We also use it to display the data in the correct language using v('FSP_LANGUAGE_PREFERENCE') in views.
When you use this method, there is a small problem. If you want to access a page directly via an URL (or create a bookmark) you end up in the application in the primary language on the first page view.
Doing so, brings you to the application and sets FSP_LANGUAGE_PREFERENCE but the page displays in the primary language (en-us in this case). That is because APEX sets the language of the application before it assign the value to the item FSP_LANGUAGE_PREFERENCE.
After the first page load, if the user navigates or submit the page, the application gets displayed in the language of the item FSP_LANGUAGE_PREFERENCE.
In APEX 4.0, there is a new way of setting the language of your application : SESSION
Using this option in "Application Language Derived From" , will let you specify the language of your application directly in the URL using &P_LANG (Same principle as turning the Trace On by adding &P_TRACE=YES at the end of the URL).
To access the application in french : http://tryapexnow.com/apex/f?p=12870:1:0&P_LANG=fr-ca
To access the application in english : http://tryapexnow.com/apex/f?p=12870:1:0&P_LANG=en-us
There are also three new procedures :
- APEX_UTIL.SET_SESSION_LANG( p_lang in varchar2 )
- APEX_UTIL.GET_SESSION_LANG return varchar2
If you want to get the session lang, you can also use the v('BROWSER_LANGUAGE') variable. It will show the APEX application language (Not the browser language).
In my demo application, to switch from one language to another, I created a button "Switch Lang" that calls a PL/SQL process that does :
if nvl(apex_util.get_session_lang,'en-us') = 'en-us' then apex_util.set_session_lang('fr-ca'); else apex_util.set_session_lang('en-us'); end if;
This is a great new feature in APEX 4.0 if you use the globalization a lot like we do. Thanks to Joel for helping me out on this blog post.