cancel
Showing results for 
Search instead for 
Did you mean: 

How to override the selected language behavior on product cockpit login?

amitpanwar
Advisor
Advisor
0 Kudos

I would like to override the selected language behavior for the product cockpit labels based on the following use case:

  • If the selected language on login screen is assigned to any of the user's readable catalogs. Use the selected language.

  • otherwise,
    • if a session language is assigned to user's profile use the user's session language.

    • otherwise use ENGLISH (en)

I have overridden the DefaultCockpitUserDetailsService.loadUserByUsername as:

 private String getLoginLanguage(String loginLanguage, final String userUid)
     {
         boolean languageAvailableInCatalog = false;
         final Collection<CatalogVersionModel> catalogVersions = catalogVersionService.getAllCatalogVersions();
         for (final CatalogVersionModel catalogVersion : catalogVersions)
         {
             if (catalogVersion.getCatalog().getId().equals("Default"))
             {
                 continue;
             }
             for (final LanguageModel language : catalogVersion.getLanguages())
             {
                 if (StringUtils.equalsIgnoreCase(language.getIsocode(), loginLanguage))
                 {
                     languageAvailableInCatalog = true;
                     break;
                 }
             }
         }
         if (!languageAvailableInCatalog)
         {
             final LanguageModel sessionLanguage = userService.getUserForUID(userUid).getSessionLanguage();
             if (null != sessionLanguage)
             {
                 loginLanguage = sessionLanguage.getIsocode();
             }
             else
             {
                 loginLanguage = Locale.ENGLISH.getLanguage();
             }
         }
         return loginLanguage;
     }
 
 @Override
     public CoreUserDetails loadUserByUsername(final String username)
     {
         final CoreUserDetails coreUserDetails = super.loadUserByUsername(username);
         commonI18NService.setCurrentLanguage(commonI18NService.getLanguage(getLoginLanguage(commonI18NService.getCurrentLanguage().getIsocode(), username)));
         return coreUserDetails;
     }

It reflects in the data values but doesn't reflect in the cockpit labels.

Could any expert help here?

View Entire Topic
laurent-malvert
Product and Topic Expert
Product and Topic Expert
0 Kudos

You want:

 i18NService.setCurrentLocale(/* ... */)

Not:

 commonI18NService.setCurrentLanguage(/* ... */)

amitpanwar
Advisor
Advisor
0 Kudos

I already tried this but this doesn't work either.