ResourceBundle resourceBundle = resourceBundleProvider.getResourceBundle(locale); is giving null | Community
Skip to main content
Prashardan
Level 4
Jul 21, 2023 3:43 PM UTC
Solved

ResourceBundle resourceBundle = resourceBundleProvider.getResourceBundle(locale); is giving null

Hi Team

 

I am using a sling model where I would like to get i18n name of a product but stuck as resourceBundle is giving me null.

 

The below is code snip, Kindly correct me if anything is wrong.

 

imports:

import java.util.Locale;
import java.util.ResourceBundle;
import org.apache.sling.i18n.ResourceBundleProvider;
import javax.inject.Inject;
 
model declaration:
@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
 
@586265
@3214626(target = "(component.name=org.apache.sling.i18n.impl.JcrResourceBundleProvider)")
private ResourceBundleProvider resourceBundleProvider;
 
Locale locale = LocaleUtil.getLocale(resource);
ResourceBundle resourceBundle = resourceBundleProvider.getResourceBundle(locale);
I18n i18n = new I18n(resourceBundle);
 
here resourceBundle is always giving me null and stucked to proceed further. Kindly help me on this.
This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Mahedi_Sabuj
Mahedi_SabujAccepted solution
New Participant
Jul 21, 2023 4:35 PM UTC

Hi @prashardan,

You can check the following links: 

https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/i18n-access-from-model-adaptables-resource-class/m-p/254608  

https://www.flexibledesigns.rs/getting-localization-messages-in-sling-models

@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) public class SomeModel { @Self private Resource resource; @Inject private ResourceResolver resourceResolver; @Inject @Filter("(component.name=org.apache.sling.i18n.impl.JcrResourceBundleProvider)") private ResourceBundleProvider i18nProvider; // ... @PostConstruct protected void init() { // ... PageManager pm = resourceResolver.adaptTo(PageManager.class); Page currentPage = pm.getContainingPage(resource); Locale currentLocale = currentPage.getLanguage(true); if(i18nProvider != null) { ResourceBundle bundle = i18nProvider.getResourceBundle(currentLocale); String localizationMessage = bundle.getString("some.key"); // do something with localizationMessage } // ... } }
Mahedi Sabuj

3 replies

DPrakashRaj
New Participant
Jul 21, 2023 6:20 PM UTC

Check this one. You need to first inject it and then use it in @postconstruct as explains on https://www.flexibledesigns.rs/getting-localization-messages-in-sling-models/

Translate
Mahedi_Sabuj
Mahedi_SabujAccepted solution
New Participant
Jul 21, 2023 4:35 PM UTC

Hi @prashardan,

You can check the following links: 

https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/i18n-access-from-model-adaptables-resource-class/m-p/254608  

https://www.flexibledesigns.rs/getting-localization-messages-in-sling-models

@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) public class SomeModel { @Self private Resource resource; @Inject private ResourceResolver resourceResolver; @Inject @Filter("(component.name=org.apache.sling.i18n.impl.JcrResourceBundleProvider)") private ResourceBundleProvider i18nProvider; // ... @PostConstruct protected void init() { // ... PageManager pm = resourceResolver.adaptTo(PageManager.class); Page currentPage = pm.getContainingPage(resource); Locale currentLocale = currentPage.getLanguage(true); if(i18nProvider != null) { ResourceBundle bundle = i18nProvider.getResourceBundle(currentLocale); String localizationMessage = bundle.getString("some.key"); // do something with localizationMessage } // ... } }
Translate
Mahedi Sabuj
Level 2
Jul 21, 2023 4:18 PM UTC

Hi @prashardan !

 

If you are using ACS Commons in project, you can use something like this.

https://adobe-consulting-services.github.io/acs-aem-commons/features/sling-model-injectors/i18n/index.html

 

Regards,

Shailesh

Translate