¿Cómo localizar una cadena dentro del archivo info.plist de iOS?

259

Como sabrás, el iOS 8 requiere la clave NSLocationWhenInUseUsageDescription para usar la ubicación del usuario. He agregado esta clave y alguna información general en mi lista de información. ingrese la descripción de la imagen aquí

¿Cómo puedo usar la cadena de traducción dentro del archivo plist?

- Actualización -

Ya tengo una cadena localizable. Me pregunto si puedo usar algo como NSLocalizedString (MYSTRING, nil) dentro de la cadena de plist. Sé que puedo crear múltiples archivos de info.plist para la localización, pero me preguntaba si podría haber una manera más fácil.

Soheil
fuente
¿Alguna vez resolvió esto, estoy luchando para que NSLocationWhenInUseUsageDescription también se localice?
Oliver Pearmain

Respuestas:

490

Debe usar el InfoPlist.stringsarchivo para localizar valores de Info.plist. Para hacer esto, vaya a File->New->File, elija Strings Fileen la Resourcepestaña de iOS, asígnele un nombre InfoPlisty cree. Abra e inserte los Info.plistvalores que desea localizar como:

NSLocationWhenInUseUsageDescription = "Description of this";

Ahora puede localizar InfoPlist.stringsarchivos con traducciones. ¡Buena suerte!

EDITAR:

seleccione las opciones de localización o habilite la localización si es necesario,

editor del lado derecho

deberías poder ver el archivo también en el editor del lado izquierdo.

editor del lado izquierdo

EDITAR:

Aquí está la documentación oficial para la Info.plistlocalización de claves.

Créditos a Marco , ¡gracias por incluir las fotos en esta respuesta!

Fahri Azimov
fuente
15
Después de crear el archivo de cadenas, ¿necesita incluir también la clave en el archivo Info.plist, o es seguro eliminarlo desde allí?
rounak
11
Consejo: Use exactamente el nombre "InfoPlist.strings" y nada más. Por ejemplo, mi archivo infoplist original se llamaba de otra manera, pero necesitaba usar este nombre exactamente para que funcione.
Sjoerd realiza el
22
Al probar las localizaciones en el simulador. Tuve que cambiar el idioma en el simulador en sí, no solo el idioma en el objetivo de xcode. Solo una advertencia para cualquier otra persona.
John Webb el
10
el uso correcto es keyname = "your text"; por ejemplo: NSLocationWhenInUseUsageDescription = "su texto"
Magurizio
10
Precaución: la clave en este archivo no debe tener comillas, que es diferente con la localización normal. por ejemplo: NSMicrophoneUsageDescription = "su descripción";
Yuchao Zhou
33

Todo lo anterior no funcionó para mí (XCode 7.3), así que leí la referencia de Apple sobre cómo hacerlo, y es mucho más simple que lo descrito anteriormente. De acuerdo con Apple:

Los valores localizados no se almacenan en el archivo Info.plist en sí. En su lugar, almacena los valores para una localización particular en un archivo de cadenas con el nombre InfoPlist.strings. Coloca este archivo en el mismo directorio de proyecto específico del idioma que utiliza para almacenar otros recursos para la misma localización.

En consecuencia, creé un archivo de cadena llamado InfoPlist.strings y lo coloqué en la carpeta xx.lproj del lenguaje "xx" (y lo agregué al proyecto usando Archivo-> Agregar archivos a ...). Eso es. No se necesita la clave "Los recursos localizados se pueden mezclar" = SÍ, y no se necesita InfoPlist.strings en base.lproj o en.lproj.

La aplicación utiliza el valor-clave Info.plist como valor predeterminado si no puede encontrar una clave en el archivo específico del idioma. Por lo tanto, pongo mi valor en inglés en el archivo Info.plist y el traducido en el archivo específico del idioma, probado y todo funciona.

En particular, no hay necesidad de localizar InfoPlist.strings (que crea una versión del archivo en base.lproj, en.lroj y xx.lproj), y en mi caso ir de esa manera no funcionó.

Zvi
fuente
2
¿Por qué no incluyó el enlace al documento apropiado?
Jurásico
3
Aquí el enlace a la página relevante del documento de Apple en caso de que alguien esté interesado: developer.apple.com/library/archive/documentation/General/…
dobla el
y como decidimos que xx? por ejemplo para ingles puede ser en, En, Eng, English etc? Lo siento si es una pregunta estúpida porque soy un principiante
Awais Nasir
Su respuesta funcionó para mí, excepto en el escenario de idioma de reserva, la aplicación está obteniendo el idioma de reserva siempre el idioma utilizado anteriormente y no el inglés, aunque mi valor de inglés está presente en el archivo Info.plist, también he intentado base.lproj también
Awais Nasir
19

Si algo no funciona, asegúrese de agregar:

"Los recursos localizados se pueden mezclar" = SÍ

en la lista de información. En mi caso, los archivos InfoPlist.strings fueron ignorados.

tuvok
fuente
15

Consejos

  1. Recuerde que el simulador de iOS explota por defecto el idioma de su sistema. Cambie también el idioma (y la región) en la configuración del simulador de iOS para probar sus traducciones.

  2. La cadena de localización (consulte los documentos de Apple aquí ) debe ser

    NSLocationWhenInUseUsageDescription = "Description of this";

    y no (con la cita "...")

    "NSLocationWhenInUseUsageDescription" = "Description of this";
Giuseppe Beccari
fuente
Adiciones valiosas, pero creo que esto debería ser un comentario debajo de la respuesta respectiva, no una nueva respuesta. También tenga en cuenta que "363" no es un identificador de publicación, sino el número de votos que tiene la respuesta (el número ha cambiado desde entonces).
John J. Camilleri
77
No tengo 50 reputación para agregar un comentario allí.
Giuseppe Beccari
No importa si usa comillas "..." alrededor de la tecla, por ejemplo: ( "NSLocationWhenInUseUsageDescription"="description"es válido). Puede ser con o sin.
mluisbrown
12

Recomiendo encarecidamente leer las guías de Apple y ver los recursos de la WWDC que se enumeran aquí: Temas de internacionalización y localización

Para responder específicamente a su pregunta, cuando agrega un nuevo idioma a su proyecto ingrese la descripción de la imagen aquí, tiene la oportunidad de elegir qué archivos de InfoPlist incluir (si tiene múltiples objetivos, tendrá múltiples archivos de información). Todo lo que necesita hacer para obtener la siguiente pantalla es presionar el + debajo de Localizaciones y elegir un nuevo idioma para agregar soporte. ingrese la descripción de la imagen aquí

Una vez que haya agregado, creará los archivos de cadena necesarios en los directorios lproj apropiados para el idioma dado.

--EDITAR--

Para ser claros, iOS cambiará la cadena de su archivo Plist en función del idioma seleccionado actualmente por el usuario utilizando la clave de la entrada plist como clave en el archivo de cadenas localizado.

Matt S.
fuente
3
Traducir todo el plist por una sola tecla es una exageración. Encuentre más información aquí: bit.ly/1yBUTru
RGML
2
Simplemente no es cierto para XCode 9. Nunca solicita la localización de plist cuando agrega un nuevo idioma.
Tom
Tendré que investigar eso para Xcode 9, todavía no he tenido la oportunidad de probar en el nuevo Xcode.
Matt S.
11

Paso a paso, localice Info.plist:

  1. Encuentra en el código X la carpeta Recursos (se coloca en la raíz)
  2. Seleccione la carpeta Recursos
  3. Luego presione el menú principal Archivo-> Nuevo-> Archivo ...
  4. Seleccione en la sección "Recurso" Archivo de cadenas y presione Siguiente
  5. Entonces en Save As campo, escriba InfoPlist SOLAMENTE ("I" mayúscula y "P" mayúscula)
  6. Luego presione Crear
  7. Luego seleccione el archivo InfoPlist.strings que creó en la carpeta Recursos y presione en el menú derecho el botón "Localizar"
  8. Luego selecciona el proyecto desde el navegador de proyectos y selecciona el proyecto de la lista de proyectos
  9. En la pestaña de información en la parte inferior, puede usar el idioma que desee (hay en la sección Localizaciones)
  10. El idioma que puede ver en la carpeta de recursos
  11. Para localizar los valores ("clave") del archivo info.plist, puede abrir con un editor de texto y obtener todas las claves que desea localizar
  12. Escribe cualquier clave como ejemplo en cualquier InfoPlist.strings como el ejemplo anterior

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

¡Eso es todo trabajo y tiene que localizar su archivo info.plist!

Costas Bakoulias
fuente
4

Para cualquiera que experimente el problema de que no se incluya info.plist al intentar agregar localizaciones, como en Xcode 9.

Debe hacer que la info.plist sea localizable al ingresar y hacer clic en el botón de localización en el inspector de archivos, como se muestra a continuación.

El archivo info.plist se incluirá en los recursos del archivo para cuando vaya a agregar nuevas localizaciones.

ingrese la descripción de la imagen aquí

Eduardo
fuente
3
¿Encontró algún problema? No puedo construir proyecto cuando agrego dos idiomas a la localización desde Xcode está diciendo "El info.plist archivo no se puede abrir porque no existe tal archivo.
mkkrolik
2
@mkkrolik Estoy teniendo el mismo problema ahora. ¿Has encontrado una solución?
Todanley
@Todanley omite esta solución, no me funciona. Utilice InfoPlist.strings en su lugar.
mkkrolik
@mkkrolik Gracias, eso funciona. Y también al probar con el simulador, tuve que cambiar la configuración de idioma del simulador en lugar de la de mi objetivo para que funcione.
Todanley
3

Como dice RGML, puede crear un InfoPlist.strings, localizarlo y luego agregar su clave y el valor de esta manera: "NSLocationWhenInUseUsageDescription" = "¡Ayuda para localizarme!";

Agregará la clave a su info.plist para el idioma especificado.

Gorra
fuente
0

En mi caso, todo estaba configurado correctamente pero aún no se encontró el archivo InfoPlist.strings.

Lo único que realmente funcionó fue eliminar y agregar nuevamente los archivos InfoPlist.strings al proyecto.

d.ennis
fuente
0

En mi caso, la localización no funcionó debido al símbolo '-' en el nombre. Ejemplo: "aero-Info.plist" Y archivos localizados: "aero-InfoPlist.strings" y "aeroInfoPlist.strings" no funcionaron.

Mike Glukhov
fuente
0

Al usar el InfoPlist.stringsarchivo (en XCode, debe colocarse al lado del Info.plistarchivo; la ubicación real del archivo puede estar en cualquier parte del proyecto probablemente

Ver en XCode

) tenga cuidado de usar el nombre corto de la clave para la traducción.

Estaba tratando de usar Privacy - Camera Usage Description, pero la clave de trabajo esNSCameraUsageDescription

Reloj de arena
fuente