From 31e281ce738ff009b0f35571ce01b8b164446ca0 Mon Sep 17 00:00:00 2001 From: Terry Yiu Date: Sat, 7 Mar 2026 00:23:15 -0500 Subject: [PATCH] Fix localization issues and export strings for translation Signed-off-by: Terry Yiu --- .../Actions/Reposts/Views/Reposted.swift | 2 +- damus/Features/Events/NoteContentView.swift | 12 +- .../FollowPack/Views/FollowPackPreview.swift | 2 +- .../Views/Components/LabsExplainerView.swift | 2 +- .../Labs/Views/DamusLabsExperiments.swift | 2 +- .../Labs/Views/LabsIntroduction.swift | 2 +- .../LiveChat/Views/LiveChatHomeView.swift | 2 +- .../Views/Components/LiveStreamBanner.swift | 2 +- .../Views/Components/LiveStreamStatus.swift | 8 +- .../Views/Components/LiveStreamViewers.swift | 2 +- .../LiveStream/Views/LiveStreamTimeline.swift | 4 +- .../Longform/Views/LongformPreview.swift | 4 +- .../Features/Muting/Views/MutelistView.swift | 2 +- .../OnboardingContentSettings.swift | 10 +- .../Views/InterestSelectionView.swift | 6 +- .../Profile/Views/EditMetadataView.swift | 2 +- .../Features/Search/Views/NDBSearchView.swift | 2 +- .../Search/Views/SearchResultsView.swift | 2 +- .../Views/AppearanceSettingsView.swift | 4 +- .../Settings/Views/FirstAidSettingsView.swift | 2 +- .../Settings/Views/StorageSettingsView.swift | 2 +- .../Views/PostingTimelineSwitcherView.swift | 2 +- .../Timeline/Views/SideMenuView.swift | 2 +- damus/en-US.lproj/Localizable.stringsdict | 4 +- .../Localized Contents/en-US.xliff | 969 ++++++++++++++++-- .../Source Contents/damus/InfoPlist.xcstrings | 6 +- .../damus/Resources/InfoPlist.xcstrings | 6 +- .../{ => Resources}/Localizable.xcstrings | 267 ++++- .../damus/en-US.lproj/Localizable.strings | Bin 239440 -> 261712 bytes .../damus/en-US.lproj/Localizable.stringsdict | 64 +- .../InfoPlist.xcstrings | 2 +- damus/en-US.xcloc/contents.json | 4 +- damusTests/LocalizationUtilTests.swift | 6 +- 33 files changed, 1271 insertions(+), 137 deletions(-) rename damus/en-US.xcloc/Source Contents/damus/{ => Resources}/Localizable.xcstrings (89%) diff --git a/damus/Features/Actions/Reposts/Views/Reposted.swift b/damus/Features/Actions/Reposts/Views/Reposted.swift index 465a0548..885d242f 100644 --- a/damus/Features/Actions/Reposts/Views/Reposted.swift +++ b/damus/Features/Actions/Reposts/Views/Reposted.swift @@ -38,7 +38,7 @@ struct Reposted: View { } NavigationLink(value: Route.Reposts(reposts: .reposts(state: damus, target: target.id))) { - Text(people_reposted_text(profiles: damus.profiles, pubkey: pubkey, reposts: reposts)) + Text(verbatim: people_reposted_text(profiles: damus.profiles, pubkey: pubkey, reposts: reposts)) .font(.subheadline) .foregroundColor(.gray) } diff --git a/damus/Features/Events/NoteContentView.swift b/damus/Features/Events/NoteContentView.swift index 3983c4ec..cad09f21 100644 --- a/damus/Features/Events/NoteContentView.swift +++ b/damus/Features/Events/NoteContentView.swift @@ -259,7 +259,7 @@ struct NoteContentView: View { .accessibilityHidden(true) if artifacts.media.count > 1 { - Text("\(artifacts.media.count)") + Text(verbatim: "\(artifacts.media.count)") .font(.system(size: 10, weight: .semibold)) .foregroundStyle(.white) .padding(.horizontal, 4) @@ -273,7 +273,7 @@ struct NoteContentView: View { } } - Text("Load \(artifacts.media.count) \(pluralizedString(key: "media_count", count: artifacts.media.count))") + Text(verbatim: "\(pluralizedString(key: "media_count", count: artifacts.media.count))") .font(eventviewsize_to_font(size, font_size: damus_state.settings.font_size)) .foregroundStyle(DamusColors.neutral6) @@ -304,7 +304,7 @@ struct NoteContentView: View { .contentShape(Rectangle()) } .buttonStyle(PlainButtonStyle()) - .accessibilityLabel(NSLocalizedString(showLinksDropdown ? "Hide media links" : "Show media links", comment: "Accessibility label for toggle button to show/hide media link list")) + .accessibilityLabel(showLinksDropdown ? NSLocalizedString("Hide media links", comment: "Accessibility label for toggle button to hide media link list") : NSLocalizedString("Show media links", comment: "Accessibility label for toggle button to show media link list")) } .background( RoundedRectangle(cornerRadius: 10) @@ -424,7 +424,7 @@ struct NoteContentView: View { ) } .buttonStyle(PlainButtonStyle()) - .accessibilityLabel(NSLocalizedString("Load \(abbreviateURL(url))", comment: "Accessibility label for button to load specific media item")) + .accessibilityLabel(String(format: NSLocalizedString("Load %@", comment: "Accessibility label for button to load specific media item"), abbreviateURL(url))) } } @@ -632,7 +632,7 @@ struct BlurOverlayView: View { .foregroundStyle(.white) .bold() .padding(EdgeInsets(top: 5, leading: 10, bottom: 0, trailing: 10)) - Text(NSLocalizedString("Media from someone you don't follow", comment: "Label on the image blur mask")) + Text("Media from someone you don't follow", comment: "Label on the image blur mask") .multilineTextAlignment(.center) .foregroundStyle(Color.white) .font(.title2) @@ -652,7 +652,7 @@ struct BlurOverlayView: View { { switch artifacts.media[0] { case .image(let url), .video(let url): - Text(abbreviateURL(url, maxLength: 30)) + Text(verbatim: "\(abbreviateURL(url, maxLength: 30))") .font(eventviewsize_to_font(size, font_size: damus_state.settings.font_size * 0.8)) .foregroundStyle(.white) .multilineTextAlignment(.center) diff --git a/damus/Features/FollowPack/Views/FollowPackPreview.swift b/damus/Features/FollowPack/Views/FollowPackPreview.swift index 9a3da4aa..db97bfe5 100644 --- a/damus/Features/FollowPack/Views/FollowPackPreview.swift +++ b/damus/Features/FollowPack/Views/FollowPackPreview.swift @@ -80,7 +80,7 @@ struct FollowPackBannerImage: View { } } } else { - Text(NSLocalizedString("No cover image", comment: "Text letting user know there is no cover image.")) + Text("No cover image", comment: "Text letting user know there is no cover image.") .foregroundColor(.gray) .frame(width: 350, height: 180) Divider() diff --git a/damus/Features/Labs/Views/Components/LabsExplainerView.swift b/damus/Features/Labs/Views/Components/LabsExplainerView.swift index 64017a3a..a443345f 100644 --- a/damus/Features/Labs/Views/Components/LabsExplainerView.swift +++ b/damus/Features/Labs/Views/Components/LabsExplainerView.swift @@ -28,7 +28,7 @@ struct LabsExplainerView: View { Spacer() - Text(NSLocalizedString(labDescription, comment: "Description of the feature.")) + Text(labDescription) .foregroundColor(.white) .multilineTextAlignment(.center) diff --git a/damus/Features/Labs/Views/DamusLabsExperiments.swift b/damus/Features/Labs/Views/DamusLabsExperiments.swift index 5e943947..f1c5d9cf 100644 --- a/damus/Features/Labs/Views/DamusLabsExperiments.swift +++ b/damus/Features/Labs/Views/DamusLabsExperiments.swift @@ -32,7 +32,7 @@ struct DamusLabsExperiments: View { HStack { Spacer() - Text(NSLocalizedString("More features coming soon!", comment: "")) + Text("More features coming soon!", comment: "Label indicating that more features for Damus Lab experiments are coming soon.") .font(.title2) .foregroundColor(.white) .fontWeight(.bold) diff --git a/damus/Features/Labs/Views/LabsIntroduction.swift b/damus/Features/Labs/Views/LabsIntroduction.swift index 0eef5bff..6d9e4e0b 100644 --- a/damus/Features/Labs/Views/LabsIntroduction.swift +++ b/damus/Features/Labs/Views/LabsIntroduction.swift @@ -22,7 +22,7 @@ struct LabsIntroductionView: View { NavigationLink(destination: DamusPurpleView(damus_state: damus_state)) { HStack(spacing: 10) { Spacer() - Text("Learn more about Purple") + Text("Learn more about Purple", comment: "Button to learn more about the Damus Purple subscription.") .foregroundColor(Color.white) Spacer() } diff --git a/damus/Features/Live/LiveChat/Views/LiveChatHomeView.swift b/damus/Features/Live/LiveChat/Views/LiveChatHomeView.swift index aab28fe6..2a729594 100644 --- a/damus/Features/Live/LiveChat/Views/LiveChatHomeView.swift +++ b/damus/Features/Live/LiveChat/Views/LiveChatHomeView.swift @@ -111,7 +111,7 @@ struct LiveChatHomeView: View, KeyboardReadable { var body: some View { VStack(alignment: .leading, spacing: 0) { HStack { - Text("Live Chat") + Text("Live Chat", comment: "Title for the live stream chat.") .fontWeight(.bold) .padding(5) diff --git a/damus/Features/Live/LiveStream/Views/Components/LiveStreamBanner.swift b/damus/Features/Live/LiveStream/Views/Components/LiveStreamBanner.swift index 654092ed..888a142e 100644 --- a/damus/Features/Live/LiveStream/Views/Components/LiveStreamBanner.swift +++ b/damus/Features/Live/LiveStream/Views/Components/LiveStreamBanner.swift @@ -54,7 +54,7 @@ struct LiveStreamBanner: View { titleImage(url: url, preview: preview) } } else { - Text(NSLocalizedString("No cover image", comment: "Text letting user know there is no cover image.")) + Text("No cover image", comment: "Text letting user know there is no cover image.") .bold() .foregroundColor(.white) .frame(width: UIScreen.main.bounds.width, height: 200) diff --git a/damus/Features/Live/LiveStream/Views/Components/LiveStreamStatus.swift b/damus/Features/Live/LiveStream/Views/Components/LiveStreamStatus.swift index e599a74d..4472ddd8 100644 --- a/damus/Features/Live/LiveStream/Views/Components/LiveStreamStatus.swift +++ b/damus/Features/Live/LiveStream/Views/Components/LiveStreamStatus.swift @@ -19,12 +19,12 @@ struct LiveStreamStatus: View { .foregroundColor(Color.white) if let starts = starts { - Text("\(starts)") + Text(starts) .foregroundColor(Color.white) .bold() .glow() } else { - Text("\(status.rawValue)") + Text(status.rawValue) .foregroundColor(Color.white) .bold() } @@ -33,11 +33,11 @@ struct LiveStreamStatus: View { .foregroundColor(Color.red) .glow() - Text("\(status.rawValue)") + Text(status.rawValue) .foregroundColor(DamusColors.adaptableWhite) .bold() case .ended: - Text("\(status.rawValue)") + Text(status.rawValue) .foregroundColor(DamusColors.adaptableWhite) .bold() } diff --git a/damus/Features/Live/LiveStream/Views/Components/LiveStreamViewers.swift b/damus/Features/Live/LiveStream/Views/Components/LiveStreamViewers.swift index 55581a82..7a22a9aa 100644 --- a/damus/Features/Live/LiveStream/Views/Components/LiveStreamViewers.swift +++ b/damus/Features/Live/LiveStream/Views/Components/LiveStreamViewers.swift @@ -25,7 +25,7 @@ struct LiveStreamViewers: View { Image("user") .resizable() .frame(width: 15, height: 15) - Text("\(Text(verbatim: viewerCount.formatted()).font(.subheadline.weight(.medium)))", comment: "number") + Text(verbatim: viewerCount.formatted()).font(.subheadline.weight(.medium)) } } .padding(.vertical, preview ? 2 : 0) diff --git a/damus/Features/Live/LiveStream/Views/LiveStreamTimeline.swift b/damus/Features/Live/LiveStream/Views/LiveStreamTimeline.swift index 7e817d51..591a2e89 100644 --- a/damus/Features/Live/LiveStream/Views/LiveStreamTimeline.swift +++ b/damus/Features/Live/LiveStream/Views/LiveStreamTimeline.swift @@ -43,10 +43,10 @@ struct LiveStreamTimelineView: View { HStack { VStack(alignment: .leading) { - Text("Happening Now") + Text("Happening Now", comment: "Indicates that live events are happening now.") .font(.title2) .fontWeight(.bold) - Text("Live events going on right now") + Text("Live events going on right now", comment: "Indicates that live events are happening now.") .font(.caption) .foregroundColor(.gray) } diff --git a/damus/Features/Longform/Views/LongformPreview.swift b/damus/Features/Longform/Views/LongformPreview.swift index 9959bd17..0fd681b2 100644 --- a/damus/Features/Longform/Views/LongformPreview.swift +++ b/damus/Features/Longform/Views/LongformPreview.swift @@ -186,7 +186,7 @@ struct LongformPreviewBody: View { { HStack(spacing: 8) { ReadTime(longform.estimatedReadTimeMinutes) - Text("·") + Text(verbatim: "·") Words(longform.words) } .font(.footnote) @@ -250,7 +250,7 @@ struct LongformPreviewBody: View { { HStack(spacing: 8) { ReadTime(longform.estimatedReadTimeMinutes) - Text("·") + Text(verbatim: "·") Words(longform.words) } .font(.footnote) diff --git a/damus/Features/Muting/Views/MutelistView.swift b/damus/Features/Muting/Views/MutelistView.swift index bb0a29df..034e4f69 100644 --- a/damus/Features/Muting/Views/MutelistView.swift +++ b/damus/Features/Muting/Views/MutelistView.swift @@ -92,7 +92,7 @@ struct MutelistView: View { } } Section( - header: Text(NSLocalizedString("Users", comment: "Section header title for a list of muted users.")), + header: Text("Users", comment: "Section header title for a list of muted users."), footer: VStack { EmptyView() }.padding(.bottom, paddingBottom) ) { ForEach(users, id: \.self) { user in diff --git a/damus/Features/Onboarding/OnboardingContentSettings.swift b/damus/Features/Onboarding/OnboardingContentSettings.swift index dc1e4d46..15dd61dd 100644 --- a/damus/Features/Onboarding/OnboardingContentSettings.swift +++ b/damus/Features/Onboarding/OnboardingContentSettings.swift @@ -20,14 +20,14 @@ extension OnboardingSuggestionsView { ScrollView { VStack(spacing: 20) { // Title - Text(NSLocalizedString("Other preferences", comment: "Screen title for content preferences screen during onboarding")) + Text("Other preferences", comment: "Screen title for content preferences screen during onboarding") .font(.largeTitle) .fontWeight(.bold) .multilineTextAlignment(.center) .padding(.top) // Instruction subtitle - Text(NSLocalizedString("Tweak these settings to better match your preferences", comment: "Instructions for content preferences screen during onboarding")) + Text("Tweak these settings to better match your preferences", comment: "Instructions for content preferences screen during onboarding") .font(.subheadline) .foregroundColor(.secondary) .multilineTextAlignment(.center) @@ -38,7 +38,7 @@ extension OnboardingSuggestionsView { Toggle(NSLocalizedString("Hide notes with #nsfw tags", comment: "Setting to hide notes with not safe for work tags"), isOn: $settings.hide_nsfw_tagged_content) .toggleStyle(.switch) - Text(NSLocalizedString("Notes with the #nsfw tag usually contains adult content or other \"Not safe for work\" content", comment: "Explanation of what NSFW means")) + Text("Notes with the #nsfw tag usually contains adult content or other \"Not safe for work\" content", comment: "Explanation of what NSFW means") .font(.caption) .foregroundColor(.secondary) .padding(.bottom, 10) @@ -50,7 +50,7 @@ extension OnboardingSuggestionsView { ) .toggleStyle(.switch) - Text(NSLocalizedString("Some profiles tend to have a lot of Bitcoin-related content alongside their topics of interest. Disable this setting if you prefer to filter out follow suggestions that frequently talk about Bitcoin.", comment: "Explanation label for the 'Show Bitcoin-heavy profile suggestions' onboarding toggle setting")) + Text("Some profiles tend to have a lot of Bitcoin-related content alongside their topics of interest. Disable this setting if you prefer to filter out follow suggestions that frequently talk about Bitcoin.", comment: "Explanation label for the 'Show Bitcoin-heavy profile suggestions' onboarding toggle setting") .font(.caption) .foregroundColor(.secondary) } @@ -66,7 +66,7 @@ extension OnboardingSuggestionsView { Button(action: { self.next_page() }, label: { - Text(NSLocalizedString("Next", comment: "Next button title")) + Text("Next", comment: "Next button title") .foregroundColor(.white) .frame(maxWidth: .infinity) }) diff --git a/damus/Features/Onboarding/Views/InterestSelectionView.swift b/damus/Features/Onboarding/Views/InterestSelectionView.swift index 7d64c112..b0b83712 100644 --- a/damus/Features/Onboarding/Views/InterestSelectionView.swift +++ b/damus/Features/Onboarding/Views/InterestSelectionView.swift @@ -21,14 +21,14 @@ extension OnboardingSuggestionsView { ScrollView { VStack(spacing: 20) { // Title - Text(NSLocalizedString("Select Your Interests", comment: "Screen title for interest selection")) + Text("Select Your Interests", comment: "Screen title for interest selection") .font(.largeTitle) .fontWeight(.bold) .multilineTextAlignment(.center) .padding(.top) // Instruction subtitle - Text(NSLocalizedString("Please pick your interests. This will help us recommend accounts to follow.", comment: "Instruction for interest selection")) + Text("Please pick your interests. This will help us recommend accounts to follow.", comment: "Instruction for interest selection") .font(.subheadline) .foregroundColor(.secondary) .multilineTextAlignment(.center) @@ -44,7 +44,7 @@ extension OnboardingSuggestionsView { Button(action: { self.next_page() }, label: { - Text(NSLocalizedString("Next", comment: "Next button title")) + Text("Next", comment: "Next button title") .foregroundColor(.white) .frame(maxWidth: .infinity) }) diff --git a/damus/Features/Profile/Views/EditMetadataView.swift b/damus/Features/Profile/Views/EditMetadataView.swift index 7da0111a..129d4ab6 100644 --- a/damus/Features/Profile/Views/EditMetadataView.swift +++ b/damus/Features/Profile/Views/EditMetadataView.swift @@ -216,7 +216,7 @@ struct EditMetadataView: View { } } }, label: { - Text(NSLocalizedString("Save", comment: "Button for saving profile.")) + Text("Save", comment: "Button for saving profile.") .frame(minWidth: 300, maxWidth: .infinity, alignment: .center) }) .buttonStyle(GradientButtonStyle(padding: 15)) diff --git a/damus/Features/Search/Views/NDBSearchView.swift b/damus/Features/Search/Views/NDBSearchView.swift index 7bdf4a1b..08c7b5b9 100644 --- a/damus/Features/Search/Views/NDBSearchView.swift +++ b/damus/Features/Search/Views/NDBSearchView.swift @@ -57,7 +57,7 @@ struct NDBSearchView: View { .foregroundColor(.secondary) if !highlightTerms.isEmpty { - Text("Search: \(searchQuery)") + Text("Search: \(searchQuery)", comment: "Label indicating the search query that resulted in the current list of notes") .font(.footnote) .foregroundColor(.secondary) .padding(.bottom, 4) diff --git a/damus/Features/Search/Views/SearchResultsView.swift b/damus/Features/Search/Views/SearchResultsView.swift index 80d29756..13a200b6 100644 --- a/damus/Features/Search/Views/SearchResultsView.swift +++ b/damus/Features/Search/Views/SearchResultsView.swift @@ -54,7 +54,7 @@ struct InnerSearchResults: View { let search_model = SearchModel(state: damus_state, search: .filter_hashtag([ht])) return NavigationLink(value: Route.Search(search: search_model)) { HStack { - Text("#\(ht)", comment: "Navigation link to search hashtag.") + Text(verbatim: "#\(ht)") } .padding(.horizontal, 15) .padding(.vertical, 5) diff --git a/damus/Features/Settings/Views/AppearanceSettingsView.swift b/damus/Features/Settings/Views/AppearanceSettingsView.swift index ec6d8ca9..4a8ec0f1 100644 --- a/damus/Features/Settings/Views/AppearanceSettingsView.swift +++ b/damus/Features/Settings/Views/AppearanceSettingsView.swift @@ -84,7 +84,7 @@ struct AppearanceSettingsView: View { .toggleStyle(.switch) VStack(alignment: .leading) { - Text(String(format: NSLocalizedString("Line height: %.1fx", comment: "Label showing current line height multiplier setting"), settings.longform_line_height)) + Text(verbatim: "\(String(format: NSLocalizedString("Line height: %.1fx", comment: "Label showing current line height multiplier setting"), settings.longform_line_height))") Slider(value: $settings.longform_line_height, in: 1.2...1.8, step: 0.1) // Preview of line height @@ -154,7 +154,7 @@ struct AppearanceSettingsView: View { .toggleStyle(.switch) if settings.hide_hashtag_spam { VStack(alignment: .leading) { - Text(String(format: NSLocalizedString("Maximum hashtags: %d", comment: "Label showing the maximum number of hashtags allowed before a post is hidden"), settings.max_hashtags)) + Text("\(String(format: NSLocalizedString("Maximum hashtags: %d", comment: "Label showing the maximum number of hashtags allowed before a post is hidden"), settings.max_hashtags))") Slider(value: max_hashtags_binding, in: 1...20, step: 1) } } diff --git a/damus/Features/Settings/Views/FirstAidSettingsView.swift b/damus/Features/Settings/Views/FirstAidSettingsView.swift index 354b94e6..9a36f384 100644 --- a/damus/Features/Settings/Views/FirstAidSettingsView.swift +++ b/damus/Features/Settings/Views/FirstAidSettingsView.swift @@ -119,7 +119,7 @@ extension FirstAidSettingsView { .foregroundColor(.red) case .confirming_with_user, .in_progress: ProgressView() - Text(NSLocalizedString("In progress…", comment: "Loading message indicating that a first aid operation is in progress.")) + Text("In progress…", comment: "Loading message indicating that a first aid operation is in progress.") case .completed: Image(systemName: "checkmark.circle.fill") .foregroundColor(.green) diff --git a/damus/Features/Settings/Views/StorageSettingsView.swift b/damus/Features/Settings/Views/StorageSettingsView.swift index c2a03afc..6cce037e 100644 --- a/damus/Features/Settings/Views/StorageSettingsView.swift +++ b/damus/Features/Settings/Views/StorageSettingsView.swift @@ -351,7 +351,7 @@ struct StoragePieChart: View { var body: some View { Chart(categories) { category in SectorMark( - angle: .value("Size", category.size), + angle: .value(NSLocalizedString("Size", comment: "Label for size in disk storage chart"), category.size), innerRadius: .ratio(0.618), angularInset: 1.5 ) diff --git a/damus/Features/Timeline/Views/PostingTimelineSwitcherView.swift b/damus/Features/Timeline/Views/PostingTimelineSwitcherView.swift index 696598a7..989ffd9f 100644 --- a/damus/Features/Timeline/Views/PostingTimelineSwitcherView.swift +++ b/damus/Features/Timeline/Views/PostingTimelineSwitcherView.swift @@ -37,7 +37,7 @@ struct PostingTimelineSwitcherView: View { } .frame(width: 50, height: 35) .menuOrder(.fixed) - .accessibilityLabel(NSLocalizedString("Timeline switcher, select \(TimelineSource.follows.description) or \(TimelineSource.favorites.description)", comment: "Accessibility label for the timeline switcher button at the topbar")) + .accessibilityLabel(String(format: NSLocalizedString("Timeline switcher, select %@ or %@", comment: "Accessibility label for the timeline switcher button at the topbar"), TimelineSource.follows.description, TimelineSource.favorites.description)) } @available(iOS 17, *) diff --git a/damus/Features/Timeline/Views/SideMenuView.swift b/damus/Features/Timeline/Views/SideMenuView.swift index ca0d2f28..83a21948 100644 --- a/damus/Features/Timeline/Views/SideMenuView.swift +++ b/damus/Features/Timeline/Views/SideMenuView.swift @@ -81,7 +81,7 @@ struct SideMenuView: View { Image(systemName: "flask") .fontWeight(.bold) .tint(DamusColors.adaptableBlack) - Text("Labs") + Text("Labs", comment: "Sidebar menu label for Damus Labs experimental features.") .font(.title2.weight(.semibold)) .foregroundColor(DamusColors.adaptableBlack) .frame(maxWidth: .infinity, alignment: .leading) diff --git a/damus/en-US.lproj/Localizable.stringsdict b/damus/en-US.lproj/Localizable.stringsdict index 01ee1f8c..b0d07dc1 100644 --- a/damus/en-US.lproj/Localizable.stringsdict +++ b/damus/en-US.lproj/Localizable.stringsdict @@ -13,9 +13,9 @@ NSStringFormatValueTypeKey d one - media item + Load %d media item other - media items + Load %d media items viewer_count diff --git a/damus/en-US.xcloc/Localized Contents/en-US.xliff b/damus/en-US.xcloc/Localized Contents/en-US.xliff index 98a1963e..201b591d 100644 --- a/damus/en-US.xcloc/Localized Contents/en-US.xliff +++ b/damus/en-US.xcloc/Localized Contents/en-US.xliff @@ -2,7 +2,7 @@
- +
@@ -44,13 +44,13 @@
- +
- - #%@ - #%@ - Navigation link to search hashtag. + + %@ + %@ + No comment provided by engineer. %@ %@ @@ -58,6 +58,7 @@ Sentence composed of 2 variables to describe how many imports were performed from loading a NostrScript. In source English, the first variable is the number of imports, and the second variable is 'Import' or 'Imports'. Sentence composed of 2 variables to describe how many people are following a user. In source English, the first variable is the number of followers, and the second variable is 'Follower' or 'Followers'. Sentence composed of 2 variables to describe how many people are in the follow pack. In source English, the first variable is the number of users, and the second variable is 'user' or 'users'. +Sentence composed of 2 variables to describe how many people are viewing the live event. In source English, the first variable is the number of viewers, and the second variable is 'viewer' or 'viewers'. Sentence composed of 2 variables to describe how many profiles a user is following. In source English, the first variable is the number of profiles being followed, and the second variable is 'Following'. Sentence composed of 2 variables to describe how many quoted reposts. In source English, the first variable is the number of reposts, and the second variable is 'Repost' or 'Reposts'. Sentence composed of 2 variables to describe how many reactions there are on a post. In source English, the first variable is the number of reactions, and the second variable is 'Reaction' or 'Reactions'. @@ -403,6 +404,11 @@ Section header for text and appearance settings Are you sure you want to upload this media? Alert message asking if the user wants to upload media. + + As a subscriber, you’re getting an early look at new and innovative tools. These are beta features — still being tested and tuned. Try them out, share your thoughts, and help us perfect what’s next. + As a subscriber, you’re getting an early look at new and innovative tools. These are beta features — still being tested and tuned. Try them out, share your thoughts, and help us perfect what’s next. + Damus Labs explainer + As part of your Damus Purple membership, you get complimentary and automated translations. Would you like to enable Damus Purple translations? @@ -508,6 +514,7 @@ Context menu option for broadcasting the user's note to all of the user's connec Cancel Cancel Alert button to cancel out of alert for muting a user. +Button to cancel GIF selection Button to cancel a repost. Button to cancel any interaction with the QRCode link. Button to cancel out of alert that creates a new mutelist. @@ -539,6 +546,11 @@ Text for button to cancel out of connecting Nostr Wallet Connect lightning walle Changing this setting will cause the cache to be cleared. This will free space, but images may take longer to load again. Are you sure you want to proceed? Message explaining consequences of changing the 'enable animation' setting + + Chat + Chat + Placeholder text to prompt entry of chat message. + Check if the invoice is valid, your wallet is online, configured correctly, and try again. If the error persists, please contact support and/or your wallet provider. Check if the invoice is valid, your wallet is online, configured correctly, and try again. If the error persists, please contact support and/or your wallet provider. @@ -599,6 +611,11 @@ Text for button to cancel out of connecting Nostr Wallet Connect lightning walle Click here if you have a Coinos username and password. Button description hint for users who may want to connect via the website. + + Client tags can help other apps understand new kinds of events. Turn this off if you prefer not to identify Damus when posting. + Client tags can help other apps understand new kinds of events. Turn this off if you prefer not to identify Damus when posting. + Description for the client tag privacy toggle. + Close Close @@ -763,6 +780,11 @@ Context menu option for copying the version of damus. Copy invoice Title of section for copying a Lightning invoice identifier. + + Copy media link + Copy media link + Accessibility label for copy media link button + Copy note ID Copy note ID @@ -862,6 +884,11 @@ Toolbar label for DMs view, where DM is the English abbreviation for Direct Mess Damus Name of the app for the title of an internal notification + Damus Profile Damus Profile @@ -1126,6 +1153,11 @@ Message to display when there was an error fetching a lightning invoice while at Expiry date Label for Purple subscription expiry date + + Failed to calculate storage: %@ + Failed to calculate storage: %@ + Error message when storage calculation fails + Failed to generate media for upload. Please try again. If error persists, please contact Damus support at support@damus.io Failed to generate media for upload. Please try again. If error persists, please contact Damus support at support@damus.io @@ -1146,11 +1178,27 @@ Message to display when there was an error fetching a lightning invoice while at Failed to parse NostrScript error message when it fails to parse a script. + + Failed to parse GIF data + Failed to parse GIF data + Error message for Tenor decoding failure + Failed to scan QR code, please try again. Failed to scan QR code, please try again. Error message for failed QR scan + + Favorite + Favorite + Button label that allows the user to favorite the user shown on-screen + + + Favorites + Favorites + Label for a toggle that enables an experimental feature +Show Notes from your favorites + Find a Wallet Find a Wallet @@ -1233,6 +1281,11 @@ Navigation bar title for view that shows who is following a user. Following... Label to indicate that the user is in the process of following another user. + + Follows + Follows + Show Notes from your following + Follows you Follows you @@ -1269,6 +1322,12 @@ My side interests include languages and I am striving to be a #polyglot - I am a Free Dropdown option for selecting Free plan for DeepL translation service. + + GIFs + GIFs + Label for a toggle that enables an experimental feature +Section title for GIFs configuration. + General General @@ -1310,6 +1369,11 @@ Button to navigate to translate.nostr.wine to get a translation API key. Go to the app Button label giving the user the option to go to the app after posting a highlight + + Happening Now + Happening Now + Indicates that live events are happening now. + Hashtags Hashtags @@ -1359,6 +1423,11 @@ This is my first post on Damus, I am happy to meet you all 🤙. What’s up? Hide balance Setting to hide wallet balance. + + Hide media links + Hide media links + Accessibility label for toggle button to hide media link list + Hide notes with #nsfw tags Hide notes with #nsfw tags @@ -1370,6 +1439,11 @@ Setting to hide notes with the #nsfw (not safe for work) tags Hide notifications that tag many profiles Label for notification settings toggle that hides notifications that tag many people. + + Hide posts with too many hashtags + Hide posts with too many hashtags + Setting to hide notes that contain too many hashtags (spam) + Highlight Highlight @@ -1419,6 +1493,11 @@ Hope to meet folks who are on their own journeys to a peaceful and free life!Illegal Content Description of report type for illegal content. + + Image Cache + Image Cache + Label for Kingfisher image cache + Image URL Image URL @@ -1473,7 +1552,8 @@ Option to enter a url Invalid URL Invalid URL - Error label when user enters an invalid URL + Error label when user enters an invalid URL +Error message for invalid Tenor URL Invalid key @@ -1495,6 +1575,11 @@ Option to enter a url Invalid relay address Heading for an error when adding a relay + + Invalid response from server + Invalid response from server + Error message for invalid Tenor response + It seems that you already have a translation service configured. Would you like to switch to Damus Purple as your translator? It seems that you already have a translation service configured. Would you like to switch to Damus Purple as your translator? @@ -1511,11 +1596,26 @@ Settings section for managing keys LIVE Text indicator that the video is a livestream. + + Labs + Labs + Sidebar menu label for Damus Labs experimental features. + + + Labs + Labs + Feature name + Latest transactions Latest transactions Heading for latest wallet transactions list + + Learn more about Purple + Learn more about Purple + Button to learn more about the Damus Purple subscription. + Learn more about the features Learn more about the features @@ -1556,6 +1656,11 @@ Settings section for managing keys Likes Setting to enable Like Local Notification + + Line height: %.1fx + Line height: %.1fx + Label showing current line height multiplier setting + Link to services that support Nostr Wallet Connect like Alby, Coinos and more. Link to services that support Nostr Wallet Connect like Alby, Coinos and more. @@ -1566,10 +1671,31 @@ Settings section for managing keys Link your account The heading for one of the "Why add Zaps?" boxes - - Load media - Load media - Button to show media in note. + + Live + Live + Label for a toggle that enables an experimental feature +Sidebar menu label for live events view. + + + Live Chat + Live Chat + Title for the live stream chat. + + + Live events going on right now + Live events going on right now + Indicates that live events are happening now. + + + Load %@ + Load %@ + Accessibility label for button to load specific media item + + + Loading GIFs... + Loading GIFs... + Loading indicator text for GIF picker Loading thread @@ -1644,6 +1770,11 @@ Sidebar menu label to sign out of the account. Max weekly budget Label for setting the maximum weekly budget for Coinos wallet + + Maximum hashtags: %d + Maximum hashtags: %d + Label showing the maximum number of hashtags allowed before a post is hidden + Maybe later Maybe later @@ -1680,11 +1811,21 @@ Setting to enable Mention Local Notification Message Button label that allows the user to start a direct message conversation with the user shown on-screen + + Metadata (NDB_DB_META) + Metadata (NDB_DB_META) + Database name for metadata + Monthly Monthly Monthly renewal of purple subscription + + More features coming soon! + More features coming soon! + Label indicating that more features for Damus Lab experiments are coming soon. + Mute Mute @@ -1753,6 +1894,11 @@ Text label indicating that there is no NIP-11 relay software version information Name Label to prompt name entry. + + Ndb has been snapshotted successfully + Ndb has been snapshotted successfully + Developer settings message indicating that ndb was successfully snapshotted. + Never Never @@ -1790,6 +1936,11 @@ Next button title Do not discard changes. User confirm No + + No GIFs found + No GIFs found + Message when no GIFs match search + No contact list was found. You might experience issues using the app. If you suspect you have permanently lost your contact list (or if you never had one), you can fix this by resetting it No contact list was found. You might experience issues using the app. If you suspect you have permanently lost your contact list (or if you never had one), you can fix this by resetting it @@ -1876,6 +2027,26 @@ Picker option to indicate that sats should be sent to the user's wallet as a reg Nostr Address Label for the Nostr Address section of user profile form. + + NostrDB + NostrDB + Label for main NostrDB database + + + NostrDB Details + NostrDB Details + Navigation title for NostrDB detail view + + + NostrDB Metadata + NostrDB Metadata + Database name for NostrDB metadata + + + NostrDB Total + NostrDB Total + Label for total NostrDB storage + NostrScript NostrScript @@ -1896,6 +2067,51 @@ Picker option to indicate that sats should be sent to the user's wallet as a reg Not now Button to not save key, complete account creation, and start using the app. + + Note Blocks + Note Blocks + Database name for note blocks + + + Note ID Index + Note ID Index + Database name for note ID index + + + Note Kind Index + Note Kind Index + Database name for note kind index + + + Note Pubkey Index + Note Pubkey Index + Database name for note pubkey index + + + Note Pubkey+Kind Index + Note Pubkey+Kind Index + Database name for note pubkey+kind index + + + Note Relay+Kind Index + Note Relay+Kind Index + Database name for note relay+kind index + + + Note Relays + Note Relays + Database name for note relays + + + Note Tags Index + Note Tags Index + Database name for note tags index + + + Note Text Index + Note Text Index + Database name for note text index + Note from a %@ you've muted Note from a %@ you've muted @@ -1904,7 +2120,8 @@ Picker option to indicate that sats should be sent to the user's wallet as a reg Note not found Note not found - Heading for the thread view in a not found error state. + Heading for the event loader view in a not found error state. +Heading for the thread view in a not found error state. Note you've muted @@ -1923,6 +2140,11 @@ Label for filter for seeing only notes (instead of notes and replies). Notes & Replies Label for filter for seeing notes and replies (instead of only notes). + + Notes (NDB_DB_NOTE) + Notes (NDB_DB_NOTE) + Database name for notes + Notes from %@ Notes from %@ @@ -2041,6 +2263,11 @@ Button label to dismiss an error dialog Orange-pill Button label that allows the user to start a direct message conversation with the user shown on-screen, to orange-pill them (i.e. help them to setup zaps) + + Other Data + Other Data + Database name for other/unaccounted data + Other preferences Other preferences @@ -2123,6 +2350,11 @@ Section title for deleting the user Please check the address and try again Tip for an error where the relay address being added is invalid + + Please check your internet connection and restart the app. If the error persists, please go to Settings > First Aid. + Please check your internet connection and restart the app. If the error persists, please go to Settings > First Aid. + Human readable tips for what to do for a failure to find the relay list + Please choose relays from the list below to filter the current feed: Please choose relays from the list below to filter the current feed: @@ -2253,6 +2485,11 @@ Section title for deleting the user Posts Label for filter for seeing the posts from the people in this follow pack. + + Privacy + Privacy + Section header for privacy related settings + Private Private @@ -2301,6 +2538,21 @@ Label indicating the production environment for Push notification functionality< Profile Sidebar menu label for Profile view. + + Profile Key Index + Profile Key Index + Database name for profile key index + + + Profile Last Fetch + Profile Last Fetch + Database name for profile last fetch + + + Profile Search Index + Profile Search Index + Database name for profile search + Profile action sheets allow you to follow, zap, or DM profiles more quickly without having to view their full profile Profile action sheets allow you to follow, zap, or DM profiles more quickly without having to view their full profile @@ -2316,6 +2568,11 @@ Label indicating the production environment for Push notification functionality< Profiles Section title for profile view configuration. + + Profiles (NDB_DB_PROFILE) + Profiles (NDB_DB_PROFILE) + Database name for profiles + Public Public @@ -2352,6 +2609,11 @@ Picker option to indicate that a zap should be sent publicly and identify the us Purple Subscription service name + + Purple subscribers get first access to new and experimental features — fresh ideas straight from the lab. + Purple subscribers get first access to new and experimental features — fresh ideas straight from the lab. + Damus purple subscription pitch + Push Push @@ -2394,6 +2656,11 @@ Picker option to indicate that a zap should be sent publicly and identify the us Section header for reactions settings Title of emoji reactions view + + Reading + Reading + Section header for reading appearance settings + Received an incorrect or unexpected response from the wallet provider. This looks like an issue with your wallet provider. Received an incorrect or unexpected response from the wallet provider. This looks like an issue with your wallet provider. @@ -2567,6 +2834,11 @@ Setting to enable Repost Local Notification Retry Button to retry completing account creation after an error occurred. + + Retrying… + Retrying… + Button label for the retry-in-progress state when loading a note + Routing Routing @@ -2694,6 +2966,11 @@ Title of the text field for searching. Search / Universe Section header for search/universe settings + + Search GIFs... + Search GIFs... + Placeholder for GIF search field + Search within settings Search within settings @@ -2714,11 +2991,21 @@ Title of the text field for searching. Search/Universe Navigation title for universe/search settings. + + Search: %@ + Search: %@ + Label indicating the search query that resulted in the current list of notes + Secret Account Login Key Secret Account Login Key Section title for user's secret account login key. + + Select GIF + Select GIF + Title for GIF picker sheet + Select Your Interests Select Your Interests @@ -2759,6 +3046,11 @@ Title of the text field for searching. Send a message with your zap... Placeholder text for a comment to send as part of a zap to the user. + + Sepia mode for longform articles + Sepia mode for longform articles + Setting to enable sepia reading mode for longform articles + Server Server @@ -2799,6 +3091,11 @@ Button to share an image. Button to share the link to a profile. Save button text for saving profile status settings. + + Share Damus client tag + Share Damus client tag + Setting to publish a client tag indicating Damus posted the note + Share Note Share Note @@ -2840,6 +3137,11 @@ Toggle to show or hide user's secret account login key. Show less Button to show less of a long profile description. + + Show media links + Show media links + Accessibility label for toggle button to show media link list + Show more Show more @@ -2896,11 +3198,31 @@ Button to show more of a long profile description. Sign out Sidebar menu label to sign out of the account. + + Size + Size + Label for size in disk storage chart + Skip Skip Button to dismiss the suggested users screen + + Snapshot Database + Snapshot Database + Label for snapshot database + + + Snapshot Ndb to shared container + Snapshot Ndb to shared container + Developer settings button to snapshot ndb to shared container. + + + Snapshotting Ndb to shared container + Snapshotting Ndb to shared container + Developer settings loading message indicating that ndb is being snapshotted to the shared container. + Some profiles tend to have a lot of Bitcoin-related content alongside their topics of interest. Disable this setting if you prefer to filter out follow suggestions that frequently talk about Bitcoin. Some profiles tend to have a lot of Bitcoin-related content alongside their topics of interest. Disable this setting if you prefer to filter out follow suggestions that frequently talk about Bitcoin. @@ -2972,6 +3294,12 @@ Section header for Universe/Search spam Staying humble... Placeholder as an example of what the user could set as their profile status. + + Storage + Storage + Navigation title for storage settings +Section header for storage usage statistics + Subscriber number Subscriber number @@ -3017,6 +3345,11 @@ Section header for Universe/Search spam Supporter Badge Title for supporter badge + + Switch between posts from your follows or your favorites. + Switch between posts from your follows or your favorites. + Description of the tip that informs users that they can switch between posts from your follows or your favorites. + Syncing Syncing @@ -3037,6 +3370,16 @@ Section header for Universe/Search spam Tap to load Label for button that allows user to dismiss media content warning and unblur the image + + Tenor API Key (optional) + Tenor API Key (optional) + Prompt for optional entry of API Key to use with Tenor. + + + Tenor API key not configured + Tenor API key not configured + Error message for missing Tenor API key + Test (local) Test (local) @@ -3096,6 +3439,11 @@ Enjoy! The payment request did not receive a response and the request timed-out. A human-readable error message + + The quick brown fox jumps over the lazy dog. This preview shows how your line spacing will appear in longform articles. + The quick brown fox jumps over the lazy dog. This preview shows how your line spacing will appear in longform articles. + Sample text for line height preview in settings + The social network you control The social network you control @@ -3170,6 +3518,11 @@ Nice to meet you all! #introductions #plebchain This note contains too many items and cannot be rendered Error message indicating that a note is too big and cannot be rendered + + This note may have been deleted, or it might not be available on the relays you're connected to. + This note may have been deleted, or it might not be available on the relays you're connected to. + Text for the event loader view when it is unable to find the note the user is looking for + This operation is restricted by your wallet. This operation is restricted by your wallet. @@ -3185,11 +3538,36 @@ Nice to meet you all! #introductions #plebchain This user cannot be zapped because they have not configured zaps on their account yet. Time to orange-pill? Comment explaining why a user cannot be zapped. + + This will allow you to easily add gifs from Tenor to your posts. You will see the GIF icon in the attachment bar when creating a post. Tapping it will show you all of tenor's featured GIFs. You can also search for GIFs. + This will allow you to easily add gifs from Tenor to your posts. You will see the GIF icon in the attachment bar when creating a post. Tapping it will show you all of tenor's featured GIFs. You can also search for GIFs. + Damus Labs feature explanation + + + This will allow you to pick users to be part of your favorites list. You can also switch your profile timeline to only see posts from your favorite contacts. + This will allow you to pick users to be part of your favorites list. You can also switch your profile timeline to only see posts from your favorite contacts. + Damus Labs feature explanation + + + This will allow you to see all the real-time live streams happening on Nostr! As well as let you view and interact in the Live Chat. Please keep in mind this is still a work in progress and issues are expected. When enabled you will see the Live option in your side menu. + This will allow you to see all the real-time live streams happening on Nostr! As well as let you view and interact in the Live Chat. Please keep in mind this is still a work in progress and issues are expected. When enabled you will see the Live option in your side menu. + Damus Labs feature explanation + Threads Threads Section header title for a list of threads that are muted. + + Timeline switcher + Timeline switcher + Title of tip that informs users that they can switch timelines. + + + Timeline switcher, select %1$@ or %2$@ + Timeline switcher, select %1$@ or %2$@ + Accessibility label for the timeline switcher button at the topbar + To continue your Purple subscription checkout, please verify your npub by clicking on the button below To continue your Purple subscription checkout, please verify your npub by clicking on the button below @@ -3220,6 +3598,16 @@ Nice to meet you all! #introductions #plebchain Top hits A label indicating that the notes being displayed below it are all top note search results + + Total + Total + Label for total storage in pie chart center + + + Total Storage + Total Storage + Label for total storage used + Translate DMs Translate DMs @@ -3264,7 +3652,9 @@ Section header for text and appearance settings Try Again Try Again - Button to retry payment + Button label to retry loading a note that was not found +Button to retry loading GIFs +Button to retry payment Try again. If the error persists, please contact your wallet provider and/or our support team. @@ -3276,6 +3666,11 @@ Section header for text and appearance settings Try checking the link again, your internet connection, or contact the person who provided you the link for help. Tips on what to do if a note cannot be found. + + Try checking your internet connection, expanding your relay list, or contacting the person who quoted this note. + Try checking your internet connection, expanding your relay list, or contacting the person who quoted this note. + Tips on what to do if a quoted note cannot be found. + Try restarting your wallet or contacting support if the problem persists. Try restarting your wallet or contacting support if the problem persists. @@ -3703,9 +4098,9 @@ User confirm Yes Your Purple subscription has expired. Renew? A notification message explaining to the user that their Damus Purple Subscription has expired, prompting them to renew. - - Your connected wallet raised an unknown error. Message: %s - Your connected wallet raised an unknown error. Message: %s + + Your connected wallet raised an unknown error. Message: %@ + Your connected wallet raised an unknown error. Message: %@ Human readable error description for unknown error @@ -3733,6 +4128,11 @@ User confirm Yes Your relay list appears to be broken, so we cannot connect you to your Nostr network. Human readable error description for a failure to parse the relay list due to a bad relay list + + Your relay list could not be found, so we cannot connect you to your Nostr network. + Your relay list could not be found, so we cannot connect you to your Nostr network. + Human readable error description for a failure to find the relay list + Your report will be sent to the relays you are connected to Your report will be sent to the relays you are connected to @@ -3997,6 +4397,11 @@ String indicating that a given timestamp just occurred translate.nostr.wine (DeepL, Pay with BTC) Dropdown option for selecting translate.nostr.wine as the translation service. + + via %@ + via %@ + Label indicating which client published the event + wss://some.relay.com wss://some.relay.com @@ -4111,7 +4516,7 @@ String indicating that a given timestamp just occurred
- +
@@ -4204,6 +4609,21 @@ String indicating that a given timestamp just occurred %#@IMPORTS@ + + Load %d media item + Load %d media item + + + + Load %d media items + Load %d media items + + + + %#@MEDIA@ + %#@MEDIA@ + + %#@OTHERS@ %#@OTHERS@ @@ -4309,6 +4729,21 @@ String indicating that a given timestamp just occurred Reactions + + %d min read + %d min read + + + + %d min read + %d min read + + + + %#@MINUTES@ + %#@MINUTES@ + + %#@RELAYS@ %#@RELAYS@ @@ -4444,6 +4879,21 @@ String indicating that a given timestamp just occurred %d users talking about it + + %#@VIEWERS@ + %#@VIEWERS@ + + + + viewer + viewer + + + + viewers + viewers + + %#@WORDS@ %#@WORDS@ @@ -4553,7 +5003,29 @@ String indicating that a given timestamp just occurred
- + +
+ + + DamusNotificationService + DamusNotificationService + Bundle display name + + + DamusNotificationService + DamusNotificationService + Bundle name + + + + + Copyright (human-readable) + + +
+ +
+
@@ -4573,9 +5045,9 @@ String indicating that a given timestamp just occurred
- +
- +
@@ -4583,10 +5055,10 @@ String indicating that a given timestamp just occurred - - #%@ - #%@ - Navigation link to search hashtag. + + %@ + %@ + %1$@ %2$@ @@ -4594,6 +5066,7 @@ String indicating that a given timestamp just occurred Sentence composed of 2 variables to describe how many imports were performed from loading a NostrScript. In source English, the first variable is the number of imports, and the second variable is 'Import' or 'Imports'. Sentence composed of 2 variables to describe how many people are following a user. In source English, the first variable is the number of followers, and the second variable is 'Follower' or 'Followers'. Sentence composed of 2 variables to describe how many people are in the follow pack. In source English, the first variable is the number of users, and the second variable is 'user' or 'users'. +Sentence composed of 2 variables to describe how many people are viewing the live event. In source English, the first variable is the number of viewers, and the second variable is 'viewer' or 'viewers'. Sentence composed of 2 variables to describe how many profiles a user is following. In source English, the first variable is the number of profiles being followed, and the second variable is 'Following'. Sentence composed of 2 variables to describe how many quoted reposts. In source English, the first variable is the number of reposts, and the second variable is 'Repost' or 'Reposts'. Sentence composed of 2 variables to describe how many reactions there are on a post. In source English, the first variable is the number of reactions, and the second variable is 'Reaction' or 'Reactions'. @@ -4939,6 +5412,11 @@ Section header for text and appearance settings Are you sure you want to upload this media? Alert message asking if the user wants to upload media. + + As a subscriber, you’re getting an early look at new and innovative tools. These are beta features — still being tested and tuned. Try them out, share your thoughts, and help us perfect what’s next. + As a subscriber, you’re getting an early look at new and innovative tools. These are beta features — still being tested and tuned. Try them out, share your thoughts, and help us perfect what’s next. + Damus Labs explainer + As part of your Damus Purple membership, you get complimentary and automated translations. Would you like to enable Damus Purple translations? @@ -5044,6 +5522,7 @@ Context menu option for broadcasting the user's note to all of the user's connec Cancel Cancel Alert button to cancel out of alert for muting a user. +Button to cancel GIF selection Button to cancel a repost. Button to cancel any interaction with the QRCode link. Button to cancel out of alert that creates a new mutelist. @@ -5075,6 +5554,11 @@ Text for button to cancel out of connecting Nostr Wallet Connect lightning walle Changing this setting will cause the cache to be cleared. This will free space, but images may take longer to load again. Are you sure you want to proceed? Message explaining consequences of changing the 'enable animation' setting + + Chat + Chat + Placeholder text to prompt entry of chat message. + Check if the invoice is valid, your wallet is online, configured correctly, and try again. If the error persists, please contact support and/or your wallet provider. Check if the invoice is valid, your wallet is online, configured correctly, and try again. If the error persists, please contact support and/or your wallet provider. @@ -5135,6 +5619,11 @@ Text for button to cancel out of connecting Nostr Wallet Connect lightning walle Click here if you have a Coinos username and password. Button description hint for users who may want to connect via the website. + + Client tags can help other apps understand new kinds of events. Turn this off if you prefer not to identify Damus when posting. + Client tags can help other apps understand new kinds of events. Turn this off if you prefer not to identify Damus when posting. + Description for the client tag privacy toggle. + Close Close @@ -5302,6 +5791,11 @@ Context menu option for copying the version of damus. Copy invoice Title of section for copying a Lightning invoice identifier. + + Copy media link + Copy media link + Accessibility label for copy media link button + Copy note ID Copy note ID @@ -5401,6 +5895,11 @@ Toolbar label for DMs view, where DM is the English abbreviation for Direct Mess Damus Name of the app for the title of an internal notification + Damus Profile Damus Profile @@ -5665,6 +6164,11 @@ Message to display when there was an error fetching a lightning invoice while at Expiry date Label for Purple subscription expiry date + + Failed to calculate storage: %@ + Failed to calculate storage: %@ + Error message when storage calculation fails + Failed to generate media for upload. Please try again. If error persists, please contact Damus support at support@damus.io Failed to generate media for upload. Please try again. If error persists, please contact Damus support at support@damus.io @@ -5685,11 +6189,27 @@ Message to display when there was an error fetching a lightning invoice while at Failed to parse NostrScript error message when it fails to parse a script. + + Failed to parse GIF data + Failed to parse GIF data + Error message for Tenor decoding failure + Failed to scan QR code, please try again. Failed to scan QR code, please try again. Error message for failed QR scan + + Favorite + Favorite + Button label that allows the user to favorite the user shown on-screen + + + Favorites + Favorites + Label for a toggle that enables an experimental feature +Show Notes from your favorites + Find a Wallet Find a Wallet @@ -5772,6 +6292,11 @@ Navigation bar title for view that shows who is following a user. Following... Label to indicate that the user is in the process of following another user. + + Follows + Follows + Show Notes from your following + Follows you Follows you @@ -5808,6 +6333,12 @@ My side interests include languages and I am striving to be a #polyglot - I am a Free Dropdown option for selecting Free plan for DeepL translation service. + + GIFs + GIFs + Label for a toggle that enables an experimental feature +Section title for GIFs configuration. + General General @@ -5849,6 +6380,11 @@ Button to navigate to translate.nostr.wine to get a translation API key. Go to the app Button label giving the user the option to go to the app after sharing content + + Happening Now + Happening Now + Indicates that live events are happening now. + Hashtags Hashtags @@ -5898,6 +6434,11 @@ This is my first post on Damus, I am happy to meet you all 🤙. What’s up? Hide balance Setting to hide wallet balance. + + Hide media links + Hide media links + Accessibility label for toggle button to hide media link list + Hide notes with #nsfw tags Hide notes with #nsfw tags @@ -5909,6 +6450,11 @@ Setting to hide notes with the #nsfw (not safe for work) tags Hide notifications that tag many profiles Label for notification settings toggle that hides notifications that tag many people. + + Hide posts with too many hashtags + Hide posts with too many hashtags + Setting to hide notes that contain too many hashtags (spam) + Highlight Highlight @@ -5958,6 +6504,11 @@ Hope to meet folks who are on their own journeys to a peaceful and free life!Illegal Content Description of report type for illegal content. + + Image Cache + Image Cache + Label for Kingfisher image cache + Image URL Image URL @@ -6012,7 +6563,8 @@ Option to enter a url Invalid URL Invalid URL - Error label when user enters an invalid URL + Error label when user enters an invalid URL +Error message for invalid Tenor URL Invalid key @@ -6034,6 +6586,11 @@ Option to enter a url Invalid relay address Heading for an error when adding a relay + + Invalid response from server + Invalid response from server + Error message for invalid Tenor response + It seems that you already have a translation service configured. Would you like to switch to Damus Purple as your translator? It seems that you already have a translation service configured. Would you like to switch to Damus Purple as your translator? @@ -6050,11 +6607,26 @@ Settings section for managing keys LIVE Text indicator that the video is a livestream. + + Labs + Labs + Sidebar menu label for Damus Labs experimental features. + + + Labs + Labs + Feature name + Latest transactions Latest transactions Heading for latest wallet transactions list + + Learn more about Purple + Learn more about Purple + Button to learn more about the Damus Purple subscription. + Learn more about the features Learn more about the features @@ -6095,6 +6667,11 @@ Settings section for managing keys Likes Setting to enable Like Local Notification + + Line height: %.1fx + Line height: %.1fx + Label showing current line height multiplier setting + Link to services that support Nostr Wallet Connect like Alby, Coinos and more. Link to services that support Nostr Wallet Connect like Alby, Coinos and more. @@ -6105,10 +6682,31 @@ Settings section for managing keys Link your account The heading for one of the "Why add Zaps?" boxes - - Load media - Load media - Button to show media in note. + + Live + Live + Label for a toggle that enables an experimental feature +Sidebar menu label for live events view. + + + Live Chat + Live Chat + Title for the live stream chat. + + + Live events going on right now + Live events going on right now + Indicates that live events are happening now. + + + Load %@ + Load %@ + Accessibility label for button to load specific media item + + + Loading GIFs... + Loading GIFs... + Loading indicator text for GIF picker Loading thread @@ -6183,6 +6781,11 @@ Sidebar menu label to sign out of the account. Max weekly budget Label for setting the maximum weekly budget for Coinos wallet + + Maximum hashtags: %d + Maximum hashtags: %d + Label showing the maximum number of hashtags allowed before a post is hidden + Maybe later Maybe later @@ -6219,11 +6822,21 @@ Setting to enable Mention Local Notification Message Button label that allows the user to start a direct message conversation with the user shown on-screen + + Metadata (NDB_DB_META) + Metadata (NDB_DB_META) + Database name for metadata + Monthly Monthly Monthly renewal of purple subscription + + More features coming soon! + More features coming soon! + Label indicating that more features for Damus Lab experiments are coming soon. + Mute Mute @@ -6287,6 +6900,11 @@ Text label indicating that there is no NIP-11 relay software version information Name Label to prompt name entry. + + Ndb has been snapshotted successfully + Ndb has been snapshotted successfully + Developer settings message indicating that ndb was successfully snapshotted. + Never Never @@ -6324,6 +6942,11 @@ Next button title Do not discard changes. User confirm No + + No GIFs found + No GIFs found + Message when no GIFs match search + No contact list was found. You might experience issues using the app. If you suspect you have permanently lost your contact list (or if you never had one), you can fix this by resetting it No contact list was found. You might experience issues using the app. If you suspect you have permanently lost your contact list (or if you never had one), you can fix this by resetting it @@ -6410,6 +7033,26 @@ Picker option to indicate that sats should be sent to the user's wallet as a reg Nostr Address Label for the Nostr Address section of user profile form. + + NostrDB + NostrDB + Label for main NostrDB database + + + NostrDB Details + NostrDB Details + Navigation title for NostrDB detail view + + + NostrDB Metadata + NostrDB Metadata + Database name for NostrDB metadata + + + NostrDB Total + NostrDB Total + Label for total NostrDB storage + NostrScript NostrScript @@ -6430,6 +7073,51 @@ Picker option to indicate that sats should be sent to the user's wallet as a reg Not now Button to not save key, complete account creation, and start using the app. + + Note Blocks + Note Blocks + Database name for note blocks + + + Note ID Index + Note ID Index + Database name for note ID index + + + Note Kind Index + Note Kind Index + Database name for note kind index + + + Note Pubkey Index + Note Pubkey Index + Database name for note pubkey index + + + Note Pubkey+Kind Index + Note Pubkey+Kind Index + Database name for note pubkey+kind index + + + Note Relay+Kind Index + Note Relay+Kind Index + Database name for note relay+kind index + + + Note Relays + Note Relays + Database name for note relays + + + Note Tags Index + Note Tags Index + Database name for note tags index + + + Note Text Index + Note Text Index + Database name for note text index + Note from a %@ you've muted Note from a %@ you've muted @@ -6438,7 +7126,8 @@ Picker option to indicate that sats should be sent to the user's wallet as a reg Note not found Note not found - Heading for the thread view in a not found error state. + Heading for the event loader view in a not found error state. +Heading for the thread view in a not found error state. Note you've muted @@ -6457,6 +7146,11 @@ Label for filter for seeing only notes (instead of notes and replies). Notes & Replies Label for filter for seeing notes and replies (instead of only notes). + + Notes (NDB_DB_NOTE) + Notes (NDB_DB_NOTE) + Database name for notes + Notes from %@ Notes from %@ @@ -6575,6 +7269,11 @@ Button label to dismiss an error dialog Orange-pill Button label that allows the user to start a direct message conversation with the user shown on-screen, to orange-pill them (i.e. help them to setup zaps) + + Other Data + Other Data + Database name for other/unaccounted data + Other preferences Other preferences @@ -6657,6 +7356,11 @@ Section title for deleting the user Please check the address and try again Tip for an error where the relay address being added is invalid + + Please check your internet connection and restart the app. If the error persists, please go to Settings > First Aid. + Please check your internet connection and restart the app. If the error persists, please go to Settings > First Aid. + Human readable tips for what to do for a failure to find the relay list + Please choose relays from the list below to filter the current feed: Please choose relays from the list below to filter the current feed: @@ -6777,6 +7481,11 @@ Section title for deleting the user Posts Label for filter for seeing the posts from the people in this follow pack. + + Privacy + Privacy + Section header for privacy related settings + Private Private @@ -6825,6 +7534,21 @@ Label indicating the production environment for Push notification functionality< Profile Sidebar menu label for Profile view. + + Profile Key Index + Profile Key Index + Database name for profile key index + + + Profile Last Fetch + Profile Last Fetch + Database name for profile last fetch + + + Profile Search Index + Profile Search Index + Database name for profile search + Profile action sheets allow you to follow, zap, or DM profiles more quickly without having to view their full profile Profile action sheets allow you to follow, zap, or DM profiles more quickly without having to view their full profile @@ -6840,6 +7564,11 @@ Label indicating the production environment for Push notification functionality< Profiles Section title for profile view configuration. + + Profiles (NDB_DB_PROFILE) + Profiles (NDB_DB_PROFILE) + Database name for profiles + Public Public @@ -6876,6 +7605,11 @@ Picker option to indicate that a zap should be sent publicly and identify the us Purple Subscription service name + + Purple subscribers get first access to new and experimental features — fresh ideas straight from the lab. + Purple subscribers get first access to new and experimental features — fresh ideas straight from the lab. + Damus purple subscription pitch + Push Push @@ -6918,6 +7652,11 @@ Picker option to indicate that a zap should be sent publicly and identify the us Section header for reactions settings Title of emoji reactions view + + Reading + Reading + Section header for reading appearance settings + Received an incorrect or unexpected response from the wallet provider. This looks like an issue with your wallet provider. Received an incorrect or unexpected response from the wallet provider. This looks like an issue with your wallet provider. @@ -7091,6 +7830,11 @@ Setting to enable Repost Local Notification Retry Button to retry completing account creation after an error occurred. + + Retrying… + Retrying… + Button label for the retry-in-progress state when loading a note + Routing Routing @@ -7218,6 +7962,11 @@ Title of the text field for searching. Search / Universe Section header for search/universe settings + + Search GIFs... + Search GIFs... + Placeholder for GIF search field + Search within settings Search within settings @@ -7238,11 +7987,21 @@ Title of the text field for searching. Search/Universe Navigation title for universe/search settings. + + Search: %@ + Search: %@ + Label indicating the search query that resulted in the current list of notes + Secret Account Login Key Secret Account Login Key Section title for user's secret account login key. + + Select GIF + Select GIF + Title for GIF picker sheet + Select Your Interests Select Your Interests @@ -7283,6 +8042,11 @@ Title of the text field for searching. Send a message with your zap... Placeholder text for a comment to send as part of a zap to the user. + + Sepia mode for longform articles + Sepia mode for longform articles + Setting to enable sepia reading mode for longform articles + Server Server @@ -7323,6 +8087,11 @@ Button to share an image. Button to share the link to a profile. Save button text for saving profile status settings. + + Share Damus client tag + Share Damus client tag + Setting to publish a client tag indicating Damus posted the note + Share Note Share Note @@ -7374,6 +8143,11 @@ Toggle to show or hide user's secret account login key. Show less Button to show less of a long profile description. + + Show media links + Show media links + Accessibility label for toggle button to show media link list + Show more Show more @@ -7430,11 +8204,31 @@ Button to show more of a long profile description. Sign out Sidebar menu label to sign out of the account. + + Size + Size + Label for size in disk storage chart + Skip Skip Button to dismiss the suggested users screen + + Snapshot Database + Snapshot Database + Label for snapshot database + + + Snapshot Ndb to shared container + Snapshot Ndb to shared container + Developer settings button to snapshot ndb to shared container. + + + Snapshotting Ndb to shared container + Snapshotting Ndb to shared container + Developer settings loading message indicating that ndb is being snapshotted to the shared container. + Some profiles tend to have a lot of Bitcoin-related content alongside their topics of interest. Disable this setting if you prefer to filter out follow suggestions that frequently talk about Bitcoin. Some profiles tend to have a lot of Bitcoin-related content alongside their topics of interest. Disable this setting if you prefer to filter out follow suggestions that frequently talk about Bitcoin. @@ -7506,6 +8300,12 @@ Section header for Universe/Search spam Staying humble... Placeholder as an example of what the user could set as their profile status. + + Storage + Storage + Navigation title for storage settings +Section header for storage usage statistics + Subscriber number Subscriber number @@ -7551,6 +8351,11 @@ Section header for Universe/Search spam Supporter Badge Title for supporter badge + + Switch between posts from your follows or your favorites. + Switch between posts from your follows or your favorites. + Description of the tip that informs users that they can switch between posts from your follows or your favorites. + Syncing Syncing @@ -7571,6 +8376,16 @@ Section header for Universe/Search spam Tap to load Label for button that allows user to dismiss media content warning and unblur the image + + Tenor API Key (optional) + Tenor API Key (optional) + Prompt for optional entry of API Key to use with Tenor. + + + Tenor API key not configured + Tenor API key not configured + Error message for missing Tenor API key + Test (local) Test (local) @@ -7630,6 +8445,11 @@ Enjoy! The payment request did not receive a response and the request timed-out. A human-readable error message + + The quick brown fox jumps over the lazy dog. This preview shows how your line spacing will appear in longform articles. + The quick brown fox jumps over the lazy dog. This preview shows how your line spacing will appear in longform articles. + Sample text for line height preview in settings + The social network you control The social network you control @@ -7704,6 +8524,11 @@ Nice to meet you all! #introductions #plebchain This note contains too many items and cannot be rendered Error message indicating that a note is too big and cannot be rendered + + This note may have been deleted, or it might not be available on the relays you're connected to. + This note may have been deleted, or it might not be available on the relays you're connected to. + Text for the event loader view when it is unable to find the note the user is looking for + This operation is restricted by your wallet. This operation is restricted by your wallet. @@ -7719,11 +8544,36 @@ Nice to meet you all! #introductions #plebchain This user cannot be zapped because they have not configured zaps on their account yet. Time to orange-pill? Comment explaining why a user cannot be zapped. + + This will allow you to easily add gifs from Tenor to your posts. You will see the GIF icon in the attachment bar when creating a post. Tapping it will show you all of tenor's featured GIFs. You can also search for GIFs. + This will allow you to easily add gifs from Tenor to your posts. You will see the GIF icon in the attachment bar when creating a post. Tapping it will show you all of tenor's featured GIFs. You can also search for GIFs. + Damus Labs feature explanation + + + This will allow you to pick users to be part of your favorites list. You can also switch your profile timeline to only see posts from your favorite contacts. + This will allow you to pick users to be part of your favorites list. You can also switch your profile timeline to only see posts from your favorite contacts. + Damus Labs feature explanation + + + This will allow you to see all the real-time live streams happening on Nostr! As well as let you view and interact in the Live Chat. Please keep in mind this is still a work in progress and issues are expected. When enabled you will see the Live option in your side menu. + This will allow you to see all the real-time live streams happening on Nostr! As well as let you view and interact in the Live Chat. Please keep in mind this is still a work in progress and issues are expected. When enabled you will see the Live option in your side menu. + Damus Labs feature explanation + Threads Threads Section header title for a list of threads that are muted. + + Timeline switcher + Timeline switcher + Title of tip that informs users that they can switch timelines. + + + Timeline switcher, select %1$@ or %2$@ + Timeline switcher, select %1$@ or %2$@ + Accessibility label for the timeline switcher button at the topbar + To continue your Purple subscription checkout, please verify your npub by clicking on the button below To continue your Purple subscription checkout, please verify your npub by clicking on the button below @@ -7754,6 +8604,16 @@ Nice to meet you all! #introductions #plebchain Top hits A label indicating that the notes being displayed below it are all top note search results + + Total + Total + Label for total storage in pie chart center + + + Total Storage + Total Storage + Label for total storage used + Translate DMs Translate DMs @@ -7798,7 +8658,9 @@ Section header for text and appearance settings Try Again Try Again - Button to retry payment + Button label to retry loading a note that was not found +Button to retry loading GIFs +Button to retry payment Try again. If the error persists, please contact your wallet provider and/or our support team. @@ -7810,6 +8672,11 @@ Section header for text and appearance settings Try checking the link again, your internet connection, or contact the person who provided you the link for help. Tips on what to do if a note cannot be found. + + Try checking your internet connection, expanding your relay list, or contacting the person who quoted this note. + Try checking your internet connection, expanding your relay list, or contacting the person who quoted this note. + Tips on what to do if a quoted note cannot be found. + Try restarting your wallet or contacting support if the problem persists. Try restarting your wallet or contacting support if the problem persists. @@ -8232,9 +9099,9 @@ User confirm Yes Your Purple subscription has expired. Renew? A notification message explaining to the user that their Damus Purple Subscription has expired, prompting them to renew. - - Your connected wallet raised an unknown error. Message: %s - Your connected wallet raised an unknown error. Message: %s + + Your connected wallet raised an unknown error. Message: %@ + Your connected wallet raised an unknown error. Message: %@ Human readable error description for unknown error @@ -8262,6 +9129,11 @@ User confirm Yes Your relay list appears to be broken, so we cannot connect you to your Nostr network. Human readable error description for a failure to parse the relay list due to a bad relay list + + Your relay list could not be found, so we cannot connect you to your Nostr network. + Your relay list could not be found, so we cannot connect you to your Nostr network. + Human readable error description for a failure to find the relay list + Your report will be sent to the relays you are connected to Your report will be sent to the relays you are connected to @@ -8426,6 +9298,11 @@ String indicating that a given timestamp just occurred translate.nostr.wine (DeepL, Pay with BTC) Dropdown option for selecting translate.nostr.wine as the translation service. + + via %@ + via %@ + Label indicating which client published the event + wss://some.relay.com wss://some.relay.com @@ -8508,31 +9385,9 @@ String indicating that a given timestamp just occurred
- -
- -
- - - DamusNotificationService - DamusNotificationService - Bundle display name - - - DamusNotificationService - DamusNotificationService - Bundle name - - - - - Copyright (human-readable) - - -
- +
diff --git a/damus/en-US.xcloc/Source Contents/damus/InfoPlist.xcstrings b/damus/en-US.xcloc/Source Contents/damus/InfoPlist.xcstrings index 3fc30daa..04e90af1 100644 --- a/damus/en-US.xcloc/Source Contents/damus/InfoPlist.xcstrings +++ b/damus/en-US.xcloc/Source Contents/damus/InfoPlist.xcstrings @@ -8,7 +8,7 @@ "en-US" : { "stringUnit" : { "state" : "new", - "value" : "share extension" + "value" : "DamusNotificationService" } } } @@ -20,7 +20,7 @@ "en-US" : { "stringUnit" : { "state" : "new", - "value" : "ShareExtension" + "value" : "DamusNotificationService" } } } @@ -38,5 +38,5 @@ } } }, - "version" : "1.0" + "version" : "1.1" } \ No newline at end of file diff --git a/damus/en-US.xcloc/Source Contents/damus/Resources/InfoPlist.xcstrings b/damus/en-US.xcloc/Source Contents/damus/Resources/InfoPlist.xcstrings index 12b79d00..7dfba7ab 100644 --- a/damus/en-US.xcloc/Source Contents/damus/Resources/InfoPlist.xcstrings +++ b/damus/en-US.xcloc/Source Contents/damus/Resources/InfoPlist.xcstrings @@ -8,7 +8,7 @@ "en-US" : { "stringUnit" : { "state" : "new", - "value" : "DamusNotificationService" + "value" : "share extension" } } } @@ -20,7 +20,7 @@ "en-US" : { "stringUnit" : { "state" : "new", - "value" : "DamusNotificationService" + "value" : "ShareExtension" } } } @@ -38,5 +38,5 @@ } } }, - "version" : "1.0" + "version" : "1.1" } \ No newline at end of file diff --git a/damus/en-US.xcloc/Source Contents/damus/Localizable.xcstrings b/damus/en-US.xcloc/Source Contents/damus/Resources/Localizable.xcstrings similarity index 89% rename from damus/en-US.xcloc/Source Contents/damus/Localizable.xcstrings rename to damus/en-US.xcloc/Source Contents/damus/Resources/Localizable.xcstrings index 8c54aed2..2ebdc3dd 100644 --- a/damus/en-US.xcloc/Source Contents/damus/Localizable.xcstrings +++ b/damus/en-US.xcloc/Source Contents/damus/Resources/Localizable.xcstrings @@ -10,8 +10,8 @@ "(Contents are encrypted)" : { "comment" : "Label on push notification indicating that the contents of the message are encrypted" }, - "#%@" : { - "comment" : "Navigation link to search hashtag." + "%@" : { + }, "%@ / %@" : { "comment" : "Amount of money required to subscribe to the Nostr relay. In English, this would look something like '4,000 sats / 30 days', meaning it costs 4000 sats to subscribe to the Nostr relay for 30 days.", @@ -28,7 +28,7 @@ "comment" : "Amount of money required to publish to the Nostr relay. In English, this would look something like '10 sats / event', meaning it costs 10 sats to publish one event." }, "%@ %@" : { - "comment" : "Sentence composed of 2 variables to describe how many imports were performed from loading a NostrScript. In source English, the first variable is the number of imports, and the second variable is 'Import' or 'Imports'.\nSentence composed of 2 variables to describe how many people are following a user. In source English, the first variable is the number of followers, and the second variable is 'Follower' or 'Followers'.\nSentence composed of 2 variables to describe how many people are in the follow pack. In source English, the first variable is the number of users, and the second variable is 'user' or 'users'.\nSentence composed of 2 variables to describe how many profiles a user is following. In source English, the first variable is the number of profiles being followed, and the second variable is 'Following'.\nSentence composed of 2 variables to describe how many quoted reposts. In source English, the first variable is the number of reposts, and the second variable is 'Repost' or 'Reposts'.\nSentence composed of 2 variables to describe how many reactions there are on a post. In source English, the first variable is the number of reactions, and the second variable is 'Reaction' or 'Reactions'.\nSentence composed of 2 variables to describe how many relay servers a user is connected. In source English, the first variable is the number of relay servers, and the second variable is 'Relay' or 'Relays'.\nSentence composed of 2 variables to describe how many relays a note was found on. In source English, the first variable is the number of relays, and the second variable is 'Relay' or 'Relays'.\nSentence composed of 2 variables to describe how many reposts. In source English, the first variable is the number of reposts, and the second variable is 'Repost' or 'Reposts'.\nSentence composed of 2 variables to describe how many zap payments there are on a post. In source English, the first variable is the number of zap payments, and the second variable is 'Zap' or 'Zaps'.", + "comment" : "Sentence composed of 2 variables to describe how many imports were performed from loading a NostrScript. In source English, the first variable is the number of imports, and the second variable is 'Import' or 'Imports'.\nSentence composed of 2 variables to describe how many people are following a user. In source English, the first variable is the number of followers, and the second variable is 'Follower' or 'Followers'.\nSentence composed of 2 variables to describe how many people are in the follow pack. In source English, the first variable is the number of users, and the second variable is 'user' or 'users'.\nSentence composed of 2 variables to describe how many people are viewing the live event. In source English, the first variable is the number of viewers, and the second variable is 'viewer' or 'viewers'.\nSentence composed of 2 variables to describe how many profiles a user is following. In source English, the first variable is the number of profiles being followed, and the second variable is 'Following'.\nSentence composed of 2 variables to describe how many quoted reposts. In source English, the first variable is the number of reposts, and the second variable is 'Repost' or 'Reposts'.\nSentence composed of 2 variables to describe how many reactions there are on a post. In source English, the first variable is the number of reactions, and the second variable is 'Reaction' or 'Reactions'.\nSentence composed of 2 variables to describe how many relay servers a user is connected. In source English, the first variable is the number of relay servers, and the second variable is 'Relay' or 'Relays'.\nSentence composed of 2 variables to describe how many relays a note was found on. In source English, the first variable is the number of relays, and the second variable is 'Relay' or 'Relays'.\nSentence composed of 2 variables to describe how many reposts. In source English, the first variable is the number of reposts, and the second variable is 'Repost' or 'Reposts'.\nSentence composed of 2 variables to describe how many zap payments there are on a post. In source English, the first variable is the number of zap payments, and the second variable is 'Zap' or 'Zaps'.", "localizations" : { "en-US" : { "stringUnit" : { @@ -291,6 +291,9 @@ "Are you sure you want to upload this media?" : { "comment" : "Alert message asking if the user wants to upload media." }, + "As a subscriber, you’re getting an early look at new and innovative tools. These are beta features — still being tested and tuned. Try them out, share your thoughts, and help us perfect what’s next." : { + "comment" : "Damus Labs explainer" + }, "As part of your Damus Purple membership, you get complimentary and automated translations. Would you like to enable Damus Purple translations?\n\nTip: You can always change this later in Settings → Translations" : { "comment" : "Message notifying the user that they get auto-translations as part of their service" }, @@ -352,7 +355,7 @@ "comment" : "User-visible heading for an error message indicating a note has an unknown kind or is unsupported for viewing." }, "Cancel" : { - "comment" : "Alert button to cancel out of alert for muting a user.\nButton to cancel a repost.\nButton to cancel any interaction with the QRCode link.\nButton to cancel out of alert that creates a new mutelist.\nButton to cancel out of posting a note.\nButton to cancel out of search text entry mode.\nButton to cancel the LNURL payment process.\nButton to cancel the upload.\nCancel button text for dismissing profile status settings view.\nCancel button text for dismissing updating image url.\nCancel deleting bookmarks.\nCancel deleting the user.\nCancel out of logging out the user.\nCancel out of search view.\nCancel the user-requested operation.\nText for button to cancel out of connecting Nostr Wallet Connect lightning wallet." + "comment" : "Alert button to cancel out of alert for muting a user.\nButton to cancel GIF selection\nButton to cancel a repost.\nButton to cancel any interaction with the QRCode link.\nButton to cancel out of alert that creates a new mutelist.\nButton to cancel out of posting a note.\nButton to cancel out of search text entry mode.\nButton to cancel the LNURL payment process.\nButton to cancel the upload.\nCancel button text for dismissing profile status settings view.\nCancel button text for dismissing updating image url.\nCancel deleting bookmarks.\nCancel deleting the user.\nCancel out of logging out the user.\nCancel out of search view.\nCancel the user-requested operation.\nText for button to cancel out of connecting Nostr Wallet Connect lightning wallet." }, "Cancelled" : { "comment" : "Title indicating that the user has cancelled." @@ -360,6 +363,9 @@ "Changing this setting will cause the cache to be cleared. This will free space, but images may take longer to load again. Are you sure you want to proceed?" : { "comment" : "Message explaining consequences of changing the 'enable animation' setting" }, + "Chat" : { + "comment" : "Placeholder text to prompt entry of chat message." + }, "Check if the invoice is valid, your wallet is online, configured correctly, and try again. If the error persists, please contact support and/or your wallet provider." : { "comment" : "A human-readable tip guiding the user on what to do when seeing a timeout error while sending a wallet payment." }, @@ -396,6 +402,9 @@ "Click here if you have a Coinos username and password." : { "comment" : "Button description hint for users who may want to connect via the website." }, + "Client tags can help other apps understand new kinds of events. Turn this off if you prefer not to identify Damus when posting." : { + "comment" : "Description for the client tag privacy toggle." + }, "Close" : { "comment" : "Button label giving the user the option to close the sheet due to not being logged in.\nButton label giving the user the option to close the sheet from which they shared content\nButton label giving the user the option to close the sheet from which they were trying share.\nButton label giving the user the option to close the sheet from which they were trying to share.\nButton label giving the user the option to close the view when no content is available to share" }, @@ -486,6 +495,9 @@ "Copy LNURL" : { "comment" : "Context menu option for copying a user's Lightning URL." }, + "Copy media link" : { + "comment" : "Accessibility label for copy media link button" + }, "Copy note ID" : { "comment" : "Context menu option for copying the ID of the note." }, @@ -546,6 +558,9 @@ "Damus" : { "comment" : "Name of the app for the title of an internal notification" }, + "Damus Labs stylized logo" : { + "comment" : "Accessibility label for a stylized Damus Labs logo" + }, "Damus logo" : { "comment" : "Accessibility label for damus logo" }, @@ -699,6 +714,9 @@ "Expiry date" : { "comment" : "Label for Purple subscription expiry date" }, + "Failed to calculate storage: %@" : { + "comment" : "Error message when storage calculation fails" + }, "Failed to generate media for upload. Please try again. If error persists, please contact Damus support at support@damus.io" : { "comment" : "Error label forming media for upload after user crops the image." }, @@ -711,9 +729,18 @@ "Failed to parse" : { "comment" : "NostrScript error message when it fails to parse a script." }, + "Failed to parse GIF data" : { + "comment" : "Error message for Tenor decoding failure" + }, "Failed to scan QR code, please try again." : { "comment" : "Error message for failed QR scan" }, + "Favorite" : { + "comment" : "Button label that allows the user to favorite the user shown on-screen" + }, + "Favorites" : { + "comment" : "Label for a toggle that enables an experimental feature\nShow Notes from your favorites" + }, "Find a Wallet" : { "comment" : "The heading for one of the \"Why add Zaps?\" boxes" }, @@ -778,6 +805,9 @@ "Following..." : { "comment" : "Label to indicate that the user is in the process of following another user." }, + "Follows" : { + "comment" : "Show Notes from your following" + }, "Follows you" : { "comment" : "Text to indicate that a user is following your profile." }, @@ -814,12 +844,18 @@ "Get paid for being you" : { "comment" : "Description for monetizing one's presence." }, + "GIFs" : { + "comment" : "Label for a toggle that enables an experimental feature\nSection title for GIFs configuration." + }, "Give thanks" : { "comment" : "Heading explaining a benefit of connecting a lightning wallet." }, "Go to the app" : { "comment" : "Button label giving the user the option to go to the app after sharing content" }, + "Happening Now" : { + "comment" : "Indicates that live events are happening now." + }, "Hashtags" : { "comment" : "Label for filter for seeing only hashtag follows.\nSection header title for a list of hashtags that are muted." }, @@ -844,12 +880,18 @@ "Hide balance" : { "comment" : "Setting to hide wallet balance." }, + "Hide media links" : { + "comment" : "Accessibility label for toggle button to hide media link list" + }, "Hide notes with #nsfw tags" : { "comment" : "Setting to hide notes with not safe for work tags\nSetting to hide notes with the #nsfw (not safe for work) tags" }, "Hide notifications that tag many profiles" : { "comment" : "Label for notification settings toggle that hides notifications that tag many people." }, + "Hide posts with too many hashtags" : { + "comment" : "Setting to hide notes that contain too many hashtags (spam)" + }, "Highlight" : { "comment" : "Context menu action to highlight the selected text as context to draft a new note." }, @@ -880,6 +922,9 @@ "Illegal Content" : { "comment" : "Description of report type for illegal content." }, + "Image Cache" : { + "comment" : "Label for Kingfisher image cache" + }, "Image is setup" : { "comment" : "Accessibility value on image control" }, @@ -919,11 +964,14 @@ "Invalid relay address" : { "comment" : "Heading for an error when adding a relay" }, + "Invalid response from server" : { + "comment" : "Error message for invalid Tenor response" + }, "Invalid Tip Address" : { "comment" : "Title of alerting as invalid tip address." }, "Invalid URL" : { - "comment" : "Error label when user enters an invalid URL" + "comment" : "Error label when user enters an invalid URL\nError message for invalid Tenor URL" }, "It seems that you already have a translation service configured. Would you like to switch to Damus Purple as your translator?" : { "comment" : "Confirmation dialog question asking users if they want their translation settings to be automatically switched to the Damus Purple translation service" @@ -934,9 +982,18 @@ "Keys" : { "comment" : "Navigation title for managing keys.\nSettings section for managing keys" }, + "Labs" : { + "comment" : "Sidebar menu label for Damus Labs experimental features." + }, + "Labs " : { + "comment" : "Feature name" + }, "Latest transactions" : { "comment" : "Heading for latest wallet transactions list" }, + "Learn more about Purple" : { + "comment" : "Button to learn more about the Damus Purple subscription." + }, "Learn more about the features" : { "comment" : "Label for a link to the Damus website, to allow the user to learn more about the features of Purple" }, @@ -961,17 +1018,32 @@ "Likes" : { "comment" : "Setting to enable Like Local Notification" }, + "Line height: %.1fx" : { + "comment" : "Label showing current line height multiplier setting" + }, "Link to services that support Nostr Wallet Connect like Alby, Coinos and more." : { "comment" : "The description for one of the \"Why add Zaps?\" boxes" }, "Link your account" : { "comment" : "The heading for one of the \"Why add Zaps?\" boxes" }, + "Live" : { + "comment" : "Label for a toggle that enables an experimental feature\nSidebar menu label for live events view." + }, "LIVE" : { "comment" : "Text indicator that the video is a livestream." }, - "Load media" : { - "comment" : "Button to show media in note." + "Live Chat" : { + "comment" : "Title for the live stream chat." + }, + "Live events going on right now" : { + "comment" : "Indicates that live events are happening now." + }, + "Load %@" : { + "comment" : "Accessibility label for button to load specific media item" + }, + "Loading GIFs..." : { + "comment" : "Loading indicator text for GIF picker" }, "Loading thread" : { "comment" : "Accessibility label for the thread view when it is loading" @@ -1015,6 +1087,9 @@ "Max weekly budget" : { "comment" : "Label for setting the maximum weekly budget for Coinos wallet" }, + "Maximum hashtags: %d" : { + "comment" : "Label showing the maximum number of hashtags allowed before a post is hidden" + }, "Maybe later" : { "comment" : "Text for button to disconnect from Nostr Wallet Connect lightning wallet." }, @@ -1036,9 +1111,15 @@ "Message" : { "comment" : "Button label that allows the user to start a direct message conversation with the user shown on-screen" }, + "Metadata (NDB_DB_META)" : { + "comment" : "Database name for metadata" + }, "Monthly" : { "comment" : "Monthly renewal of purple subscription" }, + "More features coming soon!" : { + "comment" : "Label indicating that more features for Damus Lab experiments are coming soon." + }, "Mute" : { "comment" : "Alert button to mute a user.\nButton label that allows the user to mute the user shown on-screen\nButton to mute a profile\nContext menu action to mute the selected word.\nTitle for confirmation dialog to mute a profile." }, @@ -1069,6 +1150,9 @@ "Name" : { "comment" : "Label to prompt name entry." }, + "Ndb has been snapshotted successfully" : { + "comment" : "Developer settings message indicating that ndb was successfully snapshotted." + }, "Never" : { "comment" : "Profile status duration setting of never expiring." }, @@ -1099,6 +1183,9 @@ "No cover image" : { "comment" : "Text letting user know there is no cover image." }, + "No GIFs found" : { + "comment" : "Message when no GIFs match search" + }, "No image is currently setup" : { "comment" : "Accessibility value on image control" }, @@ -1156,6 +1243,18 @@ "Nostr Address" : { "comment" : "Label for the Nostr Address section of user profile form." }, + "NostrDB" : { + "comment" : "Label for main NostrDB database" + }, + "NostrDB Details" : { + "comment" : "Navigation title for NostrDB detail view" + }, + "NostrDB Metadata" : { + "comment" : "Database name for NostrDB metadata" + }, + "NostrDB Total" : { + "comment" : "Label for total NostrDB storage" + }, "NostrScript" : { "comment" : "Navigation title for the view showing NostrScript." }, @@ -1168,11 +1267,38 @@ "Not now" : { "comment" : "Button to not save key, complete account creation, and start using the app." }, + "Note Blocks" : { + "comment" : "Database name for note blocks" + }, "Note from a %@ you've muted" : { "comment" : "Text to indicate that what is being shown is a note which has been muted." }, + "Note ID Index" : { + "comment" : "Database name for note ID index" + }, + "Note Kind Index" : { + "comment" : "Database name for note kind index" + }, "Note not found" : { - "comment" : "Heading for the thread view in a not found error state." + "comment" : "Heading for the event loader view in a not found error state.\nHeading for the thread view in a not found error state." + }, + "Note Pubkey Index" : { + "comment" : "Database name for note pubkey index" + }, + "Note Pubkey+Kind Index" : { + "comment" : "Database name for note pubkey+kind index" + }, + "Note Relay+Kind Index" : { + "comment" : "Database name for note relay+kind index" + }, + "Note Relays" : { + "comment" : "Database name for note relays" + }, + "Note Tags Index" : { + "comment" : "Database name for note tags index" + }, + "Note Text Index" : { + "comment" : "Database name for note text index" }, "Note you've muted" : { "comment" : "Label indicating note has been muted\nText to indicate that what is being shown is a note which has been muted." @@ -1180,6 +1306,9 @@ "Notes" : { "comment" : "A label indicating that the notes being displayed below it are from a timeline, not search results\nLabel for filter for seeing only notes (instead of notes and replies)." }, + "Notes (NDB_DB_NOTE)" : { + "comment" : "Database name for notes" + }, "Notes & Replies" : { "comment" : "Label for filter for seeing notes and replies (instead of only notes)." }, @@ -1283,6 +1412,9 @@ "Orange-pill" : { "comment" : "Button label that allows the user to start a direct message conversation with the user shown on-screen, to orange-pill them (i.e. help them to setup zaps)" }, + "Other Data" : { + "comment" : "Database name for other/unaccounted data" + }, "Other preferences" : { "comment" : "Screen title for content preferences screen during onboarding" }, @@ -1331,6 +1463,9 @@ "Please check the address and try again" : { "comment" : "Tip for an error where the relay address being added is invalid" }, + "Please check your internet connection and restart the app. If the error persists, please go to Settings > First Aid." : { + "comment" : "Human readable tips for what to do for a failure to find the relay list" + }, "Please choose relays from the list below to filter the current feed:" : { "comment" : "Instructions on how to filter a specific timeline feed by choosing relay servers to filter on." }, @@ -1403,6 +1538,9 @@ "Posts" : { "comment" : "Label for filter for seeing the posts from the people in this follow pack." }, + "Privacy" : { + "comment" : "Section header for privacy related settings" + }, "Private" : { "comment" : "Button text to indicate that the zap type is a private zap.\nHeading indicating that this application keeps personally identifiable information private. A sentence describing what is done to keep data private comes after this heading.\nPicker option to indicate that a zap should be sent privately and not identify the user to the public." }, @@ -1445,12 +1583,24 @@ "Profile action sheets allow you to follow, zap, or DM profiles more quickly without having to view their full profile" : { "comment" : "Section footer clarifying what the profile action sheet feature does" }, + "Profile Key Index" : { + "comment" : "Database name for profile key index" + }, + "Profile Last Fetch" : { + "comment" : "Database name for profile last fetch" + }, "Profile picture is setup" : { "comment" : "Accessibility value on profile picture image control" }, + "Profile Search Index" : { + "comment" : "Database name for profile search" + }, "Profiles" : { "comment" : "Section title for profile view configuration." }, + "Profiles (NDB_DB_PROFILE)" : { + "comment" : "Database name for profiles" + }, "Public" : { "comment" : "Button text to indicate that the zap type is a public zap.\nPicker option to indicate that a zap should be sent publicly and identify the user as who sent it." }, @@ -1472,6 +1622,9 @@ "Purple" : { "comment" : "Subscription service name" }, + "Purple subscribers get first access to new and experimental features — fresh ideas straight from the lab." : { + "comment" : "Damus purple subscription pitch" + }, "Push" : { "comment" : "Option for notification mode setting: Push notification mode" }, @@ -1496,6 +1649,9 @@ "Reactions" : { "comment" : "Navigation bar title for Reactions view.\nSection header for reactions settings\nTitle of emoji reactions view" }, + "Reading" : { + "comment" : "Section header for reading appearance settings" + }, "Received an incorrect or unexpected response from the wallet provider. This looks like an issue with your wallet provider." : { "comment" : "A human-readable error message" }, @@ -1606,6 +1762,9 @@ "Retry" : { "comment" : "Button to retry completing account creation after an error occurred." }, + "Retrying…" : { + "comment" : "Button label for the retry-in-progress state when loading a note" + }, "Routing" : { "comment" : "Label indicating the routing address for Nostr Wallet Connect payments. In other words, the relay used by the NWC wallet provider" }, @@ -1678,12 +1837,18 @@ "Search / Universe" : { "comment" : "Section header for search/universe settings" }, + "Search GIFs..." : { + "comment" : "Placeholder for GIF search field" + }, "Search within settings" : { "comment" : "Text to prompt the user to search settings." }, "Search word: %@" : { "comment" : "Navigation link to search for a word." }, + "Search: %@" : { + "comment" : "Label indicating the search query that resulted in the current list of notes" + }, "Search..." : { "comment" : "Placeholder text to prompt entry of search query." }, @@ -1702,6 +1867,9 @@ "Select default wallet" : { "comment" : "Prompt selection of user's default wallet" }, + "Select GIF" : { + "comment" : "Title for GIF picker sheet" + }, "Select your interests" : { "comment" : "Title for a screen asking the user for interests" }, @@ -1720,6 +1888,9 @@ "Send a message with your zap..." : { "comment" : "Placeholder text for a comment to send as part of a zap to the user." }, + "Sepia mode for longform articles" : { + "comment" : "Setting to enable sepia reading mode for longform articles" + }, "Server" : { "comment" : "Prompt selection of LibreTranslate server to perform machine translations on notes" }, @@ -1741,6 +1912,9 @@ "Share" : { "comment" : "Button to share a note\nButton to share an image.\nButton to share the link to a profile.\nSave button text for saving profile status settings." }, + "Share Damus client tag" : { + "comment" : "Setting to publish a client tag indicating Damus posted the note" + }, "Share externally" : { "comment" : "Accessibility label for external share button" }, @@ -1771,6 +1945,9 @@ "Show less" : { "comment" : "Button to show less of a long profile description." }, + "Show media links" : { + "comment" : "Accessibility label for toggle button to show media link list" + }, "Show more" : { "comment" : "Button to show entire note.\nButton to show more of a long profile description." }, @@ -1804,9 +1981,21 @@ "Sign out" : { "comment" : "Sidebar menu label to sign out of the account." }, + "Size" : { + "comment" : "Label for size in disk storage chart" + }, "Skip" : { "comment" : "Button to dismiss the suggested users screen" }, + "Snapshot Database" : { + "comment" : "Label for snapshot database" + }, + "Snapshot Ndb to shared container" : { + "comment" : "Developer settings button to snapshot ndb to shared container." + }, + "Snapshotting Ndb to shared container" : { + "comment" : "Developer settings loading message indicating that ndb is being snapshotted to the shared container." + }, "SOFTWARE" : { "comment" : "Text label indicating which relay software is used to run this Nostr relay." }, @@ -1852,6 +2041,9 @@ "Staying humble..." : { "comment" : "Placeholder as an example of what the user could set as their profile status." }, + "Storage" : { + "comment" : "Navigation title for storage settings\nSection header for storage usage statistics" + }, "Subscriber number" : { "comment" : "Label for Purple account subscriber number" }, @@ -1879,6 +2071,9 @@ "Supporter Badge" : { "comment" : "Title for supporter badge" }, + "Switch between posts from your follows or your favorites." : { + "comment" : "Description of the tip that informs users that they can switch between posts from your follows or your favorites." + }, "Syncing" : { "comment" : "Label indicating success in syncing notification preferences" }, @@ -1891,6 +2086,12 @@ "Tap to load" : { "comment" : "Label for button that allows user to dismiss media content warning and unblur the image" }, + "Tenor API Key (optional)" : { + "comment" : "Prompt for optional entry of API Key to use with Tenor." + }, + "Tenor API key not configured" : { + "comment" : "Error message for missing Tenor API key" + }, "Test (local)" : { "comment" : "Label indicating a local test environment for Damus Purple functionality (Developer feature)\nLabel indicating a local test environment for Push notification functionality (Developer feature)" }, @@ -1921,6 +2122,9 @@ "The payment request did not receive a response and the request timed-out." : { "comment" : "A human-readable error message" }, + "The quick brown fox jumps over the lazy dog. This preview shows how your line spacing will appear in longform articles." : { + "comment" : "Sample text for line height preview in settings" + }, "The social network you control" : { "comment" : "Quick description of what Damus is" }, @@ -1963,6 +2167,9 @@ "This note contains too many items and cannot be rendered" : { "comment" : "Error message indicating that a note is too big and cannot be rendered" }, + "This note may have been deleted, or it might not be available on the relays you're connected to." : { + "comment" : "Text for the event loader view when it is unable to find the note the user is looking for" + }, "This operation is restricted by your wallet." : { "comment" : "Error description for restricted operation" }, @@ -1972,9 +2179,32 @@ "This user cannot be zapped because they have not configured zaps on their account yet. Time to orange-pill?" : { "comment" : "Comment explaining why a user cannot be zapped." }, + "This will allow you to easily add gifs from Tenor to your posts. You will see the GIF icon in the attachment bar when creating a post. Tapping it will show you all of tenor's featured GIFs. You can also search for GIFs." : { + "comment" : "Damus Labs feature explanation" + }, + "This will allow you to pick users to be part of your favorites list. You can also switch your profile timeline to only see posts from your favorite contacts." : { + "comment" : "Damus Labs feature explanation" + }, + "This will allow you to see all the real-time live streams happening on Nostr! As well as let you view and interact in the Live Chat. Please keep in mind this is still a work in progress and issues are expected. When enabled you will see the Live option in your side menu." : { + "comment" : "Damus Labs feature explanation" + }, "Threads" : { "comment" : "Section header title for a list of threads that are muted." }, + "Timeline switcher" : { + "comment" : "Title of tip that informs users that they can switch timelines." + }, + "Timeline switcher, select %@ or %@" : { + "comment" : "Accessibility label for the timeline switcher button at the topbar", + "localizations" : { + "en-US" : { + "stringUnit" : { + "state" : "new", + "value" : "Timeline switcher, select %1$@ or %2$@" + } + } + } + }, "To continue your Purple subscription checkout, please verify your npub by clicking on the button below" : { "comment" : "Instruction on how to verify npub during Damus Purple checkout" }, @@ -1993,6 +2223,12 @@ "Top Zap" : { "comment" : "Text indicating that this zap is the one with the highest amount of sats." }, + "Total" : { + "comment" : "Label for total storage in pie chart center" + }, + "Total Storage" : { + "comment" : "Label for total storage used" + }, "Translate DMs" : { "comment" : "Toggle to translate direct messages." }, @@ -2021,7 +2257,7 @@ "comment" : "Human-readable short description of the 'trusted network filter' when it is enabled, and therefore showing content from only the trusted network." }, "Try Again" : { - "comment" : "Button to retry payment" + "comment" : "Button label to retry loading a note that was not found\nButton to retry loading GIFs\nButton to retry payment" }, "Try again. If the error persists, please contact your wallet provider and/or our support team." : { "comment" : "A human-readable tip for an error when a payment request cannot be made to a wallet." @@ -2029,6 +2265,9 @@ "Try checking the link again, your internet connection, or contact the person who provided you the link for help." : { "comment" : "Tips on what to do if a note cannot be found." }, + "Try checking your internet connection, expanding your relay list, or contacting the person who quoted this note." : { + "comment" : "Tips on what to do if a quoted note cannot be found." + }, "Try restarting your wallet or contacting support if the problem persists." : { "comment" : "Tip for internal error" }, @@ -2125,6 +2364,9 @@ "VERSION" : { "comment" : "Text label indicating which version of the relay software is being run for this Nostr relay." }, + "via %@" : { + "comment" : "Label indicating which client published the event" + }, "View full profile" : { "comment" : "A button label that allows the user to see the full profile of the profile they are previewing" }, @@ -2260,7 +2502,7 @@ "You unlocked" : { "comment" : "Part 1 of 2 in message 'You unlocked automatic translations' the user gets when they sign up for Damus Purple" }, - "Your connected wallet raised an unknown error. Message: %s" : { + "Your connected wallet raised an unknown error. Message: %@" : { "comment" : "Human readable error description for unknown error" }, "Your content is being broadcasted to the network. Please wait." : { @@ -2290,6 +2532,9 @@ "Your relay list appears to be broken, so we cannot connect you to your Nostr network." : { "comment" : "Human readable error description for a failure to parse the relay list due to a bad relay list" }, + "Your relay list could not be found, so we cannot connect you to your Nostr network." : { + "comment" : "Human readable error description for a failure to find the relay list" + }, "Your report will be sent to the relays you are connected to" : { "comment" : "Footer text to inform user what will happen when the report is submitted." }, @@ -2342,5 +2587,5 @@ "comment" : "Describing the functional benefits of Zaps." } }, - "version" : "1.0" + "version" : "1.1" } \ No newline at end of file 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 ca638c23ce80c6a3f35f369888cd2676767a5b87..7ba31f04b93c44ee57122dc07696cfde4f737457 100644 GIT binary patch delta 13068 zcmeHN3viTGmj3Vk6OuGd(n+V&d63ZI6~ZG4APy)(P(WaKB!JIVAt50mA#XxpWq<*d zp=Mmn9XZ0d3f9!r_#7gx?OMvh?#ikYkXY_&)hL5*sjKBe*rLWAW#gXj-v0ZM2gF(T zQCn7uZu;JH&pr3t^FH_VspQj_QV!prolwSoVttvV{VrI(H+$hhK4YctRB zm{nt~&1J-r?ZzLV^2(LPJA@0am*^A;;AU8dsmDg2U zn`oO9KGCW!O!BJNbL!&tuzD+ZUTz3LBQ9Vh^}IpADzFU1jJ%!n=1n5`$nwB5H`Cr_ z!di7Y6u1 z)m97tVQCHjuHbK=tl<4?^|5OizTR4|=UVs^$KMo!tm1F1tYe5)UIRR>8gGkURm%i| zO)IUtt?CT^fh~a=-YbK;wuCXH!=*)+{|Onw&wg`5+DInW8Hl-|7g~r4ssx=WxfU&09urzBWYG6r$B2=)fz;ZwtYWS~K zl|SW8?G4{d%a#hCx1PZubdbyn7Pkgg-HNHUe_ll8)-zU!J|wQ5Wf6)Bb;ItCqHSaZ zP+=fj7lvF*DUZt$H$YDzydVggTNPToj*)@TxxDj+kibL0ff}M;&xk@cLNz|?O^H45 z|J(uQ{Fe_v9W}O>R(~k6)!B|aj?_ID7)51!WQn@>9}|56ZTYL1F%^7l+-#k-o>tA0 zS*r6LmltlK*QBcG@(qg_SI1A^q{>bXr=s79AxFBq+I$5-2L5f@mOsUjo5|(Otv;tL4v){AuiU zJ-fOkslrdY3PpN;?|H0=!9k*p-QqJ0JL-zC)-_Zyg*B)lLu9@io(=@rS+MqsM7RS(4qc^FZ`>VKo<+e=lXJK=_8_K81S{~ zIpoQ!$ z=)**jn-9kTernP=Bnarg6|6(`+FLHAj<=Z;d*%uE4N*je&^YcoYHP-YE&3&k50ko1 zc!Ougi(7{c?QfF|RhpYfE2oKc(M&sv_;%a3i!^GOD#ojxH{5DSN8QJzOI`YVx8K}WG~LD?SGYue@L%SOTO}R4O~g^rb<#zp z?+Q;m)U1^*jI+Hpj*Et8g#iS&9oc~9Z;FYz7W4zPR6|9W)-Mb-Ud_xaT_{GojLw|- z0~6E!Zz4@CJu!q{DHr|f`ooi@kA|=4f07FnRK7@f>D*kAOrvMWv|I;_ z69QhW69X$erVf=9QfHfZN|l~SSAm`(swC*4gIh#8^^CXOs%%R#m6eN3N^X~Kn!iPi zRL{SZL3{9@t3J!dRnYqjMPjghv+yMFPd9aXM4~GDIJ3a`Ef{V%@O5nXAwCc)7=5^L zWDDz*sPj?YW71W=n1>L+#xA&qe~)2>o6NC6Tg(}*2u*K|XNz<8527xZxkLO~{s~5A z)qMGbDAPcn%#`Uq5Q=ywnxX616tY8VXpqBi!O2bf0hfg=18M@N2Q@-;9({`rY~SF| z*(VSR1M}Y%#Zkme{dRUrW77sMtA@oM+(V|tewRNHDDnl-Z+dfRDU)5 z5*@b8{4$-+?iO+COv8|6Fbwdi21=!h7eW*$>}Dh0%t%zY3vF_89|q0#!x`a#%cyw2*iQ|U zS#4v5=K<$R9AX~ z=f{xj?3*sQ$6p-SoV84Qs9C~4Ou&Nfp^Vy6Zon#t$|slWcHaw1Mr8Dg<*mpo)F)}=~GVY_mm9m#5Z*sF_auRLp{sD zdQR&bJB4rP^-%*IJdhL~pog||B!O6++@0d0-bn|EmopxboffhTn6eyhu}$xmVg?to zu$V#Y*k^FZGU2^$@JDjW5xqC_njjH2Id;Q-CoXh~Vt=HLfxO#zCH5^e;iR~MezcLJ z!1=pnX4qH!TJvPgph%^YUBVw9VTHep?R+KQL$waDV<{YP60G^*p!Q?D@H~+{Ch%U+ zQt-okJGYV_P09poAhrzx4CE~wJbAF*wX7tYt$~Rfu{;WBAkwY~1i}V+PvR$BnQ7_d zGZ;AIoj;%J4+&rT07WEp-8*6$-$;ub6Q=6MZ)A zJ5e!7P7Z#4QaonsL+4)hMrqYo9A)3z$>CG!+afNjw{Kr+En}lKkJH3*)&Tzi)0FzO z%%Sa5#7H{)w#W#+*(J7f&c^Y|y36j)Cyi7ri&@;^L)Y*hD(WamnxL$2EVGQ~keDEF zM7@!Bq4Vd2pB;<-5xn-C_+2ucZME~%;e$iy?Qg^`s{5LS;YZox8kwXC~%{C$LRQuL;V3g#D2deVo$A>fgVs zS9@}k!tssX#lM1aBVjTDPeci@(}0s*(w?fu6?^EpVz&JUrpnb$IXiOd*< zpsTmMms!hMA?CA7TCA0#YpTr2zap4(qr^A5Ab9&#(yfE}1$2G67>=%*uSuI4(?Gqn;;;=HRRTilxOft=`wG4<7AL2k$ipO=Baw`h9q0F7~KbGDkxJ6_SMKouI z^wZLE!JUZzh22w*%3KQECuRkopCNxb1gbL($3WHs8Lm;U))uO>-LClM7*&n8dlU5k ztSUPG3ohw+-s0*Xw^Z_it4rnQ`KDSM$gn-Lfd*OoW^0m0HHp1w6PuHo5T6|0z)HZ! zMj8}4Vo;AS$)cj$rF*XRIxv9p|6FE;x@2N&_`hs*C)4LcZC9{itK1hKsZ*A07s*+mANY_}gU;}E z(<<(0Ps0Tui3zJLSlP z@PP_UY=&Bq(LJ20pFW-vv$E*Ti_)!1T^Z`JlZonHmuuAuR#&I|1Bc~w%lbhOkT@wJ|KdGVHaMi=I9sk|O1T zclL{Pe_xUitXHbW=e;WVusdE?=c(ey((CKJhpr7cfD=p^ADSJ-2)?Rt;X$7_W=#lr z*G@JgP7y=Ys$V=k+Y~S8LYwVN=|v%(f06@|xWgGyq~*qL6YAD7%VM_U(j{c)@+1zh zHkwq=JUNk8kG0*w6OYPvzbfq>&xQGLt5J2;`qYEnMYlzbY2m_K3a1r`IoNUtnlTly z@DY&;W8;<4{M6&r_#}%L3zQ1X&kOE(LC#9#&U_vnj<*x3XOCS(^SQZ1B@660dhjcm zsNVl9FUhF~Hq+L5VwA3AnKne^O-M}3kT*7M^)ONDgU@pRR5Vd%=m(9CS*}10@F-Qx<%bW8*XJem8Ol(5*Spc8 zxzllj8}tRiKA56zcnM$D9IK4usX#cHcKCET7+t7PjW78pL>MwCc$Kj{Ie7SQ=>GXdi5*8ua^zl%x zH=M=&nYT|)`xBnVvB;P8cD&`P*QNje=gA=T!G_Z^Z$$gwxl|q{>N?PXHKREh>_QLB zx7%pe=iJvlc#c0l8Y0uwU0=HjPzORp(!&3$^!p^Eb7+pBQ0oNUJKkVTyZ^9AvpKS% zZDSF+{={~P0{Z>WxF}xwb9;!*hKS~Lb2OfP{=abxRem*h5zfo2b;;2kD#btkk@Sgb zHF>I^PQA*zpF7Wa(!}Yun_euDnNty=L1oPoK16G%KH>G^S}mo>J@C>os^h928s-~n zO2XRcQO9e{f=fZ+=2s6+Z5qOe6u*wTs%`Hmyc{%5U&I;a5fqA)klIjqPKVy(msq<- zd5Tx^1iJc;xEq#7gdWkDc`TuoMKwO)o#U9Xf)Ld>m-EO1Ckh4KS_g0A)f;&X&r+bx zr~xbk{Skk4!8Xk9|r z)NwX|H%2k^JXq~G;iGpxmYG~yf@=+M&7@bmoGL1X*N^fQ(mBUT!GLn`Oy%b}z{q~l z&DR7=02{lWI)>XhS6vF_H9G7ufhr1uv5Ck^zC*}$Kd>a8U>A%h58C;wW1qy)Zr*|$yHVIw zK6$BUzZ|{oGN?k^ns?zQ8Zb|~@dyF|AG}xWgNSd9&7)CFwnjTB)uD-5C^=^a_g<9S zla%Maj2frs*f+<95+RgC01Jl}$+*|>h^elF%1FHJ;EIl^Lt|))u5sr3?uC@hl$-iu z3s@^y$-ohlwDp6XsR+R!CF4x6CXIgen(*w~D&m6Ed*o5h%lv>jYCr}7Ec_sdss{w+E3HEz&^vfiBJT0EdZNc}F z?76gOI=hSA*z%KPa=N8Pgiw`*f}VxeH8ZtQhK1^Q0DK z)L>D8-CjnCZCn)W++;V=+9|Af4R_ijgAHx=%PHugETT)_h(&btemg)zPRVR_^!F}$ U`2o9%?s>o-7aj`o(7qA>39Xu=m;e9( delta 934 zcmY*YeP~lx6wf*LB~4=be2uYnHN20O4Am7ij%ALRBkV98@2V4a)X+r>7D%I2lUM3f_LjvZ z&7N3#W}}=*8@ATt4a%`2x}7|7%hSIGKeO9@>@n=vaDR=Ry?uM39iKkbOx79UlbH`) zeCJJg>ZGB!p+p1y;O4DO5HBZVH8fIs8)}E6UQV_`N+&A|24CL*n^5LH2*_f-mP{vj zIj|W@9 zOCL9ZoA65*nuVtHJD~A!F9gb1NeT%v&*35&UGJiili(8_j@|P6wN=nAD?V8;@87D- zy=l)?jM4sY#9RE}Tezdk>{Tx%-@qW{5nNRK71NX+RQO#dz;M#4({NB0m;2P+`vS7LS;5``8IR6k#_>ZHJ zDX=*G1TKhw3abANm8?I5Opp>5hUKGCgSS-TQC&vwX=HpV{1mgrBDz0;I$QPlxSpbW zMTpGRiq@?;#le6Qq{M z5wd<)S|+w(n?||ks8jMgXyH8_c*sSua?#3#G+tRMt($e6mAEM|Yrv3Of6zHMh-Yz@ zs#cEr-P}2Z`vfaHmz + media_count + + NSStringLocalizedFormatKey + %#@MEDIA@ + MEDIA + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Load %d media item + other + Load %d media items + + + viewer_count + + NSStringLocalizedFormatKey + %#@VIEWERS@ + VIEWERS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + viewer + other + viewers + + follow_pack_user_count NSStringLocalizedFormatKey @@ -98,22 +130,6 @@ Imports - media_count - - NSStringLocalizedFormatKey - %#@MEDIA@ - MEDIA - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - media item - other - media items - - notes_from_three_and_others NSStringLocalizedFormatKey @@ -386,6 +402,22 @@ %d Words + read_time + + NSStringLocalizedFormatKey + %#@MINUTES@ + MINUTES + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %d min read + other + %d min read + + zap_notification_no_message NSStringLocalizedFormatKey diff --git a/damus/en-US.xcloc/Source Contents/highlighter action extension/InfoPlist.xcstrings b/damus/en-US.xcloc/Source Contents/highlighter action extension/InfoPlist.xcstrings index a13682fd..82a16ad6 100644 --- a/damus/en-US.xcloc/Source Contents/highlighter action extension/InfoPlist.xcstrings +++ b/damus/en-US.xcloc/Source Contents/highlighter action extension/InfoPlist.xcstrings @@ -38,5 +38,5 @@ } } }, - "version" : "1.0" + "version" : "1.1" } \ No newline at end of file diff --git a/damus/en-US.xcloc/contents.json b/damus/en-US.xcloc/contents.json index cff77163..7d960203 100644 --- a/damus/en-US.xcloc/contents.json +++ b/damus/en-US.xcloc/contents.json @@ -3,10 +3,10 @@ "project" : "damus.xcodeproj", "targetLocale" : "en-US", "toolInfo" : { - "toolBuildNumber" : "16F6", + "toolBuildNumber" : "17C529", "toolID" : "com.apple.dt.xcode", "toolName" : "Xcode", - "toolVersion" : "16.4" + "toolVersion" : "26.3" }, "version" : "1.0" } \ No newline at end of file diff --git a/damusTests/LocalizationUtilTests.swift b/damusTests/LocalizationUtilTests.swift index 0dc63c4c..6c213995 100644 --- a/damusTests/LocalizationUtilTests.swift +++ b/damusTests/LocalizationUtilTests.swift @@ -20,15 +20,17 @@ final class LocalizationUtilTests: XCTestCase { ["following_count", "Following", "Following", "Following"], ["hellthread_notifications_disabled", "Hide notifications that tag more than 0 profiles", "Hide notifications that tag more than 1 profile", "Hide notifications that tag more than 2 profiles"], ["imports_count", "Imports", "Import", "Imports"], + ["media_count", "Load 0 media items", "Load 1 media item", "Load 2 media items"], ["quoted_reposts_count", "Quotes", "Quote", "Quotes"], ["reactions_count", "Reactions", "Reaction", "Reactions"], + ["read_time", "0 min read", "1 min read", "2 min read"], ["relays_count", "Relays", "Relay", "Relays"], ["reposts_count", "Reposts", "Repost", "Reposts"], ["sats", "sats", "sat", "sats"], ["users_talking_about_it", "0 users talking about it", "1 user talking about it", "2 users talking about it"], + ["viewer_count", "viewers", "viewer", "viewers"], ["word_count", "0 Words", "1 Word", "2 Words"], - ["zaps_count", "Zaps", "Zap", "Zaps"], - ["media_count", "media items", "media item", "media items"] + ["zaps_count", "Zaps", "Zap", "Zaps"] ] for key in keys {