• Billet écrit dans : Mobile, iPhone 08.03.2009

    Vaste programme pour ce billet :) En fait nous allons modifier un bouton en fonction de la langue du téléphone.
    Et nous allons créer un état « survolé » à notre bouton par programmation. InterfaceBuilder n’étant pas très clair sur cette manipulation.

    Tout d’abord il nous faut un UIButton déclaré en tant que IBOutlet UIButton dans notre classe. Puis nous relions ce bouton via InterfaceBuilder avec un bouton sur notre vue. Dans les propriétés de celui ci vous pouvez dire que c’est un « custom button ». Faites le. Et nous revenons à XCode :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    -(void)viewDidLoad
    {
    	// Gestion du multilanguage
    	NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
    	NSArray* languages = [defs objectForKey:@"AppleLanguages"];
     
    	// preferredLang vaut "fr", "en", "de", etc 
    	preferredLang = [languages objectAtIndex:0];
     
    	// Méthode avec deux jeux de langues : Française ou Anglaise dans les autres langues 
    	if([preferredLang isEqualToString:@"fr"])
    	{
    		UIImage * higlight = [UIImage imageNamed:@"fr_btn_clik.png"];
    		[btnTest setBackgroundImage:higlight forState:UIControlStateHighlighted];
    		[higlight release];
     
    		UIImage * normal = [UIImage imageNamed:@"fr_btn.png"];
    		[btnTest setBackgroundImage:normal forState:UIControlStateNormal];
    		[normal release];
    	}
    	else 
    	{
    		UIImage * higlight = [UIImage imageNamed:@"en_btn_clik.png"];
    		[btnTest setBackgroundImage:higlight forState:UIControlStateHighlighted];
    		[higlight release];
     
    		UIImage * normal = [UIImage imageNamed:@"en_btn.png"];
    		[btnTest setBackgroundImage:normal forState:UIControlStateNormal];
    		[normal release];
    	}
     
    	// Mais nous pouvons aussi concaténer le code langue avec le chemin de l'image.
    	// dans ce cas là il nous faut autant d'image que de langue possibles.
    	NSString * pathImage = @"_btn.png";
    	NSString * pathImageClik = @"_btn_clik.png";
    	UIImage * higlight = [UIImage imageNamed:[pathImage stringByAppendingString:preferredLang ] ];
    	[btnTest setBackgroundImage:higlight forState:UIControlStateHighlighted];
    	[higlight release];
     
    	UIImage * normal = [UIImage imageNamed:[pathImageClik stringByAppendingString:preferredLang ]];
    	[btnTest setBackgroundImage:normal forState:UIControlStateNormal];
    	[normal release];
     
    }

    Simple non ?

    Après c’est sur cette méthode est un peu lourde. Il faut autant d’images que de langage et on n’utilise pas les techniques Apple pour le multilangue (avec leurs histoire de Bundle par langue, un dictionnaire de traductions etc).

    Cependant, si comme vous avez affaire à des boutons très personnalisés (typo exotique, disposition du texte particuliere), il est peut être plus rapide de tout passer en image comme ici.

    Chacun fait comme il le sent après ^^

    Billet écrit dans : Mobile, iPhone 08.03.2009

    Tags: , , , ,

  • 3 Réactions !!

    WP_Modern_Notepad
    • GrM dit:

      hehe,

      je repasse par ici en cherchant setBackgroundImage:forState:

      :D

      bonne nuit

    • Guillaume chave dit:

      as you command sir

    • Alex dit:

      Perso, je préfère utiliser les outils standards en passant par des fichiers Localizable.strings + la fonction NSLocalizedString

      C’est aussi rapide mais ça permet surtout d’être plus clair et modulable. Une langue à rajouter? Pas besoins de retoucher au code, juste ajouter un nouveau fichier pour la langue qui gèrera toutes les traductions.

      Mais ensuite c’est une histoire de gout et d’habitude. J’avais commencé avec ce genre de code, et depuis que j’ai connu les localizable.strings & Co je n’utilise que ça pour l’internationalisation.

    Réagissez a cet article ?!

    Attention: Les commentaires sont modérés et ne sont pas visibles automatiquement. Ce n'est pas la peine de re-soumettre votre commentaire.

    Add a comment on FriendFeed




CV Guillaume chave