Estoy trabajando en una aplicación en la que se requiere que tenga que cambiar. Actualizar los recursos de cadena declarados en mi archivo String.xml de forma inalámbrica sin cargar una nueva versión en las tiendas. (Del servidor) Actualmente, ya está implementado por Localazy y Phrase Android SDK.
El cliente quiere actualizar todo lo declarado en String.xml y para cada local.
Tengo que hacerlo para varios idiomas. Ya he implementado la localización. Pero la aplicación aún requiere cambios dinámicos en los recursos de String,
Como autor de esta tecnología en Localazy , puedo explicarlo bastante bien.
¿Cómo cambiamos strings.xml sobre la marcha? nosotros no
Nuestro complemento de Gradle agrega una biblioteca a su aplicación, realiza un análisis de código de bytes y enruta todas las llamadas de métodos relevantes a través de nuestra biblioteca. La propia biblioteca actúa como un proxy, actualiza su base de datos de cadenas internas desde nuestros servidores y sirve cadenas actualizadas siempre que sea posible. También calcula estadísticas anónimas sobre el uso de cadenas, etc., para optimizar el proceso de traducción en el sitio de Localazy.
Todo esto sucede durante el tiempo de compilación sin tocar nunca el código fuente y los recursos. Es completamente transparente.
Si bien parece una tarea simple, es mucho más complicada ya que es imposible enrutar fácilmente todas las llamadas a métodos. Por ejemplo, LayoutInflater usa un método diferente para obtener cadenas, y lo mismo se aplica a Preferencias, Menús, etc.
También descargamos y fusionamos su archivo strings.xml con las últimas traducciones disponibles en Localazy, ya que el método estándar del sistema siempre es una alternativa razonable. Debemos manejar correctamente los casos extremos, como los alias de idioma ( iw vs. he ), idiomas RTL, etc.
Uno de los mayores desafíos fue admitir correctamente los tipos de compilación, los tipos de productos, las bibliotecas y los módulos de aplicaciones dinámicas. No se trata solo de servir cadenas de la base de datos interna, sino de seleccionar la correcta. Por ejemplo, una cadena con la misma clave de una biblioteca tiene menor prioridad que la de la aplicación. La situación es diferente para los módulos de aplicaciones dinámicas.
Hemos diseñado Localazy para manejar todas estas situaciones desde cero: la biblioteca, cómo almacenamos cadenas en nuestros servidores, etc.
No es una tarea sencilla hacer esto correctamente, así que es mejor usar la solución existente si es posible.
No dude en preguntarme si necesita más ayuda.