r01f.locale
Class I18NService
java.lang.Object
r01f.locale.I18NService
public class I18NService
- extends java.lang.Object
Acceso al servicio de textos localizados I18N
El acceso al servicio se hace mediante una jerarquía de niveles:
Servicio I18NService
|----- Bundle I18NBundle
|------ Mensaje (el texto)
Por lo tanto para obtener un texto hay que:
1.- Obtener el servicio I18NService que representa los Locale de un "bundle", es decir da
acceso a todos los bundle/locale
Para acceder a un I18NService es necesario en nombre del bundle que es un identificador
como myApp.components.myBundle.
Esto forzará a buscar los ficheros del bundle en /myApp/components/myBundle utilizando el
ResourcesLoader que se quiera (ej ClassPathResourcesLoader
para acceder a los ficheros por classpath
2.- Obtener el I18NBundle correspondiente a un Locale especifico
3.- Obtener el mensaje del bundle
En definitiva, el acceso a los mensajes de un bundle se hace a través del objeto I18NService:
myI18nService.forLocale(new Locale("es","ES")).message("msgKey"));
CADENA DE BUNDLES DONDE SE BUSCA UN MENSAJE
-------------------------------------------
I18NService permite especificar una cadena de bundles en los que buscar un mensaje.
Cuando se solicita un mensaje por su clave, se recorren uno detrás de otro cada bundle hasta que se encuentra el mensaje
Ejemplo:
- Si el se especifica la cadena {"myApp.myComponent.myChildBundle","myApp.myComponent.myParentBundle"}
- ... y se pide una clave cualquiera (ej: testKey)
- la clave se busca primero en el bundle "myApp.myComponent.myChildBundle" y si no se encuentra ahi,
se busca en "myApp.myComponent.myParentBundle"
NOTA: Para optimizar el funcionamiento poner los bundles donde es más problable encontrar las claves en PRIMER LUGAR
OBTENCIÓN DE UNA INSTANCIA DEL OBJETO I18NService
---------------------------------------------------------
[OPCION 1]: (preferida)
Utilizar un módulo GUICE para definir objetos I18NService configurados
1.- Crear un Module GUICE con UN PROVIDER PARA CADA BUNDLE anotado con @Provides
y @Named("myBundle") (o bien con una anotación personalizada)
public class TestI18NModule implements Module {
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
_bundleCache
private final java.util.concurrent.ConcurrentMap<java.util.Locale,I18NBundle> _bundleCache
_control
private final I18NResourceBundleControl _control
_bundleChain
private final java.lang.String[] _bundleChain
_missingKeyBehaviour
private I18NBundle.MissingKeyBehaviour _missingKeyBehaviour
_devMode
private boolean _devMode
I18NService
I18NService(ResourcesLoader resLoader,
ResourcesReloadControl resReloadControl,
java.lang.String[] bundleChain,
I18NBundle.MissingKeyBehaviour missingKeyBehaviour)
- Constructor en base al
ResourcesLoader y el control de recarga ResourcesReloadControl
IMPORTANTE!! a este constructor se le llama SOLO desde la factoria I18NServiceFactory
- Parameters:
resLoader - bundleChain - missingKeyBehaviour -
I18NService
I18NService(ResourcesLoaderFactory resLoaderFactory,
ResourcesLoaderDef resLoaderDef,
java.lang.String[] bundleChain,
I18NBundle.MissingKeyBehaviour missingKeyBehaviour)
- Constructor en base a la factoría de
ResourcesLoader y a la definición del mismo (ResourcesLoaderDef)
IMPORTANTE!! a este constructor se le llama SOLO desde la factoria I18NServiceFactory
- Parameters:
resLoaderFactory - factoría del loader de recursosresLoaderDef - definición del ResourcesLoader a utilizarbundleChain - nombre de los bundles de la cadena de búsqueda de mensajesmissingKeyBehaviour - comportamiento en caso de que no se encuentre una clave en los bundles
de la cadena. En caso de no especificarse, se toma MissingKeyBehaviours.THROW_EXCEPTION;
forLocale
public final I18NBundle forLocale(java.util.Locale locale)
toString
public final java.lang.String toString()
- Overrides:
toString in class java.lang.Object
withMissingKeyBehaviour
public I18NService withMissingKeyBehaviour(I18NBundle.MissingKeyBehaviour behaviour)
- Establece el comportamiento si no existe una clave (ej: lanzar una excepcion / devolver null)
- Parameters:
behaviour - el comportamiento
inDevMode
public I18NService inDevMode()
- Pone el bundle en modo debug