2009-07-07 17 views

Respuesta

11

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.

3

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.

2

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.

0

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