Skip to Content
1
Jul 27, 2016 at 03:50 PM

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

182 Views

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?