2010-08-01 11 views
8

Estoy probando las características i18n de Java y tengo un problema, no puedo cargar el archivo de idioma cuando no está en la raíz de la clase. En este momento, mis archivos están en el directorio /lang.java.util.MissingResourceException: No se puede encontrar el paquete para el nombre base

Mirado varias respuestas aquí en SO, poniéndola en un subdirectorio classes y cargarlo como lang.Messages, utiliza la ubicación completa de enrutamiento /Test/lang/Message (prueba es el nombre del proyecto), utilizando sólo /lang/Message y todavía me estoy haciendo el:

java.util.MissingResourceException: Can't find bundle for base name

error.

¿Algo más que probar?

Mi estructura de archivos es:

Test/lang/Messages_es.properties

Test/src/test/Main.java

import java.util.Locale; 
import java.util.ResourceBundle; 
import javax.swing.JFrame; 

public class Main { 

    public static void main(String[] args) { 

    Locale currentLocale; 
    ResourceBundle messages; 

    currentLocale = new Locale("es"); 

    messages = ResourceBundle.getBundle("Messages", currentLocale); 
    System.out.println(messages.getString("Messagesgreetings")); 
    System.out.println(messages.getString("Messagesinquiry")); 
    System.out.println(messages.getString("Messagesfarewell")); 
    } 
} 

Respuesta

8

Usted necesita tener su nombre de localización en las propiedades de nombre de archivo.

cambiar el nombre del archivo de propiedades a Messages_es.properties

Puesto que no se ha declarado ningún paquete, tanto el archivo de clase compilado y el archivo de propiedades pueden estar en el mismo directorio raíz.

EDITAR en respuesta a los comentarios:

Digamos que tiene esta estructura del proyecto:

test\src\foo\Main.java (foo es el nombre del paquete)

test\bin\foo\Main.class 

test\bin\resources\Messages_es.properties (archivo de propiedades se encuentra en la carpeta resources en su classpath)

Puede ejecutar esto con:

c:\test>java -classpath .\bin foo.Main 

Actualizado código fuente:

package foo; 
import java.util.Locale; 
import java.util.ResourceBundle; 
import javax.swing.JFrame; 

public class Main { 

    public static void main(String[] args) { 

    Locale currentLocale; 
    ResourceBundle messages; 

    currentLocale = new Locale("es"); 

    messages = ResourceBundle.getBundle("resources.Messages", currentLocale); 
    System.out.println(messages.getString("Messagesgreetings")); 
    System.out.println(messages.getString("Messagesinquiry")); 
    System.out.println(messages.getString("Messagesfarewell")); 
    } 
} 

Aquí, como se ve, estamos cargando el archivo de propiedades con los "resources.Messages" nombre

Espero que esto ayude.

+0

Tengo los nombres locales en el nombre del archivo. No quiero tener los dos archivos en el mismo directorio raíz, ese es el problema aquí :( –

+0

Mi camino es como: Prueba/lang/Messages_es.properties Prueba/src/test/Main.java En lugar de ejecutando java-classpath. \ bin foo.Main lo configuro en la configuración del proyecto, sin suerte. –

+0

Copie su carpeta lang en la carpeta de salida de su proyecto o si usa Eclipse copie su carpeta lang en src, se compilará automáticamente en su carpeta de salida y cargará el paquete con el nombre lang.Messages –

Cuestiones relacionadas