Substitutions dans les fichiers de localisation

LeChatNoirLeChatNoir Membre, Modérateur
Salut à  tous,
Ben ça faisait un bout de tps que j'avais pas posté alors comme je me suis un peu remis à  codé et que j'ai trouvé une solution à  un pb, je me suis dit que j'allais payer ma tournée générale sur objective Cocoa !
:p :p :kicking: :p

Voila qui est fait. A la votre les gars.

Et pour en revenir au sujet qui nous intéresse, je vous l'expose...
J'ai une appli avec un fichier de "strings" localisé type :
machaine1="bonjour";
machaine2="Au revoir";

et en english :
machaine1="hello";
machaine2="bye";

Maintenant, imaginons que je veuille ajouter des variables à  mes phrases. Libre à  moi d'utiliser la concaténation de NSString et faire un truc du style :
[localizedmachinchose(machaine1) stringByAppendingString:NSFullUsername()];

Mais si la langue change complètement la structure des mots.
Genre "l'ordinateur d'Harry" et en anglais "Harry's computer'. Là  c'est déjà  plus pénible.

D'où l'idée de placer des %s dans les chaines et de substituer à  l'exec.
Genre :
machaine3="L'ordinateur de %s";
machaine3="%s's computer";

J'ai donc tenté de faire comme ça et je m'en suis sorti en faisant un truc comme ça :

const char * cstr=malloc(40 * sizeof(char));;<br />char * cstr2=malloc(100 * sizeof(char));;<br />cstr=[[[NSBundle bundleForClass:[self class]] localizedStringForKey:@&quot;machaine4&quot; value:nil table:nil] UTF8String];<br />// cstr=&quot;%s et %s sont dans un bateau&quot;.<br />sprintf(cstr2,cstr,&quot;gratte me&quot;,&quot;gratte moi&quot;);<br />


Ca fonctionne mais je me demande s'il n'y a pas plus élégant.
Voilà , c'était ma question du jour ;-)
A+

Réponses

  • schlumschlum Membre
    novembre 2007 modifié #2
    Euh... Ben oui, c'est classique  :P
    Sauf qu'en général on met %@ pour pouvoir mettre des NSString au lieu de cString  ???
    On peut même changer l'ordre des variables avec "%1$@, %2$@"

    Et ça marche non seulement avec les chaà®nes, mais aussi avec les chiffres ! %d, %lx, %llu, %f...

    PS : pourquoi n'utilises-tu pas la macro NSLocalizedString (voire NSLocalizedStringForTable si tu as plusieurs tables) ?


    Du coup ça donne :
    NSLog([NSString stringWithFormat:NSLocalizedString(@&quot;machaine4&quot;,nil),@&quot;gratte me&quot;,@&quot;gratte moi&quot;)]);
    


    Et ça remplace tout ton code au dessus  :P
  • LeChatNoirLeChatNoir Membre, Modérateur
    06:43 modifié #3
    bouah, j'suis nul....
    J'connaissais mêm po  :o

    Merci !
Connectez-vous ou Inscrivez-vous pour répondre.