From 1f703fc1f4605cde425a45fdabb1b41af8944c71 Mon Sep 17 00:00:00 2001 From: "Thai D. V" <46838577+thai-d-v@users.noreply.github.com> Date: Tue, 28 Nov 2023 15:19:48 +0700 Subject: [PATCH] add localization to `EditTagGroupView` (#1692) --- .../App/Tabs/TagGroup/EditTagGroupView.swift | 34 ++++---- .../Localization/Localizable.xcstrings | 85 ++++++++++++++++++- 2 files changed, 102 insertions(+), 17 deletions(-) diff --git a/IceCubesApp/App/Tabs/TagGroup/EditTagGroupView.swift b/IceCubesApp/App/Tabs/TagGroup/EditTagGroupView.swift index f2d6da06..10fc399d 100644 --- a/IceCubesApp/App/Tabs/TagGroup/EditTagGroupView.swift +++ b/IceCubesApp/App/Tabs/TagGroup/EditTagGroupView.swift @@ -128,20 +128,20 @@ private struct TitleInputView: View { focusedField = .symbol } - if focusedField == .title, !warningText.isEmpty { + if focusedField == .title, warningText != "" { Text(warningText).warningLabel() } } } - var warningText: String { + var warningText: LocalizedStringKey { if case let .invalid(description) = titleValidationStatus { return description } else if isNewGroup, tagGroups.contains(where: { $0.title == title }) { - return "\(title) already exists" + return "\(title) add-tag-groups.edit.title.field.warning.already-exists" } return "" } @@ -243,14 +243,14 @@ private struct TagsInputView: View { } } - if focusedField == .new, !warningText.isEmpty { + if focusedField == .new, warningText != "" { Text(warningText).warningLabel() } } - var warningText: String { + var warningText: LocalizedStringKey { if tags.contains(newTag) { - return "duplicated tag" + return "add-tag-groups.edit.tags.field.warning.duplicated-tag" } else if case let .invalid(description) = tagsValidationStatus { return description } @@ -337,7 +337,7 @@ private struct SymbolSearchResultsView: View { // MARK: search results validation enum ValidationStatus: Equatable { case valid - case invalid(description: String) + case invalid(description: LocalizedStringKey) } var validationStatus: ValidationStatus { @@ -346,9 +346,9 @@ private struct SymbolSearchResultsView: View { && !symbolQuery.isEmpty && 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 { - return .invalid(description: "No Symbol Found") + return .invalid(description: "add-tag-groups.edit.tags.field.warning.search-results.no-symbol-found") } } else { return .valid @@ -360,24 +360,26 @@ extension TagGroup { // MARK: title validation enum TitleValidationStatus: Equatable { case valid - case invalid(description: String) + case invalid(description: LocalizedStringKey) } 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 enum SymbolNameValidationStatus: Equatable { case valid - case invalid(description: String) + case invalid(description: LocalizedStringKey) } var symbolNameValidationStatus: SymbolNameValidationStatus { 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) { - 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 @@ -386,12 +388,12 @@ extension TagGroup { // MARK: tags validation enum TagsValidationStatus: Equatable { case valid - case invalid(description: String) + case invalid(description: LocalizedStringKey) } var tagsValidationStatus: TagsValidationStatus { 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 } diff --git a/IceCubesApp/Resources/Localization/Localizable.xcstrings b/IceCubesApp/Resources/Localization/Localizable.xcstrings index 2c1206d7..f490fb38 100644 --- a/IceCubesApp/Resources/Localization/Localizable.xcstrings +++ b/IceCubesApp/Resources/Localization/Localizable.xcstrings @@ -1,6 +1,9 @@ { "sourceLanguage" : "en", "strings" : { + "" : { + + }, " ⸱ " : { "localizations" : { "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" : { "localizations" : { "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" : { "comment" : "MARK: Tag Groups", "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" : { "localizations" : { "be" : { @@ -70392,4 +70475,4 @@ } }, "version" : "1.0" -} \ No newline at end of file +}