Вы можете обработать Errors
следующим образом:
Auth.auth().fetchSignInMethods(forEmail: email, completion: { (response, error) in
if let error = error, let errCode = AuthErrorCode(rawValue: error._code)
{
switch errCode {
case .emailAlreadyInUse:
GeneralHelper.sharedInstance.displayAlertMessage(titleStr: LocalizeConstant.CommonTitles.Alert.rawValue.localizedStr(), messageStr: LocalizeConstant.CommonTitles.Continue.rawValue.localizedStr())
case .accountExistsWithDifferentCredential:
GeneralHelper.sharedInstance.displayAlertMessage(titleStr: LocalizeConstant.CommonTitles.Alert.rawValue.localizedStr(), messageStr: LocalizeConstant.CommonTitles.Continue.rawValue.localizedStr())
default:
break
}
return
}
}
Здесь я получаю errCode
, используя AuthErrorCode
, предоставленный самой Firebase
, а затем я передаю полученную ошибку код с использованием error._code
. Итак, теперь я могу получить тип AuthErrorCode
. Используя это, я делаю дела вроде .emailAlreadyInUser
, .accountExistsWithDifferentCredential
et c. Вы можете просто набрать .
, и он покажет вам все AuthErrorCodes
. Таким образом, вы можете просто обработать коды ошибок следующим образом.
Теперь перейдем ко второй части вопроса, т.е. getting localized string
. Вы можете добавить локализацию к Firebase
, для этого вам нужно выбрать код языка. Auth.auth().languageCode = "en" //For English
. Но я не думаю, что это приводит к локализованным ошибкам, поскольку языков намного больше, чем поддерживает Firebase
. Это в основном для отправки localized
писем.
Чтобы обработать localization
, вы должны создать свой собственный метод, как я. Вы можете видеть, что я вызвал функцию displayAlertMessage
, в которой я передаю titleStr: LocalizeConstant.CommonTitles.Alert.rawValue.localizedStr()
, который является частью локализации.
struct LocalizeConstant {
enum CommonTitles: String
{
case Alert = "common_alert"
}
}
Это значение обозначает key
, данное мной в файл локализации. Если вы не знаете о локализации, вам нужно выполнить поиск в Google. Допустим, у меня есть два Localizable.strings
, один из которых находится в English
, а другой - в French
. В Localizable.strings(English)
я написал Alert
так:
"common_alert" = "Alert";
И по-французски:
"common_alert" = "Alerte!";
Итак, вот как я вручную добавил localization
в моем приложении. Но чтобы достичь этого, вам нужно сделать две вещи. 1) Вы должны настроить свой appLanguage
. 2) Вы должны вызвать метод, который будет извлекать значения из этих ключей, определенных в файле Localizable.strings
.
Для этого я создал метод localizedStr()
. Это расширение String
, и вы можете использовать его следующим образом.
extension String{
func localizedStr() -> String
{
var finalRes = ""
if let path = Bundle.main.path(forResource: Constants.appLang, ofType: "lproj") //Constants.appLang is "en" here for "English", but you can set accordingly.
{
if let bundle = Bundle(path: path)
{
finalRes = NSLocalizedString(self, tableName: nil, bundle: bundle, value: " ", comment: " ")
}
}
return finalRes
}
}
Теперь этот метод localizedStr()
даст вам локализованную строку в соответствии с языком вашего приложения. Даже если Firebase
предоставляет локализованные коды ошибок (что я думаю, что нет), невозможно получить описание ошибки на каждом языке. Так что это лучший способ, который я придумал. Возможно, это не лучший метод в мире, но он выполняет задачу.
PS: Чтобы оптимизировать это во всем приложении, вы можете создать расширение AuthErrorCode
или создать * Функция 1056 *, где вы просто передадите error._code
, и он вернет localized string
. Я добавил длинный путь, чтобы вы могли лучше понять все.