我可以将iOS应用本地化为西班牙语或德语,同时保持手机的其余部分为英语吗?

我可以将iOS应用本地化为西班牙语或德语,同时保持手机的其余部分为英语吗?,ios,swift,localization,Ios,Swift,Localization,用户希望将我们的iOS应用程序语言设置与用户的iPhone语言完全分开。基本上,在应用程序本身内部,用户选择应用程序的语言,然后应用程序的UI和文本将所有更改都更改为所选语言。这比苹果的本地化标准更灵活,而且他们没有解决这种情况。关于如何做到这一点,是否有一些商定的最佳实践 具体来说,用户可能希望应用程序的界面使用西班牙语,但手机的其余部分仍使用英语 谢谢大家! 创建Localizable.strings,就像在iOS中进行默认本地化一样。然后使用此代码在应用程序中实现语言切换 extensio

用户希望将我们的iOS应用程序语言设置与用户的iPhone语言完全分开。基本上,在应用程序本身内部,用户选择应用程序的语言,然后应用程序的UI和文本将所有更改都更改为所选语言。这比苹果的本地化标准更灵活,而且他们没有解决这种情况。关于如何做到这一点,是否有一些商定的最佳实践

具体来说,用户可能希望应用程序的界面使用西班牙语,但手机的其余部分仍使用英语


谢谢大家!

创建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


    }
}
您可以通过调用let
text=“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节)>