paint-brush
Evolución de la localización en Swift: de cadenas a catálogos de cadenaspor@mniagolov
895 lecturas
895 lecturas

Evolución de la localización en Swift: de cadenas a catálogos de cadenas

por Maksim Niagolov8m2024/06/12
Read on Terminal Reader

Demasiado Largo; Para Leer

Swift ofrece potentes herramientas para incorporar fácilmente la localización a las aplicaciones. Esta guía explica la transición en la localización en Swift, desde las primeras técnicas hasta la herramienta más reciente para ayudar a los desarrolladores a aprovechar al máximo estas capacidades. La localización mejora la experiencia del usuario, amplía su alcance y puede tener un gran impacto en el éxito del software a nivel internacional.
featured image - Evolución de la localización en Swift: de cadenas a catálogos de cadenas
Maksim Niagolov HackerNoon profile picture

Dado que hoy en día el mundo es un mercado global, la capacidad de sus aplicaciones móviles para estar en diferentes idiomas y culturas no es solo una opción sino una necesidad. La localización mejora la experiencia del usuario, amplía su alcance y puede tener un gran impacto en el éxito del software a nivel internacional.


Para los desarrolladores de iOS, Swift ofrece potentes herramientas para incorporar fácilmente la localización a las aplicaciones. Esta guía explica la transición en la localización en Swift, desde las primeras técnicas hasta la herramienta más reciente, para ayudar a los desarrolladores a aprovechar al máximo estas capacidades.


Desafíos iniciales en la localización

Inicialmente, cuando se introdujo Swift por primera vez, heredó la infraestructura de localización de Objective-C, que se construyó alrededor del archivo Localizable.strings y la función NSLocalizedString . De esta manera, los desarrolladores tuvieron que lidiar con la edición manual de las cadenas localizadas y sincronizarlas en archivos de diferentes idiomas, un proceso que es propenso a errores y requiere mucho tiempo.

Los conceptos básicos de Localizable.strings

El archivo localizable es un archivo de par clave-valor simple donde las cadenas se almacenan en un formato "clave" = "valor" , donde "clave" es el identificador del código y "valor" es la cadena localizada que verá el usuario. Este archivo debe duplicarse y traducirse a cada idioma admitido y colocarse en los directorios '.lproj' correspondientes, como 'en.lproj' para el idioma inglés y 'de.lproj' para el idioma alemán.

Ejemplo de una entrada Localizable.strings :

 "hello_world_key" = "Hello, World!";


En el código Swift, esta cadena podría recuperarse como:

 let greeting = NSLocalizedString("hello_world_key", comment: "The default greeting")


La función NSLocalizedString facilita el acceso al contenido localizado mediante el uso de claves de Localizable.strings .


Esta función toma una clave, proporciona un valor alternativo y coloca un comentario para los traductores. Ofrecer un comentario es fundamental ya que proporciona a los traductores el subtexto para mejorar la precisión y la idoneidad de las traducciones.


Ejemplo: saludar a un usuario según la hora del día:

 func greetingBasedOnTime() -> String { let hour = Calendar.current.component(.hour, from: Date()) let key = hour < 12 ? "good_morning_key" : "good_evening_key" return NSLocalizedString(key, comment: "Greeting based on time of day") }


Con las correspondientes Localizable.strings , las entradas se ven así:

 "good_morning_key" = "Good morning!"; "good_evening_key" = "Good evening!";


Aquí hay algunos desafíos con Localizable. Cuerdas que podrías enfrentar:
1) Problemas de escalabilidad.

A medida que crece el número de hilos, resulta difícil manejarlos. Administrar múltiples archivos .strings con el tiempo se vuelve engorroso.


2) Duplicación.

Cada idioma requería un archivo separado, lo que generaba posibles inconsistencias y esfuerzos duplicados en la gestión de cadenas. Con un solo idioma que admitir, puede que no sea un problema, pero cuando necesitas administrar varios idiomas, a veces se vuelve demasiado problemático.


3) Falta de contexto.

Sin embargo, los comentarios podrían agregarse en NSLocalizedString; incluso si no siempre ayudan al traductor a comprender completamente el contexto, eso podría resultar en imprecisiones en la traducción. Los desarrolladores suelen ser demasiado vagos para llenarlos adecuadamente.

Transición a stringsdict para pluralización

La introducción de archivos stringsdict supuso una mejora significativa para la localización Swift, que abordó principalmente los problemas de pluralización. La causa principal es que los plurales de los idiomas se forman de manera diferente, y lo que podría ser efectivo para el inglés podría no serlo para otros idiomas como el ruso o el árabe.


Antes de la introducción stringsdict , era muy difícil gestionarlos. stringsdict permite a los programadores determinar reglas para categorías como "uno", "pocos", "muchos" y "otros", que garantizan el mismo nivel de corrección en la traducción en todos los idiomas.


Comprender los archivos stringsdict

El archivo Stringsdict es una lista de propiedades XML, que se utiliza para crear cadenas localizadas según valores numéricos. Esta funcionalidad está destinada a procesar correctamente las formas plurales porque los diferentes idiomas tienen sus propias reglas diferentes para procesar las formas plurales.

Estructura de un archivo stringsdict :

Un ejemplo de archivo stringsdict incluye entradas de todas las cadenas que deben pluralizarse. Cada entrada consta de una clave y un diccionario en el que el usuario define una o más subclaves que representan diferentes categorías plurales.


 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>numberOfSongs</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@songs@</string> <key>songs</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One song</string> <key>other</key> <string>%d songs</string> </dict> </dict> </dict> </plist>


Ejemplo de uso de stringsdict para pluralización

Supongamos que tenemos una aplicación que muestra la cantidad de artículos que ha leído un usuario. En la pantalla, debería mostrar un mensaje que presente la forma plural correcta del número de artículos leídos.


Localizable.stringsdict para inglés y polaco:

 <!-- English --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One article</string> <key>other</key> <string>%d articles</string> </dict> </dict> <!-- Polish --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>Jeden artykuł</string> <key>few</key> <string>%d artykuły</string> <key>many</key> <string>%d artykułów</string> <key>other</key> <string>%d artykułu</string> </dict> </dict>


Aquí, la localización polaca demuestra claramente la complejidad de las formas plurales en algunos idiomas, donde se necesitan múltiples categorías plurales (uno, pocos, muchos, otros) para representar correctamente diferentes contextos numéricos.


Implementación rápida:

Las entradas stringsdict se pueden utilizar en el código simplemente haciendo referencia a las claves definidas en el archivo al llamar a NSLocalizedString .

 let count = getArticleCount() let formatString = NSLocalizedString("article_count", comment: "Count of articles read by a user") let message = String(format: formatString, count)

Este enfoque le permite modificar de forma adaptativa la cadena de salida para que coincida con la gramática de los idiomas admitidos; todo esto solo en una línea de código.


Beneficios de stringsdict

  • Eficiencia: esto ayuda a ahorrar tiempo y esfuerzo que de otro modo se habrían dedicado a administrar y modificar los archivos de localización.
  • Precisión: ayuda a mejorar la precisión de las traducciones de palabras donde se proporciona más contexto directamente dentro del entorno de desarrollo.
  • Flexibilidad: admite ajustes dinámicos y en tiempo real al contenido localizado.

Técnicas modernas de localización con catálogos de cadenas

Una de las nuevas características que se introdujeron con Xcode 15 son los catálogos de cadenas, que se supone que ayudarán a los desarrolladores a hacer que la localización de aplicaciones iOS y macOS sea aún más fácil que antes. Si bien Localizable.strings y stringsdict han sido recursos útiles para almacenar y organizar cadenas, los catálogos de cadenas son mucho más cohesivos y la interfaz de usuario es más amigable para administrar cadenas localizadas.


Estos son los principales aspectos que conviene destacar en los catálogos de cordajes:

  • Editor visual: a diferencia de los archivos tradicionales de texto simple, los catálogos de cadenas se editan con la ayuda de un editor visual en Xcode, lo que facilita agregar, modificar o eliminar cadenas localizadas.


  • Documentación en línea: los desarrolladores pueden proporcionar directamente las descripciones y el contexto dentro del catálogo de cadenas, lo que mejora significativamente la claridad y corrección de la traducción.


  • Localización dinámica: Strings Catalog admite la localización dinámica, por lo que los desarrolladores pueden cambiar cadenas localizadas sin salir de la aplicación, lo cual es ideal para pruebas y desarrollo iterativo.


  • Pluralización y adaptación avanzadas: también supera algunas de las deficiencias de stringsdict al ofrecer un control más preciso de las formas plurales y del texto con variaciones según los elementos de la interfaz de usuario y los tipos de dispositivos.


Implementación rápida:

Supongamos que en una aplicación de mensajería tienes que informar a los usuarios sobre la cantidad de mensajes que no han leído. La notificación debe ser dinámica mostrando la cantidad de mensajes recibidos y debe ajustarse de acuerdo al tipo de contenido.


Configuración paso a paso:

  1. Cree un catálogo de cadenas: agregue un nuevo catálogo de cadenas a su proyecto. Esto generará un archivo .stringcatalog .


  2. Agregar entradas: utilice el editor para agregar entradas para cada cadena que deba localizarse. Luego especifique claves, valores predeterminados y cualquier regla plural o parámetro adaptativo para cada entrada.


  3. Localizar contenido: proporcione traducciones para cada idioma admitido, especificando diferentes formas para plurales, adaptaciones para tipos de dispositivos, etc.


  4. Implementar en el código: haga referencia a estas cadenas utilizando identificadores localizados en su código Swift.


 <!-- String Catalog Entry --> <key>unread_messages_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@messages@</string> <key>messages</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>You have one unread message.</string> <key>other</key> <string>You have %d unread messages.</string> </dict> </dict>


Podrías acceder a esta cadena así:

 let unreadCount = fetchUnreadMessagesCount() let message = NSLocalizedString("unread_messages_count", value: "You have \(unreadCount) unread messages.", comment: "Notify about unread messages") print(message)



Beneficios de los catálogos de cadenas

  • Eficiencia: ahorra tiempo y esfuerzo necesarios para administrar archivos de localización.


  • Precisión: mejora la precisión al proporcionar más contexto directo adicional directamente en el entorno de desarrollo.


  • Flexibilidad: admite actualizaciones en tiempo real e incluso dinámicas del contenido localizado, lo cual es particularmente útil en un ciclo de desarrollo rápido.

Desafíos

Si bien los catálogos de cadenas ofrecen mejoras significativas, también presentan desafíos. Primero, es una curva de aprendizaje; Se necesita tiempo para acostumbrarse a un nuevo sistema o forma de crear algo. Otro desafío potencial que los desarrolladores podrían enfrentar está relacionado con el tiempo y los ajustes necesarios para integrar los catálogos de cadenas en proyectos existentes donde los archivos de localización tradicionales ya estaban creados y en uso.

Conclusión

Los catálogos de cadenas en Swift son la mejora adicional más reciente de la tecnología de localización y brindan herramientas que no solo son poderosas sino también flexibles y fáciles de usar. Al agregar la tecnología como parte del ciclo de vida de desarrollo, los equipos habrán mejorado drásticamente la eficiencia y la calidad en el proceso de localización; por lo tanto, se crearán mejores productos globales.


Actualizaré constantemente este artículo con los últimos desarrollos en herramientas de localización Swift. Si crees que omití algo o tienes alguna idea sobre lo que dije, puedes compartirla en el cuadro de comentarios a continuación. ¡Asegúrate de seguirme para obtener más información interesante y las últimas noticias!