iOS succinctement - Localisation

Jusqu'à présent, tous nos exemples de projets ont supposé que nos applications étaient destinées à des anglophones, mais de nombreuses applications peuvent tirer avantage de leur disponibilité pour un public non anglophone. L'App Store se charge de présenter notre application au bon public, mais c'est à nous, développeurs, de la configurer de manière à afficher les ressources appropriées aux utilisateurs de différentes régions. Ce processus s'appelle la localisation.

Heureusement, iOS facilite étonnamment la localisation des ressources à l’aide de bundles. La classe NSBundle sélectionne automatiquement l'actif approprié en tenant compte de la langue préférée de l'utilisateur. Par exemple, si vous avez fourni différentes versions de la même image pour les anglophones par rapport aux hispanophones, la méthode pathForResource: ofType: décrite dans le chapitre précédent renvoie différents chemins d'accès aux fichiers en fonction des paramètres de l'utilisateur. C'est l'une des principales raisons pour lesquelles vous ne devriez pas accéder directement aux ressources de l'ensemble à l'aide de chemins codés en dur.

Les trois aspects d'une application qui doivent généralement être localisés sont les images, l'audio ou les vidéos contenant un langage spécifique, des chaînes codées en dur et des story-boards. Dans ce chapitre, nous examinerons brièvement la localisation des ressources multimédia et des chaînes codées en dur à l'aide des fonctionnalités d'internationalisation intégrées de NSBundle. Les fichiers de scénarimage peuvent être localisés en utilisant le même processus.


Création de l'exemple d'application

L'exemple de ce chapitre est une application simple qui affiche différentes images ou chaînes en fonction de la langue préférée de l'utilisateur. Créez une nouvelle application à vue unique et appelez-la «internationalisation». Comme toujours, Utiliser des storyboards, et Utiliser le comptage automatique des références devrait être sélectionné.


Activation de la localisation

Pour créer une application multilingue, la première étape consiste à ajouter les langues prises en charge au projet. Dans le navigateur de projet, sélectionnez l'icône du projet..


Figure 96: Sélection du projet dans le navigateur de projet

Ensuite, sélectionnez le projet d’internationalisation dans la colonne de gauche (à ne pas confondre avec la cible d’internationalisation). Assurez-vous que l'onglet Info est sélectionné. vous devriez voir la fenêtre suivante:


Figure 97: La fenêtre Informations sur le projet

Pour ajouter la prise en charge d’une autre langue, sélectionnez le signe plus sous le symbole Les localisations section. Vous pouvez choisir la langue de votre choix, mais ce livre utilisera l'espagnol. La sélection d'une langue ouvrira une boîte de dialogue demandant quels fichiers doivent être localisés. Effacer la sélection de MainStoryboard.storyboard, mais laisse InfoPlist.strings choisi.


Figure 98: Ajout d'une localisation en espagnol

Il est maintenant possible d'ajouter une version espagnole de chaque ressource à l'ensemble d'applications.


Localisation d'images

Nous examinerons ensuite la localisation des ressources multimédias. Dans le package de ressources de ce livre, vous trouverez un fichier appelé syncfusion-icon-fr.png. Ajoutez ce fichier au groupe d'applications en le faisant glisser dans le Navigateur de projet et renommez-le ainsi. syncfusion-icon.png. Ensuite, affichez-le dans la vue en modifiant le viewDidLoad méthode en ViewController.m à ce qui suit:

 - (void) viewDidLoad [super viewDidLoad]; // trouve l'image. NSString * imagePath = [[NSBundle mainBundle] pathForResource: @ "syncfusion-icon" ofType: @ "png"]; NSLog (@ "% @", imagePath); // charge l'image. UIImage * imageData = [[UIImage alloc]] initWithContentsOfFile: imagePath]; if (imageData! = nil) // Affiche l'image. UIImageView * imageView = [[UIImageView alloc] initWithImage: imageData]; CGRect screenBounds = [[UIScreen mainScreen]]]; imageView.contentMode = UIViewContentModeCenter; CGRect frame = imageView.frame; frame.size.width = screenBounds.size.width; frame.size.height = screenBounds.size.height; imageView.frame = frame; [[auto view] addSubview: imageView];  else NSLog (@ "Impossible de charger le fichier"); 

Lorsque vous compilez le projet, vous devriez voir une petite icône affichée au milieu de l'écran:


Figure 99: Ajout par programme d'une image à la vue

Vous devriez aussi voir le chemin Internationalization.app/syncfusion-icon.png dans le panneau de sortie. Rien de nouveau ici, juste une image au plus haut niveau de l'ensemble d'applications, mais cela va changer une fois que nous aurons localisé le fichier image..

Pour ce faire, sélectionnez l’image dans le navigateur de projet, ouvrez le panneau Utilitaires et cliquez sur Rendre localisé sous le Localisation section.


Figure 100: Création d'un fichier localisé

Le dialogue suivant vous invite à choisir une langue. Sélectionner Anglais et cliquez Localiser.


Figure 101: Configuration de la localisation

Cela indique à iOS que cette version de syncfusion-icon.png est pour les anglophones. Nous ajouterons une version espagnole dans un instant, mais examinons d’abord ce qui se passe dans les coulisses. Pour voir vos localisations en action, vous devez réinitialiser le simulateur iOS et effectuer une nouvelle génération. Pour réinitialiser le simulateur, accédez à Simulateur iOS> Réinitialiser le contenu et les paramètres dans la barre de menus et sélectionnez Réinitialiser dans la boîte de dialogue résultante..


Figure 102: Réinitialisation du simulateur iOS

Quittez le simulateur et revenez au projet d’internationalisation dans Xcode. Pour effectuer une nouvelle génération, accédez à Produit> Nettoyer dans la barre de menus, puis recompilez le projet normalement. Vous devriez voir un chemin de fichier différent dans le panneau de sortie:

 Internationalization.app/en.lproj/syncfusion-icon.png.

Le nouveau fr.lproj / Le sous-répertoire est la méthode interne d'organisation des fichiers spécifiques à la langue dans iOS. Toutes les ressources localisées en anglais apparaîtront dans ce sous-répertoire et toutes les versions en espagnol apparaîtront dans le répertoire. es.lproj / sous-répertoire. Mais encore une fois, nous n’avons pas réellement besoin de savoir où se trouve le fichier; NSBundle's pathForResource: ofType: la méthode le comprend automatiquement.

Donc, notre version anglaise de l'image est configurée. Ensuite, nous devons configurer la version espagnole. Sélectionnez la version anglaise du fichier dans le navigateur de projet et cochez la case en regard de l'espagnol dans la section Localisation du panneau Utilitaires..


Figure 103: Ajout d'une version espagnole du fichier

Ceci copie la version anglaise existante de syncfusion-icon.png dans le es.lproj / sous-répertoire. De retour dans le navigateur de projet, vous devriez pouvoir le voir en développant le syncfusion-icon.png fichier.


Figure 104: Les deux versions du fichier image dans le navigateur de projet

Bien sûr, nous devons remplacer la version espagnole par un fichier complètement différent. Le moyen le plus simple de le faire est de sélectionner le syncfusion-icon.png (Espagnol) et en cliquant sur l’icône de flèche en regard de la Chemin complet chaîne dans le Utilitaires panneau.


Figure 105: Panneau Utilitaires pour le fichier image espagnol

Ceci affiche le contenu de la es.lproj / dossier dans le Finder, ce qui nous donne la possibilité de remplacer le fichier manuellement. Supprimer l'existant syncfusion-icon.png déposer et copier le syncfusion-icon-es.png fichier du paquet de ressources dans es.lproj /. Assurez-vous de le renommer en syncfusion-icon.png. Il est important que les versions localisées du même fichier aient des noms de fichiers identiques pour que NSBundle puisse les trouver. Après avoir remplacé le fichier, vous devriez voir des images différentes lorsque vous sélectionnez les deux localisations dans Xcode..

Cela devrait être le cas pour localiser notre fichier image. Pour le tester, vous pouvez modifier la langue de l'appareil de la même manière que dans un appareil réel, via l'application Paramètres. Cliquez sur le bouton d'accueil du périphérique dans le simulateur, cliquez et faites glisser l'écran vers la droite, puis lancez l'application Paramètres. Sous Général> International> Langue, vous pouvez sélectionner la langue du périphérique..


Figure 106: Modification de la langue du périphérique dans iOS Simulator

Choisissez Español et rouvrez votre application. Vous devriez voir la version espagnole de syncfusion-icon.png. Vous devrez peut-être fermer le simulateur et compiler à nouveau le programme. Notez que le chemin du fichier généré par NSLog () lit maintenant:

 Internationalization.app/es.lproj/syncfusion-icon.png.

Figure 107: Affichage de la version localisée du fichier image

Comme vous pouvez le constater, il est extrêmement facile de localiser des fichiers à l'aide de la fonctionnalité intégrée de NSBundle. L'idée est d'utiliser NSBundle comme une abstraction entre le code de votre application et les actifs sur lesquels ils s'appuient. Cela isole le processus de localisation du processus de développement, ce qui facilite grandement l'externalisation des traductions.

La localisation de fichiers vidéo et audio utilise exactement le même processus que celui décrit précédemment. Cependant, préparer un texte pour un public international demande un peu plus de travail.


Localisation de texte

Lorsque vous utilisez une application multilingue, les chaînes codées en dur doivent être abstraites dans un actif groupé afin que NSBundle puisse charger la langue correcte au moment de l'exécution. iOS utilise un fichier de chaînes pour stocker les traductions de tous les littéraux de chaîne de votre application. Après avoir créé ce fichier de chaînes, vous pouvez le localiser en utilisant la même méthode que celle décrite dans la section précédente..

Changeons notre méthode viewDidLoad pour afficher un bouton et générer un message lorsque l'utilisateur le tapera.

 - (void) viewDidLoad [super viewDidLoad]; UIButton * aButton = [UIButton buttonWithType: UIButtonTypeRoundedRect]; [aButton setTitle: @ "Say Hello" pourState: UIControlStateNormal]; aButton.frame = CGRectMake (100,0, 200,0, 120,0, 40,0); [[auto view] addSubview: aButton]; [aButton addTarget: auto action: @selector (sayHello :) forControlEvents: UIControlEventTouchUpInside];  - (void) sayHello: (id) expéditeur NSLog (@ "Hello, World!"); 

Ces méthodes ont deux littéraux de chaîne que nous devrons déplacer dans un fichier de chaînes. Elles sont @"Dis bonjour" et @"Bonjour le monde!".

Pour créer le fichier de chaînes, créez un nouveau fichier et choisissez Ressource> Fichier de chaînes. Utilisation Localizable.strings pour le nom du fichier, qui est le fichier de chaîne par défaut que iOS recherche.


Figure 108: Création d'un fichier de chaînes

Le contenu du fichier de chaînes est une simple liste de paires clé / valeur, formatée comme suit.

 "Button Title" = "Dites bonjour"; "Greeting" = "Bonjour le monde!";

Le côté gauche est la clé que vous utiliserez pour référencer la chaîne traduite dans votre code d'application. Les clés sont des chaînes arbitraires, mais les développeurs utilisent généralement un nom sémantique décrivant comment la chaîne sera utilisée ou la phrase cible dans leur langue maternelle. Dans notre fichier de chaînes, nous avons opté pour l'ancien. Les valeurs pour chaque clé suivent un signe égal. Assurez-vous d'inclure un point-virgule à la fin de chaque ligne, sinon des choses terribles se produiront lorsque vous essayez d'exécuter votre application.

Comme pour les médias, vous pouvez accéder au contenu de Localizable.strings via NSBundle. le localizedStringForKey: valeur: table: La méthode retourne la valeur d'une clé d'un fichier de chaînes particulier. L'argument de valeur vous permet de spécifier une valeur de retour par défaut si la clé n'est pas trouvée, et l'argument de table détermine le fichier de chaînes à utiliser. Lorsque vous spécifiez nil pour table, la valeur par défaut Localizable.strings le fichier est utilisé.

L’accès aux chaînes traduites étant une tâche si courante, le cadre de base fournit également un outil pratique. NSLocalizedString () macro que vous pouvez utiliser comme un raccourci simple pour localizedStringForKey: valeur: table:. Il passe une chaîne vide pour l'argument value et nil pour l'argument table. Pour la plupart des applications, NSLocalizedString () est tout ce dont vous avez vraiment besoin pour accéder à du texte localisé.

Alors, changeons la configuration du titre de notre bouton pour utiliser NSLocalizedString ():

 [aButton setTitle: NSLocalizedString (@ "Titre du bouton", nil) pourState: UIControlStateNormal]; Si vous compilez le projet, le bouton devrait toujours indiquer «Dites bonjour», mais il est maintenant chargé à partir de Localizable.strings. Faisons de même pour la méthode sayHello: - (void) sayHello: (id) expéditeur NSLog (@ "% @", NSLocalizedString (@ "Greeting", nil)); 

Maintenant que nos chaînes sont chargées dynamiquement au lieu d'être codées en dur, il est facile de les localiser. Nous allons utiliser exactement le même processus qu'avec les images. Dans le navigateur de projet, sélectionnez le fichier Localizable.strings, puis cliquez sur Rendre localisée dans le panneau Utilitaires. Sélectionnez English dans la boîte de dialogue résultante pour utiliser cette version du fichier pour les utilisateurs anglophones..

Pour ajouter une version en espagnol, sélectionnez à nouveau Localizable.strings et cochez la case en regard de l'espagnol dans la section Localisation..


Figure 109: Ajout d'une version espagnole de Localizable.strings

Juste comme syncfusion-icon.png, vous devriez pouvoir étendre la Localizable.strings fichier dans le navigateur de projet.


Figure 110: Extension du fichier de chaînes pour afficher ses localisations

Enfin, ajoutez quelques traductions à la version espagnole du fichier..

 "Titre du bouton" = "Dola Hola"; "Greeting" = "Hola, mundo!";

Vous pouvez le tester de la même manière que nous avons testé les images. Aller vers Réinitialiser le contenu et les paramètres dans le simulateur, fermez-le et effectuez une compilation propre à partir de Xcode. Après avoir changé la langue en Español, votre bouton devrait afficher "Dice Hola" au lieu de "Say Hello", et cliquer dessus devrait afficher "Hola, Mundo!"


Figure 111: Modification de la langue de l'appareil en espagnol

C'est tout ce qu'il y a à localiser des chaînes dans une application iOS. Encore une fois, le fait d'avoir tout votre texte traduit dans un seul fichier entièrement extrait du code de votre application facilite l'externalisation de vos efforts de localisation. C’est une très bonne chose, car la plupart des développeurs ne parlent pas couramment toutes les langues dans lesquelles ils souhaitent traduire leur application..


Localiser Info.plist

Il y a un détail important qui n'a pas encore été abordé: la localisation du nom de l'application. Si vous regardez l'écran d'accueil dans le simulateur iOS, vous remarquerez que le titre sous l'icône de votre application n'a pas été traduit en espagnol. Si vous avez déjà eu la peine de localiser la chaîne dans votre application, vous pouvez également prendre le temps de traduire un peu de métadonnées..

Le nom d'affichage d'une application est défini dans Info.plist sous la clé CFBundleDisplayName. Au lieu de vous forcer à traduire des valeurs dans le menu principal Internationalisation-Info.plist fichier, iOS vous fournit un fichier de chaîne dédié pour écraser certaines options de configuration avec des valeurs localisées. dans le Fichiers de support groupe du navigateur de projet, ouvrez le InfoPlist.strings fichier. C'est comme le Localizable.strings fichier que nous avons créé dans la section précédente, sauf qu'il ne devrait fournir que des valeurs pour Info.plist clés. Ajoutez ce qui suit à votre InfoPlist.strings fichier.

 "CFBundleDisplayName" = "Hola, mundo!";

Maintenant, si vous réinitialisez le simulateur et effectuez une construction propre, vous devriez voir un titre en espagnol sous l'icône de votre application..


Figure 112: Localisation du nom d'affichage de l'application

Résumé

Dans ce chapitre, nous avons appris à localiser des ressources multimédias, du texte et des métadonnées à l'aide de NSBundle. En résumant les ressources devant être localisées dans des fichiers isolés et en les référençant indirectement via des méthodes telles que pathForResource: ofType:, il est possible de traduire votre application dans une autre langue sans toucher une seule ligne de code d'application. C'est une fonctionnalité très puissante d'iOS, en particulier compte tenu de la prévalence internationale des appareils iPhone et iPad.

Le dernier chapitre d'iOS présente Succinctly brièvement le support audio intégré pour les applications iOS. Comme nous l'avons vu dans les chapitres précédents, les fichiers audio utilisent la même structure d'ensembles que les fichiers images et chaînes. Cependant, au lieu de vous concentrer sur la façon d'accéder à ces ressources, nous allons parler des outils de niveau supérieur permettant de contrôler la lecture audio..

Cette leçon représente un chapitre de iOS succinctement, un eBook gratuit de l'équipe de Syncfusion.