Xcode 6.3.2 o 6.4beta La localización no pudo leer un file de cadenas

Sí, sé que hay muchas discusiones sobre este fracaso. Pero después de echarles un vistazo, creo que lo que tengo ahora es diferente.

Aquí, Error mientras "Exportar para localización .." Xcode 6.3 , dice que la cita simple (') debería replacese como (\') en el file de cadenas.

Aquí, la localización Xcode 6 no pudo leer un file de cadenas , dice que el NSLocalizedString debería comentarse (si lo entiendo bien).

Para probar el problema, creé un nuevo proyecto con 6.3.2 y 6.4 (6E23). Puedo tener comillas simples en el file de cadenas, pero siempre que haya NSLocalizedString (por ejemplo, var str = NSLocalizedString("Hi", tableName: nil, bundle: NSBundle.mainBundle(), value: "Hi", comment: "Hi") ) en el file de controller de vista, el Xcode siempre aparece con introduzca la descripción de la imagen aquí

Entonces yo hice

 xcodebuild -exportLocalizations -localizationPath ./xliff -project testtest.xcodeproj -exportLanguage en 

y me sale

Entrada incorrecta en el file ViewController.swift (línea = 26): El argumento no es una cadena literal.

2015-06-15 11: 08: 22.177 xcodebuild [31272: 1150546]

[MT] DVTAssertions: Advertencia en /SourceCache/IDEFrameworks/IDEFrameworks-7718/IDEFoundation/Localization/IDELocalizationWork.m:434

Detalles: Error al leer el file de cadenas "/var/folders/1s/_d08hx4j2gn9t6wlrc5_7gq00000gn/T/Xcode3SourceStringsAdaptor-48CAE246-EBA5-4326-B3C5-B5032A4027D8/Localizable.strings", error subyacente:

Los datos no se pudieron leer porque no están en el formatting correcto.

Objeto: IDELocalizationWork

Método: + readStringsWorkForContext:

Tema: {número = 1, nombre = principal} Presente un error en http://bugreport.apple.com con este post de advertencia y cualquier información útil que pueda proporcionar.

xcodebuild: error: la localización no pudo leer un file de cadenas

Este error persiste incluso si comento la línea 26, que es

 var str = NSLocalizedString("Hi", tableName: nil, bundle: NSBundle.mainBundle(), value: "Hi", comment: "Hi") 

Pero si elimino la línea 26, el error desaparecerá.

Entonces, guese, el generador XLIFF de alguna manera no permite que "NSLocalizedString" aparezca en absoluto?

¿Alguna vez has encontrado esto como lo hice?

Hay varios problemas que causan este error:

1. Archivo vacío Localizable.strings .

Solución: simplemente agregue comentario

  /** no localizable strings **/ 

a este file y el problema se ha ido.

2. El segundo problema en el símbolo de escape: \ (a veces)

Solución: quítelo y descubre algo con tus caracteres especiales. Y probablemente su process de export se completará sin errores.

También \ produce otro error:

Sting para exportar:

 "ACCOUNT" = "Foo\\\'Bar\'bazz\""; 

Cadena después de importar un file recientemente exportado:

 "ACCOUNT" = "\\''"; 

Prima:

¡Si intentas importar la localización durante la export, Xcode se bloqueará !

Bienvenido al infierno de localización de Apple!


PD

  • Todavía real al less para la Version 6.4 (6E35b)
  • Informe de errores de openradar relacionado

Tengo el mismo problema con Swift 3 en Xcode 8.1 porque tenía una extensión

 func localized() -> String { return NSLocalizedString(self, comment: self) } 

Lo arreglé eliminando la extensión y usando directamente NSLocalizedString ("", comentario: ""). Realmente no sé por qué la extensión no funcionó cuando bash exportar el file .xliff.

He visto este problema en Xcode 6.4 (6E35b). Parece que está relacionado con el bundle: NSBundle.mainBundle() inclusión bundle: NSBundle.mainBundle() en la llamada de método.

Tomando ese parámetro (tiene un valor pnetworkingeterminado) aparece para corregir el error.

Entonces, cambia de esto:

var str = NSLocalizedString("Hi", tableName: nil, bundle: NSBundle.mainBundle(), value: "Hi", comment: "Hi")

a esto:

var str = NSLocalizedString("Hi", tableName: nil, value: "Hi", comment: "Hi")

Obviamente, este es un error en el escáner de localización de cadenas de Xcode (creo que es un enfoque ingenuo donde esperan que las personas solo usen NSLocalizedString(key, comment: comment) y, por lo tanto, solo esperan cadenas como parameters para ese método).

La razón por la que obtiene el mismo comportamiento, ya sea que la línea sea o no comentada, es que la detección de cadena localizada no excluye los comentarios y, por lo tanto, su llamada NSLocaluzedString se descubre y, por lo tanto, su file .strings se procesa y así sucesivamente.

Lo he solucionado simplemente networkingefiniendo la function NSLocalizedString así:

 public func NSLocalizedString(key: String, tableName: String? = nil, bundle: NSBundle = NSBundle.mainBundle(), value: String = "", comment: String) -> String { return yourBundleHere.localizedStringForKey(key, value: value, table: tableName) } 

Reemplace yourBundleHere con NSBundle.mainBundle() o lo que quiera.

Tengo el mismo problema, y ​​fue porque utilicé un apóstrofe charachter 'en formatting unicode como este \ U0027 y cuando reemplacé el u char a pequeño \ u0027 el post de error desapareció.

Además, no debe comentar NSLocalizedString porque cuelga el analizador, debe eliminarlo del código.