Substitutions dans les fichiers de localisation
LeChatNoir
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 !
:kicking:
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 :
Ca fonctionne mais je me demande s'il n'y a pas plus élégant.
Voilà , c'était ma question du jour ;-)
A+
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 !
:kicking:
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:@"machaine4" value:nil table:nil] UTF8String];<br />// cstr="%s et %s sont dans un bateau".<br />sprintf(cstr2,cstr,"gratte me","gratte moi");<br />
Ca fonctionne mais je me demande s'il n'y a pas plus élégant.
Voilà , c'était ma question du jour ;-)
A+
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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 :
Et ça remplace tout ton code au dessus :P
J'connaissais mêm po
Merci !