web-dev-qa-db-fra.com

Localized Strings Xcode 4 ... Échec de la validation de l'erreur de copie du fichier .strings

Comment définir des chaînes localisées dans Xcode 4?

J'ai supposé que je pouvais simplement ajouter des langues à InfoPlist.strings en utilisant la propriété "Localisation" (inspecteur de fichiers, panneau de droite).

... puis tapez les "key" = "value" s dans chaque version localisée.

Mais je ne peux pas construire le projet. Je reçois cette erreur:

Échec de la validation des erreurs de copie du fichier .strings: les données n'ont pas pu être lues car elles ont été endommagées.

La conversion de l'encodage de texte en UTF 16 ne résout pas le problème. Pas plus que quitter Xcode et le redémarrer.

Q1: Comment puis-je remédier à ces erreurs de construction?

Par un coup de chance, j'ai réussi à obtenir une application de test pour exécuter en ajoutant un InfoPlist.strings (français) et (anglais). Je n'ai pas eu l'erreur sur le fichier de chaînes français, mais je l'ai fait avec l'anglais. J'ai donc laissé la version anglaise seule, et j'ai simplement mis un paramètre dans la version française. Cependant, dans le simulateur, réglé sur français - le paramètre n'a pas été saisi. Il est revenu à la valeur par défaut spécifiée dans NSLocalizedString ()

Q2: Comment le faire fonctionner même si les erreurs de build sont corrigées?

65
user433579

Pourrait être aussi simple qu'un point-virgule manquant à la fin de la ligne.

237
Tyler A.

J'ai eu le même problème pour trouver les erreurs dans le fichier de localisation ...

Utilisez simplement l'outil plutil dans le terminal pour convertir le fichier et vous obtiendrez un message d'erreur correct avec le numéro de ligne.

plutil -lint Localizable.strings

Réponse

plutil [74058: 707] CFPropertyListCreateFromXMLData (): analyseur de plist à l'ancienne: point-virgule manquant dans le dictionnaire à la ligne 422. L'analyse sera abandonnée. Interrompez sur _CFPropertyListMissingSemicolon pour déboguer. Localizable.strings: Caractère inattendu "à la ligne 1

98
TomTom

oui je viens de parcourir 500 traductions

notez le KISS dans la deuxième chaîne est entre guillemets doubles qui se trouvent DANS UNE autre ERREUR DE CITATIONS DOUBLES

"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers "KISS" müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";

C'est acceptable

"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers KISS müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";

tel quel (remplacer par des guillemets simples DANS LE DOUBLE)

"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers 'KISS' müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";

CONSEIL UTILISEZ UNE RECHERCHE BINAIRE pour trouver la ligne incriminée.

  1. récupérer les fichiers localisés du traducteur.
  2. copiez tous les Loclaizable.strings dans les dossiers localisés de votre projet.
  3. Ouvrez XCODE
  4. Tout nettoyer - dans l'appareil iOS/tous les simulateurs
  5. Construire
  6. Échec de la validation des erreurs de copie du fichier .strings: les données n'ont pas pu être lues car elles ont été endommagées.
  7. Ouvrez le navigateur de journaux
  8. Voir laquelle des traductions est corrompue.
  9. J'ai ouvert le Localizable.strings dans TextWrangler En bas de la barre d'outils, Translator avait renvoyé le fichier UTF-16 comme

UTF-16 Little Endian l'a changé à nouveau en "UTF-16" 10. Build/Build nettoyé MÊME ERREUR

Quelque part dans le fichier se trouve

Point-virgule manquant?

/* popup message */
"Save mix" = "Enregistrer le mixage";

/* popup message */
"Save mix" = "Enregistrer le mixage"

"Extra" guillemets doubles "entre guillemets doubles"

FAUX

/* popup message */
"Save mix" = "Enregistrer le "mix" age"

DROITE

/* popup message */
"Save mix" = "Enregistrer le mixage"

AUSSI DROIT

/* popup message */
"Save mix" = "Enregistrer le 'mix'age"
  • rappelez-vous qu'il peut y avoir plus d'une erreur dans un fichier J'ai trouvé "KISS" entre guillemets doubles à deux endroits
14
brian.clear

Vérifiez l'encodage de votre fichier. Cela est souvent causé par des caractères étendus (comme des caractères accentués) et un codage non UTF. En particulier, il y a un bogue dans XCode 4 que si vous copiez des caractères accentués dans un fichier de chaînes à partir de Safari, il sera ensuite enregistré sous Western Mac OS Roman.

8
Dan Bennett

C'est dommage que le vérificateur de syntaxe de XCode ne puisse pas comprendre cela.

Vous pouvez également copier le texte dans Text Wrangler (quelque chose que je fais après avoir reçu un fichier d'un traducteur) pour vérifier les chaînes correctement entre guillemets ou exécuter une expression régulière vérifiant les points-virgules. La coloration de la syntaxe dans Text Wrangler affichera des chaînes mal citées (ou échappées) là où l'éditeur de chaînes de XCode ne le fait pas actuellement.

7
MOK9

Dans mon cas, plutil -lint Localizable.strings n'a pas aidé car le message d'erreur qu'il a généré était "Unexpected character " at line 1 "lorsque l'erreur réelle était un au lieu d'un " à la ligne 2340.

4
BenRW

Dans mon cas, c'était un problème de signe "devis" copié-collé à partir d'un site Web, qui n'a pas été accepté.

J'aurais dû détecter que la coloration syntaxique ne fonctionnait pas, mais je viens de lire la source "signe de citation, clé, signe de citation, signe d'égalité, signe de citation, valeur, signe de citation ... ouais ok".

2
Kheldar

Si vous utilisez des guillemets doubles "" dans votre localisation, n'oubliez pas de les échapper en utilisant une barre oblique inverse.

2
Abdalrahman Shatou

Il faut vérifier la syntaxe comme celle-ci

"Recharge_Data" = "Data";

1) "" devrait être là au bon endroit.

2) = doit être vérifié.

3); devrait être là à la fin de la déclaration.

1
Nico

J'aurais le même problème pour un gros fichier localisé à partir d'une heure et appliquer toutes les étapes ci-dessus ne résoudra pas mon problème, enfin ce que je fais c'est de diviser le fichier de localisation en quelques plages (parties), disons partie-a, b , c ... et couper ces chaînes du fichier, et les conserver dans un fichier texte, reconstruire le projet, à moins que et jusqu'à ce que j'arrive au point où il ne restait que la partie k, j'ai constaté que par erreur j'ai appuyé sur - f sur mon clavier..fewww! il a résolu. Je sais que ce n'est pas une solution mais peut aider quelqu'un comme moi :)

0
Hemang

Mon ami a fait la traduction pour moi dans Windows. J'ai trouvé que changer l'encodage n'aide pas, alors ce que j'ai fait: j'ai commenté toutes les chaînes, puis j'ai décommenté quelques-unes et appuyé sur cmd-B, pour savoir quelles chaînes avaient des problèmes. Ensuite, j'ai réécrit les chaînes de problème manuellement et après cela a fonctionné.

0
Shmidt

J'ai eu le même problème. J'avais un fichier de localisation d'environ 60 pages, et je n'en avais qu'un "trop" - j'ai mis du temps à le repérer.

0
user1607498