2012-02-20 8 views
6

Tengo una aplicación con acceso a Internet y no quiero almacenar muchos archivos string.xml para diferentes idiomas.¿Se pueden descargar los recursos de localización en tiempo de ejecución?

lo que quiero:

  1. aplicación contiene sólo un string.xml con cadenas en inglés.
  2. Cuando el usuario lo inicia, veo la configuración regional del teléfono del usuario y solicito a mi propio servidor el archivo de idioma necesario. (las claves de recursos serán las mismas)
  3. Cuando llega un nuevo archivo de recursos, toda la interfaz debe funcionar con un archivo nuevo.

La pregunta es cómo cambiar el archivo existente o agregar string.xml nuevo en tiempo de ejecución?

Respuesta

2

Es obvio que no se puede cambiar, descargar o eliminar strings.xml en tiempo de ejecución

Si desea almacenar ubicaciones, tendrá que utilizar el almacenamiento de SQLite a las traducciones de las tiendas.

similar:
How to modify strings.xml file at runtime
run time modification of strings.xml

+0

El problema de estas soluciones: no puede hacer referencia a la base de datos desde archivos xml, y no puede usar los métodos estándar 'Context.getString()'. – Jin35

+0

Sí, ese es el lado oscuro de la solución, pero siempre que desee utilizar la solución provista, no hay diferencia, solo que esto está claramente más separado del sistema y es más fácil de implementar. –

+0

¿Y puedo crear, por ejemplo, la carpeta 'values-de' en mis recursos y poner allí un nuevo archivo xml? – Jin35

2

ahora puedo ver única solución:

  1. crear un poco de "proxy de localización" que me va a devolver los recursos necesarios (de string.xml o recurso descargado)
  2. Reemplazar todos getString() y getText() a su propio método getStringFromLocalization
  3. Anular TextView, Button y algunas otras vistas con métodos personalizados one y change there init y setText.
+0

Todo bien, excepto que el método 'setText (String)' es ** final ** por lo que no se puede anular –

0

Anulando el recurso/idioma standered utilizando archivos de recursos que son tiempo cumplido entonces su rendimiento de escarificación sobre la personalización. Hazlo solo si lo necesitas.

Cuestiones relacionadas