Diferente localización de guiones charts por objective

Tengo un proyecto con 3 objectives. Cada objective necesita apoyar un solo idioma, pero el idioma no es el mismo para cada objective. Actualmente tengo

  • Objetivo 1 (es)
  • Objetivo 2 (es)
  • Objetivo 3 (pt)

La mayoría de mis cadenas están en un file localizable.strings, y simplemente me dirijo a un file diferente para cada objective. Sin embargo, hay varias cadenas en mi storyboard. Mi problema es que no parece posible crear diferentes files de localización de guiones charts para cada objective. Si cambio la orientación del file portugués, la orientación del file español cambiará automáticamente.

Una posible solución es duplicar cada Storyboard para cada objective, pero esto no escalará bien a medida que crezca el número de tagetes. También podría modificar todo el text con NSLocalizedString en cada ViewController, pero esto parece tedioso y propenso a errores.

¿Hay una mejor solución?

Localizaciones compartidas entre objectives

  1. Suponiendo que ya tiene varios idiomas en su proyecto , en Project Navigator , select su storyboard (diga Main.storyboard )
  2. En el Inspector de files , en localization , agregue inglés . Elija cadenas localizables que es el valor pnetworkingeterminado. Esto creará un Main.string para cada idioma y compartirá su Storyboard en todos los idiomas.

    Crear un Main.strings

  3. Simplemente haciendo clic en esa checkbox en el paso 2. agregará un Main.string (English) para ese idioma, específicamente para ese Main.Storyboard . Preste especial atención a la nueva jerarquía, estas no son Main.strings Localizable.strings sino Main.strings , derivadas de Main.storyboard :

    Nuevas localizaciones por Storyboard

  4. Localice en cada file de idioma su contenido de corazón.

Por ejemplo, comenzando con un UILabel cuyo post estaba en Esperanto , aparecerá en inglés cuando el dispositivo se ejecute en inglés :

 /* Class = "UILabel"; text = "Tiu tableĝo estas en Esperanto"; ObjectID = "acC-pA-eMt"; */ "acC-pA-eMt.text" = "This message is in English"; 

Comience aquí para agregar varios idiomas a su proyecto:

En caso de que necesite agregar más idiomas, siga estos pasos:

  1. En Project Navigator , selecciona tu proyecto
  2. En el Proyecto y la Lista de destino , select, una vez más, el Proyecto

    Elegir el proyecto

  3. Seleccione la pestaña Información
  4. En Localizaciones , mantenga Utilizar internationalization de base (a less que su interfaz de usuario en sí misma cambie de idioma)
  5. Haz clic + , selecciona un nuevo idioma. En el cuadro de dialog que se le presenta, select cada Guión gráfico para el que desee tener múltiples localizaciones.

    Elige Storyboards para localizar

Si se perdió Storyboards en el paso 5. simplemente puede agregar un nuevo idioma a ese storyboard siguiendo los pasos en Suponiendo que ya tiene varios idiomas .

Tablero de guiones compartido a través de objectives

Si bien esta respuesta es el enfoque preferido, puede asignar diferentes localizaciones de Storyboard a diferentes objectives, mientras comparte el mismo Storyboard en todos los objectives.

Requisitos previos:

Sigue estas instrucciones en esta respuesta .

Concepto:

Desea tener el Main.storyboard en cada objective, pero un Main.strings diferente en cada objective. Además, no desea que todas las localizaciones estén disponibles en cada objective.

Para lograr esto, debe manipular el .lproj directamente, un process que se oculta cuando simplemente usa el Inspector de files.

Paso a paso:

  1. Cree todas las piezas siguiendo los pasos de esta respuesta .
  2. Desde cualquier objective, elimine Main.storyboard . Por supuesto, selecciona Eliminar reverencia para mantener el storyboard alnetworkingedor.
  3. En el Finder, ubique Base.lproj. Arrastre y suelte Main.storyboard en su proyecto y select cada objective.
  4. En el Inspector de files, asegúrese de que los idiomas no estén seleccionados y de que todavía esté usando Localizable Strings . introduzca la descripción de la imagen aquí
  5. En el Finder de nuevo, busque en.lproj , es.lproj , fr.lproj , etc. Observe que cada uno contiene una versión de Main.strings . Arrastra estos .lproj (los directorys completos) a tu proyecto. Esta vez, no select ningún objective
  6. Una última vez, en el inspector de files, asocie cada Main.strings al objective deseado. Repita para cada .strings . introduzca la descripción de la imagen aquí

Conclusión

Al desacoplar .lproj del .storyboard en Project Navigator, puede asociar files y objectives libremente.

Manifestación:

Véalo trabajando con un objective francés, en un dispositivo con el idioma configurado en Français en Configuración:

Ejemplo francés en iPhone 4


► Encuentra esta solución en GitHub y detalles adicionales sobre Swift Recipes .

Todo lo que necesita: crear un espacio de trabajo xcode común para su aplicación, luego crear duplicates del file xcodeproj principal para su set de idiomas y establecer objectives diferentes para todos ellos, y luego puede configurar el idioma para las configuraciones de proyectos individuales en xcodeproj's nuevos. También es fácil de ajustar la fase de creación 'Copy Bundle Resourses' y otros. Yo uso este metodo Si tiene un locking de Xcode durante la adición de un proyecto en el área de trabajo: abra el proyecto con Xcode, cambie el nombre y cambie el nombre o duplique los objectives (creo que los mismos nombres causan este problema).