Cuando asigno texto mediante programación, puedo usar NSLocalizedString (....), pero si escribo el texto directamente en IB (por ejemplo, en un UILabel), ¿cómo puedo localizarlo?Cómo usar NSLocalizedString en IB [SDK de iPhone]?
Respuesta
Una solución es crear múltiples archivos de punta localizados. Esto probablemente funcione mejor si sus necesidades de localización son muy sencillas y simplemente transfiere sus recursos a localizadores expertos de software al final del desarrollo.
Si está localizando mientras se desarrolla y la IU está cambiando rápidamente, duplicar los archivos de punta puede ser un gran problema, ya que cada UI tweek debe estar duplicado en cada versión local de la punta. Para evitar esto, deberá escribir algún código en los controladores de vista para manejar la configuración de las cadenas localizadas, generalmente en el método -viewDidLoad
del controlador de vista. Asegúrese de que cada control con texto localizado sea IBOutlet
y los haya conectado a su controlador de vista en IB. Luego de -viewDidLoad
el controlador de vista se verá algo como esto:
- (void)viewDidLoad {
[super viewDidLoad];
hello.text = NSLocalizedString(@"Hello", @"Hello label");
world.text = NSLocalizedString(@"world", @"world label");
// ... etc
}
se hace este tipo de configuración de vista en -viewDidLoad
ya que los objetos de la semilla no se crean por completo hasta después de su método de -init
corre. -viewDidLoad
se ejecuta después de -init
pero antes de que su vista se vuelva visible.
Puede crear varias versiones de un archivo .nib para cada configuración regional. También hay herramientas para que pueda editar las cadenas fácilmente. Apple tiene pretty good documentation en esto.
Este es un tema grande y complejo. Un buen punto de partida es Introduction to Internationalization Programming Topics y también existe Preparing Your Nib Files for Localization
También estaba buscando una solución, no necesariamente para iPhone, pero XCode/IB en general. Todas las referencias no trataban el hecho de que podría necesitar una clave internamente para indicar un estado y desea mostrar una cadena localizada para el usuario en una etiqueta o celda de texto correspondiente a esa clave. No encontré en el primer paso un enfoque estándar sobre cómo almacenar, p. un valor de clave para una clave en los valores predeterminados del usuario compartido y muestra la cadena localizada para ese valor clave en una etiqueta.
Encontré una solución que no necesita mucha codificación y cumple con los enlaces en ib.
Primero proporciona un archivo Localizable.strings, p. con una línea que contiene
"MyKeyValue" = "Localized display label";
Ahora se puede localizar el valor de la clave con: NSLocalizedString (aKeyValue, nil).
En la etiqueta no encontraste ningún transformador de valor relacionado con NSLocalized String. así que creé una clase KeyToLocalizedStringTransformer para transformar un valor clave en una cadena localizada:
@interface KeyToLocalizedStringTransformer : NSValueTransformer {}
@implementation KeyToLocalizedStringTransformer
+ (Class)transformedValueClass
{
return [NSString class];
}
+ (BOOL)allowsReverseTransformation
{
return NO;
}
- (id)transformedValue:(id)aValue
{
NSString *NLString = [NSString stringWithString:NSLocalizedString(aValue,nil)];
return NLString;
}
El último paso para la preparación es para registrar el transformador, por ejemplo, en + inicializar:
NSValueTransformer *transformer = [[KeyToLocalizedStringTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"KeyToLocalizedStringTransformer"];
Ahora puede utilizar un transformador de valor en los enlaces para el campo de texto o celular (Simplemente escriba el nombre si sólo se ve la NSUnArchiveFromData y así sucesivamente ...)
Lo siento, no hay imagen aquí de IB porque soy nuevo aquí y "no tengo reputación": tiene que imaginar el enlace al controlador predeterminado de usuario compartido, clave de Kontroller: valores, modelo de clave de acceso: MyStateKey y un valor transformador como se describe.
Como resultado, no tiene que hacer nada en la nl punta duplicada con la etiqueta, simplemente traduzca la cadena en Localizable.strings.
desde iOS 7 & Xcode 5 en adelante, debe evitar usar NSLocalizedString siempre que sea posible. El método preferido se llama 'localización base' y funciona a través de Storyboard. Le ahorrará mucho trabajo. Si busca la 'localización base' de Google, encontrará suficientes tutoriales para que pueda continuar
- 1. Unit Testing iPhone Code que usa NSLocalizedString
- 2. ¿Cómo usar API de LinkedIn en iPhone SDK?
- 3. ¿Cómo usar Shake API en iPhone SDK 3.0?
- 4. Cómo usar las API privadas de SDK de iPhone
- 5. iPhone SDK 3.2 y UIAppFonts
- 6. GameKit en iPhone SDK 3.0
- 7. iPhone sdk, excepto MPMediaItemCollection?
- 8. PDF Manipulación en iPhone SDK
- 9. ¿Qué versión de "Active SDK" de iPhone debería usar?
- 10. Cómo supervisar NSSystemClockDidChangeNotification en iPhone SDK
- 11. Número aleatorio en iphone sdk?
- 12. Cómo configurar uitableviewclick en el iphone sdk
- 13. en navigationbar en iPhone SDK
- 14. ¿Cómo extraer UIBarButtonItem Icons del iPhone SDK?
- 15. iPhone - "Open In" en SDK?
- 16. Reproducir sonidos en iPhone SDK?
- 17. SDK de iPhone - ¿Cómo serializar ABRecord?
- 18. Macro para NSLocalizedString
- 19. Xcode iPhone - Base SDK, diferencia Active SDK?
- 20. Cómo encontrar cadenas sin traducir. NSLocalizedString()
- 21. ICMP y el iPhone SDK
- 22. ¿Qué significa IB en IBAction, IBOutlet, etc.?
- 23. UITextField Autocompletar - SDK de iPhone
- 24. iPhone: ¿Cómo puedo usar gcov?
- 25. UIImage de CALayer - iPhone SDK
- 26. Transmitir transmisión de video en vivo iPhone SDK de iPhone
- 27. Posible usar variables y/o parámetros con NSLocalizedString?
- 28. ¿Cómo implementar "Cargar más registros" en TableView en iPhone SDK?
- 29. Iphone SDK: suena el sistema de grabación
- 30. Marcador de posición y NSLocalizedString