2017-06-03 8 views
1

J'ai des chaînes localisables par l'utilisateur pour les chaînes utilisées dans le storyboard ou les fichiers source qui sont corrigés. Ceux-ci sont définis dans des fichiers comme Localizable.string (espagnol), Localizable.string (allemand) etc Mais j'ai une exigence où ces chaînes peuvent continuer à changer. Ces chaînes sont reçues en réponse à l'appel REST API. Ma question est comment puis-je l'utiliser.Chaînes localisables à partir de l'environnement d'exécution JSON sur iOS

code actuel est let text = NSLocalizedString("Some string", comment: "")

NSLocalizedString cherche des fichiers Localizable.string. Comment puis-je faire NSLocalizedString chercher des mots localisés de mon dictionnaire/JSON personnalisé?

+0

Un fichier '.strings' avec le format donné' « clé » = « valeur », 'est nécessaire, mais le nom du fichier peut être arbitraire. Pour un nom personnalisé, utilisez la méthode 'NSLocalizedString (_: tableName: bundle: value: comment:)' – vadian

+0

La création dynamique de chaînes de localisation n'est pas possible directement dans l'application. Soit vous devez transmettre la langue et le pays à l'API que vous allez chercher pour obtenir une chaîne localisée (utilisez third pard pour être traduit en ligne, vous risquez de ne pas obtenir une signification contextuelle correcte une fois traduite) – mkumar

Répondre

0

Essayez cette

D'abord, vous devez copier que les fichiers dans le répertoire de documents.

Get étiquette Localized

let localisedString = self.getLocalizatioString(key: "your key", stringFileName: "test.strings") // 

Fonction

func getLocalizatioString(key : String?, stringFileName : String) -> String { 
      let doumentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString 
      let destinationPath = doumentDirectoryPath.appendingPathComponent(stringFileName) 
      let dict = NSDictionary.init(contentsOfFile: destinationPath) 
      return (dict?.object(forKey: key!) as? String)! 
     } 

Sortie

enter image description here

dans la chaîne fichierenter image description here

+0

Puis-je ajouter/supprimer dynamiquement la langue? ? Par exemple, je ne peux pas toujours obtenir la traduction française mais je ne veux pas avoir de champ par défaut. Je dois avoir plusieurs traductions et cela va changer le temps d'exécution. – Vinuta

+0

oui vous pouvez faire ... vous devez télécharger plusieurs fichiers de chaîne dans le répertoire de documents avec un nom différent – KKRocks

+0

J'ai besoin de créer ce fichier .strings dynamiquement à partir du téléchargement JSON. Est-ce que Bundle est nécessaire ici? – Vinuta