2015-06-10 2 views
6

Я пытаюсь реализовать функцию, которая может изменить язык приложения.
Я попытался установить это следующим образом:Настройка «AppleLanguages» не меняет язык приложения

let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject("de", forKey: "AppleLanguages") 

И после того, как язык перезапуска приложения по-прежнему "в системе по умолчанию.
Теперь я тестирую разные языки, установив Scheme > Application Language > language.
Но можно ли щелкнуть по кнопке и после перезагрузки посмотреть выбранный язык?

Также, как это сделать, чтобы избежать изменения языка при перезапуске?

ответ

3

Да, вы можете немедленно изменить язык приложения, как,

var language = "de" 
let path = NSBundle.mainBundle().pathForResource(language, ofType: "lproj") 
let bundle = NSBundle(path: path!) 
let string = bundle?.localizedStringForKey("key", value: nil, table: nil) 

использовать значение NSUserDefaults для языка.

+0

Я пробовал это в делетете приложения и ничего не менял – 1110

+0

Вы проверили, сохраняет ли NSUserDefaults сохраненное вами значение? – Paddy

+0

Извините, что ваш код работает. Я не понял этого. Это означает, что когда пользователь меняет язык, я должен каким-то образом сохранить его (код языка) в userdefaults и получить его на каждом переводе. Правильно ли я? – 1110

0

Вы можете пытались ниже AppDelegate.swift -

NSUserDefaults.standardUserDefaults().removeObjectForKey("AppleLanguages") 
NSUserDefaults.standardUserDefaults().setObject("de", forKey: "AppleLanguages" 
NSUserDefaults.standardUserDefaults().synchronize() 
+0

Это не работает также. Ничего не произошло. – 1110

1

Если это необходимо для целей тестирования, просто измените язык в приложении настроек тренажера.
Если вы пытаетесь сделать своего рода языковой селектор в своем приложении, это довольно painful и, на мой взгляд, вы не должны.
Ваше приложение считывает параметры языка и локали с устройства и соответственно изменяет интерфейс.
Переопределить это поведение очень сложно, и вы никогда не достигнете полного изменения языка, например, если вы попытаетесь отобразить карту в своем приложении, а язык вашего устройства - испанский, но язык приложения - английский, вы увидите, на испанском.
Here проект, который может помочь.

+0

Но если я решит пойти трудным путем, это значит, что мне нужно получить локализованные значения во всех представлениях, как писал @Paddy в своем ответе. Я прав? – 1110

+0

Путь Paddy объясняет, что система ищет локализованную строку в указанном каталоге языка проекта. Это не единственный способ. Если вы ищете в Google, вы найдете много экспериментов, даже если они находятся в концепциях obj-c по-прежнему актуальны. – Andrea

4

Вот как изменить язык до запуска в swift -

Допустим, я хочу, чтобы заставить Hebrew локализации:

1. Создать свой собственный класс Main.swift

import Foundation 
import UIKit 

// Your initialization code here 
let langCultureCode: String = "he_IL" 
let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject([langCultureCode], forKey: "AppleLanguages") 
defaults.synchronize() 

UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate)) 

2. Удалите свою «главную» ответственность AppDelegate.swift

//@UIApplicationMain <-- COMMENT THIS OUT 
class AppDelegate: UIResponder, UIApplicationDelegate 

Это сделает ваше приложение вынужденное к местности без необходимости какого-либо запуска

+0

Я создал файл Main.swift, а затем под какой функцией или именем функции мне нужно написать код, предоставленный вами в первой точке вашего ответа? – iDevAmit

+0

@iDeveloper no function, вот как выглядит файл 'Main.swift'. – royherma

+1

это, к сожалению, больше не работает для меня ... кто-то также сталкивается с проблемами в swift 3 xcode 7+? – royherma

1

Вы должны установить AppleLanguages ключ массив, а не строку:

UserDefaults.standard.set(["de"], forKey: "AppleLanguages") 
+0

Это правильно, поскольку строка не работает. – Leon

+0

Нет, это не так. 'synchronize()' больше не рекомендуется использовать в соответствии с документацией Apple: https://developer.apple.com/documentation/foundation/userdefaults/1414005-synchronize – hujunfeng

+0

Спасибо .... для уточнения –

Смежные вопросы