Based on the info from Sling Internationalization Support page, here’s how we can get the reference to resource bundles in Sling Models.
If Sling Model is adapted from Resource object:
import com.day.cq.wcm.api.Page; import com.day.cq.wcm.api.PageManager; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.models.annotations.DefaultInjectionStrategy; import org.apache.sling.models.annotations.Model; import org.apache.sling.models.annotations.injectorspecific.Self; import javax.inject.Inject; import javax.annotation.PostConstruct; @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 } // ... } }
The LDAP-like filtering in selected lines is important. We have to specify the exact implementation of ResourceBundleProvider interface.
If Sling Model is adapted from SlingHttpServletRequest object:
import com.day.cq.i18n.I18n; import com.day.cq.wcm.api.Page; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.DefaultInjectionStrategy; import org.apache.sling.models.annotations.Model; import org.apache.sling.models.annotations.injectorspecific.Self; import org.apache.sling.models.annotations.injectorspecific.ScriptVariable; import javax.inject.Inject; import javax.annotation.PostConstruct; @Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) public class SomeModel { @Self private SlingHttpServletRequest request; @ScriptVariable private Page currentPage; // ... @PostConstruct protected void init() { Locale pageLocale = currentPage.getLanguage(true); ResourceBundle bundle = request.getResourceBundle(pageLocale); I18n i18n = new I18n(bundle); String localizedMessage = i18n.get("some.key") // do something with localized message } }