Home Menu

Menu



Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 26/10/15, 08:53:57
Avatar de sonydei
sonydei sonydei no está en línea
Miembro del foro
Mensajes: 75
 
Fecha de registro: may 2011
Mensajes: 75
Modelo de smartphone: Samsung Galaxy Note 2
Tu operador: Simyo
Mencionado: 2 comentarios
Tagged: 0 hilos
Bases datos varios idiomas

Tengo una aplicación tipo preguntas y respuestas básica que se nutre de una base de datos tipo txt.
Para pasarla a varios idiomss creado un string , pero no me funciona. La base de datos la tengo en la carpeta assets.

Que hago mal?


Enviado desde mi GT-N7100 mediante Tapatalk
Responder Con Cita


  #2  
Viejo 26/10/15, 09:16:25
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Cita:
Originalmente Escrito por sonydei Ver Mensaje
Para pasarla a varios idiomss creado un string , pero no me funciona
Cuánto daño ha hecho el rumor de que en este foro cobran por palabras

No he entendido nada:
  • ¿Tienes varios ficheros txt de preguntas/respuestas cada uno en un idioma?
  • ¿O tienes un fichero txt con todos los idiomas dentro?
  • ¿Los guardas con el mismo nombre en assets?
  • ¿El problema es que no puedes leer el fichero? ¿Usas el AssetManager?
  • ¿Qué significa que has creado un String?
  • ¿Qué significa "no me funciona" (da error, excepción, no sale lo que esperabas...)?

P.D: También puedes poner el fichero en /res/raw , que así aprovechas la selección de idiomas de Android (si te interesa, usando /res/raw-es para español p.ej. y así siempre carga el fichero que corresponda al idioma de la app)

Última edición por mocelet Día 26/10/15 a las 09:21:45
Responder Con Cita
  #3  
Viejo 26/10/15, 09:26:17
Avatar de sonydei
sonydei sonydei no está en línea
Miembro del foro
Mensajes: 75
 
Fecha de registro: may 2011
Mensajes: 75
Modelo de smartphone: Samsung Galaxy Note 2
Tu operador: Simyo
Mencionado: 2 comentarios
Tagged: 0 hilos
Vale perdón

Tengo una aplicación solo con una base de datos llamadas quiz.txt, que está en ingles y su correspondiente llamada en play.java.

Bien lo que hecho a sido traducir esa base de datos a varios idiomas, creando quiz-es.txt, quiz-fr.txt y he creado un string, para poder cambiarlo en el play java y no me funciona, porque solo carga el ingles.

¿Cual sería la solución?
Responder Con Cita
  #4  
Viejo 26/10/15, 09:30:40
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
¿Esto te funciona getAssets().open("quiz.txt") pero ésto no getAssets().open("quiz-es.txt")?

EDIT: Si el problema es el parámetro que estás pasando, mira a ver de dónde estás sacando el valor

Última edición por mocelet Día 26/10/15 a las 09:44:00
Responder Con Cita
  #5  
Viejo 26/10/15, 09:31:18
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Es decir, que lo que no te funciona es asignar al String el apropiado "-es", "-fr", etc... ¿no? Si intentas cargar el fichero quiz.txt si te funciona bien. ¿Correcto?

En ese caso los values son tus amigos, crea un fichero de recursos de Strings en cada una de las carpetas values, de tal forma que tendrás esto:

/values/strings.xml
[PHP]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="fichero_quiz">quiz.txt</string>
</resources>
[/PHP]

/values-es/strings.xml
[PHP]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="fichero_quiz">quiz-es.txt</string>
</resources>
[/PHP]

/values-fr/strings.xml
[PHP]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="fichero_quiz">quiz-fr.txt</string>
</resources>
[/PHP]

Y así sucesivamente, de esa forma el sistema elegirá el idioma apropiado. siendo por defecto el inglés para idiomas que no están registrados.
Responder Con Cita
Gracias de parte de:
  #6  
Viejo 26/10/15, 09:50:22
Avatar de Dexafree
Dexafree Dexafree no está en línea
Mr. FAQMan
Mensajes: 8,021
Compra y venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Versión de ROM: Android 4.1.1 Jelly Bean
Versión de Radio: KF1
Tu operador: Movistar
Mencionado: 65 comentarios
Tagged: 2 hilos
La solución de kriogeN me parece la mas elegante y escalable (si el dia de mañana creas quiz-de.txt solo tendrás que crear un nuevo .xml en values-de para que lo detecte, el código se quedará igual).

Dicho esto, y para terminar de complementar las grandes respuestas de mis compañeros, para recuperar el nombre el código sería

Código:
String nombreFichero = getString(R.string.fichero_quiz);
El cual automáticamente cogería el values-XX adecuado.

Asegúrate de tener uno marcado por defecto en values/strings.xml (en caso de que el usuario tenga algun idioma que tu no tienes soportado).
Responder Con Cita
  #7  
Viejo 26/10/15, 09:53:35
Avatar de sonydei
sonydei sonydei no está en línea
Miembro del foro
Mensajes: 75
 
Fecha de registro: may 2011
Mensajes: 75
Modelo de smartphone: Samsung Galaxy Note 2
Tu operador: Simyo
Mencionado: 2 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por mocelet Ver Mensaje
¿Esto te funciona getAssets().open("quiz.txt") pero ésto no getAssets().open("quiz-es.txt")?

EDIT: Si el problema es el parámetro que estás pasando, mira a ver de dónde estás sacando el valor
ctx.getAssets().open("InitializeDB.txt"), "UTF-8"));

esto me funciona

ctx.getAssets().open("R.string.InitializeDB"), "UTF-8"));

esto no me funciona

Cita:
Originalmente Escrito por kriogeN Ver Mensaje
Es decir, que lo que no te funciona es asignar al String el apropiado "-es", "-fr", etc... ¿no? Si intentas cargar el fichero quiz.txt si te funciona bien. ¿Correcto?

En ese caso los values son tus amigos, crea un fichero de recursos de Strings en cada una de las carpetas values, de tal forma que tendrás esto:

/values/strings.xml
[PHP]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="fichero_quiz">quiz.txt</string>
</resources>
[/PHP]

/values-es/strings.xml
[PHP]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="fichero_quiz">quiz-es.txt</string>
</resources>
[/PHP]

/values-fr/strings.xml
[PHP]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="fichero_quiz">quiz-fr.txt</string>
</resources>
[/PHP]

Y así sucesivamente, de esa forma el sistema elegirá el idioma apropiado. siendo por defecto el inglés para idiomas que no están registrados.
y como dice Kriogen esos son los strings que he creado.
Responder Con Cita
  #8  
Viejo 26/10/15, 10:02:23
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Cita:
Originalmente Escrito por sonydei Ver Mensaje
ctx.getAssets().open("InitializeDB.txt"), "UTF-8"));

esto me funciona

ctx.getAssets().open("R.string.InitializeDB"), "UTF-8"));

esto no me funciona

y como dice Kriogen esos son los strings que he creado.
Claro, no existe ningún fichero que se llame R.string.InitializeDB. Tienes que leer la String primero a partir del identificador de recurso con getString(R.string.InitializeDB), es decir:

Código:
ctx.getAssets().open(getString(R.string.InitializeDB)), "UTF-8"));
---

Menciono otra alternativa, que es guardar los quiz en /res/raw localizados y que Android elija el recurso automáticamente, es decir:

Código:
/res/raw/quiz.txt
/res/raw-es/quiz.txt
/res/raw-de/quiz.txt
Y así basta con obtener el recurso de nombre R.id.quiz que Android siempre te dará el que corresponda al idioma de la app y por defecto el de /res/raw automáticamente. Amén de que el IDE avisa si falta el recurso en alguno de los idiomas soportados.

Sin embargo, no usaría esta alternativa... tiene una desventaja gorda: no poder elegir el idioma de las preguntas dentro de la app (siempre lo haría Android en función del idioma del sistema).

Última edición por mocelet Día 26/10/15 a las 10:04:52
Responder Con Cita
  #9  
Viejo 26/10/15, 10:08:58
Avatar de sonydei
sonydei sonydei no está en línea
Miembro del foro
Mensajes: 75
 
Fecha de registro: may 2011
Mensajes: 75
Modelo de smartphone: Samsung Galaxy Note 2
Tu operador: Simyo
Mencionado: 2 comentarios
Tagged: 0 hilos
Muchisimas gracias a todos, voy a probar y comento.
Responder Con Cita
  #10  
Viejo 26/10/15, 13:14:02
Avatar de sonydei
sonydei sonydei no está en línea
Miembro del foro
Mensajes: 75
 
Fecha de registro: may 2011
Mensajes: 75
Modelo de smartphone: Samsung Galaxy Note 2
Tu operador: Simyo
Mencionado: 2 comentarios
Tagged: 0 hilos
Os pongo los dos archivos el que me funciona con una sola base de datos:
Código:
public static void initialize(SQLiteDatabase db, Context ctx) {
		// Initialize DB
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					ctx.getAssets().open("InitializeDB.txt"), "UTF-8"));

			// do reading, usually loop until end of file reading
			String mLine = reader.readLine();
			while (mLine != null) {
				// process line
				db.execSQL(mLine);
				mLine = reader.readLine();
			}

			reader.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
Y el modificado que no funciona con las modificiaciones que me habéis indicado.

Código:
public static void initialize(SQLiteDatabase db, Context ctx) {
		// Initialize DB
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					ctx.getAssets().open(getString("R.string.InitializeDB")), "UTF-8"));

			// do reading, usually loop until end of file reading
			String mLine = reader.readLine();
			while (mLine != null) {
				// process line
				db.execSQL(mLine);
				mLine = reader.readLine();
			}

			reader.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private static String getString(String string) {
		// TODO Auto-generated method stub
		return null;
	}
y este el string por ejemplo el español

Código:
<string name="InitializeDB">InitializeDB-es.txt</string>
¿Donde veis el fallo? Muchas gracias por vuestra ayuda.
Responder Con Cita
  #11  
Viejo 26/10/15, 13:23:28
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Cita:
Originalmente Escrito por sonydei Ver Mensaje
Os pongo los dos archivos el que me funciona con una sola base de datos:
Código:
public static void initialize(SQLiteDatabase db, Context ctx) {
		// Initialize DB
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					ctx.getAssets().open("InitializeDB.txt"), "UTF-8"));

			// do reading, usually loop until end of file reading
			String mLine = reader.readLine();
			while (mLine != null) {
				// process line
				db.execSQL(mLine);
				mLine = reader.readLine();
			}

			reader.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
Y el modificado que no funciona con las modificiaciones que me habéis indicado.

Código:
public static void initialize(SQLiteDatabase db, Context ctx) {
		// Initialize DB
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					ctx.getAssets().open(getString("R.string.InitializeDB")), "UTF-8"));

			// do reading, usually loop until end of file reading
			String mLine = reader.readLine();
			while (mLine != null) {
				// process line
				db.execSQL(mLine);
				mLine = reader.readLine();
			}

			reader.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private static String getString(String string) {
		// TODO Auto-generated method stub
		return null;
	}
y este el string por ejemplo el español

Código:
<string name="InitializeDB">InitializeDB-es.txt</string>
¿Donde veis el fallo? Muchas gracias por vuestra ayuda.
O_O Eso no son las modificaciones que te comenté

Primero que has creado un método getString porque te ha parecido bien y devuelve null, cuando evidentemente me refería al método getString de Android para obtener recursos.

Segundo, sigues sin quitar las comillas a R.string.blablabla...

Escríbelo así para menos dudas:

Código:
ctx.getAssets().open(ctx.getString(R.string.InitializeDB)), "UTF-8"));
Responder Con Cita
  #12  
Viejo 26/10/15, 13:39:17
Avatar de sonydei
sonydei sonydei no está en línea
Miembro del foro
Mensajes: 75
 
Fecha de registro: may 2011
Mensajes: 75
Modelo de smartphone: Samsung Galaxy Note 2
Tu operador: Simyo
Mencionado: 2 comentarios
Tagged: 0 hilos
Gracias por tu ayuda Omelet estoy aprendiendo y creo que ya se donde esta el fallo

InitializeDB cannot be resolved or is not a field

creo que el string está mal puesto, porque si está dentro de la carpeta assets, no le estoy danto el path correcto ¿Es esto?
Responder Con Cita
  #13  
Viejo 07/11/15, 12:39:54
Avatar de sonydei
sonydei sonydei no está en línea
Miembro del foro
Mensajes: 75
 
Fecha de registro: may 2011
Mensajes: 75
Modelo de smartphone: Samsung Galaxy Note 2
Tu operador: Simyo
Mencionado: 2 comentarios
Tagged: 0 hilos
Bueno funcionó, podéis marcarlo como solucionado, era el eclipse que daba un error, empecé de nuevo y como apuntarón @mocelet @Dexafree y @kriogeN, era la solución. Gracias a los tres.
Responder Con Cita
  #14  
Viejo 07/11/15, 13:17:08
Avatar de Dexafree
Dexafree Dexafree no está en línea
Mr. FAQMan
Mensajes: 8,021
Compra y venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Versión de ROM: Android 4.1.1 Jelly Bean
Versión de Radio: KF1
Tu operador: Movistar
Mencionado: 65 comentarios
Tagged: 2 hilos
Marcado como Solucionado queda
Responder Con Cita
Gracias de parte de:
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 03:14:54 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007