Hello, I was comparing a Locale with a String, so please forget my previous message ;)
Everything works as expected now. Thanks for this great idea that is much more lightweight than writing a link transformer. Best, Rafael > On 2019-06-09, at 01:21 PM, Rafael Bugajewski <raf...@juicycocktail.com> > wrote: > > 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