SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
UDA – Utilidades de desarrollo de aplicaciones by EJIE is licensed under a Creative Commons Reconocimiento-
NoComercial-CompartirIgual 3.0 Unported License.
UDA - Utilidades de desarrollo de aplicaciones
Gestión idiomática
Fecha: 09/02/2012 Referencia:
EJIE S.A.
Mediterráneo, 14
Tel. 945 01 73 00*
Fax. 945 01 73 01
01010 Vitoria-Gasteiz
Posta-kutxatila / Apartado: 809
01080 Vitoria-Gasteiz
www.ejie.es
Gestión idiomática ii/14
Control de documentación
Título de documento: Gestión de properties e internacionalización (i18n)
Histórico de versiones
Código: Versión: Fecha: Resumen de cambios:
1.0.0 10/02/2012 Primera versión.
2.0.0 08/08/2012 Gestión layout
Cambios producidos desde la última versión
Gestión layout
Control de difusión
Responsable: Ander Martínez
Aprobado por:
Firma: Fecha:
Distribución:
Referencias de archivo
Autor:
Nombre archivo:
Localización:
Gestión idiomática iii/14
Contenido
Capítulo/sección Página
1 Introducción 1
2 Gestión de idioma (antigua) 2
2.1 CookieLocaleResolver 2
2.2 LocaleChangeInterceptor 2
2.3 Problemas detectados 2
3 Gestión de idioma 4
3.1 Servidor 4
3.2 Cliente 6
4 Manual de migración 7
5 Nuevas funcionalidades 10
Gestión idiomática 1/14
1 Introducción
El presente documento pretende explicar la manera en la que se gestionaba el idioma de la aplicación en
UDA, que problemas se han detectado y la nueva gestión, haciendo hincapié en las mejoras conseguidas con
el cambio.
Las aplicaciones desarrolladas con UDA gestionan el idioma a través de una cookie. Además dichas
aplicaciones pueden ser multiidioma (i18n) por lo que existe la opción de cambiar el idioma en el que se
muesta la aplicación, bien sea mediante una URL directa o a través del componente rup.language.
A lo largo del documento se explicarán los flujos definidos (servidor y cliente) a la hora de determinar el idioma
utilizando los siguientes elementos:
Recepción del parámetro de cambio de idioma
Cookie de idioma
Idiomas disponibles en la aplicación
Idioma por defecto de la aplicación
Gestión idiomática 2/14
2 Gestión de idioma (antigua)
El presente capítulo pretende explicar la manera en la que se gestionaba el idioma en UDA antes del cambio a
la nueva versión.
2.1 CookieLocaleResolver
UDA utiliza una cookie para determinar el idioma de la aplicación. Para ello emplea la clase
CookieLocaleResolver de Spring declarándola de la siguiente manera en el fichero mvc-config.xml del WAR:
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="language" />
</bean>
Una vez se acceda a la aplicación se creará una cookie de sesión (de nombre ‘language’) que contendrá el
idioma en el que se visualiza la aplicación (ej: es, eu, en, fr).
2.2 LocaleChangeInterceptor
UDA se basa en la clase de Spring LocaleChangeInterceptor para el cambio de idioma. Dicha clase se
configura a nivel de WAR en el fichero mvc-config.xml de la siguiente manera:
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
Dicha clase se declara como interceptora por lo que cada vez que una petición (a la aplicación) envié el el
parámetro declarado en el bean (si no se declara ninguno se usa por defecto ‘locale’), entrará en
funcionamiento dicha clase, realizando la gestión de idioma.
Un ejemplo de petición de cambio de idioma podría ser la siguiente:
http://desarrollo.jakina.ejiedes.net:7001/x21aPilotoPatronesWar/?locale=eu
2.3 Problemas detectados
A continuación se detallan algunos casos detectados en los que pueden generarse problemas debidos a esta
configuración:
Si se realiza una petición de cambio de idioma a uno que la aplicación no soporta (no se han definido
sus ficheros idiomáticos)
http://desarrollo.jakina.ejiedes.net:7001/x21aPilotoPatronesWar/?locale=zh
o La aplicación falla al no encontrarse el fichero de literales (error en la JSP)
o Al no detectarse los literales se toma por defecto la Locale del servidor (no se sabe en qué
idioma está configurado) y se carga dicho fichero.
o Los componentes de RUP al no encontrar los ficheros de literales fallan y no se muestran en
pantalla (error de JavaScript).
Gestión idiomática 3/14
La interrelación entre cambio de idioma, los idiomas disponibles en la aplicación y el idioma por
defecto no existe. Se realiza petición de cambio de idioma a chino (zh) pero no se comprueba si es un
idioma disponible en la aplicación y en en función de si es o no establecer dicho idioma o el de por
defecto.
Carga de la aplicación en el idioma en el que está configurado el servidor al no encontrarse el idioma
por defecto.
…
Gestión idiomática 4/14
3 Gestión de idioma
A partir de la versión 2.0.0 de UDA los fallos detectados y comentados en el capítulo anterior han sido
subsanados. Se ha mejorado y simplificado la manera de gestionar el idioma, añadiendo ciertas
funcionalidades extra como puede ser el que en caso de no encontrar el literal a traducir se muestre la clave
en lugar de producir un error.
3.1 Servidor
La nueva gestión de idioma (en la parte servidora) en UDA se realiza a través de la clase MvcInterceptor que
se incluye en x38. Esta clase viene a sustituir a la clase LocaleChangeInterceptor (nativa de Spring)
introduciendo más funcionalidad.
Al igual que en la versión anterior, se sigue empleando una cookie para mantener el idioma seleccionado
durante la sesión del usuario. Para ello se hace uso de la clase CookieLocaleResolver de Spring.
La configuración de ambas clases se realiza a nivel de WAR en el fichero mvc-config.xml de la siguiente
manera:
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="language" />
</bean>
<bean id="mvcInterceptor" class="com.ejie.x38.control.MvcInterceptor" >
<!-- <property name="paramName" value="locale" /> -->
<property name="defaultLanguage" value="es" />
<property name="defaultLayout" value="horizontal" />
<property name="availableLangs" value="es,eu,en,fr" />
<!-- <property name="portalCookie" value="r01euskadiCookie" /> -->
</bean>
<mvc:interceptors>
<ref bean="mvcInterceptor"/>
</mvc:interceptors>
Los valores que recibe como propiedades son los siguientes:
paramName (opcional): Determina el nombre del parámetro empleado en las peticiones para el
cambio de idioma. Por defecto es ‘locale’
defaultLanguage: Idioma por defecto de la aplicación
defaultLayout: Layout por defecto de la aplicación
availableLangs: Idiomas permitidos por la aplicación (separados por comas)
portalCookie: Nombre de la cookie de idioma para aplicaciones integradas en portal.
A continuación se muestra mediante un diagrama de flujo la gestión que realiza MvcInterceptor:
locale se refiere al parámetro de cambio de idioma que se envía en la petición
http://desarrollo.jakina.ejiedes.net:7001/x21aPilotoPatronesWar/?locale=eu
Gestión idiomática 5/14
language_cookie se refiere a la cookie de UDA para la gestión de idioma (configurada con el
nombre language en mvc-config.xml)
true
true
true
false
INICIO
(petición contra la aplicación)
portalCookie != null
idioma = cookie del portal
Locale != null
&&
locale in availableLangs
language_cookie != null
&&
language_cookie in
availableLangs
false
idioma = cookie de idioma
false
idioma = defaultLanguage
idioma = locale
Gestión idiomática 6/14
3.2 Cliente
Junto con los cambios en la parte servidora de cara a mejorar el sistema de gestión de idioma, se han
realizado ciertos cambios en la parte cliente (componentes de RUP) manteniendo la compatibilidad hacia
atrás.
La nueva gestión de idioma en RUP se realiza a través del fichero rup.base-2.0.0.js que determina el idioma
a emplear en los componentes RUP mediante el diagrama que veremos a continuación.
language_cookie se refiere a la cookie de UDA para la gestión de idioma (configurada con el
nombre language en mvc-config.xml)
En caso de que se llegue al proceso “ERROR” se mostrará un mensaje por pantalla (alert) indicando la. No se
realizará la petición de los ficheros idiomáticos ya que al no estar el idioma bien configurado provocará un
error. A pesar de ello los componentes de RUP no fallarán aunque los literales de los mismos no se traducirán
y se mostrará la clave utilizada para su resolución.
false
false
INICIO
(carga de rup.base.js)
language_cookie != null
language_cookie in
availableLangs
true
idioma =cookie de idioma
true
ERROR
Gestión idiomática 7/14
4 Manual de migración
El capítulo que nos ocupa pretende recopilar los cambios a realizar en una aplicación para utilizar la nueva
gestión de idioma. A continuación se detalla proyecto a proyecto los cambios necesarios (en el siguiente
capítulo se detallará las mejoras aportadas con dichos cambios):
<xxxConfig>
o xxx.properties : Contiene variables para la gestión del idioma y del layout que ya no se
utilizan ya que se declaran a nivel de WAR en su mvc-config.xml (podrían eliminarse).
x21aPilotoPatronesWar.default.language=es
x21aPilotoPatronesWar.default.layout=horizontal
<xxxEAR>
o Sustituir la librería de x38 por la nueva versión x38ShLibClasses-2.0.0.jar
<xxxEARClasses>
o Modificar en el fichero service-config.xml el bean appMessageSource añadiendo las líneas
destacadas.
<bean id="appMessageSource"
class="org.springframework.context.support.ReloadableResource
BundleMessageSource">
<property name="basename" value="x21a.i18n" />
<property name="defaultEncoding" value="UTF-8" />
<property name="useCodeAsDefaultMessage" value="true" />
<property name="fallbackToSystemLocale" value="false" />
</bean>
<xxxNombreWAR>
o Modificar en el fichero mvc-config.xml el bean messageSource añadiendo las líneas
destacadas.
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResource
BundleMessageSource">
<property name="parentMessageSource" ref="appMessageSource" />
<property name="basename" value="/WEB-
INF/resources/x21aMantenimientos.i18n" />
<property name="defaultEncoding" value="UTF-8" />
<property name="useCodeAsDefaultMessage" value="true" />
<property name="fallbackToSystemLocale" value="false" />
</bean>
o Modificar en el fichero mvc-config.xml para sustituir el antiguo interceptor por el nuevo.
Teniendo en cuenta que ahora las propiedades del fichero xxx.properties para la gestión de
idioma por defecto y layout se configuran mediante propiedades del interceptor.
[Viejo]
<!-- Configures Handler Interceptors -->
<mvc:interceptors>
<!-- Changes the locale when a 'locale' request parameter
is sent; e.g. /?locale=en -->
Gestión idiomática 8/14
<bean
class="org.springframework.web.servlet.i18n.LocaleCh
angeInterceptor" />
</mvc:interceptors>
<!-- Saves a locale change using a cookie -->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleRe
solver">
<property name="cookieName">
<value>language</value>
</property>
</bean>
[Nuevo]
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleRe
solver">
<property name="cookieName" value="language" />
</bean>
<bean id="mvcInterceptor"
class="com.ejie.x38.control.MvcInterceptor">
<!-- <property name="paramName" value="locale" /> -->
<property name="defaultLanguage" value="es" />
<property name="defaultLayout" value="horizontal" />
<property name="availableLangs" value="es,eu,en,fr" />
<!-- <property name="portalCookie"
value="r01euskadiCookie" /> -->
</bean>
<mvc:interceptors>
<ref bean="mvcInterceptor"/>
</mvc:interceptors>
o Modificar en el fichero mvc-config.xml para añadir las nuevas clases de resolución de vista
incluídas en x38.
[Viejo]
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewRe
solver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles2.TilesVi
ew" />
</bean>
[Nuevo]
<bean id="viewResolver"
class="com.ejie.x38.control.view.UdaViewResolver">
<property name="viewClass"
value="com.ejie.x38.control.view.UdaTilesView"/>
<property name="exposedContextBeanNames" >
<list>
<value>localeResolver</value>
<value>mvcInterceptor</value>
</list>
Gestión idiomática 9/14
</property>
</bean>
o Modificar en el fichero base-includes.jsp para cambiar las variables utilizadas en la
configuración del idioma para RUP:
[Viejo]
<script type="text/javascript">
APP_RESOURCES = 'x21a',
CTX_PATH = '<%= request.getContextPath()%>/',
RUP = '${staticsUrl}/rup',
STATICS = '${staticsUrl}',
DEFAULT_LANGUAGE = "${defaultLanguage}",
LAYOUT = "${defaultLayout}",
WAR_NAME = "x21aPilotoPatrones",
AVAILABLE_LANGS = "es, eu, en, fr";
</script>
[Nuevo]
<script type="text/javascript">
APP_RESOURCES = 'x21a',
CTX_PATH = '<%= request.getContextPath()%>/',
STATICS = '${staticsUrl}',
RUP = '${staticsUrl}/rup',
WAR_NAME = "x21aPilotoPatrones",
//model
LAYOUT = "${empty defaultLayout ?
mvcInterceptor.defaultLayout : defaultLayout}",
//mvc-config.xml
LOCALE_COOKIE_NAME = "${localeResolver.cookieName}",
LOCALE_PARAM_NAME = "${mvcInterceptor.paramName}",
AVAILABLE_LANGS = "${mvcInterceptor.availableLangs}",
</script>
DEFAULT_LANGUAGE (deprecated): Ahora se carga desde el mvc-config.xml
LOCALE_COOKIE_NAME: Nombre de la cookie (definida en mvc-config.xml)
LOCALE_PARAM_NAME: Nombre del parámetro de cambio de idioma (definida en
mvc-config.xml)
AVAILABLE_LANGS: Posibles lenguajes de la aplicación Nombre (definidos en mvc-
config.xml)
<xxxStatics>
o Modificar en el fichero _layoutLoader.js (existe uno por cada WAR) para cambiar la
invocación del componente rup.language [en caso de que se utilice] utilizando la variable
definida.
[Viejo]
$("#x21aPilotoPatronesWar_language").rup_language({languages:
["es", "eu", "en", "fr"]});
[Nuevo]
$("#x21aMantenimientosWar_language").rup_language({languages:
$.rup.AVAILABLE_LANGS_ARRAY});
Gestión idiomática 10/14
5 Nuevas funcionalidades
La nueva gestión idiomática de UDA, además de resolver los problemas indicados aportar robustez y nuevas
funcionalidades que se comentan a continuación:
Inclusión de la clase ‘MvcInterceptor ‘ (x38) en el mvc-config.xml
o Centralizar la configuración del layout, idioma por defecto e idiomas disponibles en la
aplicación a nivel de WAR evitando la declaración de dichas variables en el properties de
aplicación (dependientes del entorno).
o Facilitar el acceso a dichas variables mediante EL (${…}) desde la parte cliente (JavaScript).
o Evitar errores ya que en caso de estar mal configurada alguna de las propiedades (nombre de
la propiedad incorrecta o no declarada) se produce una excepción, imposibilitando el
despliegue avisando en el fichero de incidencias la causa del problema (detalla la
propiedad(es) que ha(n) fallado):
Caused By: java.lang.IllegalStateException: No se ha definido
correctamente el bean 'MvcInterceptor' en el fichero mvc-
config.xml del proyecto <x21aPilotoPatronesWar>. Revisar
propiedad(es):[defaultLanguage]
o Simplificar la codificación de los controladores evitando código duplicado en todos ellos. Los
métodos encargados de devolver una vista (acceder a una página) ya no requieren de dejar
las variables de idioma y layout por defecto en el modelo (en caso de necesidad se permite
sobrescribir el layout por defecto incluyéndolo en el modelo:
model.addAttribute("layout", "mixto");
[Viejo]
//Autocomplete
@RequestMapping(value = "autocomplete", method =
RequestMethod.GET)
public ModelAndView getAutocomplete(Model model) {
model.addAttribute("defaultLanguage",
appConfiguration.get("x21aPilotoPatronesWar.default.language"));
model.addAttribute("defaultLayout",
appConfiguration.get("x21aPilotoPatronesWar.default.layout"));
return new ModelAndView("autocomplete", "model", model);
}
[Nuevo]
@RequestMapping(value = "autocomplete", method =
RequestMethod.GET)
public String getAutocomplete(Model model) {
return "autocomplete";
}
Cambio de clases para la resolución de las vistas (UdaViewResolver y UdaTiesView) en el mvc-
config.xml
o Acceso mediante EL (${…}) a los beans cargados en el contexto de Spring requeridos por
RUP (localeResolver y localeInterceptor). Desde el fichero base-includes.jsp se podrá acceder
a las variables AVAILABLE_LANGS, LOCALE_COOKIE_NAME y LOCALE_PARAM_NAME
que gestiona el interceptor (automáticamente) y necesarias para los componentes de RUP.
Por compatibilidad hacia atrás en caso de no declararse se tomarán valores por defecto
(cookie=’language’ y param=’locale’).
Gestión idiomática 11/14
<bean id="viewResolver" class="com.ejie.x38.view.UdaViewResolver">
<property name="viewClass" value="com.ejie.x38.view.UdaTilesView"/>
<property name="exposeContextBeansAsAttributes" value="true"/>
</bean>
Mediante la propiedad exposeContextBeansAsAttributes se exponen todos los beans del
contexto. Para acceder bastará con indicar el nombre del bean y la propiedad deseada:
${localeResolver.cookieName}
En caso de querer exponer solo algunos de los beans existe la propiedad
exposedContextBeanNames.
<property name="exposedContextBeanNames">
<list>
<value>beanA</value>
<value>beanB</value>
</list>
</property>
Cambio en la declaración de appMessageSource (EARClasses – service-config.xml) y
messageSource (WAR – mvc-config.xml).
o Evitar el uso de la Locale del servidor de aplicaciones en caso de no encontrar el fichero de
recursos (i18n).
<property name="fallbackToSystemLocale" value="false" />
o Evitar errores en el acceso a la aplicación ya que en caso de no encontrar una propiedad se
mostrará su clave en lugar de generar una excepción. Ahora se mostrará la página a la que se
estaba accediendo en lugar de redirigirse a la página de error.
<property name="useCodeAsDefaultMessage" value="true" />
Ejemplo de traza de error:
org.springframework.web.servlet.tags.MessageTag ~~ ERROR
~~ No message found under code 'usuario' for locale 'zh'.
~~ javax.servlet.jsp.JspTagException: No message found
under code 'usuario' for locale 'zh'.
NOTA: Se deben modificar ambos ficheros ya que en caso de que no encontrarse un literal pedido
desde el WAR se accede a los recursos del EARClasses.
La versión 2.0.0 de los componentes de RUP gestiona los literales de la misma manera que la parte servidora.
En caso de existir algún problema en la carga de los ficheros de recursos (i18n), los componentes y la
aplicación seguirán funcionando correctamente pero en pantalla se mostrará como literal la clave con la que
se accede a los properties.
Los componentes de RUP acceden a las variables definidas en el fichero base-includes.jsp (propio de la
aplicación) para configurar las propiedades relativas a la gestión del idioma definidas en el interceptor en el
fichero del WAR (mvc-config.xml). Estas variables se comentan en el apartado 3.1 del presente documento.

Más contenido relacionado

La actualidad más candente

UDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonUDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonAnder Martinez
 
UDA-Componentes RUP. Feedback
UDA-Componentes RUP. FeedbackUDA-Componentes RUP. Feedback
UDA-Componentes RUP. FeedbackAnder Martinez
 
UDA-Componentes RUP. Tabla Avanzada
UDA-Componentes RUP. Tabla AvanzadaUDA-Componentes RUP. Tabla Avanzada
UDA-Componentes RUP. Tabla AvanzadaAnder Martinez
 
UDA-Componentes RUP. Validación
UDA-Componentes RUP. ValidaciónUDA-Componentes RUP. Validación
UDA-Componentes RUP. ValidaciónAnder Martinez
 
UDA-Componentes RUP. Menú
UDA-Componentes RUP. MenúUDA-Componentes RUP. Menú
UDA-Componentes RUP. MenúAnder Martinez
 
UDA-Componentes RUP. Tabla.v2.4.6
UDA-Componentes RUP. Tabla.v2.4.6UDA-Componentes RUP. Tabla.v2.4.6
UDA-Componentes RUP. Tabla.v2.4.6Ander Martinez
 
UDA-Componentes RUP. Reporting
UDA-Componentes RUP. ReportingUDA-Componentes RUP. Reporting
UDA-Componentes RUP. ReportingAnder Martinez
 
Republica bolivariana de_venezuela
Republica bolivariana de_venezuelaRepublica bolivariana de_venezuela
Republica bolivariana de_venezuelaGabrielSaracheHernan
 
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)Ander Martinez
 
UDA-Plugin UDA. Guia de uso del plugin.
UDA-Plugin UDA. Guia de uso del plugin.UDA-Plugin UDA. Guia de uso del plugin.
UDA-Plugin UDA. Guia de uso del plugin.Ander Martinez
 
UDA-Componentes RUP. Menú contextual
UDA-Componentes RUP. Menú contextualUDA-Componentes RUP. Menú contextual
UDA-Componentes RUP. Menú contextualAnder Martinez
 
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)Ander Martinez
 
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)Ander Martinez
 
trabajo de pablo gonzalez
trabajo de pablo gonzaleztrabajo de pablo gonzalez
trabajo de pablo gonzalezisrael
 
UDA-Componentes RUP. Upload
UDA-Componentes RUP. UploadUDA-Componentes RUP. Upload
UDA-Componentes RUP. UploadAnder Martinez
 
Elementos de eclipse
Elementos de eclipseElementos de eclipse
Elementos de eclipsePVarely24
 
UDA-Instalación PC local_wls11_proveedores
UDA-Instalación PC local_wls11_proveedoresUDA-Instalación PC local_wls11_proveedores
UDA-Instalación PC local_wls11_proveedoresAnder Martinez
 

La actualidad más candente (20)

UDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonUDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jackson
 
UDA-Componentes RUP. Feedback
UDA-Componentes RUP. FeedbackUDA-Componentes RUP. Feedback
UDA-Componentes RUP. Feedback
 
UDA-Componentes RUP. Tabla Avanzada
UDA-Componentes RUP. Tabla AvanzadaUDA-Componentes RUP. Tabla Avanzada
UDA-Componentes RUP. Tabla Avanzada
 
UDA-Componentes RUP. Validación
UDA-Componentes RUP. ValidaciónUDA-Componentes RUP. Validación
UDA-Componentes RUP. Validación
 
Curso Básico de JDBC
Curso Básico de JDBCCurso Básico de JDBC
Curso Básico de JDBC
 
UDA-Componentes RUP. Menú
UDA-Componentes RUP. MenúUDA-Componentes RUP. Menú
UDA-Componentes RUP. Menú
 
Webutil
WebutilWebutil
Webutil
 
UDA-Componentes RUP. Tabla.v2.4.6
UDA-Componentes RUP. Tabla.v2.4.6UDA-Componentes RUP. Tabla.v2.4.6
UDA-Componentes RUP. Tabla.v2.4.6
 
UDA-Componentes RUP. Reporting
UDA-Componentes RUP. ReportingUDA-Componentes RUP. Reporting
UDA-Componentes RUP. Reporting
 
Republica bolivariana de_venezuela
Republica bolivariana de_venezuelaRepublica bolivariana de_venezuela
Republica bolivariana de_venezuela
 
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
 
UDA-Plugin UDA. Guia de uso del plugin.
UDA-Plugin UDA. Guia de uso del plugin.UDA-Plugin UDA. Guia de uso del plugin.
UDA-Plugin UDA. Guia de uso del plugin.
 
UDA-Componentes RUP. Menú contextual
UDA-Componentes RUP. Menú contextualUDA-Componentes RUP. Menú contextual
UDA-Componentes RUP. Menú contextual
 
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
 
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
 
trabajo de pablo gonzalez
trabajo de pablo gonzaleztrabajo de pablo gonzalez
trabajo de pablo gonzalez
 
UDA-Componentes RUP. Upload
UDA-Componentes RUP. UploadUDA-Componentes RUP. Upload
UDA-Componentes RUP. Upload
 
Elementos de eclipse
Elementos de eclipseElementos de eclipse
Elementos de eclipse
 
Herramientas de Desarrollo de Sistemas
Herramientas de Desarrollo de SistemasHerramientas de Desarrollo de Sistemas
Herramientas de Desarrollo de Sistemas
 
UDA-Instalación PC local_wls11_proveedores
UDA-Instalación PC local_wls11_proveedoresUDA-Instalación PC local_wls11_proveedores
UDA-Instalación PC local_wls11_proveedores
 

Similar a UDA-Anexo gestión idiomática

UDA-Componentes RUP. Idioma
UDA-Componentes RUP. IdiomaUDA-Componentes RUP. Idioma
UDA-Componentes RUP. IdiomaAnder Martinez
 
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)Ander Martinez
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Edgar Dueñas
 
UDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasUDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasAnder Martinez
 
Ef4ktur manual tecnico
Ef4ktur manual tecnicoEf4ktur manual tecnico
Ef4ktur manual tecnicoJuaniSin
 
Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-androidNilson Gongora
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3ERWIN AGUILAR
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3Leo31146695
 
Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-androidCarlitos Sosa
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...JaenFrankcezco
 
56874982 curso-de-delphi-7
56874982 curso-de-delphi-756874982 curso-de-delphi-7
56874982 curso-de-delphi-7Ismael Batista
 
09. manual gestion de tablet primaria y acceso al hp classroom manager
09. manual gestion de tablet primaria y acceso al hp classroom manager09. manual gestion de tablet primaria y acceso al hp classroom manager
09. manual gestion de tablet primaria y acceso al hp classroom managerKarito Lizeth Benites Socola
 
Windows 7 Oportunidades De Desarrollo para ISV
Windows 7 Oportunidades De Desarrollo para ISVWindows 7 Oportunidades De Desarrollo para ISV
Windows 7 Oportunidades De Desarrollo para ISVMicrosoft
 

Similar a UDA-Anexo gestión idiomática (20)

UDA-Componentes RUP. Idioma
UDA-Componentes RUP. IdiomaUDA-Componentes RUP. Idioma
UDA-Componentes RUP. Idioma
 
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)
 
Capitulo 5
Capitulo 5Capitulo 5
Capitulo 5
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
UDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasUDA-Componentes RUP. Migas
UDA-Componentes RUP. Migas
 
Ef4ktur manual tecnico
Ef4ktur manual tecnicoEf4ktur manual tecnico
Ef4ktur manual tecnico
 
Wpf
WpfWpf
Wpf
 
Wp ff inal
Wp ff inalWp ff inal
Wp ff inal
 
Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-android
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
 
Guía Android
Guía AndroidGuía Android
Guía Android
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
 
Mdw guia-android
Mdw guia-androidMdw guia-android
Mdw guia-android
 
Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-android
 
Modulo 01 tipos de páginas web
Modulo 01   tipos de páginas webModulo 01   tipos de páginas web
Modulo 01 tipos de páginas web
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
 
56874982 curso-de-delphi-7
56874982 curso-de-delphi-756874982 curso-de-delphi-7
56874982 curso-de-delphi-7
 
09. manual gestion de tablet primaria y acceso al hp classroom manager
09. manual gestion de tablet primaria y acceso al hp classroom manager09. manual gestion de tablet primaria y acceso al hp classroom manager
09. manual gestion de tablet primaria y acceso al hp classroom manager
 
Introducción JEE
Introducción JEEIntroducción JEE
Introducción JEE
 
Windows 7 Oportunidades De Desarrollo para ISV
Windows 7 Oportunidades De Desarrollo para ISVWindows 7 Oportunidades De Desarrollo para ISV
Windows 7 Oportunidades De Desarrollo para ISV
 

Más de Ander Martinez

Arinbide Adaptativo. Visión del producto.v1.0
Arinbide Adaptativo. Visión del producto.v1.0Arinbide Adaptativo. Visión del producto.v1.0
Arinbide Adaptativo. Visión del producto.v1.0Ander Martinez
 
Arinbide Adaptativo. Retrospectiva.v1.0
Arinbide Adaptativo. Retrospectiva.v1.0Arinbide Adaptativo. Retrospectiva.v1.0
Arinbide Adaptativo. Retrospectiva.v1.0Ander Martinez
 
Arinbide Adaptativo. Plan de entregas.v1.0
Arinbide Adaptativo. Plan de entregas.v1.0Arinbide Adaptativo. Plan de entregas.v1.0
Arinbide Adaptativo. Plan de entregas.v1.0Ander Martinez
 
Arinbide Adaptativo. Pila de sprint.v1.0
Arinbide Adaptativo. Pila de sprint.v1.0Arinbide Adaptativo. Pila de sprint.v1.0
Arinbide Adaptativo. Pila de sprint.v1.0Ander Martinez
 
Arinbide Adaptativo. Pila de producto.v1.0
Arinbide Adaptativo. Pila de producto.v1.0Arinbide Adaptativo. Pila de producto.v1.0
Arinbide Adaptativo. Pila de producto.v1.0Ander Martinez
 
Arinbide Adaptativo. Pila de impedimentos.v1.1
Arinbide Adaptativo. Pila de impedimentos.v1.1Arinbide Adaptativo. Pila de impedimentos.v1.1
Arinbide Adaptativo. Pila de impedimentos.v1.1Ander Martinez
 
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0Ander Martinez
 
Arinbide Adaptativo. Monitorización.v1.0
Arinbide Adaptativo. Monitorización.v1.0Arinbide Adaptativo. Monitorización.v1.0
Arinbide Adaptativo. Monitorización.v1.0Ander Martinez
 
Arinbide Adaptativo. Manual de usuario.v1.0
Arinbide Adaptativo. Manual de usuario.v1.0Arinbide Adaptativo. Manual de usuario.v1.0
Arinbide Adaptativo. Manual de usuario.v1.0Ander Martinez
 
Arinbide Adaptativo. Diseño técnico.v1.0
Arinbide Adaptativo. Diseño técnico.v1.0Arinbide Adaptativo. Diseño técnico.v1.0
Arinbide Adaptativo. Diseño técnico.v1.0Ander Martinez
 
Arinbide Adaptativo. Defectos y errores .v1.0
Arinbide Adaptativo. Defectos y errores .v1.0Arinbide Adaptativo. Defectos y errores .v1.0
Arinbide Adaptativo. Defectos y errores .v1.0Ander Martinez
 
Arinbide Adaptativo. Acta de reunión.v1.1
Arinbide Adaptativo. Acta de reunión.v1.1Arinbide Adaptativo. Acta de reunión.v1.1
Arinbide Adaptativo. Acta de reunión.v1.1Ander Martinez
 
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0Ander Martinez
 
Arinbide adaptativo.v1.0
Arinbide adaptativo.v1.0Arinbide adaptativo.v1.0
Arinbide adaptativo.v1.0Ander Martinez
 
UDA-Componentes RUP. Pestañas
UDA-Componentes RUP. PestañasUDA-Componentes RUP. Pestañas
UDA-Componentes RUP. PestañasAnder Martinez
 
UDA-Componentes RUP. Botonera
UDA-Componentes RUP. BotoneraUDA-Componentes RUP. Botonera
UDA-Componentes RUP. BotoneraAnder Martinez
 
UDA-Componentes RUP. Autocomplete
UDA-Componentes RUP. AutocompleteUDA-Componentes RUP. Autocomplete
UDA-Componentes RUP. AutocompleteAnder Martinez
 
UDA-Componentes RUP. Accordion
UDA-Componentes RUP. AccordionUDA-Componentes RUP. Accordion
UDA-Componentes RUP. AccordionAnder Martinez
 
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)Ander Martinez
 

Más de Ander Martinez (20)

Arinbide Adaptativo. Visión del producto.v1.0
Arinbide Adaptativo. Visión del producto.v1.0Arinbide Adaptativo. Visión del producto.v1.0
Arinbide Adaptativo. Visión del producto.v1.0
 
Arinbide Adaptativo. Retrospectiva.v1.0
Arinbide Adaptativo. Retrospectiva.v1.0Arinbide Adaptativo. Retrospectiva.v1.0
Arinbide Adaptativo. Retrospectiva.v1.0
 
Arinbide Adaptativo. Plan de entregas.v1.0
Arinbide Adaptativo. Plan de entregas.v1.0Arinbide Adaptativo. Plan de entregas.v1.0
Arinbide Adaptativo. Plan de entregas.v1.0
 
Arinbide Adaptativo. Pila de sprint.v1.0
Arinbide Adaptativo. Pila de sprint.v1.0Arinbide Adaptativo. Pila de sprint.v1.0
Arinbide Adaptativo. Pila de sprint.v1.0
 
Arinbide Adaptativo. Pila de producto.v1.0
Arinbide Adaptativo. Pila de producto.v1.0Arinbide Adaptativo. Pila de producto.v1.0
Arinbide Adaptativo. Pila de producto.v1.0
 
Arinbide Adaptativo. Pila de impedimentos.v1.1
Arinbide Adaptativo. Pila de impedimentos.v1.1Arinbide Adaptativo. Pila de impedimentos.v1.1
Arinbide Adaptativo. Pila de impedimentos.v1.1
 
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
 
Arinbide Adaptativo. Monitorización.v1.0
Arinbide Adaptativo. Monitorización.v1.0Arinbide Adaptativo. Monitorización.v1.0
Arinbide Adaptativo. Monitorización.v1.0
 
Arinbide Adaptativo. Manual de usuario.v1.0
Arinbide Adaptativo. Manual de usuario.v1.0Arinbide Adaptativo. Manual de usuario.v1.0
Arinbide Adaptativo. Manual de usuario.v1.0
 
Arinbide Adaptativo. Diseño técnico.v1.0
Arinbide Adaptativo. Diseño técnico.v1.0Arinbide Adaptativo. Diseño técnico.v1.0
Arinbide Adaptativo. Diseño técnico.v1.0
 
Arinbide Adaptativo. Defectos y errores .v1.0
Arinbide Adaptativo. Defectos y errores .v1.0Arinbide Adaptativo. Defectos y errores .v1.0
Arinbide Adaptativo. Defectos y errores .v1.0
 
Arinbide Adaptativo. Acta de reunión.v1.1
Arinbide Adaptativo. Acta de reunión.v1.1Arinbide Adaptativo. Acta de reunión.v1.1
Arinbide Adaptativo. Acta de reunión.v1.1
 
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
 
Arinbide adaptativo.v1.0
Arinbide adaptativo.v1.0Arinbide adaptativo.v1.0
Arinbide adaptativo.v1.0
 
Arinbide.v3.0
Arinbide.v3.0Arinbide.v3.0
Arinbide.v3.0
 
UDA-Componentes RUP. Pestañas
UDA-Componentes RUP. PestañasUDA-Componentes RUP. Pestañas
UDA-Componentes RUP. Pestañas
 
UDA-Componentes RUP. Botonera
UDA-Componentes RUP. BotoneraUDA-Componentes RUP. Botonera
UDA-Componentes RUP. Botonera
 
UDA-Componentes RUP. Autocomplete
UDA-Componentes RUP. AutocompleteUDA-Componentes RUP. Autocomplete
UDA-Componentes RUP. Autocomplete
 
UDA-Componentes RUP. Accordion
UDA-Componentes RUP. AccordionUDA-Componentes RUP. Accordion
UDA-Componentes RUP. Accordion
 
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
 

Último

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 

Último (15)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 

UDA-Anexo gestión idiomática

  • 1. UDA – Utilidades de desarrollo de aplicaciones by EJIE is licensed under a Creative Commons Reconocimiento- NoComercial-CompartirIgual 3.0 Unported License. UDA - Utilidades de desarrollo de aplicaciones Gestión idiomática Fecha: 09/02/2012 Referencia: EJIE S.A. Mediterráneo, 14 Tel. 945 01 73 00* Fax. 945 01 73 01 01010 Vitoria-Gasteiz Posta-kutxatila / Apartado: 809 01080 Vitoria-Gasteiz www.ejie.es
  • 2. Gestión idiomática ii/14 Control de documentación Título de documento: Gestión de properties e internacionalización (i18n) Histórico de versiones Código: Versión: Fecha: Resumen de cambios: 1.0.0 10/02/2012 Primera versión. 2.0.0 08/08/2012 Gestión layout Cambios producidos desde la última versión Gestión layout Control de difusión Responsable: Ander Martínez Aprobado por: Firma: Fecha: Distribución: Referencias de archivo Autor: Nombre archivo: Localización:
  • 3. Gestión idiomática iii/14 Contenido Capítulo/sección Página 1 Introducción 1 2 Gestión de idioma (antigua) 2 2.1 CookieLocaleResolver 2 2.2 LocaleChangeInterceptor 2 2.3 Problemas detectados 2 3 Gestión de idioma 4 3.1 Servidor 4 3.2 Cliente 6 4 Manual de migración 7 5 Nuevas funcionalidades 10
  • 4. Gestión idiomática 1/14 1 Introducción El presente documento pretende explicar la manera en la que se gestionaba el idioma de la aplicación en UDA, que problemas se han detectado y la nueva gestión, haciendo hincapié en las mejoras conseguidas con el cambio. Las aplicaciones desarrolladas con UDA gestionan el idioma a través de una cookie. Además dichas aplicaciones pueden ser multiidioma (i18n) por lo que existe la opción de cambiar el idioma en el que se muesta la aplicación, bien sea mediante una URL directa o a través del componente rup.language. A lo largo del documento se explicarán los flujos definidos (servidor y cliente) a la hora de determinar el idioma utilizando los siguientes elementos: Recepción del parámetro de cambio de idioma Cookie de idioma Idiomas disponibles en la aplicación Idioma por defecto de la aplicación
  • 5. Gestión idiomática 2/14 2 Gestión de idioma (antigua) El presente capítulo pretende explicar la manera en la que se gestionaba el idioma en UDA antes del cambio a la nueva versión. 2.1 CookieLocaleResolver UDA utiliza una cookie para determinar el idioma de la aplicación. Para ello emplea la clase CookieLocaleResolver de Spring declarándola de la siguiente manera en el fichero mvc-config.xml del WAR: <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> <property name="cookieName" value="language" /> </bean> Una vez se acceda a la aplicación se creará una cookie de sesión (de nombre ‘language’) que contendrá el idioma en el que se visualiza la aplicación (ej: es, eu, en, fr). 2.2 LocaleChangeInterceptor UDA se basa en la clase de Spring LocaleChangeInterceptor para el cambio de idioma. Dicha clase se configura a nivel de WAR en el fichero mvc-config.xml de la siguiente manera: <mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> </mvc:interceptors> Dicha clase se declara como interceptora por lo que cada vez que una petición (a la aplicación) envié el el parámetro declarado en el bean (si no se declara ninguno se usa por defecto ‘locale’), entrará en funcionamiento dicha clase, realizando la gestión de idioma. Un ejemplo de petición de cambio de idioma podría ser la siguiente: http://desarrollo.jakina.ejiedes.net:7001/x21aPilotoPatronesWar/?locale=eu 2.3 Problemas detectados A continuación se detallan algunos casos detectados en los que pueden generarse problemas debidos a esta configuración: Si se realiza una petición de cambio de idioma a uno que la aplicación no soporta (no se han definido sus ficheros idiomáticos) http://desarrollo.jakina.ejiedes.net:7001/x21aPilotoPatronesWar/?locale=zh o La aplicación falla al no encontrarse el fichero de literales (error en la JSP) o Al no detectarse los literales se toma por defecto la Locale del servidor (no se sabe en qué idioma está configurado) y se carga dicho fichero. o Los componentes de RUP al no encontrar los ficheros de literales fallan y no se muestran en pantalla (error de JavaScript).
  • 6. Gestión idiomática 3/14 La interrelación entre cambio de idioma, los idiomas disponibles en la aplicación y el idioma por defecto no existe. Se realiza petición de cambio de idioma a chino (zh) pero no se comprueba si es un idioma disponible en la aplicación y en en función de si es o no establecer dicho idioma o el de por defecto. Carga de la aplicación en el idioma en el que está configurado el servidor al no encontrarse el idioma por defecto. …
  • 7. Gestión idiomática 4/14 3 Gestión de idioma A partir de la versión 2.0.0 de UDA los fallos detectados y comentados en el capítulo anterior han sido subsanados. Se ha mejorado y simplificado la manera de gestionar el idioma, añadiendo ciertas funcionalidades extra como puede ser el que en caso de no encontrar el literal a traducir se muestre la clave en lugar de producir un error. 3.1 Servidor La nueva gestión de idioma (en la parte servidora) en UDA se realiza a través de la clase MvcInterceptor que se incluye en x38. Esta clase viene a sustituir a la clase LocaleChangeInterceptor (nativa de Spring) introduciendo más funcionalidad. Al igual que en la versión anterior, se sigue empleando una cookie para mantener el idioma seleccionado durante la sesión del usuario. Para ello se hace uso de la clase CookieLocaleResolver de Spring. La configuración de ambas clases se realiza a nivel de WAR en el fichero mvc-config.xml de la siguiente manera: <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> <property name="cookieName" value="language" /> </bean> <bean id="mvcInterceptor" class="com.ejie.x38.control.MvcInterceptor" > <!-- <property name="paramName" value="locale" /> --> <property name="defaultLanguage" value="es" /> <property name="defaultLayout" value="horizontal" /> <property name="availableLangs" value="es,eu,en,fr" /> <!-- <property name="portalCookie" value="r01euskadiCookie" /> --> </bean> <mvc:interceptors> <ref bean="mvcInterceptor"/> </mvc:interceptors> Los valores que recibe como propiedades son los siguientes: paramName (opcional): Determina el nombre del parámetro empleado en las peticiones para el cambio de idioma. Por defecto es ‘locale’ defaultLanguage: Idioma por defecto de la aplicación defaultLayout: Layout por defecto de la aplicación availableLangs: Idiomas permitidos por la aplicación (separados por comas) portalCookie: Nombre de la cookie de idioma para aplicaciones integradas en portal. A continuación se muestra mediante un diagrama de flujo la gestión que realiza MvcInterceptor: locale se refiere al parámetro de cambio de idioma que se envía en la petición http://desarrollo.jakina.ejiedes.net:7001/x21aPilotoPatronesWar/?locale=eu
  • 8. Gestión idiomática 5/14 language_cookie se refiere a la cookie de UDA para la gestión de idioma (configurada con el nombre language en mvc-config.xml) true true true false INICIO (petición contra la aplicación) portalCookie != null idioma = cookie del portal Locale != null && locale in availableLangs language_cookie != null && language_cookie in availableLangs false idioma = cookie de idioma false idioma = defaultLanguage idioma = locale
  • 9. Gestión idiomática 6/14 3.2 Cliente Junto con los cambios en la parte servidora de cara a mejorar el sistema de gestión de idioma, se han realizado ciertos cambios en la parte cliente (componentes de RUP) manteniendo la compatibilidad hacia atrás. La nueva gestión de idioma en RUP se realiza a través del fichero rup.base-2.0.0.js que determina el idioma a emplear en los componentes RUP mediante el diagrama que veremos a continuación. language_cookie se refiere a la cookie de UDA para la gestión de idioma (configurada con el nombre language en mvc-config.xml) En caso de que se llegue al proceso “ERROR” se mostrará un mensaje por pantalla (alert) indicando la. No se realizará la petición de los ficheros idiomáticos ya que al no estar el idioma bien configurado provocará un error. A pesar de ello los componentes de RUP no fallarán aunque los literales de los mismos no se traducirán y se mostrará la clave utilizada para su resolución. false false INICIO (carga de rup.base.js) language_cookie != null language_cookie in availableLangs true idioma =cookie de idioma true ERROR
  • 10. Gestión idiomática 7/14 4 Manual de migración El capítulo que nos ocupa pretende recopilar los cambios a realizar en una aplicación para utilizar la nueva gestión de idioma. A continuación se detalla proyecto a proyecto los cambios necesarios (en el siguiente capítulo se detallará las mejoras aportadas con dichos cambios): <xxxConfig> o xxx.properties : Contiene variables para la gestión del idioma y del layout que ya no se utilizan ya que se declaran a nivel de WAR en su mvc-config.xml (podrían eliminarse). x21aPilotoPatronesWar.default.language=es x21aPilotoPatronesWar.default.layout=horizontal <xxxEAR> o Sustituir la librería de x38 por la nueva versión x38ShLibClasses-2.0.0.jar <xxxEARClasses> o Modificar en el fichero service-config.xml el bean appMessageSource añadiendo las líneas destacadas. <bean id="appMessageSource" class="org.springframework.context.support.ReloadableResource BundleMessageSource"> <property name="basename" value="x21a.i18n" /> <property name="defaultEncoding" value="UTF-8" /> <property name="useCodeAsDefaultMessage" value="true" /> <property name="fallbackToSystemLocale" value="false" /> </bean> <xxxNombreWAR> o Modificar en el fichero mvc-config.xml el bean messageSource añadiendo las líneas destacadas. <bean id="messageSource" class="org.springframework.context.support.ReloadableResource BundleMessageSource"> <property name="parentMessageSource" ref="appMessageSource" /> <property name="basename" value="/WEB- INF/resources/x21aMantenimientos.i18n" /> <property name="defaultEncoding" value="UTF-8" /> <property name="useCodeAsDefaultMessage" value="true" /> <property name="fallbackToSystemLocale" value="false" /> </bean> o Modificar en el fichero mvc-config.xml para sustituir el antiguo interceptor por el nuevo. Teniendo en cuenta que ahora las propiedades del fichero xxx.properties para la gestión de idioma por defecto y layout se configuran mediante propiedades del interceptor. [Viejo] <!-- Configures Handler Interceptors --> <mvc:interceptors> <!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=en -->
  • 11. Gestión idiomática 8/14 <bean class="org.springframework.web.servlet.i18n.LocaleCh angeInterceptor" /> </mvc:interceptors> <!-- Saves a locale change using a cookie --> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleRe solver"> <property name="cookieName"> <value>language</value> </property> </bean> [Nuevo] <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleRe solver"> <property name="cookieName" value="language" /> </bean> <bean id="mvcInterceptor" class="com.ejie.x38.control.MvcInterceptor"> <!-- <property name="paramName" value="locale" /> --> <property name="defaultLanguage" value="es" /> <property name="defaultLayout" value="horizontal" /> <property name="availableLangs" value="es,eu,en,fr" /> <!-- <property name="portalCookie" value="r01euskadiCookie" /> --> </bean> <mvc:interceptors> <ref bean="mvcInterceptor"/> </mvc:interceptors> o Modificar en el fichero mvc-config.xml para añadir las nuevas clases de resolución de vista incluídas en x38. [Viejo] <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewRe solver"> <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesVi ew" /> </bean> [Nuevo] <bean id="viewResolver" class="com.ejie.x38.control.view.UdaViewResolver"> <property name="viewClass" value="com.ejie.x38.control.view.UdaTilesView"/> <property name="exposedContextBeanNames" > <list> <value>localeResolver</value> <value>mvcInterceptor</value> </list>
  • 12. Gestión idiomática 9/14 </property> </bean> o Modificar en el fichero base-includes.jsp para cambiar las variables utilizadas en la configuración del idioma para RUP: [Viejo] <script type="text/javascript"> APP_RESOURCES = 'x21a', CTX_PATH = '<%= request.getContextPath()%>/', RUP = '${staticsUrl}/rup', STATICS = '${staticsUrl}', DEFAULT_LANGUAGE = "${defaultLanguage}", LAYOUT = "${defaultLayout}", WAR_NAME = "x21aPilotoPatrones", AVAILABLE_LANGS = "es, eu, en, fr"; </script> [Nuevo] <script type="text/javascript"> APP_RESOURCES = 'x21a', CTX_PATH = '<%= request.getContextPath()%>/', STATICS = '${staticsUrl}', RUP = '${staticsUrl}/rup', WAR_NAME = "x21aPilotoPatrones", //model LAYOUT = "${empty defaultLayout ? mvcInterceptor.defaultLayout : defaultLayout}", //mvc-config.xml LOCALE_COOKIE_NAME = "${localeResolver.cookieName}", LOCALE_PARAM_NAME = "${mvcInterceptor.paramName}", AVAILABLE_LANGS = "${mvcInterceptor.availableLangs}", </script> DEFAULT_LANGUAGE (deprecated): Ahora se carga desde el mvc-config.xml LOCALE_COOKIE_NAME: Nombre de la cookie (definida en mvc-config.xml) LOCALE_PARAM_NAME: Nombre del parámetro de cambio de idioma (definida en mvc-config.xml) AVAILABLE_LANGS: Posibles lenguajes de la aplicación Nombre (definidos en mvc- config.xml) <xxxStatics> o Modificar en el fichero _layoutLoader.js (existe uno por cada WAR) para cambiar la invocación del componente rup.language [en caso de que se utilice] utilizando la variable definida. [Viejo] $("#x21aPilotoPatronesWar_language").rup_language({languages: ["es", "eu", "en", "fr"]}); [Nuevo] $("#x21aMantenimientosWar_language").rup_language({languages: $.rup.AVAILABLE_LANGS_ARRAY});
  • 13. Gestión idiomática 10/14 5 Nuevas funcionalidades La nueva gestión idiomática de UDA, además de resolver los problemas indicados aportar robustez y nuevas funcionalidades que se comentan a continuación: Inclusión de la clase ‘MvcInterceptor ‘ (x38) en el mvc-config.xml o Centralizar la configuración del layout, idioma por defecto e idiomas disponibles en la aplicación a nivel de WAR evitando la declaración de dichas variables en el properties de aplicación (dependientes del entorno). o Facilitar el acceso a dichas variables mediante EL (${…}) desde la parte cliente (JavaScript). o Evitar errores ya que en caso de estar mal configurada alguna de las propiedades (nombre de la propiedad incorrecta o no declarada) se produce una excepción, imposibilitando el despliegue avisando en el fichero de incidencias la causa del problema (detalla la propiedad(es) que ha(n) fallado): Caused By: java.lang.IllegalStateException: No se ha definido correctamente el bean 'MvcInterceptor' en el fichero mvc- config.xml del proyecto <x21aPilotoPatronesWar>. Revisar propiedad(es):[defaultLanguage] o Simplificar la codificación de los controladores evitando código duplicado en todos ellos. Los métodos encargados de devolver una vista (acceder a una página) ya no requieren de dejar las variables de idioma y layout por defecto en el modelo (en caso de necesidad se permite sobrescribir el layout por defecto incluyéndolo en el modelo: model.addAttribute("layout", "mixto"); [Viejo] //Autocomplete @RequestMapping(value = "autocomplete", method = RequestMethod.GET) public ModelAndView getAutocomplete(Model model) { model.addAttribute("defaultLanguage", appConfiguration.get("x21aPilotoPatronesWar.default.language")); model.addAttribute("defaultLayout", appConfiguration.get("x21aPilotoPatronesWar.default.layout")); return new ModelAndView("autocomplete", "model", model); } [Nuevo] @RequestMapping(value = "autocomplete", method = RequestMethod.GET) public String getAutocomplete(Model model) { return "autocomplete"; } Cambio de clases para la resolución de las vistas (UdaViewResolver y UdaTiesView) en el mvc- config.xml o Acceso mediante EL (${…}) a los beans cargados en el contexto de Spring requeridos por RUP (localeResolver y localeInterceptor). Desde el fichero base-includes.jsp se podrá acceder a las variables AVAILABLE_LANGS, LOCALE_COOKIE_NAME y LOCALE_PARAM_NAME que gestiona el interceptor (automáticamente) y necesarias para los componentes de RUP. Por compatibilidad hacia atrás en caso de no declararse se tomarán valores por defecto (cookie=’language’ y param=’locale’).
  • 14. Gestión idiomática 11/14 <bean id="viewResolver" class="com.ejie.x38.view.UdaViewResolver"> <property name="viewClass" value="com.ejie.x38.view.UdaTilesView"/> <property name="exposeContextBeansAsAttributes" value="true"/> </bean> Mediante la propiedad exposeContextBeansAsAttributes se exponen todos los beans del contexto. Para acceder bastará con indicar el nombre del bean y la propiedad deseada: ${localeResolver.cookieName} En caso de querer exponer solo algunos de los beans existe la propiedad exposedContextBeanNames. <property name="exposedContextBeanNames"> <list> <value>beanA</value> <value>beanB</value> </list> </property> Cambio en la declaración de appMessageSource (EARClasses – service-config.xml) y messageSource (WAR – mvc-config.xml). o Evitar el uso de la Locale del servidor de aplicaciones en caso de no encontrar el fichero de recursos (i18n). <property name="fallbackToSystemLocale" value="false" /> o Evitar errores en el acceso a la aplicación ya que en caso de no encontrar una propiedad se mostrará su clave en lugar de generar una excepción. Ahora se mostrará la página a la que se estaba accediendo en lugar de redirigirse a la página de error. <property name="useCodeAsDefaultMessage" value="true" /> Ejemplo de traza de error: org.springframework.web.servlet.tags.MessageTag ~~ ERROR ~~ No message found under code 'usuario' for locale 'zh'. ~~ javax.servlet.jsp.JspTagException: No message found under code 'usuario' for locale 'zh'. NOTA: Se deben modificar ambos ficheros ya que en caso de que no encontrarse un literal pedido desde el WAR se accede a los recursos del EARClasses. La versión 2.0.0 de los componentes de RUP gestiona los literales de la misma manera que la parte servidora. En caso de existir algún problema en la carga de los ficheros de recursos (i18n), los componentes y la aplicación seguirán funcionando correctamente pero en pantalla se mostrará como literal la clave con la que se accede a los properties. Los componentes de RUP acceden a las variables definidas en el fichero base-includes.jsp (propio de la aplicación) para configurar las propiedades relativas a la gestión del idioma definidas en el interceptor en el fichero del WAR (mvc-config.xml). Estas variables se comentan en el apartado 3.1 del presente documento.