diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj index 17fb281f..87935026 100644 --- a/damus.xcodeproj/project.pbxproj +++ b/damus.xcodeproj/project.pbxproj @@ -308,9 +308,6 @@ 3A66D927299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; 3A66D928299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 3A66D929299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ja; path = ja.lproj/Localizable.stringsdict; sourceTree = ""; }; - 3A7D373429C2056500449FD0 /* hu_HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu_HU; path = hu_HU.lproj/InfoPlist.strings; sourceTree = ""; }; - 3A7D373529C2056500449FD0 /* hu_HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = hu_HU; path = hu_HU.lproj/Localizable.stringsdict; sourceTree = ""; }; - 3A7D373629C2056500449FD0 /* hu_HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu_HU; path = hu_HU.lproj/Localizable.strings; sourceTree = ""; }; 3A827A18299FC69D00C4D171 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; 3A827A19299FC69D00C4D171 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 3A827A1A299FC69D00C4D171 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = ""; }; @@ -348,12 +345,18 @@ 3ACB685B297633BC00C46468 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/InfoPlist.strings"; sourceTree = ""; }; 3ACB685E297633BC00C46468 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = ""; }; 3ACBCB77295FE5C70037388A /* TimeAgoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeAgoTests.swift; sourceTree = ""; }; + 3AD14EB529C40F38009D2D9C /* hu-HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "hu-HU"; path = "hu-HU.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 3AD14EB629C40F38009D2D9C /* hu-HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "hu-HU"; path = "hu-HU.lproj/InfoPlist.strings"; sourceTree = ""; }; + 3AD14EB729C40F38009D2D9C /* hu-HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "hu-HU"; path = "hu-HU.lproj/Localizable.strings"; sourceTree = ""; }; + 3AD14EB829C40F3F009D2D9C /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "sv-SE"; path = "sv-SE.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 3AD14EB929C40F3F009D2D9C /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sv-SE"; path = "sv-SE.lproj/InfoPlist.strings"; sourceTree = ""; }; + 3AD14EBA29C40F3F009D2D9C /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sv-SE"; path = "sv-SE.lproj/Localizable.strings"; sourceTree = ""; }; + 3AD14EBB29C40F47009D2D9C /* fr-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CA"; path = "fr-CA.lproj/InfoPlist.strings"; sourceTree = ""; }; + 3AD14EBC29C40F47009D2D9C /* fr-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "fr-CA"; path = "fr-CA.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 3AD14EBD29C40F47009D2D9C /* fr-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CA"; path = "fr-CA.lproj/Localizable.strings"; sourceTree = ""; }; 3AD5662B29BD2F5300BF77C5 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/InfoPlist.strings; sourceTree = ""; }; 3AD5662C29BD2F5300BF77C5 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = fa; path = fa.lproj/Localizable.stringsdict; sourceTree = ""; }; 3AD5662D29BD2F5300BF77C5 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/Localizable.strings; sourceTree = ""; }; - 3AD5662E29C0DA4000BF77C5 /* sv_SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv_SE; path = sv_SE.lproj/InfoPlist.strings; sourceTree = ""; }; - 3AD5662F29C0DA4000BF77C5 /* sv_SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv_SE; path = sv_SE.lproj/Localizable.strings; sourceTree = ""; }; - 3AD5663029C0DA4000BF77C5 /* sv_SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sv_SE; path = sv_SE.lproj/Localizable.stringsdict; sourceTree = ""; }; 3AD5663129C0DA4B00BF77C5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; 3AD5663229C0DA4B00BF77C5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Localizable.stringsdict; sourceTree = ""; }; 3AD5663329C0DA4B00BF77C5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1308,9 +1311,10 @@ uk, bg, fa, - sv_SE, ko, - hu_HU, + "hu-HU", + "sv-SE", + "fr-CA", ); mainGroup = 4CE6DEDA27F7A08100C66700; packageReferences = ( @@ -1658,9 +1662,10 @@ 3AA5E70429B682B3002701ED /* uk */, 3AA5E70729B9E84A002701ED /* bg */, 3AD5662C29BD2F5300BF77C5 /* fa */, - 3AD5663029C0DA4000BF77C5 /* sv_SE */, 3AD5663229C0DA4B00BF77C5 /* ko */, - 3A7D373529C2056500449FD0 /* hu_HU */, + 3AD14EB529C40F38009D2D9C /* hu-HU */, + 3AD14EB829C40F3F009D2D9C /* sv-SE */, + 3AD14EBC29C40F47009D2D9C /* fr-CA */, ); name = Localizable.stringsdict; sourceTree = ""; @@ -1689,9 +1694,10 @@ 3AA5E70329B682AD002701ED /* uk */, 3AA5E70529B9E83E002701ED /* bg */, 3AD5662B29BD2F5300BF77C5 /* fa */, - 3AD5662E29C0DA4000BF77C5 /* sv_SE */, 3AD5663329C0DA4B00BF77C5 /* ko */, - 3A7D373429C2056500449FD0 /* hu_HU */, + 3AD14EB629C40F38009D2D9C /* hu-HU */, + 3AD14EB929C40F3F009D2D9C /* sv-SE */, + 3AD14EBB29C40F47009D2D9C /* fr-CA */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1721,9 +1727,10 @@ 3AA5E70229B682A5002701ED /* uk */, 3AA5E70629B9E844002701ED /* bg */, 3AD5662D29BD2F5300BF77C5 /* fa */, - 3AD5662F29C0DA4000BF77C5 /* sv_SE */, 3AD5663129C0DA4B00BF77C5 /* ko */, - 3A7D373629C2056500449FD0 /* hu_HU */, + 3AD14EB729C40F38009D2D9C /* hu-HU */, + 3AD14EBA29C40F3F009D2D9C /* sv-SE */, + 3AD14EBD29C40F47009D2D9C /* fr-CA */, ); name = Localizable.strings; sourceTree = ""; diff --git a/damus/Models/Mentions.swift b/damus/Models/Mentions.swift index fb408840..226f888f 100644 --- a/damus/Models/Mentions.swift +++ b/damus/Models/Mentions.swift @@ -274,8 +274,8 @@ func format_msats(_ msat: Int64, locale: Locale = Locale.current) -> String { let sats = NSNumber(value: (Double(msat) / 1000.0)) let formattedSats = numberFormatter.string(from: sats) ?? sats.stringValue - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "sats_count", value: nil, table: nil), locale: locale, sats.decimalValue as NSDecimalNumber, formattedSats) + let format = localizedStringFormat(key: "sats_count", locale: locale) + return String(format: format, locale: locale, sats.decimalValue as NSDecimalNumber, formattedSats) } func convert_invoice_block(_ b: invoice_block) -> Block? { diff --git a/damus/Util/LocalizationUtil.swift b/damus/Util/LocalizationUtil.swift index 7e2aa938..b0fdad15 100644 --- a/damus/Util/LocalizationUtil.swift +++ b/damus/Util/LocalizationUtil.swift @@ -15,3 +15,9 @@ func bundleForLocale(locale: Locale?) -> Bundle { let path = Bundle.main.path(forResource: locale!.identifier, ofType: "lproj") return path != nil ? (Bundle(path: path!) ?? Bundle.main) : Bundle.main } + +func localizedStringFormat(key: String, locale: Locale?) -> String { + let bundle = bundleForLocale(locale: locale) + let fallback = bundleForLocale(locale: Locale(identifier: "en-US")).localizedString(forKey: key, value: nil, table: nil) + return bundle.localizedString(forKey: key, value: fallback, table: nil) +} diff --git a/damus/Views/ActionBar/EventDetailBar.swift b/damus/Views/ActionBar/EventDetailBar.swift index 799f0925..2d69f76b 100644 --- a/damus/Views/ActionBar/EventDetailBar.swift +++ b/damus/Views/ActionBar/EventDetailBar.swift @@ -53,18 +53,18 @@ struct EventDetailBar: View { } func repostsCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "reposts_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "reposts_count", locale: locale) + return String(format: format, locale: locale, count) } func reactionsCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "reactions_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "reactions_count", locale: locale) + return String(format: format, locale: locale, count) } func zapsCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "zaps_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "zaps_count", locale: locale) + return String(format: format, locale: locale, count) } struct EventDetailBar_Previews: PreviewProvider { diff --git a/damus/Views/ActionBar/ShareAction.swift b/damus/Views/ActionBar/ShareAction.swift index 4e4cf13c..e4e76262 100644 --- a/damus/Views/ActionBar/ShareAction.swift +++ b/damus/Views/ActionBar/ShareAction.swift @@ -32,7 +32,7 @@ struct ShareAction: View { let col = colorScheme == .light ? Color("DamusMediumGrey") : Color("DamusWhite") VStack { - Text("Share Note") + Text("Share Note", comment: "Title text to indicate that the buttons below are meant to be used to share a note with others.") .padding() .font(.system(size: 17, weight: .bold)) @@ -40,7 +40,7 @@ struct ShareAction: View { HStack(alignment: .top, spacing: 25) { - ShareActionButton(img: "link", txt: "Copy Link", comment: "Button to copy link to note", col: col) { + ShareActionButton(img: "link", text: NSLocalizedString("Copy Link", comment: "Button to copy link to note"), col: col) { show_share_action = false UIPasteboard.general.string = "https://damus.io/" + (bech32_note_id(event.id) ?? event.id) } @@ -48,18 +48,18 @@ struct ShareAction: View { let bookmarkImg = isBookmarked ? "bookmark.slash" : "bookmark" let bookmarkTxt = isBookmarked ? "Remove\nBookmark" : "Bookmark" let boomarkCol = isBookmarked ? Color(.red) : col - ShareActionButton(img: bookmarkImg, txt: bookmarkTxt, comment: "Button to bookmark to note", col: boomarkCol) { + ShareActionButton(img: bookmarkImg, text: NSLocalizedString(bookmarkTxt, comment: "Button to bookmark to note"), col: boomarkCol) { show_share_action = false self.bookmarks.updateBookmark(event) isBookmarked = self.bookmarks.isBookmarked(event) } - ShareActionButton(img: "globe", txt: "Broadcast", comment: "Button to broadcast note to all your relays", col: col) { + ShareActionButton(img: "globe", text: NSLocalizedString("Broadcast", comment: "Button to broadcast note to all your relays"), col: col) { show_share_action = false NotificationCenter.default.post(name: .broadcast_event, object: event) } - ShareActionButton(img: "square.and.arrow.up", txt: "Share Via...", comment: "Button to present iOS share sheet", col: col) { + ShareActionButton(img: "square.and.arrow.up", text: NSLocalizedString("Share Via...", comment: "Button to present iOS share sheet"), col: col) { show_share_action = false show_share_sheet = true } @@ -87,7 +87,7 @@ struct ShareAction: View { } } -func ShareActionButton(img: String, txt: String, comment: String, col: Color, action: @escaping () -> ()) -> some View { +func ShareActionButton(img: String, text: String, col: Color, action: @escaping () -> ()) -> some View { Button(action: action) { VStack() { Image(systemName: img) @@ -99,7 +99,7 @@ func ShareActionButton(img: String, txt: String, comment: String, col: Color, ac .frame(width: 55.0, height: 55.0) } .frame(height: 25) - Text(NSLocalizedString(txt, comment: comment)) + Text(verbatim: text) .foregroundColor(col) .font(.footnote) .multilineTextAlignment(.center) diff --git a/damus/Views/ConfigView.swift b/damus/Views/ConfigView.swift index 459c8c62..5daeab99 100644 --- a/damus/Views/ConfigView.swift +++ b/damus/Views/ConfigView.swift @@ -213,7 +213,7 @@ struct ConfigView: View { clear_kingfisher_cache() } - Picker(NSLocalizedString("Select image uplodaer", comment: "Prompt selection of user's image uplodaer"), + Picker(NSLocalizedString("Select image uploader", comment: "Prompt selection of user's image uploader"), selection: $settings.default_image_uploader) { ForEach(ImageUploader.allCases, id: \.self) { uploader in Text(uploader.model.displayName) diff --git a/damus/Views/Events/EventMenu.swift b/damus/Views/Events/EventMenu.swift index 3f9bc101..47bcb21a 100644 --- a/damus/Views/Events/EventMenu.swift +++ b/damus/Views/Events/EventMenu.swift @@ -18,11 +18,11 @@ struct EventMenuContext: View { var body: some View { HStack { Menu { - + MenuItems(event: event, keypair: keypair, target_pubkey: target_pubkey, bookmarks: bookmarks) } label: { - Label(NSLocalizedString("", comment: "Context menu"), systemImage: "ellipsis") + Label("", systemImage: "ellipsis") .foregroundColor(Color.gray) } } diff --git a/damus/Views/Events/ReplyDescription.swift b/damus/Views/Events/ReplyDescription.swift index b92eda50..2fa89db7 100644 --- a/damus/Views/Events/ReplyDescription.swift +++ b/damus/Views/Events/ReplyDescription.swift @@ -49,7 +49,7 @@ func reply_desc(profiles: Profiles, event: NostrEvent, locale: Locale = Locale.c if othersCount == 0 { return String(format: NSLocalizedString("Replying to %@ & %@", bundle: bundle, comment: "Label to indicate that the user is replying to 2 users."), locale: locale, uniqueNames[0], uniqueNames[1]) } else { - return String(format: bundle.localizedString(forKey: "replying_to_two_and_others", value: nil, table: nil), locale: locale, othersCount, uniqueNames[0], uniqueNames[1]) + return String(format: localizedStringFormat(key: "replying_to_two_and_others", locale: locale), locale: locale, othersCount, uniqueNames[0], uniqueNames[1]) } } diff --git a/damus/Views/Events/TextEvent.swift b/damus/Views/Events/TextEvent.swift index e6d8bc91..13e8c442 100644 --- a/damus/Views/Events/TextEvent.swift +++ b/damus/Views/Events/TextEvent.swift @@ -40,7 +40,7 @@ struct TextEvent: View { let pk = is_anon ? "anon" : pubkey EventProfileName(pubkey: pk, profile: profile, damus: damus, show_friend_confirmed: true, size: .normal) - Text("⋅") + Text(verbatim: "⋅") .font(.footnote) .foregroundColor(.gray) Text(verbatim: "\(format_relative_time(event.created_at))") diff --git a/damus/Views/Notifications/EventGroupView.swift b/damus/Views/Notifications/EventGroupView.swift index b445eeb6..b750daaf 100644 --- a/damus/Views/Notifications/EventGroupView.swift +++ b/damus/Views/Notifications/EventGroupView.swift @@ -121,28 +121,30 @@ func event_group_author_name(profiles: Profiles, ind: Int, group: EventGroupType "zapped_your_profile_3" - returned when 3 or more zaps occurred to the current user's profile */ func reacting_to_text(profiles: Profiles, our_pubkey: String, group: EventGroupType, ev: NostrEvent?, locale: Locale? = nil) -> String { + if group.events.count == 0 { + return "??" + } + let verb = reacting_to_verb(group: group) let reacting_to = determine_reacting_to(our_pubkey: our_pubkey, ev: ev) let localization_key = "\(verb)_\(reacting_to)_\(min(group.events.count, 3))" - let bundle = bundleForLocale(locale: locale) + let format = localizedStringFormat(key: localization_key, locale: locale) switch group.events.count { - case 0: - return "??" case 1: let display_name = event_group_author_name(profiles: profiles, ind: 0, group: group) - return String(format: bundle.localizedString(forKey: localization_key, value: bundleForLocale(locale: Locale(identifier: "en-US")).localizedString(forKey: localization_key, value: nil, table: nil), table: nil), locale: locale, display_name) + return String(format: format, locale: locale, display_name) case 2: let alice_name = event_group_author_name(profiles: profiles, ind: 0, group: group) let bob_name = event_group_author_name(profiles: profiles, ind: 1, group: group) - return String(format: bundle.localizedString(forKey: localization_key, value: bundleForLocale(locale: Locale(identifier: "en-US")).localizedString(forKey: localization_key, value: nil, table: nil), table: nil), locale: locale, alice_name, bob_name) + return String(format: format, locale: locale, alice_name, bob_name) default: let alice_name = event_group_author_name(profiles: profiles, ind: 0, group: group) let count = group.events.count - 1 - return String(format: bundle.localizedString(forKey: localization_key, value: bundleForLocale(locale: Locale(identifier: "en-US")).localizedString(forKey: localization_key, value: nil, table: nil), table: nil), locale: locale, count, alice_name) + return String(format: format, locale: locale, count, alice_name) } } diff --git a/damus/Views/ProfileView.swift b/damus/Views/ProfileView.swift index 84fc66fb..e2b9c2ba 100644 --- a/damus/Views/ProfileView.swift +++ b/damus/Views/ProfileView.swift @@ -50,18 +50,18 @@ func follow_btn_enabled_state(_ fs: FollowState) -> Bool { } func followersCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "followers_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "followers_count", locale: locale) + return String(format: format, locale: locale, count) } func followingCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "following_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "following_count", locale: locale) + return String(format: format, locale: locale, count) } func relaysCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "relays_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "relays_count", locale: locale) + return String(format: format, locale: locale, count) } struct EditButton: View { diff --git a/damus/ar.lproj/Localizable.strings b/damus/ar.lproj/Localizable.strings index faa0e584..c1a584bd 100644 Binary files a/damus/ar.lproj/Localizable.strings and b/damus/ar.lproj/Localizable.strings differ diff --git a/damus/de.lproj/Localizable.stringsdict b/damus/de.lproj/Localizable.stringsdict index 72dafec3..76fa5ccf 100644 --- a/damus/de.lproj/Localizable.stringsdict +++ b/damus/de.lproj/Localizable.stringsdict @@ -34,6 +34,22 @@ Follower + following_count + + NSStringLocalizedFormatKey + %#@FOLLOWING@ + FOLLOWING + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Folge ich + other + Folge ich + + reacted_tagged_in_3 NSStringLocalizedFormatKey diff --git a/damus/en-US.xcloc/Localized Contents/en-US.xliff b/damus/en-US.xcloc/Localized Contents/en-US.xliff index d66a41dc..950c0381 100644 --- a/damus/en-US.xcloc/Localized Contents/en-US.xliff +++ b/damus/en-US.xcloc/Localized Contents/en-US.xliff @@ -159,6 +159,11 @@ Sentence composed of 2 variables to describe how many people are following a use All Label for filter for all notifications. + + Always show images + Always show images + Setting to always show and never blur images + Anonymous Anonymous @@ -255,12 +260,14 @@ Sentence composed of 2 variables to describe how many people are following a use Broadcast Broadcast - Context menu option for broadcasting the user's note to all of the user's connected relay servers. + Button to broadcast note to all your relays + Context menu option for broadcasting the user's note to all of the user's connected relay servers. Cancel Cancel Alert button to cancel out of alert for blocking a user. + Button to cancel a repost. Button to cancel out of alert that creates a new mutelist. Button to cancel out of posting a note. Button to cancel out of reposting a post. @@ -329,6 +336,11 @@ Sentence composed of 2 variables to describe how many people are following a use Copy LNURL Context menu option for copying a user's Lightning URL. + + Copy Link + Copy Link + Button to copy link to note + Copy Note ID Copy Note ID @@ -583,6 +595,11 @@ Sentence composed of 2 variables to describe how many people are following a use Images Section title for images configuration. + + Invalid Tip Address + Invalid Tip Address + Title of alerting as invalid tip address. + Invalid key Invalid key @@ -676,6 +693,11 @@ Sentence composed of 2 variables to describe how many people are following a use Mentions Label for filter for seeing mention notifications (replies, etc). + + Miscellaneous + Miscellaneous + Section header for miscellaneous user configuration + Muun Muun @@ -706,6 +728,16 @@ Sentence composed of 2 variables to describe how many people are following a use No zaps are sent, only a lightning payment. Description of non-zap type where sats are sent to the user's wallet as a regular Lightning payment, not as a zap. + + NostrBuild + NostrBuild + Dropdown option label for system default for NostrBuild image uploader. + + + NostrImg + NostrImg + Dropdown option label for system default for NostrImg image uploader. + Note contains "nsec1" private key. Are you sure? Note contains "nsec1" private key. Are you sure? @@ -726,6 +758,11 @@ Sentence composed of 2 variables to describe how many people are following a use Nudity or explicit content Button for user to report that the account or content has nudity or explicit content. + + Ok + Ok + Button to dismiss the alert. + Only you can see this message and who sent it. Only you can see this message and who sent it. @@ -998,6 +1035,11 @@ Picker option to indicate that a zap should be sent privately and not identify t Select default wallet Prompt selection of user's default wallet + + Select image uploader + Select image uploader + Prompt selection of user's image uploader + Send a message to start the conversation... Send a message to start the conversation... @@ -1026,6 +1068,16 @@ Picker option to indicate that a zap should be sent privately and not identify t Button to share an image. Button to share the link to a profile. + + Share Note + Share Note + Title text to indicate that the buttons below are meant to be used to share a note with others. + + + Share Via... + Share Via... + Button to present iOS share sheet + Show Show @@ -1078,6 +1130,11 @@ Picker option to indicate that a zap should be sent privately and not identify t Thanks! Button to close out of alert that informs that the action to block a user was successful. + + The address should either begin with LNURL or should look like an email address. + The address should either begin with LNURL or should look like an email address. + Giving the description of the alert message. + They are impersonating someone They are impersonating someone @@ -1283,6 +1340,11 @@ YOU WILL NO LONGER BE ABLE TO LOG INTO DAMUS USING THIS ACCOUNT KEY. Zap Type Header text to indicate that the picker below it is to choose the type of zap to send. + + Zap Vibration + Zap Vibration + Setting to enable vibration on zap + Zapping... Zapping... diff --git a/damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings b/damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings index 074e150d..bfb2e223 100644 Binary files a/damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings and b/damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings differ diff --git a/damus/fr-CA.lproj/InfoPlist.strings b/damus/fr-CA.lproj/InfoPlist.strings new file mode 100644 index 00000000..025bd7ad Binary files /dev/null and b/damus/fr-CA.lproj/InfoPlist.strings differ diff --git a/damus/fr-CA.lproj/Localizable.strings b/damus/fr-CA.lproj/Localizable.strings new file mode 100644 index 00000000..f50a6296 Binary files /dev/null and b/damus/fr-CA.lproj/Localizable.strings differ diff --git a/damus/fr-CA.lproj/Localizable.stringsdict b/damus/fr-CA.lproj/Localizable.stringsdict new file mode 100644 index 00000000..b24dadeb --- /dev/null +++ b/damus/fr-CA.lproj/Localizable.stringsdict @@ -0,0 +1,330 @@ + + + + + collapsed_event_view_other_notes + + NSStringLocalizedFormatKey + %#@NOTES@ + NOTES + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + ... %d autre note ... + many + ... %d autres notes ... + other + ... %d autres notes ... + + + followers_count + + NSStringLocalizedFormatKey + %#@FOLLOWERS@ + FOLLOWERS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Abonné + many + Abonnés + other + Abonnés + + + following_count + + NSStringLocalizedFormatKey + %#@FOLLOWING@ + FOLLOWING + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Abonnement + many + Abonnements + other + Abonnements + + + reacted_tagged_in_3 + + NSStringLocalizedFormatKey + %#@REACTED@ + REACTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont réagi à une note dans laquelle vous apparaissez + many + %2$@ et %1$d autres ont réagi à une note dans laquelle vous apparaissez + other + %2$@ et %1$d autres ont réagi à une note dans laquelle vous apparaissez + + + reacted_your_post_3 + + NSStringLocalizedFormatKey + %#@REACTED@ + REACTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont réagi à votre note + many + %2$@ et %1$d autres ont réagi à votre note + other + %2$@ et %1$d autres ont réagi à votre note + + + reacted_your_profile_3 + + NSStringLocalizedFormatKey + %#@REACTED@ + REACTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont réagi à votre profil + many + %2$@ et %1$d autres ont réagi à votre profil + other + %2$@ et %1$d autres ont réagi à votre profil + + + reactions_count + + NSStringLocalizedFormatKey + %#@REACTIONS@ + REACTIONS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Réaction + many + Réactions + other + Réactions + + + relays_count + + NSStringLocalizedFormatKey + %#@RELAYS@ + RELAYS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Relai + many + Relais + other + Relais + + + replying_to_two_and_others + + NSStringLocalizedFormatKey + %#@OTHERS@ + OTHERS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Réponse à %2$@, %3$@ & %1$d autre + many + Réponse à %2$@, %3$@ & %1$d autres + other + Réponse à %2$@, %3$@ & %1$d autres + + + reposted_tagged_in_3 + + NSStringLocalizedFormatKey + %#@REPOSTED@ + REPOSTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont cité une note dans laquelle vous apparaissez + many + %2$@ et %1$d autres ont cité une note dans laquelle vous apparaissez + other + %2$@ et %1$d autres ont republié une note dans laquelle vous apparaissez + + + reposted_your_post_3 + + NSStringLocalizedFormatKey + %#@REPOSTED@ + REPOSTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont cité votre note + many + %2$@ et %1$d autres ont cité votre note + other + %2$@ et %1$d autres ont republié votre note + + + reposted_your_profile_3 + + NSStringLocalizedFormatKey + %#@REPOSTED@ + REPOSTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont republié votre profile + many + %2$@ et %1$d autres ont republié votre profile + other + %2$@ et %1$d autres ont republié votre profile + + + reposts_count + + NSStringLocalizedFormatKey + %#@REPOSTS@ + REPOSTS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Republication + many + Republications + other + Republications + + + sats_count + + NSStringLocalizedFormatKey + %1$#@SATS@ + SATS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + @ + one + %2$@ sat + many + %2$@ sats + other + %2$@ sats + + + zapped_tagged_in_3 + + NSStringLocalizedFormatKey + %#@ZAPPED@ + ZAPPED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont zappé une note dans laquelle vous apparaissez + many + %2$@ et %1$d autres ont zappé une note dans laquelle vous apparaissez + other + %2$@ et %1$d autres ont zappé une note dans laquelle vous apparaissez + + + zapped_your_post_3 + + NSStringLocalizedFormatKey + %#@ZAPPED@ + ZAPPED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont zappé votre note + many + %2$@ et %1$d autres ont zappé votre note + other + %2$@ et %1$d autres ont zappé votre note + + + zapped_your_profile_3 + + NSStringLocalizedFormatKey + %#@ZAPPED@ + ZAPPED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont zappé votre profile + many + %2$@ et %1$d autres ont zappé votre profile + other + %2$@ et %1$d autres ont zappé votre profile + + + zaps_count + + NSStringLocalizedFormatKey + %#@ZAPS@ + ZAPS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Zap + many + Zaps + other + Zaps + + + + diff --git a/damus/fr-FR.lproj/Localizable.strings b/damus/fr-FR.lproj/Localizable.strings index d749ef8a..8f398462 100644 Binary files a/damus/fr-FR.lproj/Localizable.strings and b/damus/fr-FR.lproj/Localizable.strings differ diff --git a/damus/hu_HU.lproj/InfoPlist.strings b/damus/hu-HU.lproj/InfoPlist.strings similarity index 100% rename from damus/hu_HU.lproj/InfoPlist.strings rename to damus/hu-HU.lproj/InfoPlist.strings diff --git a/damus/hu_HU.lproj/Localizable.strings b/damus/hu-HU.lproj/Localizable.strings similarity index 100% rename from damus/hu_HU.lproj/Localizable.strings rename to damus/hu-HU.lproj/Localizable.strings diff --git a/damus/hu_HU.lproj/Localizable.stringsdict b/damus/hu-HU.lproj/Localizable.stringsdict similarity index 100% rename from damus/hu_HU.lproj/Localizable.stringsdict rename to damus/hu-HU.lproj/Localizable.stringsdict diff --git a/damus/pl-PL.lproj/Localizable.stringsdict b/damus/pl-PL.lproj/Localizable.stringsdict index 7bb9555b..01f4fb66 100644 --- a/damus/pl-PL.lproj/Localizable.stringsdict +++ b/damus/pl-PL.lproj/Localizable.stringsdict @@ -15,9 +15,9 @@ one ... %d inna notatka ... few - ... %d other notes ... + ... %d innych notatek ... many - ... %d other notes ... + ... %d innych notatek ... other ... %d inne notatki ... @@ -155,11 +155,11 @@ one Przekaźnik few - Relays + Przekaźniki many - Relays - other Przekaźników + other + Przekaźniki replying_to_two_and_others @@ -355,11 +355,11 @@ one Zap few - Zaps + Zapy many - Zaps - other Zapów + other + Zapy diff --git a/damus/sv_SE.lproj/InfoPlist.strings b/damus/sv-SE.lproj/InfoPlist.strings similarity index 100% rename from damus/sv_SE.lproj/InfoPlist.strings rename to damus/sv-SE.lproj/InfoPlist.strings diff --git a/damus/sv_SE.lproj/Localizable.strings b/damus/sv-SE.lproj/Localizable.strings similarity index 99% rename from damus/sv_SE.lproj/Localizable.strings rename to damus/sv-SE.lproj/Localizable.strings index 0287302a..b295dfd7 100644 Binary files a/damus/sv_SE.lproj/Localizable.strings and b/damus/sv-SE.lproj/Localizable.strings differ diff --git a/damus/sv_SE.lproj/Localizable.stringsdict b/damus/sv-SE.lproj/Localizable.stringsdict similarity index 100% rename from damus/sv_SE.lproj/Localizable.stringsdict rename to damus/sv-SE.lproj/Localizable.stringsdict diff --git a/transifex.yml b/transifex.yml index f109a5ca..72c89586 100644 --- a/transifex.yml +++ b/transifex.yml @@ -15,16 +15,252 @@ git: translation_files_expression: 'damus/.lproj/' settings: + # Mapping of most of the supported locale codes in Transifex to the locale code format that Xcode expects. + # Locale codes that are the identical between Transifex and Xcode do not need to be listed. language_mapping: en_US: en-US + aa_DJ: aa-DJ + af_ZA: af-ZA + am_ET: am-ET + ar_AA: ar-AA + ar_AE: ar-AE + ar_DZ: ar-DZ + ar_EG: ar-EG + ar_IQ: ar-IQ + ar_JO: ar-JO + ar_LB: ar-LB + ar_SA: ar-SA + ar_SD: ar-SD + ar_SY: ar-SY + as_IN: as-IN + ast_ES: ast-ES + az_AZ: az-AZ + az_IR: az-IR + be_BY: be-BY + bem_ZM: bem-ZM + bg_BG: bg-BG + bg_US: bg-US + bn_BD: bn-BD + bn_IN: bn-IN + bo_CN: bo-CN + bqi_IR: bqi-IR + br_FR: br-FR + bs_BA: bs-BA + bs_BA-SRP: bs-BA-SRP + ca_ES: ca-ES + cs_CZ: cs-CZ + cy_GB: cy-GB + da_DK: da-DK + de_AT: de-AT + de_CH: de-CH + de_DE: de-DE + dz_BT: dz-BT + el_CY: el-CY + el_DE: el-DE el_GR: el-GR + en_AE: en-AE + en_AL: en-AL + en_AT: en-AT + en_AU: en-AU + en_BA: en-BA + en_BA-SRP: en-BA-SRP + en_BD: en-BD + en_BE: en-BE + en_BG: en-BG + en_BH: en-BH + en_BR: en-BR + en_CA: en-CA + en_CH: en-CH + en_CL: en-CL + en_CO: en-CO + en_CY: en-CY + en_CZ: en-CZ + en_DE: en-DE + en_DK: en-DK + en_EC: en-EC + en_EG: en-EG + en_ES: en-ES + en_FI: en-FI + en_FJ: en-FJ + en_FR: en-FR + en_GB: en-GB + en_GH: en-GH + en_GR: en-GR + en_HK: en-HK + en_HR: en-HR + en_HU: en-HU + en_IE: en-IE + en_IN: en-IN + en_IT: en-IT + en_JP: en-JP + en_KR: en-KR + en_KW: en-KW + en_LK: en-LK + en_MX: en-MX + en_MY: en-MY + en_NG: en-NG + en_NL: en-NL + en_NO: en-NO + en_NZ: en-NZ + en_PE: en-PE + en_PG: en-PG + en_PH: en-PH + en_PK: en-PK + en_PL: en-PL + en_PR: en-PR + en_PT: en-PT + en_QA: en-QA + en_RO: en-RO + en_RS: en-RS + en_SA: en-SA + en_SE: en-SE + en_SG: en-SG + en_SI: en-SI + en_SK: en-SK + en_TT: en-TT + en_UG: en-UG + en_ZA: en-ZA + en_ZM: en-ZM + en_ee: en-ee + en_lt: en-lt + en_lv: en-lv es_419: es-419 + es_AR: es-AR + es_BO: es-BO + es_CL: es-CL + es_CO: es-CO + es_CR: es-CR + es_CU: es-CU + es_DO: es-DO + es_EC: es-EC + es_ES: es-ES + es_GT: es-GT + es_HN: es-HN + es_MX: es-MX + es_NI: es-NI + es_PA: es-PA + es_PE: es-PE + es_PR: es-PR + es_PY: es-PY + es_SA: es-SA + es_SV: es-SV + es_US: es-US + es_UY: es-UY + es_VE: es-VE + et_EE: et-EE + eu_ES: eu-ES + fa_AF: fa-AF + fa_IR: fa-IR + ff_SN: ff-SN + fi_FI: fi-FI + fil_PH: fil-PH + fo_FO: fo-FO + fr_BE: fr-BE + fr_CA: fr-CA + fr_CH: fr-CH + fr_CI: fr-CI + fr_CM: fr-CM fr_FR: fr-FR + fr_GA: fr-GA + fr_LU: fr-LU + fy_NL: fy-NL + ga_IE: ga-IE + gl_ES: gl-ES + gu_IN: gu-IN + gug_PY: gug-PY + he_IL: he-IL + hi_IN: hi-IN + hr_BA: hr-BA + hr_BA-SRP: hr-BA-SRP + hr_HR: hr-HR + ht_HT: ht-HT + hu_HU: hu-HU + hu_RO: hu-RO + hu_SK: hu-SK + hy_AM: hy-AM + hy_RU: hy-RU + hye_RU: hye-RU + id_ID: id-ID + is_IS: is-IS + it_CH: it-CH it_IT: it-IT + ja_JP: ja-JP + ka_GE: ka-GE + kk_KZ: kk-KZ + km_KH: km-KH + kn_IN: kn-IN + ko_KR: ko-KR + ks_IN: ks-IN + ku_IQ: ku-IQ + lg_UG: lg-UG + lo_LA: lo-LA + loz_ZM: loz-ZM + lt_LT: lt-LT lv_LV: lv-LV + mhr_RU: mhr-RU + mk_MK: mk-MK + ml_IN: ml-IN + mn_MN: mn-MN + mr_IN: mr-IN + ms_BN: ms-BN + ms_MY: ms-MY + mt_MT: mt-MT + my_MM: my-MM + nb_NO: nb-NO + ne_NP: ne-NP + nl_BE: nl-BE + nl_NL: nl-NL + nn_NO: nn-NO + no_NO: no-NO + or_IN: or-IN + pa_IN: pa-IN + pa_PK: pa-PK pl_PL: pl-PL + ps_AF: ps-AF + pt_AO: pt-AO + pt_BR: pt-BR + pt_MZ: pt-MZ pt_PT: pt-PT + qu_EC: qu-EC + ro_MD: ro-MD + ro_RO: ro-RO + ru_RU: ru-RU + ru_UA: ru-UA + ru_ee: ru-ee + ru_lt: ru-lt + ru_lv: ru-lv + si_LK: si-LK + sk_SK: sk-SK + sl_SI: sl-SI + sq_AL: sq-AL + sr_BA-SRP: sr-BA-SRP + sr_ME: sr-ME + sr_RS: sr-RS + st_ZA: st-ZA + sv_FI: sv-FI + sv_SE: sv-SE + sw_CD: sw-CD + sw_KE: sw-KE + sw_TZ: sw-TZ + sw_UG: sw-UG + ta_IN: ta-IN + ta_LK: ta-LK + te_IN: te-IN + tg_TJ: tg-TJ + th_TH: th-TH + tk_TM: tk-TM + tl_PH: tl-PH + tr_CY: tr-CY + tr_DE: tr-DE tr_TR: tr-TR + uk_UA: uk-UA + ur_PK: ur-PK + uz_UZ: uz-UZ + vi_VN: vi-VN + wo_SN: wo-SN + yue_CN: yue-CN zh_CN: zh-CN zh_HK: zh-HK - zh_TW: zh-TW \ No newline at end of file + zh_SG: zh-SG + zh_TW: zh-TW + zu_ZA: zu-ZA