2017-09-27 1 views
0

J'ai développé une application dans Swift 3.2 qui est actuellement disponible en anglais. J'ai ajouté des fichiers String pour l'arabe et le français. Mais jusqu'à ce que tout ce qui est terminé et testé par mon équipe, je veux restreindre l'application à une langue car il y aurait des problèmes que je dois résoudre même pour la version anglaise et télécharger sur l'App Store. La suppression de l'option de fichier sting et nib ne fonctionnera pas pour moi.Localisation dans Swift - Restreindre l'application à une langue même si l'application a plus de langues

S'il vous plaît laissez-moi savoir s'il y a un code que je peux ajouter à appdelegate pour restreindre l'application seulement pour l'anglais.

I have tried disabling language Arabic in Settings which deletes localized string files

Répondre

0

Voici une méthode qui ne ce que vous voulez. Je ne pense pas qu'il y ait une autre façon de le faire dans le code.

// You can change 'Base' to 'en' if you don't have Base.lproj folder 
func localizedString(_ key: String) -> String? { 
    if let path = Bundle.main.path(forResource: "Base", ofType: ".lproj"), 
     let baseBundle = Bundle(path: path) { 
     return baseBundle.localizedString(forKey: key, value: nil, table: nil) 
    } 
    return nil 
} 

EDIT: J'ai trouvé une autre façon de le faire à partir de cette answer.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    UserDefaults.standard.set(["Base"], forKey: "AppleLanguages") 
    UserDefaults.standard.synchronize() 
    // Rest of your init code 
} 

EDIT 2:

Qu'est-ce que vous pourriez faire pour le premier lancement de l'application dans la viewDidLoad de votre première ViewController:

if let languageArray = UserDefaults.standard.object(forKey: "AppleLanguages") as? [String], 
     languageArray.count >= 1, 
     languageArray[0] != "Base" && languageArray.count == 1 { 
     UserDefaults.standard.set(["Base"], forKey: "AppleLanguages") 
     UserDefaults.standard.synchronize() 
    } 
+0

Essayer la deuxième option. Comment implémenter la première option –

+0

Pour la première option, vous pouvez avoir un Singleton avec la méthode et remplacer les appels 'NSLocalizedString' par' YourSingleton.sharedInstance. localizedString ("yourKey") ', ou vous déclarez la méthode globalement (en dehors de toute classe pour que vous puissiez y accéder de n'importe où dans votre projet) – Jeremy

+1

Ci-dessous le code travaillé. Il a travaillé sur un appareil iPhone pas sur le simulateur 'UserDefaults.standard.set ([ "Base"], forKey: "AppleLanguages") UserDefaults.standard.synchronize()' –

0

Avez-vous essayé de supprimer des langues des paramètres de localisation dans le fichier de projet?

Ceci est basé sur le guide fourni par Apple: Enabling Base Internationalization Image taken from developer.apple.com

Je crois que vous n'auriez pas à supprimer quoi que ce soit. Cela désactiverait simplement la localisation.

+0

Cette option va supprimer les fichiers que je ne veux pas. –

1

Ajout du code ci-dessous à AppDelegate dans didFinishLaunchingWithOptions Première ligne pour forcer l'application de gauche à droite. Puis dans Edit Scheme - Ajout d'un argument au lancement -AppleLanguages (Base). Travailler assez bien pour moi de forcer l'utilisateur à l'anglais.

UIView.appearance().semanticContentAttribute = .forceLeftToRight 
    UserDefaults.standard.set(["Base"], forKey: "AppleLanguages") 
    UserDefaults.standard.synchronize() 

enter image description here