[WARNING - long e-mail]
Den 26. sep. 2006 kl. 12.37 skrev Ross Gardler:
This brings me back to the idea of using the locationmap for locale
matching rather than Cocoons components, which have their problems
in our use case. Something like (be warned, I've not fully thought
this through and do not have any i18n sites, I'm not at all sure
this will work in the real world):
<match pattern="**.xml">
<location src="{project:xdocs}/{1}.{2}.xml/>
</location>
<match pattern="**.*.xml">
<select>
<location src="{project:xdocs}/{1}.{2}.xml/>
<location src="{project:xdocs}/{1}.{project:locale.default}.xml/>
</select>
</location>
I have been thinking about the LM solution a bit, and here are some
thoughts (some of these may be unneeded, but I do not understand or
know the LM, thus this is as well a way for me to clear my thoughts):
Goal: change the localised URL from the 'index.html?locale=XY'
pattern to something along 'index.XY.html when overriding browser
locale settings.
I see no point in removing the present i18n processing, replacing it
completely with LM; instead I hope we can use the LM to overcome the
URL problem above. Thus, the Cocoon components and the LM should be
able to coexist. They both have their use cases (see discussion below).
There are four possible combinations of URLs and files:
1 - URL is localised - file is localised
2 - URL is localised - file is not
3 - URL is not localised - file is
4 - URL is not localised - file is not
1 - URL is localised - file is localised
========================================
Use case: the user has selected a language override from a list, or
has manually edited the URL to try other languages
Assumption: there is a match between requested locale and available
locale (non-match is covered by case 2)
Actions:
* return the corresponding localised file, using LM
* use the identified locale for all i18n processing of menus, tabs
and messages
* make sure the non-localised URL is given the menu and tab
processing (otherwise the menu system breaks down)
* store the identified locale in the session (such that the next page
requested will be given in the same locale, if available) (this might
be dependent upon configuration)
2 - URL is localised - file is not
==================================
Use cases:
1 - the user has selected a language override from a list
2 - the user has manually edited the URL to try other languages
In the first use case it means that the localised URL corresponds to
the fallback file.
In the second case it most often means that there is no corresponding
localised file - we need to gracefully handle this situation
Actions:
* check the content of the fall-back file for @xml:lang
** if the fallback document corresponds to the requested locale,
return it
** if not, fall back to regular negotiation using the browser
settings - optionally throw an error saying that the document isn't
available in the requested language (which one to use could depend on
a setting)
* use the identified locale for all i18n processing of menus, tabs
and messages
* make sure the non-localised URL is given the menu and tab
processing (otherwise the menu system breaks down)
* store the identified locale in the session (such that the next page
requested will be given in the same locale, if available) (this might
be dependent upon configuration)
3 - URL is not localised - file is
==================================
Use cases:
1 - the user is entering the site - traditional negotiation should apply
2 - the user is entering a new page after a locale selection - the
locale should be picked from the session if available
1) is what we do today with the Cocoon modules, 2) is just a
variation of 1.
Actions:
* return the corresponding localised file (Cocoon i18n components)
* use the identified locale for all i18n processing of menus, tabs
and messages
* store the identified locale in the session (such that the next page
requested will be given in the same locale, if available) (this might
be dependent upon configuration)
4 - URL is not localised - file is not
======================================
Use case: this is the fallback case - no match found, return the
default/fallback.
Actions:
* return the fallback file (Cocoon i18n components)
* use the fallback locale for all i18n processing of menus, tabs and
messages, to give a consistent view of the page (all elements in the
same language) (should this be depending on a setting, thus allowing
menus etc to be in the user's preferred language, even though the
document is not?)
* do NOT store the document locale in the session - the next time the
user returns to a page in the preferred locale, that one should be used
It is combinations 1 & 2 that are problematic from a URL POV, and
this is where we will need the LM.
Work to be done:
- figure out whether the solution sketched here will actually work,
or whether another approach should be taken
- enhance all document lookups with a locationmap variant for cases
where the URL is of pattern **.*.* ({0} = document ref, {1} = locale,
{2} = extension) - this will likely collide with existing patterns
for internal matches, and needs thorough consideration
- figure out how to set the session locale from a LM/i18n match
- adapt the menu and tab processing (this is probably a subset of the
first task)
This is a lot of work, and I will not be able to do all of this, both
in terms of time and knowledge. The first question is easy enough
though:
WDYT?
Sjur