Reputation: 23
I have the following code:
if let index = currentLanguages.firstIndex(where: { $0.languageCode == language.languageCode }) {
currentLanguages.remove(at: index)
} else {
currentLanguages.append(language)
}
where currentLanguages is an array [Locale.Language]
and language is simply Locale.Language
. Now I have a button to toggle each language on or off. But when I select Chinese (Taiwan) it does not differentiate from Chinese (China mainland). Why does this happen even if I use maximalIdentifier to compare or even with script and region compared in the same case? How can I make sure to differentiate on a regional level? This is for translation purposes so it will matter ^^
Thanks in advance!
Upvotes: 0
Views: 60
Reputation: 23
Thanks to workindog I checked again to see how I am storing the languages in my model. And after setting maximalIdentifier here on my language properies it works like a charm!
Solution is:
var selectedProjectLanguagesRaw: [String]?
var selectedProjectLanguages: [Locale.Language]? {
get {
guard let rawValues = selectedProjectLanguagesRaw else { return nil }
return rawValues.compactMap { Locale.Language(identifier: $0) }
}
set {
selectedProjectLanguagesRaw = newValue?.compactMap { $0.maximalIdentifier }
}
}
Thanks again for the help!!
Upvotes: 1
Reputation: 36782
For How can I make sure to differentiate on a regional level
,
try this approach to compare the different regions between
Chinese (Taiwan) and Chinese (China mainland) as you call them.
let taiwanLocale = Locale(identifier: "zh-TW")
let chinaLocale = Locale(identifier: "zh-CN")
print("taiwan languageCode: \(taiwanLocale.language.languageCode)")
print("china languageCode: \(chinaLocale.language.languageCode)\n")
print("taiwanRegion: \(taiwanLocale.region)")
print("chinaRegion: \(chinaLocale.region)\n")
// Compare language
if taiwanLocale.language.languageCode == chinaLocale.language.languageCode {
print("Both use the same language: \(taiwanLocale.language.languageCode ?? "Unknown")")
} else {
print("Different languages: \(taiwanLocale.language.languageCode ?? "Unknown") vs \(chinaLocale.language.languageCode ?? "Unknown")")
}
// Compare Region <--- here
if taiwanLocale.region == chinaLocale.region {
print("Same region: \(taiwanLocale.region?.identifier ?? "Unknown")")
} else {
print("Different regions: \(taiwanLocale.region ?? "Unknown") vs \(chinaLocale.region?.identifier ?? "Unknown")")
}
The results give you:
taiwan languageCode: Optional(zh)
china languageCode: Optional(zh)
taiwanRegion: Optional(TW)
chinaRegion: Optional(CN)
Both use the same language: zh
Different regions: TW vs CN
Upvotes: 0