add localization to EditTagGroupView (#1692)

This commit is contained in:
Thai D. V 2023-11-28 15:19:48 +07:00 committed by GitHub
parent 2e2a9f5f14
commit 1f703fc1f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 102 additions and 17 deletions

View file

@ -128,20 +128,20 @@ private struct TitleInputView: View {
focusedField = .symbol focusedField = .symbol
} }
if focusedField == .title, !warningText.isEmpty { if focusedField == .title, warningText != "" {
Text(warningText).warningLabel() Text(warningText).warningLabel()
} }
} }
} }
var warningText: String { var warningText: LocalizedStringKey {
if case let .invalid(description) = titleValidationStatus { if case let .invalid(description) = titleValidationStatus {
return description return description
} else if } else if
isNewGroup, isNewGroup,
tagGroups.contains(where: { $0.title == title }) tagGroups.contains(where: { $0.title == title })
{ {
return "\(title) already exists" return "\(title) add-tag-groups.edit.title.field.warning.already-exists"
} }
return "" return ""
} }
@ -243,14 +243,14 @@ private struct TagsInputView: View {
} }
} }
if focusedField == .new, !warningText.isEmpty { if focusedField == .new, warningText != "" {
Text(warningText).warningLabel() Text(warningText).warningLabel()
} }
} }
var warningText: String { var warningText: LocalizedStringKey {
if tags.contains(newTag) { if tags.contains(newTag) {
return "duplicated tag" return "add-tag-groups.edit.tags.field.warning.duplicated-tag"
} else if case let .invalid(description) = tagsValidationStatus { } else if case let .invalid(description) = tagsValidationStatus {
return description return description
} }
@ -337,7 +337,7 @@ private struct SymbolSearchResultsView: View {
// MARK: search results validation // MARK: search results validation
enum ValidationStatus: Equatable { enum ValidationStatus: Equatable {
case valid case valid
case invalid(description: String) case invalid(description: LocalizedStringKey)
} }
var validationStatus: ValidationStatus { var validationStatus: ValidationStatus {
@ -346,9 +346,9 @@ private struct SymbolSearchResultsView: View {
&& !symbolQuery.isEmpty && !symbolQuery.isEmpty
&& results.count == 0 && results.count == 0
{ {
return .invalid(description: "\(symbolQuery) is already selected") return .invalid(description: "\(symbolQuery) add-tag-groups.edit.tags.field.warning.search-results.already-selected")
} else { } else {
return .invalid(description: "No Symbol Found") return .invalid(description: "add-tag-groups.edit.tags.field.warning.search-results.no-symbol-found")
} }
} else { } else {
return .valid return .valid
@ -360,24 +360,26 @@ extension TagGroup {
// MARK: title validation // MARK: title validation
enum TitleValidationStatus: Equatable { enum TitleValidationStatus: Equatable {
case valid case valid
case invalid(description: String) case invalid(description: LocalizedStringKey)
} }
var titleValidationStatus: TitleValidationStatus { var titleValidationStatus: TitleValidationStatus {
title.isEmpty ? .invalid(description: "title is empty") : .valid title.isEmpty
? .invalid(description: "add-tag-groups.edit.title.field.warning.empty-title")
: .valid
} }
// MARK: symbolName validation // MARK: symbolName validation
enum SymbolNameValidationStatus: Equatable { enum SymbolNameValidationStatus: Equatable {
case valid case valid
case invalid(description: String) case invalid(description: LocalizedStringKey)
} }
var symbolNameValidationStatus: SymbolNameValidationStatus { var symbolNameValidationStatus: SymbolNameValidationStatus {
if symbolName.isEmpty { if symbolName.isEmpty {
return .invalid(description: "no symbol is selected yet") return .invalid(description: "add-tag-groups.edit.title.field.warning.no-symbol-selected")
} else if !Self.allSymbols.contains(symbolName) { } else if !Self.allSymbols.contains(symbolName) {
return .invalid(description: "\(symbolName) is not a valid FSSymbol name") return .invalid(description: "\(symbolName) add-tag-groups.edit.title.field.warning.invalid-sfsymbol-name")
} }
return .valid return .valid
@ -386,12 +388,12 @@ extension TagGroup {
// MARK: tags validation // MARK: tags validation
enum TagsValidationStatus: Equatable { enum TagsValidationStatus: Equatable {
case valid case valid
case invalid(description: String) case invalid(description: LocalizedStringKey)
} }
var tagsValidationStatus: TagsValidationStatus { var tagsValidationStatus: TagsValidationStatus {
if tags.count < 2 { if tags.count < 2 {
return .invalid(description: "the number of tags is smaller than 2") return .invalid(description: "add-tag-groups.edit.tags.field.warning.number-of-tags")
} }
return .valid return .valid
} }

View file

@ -1,6 +1,9 @@
{ {
"sourceLanguage" : "en", "sourceLanguage" : "en",
"strings" : { "strings" : {
"" : {
},
" ⸱ " : { " ⸱ " : {
"localizations" : { "localizations" : {
"be" : { "be" : {
@ -225,6 +228,36 @@
} }
} }
}, },
"%@ add-tag-groups.edit.tags.field.warning.search-results.already-selected" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ is already selected"
}
}
}
},
"%@ add-tag-groups.edit.title.field.warning.already-exists" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ already exists"
}
}
}
},
"%@ add-tag-groups.edit.title.field.warning.invalid-sfsymbol-name" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ is an invalid SFSymbol name"
}
}
}
},
"%@©2023 Thomas Ricouard" : { "%@©2023 Thomas Ricouard" : {
"localizations" : { "localizations" : {
"be" : { "be" : {
@ -17930,6 +17963,36 @@
} }
} }
}, },
"add-tag-groups.edit.tags.field.warning.duplicated-tag" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Duplicated tag"
}
}
}
},
"add-tag-groups.edit.tags.field.warning.number-of-tags" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Number of tags is less than 2"
}
}
}
},
"add-tag-groups.edit.tags.field.warning.search-results.no-symbol-found" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "No Symbol Found"
}
}
}
},
"add-tag-groups.edit.title.field" : { "add-tag-groups.edit.title.field" : {
"comment" : "MARK: Tag Groups", "comment" : "MARK: Tag Groups",
"localizations" : { "localizations" : {
@ -18049,6 +18112,26 @@
} }
} }
}, },
"add-tag-groups.edit.title.field.warning.empty-title" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Empty title"
}
}
}
},
"add-tag-groups.edit.title.field.warning.no-symbol-selected" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "No symbol is selected"
}
}
}
},
"alert.button.ok" : { "alert.button.ok" : {
"localizations" : { "localizations" : {
"be" : { "be" : {
@ -70392,4 +70475,4 @@
} }
}, },
"version" : "1.0" "version" : "1.0"
} }