paint-brush
Evolution de la localisation dans Swift : des chaînes aux catalogues de chaînespar@mniagolov
1,094 lectures
1,094 lectures

Evolution de la localisation dans Swift : des chaînes aux catalogues de chaînes

par Maksim Niagolov8m2024/06/12
Read on Terminal Reader

Trop long; Pour lire

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. 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.
featured image - Evolution de la localisation dans Swift : des chaînes aux catalogues de chaînes
Maksim Niagolov HackerNoon profile picture

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.


Premiers défis en matière de localisation

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.

Les bases de 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.

Exemple d'une entrée 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.

Transition vers 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

  • Efficacité : cela permet d'économiser du temps et des efforts qui autrement auraient été consacrés à la gestion et à la modification des fichiers de localisation.
  • Précision : contribue à améliorer la précision des traductions de mots lorsque davantage de contexte est donné directement dans l'environnement de développement.
  • Flexibilité : prend en charge les ajustements dynamiques et en temps réel du contenu localisé.

Techniques de localisation modernes avec des catalogues de chaînes

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 :

  • Éditeur visuel : contrairement aux fichiers de texte brut simples traditionnels, les catalogues de chaînes sont édités à l'aide d'un éditeur visuel dans Xcode, ce qui facilite grandement l'ajout, la modification ou la suppression de chaînes localisées.


  • Documentation en ligne : les développeurs peuvent fournir directement les descriptions et le contexte dans le catalogue de chaînes, ce qui améliore considérablement la clarté et l'exactitude de la traduction.


  • Localisation dynamique : Strings Catalog prend en charge la localisation dynamique, de sorte que les développeurs sont autorisés à modifier les chaînes localisées sans quitter l'application, ce qui est idéal pour les tests et le développement itératif.


  • Pluralisation et adaptation avancées : il pallie également certaines des lacunes de 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 :

  1. Créer un catalogue de chaînes : ajoutez un nouveau catalogue de chaînes à votre projet. Cela générera un fichier .stringcatalog .


  2. 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.


  3. 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.


  4. 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)



Avantages des catalogues de chaînes

  • Efficacité : permet d'économiser le temps et les efforts nécessaires à la gestion des fichiers de localisation.


  • Précision : améliore la précision en fournissant un contexte direct supplémentaire directement dans l'environnement de développement.


  • Flexibilité : prend en charge les mises à jour en temps réel et même dynamiques du contenu localisé, ce qui est particulièrement utile dans un cycle de développement rapide.

Défis

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.

Conclusion

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 !