En un blog anterior explicamos cómo “Sacar partido de la configuración de un portlet”, utilizaremos ese ejemplo para, a continuación, explicar cómo gestionar la información de los inputs en varios idiomas.
Si bien podemos utilizar keys dentro del portlet para determinar su valor en los distintos idiomas, una opción menos rígida es introducir los valores en los distintos idiomas a través de la configuración del portlet.
En nuestro ejemplo teníamos portlet con un título, una imagen y un listado. Dicho título era fijo, aunque cambiaras el idioma el título mostrado sería el mismo. Ahora lo que queremos es poder decidir el texto que utilizaremos de título en función del idioma en que se visualice la página.
Diferencias respecto a lo que teníamos:
configuration.jsp: cambia el tipo de tag usado para los input, en esta ocasión utilizaremos <liferay-ui:input-localized> envuelta por un <aui:field-wrapper>. También cambia la forma de manejar sus valores, ahora utilizaremos la clase LocalizationUtil para tratarlos.configuration.jsp
String localizedTitle = LocalizationUtil.getLocalizationXmlFromPreferences(portletPreferences, renderRequest, "title"); < liferay-ui:panel collapsible="<%= true %>" extended="<%= true %>" id="customText" persistState="<%= true %>" title="Text"> < aui:fieldset cssClass = "title-data" label = "Title Text" > < aui:field-wrapper cssClass = "lfr-input-text-container" label = "Title" > < liferay-ui:input-localized name = "title" xml="<%= localizedTitle %>" /> </ aui:field-wrapper > </ aui:fieldset > </ liferay-ui:panel > |
Es posible definir que solo muestre para elegir los idiomas del Site con “availableLocales”.configuration.jsp
< liferay-ui:input-localized name = "title" availableLocales="<%= LanguageUtil.getAvailableLocales(themeDisplay.getSiteGroupId()) %>" xml="<%= localizedTitle %>" /> |
También se puede definir que el idioma por defecto sea el que tiene el Site con “defaultLanguageId”:configuration.jsp
Locale defaultLocale = LocaleUtil.getSiteDefault(); String defaultLanguageId = LocaleUtil.toLanguageId(defaultLocale); … < liferay-ui:input-localized name = "title" defaultLanguageId="<%= defaultLanguageId %>" xml="<%= localizedTitle %>" /> |
ConfigurationActionImpl.java: Guardamos los datos localizados.
En este caso, es necesario tratar los datos para poder guardarlos.ConfigurationActionImpl.java
PortletPreferences preferences = actionRequest.getPreferences(); // Treat preferences LocalizationUtil.setLocalizedPreferencesValues(actionRequest, preferences, "title"); // Store preferences preferences.store(); super.processAction(portletConfig, actionRequest, actionResponse); |
view.jsp: Distinto método de obtener el valor en el idioma actual.
- Obtenemos el valor:
view.jsp
String localizedTitle = LocalizationUtil.getPreferencesValue(preferences, "title", themeDisplay.getLanguageId()); |
- Utilizamos el valor (ejemplo):
view.jsp
< h1 > <%=localizedTitle%> </ h1 > <% if (showsImage) { %> < img src="<%=imageLink%>" alt=""> <% } %> < div ><%=contentList%></ div > |
Una vez aplicadas las modificaciones tendremos un nuevo campo en la configuración del portlet con la posibilidad de guardar una información distinta por cada idioma.
Espero que os sea de utilidad, un saludo.