2012-07-04 11 views
15

He visto algunas aplicaciones de Google y muestras de código usando etiquetas XLIFF para ajustar las variables. Veo algunas grandes ventajas al hacer esto, especialmente para reemplazar argumentos de formato no descriptivos como %1$s.Mejorando los recursos de cadenas de Android con XLIFF

Desafortunadamente, XLIFF no parece integrarse bien en ADT. Tome el siguiente recurso de cadena, por ejemplo:

<resources 
    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" 
    xmlns:tools="http://schemas.android.com/tools"> 

    <string name="share_with_application"> 
     Share your score of <xliff:g id="score" example="1337">%1$s</xliff:g> 
     with <xliff:g id="application_name" example="Bluetooth">%2$s</xliff:g>! 
    </string> 

</resources> 

Graphical Layout preview

En el ejemplo anterior, la cadena se trunca después de la primera <xliff> etiqueta. También se esperaría que el atributo example a utilizar, lo que resulta en una vista previa que muestra gráfica:

compartir su puntuación de 1337 con Bluetooth!

¿Existe actualmente algún mérito para usar etiquetas XLIFF en los recursos de mis cadenas?

+0

"He visto algunas aplicaciones de Google y el código ejemplos usando etiquetas XLIFF para ajustar variables "- si tiene un ejemplo de algún proyecto de Android, sin contar las aplicaciones AOSP, que usa XLIFF, indíquenoslo. Las aplicaciones AOSP tienen su propio proceso de compilación que podría integrar XLIFF. El uso de XLIFF no está documentado como compatible con Android SDK. – CommonsWare

+0

Gracias por la información. Parece que los ejemplos 'strings.xml' en el directorio SDK solo tienen la declaración de espacio de nombre XLIFF y en realidad no usan las etiquetas. ¿Puedes darnos más información sobre estos procesos de compilación personalizada? ¿Son complementos de Jenkins? –

+0

"¿Puede darnos más información sobre estos procesos de compilación personalizada?" - esas aplicaciones se crean como parte de la compilación completa del firmware (por ejemplo, 'lunch'), pero nunca hice una compilación de firmware completa, y mucho menos analicé todos los detalles de lo que hace. "¿Son complementos de Jenkins?" -- Lo dudo mucho; De todos modos, no necesitas a Jenkins para construir el firmware. – CommonsWare

Respuesta

14

Nos acaba de añadir soporte para esto en Android Studio, para la versión 0.3: https://android-review.googlesource.com/#/c/67724/

+0

¿Esto también está planeado para Eclipse? Además, ¿puede confirmar que el objetivo de la etiqueta 'xliff' es marcar texto no traducible, o hay otros propósitos para él? –

+3

Según los documentos de Android, la etiqueta xliff: g es para marcar texto no traducible: https://developer.android.com/distribute/googleplay/publish/localizing.html#strings – ZoFreX

+1

La URL anterior mencionada por @ZoFreX tiene movido: https://developer.android.com/guide/topics/resources/localization.html#checklist –

1

Ahora que tengo las manos sucias con la creación de AOSP desde la fuente, CommonsWare está en lo cierto: el proceso de compilación es completamente diferente y, de hecho, muchas aplicaciones AOSP contienen etiquetas XLIFF. Es una lástima que esto no se integre con ADT, pero es como es.

6

Para ser claros, el uso de etiquetas XLIFF en recursos de cadena Android está totalmente documentado en

https://developer.android.com/distribute/tools/localization-checklist.html#manage-strings

Estas cadenas funcionan bien incluso en las compilaciones de Eclipse (el soporte está en la herramienta aapt que crea las aplicaciones).

Sin embargo, como se ilustra en la pregunta, las herramientas de diseño gráfico contenidas en el ADT no tienen en cuenta la etiqueta xliff, simplemente truncan la cadena después de la primera subcadena marcada.

Las herramientas gráficas en Android Studio se adaptan bien a tales cadenas, conociendo y haciendo uso del marcado xliff.

De hecho, me parece que el pleno <xliff:g> es bastante detallado en mi código fuente, por lo que ajustar la declaración de espacio de nombre que me permite utilizar simplemente <x:g> así:

<resources xmlns:x="urn:oasis:names:tc:xliff:document:1.2"> 

    <string name="greeting">Hello <x:g id="name">%1$s</x:g>!</string> 

</resources> 
Cuestiones relacionadas