Le monde étant aujourd’hui un marché mondial, la capacité de vos applications mobiles à être disponibles dans différentes langues et cultures n’est pas seulement une option mais c’est une nécessité. La localisation améliore l'expérience utilisateur, étend sa portée et peut avoir un impact important sur le succès des logiciels au niveau international.
Pour les développeurs iOS, Swift propose des outils puissants pour intégrer facilement la localisation aux applications. Ce guide explique la transition en matière de localisation dans Swift, depuis les premières techniques jusqu'au dernier outil, pour aider les développeurs à tirer pleinement parti de ces fonctionnalités.
Initialement, lorsque Swift a été introduit pour la première fois, il a hérité de l'infrastructure de localisation d'Objective-C, construite autour du fichier Localizable.strings
et de la fonction NSLocalizedString
. De cette manière, les développeurs ont dû éditer manuellement les chaînes localisées et les synchroniser dans différents fichiers de langue, un processus à la fois sujet aux erreurs et long.
Localizable.strings
Le fichier localisable est un simple fichier de paire clé-valeur dans lequel les chaînes sont stockées dans un format "clé" = "valeur" , où "clé" est l'identifiant du code et "valeur" est la chaîne localisée que l'utilisateur verra. Ce fichier doit être dupliqué et traduit dans chaque langue prise en charge et placé dans les répertoires « .lproj » correspondants, tels que « en.lproj » pour la langue anglaise et « de.lproj » pour la langue allemande.
Localizable.strings
: "hello_world_key" = "Hello, World!";
Dans le code Swift, cette chaîne pourrait être récupérée comme :
let greeting = NSLocalizedString("hello_world_key", comment: "The default greeting")
La fonction NSLocalizedString facilite l'accès au contenu localisé à l'aide des clés de Localizable.strings
.
Cette fonction prend une clé, fournit une valeur de secours et met un commentaire pour les traducteurs. Offrir un commentaire est crucial car il donne aux traducteurs le sous-texte nécessaire pour améliorer l’exactitude et la pertinence des traductions.
Exemple : Saluter un utilisateur en fonction de l'heure de la journée :
func greetingBasedOnTime() -> String { let hour = Calendar.current.component(.hour, from: Date()) let key = hour < 12 ? "good_morning_key" : "good_evening_key" return NSLocalizedString(key, comment: "Greeting based on time of day") }
Avec Localizable.strings
correspondant , les entrées ressemblant à :
"good_morning_key" = "Good morning!"; "good_evening_key" = "Good evening!";
Voici quelques défis avec Localisable. chaînes auxquelles vous pourriez être confronté :
1) Problèmes d'évolutivité.
À mesure que le nombre de cordes augmente, il devient difficile de les gérer. La gestion de plusieurs fichiers .strings au fil du temps devient fastidieuse.
2) Duplication.
Chaque langue nécessitait un fichier distinct, ce qui entraînait des incohérences potentielles et une duplication des efforts dans la gestion des chaînes. Avec une seule langue à prendre en charge, cela ne pose peut-être pas de problème, mais lorsque vous devez gérer plusieurs langues, cela devient parfois trop compliqué.
3) Manque de contexte.
Cependant, les commentaires pourraient être ajoutés dans NSLocalizedString – même s'ils n'aident pas toujours le traducteur à comprendre pleinement le contexte, cela pourrait entraîner des inexactitudes dans la traduction. Les développeurs sont souvent trop paresseux pour les remplir correctement.
stringsdict
pour la pluralisation L'introduction des fichiers stringsdict
a apporté une amélioration significative à la localisation Swift, qui résolvait principalement les problèmes de pluralisation. La cause principale est que les pluriels des langues sont formés différemment, et ce qui pourrait être efficace pour l’anglais pourrait ne pas l’être pour d’autres langues comme le russe ou l’arabe.
Avant l’introduction stringsdict
, il était très difficile de les gérer. stringsdict
permet aux programmeurs de déterminer des règles pour les catégories telles que « un », « quelques-uns », « plusieurs » et « autres », qui garantissent le même niveau d'exactitude dans la traduction dans toutes les langues.
Comprendre les fichiers stringsdict
Le fichier Stringsdict
est une liste de propriétés XML, utilisée pour créer des chaînes localisées en fonction de valeurs numériques. Cette fonctionnalité est destinée à traiter correctement les formes plurielles, car différentes langues ont leurs propres règles différentes pour traiter les formes plurielles.
Structure d'un fichier stringsdict
:
Un exemple de fichier stringsdict
comprend les entrées de toutes les chaînes qui doivent être pluralisées. Chaque entrée comprend une clé et un dictionnaire dans lequel l'utilisateur définit une ou plusieurs sous-clés représentant différentes catégories multiples.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>numberOfSongs</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@songs@</string> <key>songs</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One song</string> <key>other</key> <string>%d songs</string> </dict> </dict> </dict> </plist>
Exemple d'utilisation stringsdict
pour la pluralisation
Supposons que nous ayons une application qui affiche le nombre d'articles lus par un utilisateur. À l'écran, il doit afficher un message présentant le pluriel correct du nombre d'articles lus.
Localizable.stringsdict
pour l'anglais et le polonais :
<!-- English --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One article</string> <key>other</key> <string>%d articles</string> </dict> </dict> <!-- Polish --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>Jeden artykuł</string> <key>few</key> <string>%d artykuły</string> <key>many</key> <string>%d artykułów</string> <key>other</key> <string>%d artykułu</string> </dict> </dict>
Ici, la localisation polonaise démontre clairement la complexité des formes plurielles dans certaines langues, où plusieurs catégories plurielles (une, quelques-unes, plusieurs, autres) sont nécessaires pour représenter correctement différents contextes numériques.
Mise en œuvre rapide :
Les entrées stringsdict
peuvent être utilisées dans le code en faisant simplement référence aux clés définies dans le fichier lors de l'appel de NSLocalizedString
.
let count = getArticleCount() let formatString = NSLocalizedString("article_count", comment: "Count of articles read by a user") let message = String(format: formatString, count)
Cette approche vous permet de modifier de manière adaptative la chaîne de sortie pour qu'elle corresponde à la grammaire des langues prises en charge ; tout cela dans une seule ligne de code.
Avantages de stringsdict
L'une des nouvelles fonctionnalités introduites avec Xcode 15 est les catalogues de chaînes, censés aider les développeurs à rendre la localisation des applications iOS et macOS encore plus facile qu'auparavant. Alors que Localizable.strings
et stringsdict
ont été des ressources utiles pour stocker et organiser les chaînes, les catalogues de chaînes sont beaucoup plus cohérents et plus conviviaux pour gérer les chaînes localisées.
Voici les principaux aspects qui doivent être mis en évidence dans les catalogues de chaînes :
stringsdict
en offrant un contrôle plus fin des formes plurielles et du texte avec des variations en fonction des éléments de l'interface utilisateur et des types d'appareils.
Mise en œuvre rapide :
Supposons que dans une application de messagerie, vous deviez informer les utilisateurs du nombre de messages qu'ils n'ont pas lus. La notification doit être dynamique en affichant le nombre de messages reçus et doit s'ajuster en conséquence au type de contenu.
Configuration étape par étape :
Créer un catalogue de chaînes : ajoutez un nouveau catalogue de chaînes à votre projet. Cela générera un fichier .stringcatalog
.
Ajouter des entrées : utilisez l'éditeur pour ajouter des entrées pour chaque chaîne qui doit être localisée. Spécifiez ensuite les clés, les valeurs par défaut et toutes les règles plurielles ou paramètres adaptatifs pour chaque entrée.
Localiser le contenu : fournissez des traductions pour chaque langue prise en charge, en spécifiant différentes formes pour les pluriels, des adaptations pour les types d'appareils, etc.
Implémenter dans le code : référencez ces chaînes à l'aide d'identifiants localisés dans votre code Swift.
<!-- String Catalog Entry --> <key>unread_messages_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@messages@</string> <key>messages</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>You have one unread message.</string> <key>other</key> <string>You have %d unread messages.</string> </dict> </dict>
Vous pouvez accéder à cette chaîne comme ceci :
let unreadCount = fetchUnreadMessagesCount() let message = NSLocalizedString("unread_messages_count", value: "You have \(unreadCount) unread messages.", comment: "Notify about unread messages") print(message)
Bien que les catalogues de chaînes offrent des améliorations significatives, ils comportent également des défis. Premièrement, c’est une courbe d’apprentissage ; il faut du temps pour s'habituer à un nouveau système ou à une nouvelle façon de créer quelque chose. Un autre défi potentiel auquel les développeurs pourraient être confrontés est lié au temps et aux ajustements nécessaires pour intégrer les catalogues de chaînes dans des projets existants dans lesquels des fichiers de localisation traditionnels ont déjà été créés et utilisés.
Les catalogues de chaînes dans Swift constituent l'amélioration la plus récente de la technologie de localisation, fournissant des outils non seulement puissants, mais également flexibles et conviviaux. En ajoutant la technologie au cycle de vie du développement, les équipes auront considérablement amélioré l'efficacité et la qualité du processus de localisation ; par conséquent, de meilleurs produits mondiaux seront créés.
Je mettrai constamment à jour cet article avec les derniers développements des outils de localisation Swift. Si vous avez l'impression que j'ai oublié quelque chose ou si vous avez des idées sur ce que j'ai dit, vous pouvez les partager dans la zone de commentaires ci-dessous. Assurez-vous de me suivre pour des informations plus intéressantes et les dernières nouvelles !