Archivos YAML (.yaml/.yml): Guía Completa de Localización Basada en YAML
Updated: 28 March, 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
Ú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