![]() |
|
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 |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
||||
|
||||
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 |
|
#2
|
||||
|
||||
Cita:
![]() No he entendido nada:
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 |
#3
|
||||
|
||||
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? |
#4
|
||||
|
||||
¿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 |
#5
|
||||
|
||||
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. |
Gracias de parte de: | ||
#6
|
||||
|
||||
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); 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). |
#7
|
||||
|
||||
Cita:
esto me funciona ctx.getAssets().open("R.string.InitializeDB"), "UTF-8")); esto no me funciona Cita:
|
#8
|
||||
|
||||
Cita:
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 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 |
#9
|
||||
|
||||
Muchisimas gracias a todos, voy a probar y comento.
|
#10
|
||||
|
||||
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(); } } 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; } Código:
<string name="InitializeDB">InitializeDB-es.txt</string> |
#11
|
||||
|
||||
Cita:
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")); |
#12
|
||||
|
||||
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? |
#13
|
||||
|
||||
#14
|
||||
|
||||
Marcado como Solucionado queda
![]() |
Gracias de parte de: | ||
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 03:14:54 (GMT +2)
HTCMania: líderes desde el 2007