comment fonctionne NSLocalizedString ?

lugdanumlugdanum Membre
01:37 modifié dans API UIKit #1
Bonjour tout le monde

Je suis entrain de passer mon appli en plusieurs langues et je rencontre quelques difficultés :

J'ai un texte qui récupère une valeur de ce style :
Montexte.text = [NSString stringWithFormat:@"%.0f Pommes", val];


J'ai essayé plusieurs méthodes comme :
<br />Montexte.text = [NSString stringWithFormat:NSLocalizedString(@&quot;%.0f Translate_POMME&quot;, @&quot;&quot;), val];<br />


Où mon "Translate_POMME" correspond au différentes langues bien évidemment.

Mais cela m'affiche selon la valeur :

18 Translate_POMME, 19 Translate_POMME, 20 Translate_POMME ... au lieu de 18 Pommes, 19 Pommes, 20 Pommes...

Quand je fais ça :
Montexte.text = NSLocalizedString(@&quot;Translate_POMME&quot;, @&quot;&quot;);

Ca fonctionne bien, je pense donc que le problème vient du positionnement de mon NSLocalizedString, mais je ne sais pas où.


Ci quelqu'un à  compris mon charabiat et peux m'aider un ptit peu.
Merci d'avance.

Réponses

  • AliGatorAliGator Membre, Modérateur
    mai 2009 modifié #2
    NSLocalizedString prend comme premier paramètre le nom de la clé qui identifie ta chaà®ne. Ni plus, ni moins. C'est cette "clé", cet "identifiant", que tu vas retrouver dans ton fichiers ".strings" et à  qui tu vas associer une valeur différente selon les langues.
    Il ne faut donc pas mettre de trucs comme "%.0f" dans ce premier paramètre.

    Par contre c'est dans la valeur associée à  cet identifiant, donc dans tes fichiers ".strings", qu'apparaà®tra, pour la localisation française "%.0f pommes" et dans la localisation anglaise "%.0f apples".

    En réalité si tu utilises NSLocalizedStringWithDefaultValue au lieu de juste NSLocalizedString, tu pourras mettre un texte par défaut... et si après tu utilises la commande "genstrings" pour générer tes fichiers ".strings", il va tout seul te rajouter des "$" dans les formats. Ceci te permet d'ailleurs d'inverser dans certaines langues l'ordre des paramètres si cela s'avère nécessaire, car certaines tournures de phrase sont différentes dans diverses langues, exemple :

    Dans ton code :
    <br />NSString* miss = NSLocalizedStringWithDefaultValue(@&quot;missYou&quot;,nil,[NSBundle mainBundle],@&quot;%@ miss %@!&quot;, @&quot;tells that someone miss somebody else&quot;);<br />NSLog(miss,@&quot;Paul&quot;,@&quot;Anne&quot;);
    


    Dans le English.lproj/Localizable.strings (généré par genstrings) :
    &quot;missYou&quot; = &quot;%1$@ miss %2$@!&quot; /* note qu&#39;il a rajouté tout seul le &quot;1$&quot; et &quot;2$&quot; entre le &quot;%&quot; et le &quot;@&quot; pour indiquer l&#39;ordre
    
    --> Ton NSLog affichera en anglais : "Paul miss Anne".

    Dans le French.lproj/Localizable.strings (généré par genstrings... et modifié par tes soins ensuite) :
    &quot;missYou&quot; = &quot;%2$@ manque à  %1$@ !&quot; /* On inverse l&#39;ordre des paramètres pour coller à  la formulation française */
    
    --> Ton NSLog affichera en français : "Anne manque à  Paul".
  • lugdanumlugdanum Membre
    01:37 modifié #3
    Bonsoir

    Aie Aie, c'est tellement logique pourtant que je n'y ai même pas pensé.

    En tout cas merci pour l'explication, qui est comme d'habitude SUPER !
Connectez-vous ou Inscrivez-vous pour répondre.