Skip to content

Android XML (strings.xml): Guía Completa de Localización Android

Updated: 28 March, 2026

¿Qué Son los Archivos XML de Android (strings.xml)?

Los archivos XML de strings de Android (strings.xml) son el formato estándar de localización para aplicaciones Android. Estos archivos XML almacenan todo el texto visible para el usuario en tu app, permitiendo que Android cargue automáticamente las traducciones apropiadas según la configuración de idioma del dispositivo del usuario.

El sistema de recursos de Android usa una estructura basada en carpetas donde cada idioma tiene su propio directorio values conteniendo recursos de string localizados, haciendo que sea sencillo soportar múltiples idiomas en tu app.

Por Qué AZbox Soporta el Formato XML de Android

En AZbox, entendemos que Android es la plataforma móvil más popular del mundo. Por eso AZbox soporta completamente la importación y exportación de archivos XML de Android, permitiéndote:

  • Importar archivos strings.xml existentes directamente a tu proyecto AZbox
  • Exportar traducciones de vuelta al formato XML de Android para usar en tu app
  • Manejar plurales y arrays con soporte completo de plurals.xml
  • Gestionar traducciones con nuestra potente plataforma en la nube
  • Colaborar con traductores que pueden trabajar sin Android Studio
  • Actualizar over-the-air sin aprobación de Google Play Store

Estructura de Archivos de Recursos Android

Android usa una estructura de carpetas específica para recursos localizados:

app/
└── src/
    └── main/
        └── res/
            ├── values/                    # Por defecto (Inglés)
            │   ├── strings.xml
            │   └── plurals.xml
            ├── values-es/                 # Español
            │   ├── strings.xml
            │   └── plurals.xml
            ├── values-fr/                 # Francés
            │   ├── strings.xml
            │   └── plurals.xml
            ├── values-de/                 # Alemán
            │   ├── strings.xml
            │   └── plurals.xml
            ├── values-pt-rBR/             # Portugués Brasileño
            │   ├── strings.xml
            │   └── plurals.xml
            └── values-zh-rCN/             # Chino Simplificado
                ├── strings.xml
                └── plurals.xml

Convención de Nombres de Carpetas

CarpetaIdioma/Región
valuesPor defecto (fallback)
values-esEspañol
values-frFrancés
values-deAlemán
values-jaJaponés
values-zh-rCNChino (Simplificado, China)
values-zh-rTWChino (Tradicional, Taiwán)
values-pt-rBRPortugués (Brasil)
values-en-rGBInglés (Reino Unido)

Estructura Básica de strings.xml

Un archivo strings.xml típico de Android se ve así:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Nombre de la app y strings básicas -->
    <string name="app_name">Mi App Android</string>
    <string name="welcome_title">Bienvenido</string>
    <string name="welcome_message">¡Bienvenido a nuestra aplicación!</string>
    
    <!-- Botones de acción -->
    <string name="button_save">Guardar</string>
    <string name="button_cancel">Cancelar</string>
    <string name="button_delete">Eliminar</string>
    
    <!-- Mensajes de error -->
    <string name="error_network">Error de red. Por favor, inténtalo de nuevo.</string>
    <string name="error_invalid_email">Por favor, introduce un email válido.</string>
</resources>

Elementos XML

ElementoDescripción
<resources>Elemento raíz que contiene todos los recursos de string
<string>Recurso de string individual
Atributo nameIdentificador único para la string
Comentarios XML <!-- -->Comentarios para traductores (opcional)

Formateo de Strings y Marcadores de Posición

Las strings de Android soportan varias opciones de formateo para contenido dinámico:

Marcadores de Posición Básicos

<resources>
    <!-- Marcador de posición string -->
    <string name="greeting">¡Hola, %1$s!</string>
    
    <!-- Marcador de posición entero -->
    <string name="items_in_cart">Tienes %1$d artículos en tu carrito</string>
    
    <!-- Múltiples marcadores de posición -->
    <string name="order_summary">Pedido #%1$s: %2$d artículos, total: %3$.2f€</string>
    
    <!-- Reordenar marcadores para diferentes idiomas -->
    <string name="welcome_user">¡Bienvenido, %1$s! Tienes %2$d mensajes nuevos.</string>
</resources>

Especificadores de Formato

EspecificadorTipoEjemplo
%sString"Hola, %s!"
%dEntero"%d artículos"
%fFloat/Double"%.2f€"
%1$sString posicional"Hola, %1$s!"
%1$dEntero posicional"%1$d artículos"
%%Porcentaje literal"%d%% completado"

Uso en Kotlin/Java

// Kotlin
val greeting = getString(R.string.greeting, userName)
val summary = getString(R.string.order_summary, orderId, itemCount, total)

// Java
String greeting = getString(R.string.greeting, userName);
String summary = getString(R.string.order_summary, orderId, itemCount, total);

Pluralización con plurals.xml

Android maneja la pluralización a través de elementos <plurals>:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="items_count">
        <item quantity="zero">Sin artículos</item>
        <item quantity="one">%d artículo</item>
        <item quantity="two">%d artículos</item>
        <item quantity="few">%d artículos</item>
        <item quantity="many">%d artículos</item>
        <item quantity="other">%d artículos</item>
    </plurals>
    
    <plurals name="days_remaining">
        <item quantity="zero">Expira hoy</item>
        <item quantity="one">%d día restante</item>
        <item quantity="other">%d días restantes</item>
    </plurals>
    
    <plurals name="messages">
        <item quantity="one">Tienes %d mensaje nuevo</item>
        <item quantity="other">Tienes %d mensajes nuevos</item>
    </plurals>
</resources>

Valores de Cantidad

CantidadDescripciónIdiomas
zeroCero elementosÁrabe, Letón, Galés
oneSingularInglés, Español, Alemán
twoForma dualÁrabe, Galés, Esloveno
fewPocos elementosRuso, Polaco, Checo
manyMuchos elementosRuso, Árabe, Polaco
otherPor defecto (requerido)Todos los idiomas

Uso en Kotlin/Java

// Kotlin
val itemsText = resources.getQuantityString(R.plurals.items_count, count, count)
val daysText = resources.getQuantityString(R.plurals.days_remaining, days, days)

// Java
String itemsText = getResources().getQuantityString(R.plurals.items_count, count, count);

Arrays de Strings

Para listas de strings relacionadas, usa <string-array>:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="countries">
        <item>España</item>
        <item>México</item>
        <item>Argentina</item>
        <item>Colombia</item>
        <item>Chile</item>
        <item>Perú</item>
    </string-array>
    
    <string-array name="sort_options">
        <item>Nombre (A-Z)</item>
        <item>Nombre (Z-A)</item>
        <item>Fecha (Más reciente)</item>
        <item>Fecha (Más antiguo)</item>
        <item>Precio (Menor a Mayor)</item>
        <item>Precio (Mayor a Menor)</item>
    </string-array>
</resources>

Uso en Kotlin/Java

// Kotlin
val countries = resources.getStringArray(R.array.countries)
val sortOptions = resources.getStringArray(R.array.sort_options)

// Java
String[] countries = getResources().getStringArray(R.array.countries);

Caracteres Especiales y HTML

Escapar Caracteres Especiales

<resources>
    <!-- Apóstrofe (escapar con barra invertida o usar entidad HTML) -->
    <string name="dont">No te preocupes</string>
    <string name="apostrophe">El coche de María\'s</string>
    
    <!-- Comillas -->
    <string name="quote">Él dijo \"Hola\"</string>
    <string name="quote_alt">Él dijo &quot;Hola&quot;</string>
    
    <!-- Ampersand -->
    <string name="terms">Términos &amp; Condiciones</string>
    
    <!-- Menor que / Mayor que -->
    <string name="comparison">5 &lt; 10 &gt; 3</string>
    
    <!-- Nueva línea -->
    <string name="multiline">Primera línea\nSegunda línea</string>
    
    <!-- Tabulador -->
    <string name="tabbed">Columna1\tColumna2</string>
</resources>

Formato HTML

<resources>
    <!-- Formato HTML básico -->
    <string name="styled_text"><b>Negrita</b>, <i>Cursiva</i>, <u>Subrayado</u></string>
    
    <!-- HTML complejo (usar CDATA para markup complejo) -->
    <string name="rich_content"><![CDATA[
        <p>¡Bienvenido a <b>Nuestra App</b>!</p>
        <p>Haz clic <a href="https://example.com">aquí</a> para más info.</p>
    ]]></string>
</resources>

Uso con HTML en Kotlin

// Para etiquetas HTML simples (b, i, u)
val styledText = getString(R.string.styled_text)
textView.text = Html.fromHtml(styledText, Html.FROM_HTML_MODE_COMPACT)

// En Jetpack Compose
Text(
    text = AnnotatedString.fromHtml(getString(R.string.styled_text))
)

Strings Traducibles y No Traducibles

Marca las strings que no deben traducirse:

<resources>
    <!-- Strings traducibles (por defecto) -->
    <string name="welcome">Bienvenido</string>
    
    <!-- Strings no traducibles -->
    <string name="app_id" translatable="false">com.example.myapp</string>
    <string name="api_endpoint" translatable="false">https://api.example.com</string>
    <string name="brand_name" translatable="false">AZbox</string>
    
    <!-- Strings técnicas que no deben traducirse -->
    <string name="date_format" translatable="false">dd/MM/yyyy</string>
    <string name="currency_format" translatable="false">#.##0,00 €</string>
</resources>

Importar XML Android a AZbox

Paso 1: Prepara tus Archivos

Organiza tus archivos de recursos Android:

res/
├── values/
│   ├── strings.xml
│   └── plurals.xml
├── values-es/
│   ├── strings.xml
│   └── plurals.xml
└── values-fr/
    ├── strings.xml
    └── plurals.xml

Paso 2: Importar vía Panel de AZbox

  1. Inicia sesión en tu panel de AZbox
  2. Navega a tu proyecto
  3. Ve a la sección Importar/Exportar
  4. Selecciona Importar y elige Android XML (strings.xml)
  5. Sube tus archivos XML (puedes subir varios a la vez)
  6. AZbox detectará el idioma desde la estructura de carpetas

Paso 3: Revisar y Gestionar

Después de importar:

  • Ver todas las strings organizadas por clave
  • Ver plurales con todas las variantes de cantidad
  • Editar traducciones con consciencia del contexto
  • Añadir nuevos idiomas al instante
  • Usar traducción automática para strings faltantes
  • Rastrear porcentaje de completitud por idioma

Exportar XML Android desde AZbox

Cuando estés listo para usar las traducciones en tu proyecto Android:

  1. Ve a Importar/Exportar en tu proyecto
  2. Selecciona Exportar y elige Android XML (strings.xml)
  3. Selecciona idiomas destino
  4. Elige si incluir plurales por separado
  5. Descarga los archivos generados
  6. Copia a los directorios res/values-XX/ de tu app

Usar Strings en Android

En Layouts XML

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/welcome_title" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_save" />

En Kotlin

// Activity/Fragment
val title = getString(R.string.welcome_title)
val greeting = getString(R.string.greeting, userName)
val items = resources.getQuantityString(R.plurals.items_count, count, count)

// Con View Binding
binding.titleText.text = getString(R.string.welcome_title)

En Java

// Activity/Fragment
String title = getString(R.string.welcome_title);
String greeting = getString(R.string.greeting, userName);
String items = getResources().getQuantityString(R.plurals.items_count, count, count);

En Jetpack Compose

@Composable
fun WelcomeScreen() {
    Column {
        Text(text = stringResource(R.string.welcome_title))
        Text(text = stringResource(R.string.greeting, userName))
        Text(text = pluralStringResource(R.plurals.items_count, count, count))
    }
}

Mejores Prácticas para XML Android

1. Usa Nombres de Recursos Descriptivos

Mal:

<string name="s1">Enviar</string>
<string name="msg">Ocurrió un error</string>

Bien:

<string name="button_submit_form">Enviar</string>
<string name="error_generic_message">Ha ocurrido un error</string>

2. Organiza con Prefijos

<resources>
    <!-- Navegación -->
    <string name="nav_home">Inicio</string>
    <string name="nav_settings">Configuración</string>
    <string name="nav_profile">Perfil</string>
    
    <!-- Botones -->
    <string name="button_save">Guardar</string>
    <string name="button_cancel">Cancelar</string>
    <string name="button_delete">Eliminar</string>
    
    <!-- Errores -->
    <string name="error_network">Error de red</string>
    <string name="error_server">Error del servidor</string>
    
    <!-- Etiquetas -->
    <string name="label_email">Email</string>
    <string name="label_password">Contraseña</string>
</resources>

3. Añade Comentarios para Contexto

<resources>
    <!-- Mostrado en la pantalla de login, encima del campo de email -->
    <string name="login_email_hint">Introduce tu email</string>
    
    <!-- Texto del botón para enviar el formulario de login -->
    <string name="login_button">Iniciar Sesión</string>
    
    <!-- Error mostrado cuando el formato de email es inválido -->
    <string name="error_invalid_email">Por favor, introduce una dirección de email válida</string>
</resources>

4. Usa Parámetros Posicionales

Siempre usa parámetros posicionales (%1$s) en lugar de marcadores simples (%s) para mayor flexibilidad de traducción:

<!-- Mal: Los traductores no pueden reordenar -->
<string name="file_info">%s - %s - %s bytes</string>

<!-- Bien: Los traductores pueden reordenar para su idioma -->
<string name="file_info">%1$s - %2$s - %3$s bytes</string>

5. Maneja Todas las Formas Plurales

Diferentes idiomas necesitan diferentes formas plurales:

<!-- Español (values-es/plurals.xml) -->
<plurals name="photos">
    <item quantity="one">%d foto</item>
    <item quantity="other">%d fotos</item>
</plurals>

<!-- Ruso (values-ru/plurals.xml) -->
<plurals name="photos">
    <item quantity="one">%d фотография</item>
    <item quantity="few">%d фотографии</item>
    <item quantity="many">%d фотографий</item>
    <item quantity="other">%d фотографий</item>
</plurals>

<!-- Árabe (values-ar/plurals.xml) -->
<plurals name="photos">
    <item quantity="zero">لا صور</item>
    <item quantity="one">صورة واحدة</item>
    <item quantity="two">صورتان</item>
    <item quantity="few">%d صور</item>
    <item quantity="many">%d صورة</item>
    <item quantity="other">%d صورة</item>
</plurals>

6. Mantén los Valores por Defecto Completos

Siempre ten traducciones completas en tu values/strings.xml por defecto:

<!-- values/strings.xml (Inglés - por defecto) -->
<resources>
    <string name="welcome">Welcome</string>
    <string name="goodbye">Goodbye</string>
</resources>

<!-- values-es/strings.xml (Español) -->
<!-- Si falta una string, Android usa el fallback por defecto -->
<resources>
    <string name="welcome">Bienvenido</string>
    <!-- "goodbye" usará el fallback en inglés -->
</resources>

Problemas Comunes y Soluciones

Problema: String No Encontrada

Problema: La app crashea con Resources.NotFoundException.

Solución: Asegúrate de que la string existe en tu archivo values/strings.xml por defecto.

Problema: Desajuste de Marcadores de Posición

Problema: La app crashea al formatear string con número incorrecto de argumentos.

Solución: Haz coincidir el número de marcadores con los argumentos:

// strings.xml: <string name="info">%1$s tiene %2$d artículos</string>

// Incorrecto - falta el segundo argumento
getString(R.string.info, userName)

// Correcto
getString(R.string.info, userName, itemCount)

Problema: Caracteres Especiales Rompen el XML

Problema: Error de parseo XML debido a caracteres sin escapar.

Solución: Escapa los caracteres especiales o usa CDATA:

<!-- Escapar apóstrofe -->
<string name="message">¡Está funcionando!</string>

<!-- Usar CDATA para contenido complejo -->
<string name="html_content"><![CDATA[<b>Negrita</b> & <i>Cursiva</i>]]></string>

Problema: Problemas de Layout con Idiomas RTL

Problema: Los idiomas de derecha a izquierda (árabe, hebreo) se muestran incorrectamente.

Solución: Usa start/end en lugar de left/right en layouts:

<!-- Mal -->
<TextView android:layout_marginLeft="16dp" />

<!-- Bien - funciona con RTL -->
<TextView android:layout_marginStart="16dp" />

Funcionalidades Android XML de AZbox

Cuando importas XML Android a AZbox, te beneficias de:

  • Detección automática de idioma - Detecta locale desde estructura de carpetas
  • Validación de formas plurales - Asegura que todas las cantidades requeridas estén presentes
  • Soporte de arrays de strings - Gestiona arrays junto con strings regulares
  • Preservación de comentarios - Comentarios XML importados como contexto
  • Resaltado de marcadores de posición - Marcadores visuales para %s, %d, etc.
  • Validación de formato - Asegura que los marcadores coincidan entre traducciones
  • Memoria de traducción - Aprovecha traducciones anteriores
  • Traducción automática - Rellena huecos con traducción impulsada por IA
  • Actualizaciones over-the-air - Actualiza sin aprobación de Google Play
  • Colaboración en equipo - Los traductores no necesitan Android Studio

Conclusión

El XML de Android (strings.xml) es el formato fundamental para localización de apps Android, ofreciendo características robustas para manejar traducciones, pluralización y contenido dinámico. Con el soporte completo de XML Android de AZbox, puedes:

  1. Importar archivos strings.xml existentes con todos los recursos preservados
  2. Gestionar plurales y arrays junto con strings regulares
  3. Soportar pluralización compleja para todos los idiomas
  4. Exportar archivos XML Android listos para tu proyecto Android
  5. Actualizar traducciones over-the-air sin aprobación de Play Store

¿Listo para optimizar tu flujo de trabajo de localización Android?

Comienza tu Prueba Gratuita | Ver Precios


AZbox proporciona soporte completo para el formato XML de Android (strings.xml), convirtiéndolo en la plataforma de localización ideal para desarrolladores Android. Importa, gestiona y exporta tus traducciones con facilidad.

Fondo de llamada a la acción

Comienza el Crecimiento Global Hoy

Únete a cientos de empresas exitosas que ya usan AZbox para llegar a clientes en todo el mundo. Comienza con una prueba gratuita, no se requiere tarjeta de crédito.

Comenzar - Es Gratis