NSLocalizedString récupère uniquement la clé, non pas la valeur dans Localizable.cordes (IOS)
J'ai fait un fichier de chaînes nommé "Localizable.les chaînes", et a ajouté deux langues, comme:
"CONNECTIONERROR" = "Check that you have a working internet connection.";
"CONNECTIONERRORTITLE" = "Network error";
J'ai également converti les fichiers en Unicode UTF-8
Cependant, lorsque je crée une UIAlertView comme ceci:
UIAlertView *myAlert = [[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"CONNECTIONERRORITLE",nil)
message:NSLocalizedString(@"CONNECTIONERROR",nil)
delegate:self
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
l'alerte de vue ne montre que la clé du texte, pas de la valeur. Il fonctionne si j'ai, par exemple, définir un UITextviews texte NSLocalizedString(@"CONNECTIONERROR",nil), mais l'affichage alerte s'affiche uniquement la clé. Quelqu'un sait quel est le problème?
NSLocalizedString()
retourne la clé si elle ne parvient pas à trouver la paire clé/valeur.- Désolé, je n'ai pas de copier/coller le code de sorte qu'il était un type-o. Le code de mon application, cependant, est correcte.
- Trouvé le problème. Il ne fonctionne pas pour moi dans le simulateur d'iPhone, j'ai donc testé sur un périphérique réel et cela a fonctionné.
- Découvrez ce Comment Répondre[1], il peut aider. [1]: stackoverflow.com/a/8972349
- N'ayez pas peur d'utiliser des traits de soulignement ou des espaces dans la clé.
- Je suis également confronté à ce problème. vérifié tous les fichiers dans le Navigateur de Projets. Localizable.les chaînes de fichier est ajouté deux fois. j'ai donc supprimé un fichier, et de Localiser ce fichier pour la Base(en anglais), et un autre en espagnol.
- J'ai toujours pas pu le faire fonctionner. UIAlertView *alerte = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"AVERTISSEMENT", nil) message:NSLocalizedString(@"LOGIN_NRIC_REQUIRED", nil) délégué:auto cancelButtonTitle:@"OK" otherButtonTitles:nil]; ne travaille pas eu LOGIN_NRIC_REQUIRED. Une idée?
Vous devez vous connecter pour publier un commentaire.
Dans mon cas, c'était parce que j'avais tort, nommé le fichier "Localisation.les chaînes" et n'avais pas remarqué (il doit être nommé Localizable.les chaînes). Comme expliqué précédemment, le symptôme est parce que le compilateur ne trouve pas la chaîne. Sinon la cause pourrait être n'importe quel nombre de choses, mais généralement, il manque un point virgule ou un guillemet simple. Ce sont difficiles à trouver quand vous êtes en train de faire beaucoup de localisations à la fois. La leçon apprise, c'est de commencer à construire votre fichier de localisation au début de votre processus de développement et de construire comme vous allez, de sorte qu'ils sont plus faciles à repérer.
Même problème, résolu en utilisant le nom de fichier: Localizable.les chaînes de
Changer votre
.strings
nom du fichier àLocalizable.strings
, il a travaillé pour moi.Testé l'application sur un périphérique réel et il a travaillé
Vérifiez que les Localizable.les chaînes de fichier est ajouté à
Cibles -> BuildPhases -> Copie Bundle de Ressources
Il n'avait pas été automatiquement ajouté pour moi.
J'ai cherché la solution pendant 5 heures, j'ai essayé tout ce que je pouvais faire de mon appli de localisation de travail.
Le problème était que l'un des Gousses de mon projet a eu un Localizable.fichier de chaînes (en fait c'était Analyser pod, qui n'avait pas renommé). Donc mon Localizable.les chaînes de fichier n'a pas été reconnu par mon application.
J'ai résolu le problème en changeant le nom du fichier à "MyappnameLocalizable.les chaînes" et à l'aide de NSLocalizedString de cette façon:
Ce qui se passe lorsque le moteur d'exécution ne peut pas trouver la clé spécifiée, pour quelque raison que ce soit. Dans votre cas, c'est probablement à cause d'une faute de frappe:
CONNECTIONERRORITLE
manque unT
pourTITLE
. Faites également attention à tous les avertissements/erreurs lors de la compilation de concernant laLocalizable.strings
fichier: si il y a des déséquilibrés"
ou manquant;
le fichier ne peut pas être compilé/lire correctement.J'ai eu des problèmes avec ce sur le Simulateur iOS. J'ai fini par la suppression de la Localisation.fichier de chaînes dans le simulateur répertoire
cd et supprimer toutes les copies de la Localisation.les chaînes s'y trouvent.
Pour une raison quelconque, l'habitude de caoutchouc de poulet vaudou de construire propre, quitter le Simulateur iOS, quittez XCode, etc ne fonctionnait pas, mais ce n'. Au moins pour moi, aujourd'hui.
Changer le nom du fichier Localizable.cordes, assurez-vous que la cible de l'inspecteur de fichiers est définie.
Pour éviter les erreurs de syntaxe clic droit sur Localizable.les chaînes de fichier->open as->propriété ASCII liste
Aussi, le nettoyage, le projet et la construction de nouveau aidé dans mon cas.
NSLocalizedString d'utilisation signifie que vous devez le cas EXACT et l'orthographe de votre clé pour obtenir le contenu. Vous remarquerez que celui-ci dit
quand il doit être
Si vous regardez la dernière partie de la première, il dit "ITLE", pas de "TITRE"
Renommer le InfoPlist.les chaînes de fichier Localizable.cordes (double clic) et vous obtiendrez la bonne chaîne pour cette clé.
Pour savoir si la Localizable.les chaînes de fichier est trouvé, vérifiez le contenu de votre .app construire et vous pouvez aussi faire cela dans le code:
//en est pour l'anglais, par exemple, spécifier le vôtre ici
NSString *chemin = [[NSBundle mainBundle] pathForResource:@"fr" ofType:@"lproj"];
Si le chemin est NULLE, cela signifie que le fichier est introuvable.
Si vous avez écrit le double des points-virgules à la fin d'une ligne, NSLocalization n'a pas de travail.
Vous devriez vérifier Localizable.les chaînes de fichier si il n'existe ';;'
Si vous avez des extra point-virgule dans votre fichier de chaînes, il ne marche pas localiser.
Mettre un ; à la fin des lignes dans le Localizable.les chaînes de fichiers.
Dans mon cas, j'ai essayé de nettoyer projet et de suppression des données obtenues toujours pas de travail. - Je supprimer plusieurs sauts de ligne dans le fichier de chaînes et puis Xcode trouver les cordes de nouveau.
Aucune des solutions proposées a fonctionné pour moi, mais j'ai résolu le problème en supprimant le .application fichier dans les Produits
J'ai fait face à un problème similaire, tout à coup, mon chaînes localisables ne fonctionne pas du tout. Ensuite, j'ai utilisé le fichier-comparer avec l'ancien .les chaînes de copie, et le dernier que j'ai trouvé, j'ai accidentellement supprimé un clé en elle.
Définitivement, si le format est mal Xcode ne vais pas lire les cordes pour vous.
C'est le format qu'il s'attend à ce "Touche" = "Valeur";
La première ligne du fichier de localisation doit contenir une cartographie, sinon le SDK ne sera pas lire le fichier.
Réinitialisation du simulateur de paramètres a fonctionné pour moi.
Simulateur iOS > Réinitialiser le Contenu et les Paramètres...
Assurez-vous de ne pas mettre de '@' devant votre
key
ouvalue
comme suit:Il doit être juste:
Le '@' ne va en face de la clé pour y accéder:
J'ai eu tout ce travail, quand soudain, la localisation juste arrêté de traduction de chaînes de caractères. Cela signifie que le fichier est en quelque sorte illisible pour Xcode.
Ce qui m'était arrivé parce que j'avais collé un mauvais personnage dans le
Localized.strings
fichier. Lorsque j'ai supprimé les quelques lignes avec le caractère fautif (non caractères unicode? mauvaise citation de signes? Ne pouvais pas le dire) tout s'est passé le retour à la normale.Pour trouver le fautif lignes, j'ai fait un point d'arrêt, et traduit manuellement les chaînes dans mon fichier dans le débogueur, jusqu'à ce que je frappe le premier à ne pas traduire.
Pour xcode 9.2 retrait "Localizable.les chaînes" fichiers de simulateurs pour le projet à l'aide de la console résolu pour moi. Voici les commandes pour les paresseux comme moi 😉
Ne pas oublier de remplacer YOUR_APP_NAME_HERE avec le nom de votre projet
Script Shell:
Si vous rencontrez le problème avec les Tests Unitaires, il va travailler dans le simulateur 😉
Swift 4:
Si vous utilisez plus d'un bundle comme vous l'utiliser dans un cadre externe:
Lors du développement d'un SDK. Vous avez besoin d'un peu plus de l'opération.
1) créer Localizable.les chaînes de comme d'habitude dans YourLocalizeDemoSDK.
2) créer le même Localizable.les chaînes de dans YourLocalizeDemo.
3) trouver votre Bundle Chemin de YourLocalizeDemoSDK.
Swift4:
Bundle(for: type(of: self))
vous aide à trouver le paquet dans YourLocalizeDemoSDK. Si vous utilisezBundle.main
au lieu de cela, vous obtiendrez une valeur incorrecte(en fait ce sera la même chaîne avec la clé).Mais si vous voulez utiliser la Chaîne de caractères de l'extension mentionnée par dr OX. Vous avez besoin de faire un peu plus. L'origine de l'extension ressemble à ceci.
Comme nous le savons, nous sommes à élaborer un SDK,
Bundle.main
obtiendrez le paquet de YourLocalizeDemo du bundle. Ce n'est pas ce que nous voulons. Nous avons besoin de l'ensemble YourLocalizeDemoSDK. C'est une astuce pour le trouver rapidement.Exécuter le code ci-dessous dans un NSObject instance dans YourLocalizeDemoSDK. Et vous obtiendrez l'URL de YourLocalizeDemoSDK.
Impression à la fois des deux url, vous trouverez que l'on peut construire bundleURLofSDK base sur mainBundleURL. Dans ce cas, ce sera:
Et la Chaîne de l'extension sera:
Espère que cela aide.
Je l'ai résolu en utilisant cette approche.
La
localize
fichier a été créé avec le nommain.Strings
. Ensuite, j'ouvre lemain.Strings
fichiers (pour chaque langue) et j'ai renommé manuellement avec le nomlocalize.strings
et de les ajouter un par un pour mon projet, j'ai supprimé lemain.strings
.La deuxième chose à évaluer est: check . votre fichier, tous les
keys
ont à la fin, avec;
et assurez-vous que tous lesquotes
sont correctement fermées et ouvertes.Et vous pouvez les utiliser dans swift 4 :
Parce que je suis tombé sur ce que lors de la recherche de la réponse à un problème similaire, je pars de ma solution ici:
Si votre clé est "\u2028" au lieu de "\n", il retournera toujours juste la clé et pas de la valeur. Semble être un bug avec la localisation.
J'ai eu le problème quand une langue a été fonctionne correctement et dans d'autres langues travaillé la moitié du temps, et d'autres fois, c'était la clé, au lieu de la version localisée de cette clé.
Problème dans mon cas est que, après manuellement la fusion de contrôle de version conflit, il y avait de ligne supplémentaire de la " >>>>>' gauche, le projet ne se plaint pas (pas comme quand vous manquez le point-virgule, elle se plaint) et était en train de construire correctement, de sorte que chaque touche avant que " >>>>>' est en cours de traduction et de tous les principaux après, pas.
Si plus de simples solutions échouent, vous pourriez avoir à aller à travers chaque ligne et de regarder pour plus de personnages (pas seulement pour les " >>>>>", d'autres caractères supplémentaires), ou si vous utilisez le contrôle de version, en vieillissant, la version stable de Localizable.les chaînes de fichier et de sélectionner manuellement des modifications et ajouter plus tard s'engage.
Avez-vous essayé de nettoyage et de reconstruction du projet?