Hello Cezary,

that’s actually a great idea. I tried to add a service advisor, but it doesn’t 
seem to do what I want:

@Match("PersistentLocale")
public static void adviseNullForDefaultLanguage(MethodAdviceReceiver receiver) {
    MethodAdvice advice = new MethodAdvice() {
        public void advise(MethodInvocation invocation) {
            invocation.proceed();

            if (invocation.getReturnValue() != null && 
invocation.getReturnValue().equals("en")) {
                invocation.setReturnValue(null);
            }
        }
    };

    for (Method m : receiver.getInterface().getMethods()) {
        if (m.getName().equals("get"))
            receiver.adviseMethod(m, advice);
    }
}

The basic idea was that a method called "get" on the service called 
"PersistentLocale" returns null if the return value from the implementation is 
"en", but actually nothing happens.

Any ideas what I’m doing wrong?

Best,
Rafael


> On 2019-06-09, at 12:10 PM, Cezary Biernacki <cezary...@gmail.com> wrote:
> 
> You can always decorate PersistentLocale and change behaviour of get() by
> returning null from it, when the original result is your default locale.
> 
> Cezary
> 
> 
> On Fri, Sep 6, 2019 at 10:45 AM Rafael Bugajewski <raf...@juicycocktail.com>
> wrote:
> 
>> Hello,
>> 
>> Tapestry supports putting the current locale into the URL path. I’m
>> injecting PersistentLocale and switching between languages as advised in
>> the documentation:
>> 
>> if (persistentLocale.get() == null) {
>>    persistentLocale.set(new Locale("de"));
>> } else if ("en".equalsIgnoreCase(persistentLocale.get().getLanguage())) {
>>    persistentLocale.set(new Locale("de"));
>> } else {
>>    persistentLocale.set(new Locale("en"));
>> }
>> 
>> The problem is that the default language should not have a prefixed URL
>> path. When the user goes to https://example.com/ the default language is
>> rendered and it is the desired behavior. When I switch the URL becomes
>> https://example.com/de/ which is also OK. But now when I try to switch
>> back to English (to the default language), the URL becomes
>> https://example.com/en/ which I don’t want. Trying to set Locale.ROOT as
>> the locale for the default language after switching from German doesn’t
>> work, because "" (which Locale.ROOT effectively represents) isn’t
>> configured in SymbolConstants.SUPPORTED_LOCALES.
>> 
>> The only thing I’ve seen are some older threads where PersistentLocale was
>> copied, pasted & adjusted to allow null parameters. Is this workaround the
>> only way to go or is there an official, Tapestry way to not have the locale
>> in the URL path for the default language?
>> 
>> Best,
>> Rafael
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to