2011-07-15 10 views
5

He encontrado un problema extraño con las cadenas localizadas. Solo tengo un 'Localizable.strings' en mi carpeta 'en.lproj' y funciona bien. todas las cadenas se muestran en el dispositivo. pero la próxima vez que lo compile y ejecute, muestra solo el ID de las cadenas. incluso si no cambio nada y solo hago clic en compilar & depurar. y la próxima vez funciona bien nuevamente y la próxima vez se muestra con ID.xcode cadena localizada no cargada

¿alguien sabe por qué sucede esto? es un poco molesto que siempre tenga que construir dos veces.

+0

¿Hay algún error? De alguna manera, el archivo no se copia. –

+0

no, no hay ningún mensaje de error. – boreas

Respuesta

3

Compruebe si tiene más de una Localizable.strings en su proyecto. Fusionarlos en uno lo resolvió para mí. (Marque cualquier código externo se utiliza, por ejemplo, ShareKit)

+0

Esto no resolvería el problema si tiene varios idiomas. Necesita varias carpetas .lproj que contengan un archivo "Localized.strings" (+ InfoPlist.strings si lo desea) para cada idioma. Si los fusionó a todos, tendría numerosas claves duplicadas. – GtotheB

+0

@GtotheB Si te entiendo correctamente, ¿quieres unir todos los idiomas? No, no hagas eso! Fusiona solo los archivos que usan el MISMO idioma (por ejemplo, fusiona Localizable.strings de todos los en.lproj juntos y todos los Localizable.strings de todos los de.lproj por separado) – Reggian

+0

Supuse que eso es lo que querías decir. Sí, fusionar tablas de lenguaje arrojará malos resultados. Pero, combinar tablas (por ejemplo) en inglés también podría dar como resultado claves duplicadas. Por lo tanto, si se realiza como tal, asegúrese de que las claves sean únicas en toda la tabla única [ahora]. – GtotheB

4

Mi solución es, en el fondo:

He estado corriendo en el mismo problema: carreras alternas producen traducciones correctas, entonces incorrectas (sólo para Inglés sin embargo).

Adición "-NSShowNonLocalizedStrings sí" como argumento para la aplicación produjo:

Localizable string "MyKey" not found in strings table "Localizable" of bundle CFBundle 

tanto, he intentado cargar el archivo de claves directamente desde el paquete como una cadena y deshacerse de ellos. Bueno, las veces que NO funcionó correctamente, mostraba un montón de mensajes integrados de iOS. Entonces, fui al archivo APP que se creó, abrí el contenido del paquete y vi el archivo en.lproj/Localizable.strings ... ¡¡y listo !!! El archivo se ha llenado con los pares clave/valor de Apple iOS. En la siguiente compilación, se llenó como se esperaba.

Por supuesto, esto no tiene nada que ver con la codificación de los archivos (que debe ser UTF-16). No he podido encontrar nada con la mención de este problema específico.

Mi solución:

he copiado el contenido de los Localizable.strings inglés legítimos archivo del paquete APP (no de mi fuente) en un archivo XML (cuando se compila, el archivo se convierten en .strings XML) y agregado a mi proyecto. A continuación, cargué este archivo en un diccionario al inicio, y si la llamada a NSLocalizedString devolvió la clave en lugar del valor, hice una búsqueda en el diccionario que cargué. En teoría, podrías hacer esto para todos los idiomas, pero solo estaba teniendo el problema con el inglés.

Sí, no es la respuesta al problema, pero es una solución.

+0

¿este problema ocurre solo en el simulador? o en simulador y dispositivo? – JAHelia

+0

Estaba ocurriendo en ambos. Sin embargo, finalmente identifiqué el problema. Lo que apareció como datos de iOS era en realidad una tabla de localización en inglés bien escondida para una biblioteca de terceros.Por qué Xcode alteró entre las dos tablas me supera, pero eliminarlo resolvió el problema. – GtotheB

Cuestiones relacionadas