2017-09-20 4 views
0

J'utilise ce morceau de code pour localiser les dates Strings à Swift:Langue localisation de dates à Swift

if elapsedTime > 3600 { 
     let hourString = NSLocalizedString("hour ago", tableName: "v1.0.0", bundle: Bundle.main, value: "hour ago", comment: "") 
     let hoursString = NSLocalizedString("hours ago", tableName: "v1.0.0", bundle: Bundle.main, value: "hours ago", comment: "") 
     let hours = Int(elapsedTime/3600) 
     return "\(hours) " + (hours > 1 ? hoursString : hourString) 
} 

où le elapsedTime est une valeur en secondes. Résultat pour la localisation en anglais est

6 hours ago par exemple. J'ai besoin de modifier ceci pour ajouter la localisation spécifique à la langue, par exemple en français il ne devrait pas être dans un format de [N] hours ago mais il ya [N] heurs. Y a-t-il un moyen de l'automatiser en évitant d'ajouter un préfixe spécifique pour les différentes langues utilisées? Merci d'avance!

+1

Vous pouvez utiliser "% @", "% d" et autres dans 'Localizable.string'. Utilisez simplement un 'stringWithFormat:'. En outre, il existe une gestion plurielle avec 'Localizable.stringsdict'. Cela devrait vous éviter le test 'hours> 1' (et pour différentes langues, le texte peut être différent pour 0, 1, 2, et plus.) – Larme

+0

Merci, @Larme! Pouvez-vous s'il vous plaît transformer votre commentaire pour répondre, avec un peu Plus d'explications sur l'utilisation de stringWithFormat() – Alex

+0

En Objective-C, nous utilisons 'stringWithFormat:', dans Swift, nous avons tendance à faire comme les autres langages (JavaScript, C++), avec le '+' et le '\ (var)' Le document: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Strings/Articles/FormatStrings.html et https://developer.apple.com/library/content/documentation/Cocoa/ Conceptuel/Strings/Articles/formatSpecifiers.html # // apple_ref/doc/uid/TP40004265-SW1 pour stringDict: https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPInternational/StringsdictFileFormat/StringsdictFileFormat. html – Larme

Répondre

0

Basé sur la version de travail des commentaires @Larme ressemble à ceci:

if elapsedTime > 3600 { 
     let hours = Int(elapsedTime/3600) 
     let hourString = NSLocalizedString("hour ago", tableName: "v1.0.0", bundle: Bundle.main, value: "hour ago", comment: "") 
     let hoursString = String(format: NSLocalizedString("hours ago", tableName: "v1.0.0", bundle: Bundle.main, value: "\(hours) hours ago", comment: ""), 
          arguments: [hours]) 
     return (hours > 1 ? hoursString : hourString) 
    } 

Et la modification apportée à v1.0.0.strings (français) est

"hours ago" = "il y a %d heures";