Fichiers Localizable.ssortingngs .. 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.ssortingng et compilé mon projet. (Comme vous le savez, mon code source utilise la fonction de macro NSLocalizedSsortingng.)

Mais mon projet ne comstack pas avec le fichier Localizable.ssortingng. Si je change tout le code de ce fichier en commentaires (comme ceci -> //), mon projet est complètement compilé.

En conséquence, le problème est les fichiers Localizable.ssortingng. J’ai cherché à ce sujet sur Google, j’ai trouvé que les fichiers UTF-8 (Localizable.ssortingng) sont remplacés par UTF-16. Et bien que j’aie essayé ceci… cette manière n’a pas fonctionné aussi.

En ce moment, beaucoup de personnes essaient d’utiliser les fichiers Localizable.ssortingng. Mais ils pourraient résoudre ce problème que je ne peux pas faire. Parce qu’il n’y a pas tant de questions sur ce problème.

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

Dans le fichier Localizable.ssortingng,

“LOCAL_APP_GRADE” = “Basic”

“LOCAL_APP_LAST_UPDATED_DATE” = “2011/04/20”

“LOCAL_MAIN_MENU_TITLE” = “Menu principal”

Dans mon code source,

NSLocalizedSsortingng( @"LOCAL_MAIN_MENU_TITLE", @"" ); 

Message d’erreur,

Copier le fichier .ssortingngs Erreur La validation a échoué: les données n’ont pas pu être lues car elles ont été corrompues.

Je suppose Xcode 4 ici. Vérifiez ce qu’il affiche pour l’encodage sur chacun des fichiers Localization.ssortingng de l’inspecteur de fichiers. Lorsque je rencontrais cette erreur, cela était dû au fait que l’un des fichiers était lu sous Mac Roman au lieu de UTF-16. Une fois que j’ai changé l’encodage, l’avertissement a disparu. Ce qui me rendait fou au début, c’est que l’avertissement ne se produisait que dans Xcode 4. Xcode 3 ne le donnait pas.

Vous avez également un problème avec le formatage de votre fichier .ssortingng. 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 pour cela. Il ne se manifeste généralement qu’à l’exécution lorsque LOCAL_MAIN_MENU_TITLE apparaît dans l’application au lieu du menu principal. Ce serait bien si le processus de compilation vérifiait les points-virgules. Il est facile d’en manquer un lors de l’édition des fichiers.

Par Apple:

Si vous rencontrez des problèmes lors des tests et constatez que les fonctions et les macros de récupération des chaînes renvoient 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é de manière particulière. Si vous utilisez plutôt l’option -lint, vous pouvez découvrir des caractères cachés ou d’autres erreurs qui empêchent la récupération correcte des chaînes.

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

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

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

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

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 doubles standard ont été échangés avec des guillemets doubles obliques.

Inclinaison double:

Double cotation standard: ”

Je me suis battu avec cette même erreur et j’ai fini par avoir quelques problèmes similaires, mais avec des détails différents. Tout d’abord, même s’il semble que l’outil interne de Xcode “builtin-copySsortingngs” soit capable de gérer des fichiers UTF-16 de type little-endian ou big-endian, il ne prend en charge 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 ne se produisait pas dans Xcode 3, et que cet outil ne fonctionne que sur les UTF-16 à grande échelle. Pas tout à fait sûr si.

La deuxième astuce consiste à vous assurer que vos fichiers de chaînes sont enregistrés sans nomenclature (Byte Order Marker). J’ai fait quelques modifications de mes fichiers .ssortingngs dans BBEdit, qui ont fini par enregistrer une nomenclature dans le fichier, et cela semble également permettre à Xcode 4 de s’adapter. Xcode lui-même ne semble pas avoir le moyen de supprimer la nomenclature du fichier. Cela doit donc être fait dans un éditeur de texte tel que BBEdit ou TextWrangler, qui peut le faire pour vous.

Vous avez peut-être quelque chose comme: “Bla” = “bla” ;;

Notez le duplicata. symbole. Si vous avez cela, il sera compilé correctement mais échouera au moment de l’exécution.

En rapport avec cela – prenez garde lors de la fusion manuelle de chaînes dans Localizable.ssortingngs – j’ai réussi à copier / coller les deux chaînes d’une macro NSLocalizedSsortingng (), de sorte que l’entrée Localizable.ssortingngs se présente sous cette forme:

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

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

Échec de la lecture: les données n’ont pas pu être lues car elles ne sont pas au bon format.

Dans ce cas, faire une recherche rapide sur @" aidé à identifier les endroits où je l’avais fait.

J’ai eu ce problème. Mon correctif? Ajoutez une nouvelle ligne en haut du fichier. Bizarre mais ça a fonctionné pour moi.

Donc, au lieu d’avoir en tête de ce fichier:

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

Je devais faire:

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

(Vous ne pouvez pas obtenir le formatage correct – ne tapez pas ‘newline’, appuyez simplement sur return!)

Il semble que ce soit un message standard pour erreur lors de la lecture du fichier de chaînes.

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

 "key1" = "Ssortingng1"; "key2" : "Ssortingng2"; "key3" = "Ssortingng3"; 

Changé à = et tout a bien fonctionné.

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

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

 "YOUR_STRING_LABEL" = "Your message"; 

Remarque: N’oubliez pas les guillemets (“), Signe égal (=) et Pointvirgule (;) à la fin .