diff --git a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
index 1bf25c43..921a5219 100644
--- a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -7,17 +7,17 @@
AppShared.xcscheme_^#shared#^_
orderHint
- 38
+ 36
CoreDataStack.xcscheme_^#shared#^_
orderHint
- 37
+ 38
Mastodon - ASDK.xcscheme_^#shared#^_
orderHint
- 3
+ 4
Mastodon - RTL.xcscheme_^#shared#^_
@@ -27,7 +27,7 @@
Mastodon - Release.xcscheme_^#shared#^_
orderHint
- 2
+ 3
Mastodon - ar.xcscheme_^#shared#^_
@@ -37,18 +37,23 @@
Mastodon - ca.xcscheme_^#shared#^_
orderHint
- 17
+ 18
Mastodon - de.xcscheme_^#shared#^_
orderHint
12
- Mastodon - en.xcscheme_^#shared#^_
+ Mastodon - double length.xcscheme_^#shared#^_
orderHint
1
+ Mastodon - en.xcscheme_^#shared#^_
+
+ orderHint
+ 2
+
Mastodon - es-419.xcscheme_^#shared#^_
orderHint
@@ -117,7 +122,7 @@
ShareActionExtension.xcscheme_^#shared#^_
orderHint
- 41
+ 37
SuppressBuildableAutocreation
diff --git a/Mastodon/Scene/Onboarding/Register/MastodonRegisterViewController.swift b/Mastodon/Scene/Onboarding/Register/MastodonRegisterViewController.swift
index 4cf4da14..8428aaa7 100644
--- a/Mastodon/Scene/Onboarding/Register/MastodonRegisterViewController.swift
+++ b/Mastodon/Scene/Onboarding/Register/MastodonRegisterViewController.swift
@@ -802,23 +802,48 @@ extension MastodonRegisterViewController {
let password = viewModel.password.value
let locale: String = {
- let fallbackLanguageCode = Locale.current.languageCode ?? "en"
+ guard let url = Bundle.main.url(forResource: "local-codes", withExtension: "json"),
+ let data = try? Data(contentsOf: url),
+ let localCode = try? JSONDecoder().decode(MastodonLocalCode.self, from: data)
+ else {
+ assertionFailure()
+ return "en"
+ }
+ let fallbackLanguageCode: String = {
+ let code = Locale.current.languageCode ?? "en"
+ guard localCode[code] != nil else { return "en" }
+ return code
+ }()
+
+ // pick device preferred language
guard let identifier = Locale.preferredLanguages.first else {
return fallbackLanguageCode
}
+ // prepare languageCode and validate then return fallback if needs
let local = Locale(identifier: identifier)
- guard let languageCode = local.languageCode else {
+ guard let languageCode = local.languageCode,
+ localCode[languageCode] != nil
+ else {
return fallbackLanguageCode
}
- switch languageCode {
- case "zh":
- // Check Simplified Chinese / Traditional Chinese
- // https://github.com/gunchleoc/mastodon/blob/ed6153b8f24d3a8f5a124cc95683bd1f20aec882/app/helpers/settings_helper.rb
- guard let regionCode = local.regionCode else { return languageCode }
- return "zh" + "-" + regionCode
- default:
+ // prepare extendCode and validate then return fallback if needs
+ let extendCodes: [String] = {
+ let locales = Locale.preferredLanguages.map { Locale(identifier: $0) }
+ return locales.compactMap { locale in
+ guard let languageCode = locale.languageCode,
+ let regionCode = locale.regionCode
+ else { return nil }
+ return languageCode + "-" + regionCode
+ }
+ }()
+ let _firstMatchExtendCode = extendCodes.first { code in
+ localCode[code] != nil
+ }
+ guard let firstMatchExtendCode = _firstMatchExtendCode else {
return languageCode
}
+ return firstMatchExtendCode
+
}()
let query = Mastodon.API.Account.RegisterQuery(
reason: viewModel.reason.value,
@@ -828,6 +853,8 @@ extension MastodonRegisterViewController {
agreement: true, // user confirmed in the server rules scene
locale: locale
)
+
+ var retryCount = 0
// register without show server rules
context.apiService.accountRegister(
@@ -835,6 +862,32 @@ extension MastodonRegisterViewController {
query: query,
authorization: viewModel.applicationAuthorization
)
+ .tryCatch { [weak self] error -> AnyPublisher, Error> in
+ guard let self = self else { throw error }
+ guard let error = self.viewModel.error.value as? Mastodon.API.Error,
+ case let .generic(errorEntity) = error.mastodonError,
+ errorEntity.error == "Validation failed: Locale is not included in the list"
+ else {
+ throw error
+ }
+ guard retryCount == 0 else {
+ throw error
+ }
+ let retryQuery = Mastodon.API.Account.RegisterQuery(
+ reason: query.reason,
+ username: query.username,
+ email: query.email,
+ password: query.password,
+ agreement: query.agreement,
+ locale: self.viewModel.instance.languages?.first ?? "en"
+ )
+ retryCount += 1
+ return self.context.apiService.accountRegister(
+ domain: self.viewModel.domain,
+ query: retryQuery,
+ authorization: self.viewModel.applicationAuthorization
+ )
+ }
.receive(on: DispatchQueue.main)
.sink { [weak self] completion in
guard let self = self else { return }
diff --git a/Mastodon/Scene/Onboarding/Share/OnboardingViewControllerAppearance.swift b/Mastodon/Scene/Onboarding/Share/OnboardingViewControllerAppearance.swift
index 4a4d04bf..17c4699e 100644
--- a/Mastodon/Scene/Onboarding/Share/OnboardingViewControllerAppearance.swift
+++ b/Mastodon/Scene/Onboarding/Share/OnboardingViewControllerAppearance.swift
@@ -80,8 +80,8 @@ extension OnboardingViewControllerAppearance {
extension OnboardingViewControllerAppearance {
static var viewEdgeMargin: CGFloat {
guard UIDevice.current.userInterfaceIdiom == .pad else { return .zero }
-
- let shortEdgeWidth = min(UIScreen.main.bounds.height, UIScreen.main.bounds.width)
- return shortEdgeWidth * 0.17 // magic
+ return 20
+// let shortEdgeWidth = min(UIScreen.main.bounds.height, UIScreen.main.bounds.width)
+// return shortEdgeWidth * 0.17 // magic
}
}