Archivos YAML (.yaml/.yml): Guía Completa de Localización Basada en YAML
Actualizado: 9 de septiembre de 2026
¿Qué Son los Archivos YAML para Localización?
YAML (YAML Ain’t Markup Language) es un formato de serialización de datos legible por humanos ampliamente usado para archivos de configuración y localización. Su sintaxis limpia con anidamiento basado en indentación lo hace particularmente popular en frameworks web como Ruby on Rails, Symfony (PHP), Django y muchos otros.
Los archivos YAML usan extensiones .yaml o .yml y proporcionan una forma intuitiva de organizar strings de traducción jerárquicamente, haciéndolos fáciles de leer, escribir y mantener.
Por Qué AZbox Soporta el Formato YAML
En AZbox, reconocemos que YAML es el formato estándar de localización para muchos frameworks populares. Por eso AZbox soporta completamente la importación y exportación de archivos YAML, permitiéndote:
- Importar archivos YAML existentes directamente a tu proyecto AZbox
- Exportar traducciones de vuelta al formato YAML para tu framework
- Soportar estructuras anidadas comunes en Rails y Symfony
- Manejar múltiples convenciones YAML (estilo Rails, plano, anidado)
- Gestionar traducciones con nuestra potente plataforma en la nube
- Colaborar con traductores que pueden trabajar sin conocimientos técnicos
Sintaxis Básica de YAML
Pares Clave-Valor
Estructura simple clave-valor:
welcome: Bienvenido
goodbye: Adiós
button_save: Guardar
button_cancel: Cancelar
Estructura Anidada
Organización jerárquica con indentación:
navigation:
home: Inicio
about: Sobre Nosotros
contact: Contacto
buttons:
save: Guardar
cancel: Cancelar
delete: Eliminar
errors:
network: Error de red
server: Error del servidor
validation: Validación fallida
Strings Multilínea
Diferentes formas de manejar texto largo:
# Bloque literal (preserva saltos de línea)
description: |
Esta es una descripción
multilínea que preserva
los saltos de línea.
# Bloque plegado (une líneas)
summary: >
Este es un texto largo que
se unirá en una sola
línea con espacios.
# Strings entrecomilladas
message: "Hola, esta es una string \"entrecomillada\""
apostrophe: "Está funcionando!"
YAML para Diferentes Frameworks
Ruby on Rails
Rails usa archivos YAML con prefijo de locale:
config/locales/en.yml:
en:
activerecord:
models:
user: User
post: Post
attributes:
user:
name: Name
email: Email
views:
users:
index:
title: Users
new_user: New User
show:
edit: Edit
delete: Delete
flash:
success: Operation completed successfully
error: An error occurred
config/locales/es.yml:
es:
activerecord:
models:
user: Usuario
post: Publicación
attributes:
user:
name: Nombre
email: Correo electrónico
views:
users:
index:
title: Usuarios
new_user: Nuevo Usuario
show:
edit: Editar
delete: Eliminar
flash:
success: Operación completada con éxito
error: Ocurrió un error
Symfony (PHP)
Symfony usa archivos YAML basados en dominio:
translations/messages.en.yaml:
app:
name: My Application
tagline: The best app ever
navigation:
home: Home
dashboard: Dashboard
settings: Settings
user:
profile: Profile
logout: Log Out
login: Sign In
translations/messages.es.yaml:
app:
name: Mi Aplicación
tagline: La mejor app del mundo
navigation:
home: Inicio
dashboard: Panel
settings: Configuración
user:
profile: Perfil
logout: Cerrar Sesión
login: Iniciar Sesión
Django (Python)
Django típicamente usa gettext (.po), pero YAML también es soportado:
es:
greeting: Hola
farewell: Adiós
messages:
welcome: Bienvenido a nuestra aplicación
success: Operación exitosa
error: Ocurrió un error
Spring Boot (Java)
messages_es.yml:
messages:
greeting: Hola
welcome: Bienvenido a {0}
errors:
not_found: Recurso no encontrado
unauthorized: Acceso denegado
validation:
required: Este campo es requerido
email: Formato de email inválido
Laravel (PHP) - Alternativa a arrays PHP
es:
auth:
failed: Estas credenciales no coinciden con nuestros registros.
throttle: Demasiados intentos de inicio de sesión. Por favor intente de nuevo en :seconds segundos.
pagination:
previous: "« Anterior"
next: "Siguiente »"
passwords:
reset: "¡Tu contraseña ha sido restablecida!"
sent: "¡Hemos enviado el enlace de restablecimiento a tu correo!"
Patrones de Estructura YAML
Estructura Plana
Claves simples, sin anidar:
welcome_title: Bienvenido
welcome_message: Bienvenido a nuestra app
button_save: Guardar
button_cancel: Cancelar
error_network: Error de red
Claves con Notación de Punto
Estructura plana con puntos indicando jerarquía:
nav.home: Inicio
nav.about: Sobre Nosotros
nav.contact: Contacto
user.profile: Perfil
user.settings: Configuración
error.network: Error de red
error.server: Error del servidor
Estructura Profundamente Anidada
Organización jerárquica completa:
app:
name: Mi App
pages:
home:
title: Inicio
welcome: ¡Bienvenido de nuevo!
dashboard:
title: Panel
widgets:
stats: Estadísticas
activity: Actividad Reciente
settings:
title: Configuración
sections:
profile: Configuración de Perfil
notifications: Preferencias de Notificación
security: Opciones de Seguridad
Estructura Mixta
Combinando enfoques:
# Secciones de nivel superior
common:
save: Guardar
cancel: Cancelar
delete: Eliminar
# Específico por característica
user.profile.title: Perfil de Usuario
user.profile.edit: Editar Perfil
user.settings.title: Configuración
# Anidado para características complejas
checkout:
cart:
title: Carrito de Compras
empty: Tu carrito está vacío
payment:
title: Pago
methods:
card: Tarjeta de Crédito
paypal: PayPal
Marcadores de Posición e Interpolación
Interpolación Estilo Rails
Usando sintaxis %{variable}:
es:
greeting: "¡Hola, %{name}!"
items_in_cart: "Tienes %{count} artículos en tu carrito"
welcome_back: "¡Bienvenido, %{username}! Último acceso: %{date}"
Uso en Rails:
t('greeting', name: 'Juan')
# => "¡Hola, Juan!"
Parámetros Estilo Symfony
Usando %parameter% o {{ parameter }}:
greeting: "¡Hola, %name%!"
items_count: "Tienes {{ count }} artículos"
Marcadores Estilo sprintf
Usando formato %s, %d:
greeting: "¡Hola, %s!"
count: "%d artículos restantes"
price: "Total: %.2f€"
Marcadores Nombrados (Genérico)
Usando sintaxis {variable}:
welcome: "¡Bienvenido, {username}!"
order_status: "Pedido #{orderId} está {status}"
file_info: "{filename} ({size} KB)"
Pluralización en YAML
Pluralización en Rails
Rails usa claves especiales para pluralización:
es:
items:
zero: "Sin artículos"
one: "1 artículo"
other: "%{count} artículos"
messages:
zero: "Sin mensajes nuevos"
one: "1 mensaje nuevo"
few: "%{count} mensajes nuevos" # Para idiomas que lo necesitan
many: "%{count} mensajes nuevos"
other: "%{count} mensajes nuevos"
Uso:
t('items', count: 0) # => "Sin artículos"
t('items', count: 1) # => "1 artículo"
t('items', count: 5) # => "5 artículos"
Pluralización en Symfony
Usando formato ICU message:
items_count: "{count, plural, =0{Sin artículos} one{# artículo} other{# artículos}}"
O formato transChoice:
items_count: "{0}Sin artículos|{1}Un artículo|]1,Inf[%count% artículos"
Estructura Plural Genérica
Claves separadas para cada forma:
items:
zero: Sin artículos
one: "{count} artículo"
two: "{count} artículos"
few: "{count} artículos"
many: "{count} artículos"
other: "{count} artículos"
Caracteres Especiales y Escape
Reglas de Entrecomillado
# No se necesitan comillas para strings simples
simple: Hola Mundo
# Comillas simples (literal)
literal: 'Hola\nMundo' # \n es literal, no salto de línea
# Comillas dobles (secuencias de escape funcionan)
escaped: "Hola\nMundo" # \n se convierte en salto de línea
# Comillas necesarias para caracteres especiales
special: "Hola: Mundo" # Dos puntos en valor
with_hash: "Usa #hashtag" # Símbolo de almohadilla
Caracteres Reservados
| Carácter | Contexto | Solución |
|---|---|---|
: | En valores | Entrecomillar string |
# | Inicio de valor | Entrecomillar string |
@ | Inicio de valor | Entrecomillar string |
* | Inicio de valor | Entrecomillar string |
& | Inicio de valor | Entrecomillar string |
! | Inicio de valor | Entrecomillar string |
% | Inicio de valor | Entrecomillar string |
[, ] | En valores | Entrecomillar string |
{, } | En valores | Entrecomillar string |
Ejemplos
# Manejo correcto de caracteres especiales
colon_value: "Hora: 10:30"
hash_tag: "#trending"
at_mention: "@username"
ampersand: "Términos y Condiciones"
url: "https://example.com"
json_like: "{\"key\": \"value\"}"
# Multilínea con caracteres especiales
html_content: |
<p>Hola <strong>Mundo</strong></p>
<a href="https://example.com">Enlace</a>
Organización de Archivos YAML
Por Idioma (Convención Rails)
config/locales/
├── en.yml
├── es.yml
├── fr.yml
├── de.yml
└── ja.yml
Por Característica + Idioma
config/locales/
├── en/
│ ├── common.yml
│ ├── users.yml
│ ├── products.yml
│ └── errors.yml
├── es/
│ ├── common.yml
│ ├── users.yml
│ ├── products.yml
│ └── errors.yml
└── fr/
├── common.yml
├── users.yml
├── products.yml
└── errors.yml
Convención Symfony
translations/
├── messages.en.yaml
├── messages.es.yaml
├── messages.fr.yaml
├── validators.en.yaml
├── validators.es.yaml
└── validators.fr.yaml
Importar YAML a AZbox
Paso 1: Prepara tus Archivos YAML
Asegúrate de que tus archivos son YAML válido:
- Indentación consistente (2 o 4 espacios, sin tabuladores)
- Entrecomillado correcto para caracteres especiales
- Codificación UTF-8
- Sintaxis YAML válida
Paso 2: Importar vía Panel de AZbox
- Inicia sesión en tu panel de AZbox
- Navega a tu proyecto
- Ve a la sección Importar/Exportar
- Selecciona Importar y elige YAML (.yaml/.yml)
- Sube tus archivos YAML
- Configura las opciones de importación:
- Estilo YAML (Rails, Symfony, plano, anidado)
- Manejo de clave raíz de locale
- Separador de claves (notación de punto)
- Previsualiza y confirma la importación
Paso 3: Opciones de Manejo de Claves
Estilo Rails (prefijo de locale):
es:
welcome: Bienvenido
→ Clave: welcome
Estructura plana:
welcome: Bienvenido
→ Clave: welcome
Anidado a notación de punto:
nav:
home: Inicio
→ Clave: nav.home
Exportar YAML desde AZbox
Opciones de Exportación
| Opción | Descripción |
|---|---|
| Estilo | Rails, Symfony, plano, anidado |
| Prefijo de locale | Incluir clave raíz es: |
| Indentación | 2 o 4 espacios |
| Formato de claves | Anidado o notación de punto |
| Estilo de comillas | Simples, dobles o mínimo |
Pasos de Exportación
- Ve a Importar/Exportar en tu proyecto
- Selecciona Exportar y elige YAML
- Configura las opciones de exportación para tu framework
- Descarga los archivos YAML generados
Exportaciones Específicas por Framework
Para Rails:
es:
navigation:
home: Inicio
about: Sobre Nosotros
Para Symfony:
navigation:
home: Inicio
about: Sobre Nosotros
Exportación plana:
navigation.home: Inicio
navigation.about: Sobre Nosotros
Usar YAML en tu Aplicación
Ruby on Rails
Acceder a traducciones:
# En vistas (ERB)
<%= t('navigation.home') %>
<%= t('greeting', name: current_user.name) %>
# En controladores
flash[:notice] = t('flash.success')
# Con pluralización
t('items', count: @items.count)
Configuración (config/application.rb):
config.i18n.default_locale = :es
config.i18n.available_locales = [:en, :es, :fr, :de]
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.yml')]
Symfony (PHP)
Acceder a traducciones:
// En controladores
$this->translator->trans('navigation.home');
// Con parámetros
$this->translator->trans('greeting', ['%name%' => $user->getName()]);
En plantillas Twig:
{{ 'navigation.home'|trans }}
{{ 'greeting'|trans({'%name%': user.name}) }}
Spring Boot (Java)
Configuración MessageSource:
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource =
new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
Acceder a traducciones:
@Autowired
private MessageSource messageSource;
String welcome = messageSource.getMessage("welcome", null, locale);
String greeting = messageSource.getMessage("greeting", new Object[]{name}, locale);
Node.js (con js-yaml)
Cargar YAML:
const yaml = require('js-yaml');
const fs = require('fs');
const translations = yaml.load(
fs.readFileSync('locales/es.yml', 'utf8')
);
console.log(translations.navigation.home);
Mejores Prácticas para Localización YAML
1. Usa Indentación Consistente
Mal:
nav:
home: Inicio
about: Sobre Nosotros # ¡Inconsistente!
Bien:
nav:
home: Inicio
about: Sobre Nosotros
2. Organiza las Claves Lógicamente
# Agrupar por característica
users:
index:
title: Usuarios
search: Buscar usuarios
show:
title: Detalles de Usuario
form:
name: Nombre
email: Email
# Agrupar por tipo
buttons:
save: Guardar
cancel: Cancelar
delete: Eliminar
errors:
required: Este campo es requerido
invalid: Valor inválido
3. Usa Comentarios para Contexto
# Elementos del menú de navegación
navigation:
home: Inicio # Navegación principal
dashboard: Panel
# Strings relacionadas con usuario
user:
# Sección de perfil
profile:
title: Perfil
edit: Editar Perfil # Texto de botón, máx 15 chars
4. Mantén las Claves Consistentes Entre Idiomas
en.yml:
en:
welcome: Welcome
goodbye: Goodbye
es.yml:
es:
welcome: Bienvenido
goodbye: Adiós
5. Maneja Traducciones Faltantes
Configura fallbacks en tu framework:
# Rails
config.i18n.fallbacks = [:en]
// Symfony
framework:
default_locale: es
fallbacks: ['en']
Problemas Comunes y Soluciones
Problema: Sintaxis YAML Inválida
Problema: El parseo YAML falla.
Solución:
- Verifica indentación (usa espacios, no tabuladores)
- Valida con validador YAML online
- Entrecomilla strings con caracteres especiales
Problema: Caracteres Especiales Rompen el Parseo
Problema: Dos puntos, almohadillas causan errores.
Solución:
# Mal
time: 10:30 AM
# Bien
time: "10:30 AM"
Problema: Problemas de Codificación
Problema: Caracteres no-ASCII se muestran incorrectamente.
Solución:
- Guarda archivos como UTF-8
- Asegúrate de que el framework lee UTF-8
- Verifica configuración de codificación del editor
Problema: Claves No Encontradas
Problema: La traducción devuelve la clave en lugar del valor.
Solución:
- Verifica que la ruta de clave coincide exactamente
- Verifica que el archivo de locale está cargado
- Busca erratas en claves anidadas
Problema: Interpolación No Funciona
Problema: %{name} aparece literalmente.
Solución:
- Pasa la variable al traducir
- Verifica la sintaxis de interpolación para tu framework
- Asegúrate de que el nombre del marcador coincide
Funcionalidades YAML de AZbox
Cuando usas YAML con AZbox, te beneficias de:
- Múltiples convenciones YAML - Soporte Rails, Symfony, plano, anidado
- Detección inteligente de estructura - Auto-detecta tu estilo YAML
- Manejo de claves anidadas - Preserva estructura jerárquica
- Resaltado de marcadores - Marcadores visuales para %{variables}
- Soporte de pluralización - Maneja formas plurales Rails/Symfony
- Preservación de comentarios - Mantiene tus comentarios YAML
- Opciones de indentación - Exporta con tu estilo preferido
- Validación - Detecta errores de sintaxis YAML
- Memoria de traducción - Aprovecha traducciones anteriores
- Actualizaciones over-the-air - Actualiza sin redesplegar
Conclusión
Los archivos YAML proporcionan un formato limpio y legible para gestionar traducciones en muchos frameworks web populares. Con el soporte completo de YAML de AZbox, puedes:
- Importar archivos YAML existentes preservando estructura y jerarquía
- Soportar múltiples frameworks - Rails, Symfony, Django y más
- Manejar estructuras complejas incluyendo anidamiento y pluralización
- Exportar archivos YAML formateados para tu framework específico
- Colaborar con traductores en una interfaz amigable
¿Listo para optimizar tu flujo de trabajo de localización basado en YAML?
Comienza tu Prueba Gratuita | Ver Precios
AZbox proporciona soporte completo para archivos de localización YAML, convirtiéndolo en la plataforma ideal para desarrolladores Rails, Symfony, Django y otros frameworks. Importa, gestiona y exporta tus traducciones con facilidad.
Comienza el Crecimiento Global Hoy
Sube tus archivos de idioma, recibe las traducciones y mantén cada idioma sincronizado mientras tu producto sigue cambiando.
Comenzar - Es Gratis