strings multi localizable language app objective-c ios nslocalizedstring uistoryboard

objective-c - multi - nslocalizedstring swift



Cómo localizar un storyboard de iOS (7)

A partir de iOS 6, puede decidir utilizar Base Internacionalización: todos los archivos de guión gráfico y xib / nib existen solo una vez en una carpeta llamada Base.lproj. La localización de los elementos de la GUI se coloca en archivos .strings relacionados en cada directorio de localización.

Por ejemplo, "MainStoryboard.storyboard" se colocará en Base.lproj. Un archivo asociado llamado "MainStoryboard.strings" se coloca en en.lproj y en cualquier localización que aplique.

¡Esto es realmente muy atractivo, especialmente en combinación con restricciones de diseño!

Tengo un guión gráfico para iPhone con algunas vistas. Por ejemplo, un título de elementos de navegación se llama News , que debe traducirse a otros idiomas.

Cuando agrego una nueva localización a mi guión gráfico, se crea un duplicado de mi guión gráfico actual para el nuevo idioma. Aquí puedo cambiar el título del elemento de navegación, pero para mí no me parece muy útil. ¿Qué pasa si mi guión gráfico contiene 100 vistas y necesito admitir 10 idiomas? Si necesito cambiar algo en mi guión gráfico original, tengo que hacer los mismos cambios para todos los idiomas. Eso parece muy extraño. ¿En qué situaciones puede ser útil?

¿Qué puedo hacer en lugar de eso? ¿Debo tener solo el guión gráfico en inglés y traducir manualmente cada elemento en ViewController utilizando NSLocalizedString ?


En iOS 6 hay una configuración de Proyecto en la pestaña Información que dice "Usar Base Internacionalización". Si marca la casilla, extraerá todas las cadenas del Guión gráfico y los llevará a los archivos .strings internacionalizados.

De esta manera no tienes que tener varias copias del Storyboard.



Para aplicaciones con un objetivo de implementación de iOS 5 y guiones gráficos, uso algo como esto para localizar mis pestañas donde mi primer ViewController en un guión gráfico es un UITabBarController :

- (void)applicationDidFinishLaunching:(UIApplication *)application { // ... if ([self.window.rootViewController isKindOfClass:UITabBarController.class]) { UITabBarController *tabBarController = (UITabBarController *) self.window.rootViewController; // Localize tab items NSArray *tabBarItems = tabBarController.tabBar.items; [tabBarItems enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(UITabBarItem *item, NSUInteger tabIndex, BOOL *stop) { NSString *keyName = [NSString stringWithFormat:@"tabBarItem%i", tabIndex]; item.title = NSLocalizedString(keyName, @"TabBarItems"); }]; } else { // The root view controller is not the UITTabBarController } // ... }

y tener algo como esto en mis archivos Localizable.strings :

// MARK: TabBar "tabBarItem0" = "My First Tab Label"; "tabBarItem1" = "My Second Tab Label"; "tabBarItem2" = "My Third Tab Label";


Puede encontrar este video tutorial aquí útil:

http://www.youtube.com/watch?v=cF1Rf02QvZQ

El enfoque es tener un guión gráfico separado para cada idioma para localizar, luego deje que un script se ocupe de propagar los cambios que realice en el guión gráfico original para todos los demás idiomas.


Puede hacer la localización cambiando los títulos de los elementos de la IU en el código:

self.title = NSLocalizedString("News", nil);

Si desea localizar su aplicación en holandés, por ejemplo, tendría esto en Dutch.lproj/Localizable.strings :

"News" = "Nieuws";

A continuación, puede hacer esto para cada elemento de UI e idioma.


También puede encontrar útil la localización de Polyglot. En lugar de llamar a NSLocalizedString () en el código, puede especificar directamente la clave en su Guión gráfico. Puede evitar salidas innecesarias y reducir el código de placa de caldera.

https://github.com/negusoft/Polyglot