Estoy (como todos los demás) usando NSLocalizedString
para localizar mi aplicación.
Desafortunadamente, hay varios "inconvenientes" (no necesariamente por culpa de NSLocalizedString), incluyendo
- No hay autocompletado para cadenas en Xcode. Esto hace que trabajar no solo sea propenso a errores, sino también pesado.
- Podría terminar redefiniendo una cadena simplemente porque no sabía que ya existía una cadena equivalente (es decir, "Ingrese la contraseña" frente a "Ingrese la contraseña primero")
- De manera similar al problema de autocompletado, debe "recordar" / copiar las cadenas de comentarios, o de lo contrario
genstring
terminará con múltiples comentarios para una cadena - Si desea usarlo
genstring
después de haber localizado algunas cadenas, debe tener cuidado de no perder sus antiguas localizaciones. - Las mismas cadenas están dispersas en todo su proyecto. Por ejemplo, usó en
NSLocalizedString(@"Abort", @"Cancel action")
todas partes, y luego Code Review le pide que cambie el nombre de la cadenaNSLocalizedString(@"Cancel", @"Cancel action")
para que el código sea más coherente.
Lo que hago (y después de algunas búsquedas en SO me di cuenta de que muchas personas hacen esto) es tener un strings.h
archivo separado en #define
el que localizo todo el código. Por ejemplo
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
Básicamente, esto proporciona la finalización del código, un lugar único para cambiar los nombres de las variables (por lo que ya no es necesario usar genstring) y una palabra clave única para auto-refactorizar. Sin embargo, esto tiene el costo de terminar con un montón de #define
declaraciones que no están inherentemente estructuradas (es decir, como LocString.Common.Cancel o algo así).
Entonces, aunque esto funciona bastante bien, me preguntaba cómo lo hacen en sus proyectos. ¿Existen otros enfoques para simplificar el uso de NSLocalizedString? ¿Existe quizás un marco que lo encapsule?