ok, I played with it and understood an "underlying design" decision to let
the current request.uri_language to propagate to all URL() generated links.
In fact, parameter based router was thought to let "different" versions of
the same site to behave in a consistent way (i.e., if you accessed
myapp/it/something, it's likely that you'd like to navigate the entire site
from there "mapped" to the it language).
In this case, generating(showing) an url containing a different language is
"forbidden" by the URL syntax.... but can be easily managed....just not
using the URL() function :P
You can use some replace with request.env.path_info, but I found a nicer
method: you can in fact "alter" the language mapping of the URL just
(re)setting the request.uri_language variable.
I mean:
/myapp/it/default/index
URL('something', 'else') --> /myapp/it/something/else
but:
/myapp/it/default/index
request.uri_language = 'jp'
URL('something', 'else') --> /myapp/jp/something/else
My advice would be to save the "actual" request.uri_language in some
variable and altering that just to generate the URLs, then reset it back to
the original value (so static and other links won't be 'altered', and you
get the shortest possible link, etc etc) .... e.g.
def index():
orig_lang = request.uri_lang
request.uri_lang = 'en'
this_page_in_eng_url = URL()
request.uri_lang = 'it'
this_page_in_it_url = URL()
request.uri_lang = orig_lang
return dict()
On Friday, November 16, 2012 8:33:34 PM UTC+1, David Sorrentino wrote:
>
> Niphlod,
>
> I understand that web2py expects something like /a/lang/c/f or /lang/c/f,
> but playing with request.something I didn't manage to obtain that. :)
> Any tips?
> Thanks for your help.
>
> Have a good night.
> David
>
>
> On 16 November 2012 15:25, Niphlod <[email protected] <javascript:>> wrote:
>
>> URL('it') is "go to the "it" function in the same controller I'm in".
>> haven't played with that, but I guess web2py expects something like
>> /a/lang/c/f so, by some means of request.something
>> (function,controller,args,etc) you should be able to.....
>>
>>
>>
>> On Friday, November 16, 2012 12:23:52 PM UTC+1, David Sorrentino wrote:
>>
>>> Very last doubt, I promise! :P
>>>
>>> Let us assume that I am visiting the page at this url:
>>>
>>> /en/portfolio
>>>>
>>>
>>> and I want to change to /it/portfolio, how can I set URL in order to do
>>> that?
>>> If I set it like this:
>>>
>>> URL('it')
>>>>
>>>
>>> I will obtain:
>>>
>>> /en/it
>>>>
>>>
>>> which is an invalid function.
>>>
>>> Cheers,
>>> David
>>>
>>>
>>> On 16 November 2012 11:33, David Sorrentino <[email protected]> wrote:
>>>
>>>> Hi Niphlod,
>>>>
>>>> Thanks for your example. It's crystal clear. ;)
>>>> I got another doubt about multi-languages: on the online book I read
>>>> that in order to tell web2py which language is the default one, I have to
>>>> use:
>>>>
>>>> T.set_current_languages('it')
>>>>>
>>>>
>>>> Now I am wondering if I need to use it in the controller and call it
>>>> every time I load a page, or I can put it somewhere else and tell web2py
>>>> just once which one is the default language.
>>>>
>>>> Sorry for all these doubts! :P
>>>>
>>>> Cheers,
>>>> David
>>>>
>>>>
>>>>
>>>> On 15 November 2012 21:46, Niphlod <[email protected]> wrote:
>>>>
>>>>> I'd do the following
>>>>> 1. choose a storage option for your content (you may want to use a
>>>>> simple table with a 'text' field for editing online, or code something to
>>>>> save the content to a "txt" file)
>>>>> 2. code something that inspects the uri_language and does
>>>>> (semi-programming-language):
>>>>> if exists "nameoftherequestedarticle":
>>>>> if uri_language in "translationsofthearticle":
>>>>> content = translatedarticle
>>>>> else:
>>>>> content = originalarticle (english ?)
>>>>> else:
>>>>> raise 404
>>>>>
>>>>> --
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>> --
>>
>>
>>
>>
>
>
--