2011-12-01 19 views
12

Estoy traduciendo un proyecto de iOS al portugués y he creado un archivo pt.lproj/Localizable.strings, y he agregado NSLocalizedString() en el código fuente. ¡Todo funciona! Con un pequeño problema: las cadenas dentro de los archivos XIB no se traducen ... Sé que esto es por diseño.iOS Archivo Localizable.strings para archivos XIB?

He visto que el comando ibtool se puede utilizar para extraer cadenas de un archivo XIB llamado x y ponerlo en un archivo llamado x.strings ... pero mi pregunta es, ¿hay alguna manera de tirar de las cuerdas? de TODOS los archivos xib y ponerlos todos en un solo archivo .strings (por ejemplo, Localizable.strings? o incluso otro llamado XIBs.strings estaría bien?)

Respuesta

10

Tiene dos opciones para traducir archivos xib. Una es que conecte los elementos de la interfaz de usuario a las tomas de corriente y configure las cadenas en su método viewDidLoad usando las macros NSLocalizedString.

La segunda opción es proporcionar un xib separado para cada idioma que admita su aplicación. Usted no tiene que crear de forma manual, puede utilizar el comando ibtool (i asumir su idioma de origen es el Inglés y el objetivo es portugués):

ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib 

Recoger las cuerdas que se encuentran en su proyecto puede utilizar genstrings comando - sin embargo recomiendo el uso de este python script para recoger todas sus cadenas - que puede manejar muy bien la situación cuando se necesita añadir/eliminar las cadenas a su aplicación sin tener que traducir y/o manualmente fusionar todas las secuencias anteriores

Editar

Oh y encontré el article que aprendí este truco de

+0

Bien, ¡así que no hay una forma muy simple de hacerlo! Creo que voy a hacer la ruta de IBOutlets, ya que hay alrededor de 40 archivos de punta, pero algunas cadenas se comparten entre ellos (y queremos unos 10 idiomas, así que será mejor a la larga, creo!) Creo que Solo revisaremos los NIB y nos aseguraremos de que las etiquetas, etc., puedan acomodar un poco más de texto para otros idiomas (de lo contrario, el diseño será idéntico). ¡¡De todas formas, gracias por la ayuda!! – Javawag

0

Va a depender de la aplicación y el número de localizaciones, pero en general prefiero archivos .xib separados, porque el diseño puede cambiar. Coloque los archivos localizados en pt.lproj /.

3

Hice una categoría para hacer esto:

@implementation UIView (Localise) 

- (void)localise 
{ 
    [self.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { 
     [view localise]; 
     if ([view isKindOfClass:[UILabel class]]) { 
      UILabel *label = (UILabel *)view; 
      [label setText:NSLocalizedString(label.text, nil)]; 
     } 
    }]; 
} 

Luego, en sus puntos de vista:

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self localise]; 
} 

Tendrá que añadir soporte para otros elementos de interfaz de usuario (textField.placeholder = NSLocal .. .blah blah), pero eso hará el truco para UILabel y los niños.

Probablemente no sea muy bueno en cuanto a rendimiento, pero cumple su función.

Cuestiones relacionadas