web-dev-qa-db-fra.com

Fichiers localisables.strings .. dans xcode4

Dans xcode4, (j'ai utilisé la version 4.0.1 jusqu'à maintenant et téléchargé la version 4.0.2 hier.) J'ai créé des fichiers Localizable.string et compilé mon projet. (Comme vous le savez, mon code source Utilise la fonction macro NSLocalizedString.)

Mais mon projet ne compile pas avec le fichier Localizable.string. Si je modifie tout le codedans ce fichier en commentaires (comme ceci -> //), mon projet est complètement compilé.

Par conséquent, le problème concerne les fichiers Localizable.string. J'ai cherché à ce sujet sur Google, J'ai constaté que les fichiers UTF-8 (Localizable.string) sont remplacés par UTF-16. Et même si j’ai essayé cela… ça n’a pas fonctionné aussi.

Sur ce moment, beaucoup de gens essayent d'utiliser les fichiers Localizable.string. Mais ils pourraient peut-être résoudre ce problème que je ne peux pas résoudre. Parce qu'il n'y a pas de questions sur ce problème.

=============================================== =============

Dans le fichier Localizable.string,

"LOCAL_APP_GRADE" = "Base"

"LOCAL_APP_LAST_UPDATED_DATE" = "2011/04/20"

"LOCAL_MAIN_MENU_TITLE" = "Menu principal"

Dans mon code source,

NSLocalizedString( @"LOCAL_MAIN_MENU_TITLE", @"" );

Message d'erreur,

Copier le fichier .strings Erreur Validation failed: Les données n'ont pas pu être lues parce qu'il a été corrompu.

39
MonsterK

Je suppose que Xcode 4 ici. Vérifiez ce qui est indiqué pour l’encodage sur chacun des fichiers Localization.string de l’inspecteur de fichiers. Cette erreur était due à la lecture de l'un des fichiers au format Mac Roman au lieu de UTF-16. Une fois que j'ai changé l'encodage, l'avertissement est parti. Au début, ce qui me rendait dingue, c'est que l'avertissement ne se produisait que dans Xcode 4. Xcode 3 ne l'a pas donné.

Vous avez également un problème avec le formatage de votre fichier .string. Toutes les lignes doivent se terminer par un point-virgule.

"LOCAL_APP_GRADE" = "Basic";
"LOCAL_APP_LAST_UPDATED_DATE" = "2011/04/20";
"LOCAL_MAIN_MENU_TITLE" = "Main Menu"; 

Je ne pense pas que ce soit la cause de l'avertissement cependant. Au moins, je n'ai jamais vu d'avertissement à ce sujet. Il ne se manifeste généralement au moment de l'exécution que lorsque LOCAL_MAIN_MENU_TITLE apparaît dans l'application au lieu du menu principal. Ce serait bien si le processus de construction vérifiait bien les points-virgules. Il est facile de manquer d'ajouter un lors de l'édition des fichiers.

93
McCygnus

Par pomme:

Si vous rencontrez des problèmes lors des tests et que vous trouvez que les fonctions et les macros pour récupérer des chaînes retournent toujours la même clé (par opposition à la valeur traduite), exécutez l'outil/usr/bin/plutil sur votre fichier de chaînes. Un fichier de chaînes est essentiellement un fichier de liste de propriétés formaté d'une manière spéciale. Exécuter plutil avec l'option -lint peut découvrez les caractères cachés ou autres erreurs empêchant les chaînes d'être récupéré correctement.

Lancez une fenêtre de console, allez dans votre dossier de projet et faites:

/usr/bin/plutil -lint ja.lproj/Localizable.strings

(évidemment remplacer le nom du dossier de la langue correcte). Cela vous dira exactement où est le problème!

64
Ser Pounce

Toutes les lignes du fichier .strings doivent se terminer par un point-virgule. Cela a fonctionné pour moi.

18
Muhammad_Awaab

J'ai eu le même problème aujourd'hui après avoir importé les localisations d'Apple Notes et la cause était vraiment subtile. Les guillemets standard ont été échangés avec des guillemets obliques.

Double citation oblique: "

Double devis standard: "

7
Nigel

J'ai eu du mal avec cette même erreur et j'ai eu quelques problèmes similaires, mais avec des détails différents. Tout d'abord, même s'il semble que l'outil interne "builtin-copyStrings" de Xcode soit capable de gérer les fichiers UTF-16 little-endian ou big-endian, il ne gère en réalité que le big endian. Ma théorie est qu'il exécute une étape de validation supplémentaire (peut-être en utilisant l'utilitaire de ligne de commande plutil) qui n'existait pas auparavant dans Xcode 3, et cet outil est basé sur autre chose que le big-endian UTF-16. Pas tout à fait sûr cependant.

La deuxième astuce consiste à vous assurer que vos fichiers de chaînes sont enregistrés avec no BOM (marqueur d'ordre d'octet). J'ai fait quelques éditions de mes fichiers .strings dans BBEdit, qui ont fini par enregistrer une nomenclature dans le fichier, ce qui semble également donner à Xcode 4 un ajustement parfait. Xcode lui-même ne semble pas avoir aucun moyen de supprimer la nomenclature du fichier, vous devez donc le faire dans un éditeur de texte tel que BBEdit ou TextWrangler, qui peut le faire pour vous.

3
Brian Webster

Avec Xcode 10.1, un point-virgule manquant arrête la compilation avec cette erreur:

Localizable.strings: lecture a échoué: impossible d'analyser la liste de propriétés car les données d'entrée étaient dans un format invalide

En passant, vous pouvez savoir si l’erreur est générale pour votre fichier (problème d’encodage) ou spécifique à une ou plusieurs lignes en supprimant temporairement la majeure partie du contenu du fichier. Vous pouvez ensuite localiser le problème en rajoutant progressivement du contenu jusqu'au retour de l'erreur.

1
arlomedia

Mon problème était que j'ai oublié ; dans l'une des lignes

0
Vlad Pulichev

Assurez-vous d'avoir déclaré la chaîne au format suivant:

"YOUR_STRING_LABEL" = "Your message";

Remarque: N'oubliez pas guillemets ("), signe égal (=) et point-virgule (;) à la fin .

0
Chintan Shah

J'ai eu ce problème. Ma solution? Ajouter une nouvelle ligne en haut du fichier. Bizarre mais ça a fonctionné pour moi.

Donc, au lieu de figurer en haut de mon fichier:

/* comment */
"LOCAL_APP_GRADE" = "Basic"

Je devais faire:

[newline]
/* comment */
"LOCAL_APP_GRADE" = "Basic"

(Vous ne pouvez pas obtenir un formatage correct - ne tapez pas 'newline', appuyez simplement sur retour!)

0
tactusben

Peut-être que vous avez quelque chose comme: "Bla" = "bla" ;;

Notez le duplicata; symbole. Si vous avez cela, il se compilera correctement mais échouera au moment de l'exécution.

0
Ricardo

En rapport avec cela - faites attention lorsque vous fusionnez manuellement des chaînes dans Localizable.strings - j'ai réussi à copier/coller les deux chaînes à partir d'une macro NSLocalizedString (), de sorte que l'entrée Localizable.strings se présente sous cette forme:

"KEY" = "STRING", @"COMMENT STRING COPIED ACROSS ALSO, IN ERROR";

Le bit ,@"xxx" sur la construction m'a amené à obtenir l'erreur: 

Échec de la lecture: les données n'ont pas pu être lues car elles ne sont pas dans le correct format.

Dans ce cas, une recherche rapide sur @" a aidé à identifier les endroits où j'avais fait cela.

0
Rob Glassey

Cela ressemble à un message standard d'erreur de lecture du fichier de chaînes.

Dans mon cas, c’était un colon (json force d’habitude) au lieu d’un signe égal:

"key1" = "String1";
"key2" : "String2";
"key3" = "String3";

Changé pour = et tout a bien fonctionné.

0
gfpacheco