我可以将iOS应用本地化为西班牙语或德语,同时保持手机的其余部分为英语吗?
用户希望将我们的iOS应用程序语言设置与用户的iPhone语言完全分开。基本上,在应用程序本身内部,用户选择应用程序的语言,然后应用程序的UI和文本将所有更改都更改为所选语言。这比苹果的本地化标准更灵活,而且他们没有解决这种情况。关于如何做到这一点,是否有一些商定的最佳实践 具体来说,用户可能希望应用程序的界面使用西班牙语,但手机的其余部分仍使用英语我可以将iOS应用本地化为西班牙语或德语,同时保持手机的其余部分为英语吗?,ios,swift,localization,Ios,Swift,Localization,用户希望将我们的iOS应用程序语言设置与用户的iPhone语言完全分开。基本上,在应用程序本身内部,用户选择应用程序的语言,然后应用程序的UI和文本将所有更改都更改为所选语言。这比苹果的本地化标准更灵活,而且他们没有解决这种情况。关于如何做到这一点,是否有一些商定的最佳实践 具体来说,用户可能希望应用程序的界面使用西班牙语,但手机的其余部分仍使用英语 谢谢大家! 创建Localizable.strings,就像在iOS中进行默认本地化一样。然后使用此代码在应用程序中实现语言切换 extensio
谢谢大家! 创建Localizable.strings,就像在iOS中进行默认本地化一样。然后使用此代码在应用程序中实现语言切换
extension String {
func localized() -> String {
let selectedLanguage = UserDefaults.standard.string(forKey:) CURRENT_LANGUAGE)
guard let path = Bundle.main.path(forResource: selectedLanguage == "en" ? "Base" : selectedLanguage, ofType: "lproj") else {
if let basePath = Bundle.main.path(forResource: "Base", ofType: "lproj"){
return Bundle(path: basePath)?.localizedString(forKey: self, value: "", table: nil) ?? self
}
return self
}
return Bundle(path: path)?.localizedString(forKey: self, value: "", table: nil) ?? self
}
}
您可以通过调用lettext=“LOGIN\u SCREEN\u TITLE”。localized()
来访问本地化字符串,其中在本地化文件中添加了LOGIN\u SCREEN\u TITLE
enum LanguagesSupported: String {
case English = "en"
case French = "fr"
}
UserDefaults.standard.set(LanguagesSupported.French.rawValue, forKey: CURRENT_LANGUAGE)
首先创建一个语言代码和语言名称的字典,如下所示
let applicationLanguages = ["de":"German","es":"Spanish"]
然后,当用户可以选择特定的语言,然后在点击任何按钮后调用此功能并关闭应用程序
func setLanguage(languageCode: String){
let languageArray = NSArray(objects: languageCode)
UserDefaults.standard.set(languageArray, forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
UserDefaults.standard.set(true, forKey: "changedLanguage")
UserDefaults.standard.set(languageCode, forKey: "AppLanguage")
}
func endBackgroundTask() {
exit(0)
}
然后显示所选语言的警报,然后单击“确定”关闭应用程序
func setLanguage(languageCode: String){
let languageArray = NSArray(objects: languageCode)
UserDefaults.standard.set(languageArray, forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
UserDefaults.standard.set(true, forKey: "changedLanguage")
UserDefaults.standard.set(languageCode, forKey: "AppLanguage")
}
func endBackgroundTask() {
exit(0)
}
在产品方案中,您可以修改现有方案或创建副本。在“运行/选项”页面中,您可以指定“应用程序语言”和“应用程序区域”,该区域可用于启动具有特定设置的应用程序,无需修改设备设置谢谢,但用户是否能够通过UI访问此设置?我正在寻找“应用程序内语言选择”。默认的“正确”方式是让应用程序遵循手机语言。我不知道away是否可以在应用程序中这样做,但这并不意味着不能使用
value(forKey:)
从UserDefaults
获取数据。在本例中使用字符串(forKey:)
。哦,是的,谢谢@rmaddy。使用它,我们可以移除铸件,对吗?是的,使用字符串(forKey:)
不需要铸件<代码>值(forKey:)仅在需要键值编码时使用。您还需要删除synchronize()
的使用。它是不需要的,并且实际上被标记为过时。此答案是危险的,可能会导致您的应用被拒绝(第2.1节)>