I will try to give You my example of solving translation of application in APEX.
Primary language: en (English)
Translation lang: hr (Croatian).
1.Firstly you have to define primary language (Application Builder>Application 500>Edit Globalization Attributes) and select your primary language (Application Primary Language: English (en).
2. On the sam page define Application Language Derived From as "Application preference (use FSP_LANGUAGE_PREFERENCE).
3. Define translation mapping "Application Builder>Application 500>Shared Components>Translate Application>Application Language Mappings" and create mappings for your second language (example is hr (Croatian)).
4. On the login page or first page if you don't have login, create hidden field (P101_LANG i n my example replace for your usage). It is used for rememebering current language
5. Create new application process (Application Builder>Application 500>Shared Components>Application Processes)
Process point: On load before header
Type: PL/SQL Anonymous block
Conditions>condition type: Request=Expression1
Process text (here is the code):
IF nvl(:P101_LANG,'en')='hr' THEN
6. Login page: on this page create one button with label in your primary lang. point on second language. My example label is "Croatian" in english as primary language and translated to "English" in Croatian. This logic is used for having just one button saying "Croatian" when I'm in english web page and "English" when I'm in croatian web page.
Button has "Optional URL Redirect" with :
Target is: page in this application
Page : your login page number (most probably 101)
7. For all other pages i use new item on navigation bar defined as:
Label: Croatian (secondary language) in Croatian translation label is "English"
Target>Target Type: Page in this application
Target>Page: &APP_PAGE_ID. (don't forget dot on the end)
8. Export XLIFF
10. Import translation
11. Publish translated app
That's all folks.
Main logic is to create same process for every page that is triggered if the request is LANG. This process changes the FSP_LANGUAGE_PREFERENCE preference that as far as I know can not be changed as other common app parameter but using HTMLDB_UTIL.SET_PREFERENCE function. With hte process in place you just have to implement link on every page for itself with request=lang and tha language will change.
I hope this is useful for everybody because it took me 6 bloody hours to do figure it out.
Published on Oracle forum by Dark Lord