Compare commits
43 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
d10e5a87de
|
|||
| 59211bb4fd | |||
| 6d634763c5 | |||
| 49cf56f4c2 | |||
| 98c7bf5afc | |||
| 70a7239cfd | |||
| 0e83632896 | |||
| f0df4aa218 | |||
| bb9fc6f905 | |||
| f69e0c660a | |||
| 9089246b6b | |||
| 237c939639 | |||
| 4f86361b63 | |||
| 209ad71ff3 | |||
| c728850524 | |||
| bc638f79f6 | |||
| 47a6f7ff38 | |||
| 6653798d27 | |||
| e9ea96ffb6 | |||
|
59ccde9c38
|
|||
|
f9be7b166c
|
|||
| 4f2bacfaab | |||
| 5a8b29b5cc | |||
| 679c0ac424 | |||
| 48050f5e69 | |||
| b5c967e161 | |||
| 715d4aa35d | |||
| 4b54278378 | |||
| 6e700e5726 | |||
| 18ad113198 | |||
| 7415671900 | |||
| d5b6d935e8 | |||
| 543fd67f35 | |||
| c24689d3ef | |||
| bf7120dc08 | |||
| dbe938ad9b | |||
| 289d55b918 | |||
| 771fa845e3 | |||
| 5f1545b86a | |||
| fe444228e6 | |||
| 10596ddb09 | |||
| 989684cd37 | |||
| 9ab03034a2 |
+45
-2
@@ -1,3 +1,48 @@
|
||||
## [1.0.0-15] - 2023-02-10
|
||||
|
||||
### Added
|
||||
|
||||
- Relay Filtering (William Casarin)
|
||||
- Japanese translations (Terry Yiu)
|
||||
- Add password autofill on account login and creation (Terry Yiu)
|
||||
- Show if relay is paid (William Casarin)
|
||||
- Add "Follows You" indicator on profile (William Casarin)
|
||||
- Add screen to select individual relays when posting/broadcasting (Andrii Sievrikov)
|
||||
- Relay Detail View (Joel Klabo)
|
||||
- Warn when attempting to post an nsec key (Terry Yiu)
|
||||
- DeepL translation integration (Terry Yiu)
|
||||
- Use local authentication (faceid) to access private key (Andrii Sievrikov)
|
||||
- Add accessibility labels to action bar (Bryan Montz)
|
||||
- Copy invoice button (Joel Klabo)
|
||||
- Receive Lightning Zaps (William Casarin)
|
||||
- Allow text selection in bio (Suhail Saqan)
|
||||
|
||||
|
||||
### Changed
|
||||
|
||||
- Show "Follow Back" button on profile page (William Casarin)
|
||||
- When on your profile page, open relay view instead for your own relays (Terry Yiu)
|
||||
- Updated QR code view, include profile image, etc (ericholguin)
|
||||
- Clicking relay numbers now goes to relay config (radixrat)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Load zaps, likes and reposts when you open a thread (William Casarin)
|
||||
- Fix bug where sidebar navigation fails to pop when switching timelines (William Casarin)
|
||||
- Use lnaddress before lnurl for tip addresses to avoid Anigma scamming (William Casarin)
|
||||
- Fix sidebar navigation bugs (OlegAba)
|
||||
- Fix issue where navigation fails pop to root when switching timelines (William Casarin)
|
||||
- Make @ mentions case insensitive (William Casarin)
|
||||
- Fix some lnurls not getting decoded properly (William Casarin)
|
||||
- Hide incoming DMs from blocked users (William Casarin)
|
||||
- Hide blocked users from search results (William Casarin)
|
||||
- Fix Cash App invoice payments (Rob Seward)
|
||||
- DM Padding (OlegAba)
|
||||
- Check for broken lnurls (William Casarin)
|
||||
|
||||
|
||||
|
||||
[1.0.0-15]: https://github.com/damus-io/damus/releases/tag/v1.0.0-15
|
||||
## [1.0.0-13] - 2023-01-30
|
||||
|
||||
### Added
|
||||
@@ -514,5 +559,3 @@
|
||||
|
||||
[0.1.2]: https://github.com/damus-io/damus/releases/tag/v0.1.2
|
||||
|
||||
|
||||
|
||||
|
||||
+9
-2
@@ -26,6 +26,10 @@ static inline int is_boundary(char c) {
|
||||
return !isalnum(c);
|
||||
}
|
||||
|
||||
static inline int is_invalid_url_ending(char c) {
|
||||
return c == '!' || c == '?' || c == ')' || c == '.' || c == ',' || c == ';';
|
||||
}
|
||||
|
||||
static void make_cursor(struct cursor *c, const u8 *content, size_t len)
|
||||
{
|
||||
c->start = content;
|
||||
@@ -55,8 +59,8 @@ static int consume_until_whitespace(struct cursor *cur, int or_end) {
|
||||
while (cur->p < cur->end) {
|
||||
c = *cur->p;
|
||||
|
||||
if (is_whitespace(c) && consumedAtLeastOne)
|
||||
return 1;
|
||||
if (is_whitespace(c))
|
||||
return consumedAtLeastOne;
|
||||
|
||||
cur->p++;
|
||||
consumedAtLeastOne = true;
|
||||
@@ -221,6 +225,9 @@ static int parse_url(struct cursor *cur, struct block *block) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// strip any unwanted characters
|
||||
while(is_invalid_url_ending(peek_char(cur, -1))) cur->p--;
|
||||
|
||||
block->type = BLOCK_URL;
|
||||
block->block.str.start = (const char *)start;
|
||||
block->block.str.end = (const char *)cur->p;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
3AA247FD297E3CFF0090C62D /* RepostsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA247FC297E3CFF0090C62D /* RepostsModel.swift */; };
|
||||
3AA247FF297E3D900090C62D /* RepostsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA247FE297E3D900090C62D /* RepostsView.swift */; };
|
||||
3AA24802297E3DC20090C62D /* RepostView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA24801297E3DC20090C62D /* RepostView.swift */; };
|
||||
3AA59D1D2999B0400061C48E /* DraftsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA59D1C2999B0400061C48E /* DraftsModel.swift */; };
|
||||
3AAA95CA298DF87B00F3D526 /* TranslationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAA95C9298DF87B00F3D526 /* TranslationService.swift */; };
|
||||
3AAA95CC298E07E900F3D526 /* DeepLPlan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAA95CB298E07E900F3D526 /* DeepLPlan.swift */; };
|
||||
3AB72AB9298ECF30004BB58C /* Translator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AB72AB8298ECF30004BB58C /* Translator.swift */; };
|
||||
@@ -31,7 +32,6 @@
|
||||
4C0A3F8F280F640A000448DE /* ThreadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F8E280F640A000448DE /* ThreadModel.swift */; };
|
||||
4C0A3F91280F6528000448DE /* ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F90280F6528000448DE /* ChatView.swift */; };
|
||||
4C0A3F93280F66F5000448DE /* ReplyMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F92280F66F5000448DE /* ReplyMap.swift */; };
|
||||
4C0A3F97280F8E02000448DE /* ThreadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F96280F8E02000448DE /* ThreadView.swift */; };
|
||||
4C216F32286E388800040376 /* DMChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C216F31286E388800040376 /* DMChatView.swift */; };
|
||||
4C216F34286F5ACD00040376 /* DMView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C216F33286F5ACD00040376 /* DMView.swift */; };
|
||||
4C216F362870A9A700040376 /* InputDismissKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C216F352870A9A700040376 /* InputDismissKeyboard.swift */; };
|
||||
@@ -168,6 +168,14 @@
|
||||
4CE6DF0427F7A08200C66700 /* damusUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE6DF0327F7A08200C66700 /* damusUITestsLaunchTests.swift */; };
|
||||
4CE6DF1227F7A2B300C66700 /* Starscream in Frameworks */ = {isa = PBXBuildFile; productRef = 4CE6DF1127F7A2B300C66700 /* Starscream */; };
|
||||
4CE6DF1627F8DEBF00C66700 /* RelayConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE6DF1527F8DEBF00C66700 /* RelayConnection.swift */; };
|
||||
4CE8794829941DA700F758CC /* RelayFilters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8794729941DA700F758CC /* RelayFilters.swift */; };
|
||||
4CE8794C2995B59E00F758CC /* RelayMetadatas.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8794B2995B59E00F758CC /* RelayMetadatas.swift */; };
|
||||
4CE8794E2996B16A00F758CC /* RelayToggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8794D2996B16A00F758CC /* RelayToggle.swift */; };
|
||||
4CE879502996B2BD00F758CC /* RelayStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8794F2996B2BD00F758CC /* RelayStatus.swift */; };
|
||||
4CE879522996B68900F758CC /* RelayType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879512996B68900F758CC /* RelayType.swift */; };
|
||||
4CE879552996BAB900F758CC /* RelayPaidDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879542996BAB900F758CC /* RelayPaidDetail.swift */; };
|
||||
4CE879582996C45300F758CC /* ZapsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879572996C45300F758CC /* ZapsView.swift */; };
|
||||
4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8795A2996C47A00F758CC /* ZapsModel.swift */; };
|
||||
4CEE2AED2805B22500AB5EEF /* NostrRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AEC2805B22500AB5EEF /* NostrRequest.swift */; };
|
||||
4CEE2AF1280B216B00AB5EEF /* EventDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */; };
|
||||
4CEE2AF3280B25C500AB5EEF /* ProfilePicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF2280B25C500AB5EEF /* ProfilePicView.swift */; };
|
||||
@@ -193,6 +201,7 @@
|
||||
5C513FBA297F72980072348F /* CustomPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C513FB9297F72980072348F /* CustomPicker.swift */; };
|
||||
5C513FCC2984ACA60072348F /* QRCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C513FCB2984ACA60072348F /* QRCodeView.swift */; };
|
||||
6439E014296790CF0020672B /* ProfileZoomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6439E013296790CF0020672B /* ProfileZoomView.swift */; };
|
||||
643EA5C8296B764E005081BB /* RelayFilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643EA5C7296B764E005081BB /* RelayFilterView.swift */; };
|
||||
647D9A8D2968520300A295DE /* SideMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 647D9A8C2968520300A295DE /* SideMenuView.swift */; };
|
||||
64FBD06F296255C400D9D3B2 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64FBD06E296255C400D9D3B2 /* Theme.swift */; };
|
||||
6C7DE41F2955169800E66263 /* Vault in Frameworks */ = {isa = PBXBuildFile; productRef = 6C7DE41E2955169800E66263 /* Vault */; };
|
||||
@@ -247,6 +256,9 @@
|
||||
3A5CAE1D298DC0DB00B5334F /* zh-CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-CN"; path = "zh-CN.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
||||
3A5CAE1E298DC0DB00B5334F /* zh-CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-CN"; path = "zh-CN.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
3A5CAE1F298DC0DB00B5334F /* zh-CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-CN"; path = "zh-CN.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
||||
3A66D927299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
3A66D928299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
3A66D929299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ja; path = ja.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||
3A929C20297F2CF80090925E /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "it-IT.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
||||
3A929C21297F2CF80090925E /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "it-IT.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
3A929C22297F2CF80090925E /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "it-IT"; path = "it-IT.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
||||
@@ -259,6 +271,7 @@
|
||||
3AA247FC297E3CFF0090C62D /* RepostsModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RepostsModel.swift; sourceTree = "<group>"; };
|
||||
3AA247FE297E3D900090C62D /* RepostsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostsView.swift; sourceTree = "<group>"; };
|
||||
3AA24801297E3DC20090C62D /* RepostView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostView.swift; sourceTree = "<group>"; };
|
||||
3AA59D1C2999B0400061C48E /* DraftsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DraftsModel.swift; sourceTree = "<group>"; };
|
||||
3AAA95C9298DF87B00F3D526 /* TranslationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TranslationService.swift; sourceTree = "<group>"; };
|
||||
3AAA95CB298E07E900F3D526 /* DeepLPlan.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLPlan.swift; sourceTree = "<group>"; };
|
||||
3AB5B86A2986D8A3006599D2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
@@ -289,7 +302,6 @@
|
||||
4C0A3F8E280F640A000448DE /* ThreadModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadModel.swift; sourceTree = "<group>"; };
|
||||
4C0A3F90280F6528000448DE /* ChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatView.swift; sourceTree = "<group>"; };
|
||||
4C0A3F92280F66F5000448DE /* ReplyMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyMap.swift; sourceTree = "<group>"; };
|
||||
4C0A3F96280F8E02000448DE /* ThreadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadView.swift; sourceTree = "<group>"; };
|
||||
4C216F31286E388800040376 /* DMChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DMChatView.swift; sourceTree = "<group>"; };
|
||||
4C216F33286F5ACD00040376 /* DMView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DMView.swift; sourceTree = "<group>"; };
|
||||
4C216F352870A9A700040376 /* InputDismissKeyboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputDismissKeyboard.swift; sourceTree = "<group>"; };
|
||||
@@ -458,6 +470,14 @@
|
||||
4CE6DF0127F7A08200C66700 /* damusUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = damusUITests.swift; sourceTree = "<group>"; };
|
||||
4CE6DF0327F7A08200C66700 /* damusUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = damusUITestsLaunchTests.swift; sourceTree = "<group>"; };
|
||||
4CE6DF1527F8DEBF00C66700 /* RelayConnection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayConnection.swift; sourceTree = "<group>"; };
|
||||
4CE8794729941DA700F758CC /* RelayFilters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayFilters.swift; sourceTree = "<group>"; };
|
||||
4CE8794B2995B59E00F758CC /* RelayMetadatas.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayMetadatas.swift; sourceTree = "<group>"; };
|
||||
4CE8794D2996B16A00F758CC /* RelayToggle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayToggle.swift; sourceTree = "<group>"; };
|
||||
4CE8794F2996B2BD00F758CC /* RelayStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayStatus.swift; sourceTree = "<group>"; };
|
||||
4CE879512996B68900F758CC /* RelayType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayType.swift; sourceTree = "<group>"; };
|
||||
4CE879542996BAB900F758CC /* RelayPaidDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayPaidDetail.swift; sourceTree = "<group>"; };
|
||||
4CE879572996C45300F758CC /* ZapsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapsView.swift; sourceTree = "<group>"; };
|
||||
4CE8795A2996C47A00F758CC /* ZapsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapsModel.swift; sourceTree = "<group>"; };
|
||||
4CEE2AE72804F57C00AB5EEF /* libsecp256k1.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libsecp256k1.a; sourceTree = "<group>"; };
|
||||
4CEE2AEC2805B22500AB5EEF /* NostrRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrRequest.swift; sourceTree = "<group>"; };
|
||||
4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDetailView.swift; sourceTree = "<group>"; };
|
||||
@@ -484,6 +504,7 @@
|
||||
5C513FB9297F72980072348F /* CustomPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPicker.swift; sourceTree = "<group>"; };
|
||||
5C513FCB2984ACA60072348F /* QRCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeView.swift; sourceTree = "<group>"; };
|
||||
6439E013296790CF0020672B /* ProfileZoomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileZoomView.swift; sourceTree = "<group>"; };
|
||||
643EA5C7296B764E005081BB /* RelayFilterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayFilterView.swift; sourceTree = "<group>"; };
|
||||
647D9A8C2968520300A295DE /* SideMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideMenuView.swift; sourceTree = "<group>"; };
|
||||
64FBD06E296255C400D9D3B2 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = "<group>"; };
|
||||
7C45AE70297353390031D7BC /* KFImageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KFImageModel.swift; sourceTree = "<group>"; };
|
||||
@@ -640,6 +661,8 @@
|
||||
3AE45AF5297BB2E700C1D842 /* LibreTranslateServer.swift */,
|
||||
3AAA95C9298DF87B00F3D526 /* TranslationService.swift */,
|
||||
3AAA95CB298E07E900F3D526 /* DeepLPlan.swift */,
|
||||
4CE8795A2996C47A00F758CC /* ZapsModel.swift */,
|
||||
3AA59D1C2999B0400061C48E /* DraftsModel.swift */,
|
||||
);
|
||||
path = Models;
|
||||
sourceTree = "<group>";
|
||||
@@ -647,6 +670,7 @@
|
||||
4C75EFA227FA576C0006080F /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE879562996C44A00F758CC /* Zaps */,
|
||||
4CB9D4A52992D01900A9A7E4 /* Profile */,
|
||||
4CAAD8AE29888A9B00060CEA /* Relays */,
|
||||
4CF0ABF42985CD4200D66079 /* Posting */,
|
||||
@@ -692,7 +716,6 @@
|
||||
BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */,
|
||||
4C3AC7A02835A81400E1F516 /* SetupView.swift */,
|
||||
E9E4ED0A295867B900DD7078 /* ThreadV2View.swift */,
|
||||
4C0A3F96280F8E02000448DE /* ThreadView.swift */,
|
||||
4CA2EF9F280E37AC0044ACD8 /* TimelineView.swift */,
|
||||
4CB55EF4295E679D007FD187 /* UserRelaysView.swift */,
|
||||
647D9A8C2968520300A295DE /* SideMenuView.swift */,
|
||||
@@ -703,6 +726,7 @@
|
||||
4CF0ABE42981EE0C00D66079 /* EULAView.swift */,
|
||||
3AA247FE297E3D900090C62D /* RepostsView.swift */,
|
||||
5C513FCB2984ACA60072348F /* QRCodeView.swift */,
|
||||
643EA5C7296B764E005081BB /* RelayFilterView.swift */,
|
||||
);
|
||||
path = Views;
|
||||
sourceTree = "<group>";
|
||||
@@ -730,6 +754,7 @@
|
||||
4C7FF7D628233637009601DB /* Util */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE879492995B58700F758CC /* Relays */,
|
||||
4CF0ABEA29844B2F00D66079 /* AnyCodable */,
|
||||
4CC7AAE6297EFA7B00430951 /* Zap.swift */,
|
||||
4C3A1D322960DB0500558C0F /* Markdown.swift */,
|
||||
@@ -762,10 +787,14 @@
|
||||
4CAAD8AE29888A9B00060CEA /* Relays */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE879532996BA0000F758CC /* Detail */,
|
||||
4CB55EF2295E5D59007FD187 /* RecommendedRelayView.swift */,
|
||||
4C06670028FC7C5900038D2A /* RelayView.swift */,
|
||||
4CAAD8AF29888AD200060CEA /* RelayConfigView.swift */,
|
||||
F7908E91298B0F0700AB113A /* RelayDetailView.swift */,
|
||||
4CE8794D2996B16A00F758CC /* RelayToggle.swift */,
|
||||
4CE8794F2996B2BD00F758CC /* RelayStatus.swift */,
|
||||
4CE879512996B68900F758CC /* RelayType.swift */,
|
||||
);
|
||||
path = Relays;
|
||||
sourceTree = "<group>";
|
||||
@@ -914,6 +943,31 @@
|
||||
path = damusUITests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE879492995B58700F758CC /* Relays */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE8794729941DA700F758CC /* RelayFilters.swift */,
|
||||
4CE8794B2995B59E00F758CC /* RelayMetadatas.swift */,
|
||||
);
|
||||
path = Relays;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE879532996BA0000F758CC /* Detail */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE879542996BAB900F758CC /* RelayPaidDetail.swift */,
|
||||
);
|
||||
path = Detail;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE879562996C44A00F758CC /* Zaps */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE879572996C45300F758CC /* ZapsView.swift */,
|
||||
);
|
||||
path = Zaps;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CEE2AE62804F57B00AB5EEF /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -1061,6 +1115,7 @@
|
||||
nl,
|
||||
"zh-CN",
|
||||
"el-GR",
|
||||
ja,
|
||||
);
|
||||
mainGroup = 4CE6DEDA27F7A08100C66700;
|
||||
packageReferences = (
|
||||
@@ -1126,6 +1181,7 @@
|
||||
4C285C86283892E7008A31F1 /* CreateAccountModel.swift in Sources */,
|
||||
4C64987C286D03E000EAE2B3 /* DirectMessagesView.swift in Sources */,
|
||||
7C902AE32981D55B002AB16E /* ZoomableScrollView.swift in Sources */,
|
||||
4CE8794C2995B59E00F758CC /* RelayMetadatas.swift in Sources */,
|
||||
4C363A8C28236B92006E126D /* PubkeyView.swift in Sources */,
|
||||
4C5C7E68284ED36500A22DF5 /* SearchHomeModel.swift in Sources */,
|
||||
4C75EFB728049D990006080F /* RelayPool.swift in Sources */,
|
||||
@@ -1187,6 +1243,7 @@
|
||||
F7908E97298B1FDF00AB113A /* NIPURLBuilder.swift in Sources */,
|
||||
4C285C8228385570008A31F1 /* CarouselView.swift in Sources */,
|
||||
4C3EA67F28FFC01D00C48A62 /* InvoiceView.swift in Sources */,
|
||||
4CE8794829941DA700F758CC /* RelayFilters.swift in Sources */,
|
||||
4CEE2B02280B39E800AB5EEF /* EventActionBar.swift in Sources */,
|
||||
4C3BEFE0281DE1ED00B3DE84 /* DamusState.swift in Sources */,
|
||||
7C45AE71297353390031D7BC /* KFImageModel.swift in Sources */,
|
||||
@@ -1203,13 +1260,16 @@
|
||||
4CC7AAF8297F1CEE00430951 /* EventProfile.swift in Sources */,
|
||||
64FBD06F296255C400D9D3B2 /* Theme.swift in Sources */,
|
||||
4C3EA64928FF597700C48A62 /* bech32.c in Sources */,
|
||||
4CE879522996B68900F758CC /* RelayType.swift in Sources */,
|
||||
4C90BD162839DB54008EE7EF /* NostrMetadata.swift in Sources */,
|
||||
4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */,
|
||||
4C3A1D3729637E0500558C0F /* PreviewCache.swift in Sources */,
|
||||
4C3EA67528FF7A5A00C48A62 /* take.c in Sources */,
|
||||
4C3AC7A12835A81400E1F516 /* SetupView.swift in Sources */,
|
||||
4C06670128FC7C5900038D2A /* RelayView.swift in Sources */,
|
||||
4C285C8C28398BC7008A31F1 /* Keys.swift in Sources */,
|
||||
4CACA9DC280C38C000D9BBE8 /* Profiles.swift in Sources */,
|
||||
4CE879582996C45300F758CC /* ZapsView.swift in Sources */,
|
||||
4C633352283D419F00B1C9C3 /* SignalModel.swift in Sources */,
|
||||
9609F058296E220800069BF3 /* BannerImageView.swift in Sources */,
|
||||
4C363A94282704FA006E126D /* Post.swift in Sources */,
|
||||
@@ -1264,11 +1324,13 @@
|
||||
4C3BEFDA281DCA1400B3DE84 /* LikeCounter.swift in Sources */,
|
||||
4CB88389296AF99A00DC99E7 /* EventDetailBar.swift in Sources */,
|
||||
4CF0ABDE2981A69500D66079 /* MutelistModel.swift in Sources */,
|
||||
4CE8794E2996B16A00F758CC /* RelayToggle.swift in Sources */,
|
||||
4C3AC79B28306D7B00E1F516 /* Contacts.swift in Sources */,
|
||||
4C3EA63D28FF52D600C48A62 /* bolt11.c in Sources */,
|
||||
4CB55EF3295E5D59007FD187 /* RecommendedRelayView.swift in Sources */,
|
||||
4CF0ABEC29844B4700D66079 /* AnyDecodable.swift in Sources */,
|
||||
4C5F9118283D88E40052CD1C /* FollowingModel.swift in Sources */,
|
||||
643EA5C8296B764E005081BB /* RelayFilterView.swift in Sources */,
|
||||
4C3EA67D28FFBBA300C48A62 /* InvoicesView.swift in Sources */,
|
||||
4C363A8E28236FE4006E126D /* NoteContentView.swift in Sources */,
|
||||
4C90BD1A283AA67F008EE7EF /* Bech32.swift in Sources */,
|
||||
@@ -1277,13 +1339,14 @@
|
||||
4CACA9D5280C31E100D9BBE8 /* ReplyView.swift in Sources */,
|
||||
F7908E92298B0F0700AB113A /* RelayDetailView.swift in Sources */,
|
||||
4C3A1D332960DB0500558C0F /* Markdown.swift in Sources */,
|
||||
4CE879552996BAB900F758CC /* RelayPaidDetail.swift in Sources */,
|
||||
4CF0ABD42980996B00D66079 /* Report.swift in Sources */,
|
||||
4C0A3F97280F8E02000448DE /* ThreadView.swift in Sources */,
|
||||
4C06670B28FDE64700038D2A /* damus.c in Sources */,
|
||||
3AAA95CC298E07E900F3D526 /* DeepLPlan.swift in Sources */,
|
||||
4FE60CDD295E1C5E00105A1F /* Wallet.swift in Sources */,
|
||||
3AA247FF297E3D900090C62D /* RepostsView.swift in Sources */,
|
||||
3AE45AF6297BB2E700C1D842 /* LibreTranslateServer.swift in Sources */,
|
||||
4CE879502996B2BD00F758CC /* RelayStatus.swift in Sources */,
|
||||
4C99737B28C92A9200E53835 /* ChatroomMetadata.swift in Sources */,
|
||||
4CC7AAF4297F18B400430951 /* ReplyDescription.swift in Sources */,
|
||||
4C75EFA427FA577B0006080F /* PostView.swift in Sources */,
|
||||
@@ -1292,6 +1355,7 @@
|
||||
4CC7AAFA297F64AC00430951 /* EventMenu.swift in Sources */,
|
||||
4C75EFBB2804A34C0006080F /* ProofOfWork.swift in Sources */,
|
||||
4C3AC7A52836987600E1F516 /* MainTabView.swift in Sources */,
|
||||
3AA59D1D2999B0400061C48E /* DraftsModel.swift in Sources */,
|
||||
3169CAED294FCCFC00EE4006 /* Constants.swift in Sources */,
|
||||
4CB9D4A72992D02B00A9A7E4 /* ProfileNameView.swift in Sources */,
|
||||
);
|
||||
@@ -1356,6 +1420,7 @@
|
||||
3A96D41C298DA94500388A2A /* nl */,
|
||||
3A5CAE1F298DC0DB00B5334F /* zh-CN */,
|
||||
3A25EF152992DA5D008ABE69 /* el-GR */,
|
||||
3A66D929299472FA008B44F4 /* ja */,
|
||||
);
|
||||
name = Localizable.stringsdict;
|
||||
sourceTree = "<group>";
|
||||
@@ -1375,6 +1440,7 @@
|
||||
3A96D41A298DA94500388A2A /* nl */,
|
||||
3A5CAE1D298DC0DB00B5334F /* zh-CN */,
|
||||
3A25EF132992DA5D008ABE69 /* el-GR */,
|
||||
3A66D927299472FA008B44F4 /* ja */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
@@ -1394,6 +1460,7 @@
|
||||
3A96D41B298DA94500388A2A /* nl */,
|
||||
3A5CAE1E298DC0DB00B5334F /* zh-CN */,
|
||||
3A25EF142992DA5D008ABE69 /* el-GR */,
|
||||
3A66D928299472FA008B44F4 /* ja */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
@@ -1529,7 +1596,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = damus/damus.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 14;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"damus/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -1552,7 +1619,7 @@
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
MARKETING_VERSION = 1.1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
@@ -1571,7 +1638,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = damus/damus.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 14;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"damus/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -1594,7 +1661,7 @@
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
MARKETING_VERSION = 1.1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/onevcat/Kingfisher",
|
||||
"state" : {
|
||||
"revision" : "017f94ccfdacabb1ae7f45b75b4217b24c06e6ac",
|
||||
"version" : "7.4.0"
|
||||
"revision" : "415b1d97fb38bda1e5a6b2dde63354720832110b",
|
||||
"version" : "7.6.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -83,9 +83,15 @@ struct TranslateView: View {
|
||||
currentLanguage = Locale.current.languageCode ?? "en"
|
||||
}
|
||||
|
||||
// Rely on Apple's NLLanguageRecognizer to tell us which language it thinks the note is in.
|
||||
let content = event.get_content(damus_state.keypair.privkey)
|
||||
noteLanguage = NLLanguageRecognizer.dominantLanguage(for: content)?.rawValue ?? currentLanguage
|
||||
// Rely on Apple's NLLanguageRecognizer to tell us which language it thinks the note is in
|
||||
// and filter on only the text portions of the content as URLs and hashtags confuse the language recognizer.
|
||||
let originalBlocks = event.blocks(damus_state.keypair.privkey)
|
||||
let originalOnlyText = originalBlocks.compactMap { $0.is_text }.joined(separator: " ")
|
||||
|
||||
// Only accept language recognition hypothesis if there's at least a 50% probability that it's accurate.
|
||||
let languageRecognizer = NLLanguageRecognizer()
|
||||
languageRecognizer.processString(originalOnlyText)
|
||||
noteLanguage = languageRecognizer.languageHypotheses(withMaximum: 1).first(where: { $0.value >= 0.5 })?.key.rawValue ?? currentLanguage
|
||||
|
||||
if let lang = noteLanguage, noteLanguage != currentLanguage {
|
||||
// If the detected dominant language is a variant, remove the variant component and just take the language part as translation services typically only supports the variant-less language.
|
||||
@@ -107,7 +113,14 @@ struct TranslateView: View {
|
||||
do {
|
||||
// If the note language is different from our language, send a translation request.
|
||||
let translator = Translator(damus_state.settings)
|
||||
translated_note = try await translator.translate(content, from: note_lang, to: currentLanguage)
|
||||
let originalContent = event.get_content(damus_state.keypair.privkey)
|
||||
translated_note = try await translator.translate(originalContent, from: note_lang, to: currentLanguage)
|
||||
|
||||
if originalContent == translated_note {
|
||||
// If the translation is the same as the original, don't bother showing it.
|
||||
noteLanguage = currentLanguage
|
||||
translated_note = nil
|
||||
}
|
||||
} catch {
|
||||
// If for whatever reason we're not able to figure out the language of the note, or translate the note, fail gracefully and do not retry. It's not the end of the world. Don't want to take down someone's translation server with an accidental denial of service attack.
|
||||
noteLanguage = currentLanguage
|
||||
@@ -117,8 +130,8 @@ struct TranslateView: View {
|
||||
|
||||
if let translated = translated_note {
|
||||
// Render translated note.
|
||||
let blocks = event.get_blocks(content: translated)
|
||||
translated_artifacts = render_blocks(blocks: blocks, profiles: damus_state.profiles, privkey: damus_state.keypair.privkey)
|
||||
let translatedBlocks = event.get_blocks(content: translated)
|
||||
translated_artifacts = render_blocks(blocks: translatedBlocks, profiles: damus_state.profiles, privkey: damus_state.keypair.privkey)
|
||||
}
|
||||
|
||||
checkingTranslationStatus = false
|
||||
|
||||
@@ -52,8 +52,8 @@ struct ZapButton: View {
|
||||
damus_state.lnurls.endpoints[target.pubkey] = payreq
|
||||
}
|
||||
|
||||
let tip_amount = get_default_tip_amount(pubkey: damus_state.pubkey)
|
||||
guard let inv = await fetch_zap_invoice(payreq, zapreq: zapreq, amount: tip_amount) else {
|
||||
let zap_amount = get_default_zap_amount(pubkey: damus_state.pubkey) ?? 1000
|
||||
guard let inv = await fetch_zap_invoice(payreq, zapreq: zapreq, sats: zap_amount) else {
|
||||
DispatchQueue.main.async {
|
||||
zapping = false
|
||||
}
|
||||
|
||||
+91
-45
@@ -7,13 +7,12 @@
|
||||
|
||||
import SwiftUI
|
||||
import Starscream
|
||||
import Kingfisher
|
||||
|
||||
var BOOTSTRAP_RELAYS = [
|
||||
"wss://relay.damus.io",
|
||||
"wss://eden.nostr.land",
|
||||
"wss://relay.snort.social",
|
||||
"wss://nostr.bitcoiner.social",
|
||||
"wss://offchain.pub",
|
||||
"wss://nos.lol",
|
||||
"wss://relay.current.fyi",
|
||||
"wss://brb.io",
|
||||
@@ -28,12 +27,16 @@ enum Sheets: Identifiable {
|
||||
case post
|
||||
case report(ReportTarget)
|
||||
case reply(NostrEvent)
|
||||
case event(NostrEvent)
|
||||
case filter
|
||||
|
||||
var id: String {
|
||||
switch self {
|
||||
case .report: return "report"
|
||||
case .post: return "post"
|
||||
case .reply(let ev): return "reply-" + ev.id
|
||||
case .event(let ev): return "event-" + ev.id
|
||||
case .filter: return "filter"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -142,6 +145,30 @@ struct ContentView: View {
|
||||
profile_open = false
|
||||
thread_open = false
|
||||
search_open = false
|
||||
isSideBarOpened = false
|
||||
}
|
||||
|
||||
var timelineNavItem: some View {
|
||||
VStack {
|
||||
switch selected_timeline {
|
||||
case .home:
|
||||
Image("damus-home")
|
||||
.resizable()
|
||||
.frame(width:30,height:30)
|
||||
.shadow(color: Color("DamusPurple"), radius: 2)
|
||||
case .dms:
|
||||
Text("DMs", comment: "Toolbar label for DMs view, where DM is the English abbreviation for Direct Message.")
|
||||
.bold()
|
||||
case .notifications:
|
||||
Text("Notifications", comment: "Toolbar label for Notifications view.")
|
||||
.bold()
|
||||
case .search:
|
||||
Text("Global", comment: "Toolbar label for Global view where posts from all connected relay servers appear.")
|
||||
.bold()
|
||||
case .none:
|
||||
Text("", comment: "Toolbar label for unknown views. This label would be displayed only if a new timeline view is added but a toolbar label was not explicitly assigned to it yet.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func MainContent(damus: DamusState) -> some View {
|
||||
@@ -163,9 +190,10 @@ struct ContentView: View {
|
||||
PostingTimelineView
|
||||
|
||||
case .notifications:
|
||||
TimelineView(events: $home.notifications, loading: $home.loading, damus: damus, show_friend_icon: true, filter: { _ in true })
|
||||
.navigationTitle(NSLocalizedString("Notifications", comment: "Navigation title for notifications."))
|
||||
|
||||
VStack(spacing: 0) {
|
||||
Divider()
|
||||
TimelineView(events: $home.notifications, loading: $home.loading, damus: damus, show_friend_icon: true, filter: { _ in true })
|
||||
}
|
||||
case .dms:
|
||||
DirectMessagesView(damus_state: damus_state!)
|
||||
.environmentObject(home.dms)
|
||||
@@ -177,24 +205,9 @@ struct ContentView: View {
|
||||
.navigationBarTitle(selected_timeline == .home ? NSLocalizedString("Home", comment: "Navigation bar title for Home view where posts and replies appear from those who the user is following.") : NSLocalizedString("Global", comment: "Navigation bar title for Global view where posts from all connected relay servers appear."), displayMode: .inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .principal) {
|
||||
switch selected_timeline {
|
||||
case .home:
|
||||
Image("damus-home")
|
||||
.resizable()
|
||||
.frame(width:30,height:30)
|
||||
.shadow(color: Color("DamusPurple"), radius: 2)
|
||||
case .dms:
|
||||
Text("DMs", comment: "Toolbar label for DMs view, where DM is the English abbreviation for Direct Message.")
|
||||
.bold()
|
||||
case .notifications:
|
||||
Text("Notifications", comment: "Toolbar label for Notifications view.")
|
||||
.bold()
|
||||
case .search:
|
||||
Text("Global", comment: "Toolbar label for Global view where posts from all connected relay servers appear.")
|
||||
.bold()
|
||||
case .none:
|
||||
Text("", comment: "Toolbar label for unknown views. This label would be displayed only if a new timeline view is added but a toolbar label was not explicitly assigned to it yet.")
|
||||
}
|
||||
timelineNavItem
|
||||
.opacity(isSideBarOpened ? 0 : 1)
|
||||
.animation(isSideBarOpened ? .none : .default, value: isSideBarOpened)
|
||||
}
|
||||
}
|
||||
.ignoresSafeArea(.keyboard)
|
||||
@@ -251,7 +264,7 @@ struct ContentView: View {
|
||||
if let damus = self.damus_state {
|
||||
NavigationView {
|
||||
ZStack {
|
||||
VStack {
|
||||
TabView { // Prevents navbar appearance change on scroll
|
||||
MainContent(damus: damus)
|
||||
.toolbar() {
|
||||
ToolbarItem(placement: .navigationBarLeading) {
|
||||
@@ -259,7 +272,10 @@ struct ContentView: View {
|
||||
isSideBarOpened.toggle()
|
||||
} label: {
|
||||
ProfilePicView(pubkey: damus_state!.pubkey, size: 32, highlight: .none, profiles: damus_state!.profiles)
|
||||
.opacity(isSideBarOpened ? 0 : 1)
|
||||
.animation(isSideBarOpened ? .none : .default, value: isSideBarOpened)
|
||||
}
|
||||
.disabled(isSideBarOpened)
|
||||
}
|
||||
|
||||
ToolbarItem(placement: .navigationBarTrailing) {
|
||||
@@ -271,19 +287,28 @@ struct ContentView: View {
|
||||
.foregroundColor(.gray)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// maybe expand this to other timelines in the future
|
||||
if selected_timeline == .search {
|
||||
Button(action: {
|
||||
//isFilterVisible.toggle()
|
||||
self.active_sheet = .filter
|
||||
}) {
|
||||
// checklist, checklist.checked, lisdt.bullet, list.bullet.circle, line.3.horizontal.decrease..., line.3.horizontail.decrease
|
||||
Label("Filter", systemImage: "line.3.horizontal.decrease")
|
||||
.foregroundColor(.gray)
|
||||
//.contentShape(Rectangle())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Color.clear
|
||||
.overlay(
|
||||
SideMenuView(damus_state: damus, isSidebarVisible: $isSideBarOpened)
|
||||
)
|
||||
.tabViewStyle(.page(indexDisplayMode: .never))
|
||||
}
|
||||
.navigationBarHidden(isSideBarOpened ? true: false) // Would prefer a different way of doing this.
|
||||
.overlay(
|
||||
SideMenuView(damus_state: damus, isSidebarVisible: $isSideBarOpened.animation())
|
||||
)
|
||||
}
|
||||
.navigationViewStyle(.stack)
|
||||
|
||||
@@ -293,7 +318,6 @@ struct ContentView: View {
|
||||
}
|
||||
.onAppear() {
|
||||
self.connect()
|
||||
//KingfisherManager.shared.cache.clearDiskCache()
|
||||
setup_notifications()
|
||||
}
|
||||
.sheet(item: $active_sheet) { item in
|
||||
@@ -304,6 +328,17 @@ struct ContentView: View {
|
||||
PostView(replying_to: nil, references: [], damus_state: damus_state!)
|
||||
case .reply(let event):
|
||||
ReplyView(replying_to: event, damus: damus_state!)
|
||||
case .event(let event):
|
||||
EventDetailView()
|
||||
case .filter:
|
||||
let timeline = selected_timeline ?? .home
|
||||
if #available(iOS 16.0, *) {
|
||||
RelayFilterView(state: damus_state!, timeline: timeline)
|
||||
.presentationDetents([.height(550)])
|
||||
.presentationDragIndicator(.visible)
|
||||
} else {
|
||||
RelayFilterView(state: damus_state!, timeline: timeline)
|
||||
}
|
||||
}
|
||||
}
|
||||
.onOpenURL { url in
|
||||
@@ -422,6 +457,8 @@ struct ContentView: View {
|
||||
let post_res = obj.object as! NostrPostResult
|
||||
switch post_res {
|
||||
case .post(let post):
|
||||
//let post = tup.0
|
||||
//let to_relays = tup.1
|
||||
print("post \(post.content)")
|
||||
let new_ev = post_to_event(post: post, privkey: privkey, pubkey: pubkey)
|
||||
self.damus_state?.pool.send(.event(new_ev))
|
||||
@@ -552,24 +589,33 @@ struct ContentView: View {
|
||||
|
||||
func connect() {
|
||||
let pool = RelayPool()
|
||||
let metadatas = RelayMetadatas()
|
||||
let relay_filters = RelayFilters(our_pubkey: pubkey)
|
||||
|
||||
let new_relay_filters = load_relay_filters(pubkey) == nil
|
||||
for relay in BOOTSTRAP_RELAYS {
|
||||
add_relay(pool, relay)
|
||||
if let url = URL(string: relay) {
|
||||
add_new_relay(relay_filters: relay_filters, metadatas: metadatas, pool: pool, url: url, info: .rw, new_relay_filters: new_relay_filters)
|
||||
}
|
||||
}
|
||||
|
||||
pool.register_handler(sub_id: sub_id, handler: home.handle_event)
|
||||
|
||||
self.damus_state = DamusState(pool: pool, keypair: keypair,
|
||||
likes: EventCounter(our_pubkey: pubkey),
|
||||
boosts: EventCounter(our_pubkey: pubkey),
|
||||
contacts: Contacts(our_pubkey: pubkey),
|
||||
tips: TipCounter(our_pubkey: pubkey),
|
||||
profiles: Profiles(),
|
||||
dms: home.dms,
|
||||
previews: PreviewCache(),
|
||||
zaps: Zaps(our_pubkey: pubkey),
|
||||
lnurls: LNUrls(),
|
||||
settings: UserSettingsStore()
|
||||
self.damus_state = DamusState(pool: pool,
|
||||
keypair: keypair,
|
||||
likes: EventCounter(our_pubkey: pubkey),
|
||||
boosts: EventCounter(our_pubkey: pubkey),
|
||||
contacts: Contacts(our_pubkey: pubkey),
|
||||
tips: TipCounter(our_pubkey: pubkey),
|
||||
profiles: Profiles(),
|
||||
dms: home.dms,
|
||||
previews: PreviewCache(),
|
||||
zaps: Zaps(our_pubkey: pubkey),
|
||||
lnurls: LNUrls(),
|
||||
settings: UserSettingsStore(),
|
||||
relay_filters: relay_filters,
|
||||
relay_metadata: metadatas,
|
||||
drafts: Drafts()
|
||||
)
|
||||
home.damus_state = self.damus_state!
|
||||
|
||||
|
||||
@@ -31,6 +31,17 @@ class ActionBarModel: ObservableObject {
|
||||
self.our_zap = our_zap
|
||||
}
|
||||
|
||||
func update(damus: DamusState, evid: String) {
|
||||
self.likes = damus.likes.counts[evid] ?? 0
|
||||
self.boosts = damus.boosts.counts[evid] ?? 0
|
||||
self.zaps = damus.zaps.event_counts[evid] ?? 0
|
||||
self.zap_total = damus.zaps.event_totals[evid] ?? 0
|
||||
self.our_like = damus.likes.our_events[evid]
|
||||
self.our_boost = damus.boosts.our_events[evid]
|
||||
self.our_zap = damus.zaps.our_zaps[evid]?.first
|
||||
self.objectWillChange.send()
|
||||
}
|
||||
|
||||
var is_empty: Bool {
|
||||
return likes == 0 && boosts == 0 && zaps == 0
|
||||
}
|
||||
|
||||
@@ -21,6 +21,9 @@ struct DamusState {
|
||||
let zaps: Zaps
|
||||
let lnurls: LNUrls
|
||||
let settings: UserSettingsStore
|
||||
let relay_filters: RelayFilters
|
||||
let relay_metadata: RelayMetadatas
|
||||
let drafts: Drafts
|
||||
|
||||
var pubkey: String {
|
||||
return keypair.pubkey
|
||||
@@ -32,6 +35,6 @@ struct DamusState {
|
||||
|
||||
|
||||
static var empty: DamusState {
|
||||
return DamusState.init(pool: RelayPool(), keypair: Keypair(pubkey: "", privkey: ""), likes: EventCounter(our_pubkey: ""), boosts: EventCounter(our_pubkey: ""), contacts: Contacts(our_pubkey: ""), tips: TipCounter(our_pubkey: ""), profiles: Profiles(), dms: DirectMessagesModel(our_pubkey: ""), previews: PreviewCache(), zaps: Zaps(our_pubkey: ""), lnurls: LNUrls(), settings: UserSettingsStore())
|
||||
return DamusState.init(pool: RelayPool(), keypair: Keypair(pubkey: "", privkey: ""), likes: EventCounter(our_pubkey: ""), boosts: EventCounter(our_pubkey: ""), contacts: Contacts(our_pubkey: ""), tips: TipCounter(our_pubkey: ""), profiles: Profiles(), dms: DirectMessagesModel(our_pubkey: ""), previews: PreviewCache(), zaps: Zaps(our_pubkey: ""), lnurls: LNUrls(), settings: UserSettingsStore(), relay_filters: RelayFilters(our_pubkey: ""), relay_metadata: RelayMetadatas(), drafts: Drafts())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ class DirectMessageModel: ObservableObject {
|
||||
is_request = determine_is_request()
|
||||
}
|
||||
}
|
||||
|
||||
@Published var draft: String
|
||||
|
||||
var is_request: Bool
|
||||
var our_pubkey: String
|
||||
@@ -31,11 +33,13 @@ class DirectMessageModel: ObservableObject {
|
||||
self.events = events
|
||||
self.is_request = false
|
||||
self.our_pubkey = our_pubkey
|
||||
self.draft = ""
|
||||
}
|
||||
|
||||
init(our_pubkey: String) {
|
||||
self.events = []
|
||||
self.is_request = false
|
||||
self.our_pubkey = our_pubkey
|
||||
self.draft = ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
//
|
||||
// DraftsModel.swift
|
||||
// damus
|
||||
//
|
||||
// Created by Terry Yiu on 2/12/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class Drafts: ObservableObject {
|
||||
@Published var post: String = ""
|
||||
@Published var replies: [NostrEvent: String] = [:]
|
||||
}
|
||||
@@ -51,11 +51,7 @@ class FollowersModel: ObservableObject {
|
||||
if has_contact.contains(ev.pubkey) {
|
||||
return
|
||||
}
|
||||
process_contact_event(
|
||||
pool: damus_state.pool,
|
||||
contacts: damus_state.contacts,
|
||||
pubkey: damus_state.pubkey, ev: ev
|
||||
)
|
||||
process_contact_event(state: damus_state, ev: ev)
|
||||
contacts?.append(ev.pubkey)
|
||||
has_contact.insert(ev.pubkey)
|
||||
}
|
||||
|
||||
@@ -117,13 +117,17 @@ class HomeModel: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
func handle_zap_event_with_zapper(_ ev: NostrEvent, zapper: String) {
|
||||
func handle_zap_event_with_zapper(_ ev: NostrEvent, our_pubkey: String, zapper: String) {
|
||||
guard let zap = Zap.from_zap_event(zap_ev: ev, zapper: zapper) else {
|
||||
return
|
||||
}
|
||||
|
||||
damus_state.zaps.add_zap(zap: zap)
|
||||
|
||||
guard zap.target.pubkey == our_pubkey else {
|
||||
return
|
||||
}
|
||||
|
||||
if !insert_uniq_sorted_event(events: ¬ifications, new_ev: ev, cmp: { $0.created_at > $1.created_at }) {
|
||||
return
|
||||
}
|
||||
@@ -138,16 +142,12 @@ class HomeModel: ObservableObject {
|
||||
return
|
||||
}
|
||||
|
||||
guard ptag == damus_state.pubkey else {
|
||||
if let local_zapper = damus_state.profiles.lookup_zapper(pubkey: ptag) {
|
||||
handle_zap_event_with_zapper(ev, our_pubkey: damus_state.pubkey, zapper: local_zapper)
|
||||
return
|
||||
}
|
||||
|
||||
if let local_zapper = damus_state.profiles.lookup_zapper(pubkey: damus_state.pubkey) {
|
||||
handle_zap_event_with_zapper(ev, zapper: local_zapper)
|
||||
return
|
||||
}
|
||||
|
||||
guard let profile = damus_state.profiles.lookup(id: damus_state.pubkey) else {
|
||||
guard let profile = damus_state.profiles.lookup(id: ptag) else {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -161,7 +161,8 @@ class HomeModel: ObservableObject {
|
||||
}
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.handle_zap_event_with_zapper(ev, zapper: zapper)
|
||||
self.damus_state.profiles.zappers[ptag] = zapper
|
||||
self.handle_zap_event_with_zapper(ev, our_pubkey: self.damus_state.pubkey, zapper: zapper)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,7 +194,7 @@ class HomeModel: ObservableObject {
|
||||
}
|
||||
|
||||
func handle_contact_event(sub_id: String, relay_id: String, ev: NostrEvent) {
|
||||
process_contact_event(pool: damus_state.pool, contacts: damus_state.contacts, pubkey: damus_state.pubkey, ev: ev)
|
||||
process_contact_event(state: self.damus_state, ev: ev)
|
||||
|
||||
if sub_id == init_subid {
|
||||
pool.send(.unsubscribe(init_subid), to: [relay_id])
|
||||
@@ -229,6 +230,7 @@ class HomeModel: ObservableObject {
|
||||
case .success(let n):
|
||||
let boosted = Counted(event: ev, id: e, total: n)
|
||||
notify(.boosted, boosted)
|
||||
notify(.update_stats, e)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,6 +248,7 @@ class HomeModel: ObservableObject {
|
||||
case .success(let n):
|
||||
let liked = Counted(event: ev, id: e.ref_id, total: n)
|
||||
notify(.liked, liked)
|
||||
notify(.update_stats, e.ref_id)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -286,7 +289,7 @@ class HomeModel: ObservableObject {
|
||||
switch ev {
|
||||
case .event(let sub_id, let ev):
|
||||
// globally handle likes
|
||||
let always_process = sub_id == notifications_subid || sub_id == contacts_subid || sub_id == home_subid || sub_id == dms_subid || sub_id == init_subid || ev.known_kind == .like || ev.known_kind == .zap || ev.known_kind == .contacts || ev.known_kind == .metadata
|
||||
let always_process = sub_id == notifications_subid || sub_id == contacts_subid || sub_id == home_subid || sub_id == dms_subid || sub_id == init_subid || ev.known_kind == .like || ev.known_kind == .boost || ev.known_kind == .zap || ev.known_kind == .contacts || ev.known_kind == .metadata
|
||||
if !always_process {
|
||||
// TODO: other views like threads might have their own sub ids, so ignore those events... or should we?
|
||||
return
|
||||
@@ -643,31 +646,31 @@ func robohash(_ pk: String) -> String {
|
||||
return "https://robohash.org/" + pk
|
||||
}
|
||||
|
||||
func load_our_stuff(pool: RelayPool, contacts: Contacts, pubkey: String, ev: NostrEvent) {
|
||||
guard ev.pubkey == pubkey else {
|
||||
func load_our_stuff(state: DamusState, ev: NostrEvent) {
|
||||
guard ev.pubkey == state.pubkey else {
|
||||
return
|
||||
}
|
||||
|
||||
// only use new stuff
|
||||
if let current_ev = contacts.event {
|
||||
if let current_ev = state.contacts.event {
|
||||
guard ev.created_at > current_ev.created_at else {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
let m_old_ev = contacts.event
|
||||
contacts.event = ev
|
||||
let m_old_ev = state.contacts.event
|
||||
state.contacts.event = ev
|
||||
|
||||
load_our_contacts(contacts: contacts, our_pubkey: pubkey, m_old_ev: m_old_ev, ev: ev)
|
||||
load_our_relays(contacts: contacts, our_pubkey: pubkey, pool: pool, m_old_ev: m_old_ev, ev: ev)
|
||||
load_our_contacts(contacts: state.contacts, our_pubkey: state.pubkey, m_old_ev: m_old_ev, ev: ev)
|
||||
load_our_relays(state: state, m_old_ev: m_old_ev, ev: ev)
|
||||
}
|
||||
|
||||
func process_contact_event(pool: RelayPool, contacts: Contacts, pubkey: String, ev: NostrEvent) {
|
||||
load_our_stuff(pool: pool, contacts: contacts, pubkey: pubkey, ev: ev)
|
||||
add_contact_if_friend(contacts: contacts, ev: ev)
|
||||
func process_contact_event(state: DamusState, ev: NostrEvent) {
|
||||
load_our_stuff(state: state, ev: ev)
|
||||
add_contact_if_friend(contacts: state.contacts, ev: ev)
|
||||
}
|
||||
|
||||
func load_our_relays(contacts: Contacts, our_pubkey: String, pool: RelayPool, m_old_ev: NostrEvent?, ev: NostrEvent) {
|
||||
func load_our_relays(state: DamusState, m_old_ev: NostrEvent?, ev: NostrEvent) {
|
||||
let bootstrap_dict: [String: RelayInfo] = [:]
|
||||
let old_decoded = m_old_ev.flatMap { decode_json_relays($0.content) } ?? BOOTSTRAP_RELAYS.reduce(into: bootstrap_dict) { (d, r) in
|
||||
d[r] = .rw
|
||||
@@ -691,14 +694,15 @@ func load_our_relays(contacts: Contacts, our_pubkey: String, pool: RelayPool, m_
|
||||
|
||||
let diff = old.symmetricDifference(new)
|
||||
|
||||
let new_relay_filters = load_relay_filters(state.pubkey) == nil
|
||||
for d in diff {
|
||||
changed = true
|
||||
if new.contains(d) {
|
||||
if let url = URL(string: d) {
|
||||
try? pool.add_relay(url, info: decoded[d] ?? .rw)
|
||||
add_new_relay(relay_filters: state.relay_filters, metadatas: state.relay_metadata, pool: state.pool, url: url, info: decoded[d] ?? .rw, new_relay_filters: new_relay_filters)
|
||||
}
|
||||
} else {
|
||||
pool.remove_relay(d)
|
||||
state.pool.remove_relay(d)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -707,6 +711,56 @@ func load_our_relays(contacts: Contacts, our_pubkey: String, pool: RelayPool, m_
|
||||
}
|
||||
}
|
||||
|
||||
func add_new_relay(relay_filters: RelayFilters, metadatas: RelayMetadatas, pool: RelayPool, url: URL, info: RelayInfo, new_relay_filters: Bool) {
|
||||
try? pool.add_relay(url, info: info)
|
||||
|
||||
let relay_id = url.absoluteString
|
||||
guard metadatas.lookup(relay_id: relay_id) == nil else {
|
||||
return
|
||||
}
|
||||
|
||||
Task.detached(priority: .background) {
|
||||
guard let meta = try? await fetch_relay_metadata(relay_id: relay_id) else {
|
||||
return
|
||||
}
|
||||
|
||||
DispatchQueue.main.async {
|
||||
metadatas.insert(relay_id: relay_id, metadata: meta)
|
||||
|
||||
// if this is the first time adding filters, we should filter non-paid relays
|
||||
if new_relay_filters && !meta.is_paid {
|
||||
relay_filters.insert(timeline: .search, relay_id: relay_id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func fetch_relay_metadata(relay_id: String) async throws -> RelayMetadata? {
|
||||
var urlString = relay_id.replacingOccurrences(of: "wss://", with: "https://")
|
||||
urlString = urlString.replacingOccurrences(of: "ws://", with: "http://")
|
||||
|
||||
guard let url = URL(string: urlString) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
var request = URLRequest(url: url)
|
||||
request.setValue("application/nostr+json", forHTTPHeaderField: "Accept")
|
||||
|
||||
var res: (Data, URLResponse)? = nil
|
||||
|
||||
res = try await URLSession.shared.data(for: request)
|
||||
|
||||
guard let data = res?.0 else {
|
||||
return nil
|
||||
}
|
||||
|
||||
let nip11 = try JSONDecoder().decode(RelayMetadata.self, from: data)
|
||||
return nip11
|
||||
}
|
||||
|
||||
func process_relay_metadata() {
|
||||
}
|
||||
|
||||
func handle_incoming_dm(contacts: Contacts, prev_events: NewEventsBits, dms: DirectMessagesModel, our_pubkey: String, ev: NostrEvent) -> NewEventsBits? {
|
||||
// hide blocked users
|
||||
guard should_show_event(contacts: contacts, ev: ev) else {
|
||||
|
||||
@@ -88,7 +88,7 @@ class ProfileModel: ObservableObject, Equatable {
|
||||
}
|
||||
|
||||
func handle_profile_contact_event(_ ev: NostrEvent) {
|
||||
process_contact_event(pool: damus.pool, contacts: damus.contacts, pubkey: damus.pubkey, ev: ev)
|
||||
process_contact_event(state: damus, ev: ev)
|
||||
|
||||
// only use new stuff
|
||||
if let current_ev = self.contacts {
|
||||
|
||||
@@ -36,7 +36,8 @@ class SearchHomeModel: ObservableObject {
|
||||
|
||||
func subscribe() {
|
||||
loading = true
|
||||
damus_state.pool.subscribe(sub_id: base_subid, filters: [get_base_filter()], handler: handle_event)
|
||||
let to_relays = determine_to_relays(pool: damus_state.pool, filters: damus_state.relay_filters)
|
||||
damus_state.pool.subscribe(sub_id: base_subid, filters: [get_base_filter()], handler: handle_event, to: to_relays)
|
||||
}
|
||||
|
||||
func unsubscribe(to: String? = nil) {
|
||||
|
||||
@@ -98,6 +98,21 @@ func event_matches_hashtag(_ ev: NostrEvent, hashtags: [String]) -> Bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func tag_is_hashtag(_ tag: [String]) -> Bool {
|
||||
// "hashtag" is deprecated, will remove in the future
|
||||
return tag.count >= 2 && (tag[0] == "hashtag" || tag[0] == "t")
|
||||
}
|
||||
|
||||
func has_hashtag(_ tags: [[String]], hashtag: String) -> Bool {
|
||||
for tag in tags {
|
||||
if tag_is_hashtag(tag) && tag[1] == hashtag {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func event_matches_filter(_ ev: NostrEvent, filter: NostrFilter) -> Bool {
|
||||
if let hashtags = filter.hashtag {
|
||||
return event_matches_hashtag(ev, hashtags: hashtags)
|
||||
|
||||
@@ -16,15 +16,22 @@ func pk_setting_key(_ pubkey: String, key: String) -> String {
|
||||
return "\(pubkey)_\(key)"
|
||||
}
|
||||
|
||||
let tip_amount_key = "default_tip_amount"
|
||||
func set_default_tip_amount(pubkey: String, amount: Int64) {
|
||||
let key = pk_setting_key(pubkey, key: tip_amount_key)
|
||||
func default_zap_setting_key(pubkey: String) -> String {
|
||||
return pk_setting_key(pubkey, key: "default_zap_amount")
|
||||
}
|
||||
|
||||
func set_default_zap_amount(pubkey: String, amount: Int) {
|
||||
let key = default_zap_setting_key(pubkey: pubkey)
|
||||
UserDefaults.standard.setValue(amount, forKey: key)
|
||||
}
|
||||
|
||||
func get_default_tip_amount(pubkey: String) -> Int64 {
|
||||
let key = "\(pubkey)_\(tip_amount_key)"
|
||||
return UserDefaults.standard.object(forKey: key) as? Int64 ?? 1000000
|
||||
func get_default_zap_amount(pubkey: String) -> Int? {
|
||||
let key = default_zap_setting_key(pubkey: pubkey)
|
||||
let amt = UserDefaults.standard.integer(forKey: key)
|
||||
if amt == 0 {
|
||||
return nil
|
||||
}
|
||||
return amt
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
//
|
||||
// ZapsModel.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2023-02-10.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class ZapsModel: ObservableObject {
|
||||
let state: DamusState
|
||||
let target: ZapTarget
|
||||
var zaps: [Zap]
|
||||
|
||||
let zaps_subid = UUID().description
|
||||
|
||||
init(state: DamusState, target: ZapTarget) {
|
||||
self.state = state
|
||||
self.target = target
|
||||
self.zaps = []
|
||||
}
|
||||
|
||||
func subscribe() {
|
||||
var filter = NostrFilter.filter_kinds([9735])
|
||||
switch target {
|
||||
case .profile(let profile_id):
|
||||
filter.pubkeys = [profile_id]
|
||||
case .note(let note_target):
|
||||
filter.referenced_ids = [note_target.note_id]
|
||||
}
|
||||
state.pool.subscribe(sub_id: zaps_subid, filters: [filter], handler: handle_event)
|
||||
}
|
||||
|
||||
func unsubscribe() {
|
||||
state.pool.unsubscribe(sub_id: zaps_subid)
|
||||
}
|
||||
|
||||
func handle_event(relay_id: String, conn_ev: NostrConnectionEvent) {
|
||||
guard case .nostr_event(let resp) = conn_ev else {
|
||||
return
|
||||
}
|
||||
|
||||
guard resp.subid == zaps_subid else {
|
||||
return
|
||||
}
|
||||
|
||||
guard case .event(_, let ev) = resp else {
|
||||
return
|
||||
}
|
||||
|
||||
guard ev.kind == 9735 else {
|
||||
return
|
||||
}
|
||||
|
||||
if let zap = state.zaps.zaps[ev.id] {
|
||||
if insert_uniq_sorted_zap(zaps: &zaps, new_zap: zap) {
|
||||
objectWillChange.send()
|
||||
}
|
||||
} else {
|
||||
guard let zapper = state.profiles.lookup_zapper(pubkey: target.pubkey) else {
|
||||
return
|
||||
}
|
||||
|
||||
guard let zap = Zap.from_zap_event(zap_ev: ev, zapper: zapper) else {
|
||||
return
|
||||
}
|
||||
|
||||
state.zaps.add_zap(zap: zap)
|
||||
|
||||
if insert_uniq_sorted_zap(zaps: &zaps, new_zap: zap) {
|
||||
objectWillChange.send()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -102,7 +102,7 @@ struct Profile: Codable {
|
||||
}
|
||||
|
||||
var lnurl: String? {
|
||||
guard let addr = lud06 ?? lud16 else {
|
||||
guard let addr = lud16 ?? lud06 else {
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,14 @@ enum RelayFlags: Int {
|
||||
case broken = 1
|
||||
}
|
||||
|
||||
struct Limitations: Codable {
|
||||
let payment_required: Bool?
|
||||
|
||||
static var empty: Limitations {
|
||||
Limitations(payment_required: nil)
|
||||
}
|
||||
}
|
||||
|
||||
struct RelayMetadata: Codable {
|
||||
let name: String?
|
||||
let description: String?
|
||||
@@ -32,6 +40,12 @@ struct RelayMetadata: Codable {
|
||||
let supported_nips: [Int]?
|
||||
let software: String?
|
||||
let version: String?
|
||||
let limitation: Limitations?
|
||||
let payments_url: String?
|
||||
|
||||
var is_paid: Bool {
|
||||
return limitation?.payment_required ?? false
|
||||
}
|
||||
}
|
||||
|
||||
class Relay: Identifiable {
|
||||
|
||||
@@ -42,6 +42,8 @@ class RelayPool {
|
||||
var relays: [Relay] = []
|
||||
var handlers: [RelayHandler] = []
|
||||
var request_queue: [QueuedRequest] = []
|
||||
var seen: Set<String> = Set()
|
||||
var counts: [String: UInt64] = [:]
|
||||
|
||||
var descriptors: [RelayDescriptor] {
|
||||
relays.map { $0.descriptor }
|
||||
@@ -149,9 +151,9 @@ class RelayPool {
|
||||
self.send(.unsubscribe(sub_id), to: to)
|
||||
}
|
||||
|
||||
func subscribe(sub_id: String, filters: [NostrFilter], handler: @escaping (String, NostrConnectionEvent) -> ()) {
|
||||
func subscribe(sub_id: String, filters: [NostrFilter], handler: @escaping (String, NostrConnectionEvent) -> (), to: [String]? = nil) {
|
||||
register_handler(sub_id: sub_id, handler: handler)
|
||||
send(.subscribe(.init(filters: filters, sub_id: sub_id)))
|
||||
send(.subscribe(.init(filters: filters, sub_id: sub_id)), to: to)
|
||||
}
|
||||
|
||||
func subscribe_to(sub_id: String, filters: [NostrFilter], to: [String]?, handler: @escaping (String, NostrConnectionEvent) -> ()) {
|
||||
@@ -241,8 +243,25 @@ class RelayPool {
|
||||
}
|
||||
}
|
||||
|
||||
func record_seen(relay_id: String, event: NostrConnectionEvent) {
|
||||
if case .nostr_event(let ev) = event {
|
||||
if case .event(_, let nev) = ev {
|
||||
let k = relay_id + nev.id
|
||||
if !seen.contains(k) {
|
||||
seen.insert(k)
|
||||
if counts[relay_id] == nil {
|
||||
counts[relay_id] = 1
|
||||
} else {
|
||||
counts[relay_id] = (counts[relay_id] ?? 0) + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func handle_event(relay_id: String, event: NostrConnectionEvent) {
|
||||
record_last_pong(relay_id: relay_id, event: event)
|
||||
record_seen(relay_id: relay_id, event: event)
|
||||
|
||||
// run req queue when we reconnect
|
||||
if case .ws_event(let ws) = event {
|
||||
|
||||
@@ -29,7 +29,7 @@ public struct DismissKeyboardOnTap: ViewModifier {
|
||||
|
||||
}
|
||||
|
||||
func end_editing() {
|
||||
public func end_editing() {
|
||||
UIApplication.shared.connectedScenes
|
||||
.filter {$0.activationState == .foregroundActive}
|
||||
.map {$0 as? UIWindowScene}
|
||||
|
||||
@@ -98,6 +98,9 @@ extension Notification.Name {
|
||||
static var deleted_account: Notification.Name {
|
||||
return Notification.Name("deleted_account")
|
||||
}
|
||||
static var update_stats: Notification.Name {
|
||||
return Notification.Name("update_stats")
|
||||
}
|
||||
}
|
||||
|
||||
func handle_notify(_ name: Notification.Name) -> NotificationCenter.Publisher {
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
//
|
||||
// RelayFilters.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2023-02-08.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct RelayFilter: Hashable {
|
||||
let timeline: Timeline
|
||||
let relay_id: String
|
||||
|
||||
init(timeline: Timeline, relay_id: String, on: Bool = false) {
|
||||
self.timeline = timeline
|
||||
self.relay_id = relay_id
|
||||
}
|
||||
}
|
||||
|
||||
class RelayFilters {
|
||||
private let our_pubkey: String
|
||||
private var disabled: Set<RelayFilter>
|
||||
|
||||
func is_filtered(timeline: Timeline, relay_id: String) -> Bool {
|
||||
let filter = RelayFilter(timeline: timeline, relay_id: relay_id)
|
||||
let contains = disabled.contains(filter)
|
||||
return contains
|
||||
}
|
||||
|
||||
func remove(timeline: Timeline, relay_id: String) {
|
||||
let filter = RelayFilter(timeline: timeline, relay_id: relay_id)
|
||||
if !disabled.contains(filter) {
|
||||
return
|
||||
}
|
||||
|
||||
disabled.remove(filter)
|
||||
save_relay_filters(our_pubkey, filters: disabled)
|
||||
}
|
||||
|
||||
func insert(timeline: Timeline, relay_id: String) {
|
||||
let filter = RelayFilter(timeline: timeline, relay_id: relay_id)
|
||||
if disabled.contains(filter) {
|
||||
return
|
||||
}
|
||||
|
||||
disabled.insert(filter)
|
||||
save_relay_filters(our_pubkey, filters: disabled)
|
||||
}
|
||||
|
||||
init(our_pubkey: String) {
|
||||
self.our_pubkey = our_pubkey
|
||||
disabled = load_relay_filters(our_pubkey) ?? Set()
|
||||
}
|
||||
}
|
||||
|
||||
func save_relay_filters(_ pubkey: String, filters: Set<RelayFilter>) {
|
||||
let key = pk_setting_key(pubkey, key: "relay_filters")
|
||||
let arr = Array(filters.map { filter in "\(filter.timeline)\t\(filter.relay_id)" })
|
||||
UserDefaults.standard.set(arr, forKey: key)
|
||||
}
|
||||
|
||||
func relay_filter_setting_key(_ pubkey: String) -> String {
|
||||
return pk_setting_key(pubkey, key: "relay_filters")
|
||||
}
|
||||
|
||||
func clear_relay_filters(_ pubkey: String) {
|
||||
let key = relay_filter_setting_key(pubkey)
|
||||
UserDefaults.standard.removeObject(forKey: key)
|
||||
}
|
||||
|
||||
func load_relay_filters(_ pubkey: String) -> Set<RelayFilter>? {
|
||||
let key = relay_filter_setting_key(pubkey)
|
||||
guard let filters = UserDefaults.standard.stringArray(forKey: key) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
return filters.reduce(into: Set()) { s, str in
|
||||
let parts = str.components(separatedBy: "\t")
|
||||
guard parts.count == 2 else {
|
||||
return
|
||||
}
|
||||
guard let timeline = Timeline.init(rawValue: parts[0]) else {
|
||||
return
|
||||
}
|
||||
let filter = RelayFilter(timeline: timeline, relay_id: parts[1])
|
||||
s.insert(filter)
|
||||
}
|
||||
}
|
||||
|
||||
func determine_to_relays(pool: RelayPool, filters: RelayFilters) -> [String] {
|
||||
return pool.descriptors
|
||||
.map { $0.url.absoluteString }
|
||||
.filter { !filters.is_filtered(timeline: .search, relay_id: $0) }
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// RelayMetadatas.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2023-02-09.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class RelayMetadatas {
|
||||
private var metadata: [String: RelayMetadata] = [:]
|
||||
|
||||
func lookup(relay_id: String) -> RelayMetadata? {
|
||||
return metadata[relay_id]
|
||||
}
|
||||
|
||||
func insert(relay_id: String, metadata: RelayMetadata) {
|
||||
self.metadata[relay_id] = metadata
|
||||
}
|
||||
}
|
||||
@@ -285,12 +285,13 @@ func fetch_static_payreq(_ lnurl: String) async -> LNUrlPayRequest? {
|
||||
return endpoint
|
||||
}
|
||||
|
||||
func fetch_zap_invoice(_ payreq: LNUrlPayRequest, zapreq: NostrEvent, amount: Int64) async -> String? {
|
||||
func fetch_zap_invoice(_ payreq: LNUrlPayRequest, zapreq: NostrEvent, sats: Int) async -> String? {
|
||||
guard var base_url = payreq.callback.flatMap({ URLComponents(string: $0) }) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
let zappable = payreq.allowsNostr ?? false
|
||||
let amount: Int64 = Int64(sats) * 1000
|
||||
|
||||
var query = [URLQueryItem(name: "amount", value: "\(amount)")]
|
||||
|
||||
|
||||
@@ -60,6 +60,8 @@ class Zaps {
|
||||
event_counts[id] = event_counts[id]! + 1
|
||||
event_totals[id] = event_totals[id]! + zap.invoice.amount
|
||||
|
||||
notify(.update_stats, zap.target.id)
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,18 +23,21 @@ struct EventActionBar: View {
|
||||
let event: NostrEvent
|
||||
let test_lnurl: String?
|
||||
let generator = UIImpactFeedbackGenerator(style: .medium)
|
||||
let thread: ThreadV2?
|
||||
|
||||
// just used for previews
|
||||
@State var sheet: ActionBarSheet? = nil
|
||||
@State var confirm_boost: Bool = false
|
||||
@State var show_share_sheet: Bool = false
|
||||
@StateObject var bar: ActionBarModel
|
||||
|
||||
@ObservedObject var bar: ActionBarModel
|
||||
|
||||
init(damus_state: DamusState, event: NostrEvent, bar: ActionBarModel, test_lnurl: String? = nil) {
|
||||
init(damus_state: DamusState, event: NostrEvent, bar: ActionBarModel? = nil, test_lnurl: String? = nil, thread: ThreadV2? = nil) {
|
||||
self.damus_state = damus_state
|
||||
self.event = event
|
||||
self.test_lnurl = test_lnurl
|
||||
_bar = StateObject.init(wrappedValue: bar)
|
||||
_bar = ObservedObject(wrappedValue: bar ?? make_actionbar_model(ev: event.id, damus: damus_state))
|
||||
self.thread = thread
|
||||
}
|
||||
|
||||
var lnurl: String? {
|
||||
@@ -44,10 +47,18 @@ struct EventActionBar: View {
|
||||
var body: some View {
|
||||
HStack {
|
||||
if damus_state.keypair.privkey != nil {
|
||||
EventActionButton(img: "bubble.left", col: nil) {
|
||||
let self_replied = (thread != nil && thread!.childEvents.first { $0.pubkey == damus_state.pubkey } != nil)
|
||||
|
||||
EventActionButton(img: "bubble.left", col: self_replied ? Color.blue : nil) {
|
||||
notify(.reply, event)
|
||||
}
|
||||
.accessibilityLabel(NSLocalizedString("Reply", comment: "Accessibility label for reply button"))
|
||||
if thread != nil && !thread!.childEvents.isEmpty {
|
||||
Text("\(thread!.childEvents.count)")
|
||||
.offset(x: -10)
|
||||
.font(.footnote.weight(.medium))
|
||||
.foregroundColor(self_replied ? Color.blue : Color.gray)
|
||||
}
|
||||
}
|
||||
Spacer()
|
||||
ZStack {
|
||||
@@ -110,6 +121,11 @@ struct EventActionBar: View {
|
||||
} message: {
|
||||
Text("Are you sure you want to repost this?", comment: "Alert message to ask if user wants to repost a post.")
|
||||
}
|
||||
.onReceive(handle_notify(.update_stats)) { n in
|
||||
let target = n.object as! String
|
||||
guard target == self.event.id else { return }
|
||||
self.bar.update(damus: self.damus_state, evid: target)
|
||||
}
|
||||
.onReceive(handle_notify(.liked)) { n in
|
||||
let liked = n.object as! Counted
|
||||
if liked.id != event.id {
|
||||
|
||||
@@ -10,7 +10,17 @@ import SwiftUI
|
||||
struct EventDetailBar: View {
|
||||
let state: DamusState
|
||||
let target: String
|
||||
@StateObject var bar: ActionBarModel
|
||||
let target_pk: String
|
||||
|
||||
@ObservedObject var bar: ActionBarModel
|
||||
|
||||
init (state: DamusState, target: String, target_pk: String) {
|
||||
self.state = state
|
||||
self.target = target
|
||||
self.target_pk = target_pk
|
||||
self._bar = ObservedObject(wrappedValue: make_actionbar_model(ev: target, damus: state))
|
||||
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
HStack {
|
||||
@@ -29,7 +39,11 @@ struct EventDetailBar: View {
|
||||
}
|
||||
|
||||
if bar.zaps > 0 {
|
||||
Text("\(Text("\(bar.zaps)", comment: "Number of zap payments on a post.").font(.body.bold())) \(Text(String(format: NSLocalizedString("zaps_count", comment: "Part of a larger sentence to describe how many zap payments there are on a post."), bar.boosts)).foregroundColor(.gray))", comment: "Sentence 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'.")
|
||||
let dst = ZapsView(state: state, target: .note(id: target, author: target_pk))
|
||||
NavigationLink(destination: dst) {
|
||||
Text("\(Text("\(bar.zaps)", comment: "Number of zap payments on a post.").font(.body.bold())) \(Text(String(format: NSLocalizedString("zaps_count", comment: "Part of a larger sentence to describe how many zap payments there are on a post."), bar.boosts)).foregroundColor(.gray))", comment: "Sentence 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'.")
|
||||
}
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -37,6 +51,6 @@ struct EventDetailBar: View {
|
||||
|
||||
struct EventDetailBar_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
EventDetailBar(state: test_damus_state(), target: "", bar: ActionBarModel.empty())
|
||||
EventDetailBar(state: test_damus_state(), target: "", target_pk: "")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ struct ChatView: View {
|
||||
size: .normal)
|
||||
|
||||
if is_active || next_ev == nil || next_ev!.pubkey != event.pubkey {
|
||||
let bar = make_actionbar_model(ev: event, damus: damus_state)
|
||||
let bar = make_actionbar_model(ev: event.id, damus: damus_state)
|
||||
EventActionBar(damus_state: damus_state, event: event, bar: bar)
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ struct ConfigView: View {
|
||||
@State var privkey_copied: Bool = false
|
||||
@State var pubkey_copied: Bool = false
|
||||
@State var delete_text: String = ""
|
||||
@State var default_zap_amount: String
|
||||
|
||||
@ObservedObject var settings: UserSettingsStore
|
||||
|
||||
@@ -28,6 +29,8 @@ struct ConfigView: View {
|
||||
|
||||
init(state: DamusState) {
|
||||
self.state = state
|
||||
let zap_amt = get_default_zap_amount(pubkey: state.pubkey).map({ "\($0)" }) ?? "1000"
|
||||
_default_zap_amount = State(initialValue: zap_amt)
|
||||
_privkey = State(initialValue: self.state.keypair.privkey_bech32 ?? "")
|
||||
_settings = ObservedObject(initialValue: state.settings)
|
||||
}
|
||||
@@ -124,6 +127,11 @@ struct ConfigView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Section(NSLocalizedString("Default Zap Amount in sats", comment: "Section title for zap configuration")) {
|
||||
TextField("1000", text: $default_zap_amount)
|
||||
}
|
||||
|
||||
Section(NSLocalizedString("Translations", comment: "Section title for selecting the translation service.")) {
|
||||
Picker(NSLocalizedString("Service", comment: "Prompt selection of translation service provider."), selection: $settings.translation_service) {
|
||||
@@ -192,11 +200,23 @@ struct ConfigView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let bundleShortVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
|
||||
let bundleVersion = Bundle.main.infoDictionary?["CFBundleVersion"] as! String
|
||||
Section(NSLocalizedString("Version", comment: "Section title for displaying the version number of the Damus app.")) {
|
||||
Text("\(bundleShortVersion) (\(bundleVersion))", comment: "Text indicating which version of the Damus app is running. Should typically not need to be translated.")
|
||||
}
|
||||
}
|
||||
}
|
||||
.onChange(of: default_zap_amount) { val in
|
||||
guard let amt = Int(val) else {
|
||||
return
|
||||
}
|
||||
set_default_zap_amount(pubkey: state.pubkey, amount: amt)
|
||||
}
|
||||
.navigationTitle(NSLocalizedString("Settings", comment: "Navigation title for Settings view."))
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.alert(NSLocalizedString("Delete Account", comment: "Alert for deleting the users account."), isPresented: $confirm_delete_account) {
|
||||
.alert(NSLocalizedString("Permanently Delete Account", comment: "Alert for deleting the users account."), isPresented: $confirm_delete_account) {
|
||||
TextField(NSLocalizedString("Type DELETE to delete", comment: "Text field prompt asking user to type the word DELETE to confirm that they want to proceed with deleting their account. The all caps lock DELETE word should not be translated. Everything else should."), text: $delete_text)
|
||||
Button(NSLocalizedString("Cancel", comment: "Cancel deleting the user."), role: .cancel) {
|
||||
confirm_delete_account = false
|
||||
|
||||
@@ -11,7 +11,6 @@ struct DMChatView: View {
|
||||
let damus_state: DamusState
|
||||
let pubkey: String
|
||||
@EnvironmentObject var dms: DirectMessageModel
|
||||
@State var message: String = ""
|
||||
@State var showPrivateKeyWarning: Bool = false
|
||||
|
||||
var Messages: some View {
|
||||
@@ -52,7 +51,7 @@ struct DMChatView: View {
|
||||
}
|
||||
|
||||
var InputField: some View {
|
||||
TextEditor(text: $message)
|
||||
TextEditor(text: $dms.draft)
|
||||
.textEditorBackground {
|
||||
InputBackground()
|
||||
}
|
||||
@@ -93,11 +92,11 @@ struct DMChatView: View {
|
||||
HStack(spacing: 0) {
|
||||
InputField
|
||||
|
||||
if !message.isEmpty {
|
||||
if !dms.draft.isEmpty {
|
||||
Button(
|
||||
role: .none,
|
||||
action: {
|
||||
showPrivateKeyWarning = contentContainsPrivateKey(message)
|
||||
showPrivateKeyWarning = contentContainsPrivateKey(dms.draft)
|
||||
|
||||
if !showPrivateKeyWarning {
|
||||
send_message()
|
||||
@@ -112,7 +111,7 @@ struct DMChatView: View {
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.frame(minHeight: 70, maxHeight: 150, alignment: .bottom)
|
||||
|
||||
Text(message).opacity(0).padding(.all, 8)
|
||||
Text(dms.draft).opacity(0).padding(.all, 8)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.frame(minHeight: 70, maxHeight: 150, alignment: .bottom)
|
||||
}
|
||||
@@ -122,7 +121,7 @@ struct DMChatView: View {
|
||||
|
||||
func send_message() {
|
||||
let tags = [["p", pubkey]]
|
||||
let post_blocks = parse_post_blocks(content: message)
|
||||
let post_blocks = parse_post_blocks(content: dms.draft)
|
||||
let post_tags = make_post_tags(post_blocks: post_blocks, tags: tags)
|
||||
let content = render_blocks(blocks: post_tags.blocks)
|
||||
|
||||
@@ -131,7 +130,7 @@ struct DMChatView: View {
|
||||
return
|
||||
}
|
||||
|
||||
message = ""
|
||||
dms.draft = ""
|
||||
|
||||
damus_state.pool.send(.event(dm))
|
||||
end_editing()
|
||||
@@ -157,6 +156,11 @@ struct DMChatView: View {
|
||||
}
|
||||
.navigationTitle(NSLocalizedString("DMs", comment: "Navigation title for DMs view, where DM is the English abbreviation for Direct Message."))
|
||||
.toolbar { Header }
|
||||
.onDisappear {
|
||||
if dms.draft.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||
dms.draft = ""
|
||||
}
|
||||
}
|
||||
.alert(NSLocalizedString("Note contains \"nsec1\" private key. Are you sure?", comment: "Alert user that they might be attempting to paste a private key and ask them to confirm."), isPresented: $showPrivateKeyWarning, actions: {
|
||||
Button(NSLocalizedString("No", comment: "Button to cancel out of posting a note after being alerted that it looks like they might be posting a private key."), role: .cancel) {
|
||||
showPrivateKeyWarning = false
|
||||
|
||||
@@ -7,119 +7,10 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct CollapsedEvents: Identifiable {
|
||||
let count: Int
|
||||
let start: Int
|
||||
let end: Int
|
||||
|
||||
var id: String = UUID().description
|
||||
}
|
||||
|
||||
enum CollapsedEvent: Identifiable {
|
||||
case event(NostrEvent, Highlight)
|
||||
case collapsed(CollapsedEvents)
|
||||
|
||||
var id: String {
|
||||
switch self {
|
||||
case .event(let ev, _):
|
||||
return ev.id
|
||||
case .collapsed(let c):
|
||||
return c.id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct EventDetailView: View {
|
||||
let sub_id = UUID().description
|
||||
let damus: DamusState
|
||||
|
||||
@StateObject var thread: ThreadModel
|
||||
@State var collapsed: Bool = true
|
||||
|
||||
func toggle_collapse_thread(scroller: ScrollViewProxy, id mid: String?, animate: Bool = true) {
|
||||
self.collapsed = !self.collapsed
|
||||
if let id = mid {
|
||||
if !self.collapsed {
|
||||
scroll_to_event(scroller: scroller, id: id, delay: 0.1, animate: animate)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func uncollapse_section(scroller: ScrollViewProxy, c: CollapsedEvents)
|
||||
{
|
||||
let ev = thread.events[c.start]
|
||||
print("uncollapsing section at \(c.start) '\(ev.content.prefix(12))...'")
|
||||
let start_id = ev.id
|
||||
|
||||
toggle_collapse_thread(scroller: scroller, id: start_id, animate: false)
|
||||
}
|
||||
|
||||
func CollapsedEventView(_ cev: CollapsedEvent, scroller: ScrollViewProxy) -> some View {
|
||||
Group {
|
||||
switch cev {
|
||||
case .collapsed(let c):
|
||||
Text(String(format: NSLocalizedString("collapsed_event_view_other_notes", comment: "Text to indicate that the thread was collapsed and that there are other notes to view if tapped."), c.count))
|
||||
.padding([.top,.bottom], 8)
|
||||
.font(.footnote)
|
||||
.foregroundColor(.gray)
|
||||
.onTapGesture {
|
||||
//self.uncollapse_section(scroller: proxy, c: c)
|
||||
//self.toggle_collapse_thread(scroller: proxy, id: nil)
|
||||
if let ev = thread.events[safe: c.start] {
|
||||
thread.set_active_event(ev, privkey: damus.keypair.privkey)
|
||||
}
|
||||
toggle_thread_view()
|
||||
}
|
||||
case .event(let ev, _):
|
||||
EventView(damus: damus, event: ev, has_action_bar: true)
|
||||
.onTapGesture {
|
||||
if thread.initial_event.id == ev.id {
|
||||
toggle_thread_view()
|
||||
} else {
|
||||
thread.set_active_event(ev, privkey: damus.keypair.privkey)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ScrollViewReader { proxy in
|
||||
if thread.loading {
|
||||
ProgressView().progressViewStyle(.circular)
|
||||
}
|
||||
|
||||
ScrollView(.vertical) {
|
||||
LazyVStack {
|
||||
let collapsed_events = calculated_collapsed_events(
|
||||
privkey: damus.keypair.privkey,
|
||||
collapsed: self.collapsed,
|
||||
active: thread.event,
|
||||
events: thread.events
|
||||
)
|
||||
ForEach(collapsed_events, id: \.id) { cev in
|
||||
CollapsedEventView(cev, scroller: proxy)
|
||||
}
|
||||
}
|
||||
.padding(.horizontal)
|
||||
.padding(.top)
|
||||
|
||||
EndBlock()
|
||||
}
|
||||
.onChange(of: thread.loading) { val in
|
||||
scroll_after_load(thread: thread, proxy: proxy)
|
||||
}
|
||||
.onAppear() {
|
||||
scroll_after_load(thread: thread, proxy: proxy)
|
||||
}
|
||||
}
|
||||
.navigationBarTitle(NSLocalizedString("Thread", comment: "Navigation bar title for note thread."))
|
||||
|
||||
}
|
||||
|
||||
func toggle_thread_view() {
|
||||
NotificationCenter.default.post(name: .toggle_thread_view, object: nil)
|
||||
Text("EventDetailView")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,167 +21,13 @@ func scroll_after_load(thread: ThreadModel, proxy: ScrollViewProxy) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct EventDetailView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let state = test_damus_state()
|
||||
let tm = ThreadModel(evid: "4da698ceac09a16cdb439276fa3d13ef8f6620ffb45d11b76b3f103483c2d0b0", damus_state: state)
|
||||
EventDetailView(damus: state, thread: tm)
|
||||
EventDetailView()
|
||||
}
|
||||
}
|
||||
|
||||
/// Find the entire reply path for the active event
|
||||
func make_reply_map(active: NostrEvent, events: [NostrEvent], privkey: String?) -> [String: ()]
|
||||
{
|
||||
let event_map: [String: Int] = zip(events,0...events.count).reduce(into: [:]) { (acc, arg1) in
|
||||
let (ev, i) = arg1
|
||||
acc[ev.id] = i
|
||||
}
|
||||
var is_reply: [String: ()] = [:]
|
||||
var i: Int = 0
|
||||
var start: Int = 0
|
||||
var iterations: Int = 0
|
||||
|
||||
if events.count == 0 {
|
||||
return is_reply
|
||||
}
|
||||
|
||||
for ev in events {
|
||||
/// does this event reply to the active event?
|
||||
let ev_refs = ev.event_refs(privkey)
|
||||
for ev_ref in ev_refs {
|
||||
if let reply = ev_ref.is_reply {
|
||||
if reply.ref_id == active.id {
|
||||
is_reply[ev.id] = ()
|
||||
start = i
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// does the active event reply to this event?
|
||||
let active_refs = active.event_refs(privkey)
|
||||
for active_ref in active_refs {
|
||||
if let reply = active_ref.is_reply {
|
||||
if reply.ref_id == ev.id {
|
||||
is_reply[ev.id] = ()
|
||||
start = i
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
i += 1
|
||||
}
|
||||
|
||||
i = start
|
||||
|
||||
while true {
|
||||
if iterations > 1024 {
|
||||
// infinite loop? or super large thread
|
||||
print("breaking from large reply_map... big thread??")
|
||||
break
|
||||
}
|
||||
|
||||
let ev = events[i]
|
||||
|
||||
let ref_ids = ev.referenced_ids
|
||||
if ref_ids.count == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
let ref_id = ref_ids[ref_ids.count-1]
|
||||
let pubkey = ref_id.ref_id
|
||||
is_reply[pubkey] = ()
|
||||
|
||||
if let mi = event_map[pubkey] {
|
||||
i = mi
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
iterations += 1
|
||||
}
|
||||
|
||||
return is_reply
|
||||
}
|
||||
|
||||
func determine_highlight(reply_map: [String: ()], current: NostrEvent, active: NostrEvent) -> Highlight
|
||||
{
|
||||
if current.id == active.id {
|
||||
return .main
|
||||
} else if reply_map[current.id] != nil {
|
||||
return .reply
|
||||
} else {
|
||||
return .none
|
||||
}
|
||||
}
|
||||
|
||||
func calculated_collapsed_events(privkey: String?, collapsed: Bool, active: NostrEvent?, events: [NostrEvent]) -> [CollapsedEvent] {
|
||||
var count: Int = 0
|
||||
|
||||
guard let active = active else {
|
||||
return []
|
||||
}
|
||||
|
||||
let reply_map = make_reply_map(active: active, events: events, privkey: privkey)
|
||||
|
||||
if !collapsed {
|
||||
return events.reduce(into: []) { acc, ev in
|
||||
let highlight = determine_highlight(reply_map: reply_map, current: ev, active: active)
|
||||
return acc.append(.event(ev, highlight))
|
||||
}
|
||||
}
|
||||
|
||||
let nevents = events.count
|
||||
var start: Int = 0
|
||||
var i: Int = 0
|
||||
|
||||
return events.reduce(into: []) { (acc, ev) in
|
||||
let highlight = determine_highlight(reply_map: reply_map, current: ev, active: active)
|
||||
|
||||
switch highlight {
|
||||
case .none:
|
||||
if i == 0 {
|
||||
start = 1
|
||||
}
|
||||
count += 1
|
||||
case .main: fallthrough
|
||||
case .custom: fallthrough
|
||||
case .reply:
|
||||
if count != 0 {
|
||||
let c = CollapsedEvents(count: count, start: start, end: i)
|
||||
acc.append(.collapsed(c))
|
||||
start = i
|
||||
count = 0
|
||||
}
|
||||
acc.append(.event(ev, highlight))
|
||||
}
|
||||
|
||||
if i == nevents-1 {
|
||||
if count != 0 {
|
||||
let c = CollapsedEvents(count: count, start: i-count, end: i)
|
||||
acc.append(.collapsed(c))
|
||||
count = 0
|
||||
}
|
||||
}
|
||||
|
||||
i += 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
func any_collapsed(_ evs: [CollapsedEvent]) -> Bool {
|
||||
for ev in evs {
|
||||
switch ev {
|
||||
case .collapsed:
|
||||
return true
|
||||
case .event:
|
||||
continue
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
func print_event(_ ev: NostrEvent) {
|
||||
print(ev.description)
|
||||
|
||||
@@ -152,16 +152,14 @@ func format_date(_ created_at: Int64) -> String {
|
||||
return dateFormatter.string(from: date)
|
||||
}
|
||||
|
||||
|
||||
|
||||
func make_actionbar_model(ev: NostrEvent, damus: DamusState) -> ActionBarModel {
|
||||
let likes = damus.likes.counts[ev.id]
|
||||
let boosts = damus.boosts.counts[ev.id]
|
||||
let zaps = damus.zaps.event_counts[ev.id]
|
||||
let zap_total = damus.zaps.event_totals[ev.id]
|
||||
let our_like = damus.likes.our_events[ev.id]
|
||||
let our_boost = damus.boosts.our_events[ev.id]
|
||||
let our_zap = damus.zaps.our_zaps[ev.id]
|
||||
func make_actionbar_model(ev: String, damus: DamusState) -> ActionBarModel {
|
||||
let likes = damus.likes.counts[ev]
|
||||
let boosts = damus.boosts.counts[ev]
|
||||
let zaps = damus.zaps.event_counts[ev]
|
||||
let zap_total = damus.zaps.event_totals[ev]
|
||||
let our_like = damus.likes.our_events[ev]
|
||||
let our_boost = damus.boosts.our_events[ev]
|
||||
let our_zap = damus.zaps.our_zaps[ev]
|
||||
|
||||
return ActionBarModel(likes: likes ?? 0,
|
||||
boosts: boosts ?? 0,
|
||||
|
||||
@@ -53,8 +53,7 @@ struct BuilderEventView: View {
|
||||
NostrFilter(ids: [self.event_id], limit: 1),
|
||||
NostrFilter(
|
||||
kinds: [NostrKind.zap.rawValue],
|
||||
referenced_ids: [self.event_id],
|
||||
limit: 500
|
||||
referenced_ids: [self.event_id]
|
||||
)
|
||||
])
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ struct MutedEventView: View {
|
||||
let damus_state: DamusState
|
||||
let event: NostrEvent
|
||||
let scroller: ScrollViewProxy?
|
||||
let thread: ThreadV2?
|
||||
|
||||
let selected: Bool
|
||||
@Binding var nav_target: String?
|
||||
@@ -18,7 +19,7 @@ struct MutedEventView: View {
|
||||
@State var shown: Bool
|
||||
@Environment(\.colorScheme) var colorScheme
|
||||
|
||||
init(damus_state: DamusState, event: NostrEvent, scroller: ScrollViewProxy?, nav_target: Binding<String?>, navigating: Binding<Bool>, selected: Bool) {
|
||||
init(damus_state: DamusState, event: NostrEvent, scroller: ScrollViewProxy?, nav_target: Binding<String?>, navigating: Binding<Bool>, selected: Bool, thread: ThreadV2?) {
|
||||
self.damus_state = damus_state
|
||||
self.event = event
|
||||
self.scroller = scroller
|
||||
@@ -26,6 +27,7 @@ struct MutedEventView: View {
|
||||
self._nav_target = nav_target
|
||||
self._navigating = navigating
|
||||
self._shown = State(initialValue: should_show_event(contacts: damus_state.contacts, ev: event))
|
||||
self.thread = thread
|
||||
}
|
||||
|
||||
var should_mute: Bool {
|
||||
@@ -55,7 +57,7 @@ struct MutedEventView: View {
|
||||
var Event: some View {
|
||||
Group {
|
||||
if selected {
|
||||
SelectedEventView(damus: damus_state, event: event)
|
||||
SelectedEventView(damus: damus_state, event: event, thread: thread)
|
||||
} else {
|
||||
EventView(damus: damus_state, event: event, has_action_bar: true)
|
||||
.onTapGesture {
|
||||
@@ -106,7 +108,7 @@ struct MutedEventView_Previews: PreviewProvider {
|
||||
|
||||
static var previews: some View {
|
||||
|
||||
MutedEventView(damus_state: test_damus_state(), event: test_event, scroller: nil, nav_target: $nav_target, navigating: $navigating, selected: false)
|
||||
MutedEventView(damus_state: test_damus_state(), event: test_event, scroller: nil, nav_target: $nav_target, navigating: $navigating, selected: false, thread: nil)
|
||||
.frame(width: .infinity, height: 50)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,11 +10,21 @@ import SwiftUI
|
||||
struct SelectedEventView: View {
|
||||
let damus: DamusState
|
||||
let event: NostrEvent
|
||||
let thread: ThreadV2?
|
||||
|
||||
var pubkey: String {
|
||||
event.pubkey
|
||||
}
|
||||
|
||||
@StateObject var bar: ActionBarModel
|
||||
|
||||
init(damus: DamusState, event: NostrEvent, thread: ThreadV2?) {
|
||||
self.damus = damus
|
||||
self.event = event
|
||||
self._bar = StateObject(wrappedValue: make_actionbar_model(ev: event.id, damus: damus))
|
||||
self.thread = thread
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
HStack(alignment: .top) {
|
||||
let profile = damus.profiles.lookup(id: pubkey)
|
||||
@@ -35,19 +45,22 @@ struct SelectedEventView: View {
|
||||
Divider()
|
||||
.padding([.bottom], 4)
|
||||
|
||||
let bar = make_actionbar_model(ev: event, damus: damus)
|
||||
|
||||
if !bar.is_empty {
|
||||
EventDetailBar(state: damus, target: event.id, bar: bar)
|
||||
EventDetailBar(state: damus, target: event.id, target_pk: event.pubkey)
|
||||
Divider()
|
||||
}
|
||||
|
||||
EventActionBar(damus_state: damus, event: event, bar: bar)
|
||||
|
||||
EventActionBar(damus_state: damus, event: event, thread: thread)
|
||||
.padding([.top], 4)
|
||||
|
||||
Divider()
|
||||
.padding([.top], 4)
|
||||
}
|
||||
.onReceive(handle_notify(.update_stats)) { n in
|
||||
let target = n.object as! String
|
||||
guard target == self.event.id else { return }
|
||||
self.bar.update(damus: self.damus, evid: target)
|
||||
}
|
||||
.padding([.leading], 2)
|
||||
.event_context_menu(event, keypair: damus.keypair, target_pubkey: event.pubkey)
|
||||
}
|
||||
@@ -56,7 +69,7 @@ struct SelectedEventView: View {
|
||||
|
||||
struct SelectedEventView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
SelectedEventView(damus: test_damus_state(), event: test_event)
|
||||
SelectedEventView(damus: test_damus_state(), event: test_event, thread: nil)
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,9 +48,7 @@ struct TextEvent: View {
|
||||
if has_action_bar {
|
||||
Rectangle().frame(height: 2).opacity(0)
|
||||
|
||||
let bar = make_actionbar_model(ev: event, damus: damus)
|
||||
|
||||
EventActionBar(damus_state: damus, event: event, bar: bar)
|
||||
EventActionBar(damus_state: damus, event: event)
|
||||
.padding([.top], 4)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,6 +275,7 @@ struct KeyInput: View {
|
||||
.autocapitalization(.none)
|
||||
.foregroundColor(.white)
|
||||
.font(.body.monospaced())
|
||||
.textContentType(.password)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
enum Timeline: String, CustomStringConvertible {
|
||||
enum Timeline: String, CustomStringConvertible, Hashable {
|
||||
case home
|
||||
case notifications
|
||||
case search
|
||||
|
||||
@@ -16,6 +16,7 @@ let POST_PLACEHOLDER = NSLocalizedString("Type your post here...", comment: "Tex
|
||||
|
||||
struct PostView: View {
|
||||
@State var post: String = ""
|
||||
|
||||
@FocusState var focus: Bool
|
||||
@State var showPrivateKeyWarning: Bool = false
|
||||
|
||||
@@ -47,6 +48,13 @@ struct PostView: View {
|
||||
let new_post = NostrPost(content: content, references: references, kind: kind)
|
||||
|
||||
NotificationCenter.default.post(name: .post, object: NostrPostResult.post(new_post))
|
||||
|
||||
if let replying_to {
|
||||
damus_state.drafts.replies.removeValue(forKey: replying_to)
|
||||
} else {
|
||||
damus_state.drafts.post = ""
|
||||
}
|
||||
|
||||
dismiss()
|
||||
}
|
||||
|
||||
@@ -80,6 +88,13 @@ struct PostView: View {
|
||||
TextEditor(text: $post)
|
||||
.focused($focus)
|
||||
.textInputAutocapitalization(.sentences)
|
||||
.onChange(of: post) { _ in
|
||||
if let replying_to {
|
||||
damus_state.drafts.replies[replying_to] = post
|
||||
} else {
|
||||
damus_state.drafts.post = post
|
||||
}
|
||||
}
|
||||
|
||||
if post.isEmpty {
|
||||
Text(POST_PLACEHOLDER)
|
||||
@@ -99,10 +114,28 @@ struct PostView: View {
|
||||
}
|
||||
}
|
||||
.onAppear() {
|
||||
if let replying_to {
|
||||
if damus_state.drafts.replies[replying_to] == nil {
|
||||
damus_state.drafts.replies[replying_to] = ""
|
||||
}
|
||||
if let p = damus_state.drafts.replies[replying_to] {
|
||||
post = p
|
||||
}
|
||||
} else {
|
||||
post = damus_state.drafts.post
|
||||
}
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
|
||||
self.focus = true
|
||||
}
|
||||
}
|
||||
.onDisappear {
|
||||
if let replying_to, let reply = damus_state.drafts.replies[replying_to], reply.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||
damus_state.drafts.replies.removeValue(forKey: replying_to)
|
||||
} else if replying_to == nil && damus_state.drafts.post.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||
damus_state.drafts.post = ""
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
.alert(NSLocalizedString("Note contains \"nsec1\" private key. Are you sure?", comment: "Alert user that they might be attempting to paste a private key and ask them to confirm."), isPresented: $showPrivateKeyWarning, actions: {
|
||||
Button(NSLocalizedString("No", comment: "Button to cancel out of posting a note after being alerted that it looks like they might be posting a private key."), role: .cancel) {
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
//
|
||||
// RelayFilterView.swift
|
||||
// damus
|
||||
//
|
||||
// Created by Ben Weeks on 1/8/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RelayFilterView: View {
|
||||
let state: DamusState
|
||||
let timeline: Timeline
|
||||
//@State var relays: [RelayDescriptor]
|
||||
//@EnvironmentObject var user_settings: UserSettingsStore
|
||||
//@State var relays: [RelayDescriptor]
|
||||
|
||||
init(state: DamusState, timeline: Timeline) {
|
||||
self.state = state
|
||||
self.timeline = timeline
|
||||
|
||||
//_relays = State(initialValue: state.pool.descriptors)
|
||||
}
|
||||
|
||||
var relays: [RelayDescriptor] {
|
||||
return state.pool.descriptors
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Text("To filter your \(timeline.rawValue) feed, please choose applicable relays from the list below:")
|
||||
.padding()
|
||||
.padding(.top, 20)
|
||||
.padding(.bottom, 0)
|
||||
|
||||
List(Array(relays), id: \.url) { relay in
|
||||
RelayToggle(state: state, timeline: timeline, relay_id: relay.url.absoluteString)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct RelayFilterView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
RelayFilterView(state: test_damus_state(), timeline: .search)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// RelayPaidDetail.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2023-02-10.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RelayPaidDetail: View {
|
||||
let payments_url: String?
|
||||
|
||||
@Environment(\.openURL) var openURL
|
||||
|
||||
var body: some View {
|
||||
HStack {
|
||||
RelayType(is_paid: true)
|
||||
if let url = payments_url.flatMap({ URL(string: $0) }) {
|
||||
Button(action: {
|
||||
openURL(url)
|
||||
}, label: {
|
||||
Text("\(url)")
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct RelayPaidDetail_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
RelayPaidDetail(payments_url: "https://jb55.com")
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@ struct RecommendedRelayView: View {
|
||||
guard let ev_after_add = add_relay(ev: ev_before_add, privkey: privkey, current_relays: damus.pool.descriptors, relay: relay, info: .rw) else {
|
||||
return
|
||||
}
|
||||
process_contact_event(pool: damus.pool, contacts: damus.contacts, pubkey: damus.pubkey, ev: ev_after_add)
|
||||
process_contact_event(state: damus, ev: ev_after_add)
|
||||
damus.pool.send(.event(ev_after_add))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ struct RelayConfigView: View {
|
||||
@State var show_add_relay: Bool = false
|
||||
@State var relays: [RelayDescriptor]
|
||||
|
||||
@Environment(\.dismiss) var dismiss
|
||||
|
||||
init(state: DamusState) {
|
||||
self.state = state
|
||||
_relays = State(initialValue: state.pool.descriptors)
|
||||
@@ -33,6 +35,9 @@ struct RelayConfigView: View {
|
||||
.onReceive(handle_notify(.relays_changed)) { _ in
|
||||
self.relays = state.pool.descriptors
|
||||
}
|
||||
.onReceive(handle_notify(.switched_timeline)) { _ in
|
||||
dismiss()
|
||||
}
|
||||
.sheet(isPresented: $show_add_relay) {
|
||||
AddRelayView(show_add_relay: $show_add_relay, relay: $new_relay) { m_relay in
|
||||
guard var relay = m_relay else {
|
||||
@@ -67,7 +72,7 @@ struct RelayConfigView: View {
|
||||
return
|
||||
}
|
||||
|
||||
process_contact_event(pool: state.pool, contacts: state.contacts, pubkey: state.pubkey, ev: ev)
|
||||
process_contact_event(state: state, ev: ev)
|
||||
|
||||
state.pool.send(.event(new_ev))
|
||||
}
|
||||
|
||||
@@ -10,11 +10,9 @@ import SwiftUI
|
||||
struct RelayDetailView: View {
|
||||
let state: DamusState
|
||||
let relay: String
|
||||
let nip11: RelayMetadata
|
||||
|
||||
@State private var errorString: String?
|
||||
@State private var nip11: RelayMetadata?
|
||||
|
||||
@State var conn_color: Color
|
||||
|
||||
@Environment(\.dismiss) var dismiss
|
||||
|
||||
@@ -24,84 +22,52 @@ struct RelayDetailView: View {
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
if let nip11 {
|
||||
Form {
|
||||
if let pubkey = nip11.pubkey {
|
||||
Section(NSLocalizedString("Admin", comment: "Label to display relay contact user.")) {
|
||||
UserView(damus_state: state, pubkey: pubkey)
|
||||
}
|
||||
}
|
||||
Section(NSLocalizedString("Relay", comment: "Label to display relay address.")) {
|
||||
HStack {
|
||||
Text(relay)
|
||||
Spacer()
|
||||
Circle()
|
||||
.frame(width: 8.0, height: 8.0)
|
||||
.foregroundColor(conn_color)
|
||||
}
|
||||
}
|
||||
Section(NSLocalizedString("Description", comment: "Label to display relay description.")) {
|
||||
FieldText(nip11.description)
|
||||
}
|
||||
Section(NSLocalizedString("Contact", comment: "Label to display relay contact information.")) {
|
||||
FieldText(nip11.contact)
|
||||
}
|
||||
Section(NSLocalizedString("Software", comment: "Label to display relay software.")) {
|
||||
FieldText(nip11.software)
|
||||
}
|
||||
Section(NSLocalizedString("Version", comment: "Label to display relay software version.")) {
|
||||
FieldText(nip11.version)
|
||||
}
|
||||
if let nips = nip11.supported_nips, nips.count > 0 {
|
||||
Section(NSLocalizedString("Supported NIPs", comment: "Label to display relay's supported NIPs.")) {
|
||||
Text(nipsList(nips: nips))
|
||||
}
|
||||
Form {
|
||||
if let pubkey = nip11.pubkey {
|
||||
Section(NSLocalizedString("Admin", comment: "Label to display relay contact user.")) {
|
||||
UserView(damus_state: state, pubkey: pubkey)
|
||||
}
|
||||
}
|
||||
Section(NSLocalizedString("Relay", comment: "Label to display relay address.")) {
|
||||
HStack {
|
||||
Text(relay)
|
||||
Spacer()
|
||||
RelayStatus(pool: state.pool, relay: relay)
|
||||
}
|
||||
}
|
||||
if nip11.is_paid {
|
||||
Section(content: {
|
||||
RelayPaidDetail(payments_url: nip11.payments_url)
|
||||
}, header: {
|
||||
Text("Paid Relay")
|
||||
}, footer: {
|
||||
Text("This is a paid relay, you must pay for posts to be accepted.")
|
||||
})
|
||||
}
|
||||
|
||||
Section(NSLocalizedString("Description", comment: "Label to display relay description.")) {
|
||||
FieldText(nip11.description)
|
||||
}
|
||||
Section(NSLocalizedString("Contact", comment: "Label to display relay contact information.")) {
|
||||
FieldText(nip11.contact)
|
||||
}
|
||||
Section(NSLocalizedString("Software", comment: "Label to display relay software.")) {
|
||||
FieldText(nip11.software)
|
||||
}
|
||||
Section(NSLocalizedString("Version", comment: "Label to display relay software version.")) {
|
||||
FieldText(nip11.version)
|
||||
}
|
||||
if let nips = nip11.supported_nips, nips.count > 0 {
|
||||
Section(NSLocalizedString("Supported NIPs", comment: "Label to display relay's supported NIPs.")) {
|
||||
Text(nipsList(nips: nips))
|
||||
}
|
||||
}
|
||||
} else if let errorString {
|
||||
Text(errorString)
|
||||
.foregroundColor(.red)
|
||||
.font(.caption)
|
||||
} else {
|
||||
ProgressView()
|
||||
}
|
||||
}
|
||||
.onReceive(handle_notify(.switched_timeline)) { notif in
|
||||
dismiss()
|
||||
}
|
||||
.navigationTitle(nip11?.name ?? "")
|
||||
.task {
|
||||
var urlString = relay.replacingOccurrences(of: "wss://", with: "https://")
|
||||
urlString = urlString.replacingOccurrences(of: "ws://", with: "http://")
|
||||
|
||||
guard let url = URL(string: urlString) else {
|
||||
return
|
||||
}
|
||||
|
||||
var request = URLRequest(url: url)
|
||||
request.setValue("application/nostr+json", forHTTPHeaderField: "Accept")
|
||||
|
||||
var res: (Data, URLResponse)? = nil
|
||||
|
||||
do {
|
||||
res = try await URLSession.shared.data(for: request)
|
||||
} catch {
|
||||
errorString = error.localizedDescription
|
||||
return
|
||||
}
|
||||
|
||||
guard let data = res?.0 else {
|
||||
errorString = "Relay not responding to metadata request"
|
||||
return
|
||||
}
|
||||
|
||||
do {
|
||||
let nip11 = try JSONDecoder().decode(RelayMetadata.self, from: data)
|
||||
self.nip11 = nip11
|
||||
} catch {
|
||||
errorString = error.localizedDescription
|
||||
}
|
||||
}
|
||||
.navigationTitle(nip11.name ?? "")
|
||||
}
|
||||
|
||||
private func nipsList(nips: [Int]) -> AttributedString {
|
||||
@@ -124,6 +90,7 @@ struct RelayDetailView: View {
|
||||
|
||||
struct RelayDetailView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
RelayDetailView(state: test_damus_state(), relay: "wss://nostr.klabo.blog", conn_color: .green)
|
||||
let metadata = RelayMetadata(name: "name", description: "desc", pubkey: "pubkey", contact: "contact", supported_nips: [1,2,3], software: "software", version: "version", limitation: Limitations.empty, payments_url: "https://jb55.com")
|
||||
RelayDetailView(state: test_damus_state(), relay: "relay", nip11: metadata)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
//
|
||||
// RelayStatus.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2023-02-10.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RelayStatus: View {
|
||||
let pool: RelayPool
|
||||
let relay: String
|
||||
|
||||
let timer = Timer.publish(every: 2, on: .main, in: .common).autoconnect()
|
||||
|
||||
@State var conn_color: Color = .gray
|
||||
|
||||
func update_connection_color() {
|
||||
for relay in pool.relays {
|
||||
if relay.id == self.relay {
|
||||
let c = relay.connection
|
||||
if c.isConnected {
|
||||
conn_color = .green
|
||||
} else if c.isConnecting || c.isReconnecting {
|
||||
conn_color = .yellow
|
||||
} else {
|
||||
conn_color = .red
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Circle()
|
||||
.frame(width: 8.0, height: 8.0)
|
||||
.foregroundColor(conn_color)
|
||||
.onReceive(timer) { _ in
|
||||
update_connection_color()
|
||||
}
|
||||
.onAppear() {
|
||||
update_connection_color()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct RelayStatus_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
RelayStatus(pool: test_damus_state().pool, relay: "relay")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
//
|
||||
// RelayToggle.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2023-02-10.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RelayToggle: View {
|
||||
let state: DamusState
|
||||
let timeline: Timeline
|
||||
let relay_id: String
|
||||
|
||||
func toggle_binding(relay_id: String) -> Binding<Bool> {
|
||||
return Binding(get: {
|
||||
!state.relay_filters.is_filtered(timeline: timeline, relay_id: relay_id)
|
||||
}, set: { on in
|
||||
if !on {
|
||||
state.relay_filters.insert(timeline: timeline, relay_id: relay_id)
|
||||
} else {
|
||||
state.relay_filters.remove(timeline: timeline, relay_id: relay_id)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
HStack {
|
||||
RelayStatus(pool: state.pool, relay: relay_id)
|
||||
RelayType(is_paid: state.relay_metadata.lookup(relay_id: relay_id)?.is_paid ?? false)
|
||||
Toggle(relay_id, isOn: toggle_binding(relay_id: relay_id))
|
||||
.toggleStyle(SwitchToggleStyle(tint: .accentColor))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct RelayToggle_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
RelayToggle(state: test_damus_state(), timeline: .search, relay_id: "wss://jb55.com")
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
//
|
||||
// RelayType.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2023-02-10.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RelayType: View {
|
||||
let is_paid: Bool
|
||||
|
||||
var body: some View {
|
||||
|
||||
Image(systemName: is_paid ? "dollarsign.circle.fill" : "globe.americas.fill")
|
||||
.foregroundColor(is_paid ? Color("DamusGreen") : .gray)
|
||||
}
|
||||
}
|
||||
|
||||
struct RelayType_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
VStack {
|
||||
RelayType(is_paid: false)
|
||||
RelayType(is_paid: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,41 +11,22 @@ struct RelayView: View {
|
||||
let state: DamusState
|
||||
let relay: String
|
||||
|
||||
let timer = Timer.publish(every: 2, on: .main, in: .common).autoconnect()
|
||||
@State var conn_color: Color = .gray
|
||||
|
||||
func update_connection_color() {
|
||||
for relay in state.pool.relays {
|
||||
if relay.id == self.relay {
|
||||
let c = relay.connection
|
||||
if c.isConnected {
|
||||
conn_color = .green
|
||||
} else if c.isConnecting || c.isReconnecting {
|
||||
conn_color = .yellow
|
||||
var body: some View {
|
||||
Group {
|
||||
HStack {
|
||||
RelayStatus(pool: state.pool, relay: relay)
|
||||
RelayType(is_paid: state.relay_metadata.lookup(relay_id: relay)?.is_paid ?? false)
|
||||
if let meta = state.relay_metadata.lookup(relay_id: relay) {
|
||||
NavigationLink {
|
||||
RelayDetailView(state: state, relay: relay, nip11: meta)
|
||||
} label: {
|
||||
Text(relay)
|
||||
}
|
||||
} else {
|
||||
conn_color = .red
|
||||
Text(relay)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
HStack {
|
||||
Circle()
|
||||
.frame(width: 8.0, height: 8.0)
|
||||
.foregroundColor(conn_color)
|
||||
NavigationLink {
|
||||
RelayDetailView(state: state, relay: relay, conn_color: conn_color)
|
||||
} label: {
|
||||
Text(relay)
|
||||
}
|
||||
}
|
||||
.onReceive(timer) { _ in
|
||||
update_connection_color()
|
||||
}
|
||||
.onAppear() {
|
||||
update_connection_color()
|
||||
}
|
||||
.swipeActions {
|
||||
if let privkey = state.keypair.privkey {
|
||||
RemoveAction(privkey: privkey)
|
||||
@@ -79,7 +60,7 @@ struct RelayView: View {
|
||||
return
|
||||
}
|
||||
|
||||
process_contact_event(pool: state.pool, contacts: state.contacts, pubkey: state.pubkey, ev: new_ev)
|
||||
process_contact_event(state: state, ev: new_ev)
|
||||
state.pool.send(.event(new_ev))
|
||||
} label: {
|
||||
Label(NSLocalizedString("Delete", comment: "Button to delete a relay server that the user connects to."), systemImage: "trash")
|
||||
@@ -90,6 +71,6 @@ struct RelayView: View {
|
||||
|
||||
struct RelayView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
RelayView(state: test_damus_state(), relay: "wss://relay.damus.io", conn_color: .red)
|
||||
RelayView(state: test_damus_state(), relay: "wss://relay.damus.io")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,9 @@ struct SaveKeysView: View {
|
||||
@State var priv_copied: Bool = false
|
||||
@State var loading: Bool = false
|
||||
@State var error: String? = nil
|
||||
|
||||
@FocusState var pubkey_focused: Bool
|
||||
@FocusState var privkey_focused: Bool
|
||||
|
||||
var body: some View {
|
||||
ZStack(alignment: .top) {
|
||||
@@ -39,7 +42,7 @@ struct SaveKeysView: View {
|
||||
.foregroundColor(.white)
|
||||
.padding(.bottom, 10)
|
||||
|
||||
SaveKeyView(text: account.pubkey_bech32, is_copied: $pub_copied)
|
||||
SaveKeyView(text: account.pubkey_bech32, textContentType: .username, is_copied: $pub_copied, focus: $pubkey_focused)
|
||||
.padding(.bottom, 10)
|
||||
|
||||
if pub_copied {
|
||||
@@ -52,7 +55,7 @@ struct SaveKeysView: View {
|
||||
.foregroundColor(.white)
|
||||
.padding(.bottom, 10)
|
||||
|
||||
SaveKeyView(text: account.privkey_bech32, is_copied: $priv_copied)
|
||||
SaveKeyView(text: account.privkey_bech32, textContentType: .newPassword, is_copied: $priv_copied, focus: $privkey_focused)
|
||||
.padding(.bottom, 10)
|
||||
}
|
||||
|
||||
@@ -77,6 +80,13 @@ struct SaveKeysView: View {
|
||||
}
|
||||
.navigationBarBackButtonHidden(true)
|
||||
.navigationBarItems(leading: BackNav())
|
||||
.onAppear {
|
||||
// Hack to force keyboard to show up for a short moment and then hiding it to register password autofill flow.
|
||||
pubkey_focused = true
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
|
||||
pubkey_focused = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func complete_account_creation(_ account: CreateAccountModel) {
|
||||
@@ -138,7 +148,9 @@ struct SaveKeysView: View {
|
||||
|
||||
struct SaveKeyView: View {
|
||||
let text: String
|
||||
let textContentType: UITextContentType
|
||||
@Binding var is_copied: Bool
|
||||
var focus: FocusState<Bool>.Binding
|
||||
|
||||
func copy_text() {
|
||||
UIPasteboard.general.string = text
|
||||
@@ -166,8 +178,8 @@ struct SaveKeyView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text(text)
|
||||
|
||||
TextField("", text: .constant(text))
|
||||
.padding(5)
|
||||
.background {
|
||||
RoundedRectangle(cornerRadius: 4.0).opacity(0.2)
|
||||
@@ -177,7 +189,14 @@ struct SaveKeyView: View {
|
||||
.foregroundColor(.white)
|
||||
.onTapGesture {
|
||||
copy_text()
|
||||
// Hack to force keyboard to hide. Showing keyboard on text field is necessary to register password autofill flow but the text itself should not be modified.
|
||||
DispatchQueue.main.async {
|
||||
end_editing()
|
||||
}
|
||||
}
|
||||
.textContentType(textContentType)
|
||||
.deleteDisabled(true)
|
||||
.focused(focus)
|
||||
|
||||
spacerBlock(width: 0, height: 0) /// set a 'width' > 0 here to vary key Text's aspect ratio
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ struct SideMenuView: View {
|
||||
@Environment(\.colorScheme) var colorScheme
|
||||
|
||||
var sideBarWidth = min(UIScreen.main.bounds.size.width * 0.65, 400.0)
|
||||
let verticalSpacing: CGFloat = 20
|
||||
|
||||
func fillColor() -> Color {
|
||||
colorScheme == .light ? Color("DamusWhite") : Color("DamusBlack")
|
||||
@@ -33,104 +34,86 @@ struct SideMenuView: View {
|
||||
}
|
||||
.background(Color("DamusDarkGrey").opacity(0.6))
|
||||
.opacity(isSidebarVisible ? 1 : 0)
|
||||
.animation(.easeInOut.delay(0.2), value: isSidebarVisible)
|
||||
.animation(.default, value: isSidebarVisible)
|
||||
.onTapGesture {
|
||||
isSidebarVisible.toggle()
|
||||
}
|
||||
content
|
||||
}
|
||||
.edgesIgnoringSafeArea(.all)
|
||||
|
||||
}
|
||||
|
||||
var content: some View {
|
||||
HStack(alignment: .top) {
|
||||
ZStack(alignment: .top) {
|
||||
fillColor()
|
||||
|
||||
VStack(alignment: .leading, spacing: 20) {
|
||||
let profile = damus_state.profiles.lookup(id: damus_state.pubkey)
|
||||
let followers = FollowersModel(damus_state: damus_state, target: damus_state.pubkey)
|
||||
let profile_model = ProfileModel(pubkey: damus_state.pubkey, damus: damus_state)
|
||||
.ignoresSafeArea()
|
||||
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
|
||||
NavigationLink(destination: ProfileView(damus_state: damus_state, profile: profile_model, followers: followers)) {
|
||||
if let picture = damus_state.profiles.lookup(id: damus_state.pubkey)?.picture {
|
||||
ProfilePicView(pubkey: damus_state.pubkey, size: 60, highlight: .none, profiles: damus_state.profiles, picture: picture)
|
||||
} else {
|
||||
Image(systemName: "person.fill")
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
let profile = damus_state.profiles.lookup(id: damus_state.pubkey)
|
||||
let followers = FollowersModel(damus_state: damus_state, target: damus_state.pubkey)
|
||||
let profile_model = ProfileModel(pubkey: damus_state.pubkey, damus: damus_state)
|
||||
|
||||
NavigationLink(destination: ProfileView(damus_state: damus_state, profile: profile_model, followers: followers)) {
|
||||
|
||||
HStack {
|
||||
ProfilePicView(pubkey: damus_state.pubkey, size: 60, highlight: .none, profiles: damus_state.profiles)
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
if let display_name = profile?.display_name {
|
||||
Text(display_name)
|
||||
.foregroundColor(textColor())
|
||||
.font(.title)
|
||||
.lineLimit(1)
|
||||
}
|
||||
if let name = profile?.name {
|
||||
Text("@" + name)
|
||||
.foregroundColor(Color("DamusMediumGrey"))
|
||||
.font(.body)
|
||||
.lineLimit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.bottom, verticalSpacing)
|
||||
}
|
||||
VStack(alignment: .leading) {
|
||||
if let display_name = profile?.display_name {
|
||||
Text(display_name)
|
||||
.foregroundColor(textColor())
|
||||
.font(.title)
|
||||
}
|
||||
if let name = profile?.name {
|
||||
Text("@" + name)
|
||||
.foregroundColor(Color("DamusMediumGrey"))
|
||||
.font(.body)
|
||||
|
||||
Divider()
|
||||
|
||||
ScrollView {
|
||||
VStack(spacing: verticalSpacing) {
|
||||
NavigationLink(destination: ProfileView(damus_state: damus_state, profile: profile_model, followers: followers)) {
|
||||
navLabel(title: NSLocalizedString("Profile", comment: "Sidebar menu label for Profile view."), systemImage: "person")
|
||||
}
|
||||
|
||||
/*
|
||||
NavigationLink(destination: EmptyView()) {
|
||||
navLabel(title: NSLocalizedString("Wallet", comment: "Sidebar menu label for Wallet view."), systemImage: "bolt")
|
||||
}
|
||||
*/
|
||||
|
||||
NavigationLink(destination: MutelistView(damus_state: damus_state, users: get_mutelist_users(damus_state.contacts.mutelist) )) {
|
||||
navLabel(title: NSLocalizedString("Blocked", comment: "Sidebar menu label for Profile view."), systemImage: "exclamationmark.octagon")
|
||||
}
|
||||
|
||||
NavigationLink(destination: RelayConfigView(state: damus_state)) {
|
||||
navLabel(title: NSLocalizedString("Relays", comment: "Sidebar menu label for Relays view."), systemImage: "network")
|
||||
}
|
||||
|
||||
NavigationLink(destination: ConfigView(state: damus_state)) {
|
||||
navLabel(title: NSLocalizedString("Settings", comment: "Sidebar menu label for accessing the app settings"), systemImage: "gear")
|
||||
}
|
||||
}
|
||||
.padding([.top, .bottom], verticalSpacing)
|
||||
}
|
||||
}
|
||||
.simultaneousGesture(TapGesture().onEnded {
|
||||
isSidebarVisible = false
|
||||
})
|
||||
|
||||
Divider()
|
||||
.padding(.trailing,40)
|
||||
|
||||
NavigationLink(destination: ProfileView(damus_state: damus_state, profile: profile_model, followers: followers)) {
|
||||
Label(NSLocalizedString("Profile", comment: "Sidebar menu label for Profile view."), systemImage: "person")
|
||||
.font(.title2)
|
||||
.foregroundColor(textColor())
|
||||
}
|
||||
.simultaneousGesture(TapGesture().onEnded {
|
||||
isSidebarVisible = false
|
||||
})
|
||||
|
||||
/*
|
||||
NavigationLink(destination: EmptyView()) {
|
||||
Label(NSLocalizedString("Relays", comment: "Sidebar menu label for Relay servers view"), systemImage: "xserve")
|
||||
.font(.title2)
|
||||
.foregroundColor(textColor())
|
||||
}
|
||||
.simultaneousGesture(TapGesture().onEnded {
|
||||
isSidebarVisible.toggle()
|
||||
})
|
||||
*/
|
||||
|
||||
/*
|
||||
NavigationLink(destination: EmptyView()) {
|
||||
Label(NSLocalizedString("Wallet", comment: "Sidebar menu label for Wallet view."), systemImage: "bolt")
|
||||
.font(.title2)
|
||||
.foregroundColor(textColor())
|
||||
}
|
||||
.simultaneousGesture(TapGesture().onEnded {
|
||||
isSidebarVisible.toggle()
|
||||
})
|
||||
*/
|
||||
|
||||
NavigationLink(destination: MutelistView(damus_state: damus_state, users: get_mutelist_users(damus_state.contacts.mutelist) )) {
|
||||
Label(NSLocalizedString("Blocked", comment: "Sidebar menu label for Profile view."), systemImage: "exclamationmark.octagon")
|
||||
.font(.title2)
|
||||
.foregroundColor(textColor())
|
||||
}
|
||||
|
||||
NavigationLink(destination: RelayConfigView(state: damus_state)) {
|
||||
Label(NSLocalizedString("Relays", comment: "Sidebar menu label for Relays view."), systemImage: "network")
|
||||
.font(.title2)
|
||||
.foregroundColor(textColor())
|
||||
}
|
||||
|
||||
NavigationLink(destination: ConfigView(state: damus_state)) {
|
||||
Label(NSLocalizedString("Settings", comment: "Sidebar menu label for accessing the app settings"), systemImage: "gear")
|
||||
.font(.title2)
|
||||
.foregroundColor(textColor())
|
||||
}
|
||||
.simultaneousGesture(TapGesture().onEnded {
|
||||
isSidebarVisible = false
|
||||
})
|
||||
|
||||
Spacer()
|
||||
|
||||
HStack(alignment: .center) {
|
||||
HStack() {
|
||||
Button(action: {
|
||||
//ConfigView(state: damus_state)
|
||||
if damus_state.keypair.privkey == nil {
|
||||
@@ -142,6 +125,7 @@ struct SideMenuView: View {
|
||||
Label(NSLocalizedString("Sign out", comment: "Sidebar menu label to sign out of the account."), systemImage: "pip.exit")
|
||||
.font(.title3)
|
||||
.foregroundColor(textColor())
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
})
|
||||
|
||||
Spacer()
|
||||
@@ -152,22 +136,18 @@ struct SideMenuView: View {
|
||||
Label(NSLocalizedString("", comment: "Sidebar menu label for accessing QRCode view"), systemImage: "qrcode")
|
||||
.font(.title)
|
||||
.foregroundColor(textColor())
|
||||
.padding(.trailing, 20)
|
||||
}).fullScreenCover(isPresented: $showQRCode) {
|
||||
QRCodeView(damus_state: damus_state)
|
||||
}
|
||||
}
|
||||
.padding(.top, verticalSpacing)
|
||||
}
|
||||
.padding(.top, 60)
|
||||
.padding(.bottom, 40)
|
||||
.padding(.leading, 40)
|
||||
.padding(.top, -15)
|
||||
.padding([.leading, .trailing, .bottom], 30)
|
||||
}
|
||||
.frame(width: sideBarWidth)
|
||||
.offset(x: isSidebarVisible ? 0 : -sideBarWidth)
|
||||
.animation(.default, value: isSidebarVisible)
|
||||
.onTapGesture {
|
||||
isSidebarVisible.toggle()
|
||||
}
|
||||
.alert("Logout", isPresented: $confirm_logout) {
|
||||
Button(NSLocalizedString("Cancel", comment: "Cancel out of logging out the user."), role: .cancel) {
|
||||
confirm_logout = false
|
||||
@@ -182,6 +162,15 @@ struct SideMenuView: View {
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ViewBuilder
|
||||
func navLabel(title: String, systemImage: String) -> some View {
|
||||
Label(title, systemImage: systemImage)
|
||||
.font(.title2)
|
||||
.foregroundColor(textColor())
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
}
|
||||
}
|
||||
|
||||
struct Previews_SideMenuView_Previews: PreviewProvider {
|
||||
|
||||
@@ -47,6 +47,7 @@ struct BuildThreadV2View: View {
|
||||
@State var thread: ThreadV2? = nil
|
||||
|
||||
@State var current_events_uuid: String = ""
|
||||
@State var extra_events_uuid: String = ""
|
||||
@State var childs_events_uuid: String = ""
|
||||
@State var parents_events_uuids: [String] = []
|
||||
|
||||
@@ -197,13 +198,15 @@ struct BuildThreadV2View: View {
|
||||
self.unsubscribe_all()
|
||||
print("ThreadV2View: Reload!")
|
||||
|
||||
var extra = NostrFilter.filter_kinds([9735, 6, 7])
|
||||
extra.referenced_ids = [ self.event_id ]
|
||||
|
||||
// Get the current event
|
||||
current_events_uuid = subscribe(filters: [
|
||||
NostrFilter(
|
||||
ids: [self.event_id],
|
||||
limit: 1
|
||||
)
|
||||
NostrFilter(ids: [self.event_id], limit: 1)
|
||||
])
|
||||
|
||||
extra_events_uuid = subscribe(filters: [extra])
|
||||
print("subscribing to threadV2 \(event_id) with sub_id \(current_events_uuid)")
|
||||
}
|
||||
|
||||
@@ -260,7 +263,8 @@ struct ThreadV2View: View {
|
||||
scroller: reader,
|
||||
nav_target: $nav_target,
|
||||
navigating: $navigating,
|
||||
selected: false
|
||||
selected: false,
|
||||
thread: nil
|
||||
)
|
||||
}
|
||||
}.background(GeometryReader { geometry in
|
||||
@@ -282,7 +286,8 @@ struct ThreadV2View: View {
|
||||
scroller: reader,
|
||||
nav_target: $nav_target,
|
||||
navigating: $navigating,
|
||||
selected: true
|
||||
selected: true,
|
||||
thread: thread
|
||||
).id("main")
|
||||
|
||||
// MARK: - Responses of the actual event view
|
||||
@@ -293,7 +298,8 @@ struct ThreadV2View: View {
|
||||
scroller: reader,
|
||||
nav_target: $nav_target,
|
||||
navigating: $navigating,
|
||||
selected: false
|
||||
selected: false,
|
||||
thread: nil
|
||||
)
|
||||
}
|
||||
}.padding()
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
//
|
||||
// ThreadView.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2022-04-19.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
|
||||
struct ThreadView: View {
|
||||
@StateObject var thread: ThreadModel
|
||||
let damus: DamusState
|
||||
@State var is_chatroom: Bool
|
||||
@State var metadata: ChatroomMetadata? = nil
|
||||
@State var seen_first: Bool = false
|
||||
|
||||
@Environment(\.dismiss) var dismiss
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
if is_chatroom {
|
||||
ChatroomView(damus: damus)
|
||||
.navigationBarTitle(metadata?.name ?? NSLocalizedString("Chat", comment: "Navigation bar title for Chatroom view."))
|
||||
.environmentObject(thread)
|
||||
} else {
|
||||
EventDetailView(damus: damus, thread: thread)
|
||||
.navigationBarTitle(metadata?.name ?? NSLocalizedString("Thread", comment: "Navigation bar title for threaded event detail view."))
|
||||
.environmentObject(thread)
|
||||
}
|
||||
|
||||
/*
|
||||
NavigationLink(destination: edv, isActive: $is_chatroom) {
|
||||
EmptyView()
|
||||
}
|
||||
*/
|
||||
}
|
||||
.onReceive(handle_notify(.switched_timeline)) { n in
|
||||
dismiss()
|
||||
}
|
||||
.onReceive(handle_notify(.toggle_thread_view)) { _ in
|
||||
is_chatroom = !is_chatroom
|
||||
//print("is_chatroom: \(is_chatroom)")
|
||||
}
|
||||
.onReceive(handle_notify(.chatroom_meta)) { n in
|
||||
let meta = n.object as! ChatroomMetadata
|
||||
self.metadata = meta
|
||||
}
|
||||
.onChange(of: thread.events) { val in
|
||||
if seen_first {
|
||||
return
|
||||
}
|
||||
if let ev = thread.events.first {
|
||||
guard ev.is_root_event() else {
|
||||
return
|
||||
}
|
||||
seen_first = true
|
||||
is_chatroom = should_show_chatroom(ev)
|
||||
}
|
||||
}
|
||||
.onAppear() {
|
||||
thread.subscribe()
|
||||
}
|
||||
.onDisappear() {
|
||||
thread.unsubscribe()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
struct ThreadView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ThreadView()
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
func should_show_chatroom(_ ev: NostrEvent) -> Bool {
|
||||
if ev.known_kind == .chat || ev.known_kind == .channel_create {
|
||||
return true
|
||||
}
|
||||
|
||||
return has_hashtag(ev.tags, hashtag: "chat")
|
||||
}
|
||||
|
||||
func tag_is_hashtag(_ tag: [String]) -> Bool {
|
||||
// "hashtag" is deprecated, will remove in the future
|
||||
return tag.count >= 2 && (tag[0] == "hashtag" || tag[0] == "t")
|
||||
}
|
||||
|
||||
func has_hashtag(_ tags: [[String]], hashtag: String) -> Bool {
|
||||
for tag in tags {
|
||||
if tag_is_hashtag(tag) && tag[1] == hashtag {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
//
|
||||
// ZapsView.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2023-02-10.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct ZapsView: View {
|
||||
let state: DamusState
|
||||
@StateObject var model: ZapsModel
|
||||
|
||||
init(state: DamusState, target: ZapTarget) {
|
||||
self.state = state
|
||||
self._model = StateObject(wrappedValue: ZapsModel(state: state, target: target))
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
LazyVStack {
|
||||
ForEach(model.zaps, id: \.event.id) { zap in
|
||||
ZapEvent(damus: state, zap: zap)
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationBarTitle(NSLocalizedString("Zaps", comment: "Navigation bar title for the Zaps view."))
|
||||
.onAppear {
|
||||
model.subscribe()
|
||||
}
|
||||
.onDisappear {
|
||||
model.unsubscribe()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ZapsView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ZapsView(state: test_damus_state(), target: .profile("pk"))
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,9 @@
|
||||
/* Bundle name */
|
||||
"CFBundleName" = "دامُس";
|
||||
|
||||
/* Privacy - Face ID Usage Description */
|
||||
"NSFaceIDUsageDescription" = "التحقق للوصول للمفتاح الخاص";
|
||||
|
||||
/* Privacy - Photo Library Additions Usage Description */
|
||||
"NSPhotoLibraryAddUsageDescription" = "السماح لدامُس بالوصول إلى الصور يتيح لك حفظ الصور";
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. بسهولة مطلقة، أرسل و استقبل برقيات البتكوين ⚡️عملة الانترنت العالمية.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -76,12 +76,18 @@ Number of relay servers a user is connected. */
|
||||
/* Label for section for adding a relay server. */
|
||||
"Add Relay" = "اضافة موصّل";
|
||||
|
||||
/* Label to display relay contact user. */
|
||||
"Admin" = "المدير";
|
||||
|
||||
/* Any amount of sats */
|
||||
"Any" = "أي شيء";
|
||||
|
||||
/* Prompt for optional entry of API Key to use translation server. */
|
||||
"API Key (optional)" = "مفتاح API (اختياري)";
|
||||
|
||||
/* Prompt for required entry of API Key to use translation server. */
|
||||
"API Key (required)" = "مفتاح API (مطلوب)";
|
||||
|
||||
/* Alert message to ask if user wants to repost a post. */
|
||||
"Are you sure you want to repost this?" = "هل أنت متأكد من اعادة النشر؟";
|
||||
|
||||
@@ -120,6 +126,9 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Blue Wallet. */
|
||||
"Blue Wallet" = "Blue Wallet";
|
||||
|
||||
/* Accessibility label for boosts button */
|
||||
"Boosts" = "تعزيز";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Breez. */
|
||||
"Breez" = "Breez";
|
||||
|
||||
@@ -138,15 +147,15 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "المحادثة";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "مسح";
|
||||
|
||||
/* Section title for clearing cached data. */
|
||||
"Clear Cache" = "مسح البيانات المؤقتة";
|
||||
|
||||
/* Label to display relay contact information. */
|
||||
"Contact" = "تواصل";
|
||||
|
||||
/* Label indicating that a user's key was copied. */
|
||||
"Copied" = "تم النسخ";
|
||||
|
||||
@@ -205,6 +214,9 @@ Number of relay servers a user is connected. */
|
||||
/* Name of the app, shown on the first screen when user is not logged in. */
|
||||
"Damus" = "دامُس";
|
||||
|
||||
/* Dropdown option for selecting DeepL as the translation service. */
|
||||
"DeepL (Proprietary, Higher Accuracy)" = "DeepL (دقة أعلى، ملكية خاصة)";
|
||||
|
||||
/* Button to pay a Lightning invoice with the user's default Lightning wallet. */
|
||||
"Default Wallet" = "المحفظة الافتراضية";
|
||||
|
||||
@@ -214,13 +226,15 @@ Number of relay servers a user is connected. */
|
||||
Section title for deleting the user */
|
||||
"Delete" = "حذف";
|
||||
|
||||
/* Alert for deleting the users account.
|
||||
Button to delete the user's account. */
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "حذف الحساب";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
"Deleted Account" = "حذف الحساب";
|
||||
|
||||
/* Label to display relay description. */
|
||||
"Description" = "الوصف";
|
||||
|
||||
/* Button to dismiss a text field alert. */
|
||||
"Dismiss" = "اغلاق";
|
||||
|
||||
@@ -255,9 +269,21 @@ Number of relay servers a user is connected. */
|
||||
/* Label indicating that the below text is the EULA, an acronym for End User License Agreement. */
|
||||
"EULA" = "اتفاقية الاستخدام";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"EventDetailView" = "EventDetailView";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Filter" = "تصفية";
|
||||
|
||||
/* Button to follow a user. */
|
||||
"Follow" = "متابعة";
|
||||
|
||||
/* Button to follow a user back. */
|
||||
"Follow Back" = "رد المتابعة";
|
||||
|
||||
/* Text on QR code view to prompt viewer looking at screen to follow the user. */
|
||||
"Follow me on nostr" = "تابعني على نوستر";
|
||||
|
||||
/* Label describing followers of a user. */
|
||||
"Followers" = "المتابعون";
|
||||
|
||||
@@ -271,6 +297,15 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Text to indicate that button next to it is in a state that will follow a profile when tapped. */
|
||||
"Follows" = "تابع";
|
||||
|
||||
/* Text to indicate that a user is following your profile. */
|
||||
"Follows you" = "متابع لك";
|
||||
|
||||
/* Dropdown option for selecting Free plan for DeepL translation service. */
|
||||
"Free" = "مجاني";
|
||||
|
||||
/* Button to navigate to DeepL website to get a translation API key. */
|
||||
"Get API Key" = "احصل على مفتاح API";
|
||||
|
||||
/* Navigation bar title for Global view where posts from all connected relay servers appear. */
|
||||
"Global" = "عام";
|
||||
|
||||
@@ -314,15 +349,24 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button to complete account creation and start using the app. */
|
||||
"Let's go!" = "هيا بنا!";
|
||||
|
||||
/* Dropdown option for selecting LibreTranslate as the translation service. */
|
||||
"LibreTranslate (Open Source)" = "LibreTranslate (مفتوح المصدر)";
|
||||
|
||||
/* Placeholder text for entry of Lightning Address or LNURL. */
|
||||
"Lightning Address or LNURL" = "عنوان البرق أو LNURL";
|
||||
|
||||
/* Indicates that the view is for paying a Lightning invoice. */
|
||||
"Lightning Invoice" = "برقية";
|
||||
|
||||
/* Accessibility Label for Like button */
|
||||
"Like" = "اعجاب";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, LNLink. */
|
||||
"LNLink" = "LNLink";
|
||||
|
||||
/* Face ID usage description shown when trying to access private key */
|
||||
"Local authentication to access private key" = "التحقق للوصول للمفتاح الخاص";
|
||||
|
||||
/* Dropdown option label for system default for Lightning wallet. */
|
||||
"Local default" = "الاختيار";
|
||||
|
||||
@@ -362,7 +406,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "لا جديد في هذه اللحظة. يرجى المعاودة لاحقا!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "التنبيهات";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -377,15 +421,24 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label indicating that a form input is optional. */
|
||||
"optional" = "غير الزامي";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Paid Relay" = "موصل مدفوع";
|
||||
|
||||
/* Button to pay a Lightning invoice. */
|
||||
"Pay" = "ادفع";
|
||||
|
||||
/* Navigation bar title for view to pay Lightning invoice. */
|
||||
"Pay the Lightning invoice" = "ادفع البرقية";
|
||||
|
||||
/* Alert for deleting the users account. */
|
||||
"Permanently Delete Account" = "حذف الحساب للأبد";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Phoenix. */
|
||||
"Phoenix" = "Phoenix";
|
||||
|
||||
/* Prompt selection of DeepL subscription plan to perform machine translations on notes */
|
||||
"Plan" = "الخطة";
|
||||
|
||||
/* Button to post a note. */
|
||||
"Post" = "انشر";
|
||||
|
||||
@@ -404,6 +457,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Title of the secure field that holds the user's private key. */
|
||||
"Private Key" = "المفتاح السري";
|
||||
|
||||
/* Dropdown option for selecting Pro plan for DeepL translation service. */
|
||||
"Pro" = "برو";
|
||||
|
||||
/* Sidebar menu label for Profile view. */
|
||||
"Profile" = "الملف الشخصي";
|
||||
|
||||
@@ -435,8 +491,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "موصّل";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "موصّلات";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -445,6 +500,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button label to remove all participants from a note reply. */
|
||||
"Remove all" = "حذف المشاركين";
|
||||
|
||||
/* Accessibility label for reply button */
|
||||
"Reply" = "رد";
|
||||
|
||||
/* Label to indicate that the user is replying to themself. */
|
||||
"Reply to self" = "رد على منشوره السابق";
|
||||
|
||||
@@ -495,6 +553,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Context menu option to save an image. */
|
||||
"Save Image" = "حفظ الصورة";
|
||||
|
||||
/* Text on QR code view to prompt viewer to scan the QR code on screen with their device camera. */
|
||||
"Scan the code" = "امسح رمز الاستجابة السريع (QR)";
|
||||
|
||||
/* Navigation link to search hashtag. */
|
||||
"Search hashtag: #%@" = "البحث عن وسم: #%@";
|
||||
|
||||
@@ -516,6 +577,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Prompt selection of LibreTranslate server to perform machine translations on notes */
|
||||
"Server" = "خادم";
|
||||
|
||||
/* Prompt selection of translation service provider. */
|
||||
"Service" = "الخدمة";
|
||||
|
||||
/* Navigation title for Settings view.
|
||||
Sidebar menu label for accessing the app settings */
|
||||
"Settings" = "الاعدادات";
|
||||
@@ -539,15 +603,24 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Sidebar menu label to sign out of the account. */
|
||||
"Sign out" = "خروج";
|
||||
|
||||
/* Label to display relay software. */
|
||||
"Software" = "البرنامج";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Strike. */
|
||||
"Strike" = "Strike";
|
||||
|
||||
/* Label to display relay's supported NIPs. */
|
||||
"Supported NIPs" = "الـ NIPs المدعومة";
|
||||
|
||||
/* Button to close out of alert that informs that the action to block a user was successful. */
|
||||
"Thanks!" = "شكرا!";
|
||||
|
||||
/* Button for user to report that the account is impersonating someone. */
|
||||
"They are impersonating someone" = "انتحال صفة شخص آخر";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This is a paid relay, you must pay for posts to be accepted." = "هذا موصل بمقابل، يجب الاشتراك للنشر فيه";
|
||||
|
||||
/* Warning that the inputted account key is a public key and the result of what happens because of it. */
|
||||
"This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." = "هذا مفتاح عام. لن تستطيع النشر أو التفاعل بهذا الحساب بأي طريقة. تستطيع فقط مشاهدة المحتوى العام من منظور صاحب الحساب.";
|
||||
|
||||
@@ -560,10 +633,12 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "هذا مفتاح الحساب السري. تحتاجه للدخول إلى حسابك. لا تشاركه مع أي شخص! احتفظ به في مكان آمن مثل برنامج إدارة كلمات المرور السرية. ";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "منشور";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To filter your %@ feed, please choose applicable relays from the list below:" = "الرجاء اختيار موصلات معينة لتصفية محتوى %@";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
"Translate Note" = "ترجم المنشور";
|
||||
|
||||
@@ -573,6 +648,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button to indicate that the note is in the process of being translated from a different language. */
|
||||
"Translating from (lang)..." = "الترجمة من (lang)...";
|
||||
|
||||
/* Section title for selecting the translation service. */
|
||||
"Translations" = "الترجمة";
|
||||
|
||||
/* Text field prompt asking user to type the word DELETE to confirm that they want to proceed with deleting their account. The all caps lock DELETE word should not be translated. Everything else should. */
|
||||
"Type DELETE to delete" = "اكتب DELETE لتأكيد الحذف";
|
||||
|
||||
@@ -607,6 +685,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Label to prompt username entry. */
|
||||
"Username" = "اسم المستخدم";
|
||||
|
||||
/* Label to display relay software version. */
|
||||
"Version" = "الاصدار";
|
||||
|
||||
/* Sidebar menu label for Wallet view. */
|
||||
"Wallet" = "المحفظة";
|
||||
|
||||
@@ -646,6 +727,12 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Footer text to inform user what will happen when the report is submitted. */
|
||||
"Your report will be sent to the relays you are connected to" = "سيتم ارسال بلاغك للموصّلات المتصلة بحسابك";
|
||||
|
||||
/* Accessibility label for zap button */
|
||||
"Zap" = "ومضة";
|
||||
|
||||
/* Navigation bar title for the Zaps view. */
|
||||
"Zaps" = "وميض";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Zebedee. */
|
||||
"Zebedee" = "Zebedee";
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
<key>many</key>
|
||||
<string>موصّلات</string>
|
||||
<key>one</key>
|
||||
<string> موصّل</string>
|
||||
<string> موصّل</string>
|
||||
<key>other</key>
|
||||
<string>موصّلات</string>
|
||||
<key>two</key>
|
||||
@@ -115,7 +115,7 @@
|
||||
<key>one</key>
|
||||
<string>& %d آخر</string>
|
||||
<key>other</key>
|
||||
<string>& %d آخرون</string>
|
||||
<string>& %d آخرين</string>
|
||||
<key>two</key>
|
||||
<string> & %d آخران</string>
|
||||
<key>zero</key>
|
||||
@@ -139,7 +139,7 @@
|
||||
<key>one</key>
|
||||
<string>& %d آخر</string>
|
||||
<key>other</key>
|
||||
<string>& %d آخرون</string>
|
||||
<string>& %d آخرين</string>
|
||||
<key>two</key>
|
||||
<string> & %d آخران</string>
|
||||
<key>zero</key>
|
||||
@@ -205,17 +205,17 @@
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>d</string>
|
||||
<key>few</key>
|
||||
<string>Zaps</string>
|
||||
<string>وميض</string>
|
||||
<key>many</key>
|
||||
<string>Zaps</string>
|
||||
<string>وميض</string>
|
||||
<key>one</key>
|
||||
<string>Zap</string>
|
||||
<string>ومضة</string>
|
||||
<key>other</key>
|
||||
<string>Zaps</string>
|
||||
<string>وميض</string>
|
||||
<key>two</key>
|
||||
<string>Zaps</string>
|
||||
<string>وميض</string>
|
||||
<key>zero</key>
|
||||
<string>Zaps</string>
|
||||
<string>وميض</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
<string>applinks:damus.io</string>
|
||||
<string>webcredentials:damus.io</string>
|
||||
</array>
|
||||
<key>keychain-access-groups</key>
|
||||
<array>
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
|
||||
@main
|
||||
struct damusApp: App {
|
||||
var body: some Scene {
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
/* Bundle name */
|
||||
"CFBundleName" = "damus";
|
||||
|
||||
/* Privacy - Face ID Usage Description */
|
||||
"NSFaceIDUsageDescription" = "Lokale Authentifizierung für den Zugriff auf den privaten Schlüssel";
|
||||
|
||||
/* Privacy - Photo Library Additions Usage Description */
|
||||
"NSPhotoLibraryAddUsageDescription" = "Zum Speichern von Bildern braucht Damus Zugriff auf deine Fotos.";
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Belohne Beiträge deiner Freunde und sammle Sats mit Bitcoin⚡️, der eigenen Währung des Internets.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -76,12 +76,18 @@ Number of relay servers a user is connected. */
|
||||
/* Label for section for adding a relay server. */
|
||||
"Add Relay" = "Relay hinzufügen";
|
||||
|
||||
/* Label to display relay contact user. */
|
||||
"Admin" = "Admin";
|
||||
|
||||
/* Any amount of sats */
|
||||
"Any" = "Beliebig";
|
||||
|
||||
/* Prompt for optional entry of API Key to use translation server. */
|
||||
"API Key (optional)" = "API Schlüssel (optional)";
|
||||
|
||||
/* Prompt for required entry of API Key to use translation server. */
|
||||
"API Key (required)" = "API-Schlüssel (benötigt)";
|
||||
|
||||
/* Alert message to ask if user wants to repost a post. */
|
||||
"Are you sure you want to repost this?" = "Bist du sicher, dass Du den Beitrag teilen möchtest?";
|
||||
|
||||
@@ -120,6 +126,9 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Blue Wallet. */
|
||||
"Blue Wallet" = "Blue Wallet";
|
||||
|
||||
/* Accessibility label for boosts button */
|
||||
"Boosts" = "Boosts";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Breez. */
|
||||
"Breez" = "Breez";
|
||||
|
||||
@@ -138,15 +147,15 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Unterhaltungen";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Löschen";
|
||||
|
||||
/* Section title for clearing cached data. */
|
||||
"Clear Cache" = "Zwischenspeicher löschen";
|
||||
|
||||
/* Label to display relay contact information. */
|
||||
"Contact" = "Kontakt";
|
||||
|
||||
/* Label indicating that a user's key was copied. */
|
||||
"Copied" = "Kopiert";
|
||||
|
||||
@@ -205,6 +214,9 @@ Number of relay servers a user is connected. */
|
||||
/* Name of the app, shown on the first screen when user is not logged in. */
|
||||
"Damus" = "Damus";
|
||||
|
||||
/* Dropdown option for selecting DeepL as the translation service. */
|
||||
"DeepL (Proprietary, Higher Accuracy)" = "DeepL (Proprietär, bessere Genauigkeit)";
|
||||
|
||||
/* Button to pay a Lightning invoice with the user's default Lightning wallet. */
|
||||
"Default Wallet" = "Voreingestellte Wallet";
|
||||
|
||||
@@ -214,13 +226,15 @@ Number of relay servers a user is connected. */
|
||||
Section title for deleting the user */
|
||||
"Delete" = "Löschen";
|
||||
|
||||
/* Alert for deleting the users account.
|
||||
Button to delete the user's account. */
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "Konto löschen";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
"Deleted Account" = "Gelöschtes Konto";
|
||||
|
||||
/* Label to display relay description. */
|
||||
"Description" = "Beschreibung";
|
||||
|
||||
/* Button to dismiss a text field alert. */
|
||||
"Dismiss" = "Schließen";
|
||||
|
||||
@@ -258,6 +272,12 @@ Number of relay servers a user is connected. */
|
||||
/* Button to follow a user. */
|
||||
"Follow" = "Folgen";
|
||||
|
||||
/* Button to follow a user back. */
|
||||
"Follow Back" = "Ebenfalls folgen";
|
||||
|
||||
/* Text on QR code view to prompt viewer looking at screen to follow the user. */
|
||||
"Follow me on nostr" = "Folge mir auf Nostr";
|
||||
|
||||
/* Label describing followers of a user. */
|
||||
"Followers" = "Follower";
|
||||
|
||||
@@ -271,6 +291,15 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Text to indicate that button next to it is in a state that will follow a profile when tapped. */
|
||||
"Follows" = "Folgt";
|
||||
|
||||
/* Text to indicate that a user is following your profile. */
|
||||
"Follows you" = "Folgt dir";
|
||||
|
||||
/* Dropdown option for selecting Free plan for DeepL translation service. */
|
||||
"Free" = "kostenlos";
|
||||
|
||||
/* Button to navigate to DeepL website to get a translation API key. */
|
||||
"Get API Key" = "API-Schlüssel erhalten";
|
||||
|
||||
/* Navigation bar title for Global view where posts from all connected relay servers appear. */
|
||||
"Global" = "Allgemein";
|
||||
|
||||
@@ -314,15 +343,24 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button to complete account creation and start using the app. */
|
||||
"Let's go!" = "Los geht’s!";
|
||||
|
||||
/* Dropdown option for selecting LibreTranslate as the translation service. */
|
||||
"LibreTranslate (Open Source)" = "LibreTranslate (Open Source)";
|
||||
|
||||
/* Placeholder text for entry of Lightning Address or LNURL. */
|
||||
"Lightning Address or LNURL" = "Lightning-Adresse oder LNURL";
|
||||
|
||||
/* Indicates that the view is for paying a Lightning invoice. */
|
||||
"Lightning Invoice" = "Lightning-Rechnung";
|
||||
|
||||
/* Accessibility Label for Like button */
|
||||
"Like" = "Like";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, LNLink. */
|
||||
"LNLink" = "LNLink";
|
||||
|
||||
/* Face ID usage description shown when trying to access private key */
|
||||
"Local authentication to access private key" = "Lokale Authentifizierung für den Zugriff auf den privaten Schlüssel";
|
||||
|
||||
/* Dropdown option label for system default for Lightning wallet. */
|
||||
"Local default" = "System-Standard";
|
||||
|
||||
@@ -362,7 +400,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Hier gibt es nichts zu sehen. Schau später wieder vorbei!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Benachrichtigungen";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -386,6 +424,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Dropdown option label for Lightning wallet, Phoenix. */
|
||||
"Phoenix" = "Phoenix";
|
||||
|
||||
/* Prompt selection of DeepL subscription plan to perform machine translations on notes */
|
||||
"Plan" = "Paket";
|
||||
|
||||
/* Button to post a note. */
|
||||
"Post" = "Teilen";
|
||||
|
||||
@@ -404,6 +445,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Title of the secure field that holds the user's private key. */
|
||||
"Private Key" = "Privater Schlüssel";
|
||||
|
||||
/* Dropdown option for selecting Pro plan for DeepL translation service. */
|
||||
"Pro" = "Pro";
|
||||
|
||||
/* Sidebar menu label for Profile view. */
|
||||
"Profile" = "Profil";
|
||||
|
||||
@@ -435,8 +479,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Relay";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Relays";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -445,6 +488,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button label to remove all participants from a note reply. */
|
||||
"Remove all" = "Alle entfernen";
|
||||
|
||||
/* Accessibility label for reply button */
|
||||
"Reply" = "Antworten";
|
||||
|
||||
/* Label to indicate that the user is replying to themself. */
|
||||
"Reply to self" = "Antwort an sich selbst";
|
||||
|
||||
@@ -495,6 +541,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Context menu option to save an image. */
|
||||
"Save Image" = "Bild sichern";
|
||||
|
||||
/* Text on QR code view to prompt viewer to scan the QR code on screen with their device camera. */
|
||||
"Scan the code" = "Code scannen";
|
||||
|
||||
/* Navigation link to search hashtag. */
|
||||
"Search hashtag: #%@" = "Hashtag suchen: #%@";
|
||||
|
||||
@@ -516,6 +565,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Prompt selection of LibreTranslate server to perform machine translations on notes */
|
||||
"Server" = "Server";
|
||||
|
||||
/* Prompt selection of translation service provider. */
|
||||
"Service" = "Dienst";
|
||||
|
||||
/* Navigation title for Settings view.
|
||||
Sidebar menu label for accessing the app settings */
|
||||
"Settings" = "Einstellungen";
|
||||
@@ -539,9 +591,15 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Sidebar menu label to sign out of the account. */
|
||||
"Sign out" = "Abmelden";
|
||||
|
||||
/* Label to display relay software. */
|
||||
"Software" = "Software";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Strike. */
|
||||
"Strike" = "Strike";
|
||||
|
||||
/* Label to display relay's supported NIPs. */
|
||||
"Supported NIPs" = "Unterstützte NIPs";
|
||||
|
||||
/* Button to close out of alert that informs that the action to block a user was successful. */
|
||||
"Thanks!" = "Danke!";
|
||||
|
||||
@@ -560,8 +618,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "Dies ist dein geheimer, privater Schlüssel. Du benötigst ihn, um auf dein Konto zuzugreifen. Gib den privaten Schlüssel an niemanden weiter! Speichere ihn in einem Passwort-Manager und bewahre ihn sicher auf!";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Thema";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
@@ -573,6 +630,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button to indicate that the note is in the process of being translated from a different language. */
|
||||
"Translating from (lang)..." = "Übersetzung aus (lang)...";
|
||||
|
||||
/* Section title for selecting the translation service. */
|
||||
"Translations" = "Übersetzungen";
|
||||
|
||||
/* Text field prompt asking user to type the word DELETE to confirm that they want to proceed with deleting their account. The all caps lock DELETE word should not be translated. Everything else should. */
|
||||
"Type DELETE to delete" = "Gib DELETE ein, um zu löschen";
|
||||
|
||||
@@ -607,6 +667,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Label to prompt username entry. */
|
||||
"Username" = "Benutzername";
|
||||
|
||||
/* Label to display relay software version. */
|
||||
"Version" = "Version";
|
||||
|
||||
/* Sidebar menu label for Wallet view. */
|
||||
"Wallet" = "Wallet";
|
||||
|
||||
@@ -646,6 +709,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Footer text to inform user what will happen when the report is submitted. */
|
||||
"Your report will be sent to the relays you are connected to" = "Die Meldung wird an Relays versendet, mit denen du verbunden bist";
|
||||
|
||||
/* Accessibility label for zap button */
|
||||
"Zap" = "Zap";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Zebedee. */
|
||||
"Zebedee" = "Zebedee";
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Δώστε φιλοδώρημα στις δημοσιεύσεις των φίλων σας και μαζέψτε Bitcoin sats⚡️, το νόμισμα του ίντερνετ.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -147,9 +147,6 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Συνομιλίες";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Καθαρισμός";
|
||||
|
||||
@@ -229,8 +226,7 @@ Number of relay servers a user is connected. */
|
||||
Section title for deleting the user */
|
||||
"Delete" = "Διαγραφή";
|
||||
|
||||
/* Alert for deleting the users account.
|
||||
Button to delete the user's account. */
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "Διαγραφή λογαριασμού";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
@@ -404,7 +400,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Δεν βρέθηκε κάτι. Δοκιμάστε αργότερα!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Ειδοποιήσεις";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -483,8 +479,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Διακομιστής Relay";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Διακομιστές Relays";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -623,8 +618,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "Αυτό είναι το κρυφό ιδιωτικό σας κλειδί. Το χρειάζεστε για να έχετε προσβαση στο λογαριασμό σας. Μη το δώσετε ποτέ σε κανέναν! Αποθηκεύστε το σε ένα ασφαλές μέρος!";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Νήμα";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
/* Bundle name */
|
||||
"CFBundleName" = "damus";
|
||||
|
||||
/* Privacy - Face ID Usage Description */
|
||||
"NSFaceIDUsageDescription" = "Autenticación local para acceder a la clave privada";
|
||||
|
||||
/* Privacy - Photo Library Additions Usage Description */
|
||||
"NSPhotoLibraryAddUsageDescription" = "Si le concedes acceso a Damus a tus fotos, podrás guardar imágenes.";
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Deja propinas en las publicaciones de tus amigos y acumula sats con Bitcoin⚡️, la moneda nativa de internet.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -76,12 +76,18 @@ Number of relay servers a user is connected. */
|
||||
/* Label for section for adding a relay server. */
|
||||
"Add Relay" = "Agregar relé";
|
||||
|
||||
/* Label to display relay contact user. */
|
||||
"Admin" = "Administrador";
|
||||
|
||||
/* Any amount of sats */
|
||||
"Any" = "Cualquiera";
|
||||
|
||||
/* Prompt for optional entry of API Key to use translation server. */
|
||||
"API Key (optional)" = "Clave de API (opcional)";
|
||||
|
||||
/* Prompt for required entry of API Key to use translation server. */
|
||||
"API Key (required)" = "Clave de API (obligatorio)";
|
||||
|
||||
/* Alert message to ask if user wants to repost a post. */
|
||||
"Are you sure you want to repost this?" = "¿Seguro quieres volver a publicar esto?";
|
||||
|
||||
@@ -120,6 +126,9 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Blue Wallet. */
|
||||
"Blue Wallet" = "Blue Wallet";
|
||||
|
||||
/* Accessibility label for boosts button */
|
||||
"Boosts" = "Boosts";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Breez. */
|
||||
"Breez" = "Breez";
|
||||
|
||||
@@ -138,15 +147,15 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Chat";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Borrar";
|
||||
|
||||
/* Section title for clearing cached data. */
|
||||
"Clear Cache" = "Borrar caché";
|
||||
|
||||
/* Label to display relay contact information. */
|
||||
"Contact" = "Contacto";
|
||||
|
||||
/* Label indicating that a user's key was copied. */
|
||||
"Copied" = "Copiada";
|
||||
|
||||
@@ -205,6 +214,9 @@ Number of relay servers a user is connected. */
|
||||
/* Name of the app, shown on the first screen when user is not logged in. */
|
||||
"Damus" = "Damus";
|
||||
|
||||
/* Dropdown option for selecting DeepL as the translation service. */
|
||||
"DeepL (Proprietary, Higher Accuracy)" = "DeepL (Propietario, Mayor precisión)";
|
||||
|
||||
/* Button to pay a Lightning invoice with the user's default Lightning wallet. */
|
||||
"Default Wallet" = "Billetera predeterminada";
|
||||
|
||||
@@ -214,6 +226,15 @@ Number of relay servers a user is connected. */
|
||||
Section title for deleting the user */
|
||||
"Delete" = "Borrar";
|
||||
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "Eliminar cuenta";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
"Deleted Account" = "Cuenta eliminada";
|
||||
|
||||
/* Label to display relay description. */
|
||||
"Description" = "Descripción";
|
||||
|
||||
/* Button to dismiss a text field alert. */
|
||||
"Dismiss" = "Descartar";
|
||||
|
||||
@@ -251,6 +272,12 @@ Number of relay servers a user is connected. */
|
||||
/* Button to follow a user. */
|
||||
"Follow" = "Seguir";
|
||||
|
||||
/* Button to follow a user back. */
|
||||
"Follow Back" = "Seguir";
|
||||
|
||||
/* Text on QR code view to prompt viewer looking at screen to follow the user. */
|
||||
"Follow me on nostr" = "Sigueme en nostr";
|
||||
|
||||
/* Label describing followers of a user. */
|
||||
"Followers" = "Seguidores";
|
||||
|
||||
@@ -264,6 +291,15 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Text to indicate that button next to it is in a state that will follow a profile when tapped. */
|
||||
"Follows" = "Sigue";
|
||||
|
||||
/* Text to indicate that a user is following your profile. */
|
||||
"Follows you" = "Te sigue";
|
||||
|
||||
/* Dropdown option for selecting Free plan for DeepL translation service. */
|
||||
"Free" = "Gratuito";
|
||||
|
||||
/* Button to navigate to DeepL website to get a translation API key. */
|
||||
"Get API Key" = "Obtener clave de API";
|
||||
|
||||
/* Navigation bar title for Global view where posts from all connected relay servers appear. */
|
||||
"Global" = "Global";
|
||||
|
||||
@@ -307,15 +343,24 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button to complete account creation and start using the app. */
|
||||
"Let's go!" = "¡Vamos!";
|
||||
|
||||
/* Dropdown option for selecting LibreTranslate as the translation service. */
|
||||
"LibreTranslate (Open Source)" = "LibreTranslate (Código abierto)";
|
||||
|
||||
/* Placeholder text for entry of Lightning Address or LNURL. */
|
||||
"Lightning Address or LNURL" = "Dirección de Lightning o LNURL";
|
||||
|
||||
/* Indicates that the view is for paying a Lightning invoice. */
|
||||
"Lightning Invoice" = "Factura de Lightning";
|
||||
|
||||
/* Accessibility Label for Like button */
|
||||
"Like" = "Me gusta";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, LNLink. */
|
||||
"LNLink" = "LNLink";
|
||||
|
||||
/* Face ID usage description shown when trying to access private key */
|
||||
"Local authentication to access private key" = "Autenticación local para acceder a la clave privada";
|
||||
|
||||
/* Dropdown option label for system default for Lightning wallet. */
|
||||
"Local default" = "Predeterminada del sistema";
|
||||
|
||||
@@ -337,6 +382,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label for NIP-05 Verification section of user profile form. */
|
||||
"NIP-05 Verification" = "Verificación NIP-05";
|
||||
|
||||
/* Button to cancel out of posting a note after being alerted that it looks like they might be posting a private key. */
|
||||
"No" = "No";
|
||||
|
||||
/* Alert message prompt that asks if the user wants to create a new block list, overwriting previous block lists. */
|
||||
"No block list found, create a new one? This will overwrite any previous block lists." = "No se encontró una lista de bloqueo. ¿Crear una nueva? Esto sobrescribirá las listas de bloqueo anteriores.";
|
||||
|
||||
@@ -346,10 +394,13 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Dropdown option for selecting no translation service. */
|
||||
"None" = "Ninguno";
|
||||
|
||||
/* Alert user that they might be attempting to paste a private key and ask them to confirm. */
|
||||
"Note contains \"nsec1\" private key. Are you sure?" = "La nota incluye una clave privada \"nsec1\". ¿Estas seguro?";
|
||||
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Nada para ver aquí. ¡Vuelve a consultar luego!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Notificaciones";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -373,6 +424,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Dropdown option label for Lightning wallet, Phoenix. */
|
||||
"Phoenix" = "Phoenix";
|
||||
|
||||
/* Prompt selection of DeepL subscription plan to perform machine translations on notes */
|
||||
"Plan" = "Plan";
|
||||
|
||||
/* Button to post a note. */
|
||||
"Post" = "Publicar";
|
||||
|
||||
@@ -391,6 +445,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Title of the secure field that holds the user's private key. */
|
||||
"Private Key" = "Clave privada";
|
||||
|
||||
/* Dropdown option for selecting Pro plan for DeepL translation service. */
|
||||
"Pro" = "Pro";
|
||||
|
||||
/* Sidebar menu label for Profile view. */
|
||||
"Profile" = "Perfil";
|
||||
|
||||
@@ -422,8 +479,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Relé";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Relés";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -432,6 +488,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button label to remove all participants from a note reply. */
|
||||
"Remove all" = "Eliminar todo";
|
||||
|
||||
/* Accessibility label for reply button */
|
||||
"Reply" = "Responder";
|
||||
|
||||
/* Label to indicate that the user is replying to themself. */
|
||||
"Reply to self" = "Respuesta a sí mismo";
|
||||
|
||||
@@ -482,6 +541,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Context menu option to save an image. */
|
||||
"Save Image" = "Guardar imagen";
|
||||
|
||||
/* Text on QR code view to prompt viewer to scan the QR code on screen with their device camera. */
|
||||
"Scan the code" = "Escanea el código";
|
||||
|
||||
/* Navigation link to search hashtag. */
|
||||
"Search hashtag: #%@" = "Buscar hashtag: #%@";
|
||||
|
||||
@@ -503,6 +565,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Prompt selection of LibreTranslate server to perform machine translations on notes */
|
||||
"Server" = "Servidor";
|
||||
|
||||
/* Prompt selection of translation service provider. */
|
||||
"Service" = "Servicio";
|
||||
|
||||
/* Navigation title for Settings view.
|
||||
Sidebar menu label for accessing the app settings */
|
||||
"Settings" = "Configuración";
|
||||
@@ -526,9 +591,15 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Sidebar menu label to sign out of the account. */
|
||||
"Sign out" = "Cerrar sesión";
|
||||
|
||||
/* Label to display relay software. */
|
||||
"Software" = "Software";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Strike. */
|
||||
"Strike" = "Strike";
|
||||
|
||||
/* Label to display relay's supported NIPs. */
|
||||
"Supported NIPs" = "NIPs soportados";
|
||||
|
||||
/* Button to close out of alert that informs that the action to block a user was successful. */
|
||||
"Thanks!" = "¡Gracias!";
|
||||
|
||||
@@ -547,8 +618,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "Esta es tu clave de cuenta secreta, que necesitas para acceder a tu cuenta. ¡No la compartas con nadie! Guárdala en un administrador de contraseñas y protégela.";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Hilo";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
@@ -557,6 +627,15 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button to indicate that the note has been translated from a different language. */
|
||||
"Translated from (lang)" = "Traducida del (lang)";
|
||||
|
||||
/* Button to indicate that the note is in the process of being translated from a different language. */
|
||||
"Translating from (lang)..." = "Traduciendo del (lang)...";
|
||||
|
||||
/* Section title for selecting the translation service. */
|
||||
"Translations" = "Traducciones";
|
||||
|
||||
/* Text field prompt asking user to type the word DELETE to confirm that they want to proceed with deleting their account. The all caps lock DELETE word should not be translated. Everything else should. */
|
||||
"Type DELETE to delete" = "Escriba \"DELETE\" para eliminar";
|
||||
|
||||
/* Text box prompt to ask user to type their post. */
|
||||
"Type your post here..." = "Escribe tu publicación aquí...";
|
||||
|
||||
@@ -588,6 +667,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Label to prompt username entry. */
|
||||
"Username" = "Nombre de usuario";
|
||||
|
||||
/* Label to display relay software version. */
|
||||
"Version" = "Versión";
|
||||
|
||||
/* Sidebar menu label for Wallet view. */
|
||||
"Wallet" = "Billetera";
|
||||
|
||||
@@ -615,6 +697,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Text of button that confirms to overwrite the existing mutelist. */
|
||||
"Yes, Overwrite" = "Sí, sobrescribir";
|
||||
|
||||
/* Button to proceed with posting a note even though it looks like they might be posting a private key. */
|
||||
"Yes, Post with Private Key" = "Sí, publicar con clave privada";
|
||||
|
||||
/* You, in this context, is the person who controls their own social network. You is used in the context of a larger sentence that welcomes the reader to the social network that they control themself. */
|
||||
"you" = "tú";
|
||||
|
||||
@@ -624,6 +709,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Footer text to inform user what will happen when the report is submitted. */
|
||||
"Your report will be sent to the relays you are connected to" = "El reporte se enviará a los relés con los que tengas conexión";
|
||||
|
||||
/* Accessibility label for zap button */
|
||||
"Zap" = "Zap";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Zebedee. */
|
||||
"Zebedee" = "Zebedee";
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Donnez un pourboire aux publications de vos amis et accumulez les sats avec Bitcoin⚡️, la monnaie native d'Internet.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -147,9 +147,6 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Chatter";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Vider";
|
||||
|
||||
@@ -229,8 +226,7 @@ Number of relay servers a user is connected. */
|
||||
Section title for deleting the user */
|
||||
"Delete" = "Effacer";
|
||||
|
||||
/* Alert for deleting the users account.
|
||||
Button to delete the user's account. */
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "Supprimer votre compte";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
@@ -253,7 +249,7 @@ Number of relay servers a user is connected. */
|
||||
"Done" = "Terminé";
|
||||
|
||||
/* Heading indicating that this application allows users to earn money. */
|
||||
"Earn Money" = "Gagne de l'argent";
|
||||
"Earn Money" = "Gagner de l'argent";
|
||||
|
||||
/* Button to edit user's profile. */
|
||||
"Edit" = "Modifier";
|
||||
@@ -273,6 +269,12 @@ Number of relay servers a user is connected. */
|
||||
/* Label indicating that the below text is the EULA, an acronym for End User License Agreement. */
|
||||
"EULA" = "CLUF";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"EventDetailView" = "EventDetailView";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Filter" = "Filtre";
|
||||
|
||||
/* Button to follow a user. */
|
||||
"Follow" = "S'abonner";
|
||||
|
||||
@@ -404,7 +406,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Rien à voir ici. Revenez plus tard!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Notifications";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -419,12 +421,18 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label indicating that a form input is optional. */
|
||||
"optional" = "optionnel";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Paid Relay" = "Relai payant";
|
||||
|
||||
/* Button to pay a Lightning invoice. */
|
||||
"Pay" = "Payer";
|
||||
|
||||
/* Navigation bar title for view to pay Lightning invoice. */
|
||||
"Pay the Lightning invoice" = "Payer la facture Lightning";
|
||||
|
||||
/* Alert for deleting the users account. */
|
||||
"Permanently Delete Account" = "Supprimer le compte définitivement ";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Phoenix. */
|
||||
"Phoenix" = "Phoenix";
|
||||
|
||||
@@ -483,8 +491,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Relais";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Relais";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -611,6 +618,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button for user to report that the account is impersonating someone. */
|
||||
"They are impersonating someone" = "Ils personnifient quelqu'un";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This is a paid relay, you must pay for posts to be accepted." = "C’est un relai payant, vous devez payer pour que vos publications soient acceptées.";
|
||||
|
||||
/* Warning that the inputted account key is a public key and the result of what happens because of it. */
|
||||
"This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." = "Il s'agit d'une clé publique, vous ne pourrez pas publier de messages ou interagir de quelque manière que ce soit. Ceci est utilisé pour visualiser les comptes de leur point de vue.";
|
||||
|
||||
@@ -623,10 +633,12 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "Il s'agit de votre clé de compte secrète. Vous en aurez besoin pour accéder à votre compte. Ne le partagez avec personne ! Enregistrez-la dans un gestionnaire de mots de passe et gardez-la en sécurité!";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Fil de discussion";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To filter your %@ feed, please choose applicable relays from the list below:" = "Pour filtrer votre fil %@, veuillez choisir les relais applicables dans la liste ci-dessous:";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
"Translate Note" = "Traduire la note";
|
||||
|
||||
@@ -718,6 +730,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Accessibility label for zap button */
|
||||
"Zap" = "Zap";
|
||||
|
||||
/* Navigation bar title for the Zaps view. */
|
||||
"Zaps" = "Zaps";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Zebedee. */
|
||||
"Zebedee" = "Zebedee";
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Paga i tuoi amici e accumula sats con Bitcoin⚡️, la moneta di internet.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -138,9 +138,6 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Chat";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Cancella";
|
||||
|
||||
@@ -349,7 +346,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Niente da vedere qui. Controlla dopo!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Notifiche";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -422,8 +419,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Relay";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Relays";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -547,8 +543,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "Questa è la tua chiave privata. Ti serve ad accedere al tuo account. Non condividerla mai con nessuno! Salvala in un gestore password e tienila al sicuro";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Thread";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
/* Bundle display name */
|
||||
"CFBundleDisplayName" = "Damus";
|
||||
|
||||
/* Bundle name */
|
||||
"CFBundleName" = "damus";
|
||||
|
||||
/* Privacy - Face ID Usage Description */
|
||||
"NSFaceIDUsageDescription" = "秘密鍵にアクセスするためのローカル認証";
|
||||
|
||||
/* Privacy - Photo Library Additions Usage Description */
|
||||
"NSPhotoLibraryAddUsageDescription" = "Damusが画像を保存するためにあなたの写真にアクセスすることを許可する";
|
||||
|
||||
@@ -2,42 +2,41 @@
|
||||
" " = "61b6edf1108e6f396680a33b02486a70_tr";
|
||||
|
||||
/* Description of how the nip05 identifier would be used for verification. */
|
||||
"'%@' at '%@' will be used for verification" = "'%@' at '%@' 将被用于认证";
|
||||
"'%@' at '%@' will be used for verification" = "'%@' at '%@' は認証に使用されています";
|
||||
|
||||
/* Description of why the nip05 identifier is invalid. */
|
||||
"'%@' is an invalid NIP-05 identifier. It should look like an email." = "输入的内容 '%@' 是无效NIP-05标识符。有效输入应当为email格式。";
|
||||
"'%@' is an invalid NIP-05 identifier. It should look like an email." = "'%@' は無効なNIP-05識別子です。emailのような見た目であるべきです。";
|
||||
|
||||
/* Navigation bar title for view that shows who is following a user. */
|
||||
"(Profile.displayName(profile: profile, pubkey: whos))'s Followers" = "(Profile.displayName(profile: profile, pubkey: whos))的粉丝";
|
||||
"(Profile.displayName(profile: profile, pubkey: whos))'s Followers" = "(Profile.displayName(profile: profile, pubkey: whos))のフォロワー";
|
||||
|
||||
/* Navigation bar title for view that shows who a user is following. */
|
||||
"(who) following" = "(who)关注";
|
||||
"(who) following" = "(who) がフォロー中";
|
||||
|
||||
/* Prefix character to username. */
|
||||
"@" = "@";
|
||||
|
||||
/* Amount of time that has passed since reply quote event occurred.
|
||||
Abbreviated version of a nostr public key. */
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence composed of 2 variables to describe how many tip payments there are on a post. In source English, the first variable is the number of tip payments, and the second variable is 'Tip' or 'Tips'.
|
||||
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 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 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
/* Alert message that informs a user was blocked. */
|
||||
"%@ has been blocked" = "%@被拉黑了";
|
||||
"%@ has been blocked" = "%@ はブロックされています";
|
||||
|
||||
/* Explanation of what is done to keep personally identifiable information private. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Creating an account doesn't require a phone number, email or name. Get started right away with zero friction." = "%@. 创建账户无需电话号码、电子邮箱或者姓名。立刻开启丝滑之旅。";
|
||||
"%@. Creating an account doesn't require a phone number, email or name. Get started right away with zero friction." = "%@. アカウントの作成には、電話番号もメールアドレスも名前も必要ありません。すぐに始められます。";
|
||||
|
||||
/* Explanation of what is done to keep private data encrypted. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. End-to-End encrypted private messaging. Keep Big Tech out of your DMs" = "%@. 端到端加密信息,保护你的私信不被科技巨头公司窥视";
|
||||
"%@. End-to-End encrypted private messaging. Keep Big Tech out of your DMs" = "%@. End-to-Endで暗号化されたプライベートなメッセージ。 あなたのDMに巨大IT企業を近づけません。";
|
||||
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. 用互联网原生货币--比特币⚡️来打赏好友的推文并积攒财富。";
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. 友達の投稿にチップを送ろう。インターネットのネイティブ通貨:ビットコイン⚡️で。";
|
||||
|
||||
/* Number of tip payments on a post.
|
||||
Number of profiles a user is following. */
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
/* Fraction of how many of the user's relay servers that are operational. */
|
||||
@@ -46,83 +45,95 @@ Number of profiles a user is following. */
|
||||
/* Placeholder for event mention. */
|
||||
"< e >" = "< e >";
|
||||
|
||||
/* Text indicating the zap amount. i.e. number of satoshis that were tipped to a user */
|
||||
"⚡️ %@" = "⚡️ %@";
|
||||
|
||||
/* Label to prompt for about text entry for user to describe about themself. */
|
||||
"About" = "关于";
|
||||
"About" = "自己紹介";
|
||||
|
||||
/* Label for About Me section of user profile form. */
|
||||
"About Me" = "关于我";
|
||||
"About Me" = "自己紹介";
|
||||
|
||||
/* Placeholder text for About Me description. */
|
||||
"Absolute Boss" = "三界一哥";
|
||||
"Absolute Boss" = "絶対的なボス";
|
||||
|
||||
/* Button to accept the end user license agreement before being allowed into the app. */
|
||||
"Accept" = "接受";
|
||||
"Accept" = "許可";
|
||||
|
||||
/* Label to indicate the public ID of the account. */
|
||||
"Account ID" = "账号ID";
|
||||
"Account ID" = "アカウントID";
|
||||
|
||||
/* Title for confirmation dialog to either share, report, or block a profile. */
|
||||
"Actions" = "动态";
|
||||
"Actions" = "アクション";
|
||||
|
||||
/* Button to add recommended relay server.
|
||||
Button to confirm adding user inputted relay. */
|
||||
"Add" = "添加";
|
||||
"Add" = "追加";
|
||||
|
||||
/* Button label to re-add all original participants as profiles to reply to in a note */
|
||||
"Add all" = "添加全部";
|
||||
"Add all" = "全て追加";
|
||||
|
||||
/* Label for section for adding a relay server. */
|
||||
"Add Relay" = "添加中继器";
|
||||
"Add Relay" = "Relayを追加";
|
||||
|
||||
/* Label to display relay contact user. */
|
||||
"Admin" = "管理者";
|
||||
|
||||
/* Any amount of sats */
|
||||
"Any" = "任意";
|
||||
"Any" = "Any";
|
||||
|
||||
/* Example URL to LibreTranslate server */
|
||||
"API Key (optional)" = "API Key (可选)";
|
||||
/* Prompt for optional entry of API Key to use translation server. */
|
||||
"API Key (optional)" = "APIキー (任意)";
|
||||
|
||||
/* Prompt for required entry of API Key to use translation server. */
|
||||
"API Key (required)" = "APIキー (必須)";
|
||||
|
||||
/* Alert message to ask if user wants to repost a post. */
|
||||
"Are you sure you want to repost this?" = "确定转发吗?";
|
||||
"Are you sure you want to repost this?" = "本当にリポストしますか?";
|
||||
|
||||
/* Label for Banner Image section of user profile form. */
|
||||
"Banner Image" = "主页背景图片";
|
||||
"Banner Image" = "バナー画像";
|
||||
|
||||
/* Reminder to user that they should save their account information. */
|
||||
"Before we get started, you'll need to save your account info, otherwise you won't be able to login in the future if you ever uninstall Damus." = "请先保存您的账户信息!否则您将在登出或卸载后无法重新登陆大麦子。";
|
||||
"Before we get started, you'll need to save your account info, otherwise you won't be able to login in the future if you ever uninstall Damus." = "始める前に、あなたのアカウント情報を保存しておく必要があります。もし保存しなかった場合、Damusをアンインストールすると今後ログインできなくなります。";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Bitcoin Beach. */
|
||||
"Bitcoin Beach" = "Bitcoin Beach";
|
||||
|
||||
/* Label for Bitcoin Lightning Tips section of user profile form. */
|
||||
"Bitcoin Lightning Tips" = "Bitcoin Lightning Tips";
|
||||
"Bitcoin Lightning Tips" = "Bitcoin Lightning チップ";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Blixt Wallet */
|
||||
"Blixt Wallet" = "Blixt钱包";
|
||||
"Blixt Wallet" = "Blixt Wallet";
|
||||
|
||||
/* Alert button to block a user.
|
||||
Button to block a profile.
|
||||
Context menu option for blocking users. */
|
||||
"Block" = "拉黑";
|
||||
"Block" = "ブロック";
|
||||
|
||||
/* Alert message prompt to ask if a user should be blocked. */
|
||||
"Block %@?" = "拉黑%@?";
|
||||
"Block %@?" = "%@をブロックしますか?";
|
||||
|
||||
/* Title of alert for blocking a user. */
|
||||
"Block User" = "拉黑用户";
|
||||
"Block User" = "ユーザーをブロック";
|
||||
|
||||
/* Sidebar menu label for Profile view. */
|
||||
"Blocked" = "已拉黑";
|
||||
"Blocked" = "ブロック中";
|
||||
|
||||
/* Navigation title of view to see list of blocked users. */
|
||||
"Blocked Users" = "拉黑用户";
|
||||
"Blocked Users" = "ブロックしたユーザー";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Blue Wallet. */
|
||||
"Blue Wallet" = "Blue Wallet";
|
||||
|
||||
/* Accessibility label for boosts button */
|
||||
"Boosts" = "ブースト";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Breez. */
|
||||
"Breez" = "Breez";
|
||||
|
||||
/* Context menu option for broadcasting the user's note to all of the user's connected relay servers. */
|
||||
"Broadcast" = "广播";
|
||||
"Broadcast" = "ブロードキャスト";
|
||||
|
||||
/* Alert button to cancel out of alert for blocking a user.
|
||||
Button to cancel out of alert that creates a new mutelist.
|
||||
@@ -131,154 +142,182 @@ Number of profiles a user is following. */
|
||||
Button to cancel out of view adding user inputted relay.
|
||||
Cancel deleting the user.
|
||||
Cancel out of logging out the user. */
|
||||
"Cancel" = "取消";
|
||||
"Cancel" = "キャンセル";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "聊天";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "清除";
|
||||
"Clear" = "削除";
|
||||
|
||||
/* Section title for clearing cached data. */
|
||||
"Clear Cache" = "清除缓存";
|
||||
"Clear Cache" = "キャッシュを削除";
|
||||
|
||||
/* Label to display relay contact information. */
|
||||
"Contact" = "連絡先";
|
||||
|
||||
/* Label indicating that a user's key was copied. */
|
||||
"Copied" = "已复制";
|
||||
"Copied" = "コピー完了";
|
||||
|
||||
/* Button to copy a relay server address. */
|
||||
"Copy" = "复制";
|
||||
"Copy" = "コピー";
|
||||
|
||||
/* Context menu option for copying the ID of the account that created the note. */
|
||||
"Copy Account ID" = "复制账户ID";
|
||||
"Copy Account ID" = "アカウントIDをコピー";
|
||||
|
||||
/* Context menu option to copy an image into clipboard.
|
||||
Context menu option to copy an image to clipboard. */
|
||||
"Copy Image" = "复制图片";
|
||||
"Copy Image" = "画像をコピー";
|
||||
|
||||
/* Context menu option to copy the URL of an image into clipboard. */
|
||||
"Copy Image URL" = "复制图片URL地址";
|
||||
"Copy Image URL" = "画像URLをコピー";
|
||||
|
||||
/* Title of section for copying a Lightning invoice identifier. */
|
||||
"Copy invoice" = "复制发票";
|
||||
"Copy invoice" = "インボイスをコピー";
|
||||
|
||||
/* Context menu option for copying a user's Lightning URL. */
|
||||
"Copy LNURL" = "复制LNURL";
|
||||
"Copy LNURL" = "LNURLをコピー";
|
||||
|
||||
/* Context menu option for copying the ID of the note. */
|
||||
"Copy Note ID" = "复制此条推文ID";
|
||||
"Copy Note ID" = "Note IDをコピー";
|
||||
|
||||
/* Context menu option for copying the JSON text from the note. */
|
||||
"Copy Note JSON" = "复制此条推文JSON";
|
||||
"Copy Note JSON" = "Note JSONをコピー";
|
||||
|
||||
/* Button to copy report ID. */
|
||||
"Copy Report ID" = "复制举报记录ID";
|
||||
"Copy Report ID" = "通報IDをコピー";
|
||||
|
||||
/* Context menu option for copying the text from an note. */
|
||||
"Copy Text" = "复制文本";
|
||||
"Copy Text" = "テキストをコピー";
|
||||
|
||||
/* Context menu option for copying the ID of the user who created the note. */
|
||||
"Copy User Pubkey" = "复制用户公钥Pubkey";
|
||||
"Copy User Pubkey" = "ユーザーの公開鍵をコピー";
|
||||
|
||||
/* Alert message to indicate that the blocked user could not be found. */
|
||||
"Could not find user to block..." = "找不到可拉黑用户";
|
||||
"Could not find user to block..." = "ブロック対象のユーザーが見つかりませんでした...";
|
||||
|
||||
/* Button to create account. */
|
||||
"Create" = "创建";
|
||||
"Create" = "作成";
|
||||
|
||||
/* Button to create an account. */
|
||||
"Create Account" = "创建账户";
|
||||
"Create Account" = "アカウントを作成";
|
||||
|
||||
/* Title of alert prompting the user to create a new mutelist. */
|
||||
"Create new mutelist" = "创建新的屏蔽列表";
|
||||
"Create new mutelist" = "新しいミュートリストを作成する";
|
||||
|
||||
/* Example description about Bitcoin creator(s), Satoshi Nakamoto. */
|
||||
"Creator(s) of Bitcoin. Absolute legend." = "传奇的比特币创始人";
|
||||
"Creator(s) of Bitcoin. Absolute legend." = "ビットコインの発明者(達)。紛れもないレジェンド。";
|
||||
|
||||
/* Dropdown option for selecting a custom translation server. */
|
||||
"Custom" = "自定义";
|
||||
"Custom" = "カスタム";
|
||||
|
||||
/* Name of the app, shown on the first screen when user is not logged in. */
|
||||
"Damus" = "大麦子";
|
||||
"Damus" = "Damus";
|
||||
|
||||
/* Dropdown option for selecting DeepL as the translation service. */
|
||||
"DeepL (Proprietary, Higher Accuracy)" = "DeepL (プロプライエタリ, より高精度)";
|
||||
|
||||
/* Button to pay a Lightning invoice with the user's default Lightning wallet. */
|
||||
"Default Wallet" = "默认钱包";
|
||||
"Default Wallet" = "デフォルトウォレット";
|
||||
|
||||
/* Button for deleting the users account.
|
||||
Button to delete a relay server that the user connects to.
|
||||
Button to remove a user from their blocklist.
|
||||
Section title for deleting the user */
|
||||
"Delete" = "删除";
|
||||
"Delete" = "削除";
|
||||
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "アカウントを削除";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
"Deleted Account" = "削除されたアカウント";
|
||||
|
||||
/* Label to display relay description. */
|
||||
"Description" = "詳細";
|
||||
|
||||
/* Button to dismiss a text field alert. */
|
||||
"Dismiss" = "忽略";
|
||||
"Dismiss" = "却下";
|
||||
|
||||
/* Label to prompt display name entry. */
|
||||
"Display Name" = "昵称";
|
||||
"Display Name" = "表示名";
|
||||
|
||||
/* Navigation title for DMs view, where DM is the English abbreviation for Direct Message.
|
||||
Navigation title for view of DMs, where DM is an English abbreviation for Direct Message. */
|
||||
"DMs" = "私信";
|
||||
"DMs" = "メッセージ";
|
||||
|
||||
/* Button to dismiss wallet selection view for paying Lightning invoice. */
|
||||
"Done" = "完成";
|
||||
"Done" = "完了";
|
||||
|
||||
/* Heading indicating that this application allows users to earn money. */
|
||||
"Earn Money" = "赚钱";
|
||||
"Earn Money" = "Earn Money";
|
||||
|
||||
/* Button to edit user's profile. */
|
||||
"Edit" = "编辑";
|
||||
"Edit" = "編集";
|
||||
|
||||
/* Text indicating that the view is used for editing which participants are replied to in a note. */
|
||||
"Edit participants" = "编辑参加者列表";
|
||||
"Edit participants" = "参加者を編集";
|
||||
|
||||
/* Heading indicating that this application keeps private messaging end-to-end encrypted. */
|
||||
"Encrypted" = "已加密";
|
||||
"Encrypted" = "暗号化されています";
|
||||
|
||||
/* Prompt for user to enter an account key to login. */
|
||||
"Enter your account key to login:" = "输入您的账户key以登陆:";
|
||||
"Enter your account key to login:" = "ログイン用のアカウントキーを入力してください:";
|
||||
|
||||
/* Error message indicating why saving keys failed. */
|
||||
"Error: %@" = "错误:%@";
|
||||
"Error: %@" = "エラー: %@";
|
||||
|
||||
/* Label indicating that the below text is the EULA, an acronym for End User License Agreement. */
|
||||
"EULA" = "用户条款";
|
||||
"EULA" = "EULA";
|
||||
|
||||
/* Button to follow a user. */
|
||||
"Follow" = "关注";
|
||||
"Follow" = "フォローする";
|
||||
|
||||
/* Button to follow a user back. */
|
||||
"Follow Back" = "フォローバックする";
|
||||
|
||||
/* Text on QR code view to prompt viewer looking at screen to follow the user. */
|
||||
"Follow me on nostr" = "nostrでフォローしてね";
|
||||
|
||||
/* Label describing followers of a user. */
|
||||
"Followers" = "粉丝";
|
||||
"Followers" = "フォロワー";
|
||||
|
||||
/* Text to indicate that the button next to it is in a state that indicates that it is in the process of following a profile.
|
||||
Part of a larger sentence to describe how many profiles a user is following. */
|
||||
"Following" = "已关注";
|
||||
"Following" = "フォロー中";
|
||||
|
||||
/* Label to indicate that the user is in the process of following another user. */
|
||||
"Following..." = "关注中...";
|
||||
"Following..." = "フォローしています...";
|
||||
|
||||
/* Text to indicate that button next to it is in a state that will follow a profile when tapped. */
|
||||
"Follows" = "关注";
|
||||
"Follows" = "フォロー";
|
||||
|
||||
/* Text to indicate that a user is following your profile. */
|
||||
"Follows you" = "フォローされています";
|
||||
|
||||
/* Dropdown option for selecting Free plan for DeepL translation service. */
|
||||
"Free" = "Free";
|
||||
|
||||
/* Button to navigate to DeepL website to get a translation API key. */
|
||||
"Get API Key" = "APIキーを取得";
|
||||
|
||||
/* Navigation bar title for Global view where posts from all connected relay servers appear. */
|
||||
"Global" = "广场";
|
||||
"Global" = "グローバル";
|
||||
|
||||
/* Navigation link to go to post referenced by hex code. */
|
||||
"Goto post %@" = "查看推文%@";
|
||||
"Goto post %@" = "投稿へ %@";
|
||||
|
||||
/* Navigation link to go to profile. */
|
||||
"Goto profile %@" = "查看用户%@";
|
||||
"Goto profile %@" = "プロフィールへ %@";
|
||||
|
||||
/* Button to hide a post from a user who has been blocked. */
|
||||
"Hide" = "隐藏";
|
||||
"Hide" = "非表示";
|
||||
|
||||
/* Button to hide the LibreTranslate server API key. */
|
||||
"Hide API Key" = "隐藏API Key";
|
||||
/* Button to hide the DeepL translation API key.
|
||||
Button to hide the LibreTranslate server API key. */
|
||||
"Hide API Key" = "APIキーを非表示にする";
|
||||
|
||||
/* Navigation bar title for Home view where posts and replies appear from those who the user is following. */
|
||||
"Home" = "主页";
|
||||
"Home" = "ホーム";
|
||||
|
||||
/* Placeholder example text for profile picture URL. */
|
||||
"https://example.com/pic.jpg" = "https://example.com/pic.jpg";
|
||||
@@ -287,339 +326,391 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
"https://jb55.com" = "https://jb55.com";
|
||||
|
||||
/* Button for user to report that the account or content has illegal content. */
|
||||
"Illegal content" = "违规内容";
|
||||
"Illegal content" = "違法なコンテンツ";
|
||||
|
||||
/* Error message indicating that an invalid account key was entered for login. */
|
||||
"Invalid key" = "无效的key";
|
||||
"Invalid key" = "無効なキー";
|
||||
|
||||
/* Button for user to report that the account or content has spam. */
|
||||
"It's spam" = "这是垃圾信息";
|
||||
"It's spam" = "これはスパムです";
|
||||
|
||||
/* Placeholder example text for identifier used for NIP-05 verification. */
|
||||
"jb55@jb55.com" = "jb55@jb55.com";
|
||||
|
||||
/* Moves the post button to the left side of the screen */
|
||||
"Left Handed" = "左撇子界面";
|
||||
"Left Handed" = "左利きモード";
|
||||
|
||||
/* Button to complete account creation and start using the app. */
|
||||
"Let's go!" = "开启旅程!";
|
||||
"Let's go!" = "Let's go!";
|
||||
|
||||
/* Section title for selecting the server that hosts the LibreTranslate machine translation API. */
|
||||
"LibreTranslate Translations" = "LibreTranslate Translations";
|
||||
/* Dropdown option for selecting LibreTranslate as the translation service. */
|
||||
"LibreTranslate (Open Source)" = "LibreTranslate (オープンソース)";
|
||||
|
||||
/* Placeholder text for entry of Lightning Address or LNURL. */
|
||||
"Lightning Address or LNURL" = "闪电地址或LNURL";
|
||||
"Lightning Address or LNURL" = "Lightning Address または LNURL";
|
||||
|
||||
/* Indicates that the view is for paying a Lightning invoice. */
|
||||
"Lightning Invoice" = "闪电发票";
|
||||
"Lightning Invoice" = "Lightning Invoice";
|
||||
|
||||
/* Accessibility Label for Like button */
|
||||
"Like" = "いいね";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, LNLink. */
|
||||
"LNLink" = "LNLink";
|
||||
|
||||
/* Face ID usage description shown when trying to access private key */
|
||||
"Local authentication to access private key" = "秘密鍵にアクセスするためのローカル認証";
|
||||
|
||||
/* Dropdown option label for system default for Lightning wallet. */
|
||||
"Local default" = "本地默认";
|
||||
"Local default" = "ローカルのデフォルト";
|
||||
|
||||
/* Button to log into account.
|
||||
Button to log into an account. */
|
||||
"Login" = "登陆";
|
||||
"Login" = "ログイン";
|
||||
|
||||
/* Alert for logging out the user.
|
||||
Button for logging out the user.
|
||||
Button to close the alert that informs that the current account has been deleted. */
|
||||
"Logout" = "登出";
|
||||
"Logout" = "ログアウト";
|
||||
|
||||
/* Reminder message in alert to get customer to verify that their private security account key is saved saved before logging out. */
|
||||
"Make sure your nsec account key is saved before you logout or you will lose access to this account" = "请确保您已经保存好nsec account key账户私钥!否则登出后您将无法重新访问您的账户。";
|
||||
"Make sure your nsec account key is saved before you logout or you will lose access to this account" = "ログアウト前にあなたのnsec秘密鍵を保存していることを確認してください。保存していない場合、アカウントへのアクセスを失うことになります。";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Muun. */
|
||||
"Muun" = "Muun";
|
||||
|
||||
/* Label for NIP-05 Verification section of user profile form. */
|
||||
"NIP-05 Verification" = "NIP-05认证";
|
||||
"NIP-05 Verification" = "NIP-05検証";
|
||||
|
||||
/* Button to cancel out of posting a note after being alerted that it looks like they might be posting a private key. */
|
||||
"No" = "中断する";
|
||||
|
||||
/* Alert message prompt that asks if the user wants to create a new block list, overwriting previous block lists. */
|
||||
"No block list found, create a new one? This will overwrite any previous block lists." = "没有找到黑名单,是否创建新黑名单?先前的黑名单将被覆盖。";
|
||||
"No block list found, create a new one? This will overwrite any previous block lists." = "ブロックリストが見つかりませんでした。新しく作成しますか?これは以前のブロックリストを上書きします。";
|
||||
|
||||
/* No search results. */
|
||||
"none" = "无结果";
|
||||
"none" = "該当なし";
|
||||
|
||||
/* Dropdown option for selecting no translation server. */
|
||||
"None" = "无";
|
||||
/* Dropdown option for selecting no translation service. */
|
||||
"None" = "利用しない";
|
||||
|
||||
/* Alert user that they might be attempting to paste a private key and ask them to confirm. */
|
||||
"Note contains \"nsec1\" private key. Are you sure?" = "投稿に \"nsec1\" 秘密鍵が含まれています。本当に続けますか?";
|
||||
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "暂无内容,请稍后重试。";
|
||||
"Nothing to see here. Check back later!" = "まだ何もないようです。また後で見に来てね!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "通知";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
"now" = "现在";
|
||||
"now" = "たった今";
|
||||
|
||||
/* Prompt for user to enter in an account key to login. This text shows the characters the key could start with if it was a private key. */
|
||||
"nsec1..." = "nsec1...";
|
||||
|
||||
/* Button for user to report that the account or content has nudity or explicit content. */
|
||||
"Nudity or explicit content" = "裸体或暴露的内容";
|
||||
"Nudity or explicit content" = "ヌードまたは露骨なコンテンツ";
|
||||
|
||||
/* Label indicating that a form input is optional. */
|
||||
"optional" = "选填";
|
||||
"optional" = "任意";
|
||||
|
||||
/* Button to pay a Lightning invoice. */
|
||||
"Pay" = "支付";
|
||||
"Pay" = "支払う";
|
||||
|
||||
/* Navigation bar title for view to pay Lightning invoice. */
|
||||
"Pay the Lightning invoice" = "支付闪电发票";
|
||||
"Pay the Lightning invoice" = "Lightning invoiceを支払う";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Phoenix. */
|
||||
"Phoenix" = "Phoenix";
|
||||
|
||||
/* Prompt selection of DeepL subscription plan to perform machine translations on notes */
|
||||
"Plan" = "プラン";
|
||||
|
||||
/* Button to post a note. */
|
||||
"Post" = "发布";
|
||||
"Post" = "投稿する";
|
||||
|
||||
/* Text to indicate that what is being shown is a post from a user who has been blocked. */
|
||||
"Post from a user you've blocked" = "该推文来自已拉黑用户";
|
||||
"Post from a user you've blocked" = "あなたがブロックしたユーザーの投稿";
|
||||
|
||||
/* Label for filter for seeing only posts (instead of posts and replies). */
|
||||
"Posts" = "推文";
|
||||
"Posts" = "投稿";
|
||||
|
||||
/* Label for filter for seeing posts and replies (instead of only posts). */
|
||||
"Posts & Replies" = "推文与回复";
|
||||
"Posts & Replies" = "投稿とリプライ";
|
||||
|
||||
/* Heading indicating that this application keeps personally identifiable information private. A sentence describing what is done to keep data private comes after this heading. */
|
||||
"Private" = "私密";
|
||||
"Private" = "プライベート";
|
||||
|
||||
/* Title of the secure field that holds the user's private key. */
|
||||
"Private Key" = "私钥";
|
||||
"Private Key" = "秘密鍵";
|
||||
|
||||
/* Dropdown option for selecting Pro plan for DeepL translation service. */
|
||||
"Pro" = "Pro";
|
||||
|
||||
/* Sidebar menu label for Profile view. */
|
||||
"Profile" = "我的档案";
|
||||
"Profile" = "プロフィール";
|
||||
|
||||
/* Label for Profile Picture section of user profile form. */
|
||||
"Profile Picture" = "头像";
|
||||
"Profile Picture" = "プロフィール画像";
|
||||
|
||||
/* Section title for the user's public account ID. */
|
||||
"Public Account ID" = "公开账号ID";
|
||||
"Public Account ID" = "パブリックアカウントID";
|
||||
|
||||
/* Label indicating that the text is a user's public account key. */
|
||||
"Public key" = "公钥Public Key";
|
||||
"Public key" = "公開鍵";
|
||||
|
||||
/* Label indicating that the text is a user's public account key. */
|
||||
"Public Key" = "公钥Public Key";
|
||||
"Public Key" = "公開鍵";
|
||||
|
||||
/* Prompt to ask user if the key they entered is a public key. */
|
||||
"Public Key?" = "输入的是公钥Public Key吗?";
|
||||
"Public Key?" = "公開鍵ですか?";
|
||||
|
||||
/* Navigation bar title for Reactions view. */
|
||||
"Reactions" = "回应";
|
||||
"Reactions" = "リアクション";
|
||||
|
||||
/* Section title for recommend relay servers that could be added as part of configuration */
|
||||
"Recommended Relays" = "推荐的中继器";
|
||||
"Recommended Relays" = "推奨のリレーサーバー";
|
||||
|
||||
/* Button to reject the end user license agreement, which disallows the user from being let into the app. */
|
||||
"Reject" = "拒绝";
|
||||
"Reject" = "却下";
|
||||
|
||||
/* Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "中继器";
|
||||
/* Label to display relay address.
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "リレー";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
"Relays" = "中继器";
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "リレー";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
"Relays have been notified and clients will be able to use this information to filter content. Thank you!" = "已通知中继器。其他用户将可以使用该信息过滤内容。谢谢!";
|
||||
"Relays have been notified and clients will be able to use this information to filter content. Thank you!" = "リレーに通報が通知され、クライアントはこの情報を使ってコンテンツをフィルタリングすることができるようになります。ありがとうございます!";
|
||||
|
||||
/* Button label to remove all participants from a note reply. */
|
||||
"Remove all" = "移除全部";
|
||||
"Remove all" = "全て削除";
|
||||
|
||||
/* Accessibility label for reply button */
|
||||
"Reply" = "リプライ";
|
||||
|
||||
/* Label to indicate that the user is replying to themself. */
|
||||
"Reply to self" = "自回复";
|
||||
"Reply to self" = "自分にリプライ";
|
||||
|
||||
/* Label to indicate that the user is replying to 2 users. */
|
||||
"Replying to %@ & %@" = "正在回复%1$@ & %2$@";
|
||||
"Replying to %@ & %@" = "%1$@ と %2$@ にリプライ";
|
||||
|
||||
/* Indicating that the user is replying to the following listed people. */
|
||||
"Replying to:" = "正在回复:";
|
||||
"Replying to:" = "リプライ先:";
|
||||
|
||||
/* Button to report a profile.
|
||||
Context menu option for reporting content. */
|
||||
"Report" = "举报";
|
||||
"Report" = "通報";
|
||||
|
||||
/* Label indicating that the text underneath is the identifier of the report that was sent to relay servers. */
|
||||
"Report ID:" = "举报记录ID:";
|
||||
"Report ID:" = "通報ID:";
|
||||
|
||||
/* Message indicating that a report was successfully sent to relay servers. */
|
||||
"Report sent!" = "举报成功!";
|
||||
"Report sent!" = "通報が送信されました!";
|
||||
|
||||
/* Button to confirm reposting a post.
|
||||
Title of alert for confirming to repost a post. */
|
||||
"Repost" = "转发";
|
||||
"Repost" = "リポスト";
|
||||
|
||||
/* Text indicating that the post was reposted (i.e. re-shared). */
|
||||
"Reposted" = "已转发";
|
||||
"Reposted" = "リポストされました";
|
||||
|
||||
/* Navigation bar title for Reposts view. */
|
||||
"Reposts" = "转发";
|
||||
"Reposts" = "リポスト";
|
||||
|
||||
/* Picker option for DM selector for seeing only message requests (DMs that someone else sent the user which has not been responded to yet). DM is the English abbreviation for Direct Message. */
|
||||
"Requests" = "请求";
|
||||
"Requests" = "リクエスト";
|
||||
|
||||
/* Button to retry completing account creation after an error occurred. */
|
||||
"Retry" = "重试";
|
||||
"Retry" = "リトライ";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, River */
|
||||
"River" = "River";
|
||||
|
||||
/* Example username of Bitcoin creator(s), Satoshi Nakamoto. */
|
||||
"satoshi" = "satoshi";
|
||||
"satoshi" = "サトシ";
|
||||
|
||||
/* Name of Bitcoin creator(s). */
|
||||
"Satoshi Nakamoto" = "Satoshi Nakamoto";
|
||||
"Satoshi Nakamoto" = "サトシ・ナカモト";
|
||||
|
||||
/* Button for saving profile. */
|
||||
"Save" = "保存";
|
||||
|
||||
/* Context menu option to save an image. */
|
||||
"Save Image" = "保存图片";
|
||||
"Save Image" = "画像を保存する";
|
||||
|
||||
/* Text on QR code view to prompt viewer to scan the QR code on screen with their device camera. */
|
||||
"Scan the code" = "QRコードをスキャン";
|
||||
|
||||
/* Navigation link to search hashtag. */
|
||||
"Search hashtag: #%@" = "热搜词:#%@";
|
||||
"Search hashtag: #%@" = "ハッシュタグを検索: #%@";
|
||||
|
||||
/* Placeholder text to prompt entry of search query. */
|
||||
"Search..." = "搜索...";
|
||||
"Search..." = "検索する...";
|
||||
|
||||
/* Section title for user's secret account login key. */
|
||||
"Secret Account Login Key" = "账户私钥";
|
||||
"Secret Account Login Key" = "ログイン用秘密鍵";
|
||||
|
||||
/* Title of section for selecting a Lightning wallet to pay a Lightning invoice. */
|
||||
"Select a Lightning wallet" = "选择一个闪电钱包";
|
||||
"Select a Lightning wallet" = "Lightningウォレットを選択";
|
||||
|
||||
/* Prompt selection of user's default wallet */
|
||||
"Select default wallet" = "选择默认钱包";
|
||||
"Select default wallet" = "デフォルトのウォレットを選択";
|
||||
|
||||
/* Text prompt for user to send a message to the other user. */
|
||||
"Send a message to start the conversation..." = "发送信息来开启聊天吧...";
|
||||
"Send a message to start the conversation..." = "会話を開始するにはメッセージを送信してください...";
|
||||
|
||||
/* Prompt selection of LibreTranslate server to perform machine translations on notes */
|
||||
"Server" = "服务器";
|
||||
"Server" = "サーバー";
|
||||
|
||||
/* Prompt selection of translation service provider. */
|
||||
"Service" = "サービス";
|
||||
|
||||
/* Navigation title for Settings view.
|
||||
Sidebar menu label for accessing the app settings */
|
||||
"Settings" = "设置";
|
||||
"Settings" = "設定";
|
||||
|
||||
/* Button to share an image.
|
||||
/* Button to share a post
|
||||
Button to share an image.
|
||||
Button to share the link to a profile. */
|
||||
"Share" = "分享";
|
||||
"Share" = "共有";
|
||||
|
||||
/* Button to show a post from a user who has been blocked.
|
||||
Toggle to show or hide user's secret account login key. */
|
||||
"Show" = "显示";
|
||||
"Show" = "表示";
|
||||
|
||||
/* Button to hide the LibreTranslate server API key. */
|
||||
"Show API Key" = "显示API Key";
|
||||
/* Button to show the DeepL translation API key.
|
||||
Button to show the LibreTranslate server API key. */
|
||||
"Show API Key" = "APIキーを表示";
|
||||
|
||||
/* Toggle to show or hide selection of wallet. */
|
||||
"Show wallet selector" = "显示钱包选择";
|
||||
"Show wallet selector" = "ウォレット選択を表示";
|
||||
|
||||
/* Sidebar menu label to sign out of the account. */
|
||||
"Sign out" = "登出";
|
||||
"Sign out" = "サインアウト";
|
||||
|
||||
/* Label to display relay software. */
|
||||
"Software" = "ソフトウェア";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Strike. */
|
||||
"Strike" = "Strike";
|
||||
|
||||
/* Label to display relay's supported NIPs. */
|
||||
"Supported NIPs" = "対応しているNIP";
|
||||
|
||||
/* Button to close out of alert that informs that the action to block a user was successful. */
|
||||
"Thanks!" = "谢谢!";
|
||||
"Thanks!" = "ありがとう!";
|
||||
|
||||
/* Button for user to report that the account is impersonating someone. */
|
||||
"They are impersonating someone" = "抄袭模仿他人";
|
||||
"They are impersonating someone" = "誰かになりすましています";
|
||||
|
||||
/* Warning that the inputted account key is a public key and the result of what happens because of it. */
|
||||
"This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." = "这是一个公钥。您无法使用公钥发布推文或进行其他交互。您只可以从该用户视角查看此账户。";
|
||||
"This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." = "これは公開鍵で、投稿などの操作は一切できません。入力された公開鍵の視点で投稿を見るために使用します。";
|
||||
|
||||
/* Warning that the inputted account key for login is an old-style and asking user to verify if it is a public key. */
|
||||
"This is an old-style nostr key. We're not sure if it's a pubkey or private key. Please toggle the button below if this a public key." = "这是一个老式nostr key。系统无法确定这是公钥还是私钥。如果是公钥,请点击下面的按钮切换。";
|
||||
"This is an old-style nostr key. We're not sure if it's a pubkey or private key. Please toggle the button below if this a public key." = "これは古い形式のnostrキーです。公開鍵または秘密鍵かどうかの判別が出来ません。公開鍵の場合は下のボタンをトグルしてください。";
|
||||
|
||||
/* Label to describe that a public key is the user's account ID and what they can do with it. */
|
||||
"This is your account ID, you can give this to your friends so that they can follow you. Click to copy." = "这是您的账号ID。您可以把账号ID分享给朋友来邀请他们关注您。点击复制";
|
||||
"This is your account ID, you can give this to your friends so that they can follow you. Click to copy." = "これはあなたのアカウントIDで、これを友達に共有すれば、友達はあなたをフォローできます。クリックしてコピー。";
|
||||
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "这是您的秘密私钥。您需要用这个私钥来访问您的账户。您可以用密码管理器或者其他安全的方式保管您的私钥。切记不要把私钥透露给任何人!";
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "これがあなたの秘密鍵です。アカウントにアクセスするにはこれが必要になります。誰にも共有しないでください!パスワードマネージャーに保存して、安全に管理してください!";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
"Thread" = "推文链";
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "スレッド";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
"Translate Note" = "翻译推文";
|
||||
"Translate Note" = "翻訳する";
|
||||
|
||||
/* Button to indicate that the note has been translated from a different language. */
|
||||
"Translated from (languageName!)" = "翻译自 (languageName!)";
|
||||
"Translated from (lang)" = "(lang) からの翻訳";
|
||||
|
||||
/* Button to indicate that the note is in the process of being translated from a different language. */
|
||||
"Translating from (lang)..." = "(lang) から翻訳しています...";
|
||||
|
||||
/* Section title for selecting the translation service. */
|
||||
"Translations" = "翻訳サービス";
|
||||
|
||||
/* Text field prompt asking user to type the word DELETE to confirm that they want to proceed with deleting their account. The all caps lock DELETE word should not be translated. Everything else should. */
|
||||
"Type DELETE to delete" = "削除するには DELETE と入力してください";
|
||||
|
||||
/* Text box prompt to ask user to type their post. */
|
||||
"Type your post here..." = "说点什么呢...";
|
||||
"Type your post here..." = "投稿をここに入力...";
|
||||
|
||||
/* Non-breaking space character to fill in blank space next to event action button icons. */
|
||||
"u{00A0}" = "u{00A0}";
|
||||
|
||||
/* Button to unfollow a user. */
|
||||
"Unfollow" = "取消关注";
|
||||
"Unfollow" = "フォロー解除";
|
||||
|
||||
/* Text to indicate that the button next to it is in a state that indicates that it is in the process of unfollowing a profile. */
|
||||
"Unfollowing" = "取消关注";
|
||||
"Unfollowing" = "フォロー解除中";
|
||||
|
||||
/* Label to indicate that the user is in the process of unfollowing another user. */
|
||||
"Unfollowing..." = "取消关注...";
|
||||
"Unfollowing..." = "フォローを解除しています...";
|
||||
|
||||
/* Text to indicate that the button next to it is in a state that will unfollow a profile when tapped. */
|
||||
"Unfollows" = "取消关注";
|
||||
"Unfollows" = "フォロー解除";
|
||||
|
||||
/* Example URL to LibreTranslate server */
|
||||
"URL" = "URL";
|
||||
|
||||
/* Alert message to indicate the user has been blocked */
|
||||
"User blocked" = "用户已被拉黑";
|
||||
"User blocked" = "ユーザーをブロックしました";
|
||||
|
||||
/* Alert message that informs a user was blocked. */
|
||||
"User has been blocked" = "用户已被拉黑";
|
||||
"User has been blocked" = "ユーザーはブロックされています";
|
||||
|
||||
/* Label for Username section of user profile form.
|
||||
Label to prompt username entry. */
|
||||
"Username" = "用户名";
|
||||
"Username" = "ユーザー名";
|
||||
|
||||
/* Label to display relay software version. */
|
||||
"Version" = "バージョン";
|
||||
|
||||
/* Sidebar menu label for Wallet view. */
|
||||
"Wallet" = "钱包";
|
||||
"Wallet" = "ウォレット";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Wallet of Satoshi. */
|
||||
"Wallet of Satoshi" = "Wallet of Satoshi";
|
||||
|
||||
/* Section title for selection of wallet. */
|
||||
"Wallet Selector" = "选择钱包";
|
||||
"Wallet Selector" = "ウォレットを選択";
|
||||
|
||||
/* Label for Website section of user profile form. */
|
||||
"Website" = "网站";
|
||||
"Website" = "ウェブサイト";
|
||||
|
||||
/* Welcoming message to the reader. The variable is 'you', the reader. */
|
||||
"Welcome to the social network %@ control." = "欢迎来到由%@控制的社交网络。";
|
||||
"Welcome to the social network %@ control." = "あなたがコントロールするSNSへようこそ。";
|
||||
|
||||
/* Text to welcome user. */
|
||||
"Welcome, %@!" = "欢迎,%@!";
|
||||
"Welcome, %@!" = "ようこそ, %@!";
|
||||
|
||||
/* Header text to prompt user what issue they want to report. */
|
||||
"What do you want to report?" = "您希望举报什么问题?";
|
||||
"What do you want to report?" = "通報したい項目は何ですか?";
|
||||
|
||||
/* Placeholder example for relay server address. */
|
||||
"wss://some.relay.com" = "wss://some.relay.com";
|
||||
|
||||
/* Text of button that confirms to overwrite the existing mutelist. */
|
||||
"Yes, Overwrite" = "确定覆盖";
|
||||
"Yes, Overwrite" = "はい、上書きします";
|
||||
|
||||
/* Button to proceed with posting a note even though it looks like they might be posting a private key. */
|
||||
"Yes, Post with Private Key" = "はい、秘密鍵を投稿します";
|
||||
|
||||
/* You, in this context, is the person who controls their own social network. You is used in the context of a larger sentence that welcomes the reader to the social network that they control themself. */
|
||||
"you" = "你";
|
||||
"you" = "あなた";
|
||||
|
||||
/* Label for Your Name section of user profile form. */
|
||||
"Your Name" = "名字";
|
||||
"Your Name" = "あなたの名前";
|
||||
|
||||
/* Footer text to inform user what will happen when the report is submitted. */
|
||||
"Your report will be sent to the relays you are connected to" = "您的举报将被发送到您已连接的中继器上";
|
||||
"Your report will be sent to the relays you are connected to" = "あなたの通報は接続しているリレーに送信されました";
|
||||
|
||||
/* Accessibility label for zap button */
|
||||
"Zap" = "Zap";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Zebedee. */
|
||||
"Zebedee" = "Zebedee";
|
||||
@@ -11,7 +11,7 @@
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>d</string>
|
||||
<key>other</key>
|
||||
<string>%d other notes</string>
|
||||
<string>%d その他のNote</string>
|
||||
</dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>··· %#@NOTES@ ···</string>
|
||||
@@ -25,7 +25,7 @@
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>d</string>
|
||||
<key>other</key>
|
||||
<string>粉丝</string>
|
||||
<string>フォロワー</string>
|
||||
</dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>%#@FOLLOWERS@</string>
|
||||
@@ -41,7 +41,7 @@
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>d</string>
|
||||
<key>other</key>
|
||||
<string>回应</string>
|
||||
<string>リアクション</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>relays_count</key>
|
||||
@@ -55,13 +55,13 @@
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>d</string>
|
||||
<key>other</key>
|
||||
<string>中继器</string>
|
||||
<string>リレー</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>replying_to_one_and_others</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>正在回复%@%#@OTHERS@</string>
|
||||
<string>%@%#@OTHERS@ にリプライ</string>
|
||||
<key>OTHERS</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
@@ -69,7 +69,7 @@
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>d</string>
|
||||
<key>other</key>
|
||||
<string> & %d others</string>
|
||||
<string> & %d その他</string>
|
||||
<key>zero</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
@@ -77,7 +77,7 @@
|
||||
<key>replying_to_two_and_others</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>正在回复%@, %@%#@OTHERS@</string>
|
||||
<string>%@, %@%#@OTHERS@ にリプライ</string>
|
||||
<key>OTHERS</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
@@ -85,7 +85,7 @@
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>d</string>
|
||||
<key>other</key>
|
||||
<string> & %d others</string>
|
||||
<string> & %d その他</string>
|
||||
<key>zero</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
@@ -101,7 +101,7 @@
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>d</string>
|
||||
<key>other</key>
|
||||
<string>转发</string>
|
||||
<string>リポスト</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>sats_count</key>
|
||||
@@ -118,18 +118,18 @@
|
||||
<string>%2$@ sats</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>tips_count</key>
|
||||
<key>zaps_count</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>%#@TIPS@</string>
|
||||
<key>TIPS</key>
|
||||
<string>%#@ZAPS@</string>
|
||||
<key>ZAPS</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>d</string>
|
||||
<key>other</key>
|
||||
<string>打赏</string>
|
||||
<string>Zaps</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Sponsorē draugu ziņas un krājiet Satus ar BitMonētu⚡️, interneta digitālo valūtu.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -138,9 +138,6 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Čatiņš";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Notīrīt";
|
||||
|
||||
@@ -214,8 +211,7 @@ Number of relay servers a user is connected. */
|
||||
Section title for deleting the user */
|
||||
"Delete" = "Izdzēst";
|
||||
|
||||
/* Alert for deleting the users account.
|
||||
Button to delete the user's account. */
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "Izdzēst Kontu";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
@@ -362,7 +358,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Nav ko redzēt te. Ienāc šeit vēlāk.";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Paziņojumi";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -435,8 +431,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Relejs";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Releji";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -560,8 +555,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "Šī ir jūsu konta slepenā atslēga. Tā ir nepieciešama, lai piekļūtu savam kontam. Ar nevienu nedalies to! Saglabājiet to paroļu pārvaldniekā un glabājiet to drošībā!";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Plūsma";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Geef je vrienden een fooi met Bitcoin⚡️, dé internetvaluta.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -147,9 +147,6 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash-app";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Chat";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Wis";
|
||||
|
||||
@@ -229,8 +226,7 @@ Number of relay servers a user is connected. */
|
||||
Section title for deleting the user */
|
||||
"Delete" = "Verwijder";
|
||||
|
||||
/* Alert for deleting the users account.
|
||||
Button to delete the user's account. */
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "Verwijder account";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
@@ -273,6 +269,12 @@ Number of relay servers a user is connected. */
|
||||
/* Label indicating that the below text is the EULA, an acronym for End User License Agreement. */
|
||||
"EULA" = "EULA";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"EventDetailView" = "EventDetailView";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Filter" = "Filter";
|
||||
|
||||
/* Button to follow a user. */
|
||||
"Follow" = "Volg";
|
||||
|
||||
@@ -404,7 +406,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Er is hier nog niks te zien. Kijk later nog eens!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Meldingen";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -419,12 +421,18 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label indicating that a form input is optional. */
|
||||
"optional" = "optioneel";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Paid Relay" = "Betaalde relay";
|
||||
|
||||
/* Button to pay a Lightning invoice. */
|
||||
"Pay" = "Betaal";
|
||||
|
||||
/* Navigation bar title for view to pay Lightning invoice. */
|
||||
"Pay the Lightning invoice" = "Betaal de Lightningfactuur";
|
||||
|
||||
/* Alert for deleting the users account. */
|
||||
"Permanently Delete Account" = "Verwijder account permanent";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Phoenix. */
|
||||
"Phoenix" = "Phoenix";
|
||||
|
||||
@@ -483,8 +491,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Relay";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Relays";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -611,6 +618,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button for user to report that the account is impersonating someone. */
|
||||
"They are impersonating someone" = "Dit account doet zich voor als iemand anders";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This is a paid relay, you must pay for posts to be accepted." = "Dit is een betaalde relay; je dient dus te betalen voordat berichten goedgekeurd worden.";
|
||||
|
||||
/* Warning that the inputted account key is a public key and the result of what happens because of it. */
|
||||
"This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." = "Dit is een openbare sleutel waarmee geen berichten of antwoorden kunnen worden geplaatst. Deze wordt alléén gebruikt om accounts te tonen.";
|
||||
|
||||
@@ -623,10 +633,12 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "Dit is je geheime accountsleutel. Deze heb je nodig om in te loggen op je account - deel de sleutel dus met niemand! Bewaar hem eventueel in een wachtwoordbeheerder.";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Details";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To filter your %@ feed, please choose applicable relays from the list below:" = "Om je %@-feed te filteren, kun je kiezen uit onderstaande relays:";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
"Translate Note" = "Vertaal notitie";
|
||||
|
||||
@@ -718,6 +730,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Accessibility label for zap button */
|
||||
"Zap" = "Zap";
|
||||
|
||||
/* Navigation bar title for the Zaps view. */
|
||||
"Zaps" = "Zaps";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Zebedee. */
|
||||
"Zebedee" = "Zebedee";
|
||||
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
/* Bundle name */
|
||||
"CFBundleName" = "damus";
|
||||
|
||||
/* Privacy - Face ID Usage Description */
|
||||
"NSFaceIDUsageDescription" = "Lokalne uwierzytelnienie dostępu do klucza prywatnego";
|
||||
|
||||
/* Privacy - Photo Library Additions Usage Description */
|
||||
"NSPhotoLibraryAddUsageDescription" = "Nadanie Damusowi uprawnień by miał dostęp do Twoich zdjęć umożliwia zapisywanie obrazów.";
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Dawaj napiwki w reakcji na odpowiedzi znajomych i ciułaj satsy z Bitcoin⚡️, natywną walutą internetu.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -76,12 +76,18 @@ Number of relay servers a user is connected. */
|
||||
/* Label for section for adding a relay server. */
|
||||
"Add Relay" = "Dodaj przekaźnik";
|
||||
|
||||
/* Label to display relay contact user. */
|
||||
"Admin" = "Admin";
|
||||
|
||||
/* Any amount of sats */
|
||||
"Any" = "Dowolny";
|
||||
|
||||
/* Prompt for optional entry of API Key to use translation server. */
|
||||
"API Key (optional)" = "Klucz API (opcjonalny)";
|
||||
|
||||
/* Prompt for required entry of API Key to use translation server. */
|
||||
"API Key (required)" = "Klucz API (wymagany)";
|
||||
|
||||
/* Alert message to ask if user wants to repost a post. */
|
||||
"Are you sure you want to repost this?" = "Na pewno chcesz podać dalej?";
|
||||
|
||||
@@ -120,6 +126,9 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Blue Wallet. */
|
||||
"Blue Wallet" = "Blue Wallet";
|
||||
|
||||
/* Accessibility label for boosts button */
|
||||
"Boosts" = "Podbij";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Breez. */
|
||||
"Breez" = "Breez";
|
||||
|
||||
@@ -138,15 +147,15 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Czat";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Wyczyść";
|
||||
|
||||
/* Section title for clearing cached data. */
|
||||
"Clear Cache" = "Pamięć podręczna";
|
||||
|
||||
/* Label to display relay contact information. */
|
||||
"Contact" = "Kontakt";
|
||||
|
||||
/* Label indicating that a user's key was copied. */
|
||||
"Copied" = "Skopiowano";
|
||||
|
||||
@@ -205,6 +214,9 @@ Number of relay servers a user is connected. */
|
||||
/* Name of the app, shown on the first screen when user is not logged in. */
|
||||
"Damus" = "Damus";
|
||||
|
||||
/* Dropdown option for selecting DeepL as the translation service. */
|
||||
"DeepL (Proprietary, Higher Accuracy)" = "DeepL (Własnościowy, wysoka dokładność)";
|
||||
|
||||
/* Button to pay a Lightning invoice with the user's default Lightning wallet. */
|
||||
"Default Wallet" = "Portfel domyślny";
|
||||
|
||||
@@ -214,6 +226,15 @@ Number of relay servers a user is connected. */
|
||||
Section title for deleting the user */
|
||||
"Delete" = "Usuń";
|
||||
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "Skasuj konto";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
"Deleted Account" = "Konto skasowane";
|
||||
|
||||
/* Label to display relay description. */
|
||||
"Description" = "Opis";
|
||||
|
||||
/* Button to dismiss a text field alert. */
|
||||
"Dismiss" = "Odzruć";
|
||||
|
||||
@@ -251,6 +272,12 @@ Number of relay servers a user is connected. */
|
||||
/* Button to follow a user. */
|
||||
"Follow" = "Obserwuj";
|
||||
|
||||
/* Button to follow a user back. */
|
||||
"Follow Back" = "Obserwuj";
|
||||
|
||||
/* Text on QR code view to prompt viewer looking at screen to follow the user. */
|
||||
"Follow me on nostr" = "Obserwuj mnie na nostr";
|
||||
|
||||
/* Label describing followers of a user. */
|
||||
"Followers" = "Obserwujący";
|
||||
|
||||
@@ -264,6 +291,15 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Text to indicate that button next to it is in a state that will follow a profile when tapped. */
|
||||
"Follows" = "Obserwuje";
|
||||
|
||||
/* Text to indicate that a user is following your profile. */
|
||||
"Follows you" = "Obserwuje Cię";
|
||||
|
||||
/* Dropdown option for selecting Free plan for DeepL translation service. */
|
||||
"Free" = "Darmowy";
|
||||
|
||||
/* Button to navigate to DeepL website to get a translation API key. */
|
||||
"Get API Key" = "Pobierz klucz API";
|
||||
|
||||
/* Navigation bar title for Global view where posts from all connected relay servers appear. */
|
||||
"Global" = "Globalny";
|
||||
|
||||
@@ -307,15 +343,24 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button to complete account creation and start using the app. */
|
||||
"Let's go!" = "Jedziemy!";
|
||||
|
||||
/* Dropdown option for selecting LibreTranslate as the translation service. */
|
||||
"LibreTranslate (Open Source)" = "LibraTranslate (Otwarte Źródła)";
|
||||
|
||||
/* Placeholder text for entry of Lightning Address or LNURL. */
|
||||
"Lightning Address or LNURL" = "Address Lightning lub LNURL";
|
||||
|
||||
/* Indicates that the view is for paying a Lightning invoice. */
|
||||
"Lightning Invoice" = "Faktura Lightning";
|
||||
|
||||
/* Accessibility Label for Like button */
|
||||
"Like" = "Polub";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, LNLink. */
|
||||
"LNLink" = "LNLink";
|
||||
|
||||
/* Face ID usage description shown when trying to access private key */
|
||||
"Local authentication to access private key" = "Lokalne uwierzytelnienie dostępu do klucza prywatnego";
|
||||
|
||||
/* Dropdown option label for system default for Lightning wallet. */
|
||||
"Local default" = "Domyślny systemowy";
|
||||
|
||||
@@ -337,6 +382,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label for NIP-05 Verification section of user profile form. */
|
||||
"NIP-05 Verification" = "Weryfikacja NIP-05";
|
||||
|
||||
/* Button to cancel out of posting a note after being alerted that it looks like they might be posting a private key. */
|
||||
"No" = "Nie";
|
||||
|
||||
/* Alert message prompt that asks if the user wants to create a new block list, overwriting previous block lists. */
|
||||
"No block list found, create a new one? This will overwrite any previous block lists." = "Nie znaleziono listy zablokowanych, stworzyć nową? Nadpisać poprzednie listy.";
|
||||
|
||||
@@ -346,10 +394,13 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Dropdown option for selecting no translation service. */
|
||||
"None" = "Żaden";
|
||||
|
||||
/* Alert user that they might be attempting to paste a private key and ask them to confirm. */
|
||||
"Note contains \"nsec1\" private key. Are you sure?" = "Treść zawiera klucz prywatny \"nsec1\". Jesteś pewien?";
|
||||
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Nic tu nie ma. Sprawdź później!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Powiadomienia";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -373,6 +424,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Dropdown option label for Lightning wallet, Phoenix. */
|
||||
"Phoenix" = "Phoenix";
|
||||
|
||||
/* Prompt selection of DeepL subscription plan to perform machine translations on notes */
|
||||
"Plan" = "Plan";
|
||||
|
||||
/* Button to post a note. */
|
||||
"Post" = "Napisz post";
|
||||
|
||||
@@ -391,6 +445,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Title of the secure field that holds the user's private key. */
|
||||
"Private Key" = "Klucz prywatny";
|
||||
|
||||
/* Dropdown option for selecting Pro plan for DeepL translation service. */
|
||||
"Pro" = "Profesjonalny";
|
||||
|
||||
/* Sidebar menu label for Profile view. */
|
||||
"Profile" = "Profil";
|
||||
|
||||
@@ -422,8 +479,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Przekaźnik";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Przekaźniki";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -432,6 +488,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button label to remove all participants from a note reply. */
|
||||
"Remove all" = "Usuń wszystkie";
|
||||
|
||||
/* Accessibility label for reply button */
|
||||
"Reply" = "Odpowiedz";
|
||||
|
||||
/* Label to indicate that the user is replying to themself. */
|
||||
"Reply to self" = "Odpowiedz sobie";
|
||||
|
||||
@@ -482,6 +541,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Context menu option to save an image. */
|
||||
"Save Image" = "Zapisz obraz";
|
||||
|
||||
/* Text on QR code view to prompt viewer to scan the QR code on screen with their device camera. */
|
||||
"Scan the code" = "Skanuj kod";
|
||||
|
||||
/* Navigation link to search hashtag. */
|
||||
"Search hashtag: #%@" = "Szukaj hasztag: #%@";
|
||||
|
||||
@@ -503,6 +565,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Prompt selection of LibreTranslate server to perform machine translations on notes */
|
||||
"Server" = "Serwer";
|
||||
|
||||
/* Prompt selection of translation service provider. */
|
||||
"Service" = "Usługa";
|
||||
|
||||
/* Navigation title for Settings view.
|
||||
Sidebar menu label for accessing the app settings */
|
||||
"Settings" = "Ustawienia";
|
||||
@@ -526,9 +591,15 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Sidebar menu label to sign out of the account. */
|
||||
"Sign out" = "Wyloguj się";
|
||||
|
||||
/* Label to display relay software. */
|
||||
"Software" = "Oprogramowanie";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Strike. */
|
||||
"Strike" = "Strike";
|
||||
|
||||
/* Label to display relay's supported NIPs. */
|
||||
"Supported NIPs" = "Wspierane NIP";
|
||||
|
||||
/* Button to close out of alert that informs that the action to block a user was successful. */
|
||||
"Thanks!" = "Dzięki!";
|
||||
|
||||
@@ -547,8 +618,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "To jest Twój klucz prywatny. Potrzebny jest aby mieć dostęp do Twojego konta. Nie udostępniaj go nikomu! Zapisz w menedżerze haseł i przechowuj bezpiecznie!";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Wątek";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
@@ -557,6 +627,15 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button to indicate that the note has been translated from a different language. */
|
||||
"Translated from (lang)" = "Tłumaczenie z (lang)";
|
||||
|
||||
/* Button to indicate that the note is in the process of being translated from a different language. */
|
||||
"Translating from (lang)..." = "Tłumaczę z (lang)...";
|
||||
|
||||
/* Section title for selecting the translation service. */
|
||||
"Translations" = "Tłumaczenia";
|
||||
|
||||
/* Text field prompt asking user to type the word DELETE to confirm that they want to proceed with deleting their account. The all caps lock DELETE word should not be translated. Everything else should. */
|
||||
"Type DELETE to delete" = "Napisz DELETE aby skasować";
|
||||
|
||||
/* Text box prompt to ask user to type their post. */
|
||||
"Type your post here..." = "Napisz swój post tutaj...";
|
||||
|
||||
@@ -588,6 +667,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Label to prompt username entry. */
|
||||
"Username" = "Nazwa użytkownika";
|
||||
|
||||
/* Label to display relay software version. */
|
||||
"Version" = "Wersja";
|
||||
|
||||
/* Sidebar menu label for Wallet view. */
|
||||
"Wallet" = "Portfel";
|
||||
|
||||
@@ -615,6 +697,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Text of button that confirms to overwrite the existing mutelist. */
|
||||
"Yes, Overwrite" = "Tak, nadpisz";
|
||||
|
||||
/* Button to proceed with posting a note even though it looks like they might be posting a private key. */
|
||||
"Yes, Post with Private Key" = "Tak, wyślij pomimo to";
|
||||
|
||||
/* You, in this context, is the person who controls their own social network. You is used in the context of a larger sentence that welcomes the reader to the social network that they control themself. */
|
||||
"you" = "Ty";
|
||||
|
||||
@@ -624,6 +709,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Footer text to inform user what will happen when the report is submitted. */
|
||||
"Your report will be sent to the relays you are connected to" = "Twoje zgłoszenie zostanie wysłane do przekaźników, do których jesteś podłączony";
|
||||
|
||||
/* Accessibility label for zap button */
|
||||
"Zap" = "Zap";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Zebedee. */
|
||||
"Zebedee" = "Zebedee";
|
||||
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
<key>one</key>
|
||||
<string>Zap</string>
|
||||
<key>other</key>
|
||||
<string>Zaps</string>
|
||||
<string>Zapów</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Dê uma gorjeta aos seus amigos e acumule sats com Bitcoin⚡️, a moeda nativa da Internet.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -138,9 +138,6 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Conversação";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Limpar";
|
||||
|
||||
@@ -349,7 +346,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Não há nada para ver aqui. Volte mais tarde!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Notificações";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -422,8 +419,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Relay";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Relays";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -547,8 +543,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "Esta é a chave secreta da sua conta. Precisa dela para aceder à sua conta. Não partilhe isto com ninguém! Guarde-a num gestor de senhas e mantenha-a segura!";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Thread";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -29,7 +29,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. Arkadaşlarınızın gönderilerine bahşiş verin ve internetin yerel para birimi olan Bitcoin⚡️ ile sats biriktirin.";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -103,9 +103,6 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "Sohbet";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "Temizle";
|
||||
|
||||
@@ -270,7 +267,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "Görülecek bir şey yok. Daha sonra tekrar kontrol et!";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "Bildirimler";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -334,8 +331,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "Röle";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "Röleler";
|
||||
|
||||
/* Label to indicate that the user is replying to themself. */
|
||||
@@ -424,8 +420,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "Bu sizin gizli hesap anahtarınızdır. Hesabınıza erişmek için buna ihtiyacınız var. Bunu kimseyle paylaşmayın! Bir şifre yöneticisine kaydedin ve güvende tutun!";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "Konu";
|
||||
|
||||
/* Text box prompt to ask user to type their post. */
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* Abbreviated version of a nostr public key. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* Sentence 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'.
|
||||
/* Sentence 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'.
|
||||
Sentence 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'. */
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
@@ -35,7 +35,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
/* Explanation of what can be done by users to earn money. There is a heading that precedes this explanation which is a variable to this string. */
|
||||
"%@. Tip your friend's posts and stack sats with Bitcoin⚡️, the native currency of the internet." = "%@. 用互联网原生货币--比特币⚡️来打赏好友的推文并积攒财富。";
|
||||
|
||||
/* Number of zap payments on a post.
|
||||
/* Number of reposts.
|
||||
Number of relay servers a user is connected. */
|
||||
"%lld" = "%lld";
|
||||
|
||||
@@ -147,9 +147,6 @@ Number of relay servers a user is connected. */
|
||||
/* Dropdown option label for Lightning wallet, Cash App. */
|
||||
"Cash App" = "Cash App";
|
||||
|
||||
/* Navigation bar title for Chatroom view. */
|
||||
"Chat" = "聊天";
|
||||
|
||||
/* Button for clearing cached data. */
|
||||
"Clear" = "清除";
|
||||
|
||||
@@ -226,8 +223,7 @@ Number of relay servers a user is connected. */
|
||||
Section title for deleting the user */
|
||||
"Delete" = "删除";
|
||||
|
||||
/* Alert for deleting the users account.
|
||||
Button to delete the user's account. */
|
||||
/* Button to delete the user's account. */
|
||||
"Delete Account" = "删除账户";
|
||||
|
||||
/* Alert message to indicate this is a deleted account */
|
||||
@@ -270,9 +266,15 @@ Number of relay servers a user is connected. */
|
||||
/* Label indicating that the below text is the EULA, an acronym for End User License Agreement. */
|
||||
"EULA" = "用户条款";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Filter" = "筛选";
|
||||
|
||||
/* Button to follow a user. */
|
||||
"Follow" = "关注";
|
||||
|
||||
/* Button to follow a user back. */
|
||||
"Follow Back" = "回关";
|
||||
|
||||
/* Text on QR code view to prompt viewer looking at screen to follow the user. */
|
||||
"Follow me on nostr" = "关注我的Nostr";
|
||||
|
||||
@@ -289,6 +291,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Text to indicate that button next to it is in a state that will follow a profile when tapped. */
|
||||
"Follows" = "关注";
|
||||
|
||||
/* Text to indicate that a user is following your profile. */
|
||||
"Follows you" = "关注了你";
|
||||
|
||||
/* Dropdown option for selecting Free plan for DeepL translation service. */
|
||||
"Free" = "免费";
|
||||
|
||||
@@ -395,7 +400,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Indicates that there are no notes in the timeline to view. */
|
||||
"Nothing to see here. Check back later!" = "暂无内容,请稍后重试。";
|
||||
|
||||
/* Navigation title for notifications. */
|
||||
/* Toolbar label for Notifications view. */
|
||||
"Notifications" = "通知";
|
||||
|
||||
/* String indicating that a given timestamp just occurred */
|
||||
@@ -410,12 +415,18 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label indicating that a form input is optional. */
|
||||
"optional" = "选填";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Paid Relay" = "付费中继";
|
||||
|
||||
/* Button to pay a Lightning invoice. */
|
||||
"Pay" = "支付";
|
||||
|
||||
/* Navigation bar title for view to pay Lightning invoice. */
|
||||
"Pay the Lightning invoice" = "支付闪电发票";
|
||||
|
||||
/* Alert for deleting the users account. */
|
||||
"Permanently Delete Account" = "永久删除账户";
|
||||
|
||||
/* Dropdown option label for Lightning wallet, Phoenix. */
|
||||
"Phoenix" = "Phoenix";
|
||||
|
||||
@@ -474,8 +485,7 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
Text field for relay server. Used for testing purposes. */
|
||||
"Relay" = "中继器";
|
||||
|
||||
/* Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view. */
|
||||
/* Sidebar menu label for Relays view. */
|
||||
"Relays" = "中继器";
|
||||
|
||||
/* Description of what was done as a result of sending a report to relay servers. */
|
||||
@@ -602,6 +612,9 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Button for user to report that the account is impersonating someone. */
|
||||
"They are impersonating someone" = "抄袭模仿他人";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This is a paid relay, you must pay for posts to be accepted." = "这是一个付费中继。您需要先付费才能通过它发送推文。";
|
||||
|
||||
/* Warning that the inputted account key is a public key and the result of what happens because of it. */
|
||||
"This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." = "这是一个公钥。您无法使用公钥发布推文或进行其他交互。您只可以从该用户视角查看此账户。";
|
||||
|
||||
@@ -614,10 +627,12 @@ Part of a larger sentence to describe how many profiles a user is following. */
|
||||
/* Label to describe that a private key is the user's secret account key and what they should do with it. */
|
||||
"This is your secret account key. You need this to access your account. Don't share this with anyone! Save it in a password manager and keep it safe!" = "这是您的秘密私钥。您需要用这个私钥来访问您的账户。您可以用密码管理器或者其他安全的方式保管您的私钥。切记不要把私钥透露给任何人!";
|
||||
|
||||
/* Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view. */
|
||||
/* Navigation bar title for note thread. */
|
||||
"Thread" = "推文链";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To filter your %@ feed, please choose applicable relays from the list below:" = "如果要筛选关于%@的条目,请在以下列表中选择适用的中继:";
|
||||
|
||||
/* Button to translate note from different language. */
|
||||
"Translate Note" = "翻译推文";
|
||||
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
/* Bundle display name */
|
||||
"CFBundleDisplayName" = "大麦子";
|
||||
|
||||
/* Bundle name */
|
||||
"CFBundleName" = "大麦子";
|
||||
|
||||
/* Privacy - Photo Library Additions Usage Description */
|
||||
"NSPhotoLibraryAddUsageDescription" = "允许大麦子访问您的相册以便保存图片。";
|
||||
|
||||
@@ -88,6 +88,32 @@ class damusTests: XCTestCase {
|
||||
XCTAssertEqual(parsed, expected)
|
||||
}
|
||||
|
||||
func testSaveDefaultZapAmount() {
|
||||
let pubkey = "test_pubkey"
|
||||
let amt = 1000
|
||||
set_default_zap_amount(pubkey: pubkey, amount: amt)
|
||||
let loaded = get_default_zap_amount(pubkey: pubkey)!
|
||||
XCTAssertEqual(loaded, amt)
|
||||
}
|
||||
|
||||
func testSaveRelayFilters() {
|
||||
var filters = Set<RelayFilter>()
|
||||
|
||||
let filter1 = RelayFilter(timeline: .search, relay_id: "wss://abc.com")
|
||||
let filter2 = RelayFilter(timeline: .home, relay_id: "wss://abc.com")
|
||||
filters.insert(filter1)
|
||||
filters.insert(filter2)
|
||||
|
||||
let pubkey = "test_pubkey"
|
||||
save_relay_filters(pubkey, filters: filters)
|
||||
let loaded_filters = load_relay_filters(pubkey)!
|
||||
|
||||
XCTAssertEqual(loaded_filters.count, 2)
|
||||
XCTAssertTrue(loaded_filters.contains(filter1))
|
||||
XCTAssertTrue(loaded_filters.contains(filter2))
|
||||
XCTAssertEqual(filters, loaded_filters)
|
||||
}
|
||||
|
||||
func testParseUrl() {
|
||||
let parsed = parse_mentions(content: "a https://jb55.com b", tags: [])
|
||||
|
||||
@@ -115,13 +141,21 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testNoParseUrlWithOnlyWhitespace() {
|
||||
let testString = "https:// "
|
||||
let testString = "https:// "
|
||||
let parsed = parse_mentions(content: testString, tags: [])
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed[0].is_text, testString)
|
||||
}
|
||||
|
||||
func testNoParseUrlTrailingCharacters() {
|
||||
let testString = "https://foo.bar, "
|
||||
let parsed = parse_mentions(content: testString, tags: [])
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed[0].is_url?.absoluteString, "https://foo.bar")
|
||||
}
|
||||
|
||||
func testParseMentionBlank() {
|
||||
let parsed = parse_mentions(content: "", tags: [["e", "event_id"]])
|
||||
|
||||
|
||||
+78
-24
@@ -18,6 +18,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="NSFaceIDUsageDescription" xml:space="preserve">
|
||||
<source>Local authentication to access private key</source>
|
||||
<target>التحقق للوصول للمفتاح الخاص</target>
|
||||
|
||||
<note>Privacy - Face ID Usage Description</note>
|
||||
</trans-unit>
|
||||
@@ -49,7 +50,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -80,7 +81,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -133,6 +134,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="API Key (required)" xml:space="preserve">
|
||||
<source>API Key (required)</source>
|
||||
<target>مفتاح API (مطلوب)</target>
|
||||
|
||||
<note>Prompt for required entry of API Key to use translation server.</note>
|
||||
</trans-unit>
|
||||
@@ -193,6 +195,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admin" xml:space="preserve">
|
||||
<source>Admin</source>
|
||||
<target>المدير</target>
|
||||
|
||||
<note>Label to display relay contact user.</note>
|
||||
</trans-unit>
|
||||
@@ -278,6 +281,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Boosts" xml:space="preserve">
|
||||
<source>Boosts</source>
|
||||
<target>تعزيز</target>
|
||||
|
||||
<note>Accessibility label for boosts button</note>
|
||||
</trans-unit>
|
||||
@@ -311,12 +315,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>المحادثة</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>مسح</target>
|
||||
@@ -331,6 +329,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact" xml:space="preserve">
|
||||
<source>Contact</source>
|
||||
<target>تواصل</target>
|
||||
|
||||
<note>Label to display relay contact information.</note>
|
||||
</trans-unit>
|
||||
@@ -458,6 +457,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="DeepL (Proprietary, Higher Accuracy)" xml:space="preserve">
|
||||
<source>DeepL (Proprietary, Higher Accuracy)</source>
|
||||
<target>DeepL (دقة أعلى، ملكية خاصة)</target>
|
||||
|
||||
<note>Dropdown option for selecting DeepL as the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -480,8 +480,7 @@ Number of relay servers a user is connected.</note>
|
||||
<source>Delete Account</source>
|
||||
<target>حذف الحساب</target>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -491,6 +490,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Description" xml:space="preserve">
|
||||
<source>Description</source>
|
||||
<target>الوصف</target>
|
||||
|
||||
<note>Label to display relay description.</note>
|
||||
</trans-unit>
|
||||
@@ -554,6 +554,18 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
<target>EventDetailView</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
<target>تصفية</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>متابعة</target>
|
||||
@@ -562,11 +574,13 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow Back" xml:space="preserve">
|
||||
<source>Follow Back</source>
|
||||
<target>رد المتابعة</target>
|
||||
|
||||
<note>Button to follow a user back.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow me on nostr" xml:space="preserve">
|
||||
<source>Follow me on nostr</source>
|
||||
<target>تابعني على نوستر</target>
|
||||
|
||||
<note>Text on QR code view to prompt viewer looking at screen to follow the user.</note>
|
||||
</trans-unit>
|
||||
@@ -597,16 +611,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Follows you" xml:space="preserve">
|
||||
<source>Follows you</source>
|
||||
<target>متابع لك</target>
|
||||
|
||||
<note>Text to indicate that a user is following your profile.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Free" xml:space="preserve">
|
||||
<source>Free</source>
|
||||
<target>مجاني</target>
|
||||
|
||||
<note>Dropdown option for selecting Free plan for DeepL translation service.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Get API Key" xml:space="preserve">
|
||||
<source>Get API Key</source>
|
||||
<target>احصل على مفتاح API</target>
|
||||
|
||||
<note>Button to navigate to DeepL website to get a translation API key.</note>
|
||||
</trans-unit>
|
||||
@@ -685,6 +702,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="LibreTranslate (Open Source)" xml:space="preserve">
|
||||
<source>LibreTranslate (Open Source)</source>
|
||||
<target>LibreTranslate (مفتوح المصدر)</target>
|
||||
|
||||
<note>Dropdown option for selecting LibreTranslate as the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -702,11 +720,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Like" xml:space="preserve">
|
||||
<source>Like</source>
|
||||
<target>اعجاب</target>
|
||||
|
||||
<note>Accessibility Label for Like button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Local authentication to access private key" xml:space="preserve">
|
||||
<source>Local authentication to access private key</source>
|
||||
<target>التحقق للوصول للمفتاح الخاص</target>
|
||||
|
||||
<note>Face ID usage description shown when trying to access private key</note>
|
||||
</trans-unit>
|
||||
@@ -783,7 +803,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>التنبيهات</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -791,6 +811,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
<target>موصل مدفوع</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>ادفع</target>
|
||||
@@ -803,6 +829,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
<target>حذف الحساب للأبد</target>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -811,6 +843,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Plan" xml:space="preserve">
|
||||
<source>Plan</source>
|
||||
<target>الخطة</target>
|
||||
|
||||
<note>Prompt selection of DeepL subscription plan to perform machine translations on notes</note>
|
||||
</trans-unit>
|
||||
@@ -852,6 +885,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Pro" xml:space="preserve">
|
||||
<source>Pro</source>
|
||||
<target>برو</target>
|
||||
|
||||
<note>Dropdown option for selecting Pro plan for DeepL translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -920,8 +954,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>موصّلات</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -937,6 +970,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Reply" xml:space="preserve">
|
||||
<source>Reply</source>
|
||||
<target>رد</target>
|
||||
|
||||
<note>Accessibility label for reply button</note>
|
||||
</trans-unit>
|
||||
@@ -1034,6 +1068,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Scan the code" xml:space="preserve">
|
||||
<source>Scan the code</source>
|
||||
<target>امسح رمز الاستجابة السريع (QR)</target>
|
||||
|
||||
<note>Text on QR code view to prompt viewer to scan the QR code on screen with their device camera.</note>
|
||||
</trans-unit>
|
||||
@@ -1081,6 +1116,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Service" xml:space="preserve">
|
||||
<source>Service</source>
|
||||
<target>الخدمة</target>
|
||||
|
||||
<note>Prompt selection of translation service provider.</note>
|
||||
</trans-unit>
|
||||
@@ -1127,6 +1163,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Software" xml:space="preserve">
|
||||
<source>Software</source>
|
||||
<target>البرنامج</target>
|
||||
|
||||
<note>Label to display relay software.</note>
|
||||
</trans-unit>
|
||||
@@ -1138,6 +1175,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Supported NIPs" xml:space="preserve">
|
||||
<source>Supported NIPs</source>
|
||||
<target>الـ NIPs المدعومة</target>
|
||||
|
||||
<note>Label to display relay's supported NIPs.</note>
|
||||
</trans-unit>
|
||||
@@ -1153,6 +1191,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
<target>هذا موصل بمقابل، يجب الاشتراك للنشر فيه</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>هذا مفتاح عام. لن تستطيع النشر أو التفاعل بهذا الحساب بأي طريقة. تستطيع فقط مشاهدة المحتوى العام من منظور صاحب الحساب.</target>
|
||||
@@ -1181,8 +1225,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>منشور</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
<target>الرجاء اختيار موصلات معينة لتصفية محتوى %@</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1204,6 +1253,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Translations" xml:space="preserve">
|
||||
<source>Translations</source>
|
||||
<target>الترجمة</target>
|
||||
|
||||
<note>Section title for selecting the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -1270,6 +1320,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Version" xml:space="preserve">
|
||||
<source>Version</source>
|
||||
<target>الاصدار</target>
|
||||
|
||||
<note>Label to display relay software version.</note>
|
||||
</trans-unit>
|
||||
@@ -1341,9 +1392,16 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Zap" xml:space="preserve">
|
||||
<source>Zap</source>
|
||||
<target>ومضة</target>
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
<target>وميض</target>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1356,12 +1414,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1493,19 +1545,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%dمنشور اضافي</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%dمنشورات اضافية</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
@@ -1649,11 +1701,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="/zaps_count:dict/ZAPS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Zap</source>
|
||||
<target>ومضة</target>
|
||||
|
||||
<note>Part of a larger sentence to describe how many zap payments there are on a post.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="/zaps_count:dict/ZAPS:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
<target>وميض</target>
|
||||
|
||||
<note>Part of a larger sentence to describe how many zap payments there are on a post.</note>
|
||||
</trans-unit>
|
||||
|
||||
+69
-24
@@ -18,6 +18,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="NSFaceIDUsageDescription" xml:space="preserve">
|
||||
<source>Local authentication to access private key</source>
|
||||
<target>Lokale Authentifizierung für den Zugriff auf den privaten Schlüssel</target>
|
||||
|
||||
<note>Privacy - Face ID Usage Description</note>
|
||||
</trans-unit>
|
||||
@@ -49,7 +50,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -80,7 +81,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -133,6 +134,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="API Key (required)" xml:space="preserve">
|
||||
<source>API Key (required)</source>
|
||||
<target>API-Schlüssel (benötigt)</target>
|
||||
|
||||
<note>Prompt for required entry of API Key to use translation server.</note>
|
||||
</trans-unit>
|
||||
@@ -193,6 +195,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admin" xml:space="preserve">
|
||||
<source>Admin</source>
|
||||
<target>Admin</target>
|
||||
|
||||
<note>Label to display relay contact user.</note>
|
||||
</trans-unit>
|
||||
@@ -278,6 +281,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Boosts" xml:space="preserve">
|
||||
<source>Boosts</source>
|
||||
<target>Boosts</target>
|
||||
|
||||
<note>Accessibility label for boosts button</note>
|
||||
</trans-unit>
|
||||
@@ -311,12 +315,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Unterhaltungen</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Löschen</target>
|
||||
@@ -331,6 +329,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact" xml:space="preserve">
|
||||
<source>Contact</source>
|
||||
<target>Kontakt</target>
|
||||
|
||||
<note>Label to display relay contact information.</note>
|
||||
</trans-unit>
|
||||
@@ -458,6 +457,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="DeepL (Proprietary, Higher Accuracy)" xml:space="preserve">
|
||||
<source>DeepL (Proprietary, Higher Accuracy)</source>
|
||||
<target>DeepL (Proprietär, bessere Genauigkeit)</target>
|
||||
|
||||
<note>Dropdown option for selecting DeepL as the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -480,8 +480,7 @@ Number of relay servers a user is connected.</note>
|
||||
<source>Delete Account</source>
|
||||
<target>Konto löschen</target>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -491,6 +490,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Description" xml:space="preserve">
|
||||
<source>Description</source>
|
||||
<target>Beschreibung</target>
|
||||
|
||||
<note>Label to display relay description.</note>
|
||||
</trans-unit>
|
||||
@@ -554,6 +554,16 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Folgen</target>
|
||||
@@ -562,11 +572,13 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow Back" xml:space="preserve">
|
||||
<source>Follow Back</source>
|
||||
<target>Ebenfalls folgen</target>
|
||||
|
||||
<note>Button to follow a user back.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow me on nostr" xml:space="preserve">
|
||||
<source>Follow me on nostr</source>
|
||||
<target>Folge mir auf Nostr</target>
|
||||
|
||||
<note>Text on QR code view to prompt viewer looking at screen to follow the user.</note>
|
||||
</trans-unit>
|
||||
@@ -597,16 +609,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Follows you" xml:space="preserve">
|
||||
<source>Follows you</source>
|
||||
<target>Folgt dir</target>
|
||||
|
||||
<note>Text to indicate that a user is following your profile.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Free" xml:space="preserve">
|
||||
<source>Free</source>
|
||||
<target>kostenlos</target>
|
||||
|
||||
<note>Dropdown option for selecting Free plan for DeepL translation service.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Get API Key" xml:space="preserve">
|
||||
<source>Get API Key</source>
|
||||
<target>API-Schlüssel erhalten</target>
|
||||
|
||||
<note>Button to navigate to DeepL website to get a translation API key.</note>
|
||||
</trans-unit>
|
||||
@@ -685,6 +700,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="LibreTranslate (Open Source)" xml:space="preserve">
|
||||
<source>LibreTranslate (Open Source)</source>
|
||||
<target>LibreTranslate (Open Source)</target>
|
||||
|
||||
<note>Dropdown option for selecting LibreTranslate as the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -702,11 +718,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Like" xml:space="preserve">
|
||||
<source>Like</source>
|
||||
<target>Like</target>
|
||||
|
||||
<note>Accessibility Label for Like button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Local authentication to access private key" xml:space="preserve">
|
||||
<source>Local authentication to access private key</source>
|
||||
<target>Lokale Authentifizierung für den Zugriff auf den privaten Schlüssel</target>
|
||||
|
||||
<note>Face ID usage description shown when trying to access private key</note>
|
||||
</trans-unit>
|
||||
@@ -783,7 +801,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Benachrichtigungen</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -791,6 +809,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Bezahlen</target>
|
||||
@@ -803,6 +826,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -811,6 +839,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Plan" xml:space="preserve">
|
||||
<source>Plan</source>
|
||||
<target>Paket</target>
|
||||
|
||||
<note>Prompt selection of DeepL subscription plan to perform machine translations on notes</note>
|
||||
</trans-unit>
|
||||
@@ -852,6 +881,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Pro" xml:space="preserve">
|
||||
<source>Pro</source>
|
||||
<target>Pro</target>
|
||||
|
||||
<note>Dropdown option for selecting Pro plan for DeepL translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -920,8 +950,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Relays</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -937,6 +966,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Reply" xml:space="preserve">
|
||||
<source>Reply</source>
|
||||
<target>Antworten</target>
|
||||
|
||||
<note>Accessibility label for reply button</note>
|
||||
</trans-unit>
|
||||
@@ -1034,6 +1064,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Scan the code" xml:space="preserve">
|
||||
<source>Scan the code</source>
|
||||
<target>Code scannen</target>
|
||||
|
||||
<note>Text on QR code view to prompt viewer to scan the QR code on screen with their device camera.</note>
|
||||
</trans-unit>
|
||||
@@ -1081,6 +1112,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Service" xml:space="preserve">
|
||||
<source>Service</source>
|
||||
<target>Dienst</target>
|
||||
|
||||
<note>Prompt selection of translation service provider.</note>
|
||||
</trans-unit>
|
||||
@@ -1127,6 +1159,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Software" xml:space="preserve">
|
||||
<source>Software</source>
|
||||
<target>Software</target>
|
||||
|
||||
<note>Label to display relay software.</note>
|
||||
</trans-unit>
|
||||
@@ -1138,6 +1171,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Supported NIPs" xml:space="preserve">
|
||||
<source>Supported NIPs</source>
|
||||
<target>Unterstützte NIPs</target>
|
||||
|
||||
<note>Label to display relay's supported NIPs.</note>
|
||||
</trans-unit>
|
||||
@@ -1153,6 +1187,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>Dies ist ein öffentlicher Schlüssel, Du wirst keine Beiträge teilen oder oder auf irgendeine Weise interagieren können. Dies wird genutzt um andere Kontos aus deren Perspektive zu sehen.</target>
|
||||
@@ -1181,8 +1220,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Thema</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1204,6 +1247,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Translations" xml:space="preserve">
|
||||
<source>Translations</source>
|
||||
<target>Übersetzungen</target>
|
||||
|
||||
<note>Section title for selecting the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -1270,6 +1314,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Version" xml:space="preserve">
|
||||
<source>Version</source>
|
||||
<target>Version</target>
|
||||
|
||||
<note>Label to display relay software version.</note>
|
||||
</trans-unit>
|
||||
@@ -1341,9 +1386,15 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Zap" xml:space="preserve">
|
||||
<source>Zap</source>
|
||||
<target>Zap</target>
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1356,12 +1407,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1493,19 +1538,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d andere Notiz</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d andere Notizen</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
+44
-24
@@ -50,7 +50,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -81,7 +81,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -315,12 +315,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Συνομιλίες</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Καθαρισμός</target>
|
||||
@@ -486,8 +480,7 @@ Number of relay servers a user is connected.</note>
|
||||
<source>Delete Account</source>
|
||||
<target>Διαγραφή λογαριασμού</target>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -561,6 +554,16 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Ακολουθήστε</target>
|
||||
@@ -798,7 +801,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Ειδοποιήσεις</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -806,6 +809,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Πληρωμή</target>
|
||||
@@ -818,6 +826,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -937,8 +950,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Διακομιστές Relays</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -1175,6 +1187,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>Αυτό είναι ένα δημόσιο κλειδί, δεν θα έχετε την δυνατότητα να κάνετε δημοσιεύσεις ή να αλληλεπιδράσετε με κάποιο τρόπο. Αυτό το κλειδί είναι μόνο για προβολή / εύρεση λογαριασμών.</target>
|
||||
@@ -1203,8 +1220,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Νήμα</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1369,6 +1390,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1381,12 +1407,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1518,19 +1538,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d άλλη σημείωση</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d άλλες σημειώσεις</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<trans-unit id="%@ %@" xml:space="preserve">
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -71,7 +71,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<trans-unit id="%lld" xml:space="preserve">
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -268,11 +268,6 @@ Number of relay servers a user is connected.</note>
|
||||
<target>Cash App</target>
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Chat</target>
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Clear</target>
|
||||
@@ -411,8 +406,7 @@ Number of relay servers a user is connected.</note>
|
||||
<trans-unit id="Delete Account" xml:space="preserve">
|
||||
<source>Delete Account</source>
|
||||
<target>Delete Account</target>
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -474,6 +468,16 @@ Number of relay servers a user is connected.</note>
|
||||
<target>Error: %@</target>
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
<target>EventDetailView</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
<target>Filter</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Follow</target>
|
||||
@@ -672,13 +676,18 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Notifications</target>
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
<target>Nudity or explicit content</target>
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
<target>Paid Relay</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Pay</target>
|
||||
@@ -689,6 +698,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<target>Pay the Lightning invoice</target>
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
<target>Permanently Delete Account</target>
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -788,8 +802,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<trans-unit id="Relays" xml:space="preserve">
|
||||
<source>Relays</source>
|
||||
<target>Relays</target>
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -988,6 +1001,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<target>They are impersonating someone</target>
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
<target>This is a paid relay, you must pay for posts to be accepted.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</target>
|
||||
@@ -1011,8 +1029,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<trans-unit id="Thread" xml:space="preserve">
|
||||
<source>Thread</source>
|
||||
<target>Thread</target>
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
<target>To filter your %@ feed, please choose applicable relays from the list below:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1150,6 +1172,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<target>Zap</target>
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
<target>Zaps</target>
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1160,11 +1187,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<target>Zeus LN</target>
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1275,17 +1297,17 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>%d other note</source>
|
||||
<target>%d other note</target>
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d other notes</target>
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
Binary file not shown.
+78
-24
@@ -18,6 +18,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="NSFaceIDUsageDescription" xml:space="preserve">
|
||||
<source>Local authentication to access private key</source>
|
||||
<target>Autenticación local para acceder a la clave privada</target>
|
||||
|
||||
<note>Privacy - Face ID Usage Description</note>
|
||||
</trans-unit>
|
||||
@@ -49,7 +50,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -80,7 +81,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -133,6 +134,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="API Key (required)" xml:space="preserve">
|
||||
<source>API Key (required)</source>
|
||||
<target>Clave de API (obligatorio)</target>
|
||||
|
||||
<note>Prompt for required entry of API Key to use translation server.</note>
|
||||
</trans-unit>
|
||||
@@ -193,6 +195,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admin" xml:space="preserve">
|
||||
<source>Admin</source>
|
||||
<target>Administrador</target>
|
||||
|
||||
<note>Label to display relay contact user.</note>
|
||||
</trans-unit>
|
||||
@@ -278,6 +281,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Boosts" xml:space="preserve">
|
||||
<source>Boosts</source>
|
||||
<target>Boosts</target>
|
||||
|
||||
<note>Accessibility label for boosts button</note>
|
||||
</trans-unit>
|
||||
@@ -311,12 +315,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Chat</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Borrar</target>
|
||||
@@ -331,6 +329,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact" xml:space="preserve">
|
||||
<source>Contact</source>
|
||||
<target>Contacto</target>
|
||||
|
||||
<note>Label to display relay contact information.</note>
|
||||
</trans-unit>
|
||||
@@ -458,6 +457,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="DeepL (Proprietary, Higher Accuracy)" xml:space="preserve">
|
||||
<source>DeepL (Proprietary, Higher Accuracy)</source>
|
||||
<target>DeepL (Propietario, Mayor precisión)</target>
|
||||
|
||||
<note>Dropdown option for selecting DeepL as the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -478,17 +478,19 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete Account" xml:space="preserve">
|
||||
<source>Delete Account</source>
|
||||
<target>Eliminar cuenta</target>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
<target>Cuenta eliminada</target>
|
||||
|
||||
<note>Alert message to indicate this is a deleted account</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Description" xml:space="preserve">
|
||||
<source>Description</source>
|
||||
<target>Descripción</target>
|
||||
|
||||
<note>Label to display relay description.</note>
|
||||
</trans-unit>
|
||||
@@ -552,6 +554,16 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Seguir</target>
|
||||
@@ -560,11 +572,13 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow Back" xml:space="preserve">
|
||||
<source>Follow Back</source>
|
||||
<target>Seguir</target>
|
||||
|
||||
<note>Button to follow a user back.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow me on nostr" xml:space="preserve">
|
||||
<source>Follow me on nostr</source>
|
||||
<target>Sigueme en nostr</target>
|
||||
|
||||
<note>Text on QR code view to prompt viewer looking at screen to follow the user.</note>
|
||||
</trans-unit>
|
||||
@@ -595,16 +609,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Follows you" xml:space="preserve">
|
||||
<source>Follows you</source>
|
||||
<target>Te sigue</target>
|
||||
|
||||
<note>Text to indicate that a user is following your profile.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Free" xml:space="preserve">
|
||||
<source>Free</source>
|
||||
<target>Gratuito</target>
|
||||
|
||||
<note>Dropdown option for selecting Free plan for DeepL translation service.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Get API Key" xml:space="preserve">
|
||||
<source>Get API Key</source>
|
||||
<target>Obtener clave de API</target>
|
||||
|
||||
<note>Button to navigate to DeepL website to get a translation API key.</note>
|
||||
</trans-unit>
|
||||
@@ -683,6 +700,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="LibreTranslate (Open Source)" xml:space="preserve">
|
||||
<source>LibreTranslate (Open Source)</source>
|
||||
<target>LibreTranslate (Código abierto)</target>
|
||||
|
||||
<note>Dropdown option for selecting LibreTranslate as the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -700,11 +718,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Like" xml:space="preserve">
|
||||
<source>Like</source>
|
||||
<target>Me gusta</target>
|
||||
|
||||
<note>Accessibility Label for Like button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Local authentication to access private key" xml:space="preserve">
|
||||
<source>Local authentication to access private key</source>
|
||||
<target>Autenticación local para acceder a la clave privada</target>
|
||||
|
||||
<note>Face ID usage description shown when trying to access private key</note>
|
||||
</trans-unit>
|
||||
@@ -749,6 +769,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="No" xml:space="preserve">
|
||||
<source>No</source>
|
||||
<target>No</target>
|
||||
|
||||
<note>Button to cancel out of posting a note after being alerted that it looks like they might be posting a private key.</note>
|
||||
</trans-unit>
|
||||
@@ -766,6 +787,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Note contains "nsec1" private key. Are you sure?" xml:space="preserve">
|
||||
<source>Note contains "nsec1" private key. Are you sure?</source>
|
||||
<target>La nota incluye una clave privada "nsec1". ¿Estas seguro?</target>
|
||||
|
||||
<note>Alert user that they might be attempting to paste a private key and ask them to confirm.</note>
|
||||
</trans-unit>
|
||||
@@ -779,7 +801,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Notificaciones</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -787,6 +809,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Pagar</target>
|
||||
@@ -799,6 +826,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -807,6 +839,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Plan" xml:space="preserve">
|
||||
<source>Plan</source>
|
||||
<target>Plan</target>
|
||||
|
||||
<note>Prompt selection of DeepL subscription plan to perform machine translations on notes</note>
|
||||
</trans-unit>
|
||||
@@ -848,6 +881,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Pro" xml:space="preserve">
|
||||
<source>Pro</source>
|
||||
<target>Pro</target>
|
||||
|
||||
<note>Dropdown option for selecting Pro plan for DeepL translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -916,8 +950,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Relés</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -933,6 +966,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Reply" xml:space="preserve">
|
||||
<source>Reply</source>
|
||||
<target>Responder</target>
|
||||
|
||||
<note>Accessibility label for reply button</note>
|
||||
</trans-unit>
|
||||
@@ -1030,6 +1064,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Scan the code" xml:space="preserve">
|
||||
<source>Scan the code</source>
|
||||
<target>Escanea el código</target>
|
||||
|
||||
<note>Text on QR code view to prompt viewer to scan the QR code on screen with their device camera.</note>
|
||||
</trans-unit>
|
||||
@@ -1077,6 +1112,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Service" xml:space="preserve">
|
||||
<source>Service</source>
|
||||
<target>Servicio</target>
|
||||
|
||||
<note>Prompt selection of translation service provider.</note>
|
||||
</trans-unit>
|
||||
@@ -1123,6 +1159,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Software" xml:space="preserve">
|
||||
<source>Software</source>
|
||||
<target>Software</target>
|
||||
|
||||
<note>Label to display relay software.</note>
|
||||
</trans-unit>
|
||||
@@ -1134,6 +1171,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Supported NIPs" xml:space="preserve">
|
||||
<source>Supported NIPs</source>
|
||||
<target>NIPs soportados</target>
|
||||
|
||||
<note>Label to display relay's supported NIPs.</note>
|
||||
</trans-unit>
|
||||
@@ -1149,6 +1187,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>Esta es una clave pública, por lo que no podrás hacer publicaciones ni interactuar de ningún modo. Se usa para ver cuentas desde su perspectiva.</target>
|
||||
@@ -1177,8 +1220,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Hilo</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1194,16 +1241,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Translating from (lang)..." xml:space="preserve">
|
||||
<source>Translating from (lang)...</source>
|
||||
<target>Traduciendo del (lang)...</target>
|
||||
|
||||
<note>Button to indicate that the note is in the process of being translated from a different language.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translations" xml:space="preserve">
|
||||
<source>Translations</source>
|
||||
<target>Traducciones</target>
|
||||
|
||||
<note>Section title for selecting the translation service.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Type DELETE to delete" xml:space="preserve">
|
||||
<source>Type DELETE to delete</source>
|
||||
<target>Escriba "DELETE" para eliminar</target>
|
||||
|
||||
<note>Text field prompt asking user to type the word DELETE to confirm that they want to proceed with deleting their account. The all caps lock DELETE word should not be translated. Everything else should.</note>
|
||||
</trans-unit>
|
||||
@@ -1264,6 +1314,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Version" xml:space="preserve">
|
||||
<source>Version</source>
|
||||
<target>Versión</target>
|
||||
|
||||
<note>Label to display relay software version.</note>
|
||||
</trans-unit>
|
||||
@@ -1317,6 +1368,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Yes, Post with Private Key" xml:space="preserve">
|
||||
<source>Yes, Post with Private Key</source>
|
||||
<target>Sí, publicar con clave privada</target>
|
||||
|
||||
<note>Button to proceed with posting a note even though it looks like they might be posting a private key.</note>
|
||||
</trans-unit>
|
||||
@@ -1334,9 +1386,15 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Zap" xml:space="preserve">
|
||||
<source>Zap</source>
|
||||
<target>Zap</target>
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1349,12 +1407,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1486,19 +1538,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d otra nota</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d otras notas</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
@@ -1642,11 +1694,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="/zaps_count:dict/ZAPS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Zap</source>
|
||||
<target>Zap</target>
|
||||
|
||||
<note>Part of a larger sentence to describe how many zap payments there are on a post.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="/zaps_count:dict/ZAPS:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
<target>Zaps</target>
|
||||
|
||||
<note>Part of a larger sentence to describe how many zap payments there are on a post.</note>
|
||||
</trans-unit>
|
||||
|
||||
+52
-25
@@ -50,7 +50,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -81,7 +81,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -315,12 +315,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Chatter</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Vider</target>
|
||||
@@ -486,8 +480,7 @@ Number of relay servers a user is connected.</note>
|
||||
<source>Delete Account</source>
|
||||
<target>Supprimer votre compte</target>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -527,7 +520,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Earn Money" xml:space="preserve">
|
||||
<source>Earn Money</source>
|
||||
<target>Gagne de l'argent</target>
|
||||
<target>Gagner de l'argent</target>
|
||||
|
||||
<note>Heading indicating that this application allows users to earn money.</note>
|
||||
</trans-unit>
|
||||
@@ -561,6 +554,18 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
<target>EventDetailView</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
<target>Filtre</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>S'abonner</target>
|
||||
@@ -798,7 +803,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Notifications</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -806,6 +811,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
<target>Relai payant</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Payer</target>
|
||||
@@ -818,6 +829,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
<target>Supprimer le compte définitivement </target>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -937,8 +954,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Relais</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -1175,6 +1191,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
<target>C’est un relai payant, vous devez payer pour que vos publications soient acceptées.</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>Il s'agit d'une clé publique, vous ne pourrez pas publier de messages ou interagir de quelque manière que ce soit. Ceci est utilisé pour visualiser les comptes de leur point de vue.</target>
|
||||
@@ -1203,8 +1225,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Fil de discussion</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
<target>Pour filtrer votre fil %@, veuillez choisir les relais applicables dans la liste ci-dessous:</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1369,6 +1396,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
<target>Zaps</target>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1381,12 +1414,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1518,19 +1545,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d autre note</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d autres notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
+44
-24
@@ -49,7 +49,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -80,7 +80,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -311,12 +311,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Chat</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Cancella</target>
|
||||
@@ -479,8 +473,7 @@ Number of relay servers a user is connected.</note>
|
||||
<trans-unit id="Delete Account" xml:space="preserve">
|
||||
<source>Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -552,6 +545,16 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Segui</target>
|
||||
@@ -779,7 +782,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Notifiche</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -787,6 +790,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Paga</target>
|
||||
@@ -799,6 +807,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -916,8 +929,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Relays</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -1149,6 +1161,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>Questa è una chiave pubblica, non potrai postare o interagire in alcun modo. Puoi utilizzarla solo per vedere gli account</target>
|
||||
@@ -1177,8 +1194,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Thread</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1337,6 +1358,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1349,12 +1375,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>evento compresso, visualizza altre note</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>totale_seguaci</target>
|
||||
@@ -1486,19 +1506,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d altra nota</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d altre note</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+44
-24
@@ -49,7 +49,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -80,7 +80,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -311,12 +311,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Čatiņš</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Notīrīt</target>
|
||||
@@ -480,8 +474,7 @@ Number of relay servers a user is connected.</note>
|
||||
<source>Delete Account</source>
|
||||
<target>Izdzēst Kontu</target>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -554,6 +547,16 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Sekot</target>
|
||||
@@ -783,7 +786,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Paziņojumi</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -791,6 +794,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Maksāt</target>
|
||||
@@ -803,6 +811,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -920,8 +933,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Releji</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -1153,6 +1165,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>Šī ir publiskā atslēga, jūs nevarēsit rakstīt ziņas vai kādā citā veidā darboties. To izmanto, lai tikai skatītu kontus no to skatpunkta.</target>
|
||||
@@ -1181,8 +1198,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Plūsma</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1344,6 +1365,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1356,12 +1382,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>sabrucis_notikums_parādīt_citas_piezīmes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>sekotāju_skaits</target>
|
||||
@@ -1493,19 +1513,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d cita ziņa</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d citas ziņas</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· Ziņas ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
+51
-24
@@ -50,7 +50,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -81,7 +81,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -315,12 +315,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Chat</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Wis</target>
|
||||
@@ -486,8 +480,7 @@ Number of relay servers a user is connected.</note>
|
||||
<source>Delete Account</source>
|
||||
<target>Verwijder account</target>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -561,6 +554,18 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
<target>EventDetailView</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
<target>Filter</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Volg</target>
|
||||
@@ -798,7 +803,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Meldingen</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -806,6 +811,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
<target>Betaalde relay</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Betaal</target>
|
||||
@@ -818,6 +829,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
<target>Verwijder account permanent</target>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -937,8 +954,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Relays</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -1175,6 +1191,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
<target>Dit is een betaalde relay; je dient dus te betalen voordat berichten goedgekeurd worden.</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>Dit is een openbare sleutel waarmee geen berichten of antwoorden kunnen worden geplaatst. Deze wordt alléén gebruikt om accounts te tonen.</target>
|
||||
@@ -1203,8 +1225,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Details</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
<target>Om je %@-feed te filteren, kun je kiezen uit onderstaande relays:</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1369,6 +1396,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
<target>Zaps</target>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1381,12 +1414,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1518,19 +1545,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d andere notitie</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d andere notities</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
+78
-24
@@ -18,6 +18,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="NSFaceIDUsageDescription" xml:space="preserve">
|
||||
<source>Local authentication to access private key</source>
|
||||
<target>Lokalne uwierzytelnienie dostępu do klucza prywatnego</target>
|
||||
|
||||
<note>Privacy - Face ID Usage Description</note>
|
||||
</trans-unit>
|
||||
@@ -49,7 +50,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -80,7 +81,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -133,6 +134,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="API Key (required)" xml:space="preserve">
|
||||
<source>API Key (required)</source>
|
||||
<target>Klucz API (wymagany)</target>
|
||||
|
||||
<note>Prompt for required entry of API Key to use translation server.</note>
|
||||
</trans-unit>
|
||||
@@ -193,6 +195,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admin" xml:space="preserve">
|
||||
<source>Admin</source>
|
||||
<target>Admin</target>
|
||||
|
||||
<note>Label to display relay contact user.</note>
|
||||
</trans-unit>
|
||||
@@ -278,6 +281,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Boosts" xml:space="preserve">
|
||||
<source>Boosts</source>
|
||||
<target>Podbij</target>
|
||||
|
||||
<note>Accessibility label for boosts button</note>
|
||||
</trans-unit>
|
||||
@@ -311,12 +315,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Czat</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Wyczyść</target>
|
||||
@@ -331,6 +329,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact" xml:space="preserve">
|
||||
<source>Contact</source>
|
||||
<target>Kontakt</target>
|
||||
|
||||
<note>Label to display relay contact information.</note>
|
||||
</trans-unit>
|
||||
@@ -458,6 +457,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="DeepL (Proprietary, Higher Accuracy)" xml:space="preserve">
|
||||
<source>DeepL (Proprietary, Higher Accuracy)</source>
|
||||
<target>DeepL (Własnościowy, wysoka dokładność)</target>
|
||||
|
||||
<note>Dropdown option for selecting DeepL as the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -478,17 +478,19 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete Account" xml:space="preserve">
|
||||
<source>Delete Account</source>
|
||||
<target>Skasuj konto</target>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
<target>Konto skasowane</target>
|
||||
|
||||
<note>Alert message to indicate this is a deleted account</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Description" xml:space="preserve">
|
||||
<source>Description</source>
|
||||
<target>Opis</target>
|
||||
|
||||
<note>Label to display relay description.</note>
|
||||
</trans-unit>
|
||||
@@ -552,6 +554,16 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Obserwuj</target>
|
||||
@@ -560,11 +572,13 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow Back" xml:space="preserve">
|
||||
<source>Follow Back</source>
|
||||
<target>Obserwuj</target>
|
||||
|
||||
<note>Button to follow a user back.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow me on nostr" xml:space="preserve">
|
||||
<source>Follow me on nostr</source>
|
||||
<target>Obserwuj mnie na nostr</target>
|
||||
|
||||
<note>Text on QR code view to prompt viewer looking at screen to follow the user.</note>
|
||||
</trans-unit>
|
||||
@@ -595,16 +609,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Follows you" xml:space="preserve">
|
||||
<source>Follows you</source>
|
||||
<target>Obserwuje Cię</target>
|
||||
|
||||
<note>Text to indicate that a user is following your profile.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Free" xml:space="preserve">
|
||||
<source>Free</source>
|
||||
<target>Darmowy</target>
|
||||
|
||||
<note>Dropdown option for selecting Free plan for DeepL translation service.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Get API Key" xml:space="preserve">
|
||||
<source>Get API Key</source>
|
||||
<target>Pobierz klucz API</target>
|
||||
|
||||
<note>Button to navigate to DeepL website to get a translation API key.</note>
|
||||
</trans-unit>
|
||||
@@ -683,6 +700,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="LibreTranslate (Open Source)" xml:space="preserve">
|
||||
<source>LibreTranslate (Open Source)</source>
|
||||
<target>LibraTranslate (Otwarte Źródła)</target>
|
||||
|
||||
<note>Dropdown option for selecting LibreTranslate as the translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -700,11 +718,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Like" xml:space="preserve">
|
||||
<source>Like</source>
|
||||
<target>Polub</target>
|
||||
|
||||
<note>Accessibility Label for Like button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Local authentication to access private key" xml:space="preserve">
|
||||
<source>Local authentication to access private key</source>
|
||||
<target>Lokalne uwierzytelnienie dostępu do klucza prywatnego</target>
|
||||
|
||||
<note>Face ID usage description shown when trying to access private key</note>
|
||||
</trans-unit>
|
||||
@@ -749,6 +769,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="No" xml:space="preserve">
|
||||
<source>No</source>
|
||||
<target>Nie</target>
|
||||
|
||||
<note>Button to cancel out of posting a note after being alerted that it looks like they might be posting a private key.</note>
|
||||
</trans-unit>
|
||||
@@ -766,6 +787,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Note contains "nsec1" private key. Are you sure?" xml:space="preserve">
|
||||
<source>Note contains "nsec1" private key. Are you sure?</source>
|
||||
<target>Treść zawiera klucz prywatny "nsec1". Jesteś pewien?</target>
|
||||
|
||||
<note>Alert user that they might be attempting to paste a private key and ask them to confirm.</note>
|
||||
</trans-unit>
|
||||
@@ -779,7 +801,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Powiadomienia</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -787,6 +809,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Zapłać</target>
|
||||
@@ -799,6 +826,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -807,6 +839,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Plan" xml:space="preserve">
|
||||
<source>Plan</source>
|
||||
<target>Plan</target>
|
||||
|
||||
<note>Prompt selection of DeepL subscription plan to perform machine translations on notes</note>
|
||||
</trans-unit>
|
||||
@@ -848,6 +881,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Pro" xml:space="preserve">
|
||||
<source>Pro</source>
|
||||
<target>Profesjonalny</target>
|
||||
|
||||
<note>Dropdown option for selecting Pro plan for DeepL translation service.</note>
|
||||
</trans-unit>
|
||||
@@ -916,8 +950,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Przekaźniki</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -933,6 +966,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Reply" xml:space="preserve">
|
||||
<source>Reply</source>
|
||||
<target>Odpowiedz</target>
|
||||
|
||||
<note>Accessibility label for reply button</note>
|
||||
</trans-unit>
|
||||
@@ -1030,6 +1064,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Scan the code" xml:space="preserve">
|
||||
<source>Scan the code</source>
|
||||
<target>Skanuj kod</target>
|
||||
|
||||
<note>Text on QR code view to prompt viewer to scan the QR code on screen with their device camera.</note>
|
||||
</trans-unit>
|
||||
@@ -1077,6 +1112,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Service" xml:space="preserve">
|
||||
<source>Service</source>
|
||||
<target>Usługa</target>
|
||||
|
||||
<note>Prompt selection of translation service provider.</note>
|
||||
</trans-unit>
|
||||
@@ -1123,6 +1159,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Software" xml:space="preserve">
|
||||
<source>Software</source>
|
||||
<target>Oprogramowanie</target>
|
||||
|
||||
<note>Label to display relay software.</note>
|
||||
</trans-unit>
|
||||
@@ -1134,6 +1171,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Supported NIPs" xml:space="preserve">
|
||||
<source>Supported NIPs</source>
|
||||
<target>Wspierane NIP</target>
|
||||
|
||||
<note>Label to display relay's supported NIPs.</note>
|
||||
</trans-unit>
|
||||
@@ -1149,6 +1187,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>To jest klucz publiczny, nie będziesz mógł pisać postów ani mieć żadnych interakcji. Jest używany tylko do odczytu z ich perspektywy.</target>
|
||||
@@ -1177,8 +1220,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Wątek</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1194,16 +1241,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Translating from (lang)..." xml:space="preserve">
|
||||
<source>Translating from (lang)...</source>
|
||||
<target>Tłumaczę z (lang)...</target>
|
||||
|
||||
<note>Button to indicate that the note is in the process of being translated from a different language.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translations" xml:space="preserve">
|
||||
<source>Translations</source>
|
||||
<target>Tłumaczenia</target>
|
||||
|
||||
<note>Section title for selecting the translation service.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Type DELETE to delete" xml:space="preserve">
|
||||
<source>Type DELETE to delete</source>
|
||||
<target>Napisz DELETE aby skasować</target>
|
||||
|
||||
<note>Text field prompt asking user to type the word DELETE to confirm that they want to proceed with deleting their account. The all caps lock DELETE word should not be translated. Everything else should.</note>
|
||||
</trans-unit>
|
||||
@@ -1264,6 +1314,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Version" xml:space="preserve">
|
||||
<source>Version</source>
|
||||
<target>Wersja</target>
|
||||
|
||||
<note>Label to display relay software version.</note>
|
||||
</trans-unit>
|
||||
@@ -1317,6 +1368,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Yes, Post with Private Key" xml:space="preserve">
|
||||
<source>Yes, Post with Private Key</source>
|
||||
<target>Tak, wyślij pomimo to</target>
|
||||
|
||||
<note>Button to proceed with posting a note even though it looks like they might be posting a private key.</note>
|
||||
</trans-unit>
|
||||
@@ -1334,9 +1386,15 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Zap" xml:space="preserve">
|
||||
<source>Zap</source>
|
||||
<target>Zap</target>
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1349,12 +1407,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1486,19 +1538,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d inna notatka</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d inne notatki</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
@@ -1642,11 +1694,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="/zaps_count:dict/ZAPS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Zap</source>
|
||||
<target>Zap</target>
|
||||
|
||||
<note>Part of a larger sentence to describe how many zap payments there are on a post.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="/zaps_count:dict/ZAPS:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
<target>Zapów</target>
|
||||
|
||||
<note>Part of a larger sentence to describe how many zap payments there are on a post.</note>
|
||||
</trans-unit>
|
||||
|
||||
+44
-24
@@ -49,7 +49,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -80,7 +80,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -311,12 +311,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Conversação</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Limpar</target>
|
||||
@@ -479,8 +473,7 @@ Number of relay servers a user is connected.</note>
|
||||
<trans-unit id="Delete Account" xml:space="preserve">
|
||||
<source>Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -552,6 +545,16 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Seguir</target>
|
||||
@@ -779,7 +782,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Notificações</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -787,6 +790,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Pagar</target>
|
||||
@@ -799,6 +807,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -916,8 +929,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Relays</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -1149,6 +1161,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>Esta é uma chave pública, não poderá fazer posts ou interagir de forma alguma. Isto é utilizado para visualizar contas a partir da sua perspetiva.</target>
|
||||
@@ -1177,8 +1194,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Thread</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1337,6 +1358,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1349,12 +1375,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1486,19 +1506,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d outro note</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d outros notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
+44
-24
@@ -48,7 +48,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -78,7 +78,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -299,12 +299,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>Sohbet</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Temizle</target>
|
||||
@@ -461,8 +455,7 @@ Number of relay servers a user is connected.</note>
|
||||
<trans-unit id="Delete Account" xml:space="preserve">
|
||||
<source>Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -532,6 +525,16 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>Takip Et</target>
|
||||
@@ -753,13 +756,18 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>Bildirimler</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>Öde</target>
|
||||
@@ -772,6 +780,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -887,8 +900,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>Röleler</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -1109,6 +1121,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>Bu herkese açık bir anahtardır, herhangi bir şekilde gönderi yapamaz veya etkileşimde bulunamazsınız. Bu, hesapları kendi bakış açılarından görüntülemek için kullanılır.</target>
|
||||
@@ -1137,8 +1154,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>Konu</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1289,6 +1310,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1301,12 +1327,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1438,19 +1458,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d diğer not</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d diğer notlar</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
+51
-24
@@ -50,7 +50,7 @@
|
||||
<source>%@ %@</source>
|
||||
<target>%@ %@</target>
|
||||
|
||||
<note>Sentence 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'.
|
||||
<note>Sentence 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'.
|
||||
Sentence 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'.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ has been blocked" xml:space="preserve">
|
||||
@@ -81,7 +81,7 @@ Sentence composed of 2 variables to describe how many relay servers a user is co
|
||||
<source>%lld</source>
|
||||
<target>%lld</target>
|
||||
|
||||
<note>Number of zap payments on a post.
|
||||
<note>Number of reposts.
|
||||
Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld/%lld" xml:space="preserve">
|
||||
@@ -315,12 +315,6 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Cash App.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat" xml:space="preserve">
|
||||
<source>Chat</source>
|
||||
<target>聊天</target>
|
||||
|
||||
<note>Navigation bar title for Chatroom view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>清除</target>
|
||||
@@ -485,8 +479,7 @@ Number of relay servers a user is connected.</note>
|
||||
<source>Delete Account</source>
|
||||
<target>删除账户</target>
|
||||
|
||||
<note>Alert for deleting the users account.
|
||||
Button to delete the user's account.</note>
|
||||
<note>Button to delete the user's account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted Account" xml:space="preserve">
|
||||
<source>Deleted Account</source>
|
||||
@@ -560,6 +553,17 @@ Number of relay servers a user is connected.</note>
|
||||
|
||||
<note>Error message indicating why saving keys failed.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="EventDetailView" xml:space="preserve">
|
||||
<source>EventDetailView</source>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter" xml:space="preserve">
|
||||
<source>Filter</source>
|
||||
<target>筛选</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow" xml:space="preserve">
|
||||
<source>Follow</source>
|
||||
<target>关注</target>
|
||||
@@ -568,6 +572,7 @@ Number of relay servers a user is connected.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Follow Back" xml:space="preserve">
|
||||
<source>Follow Back</source>
|
||||
<target>回关</target>
|
||||
|
||||
<note>Button to follow a user back.</note>
|
||||
</trans-unit>
|
||||
@@ -604,6 +609,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
</trans-unit>
|
||||
<trans-unit id="Follows you" xml:space="preserve">
|
||||
<source>Follows you</source>
|
||||
<target>关注了你</target>
|
||||
|
||||
<note>Text to indicate that a user is following your profile.</note>
|
||||
</trans-unit>
|
||||
@@ -795,7 +801,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Notifications</source>
|
||||
<target>通知</target>
|
||||
|
||||
<note>Navigation title for notifications.</note>
|
||||
<note>Toolbar label for Notifications view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nudity or explicit content" xml:space="preserve">
|
||||
<source>Nudity or explicit content</source>
|
||||
@@ -803,6 +809,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account or content has nudity or explicit content.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paid Relay" xml:space="preserve">
|
||||
<source>Paid Relay</source>
|
||||
<target>付费中继</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Pay" xml:space="preserve">
|
||||
<source>Pay</source>
|
||||
<target>支付</target>
|
||||
@@ -815,6 +827,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Navigation bar title for view to pay Lightning invoice.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanently Delete Account" xml:space="preserve">
|
||||
<source>Permanently Delete Account</source>
|
||||
<target>永久删除账户</target>
|
||||
|
||||
<note>Alert for deleting the users account.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Phoenix" xml:space="preserve">
|
||||
<source>Phoenix</source>
|
||||
<target>Phoenix</target>
|
||||
@@ -934,8 +952,7 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Relays</source>
|
||||
<target>中继器</target>
|
||||
|
||||
<note>Sidebar menu label for Relay servers view
|
||||
Sidebar menu label for Relays view.</note>
|
||||
<note>Sidebar menu label for Relays view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Relays have been notified and clients will be able to use this information to filter content. Thank you!" xml:space="preserve">
|
||||
<source>Relays have been notified and clients will be able to use this information to filter content. Thank you!</source>
|
||||
@@ -1172,6 +1189,12 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Button for user to report that the account is impersonating someone.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a paid relay, you must pay for posts to be accepted." xml:space="preserve">
|
||||
<source>This is a paid relay, you must pay for posts to be accepted.</source>
|
||||
<target>这是一个付费中继。您需要先付费才能通过它发送推文。</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective." xml:space="preserve">
|
||||
<source>This is a public key, you will not be able to make posts or interact in any way. This is used for viewing accounts from their perspective.</source>
|
||||
<target>这是一个公钥。您无法使用公钥发布推文或进行其他交互。您只可以从该用户视角查看此账户。</target>
|
||||
@@ -1200,8 +1223,13 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>Thread</source>
|
||||
<target>推文链</target>
|
||||
|
||||
<note>Navigation bar title for note thread.
|
||||
Navigation bar title for threaded event detail view.</note>
|
||||
<note>Navigation bar title for note thread.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To filter your %@ feed, please choose applicable relays from the list below:" xml:space="preserve">
|
||||
<source>To filter your %@ feed, please choose applicable relays from the list below:</source>
|
||||
<target>如果要筛选关于%@的条目,请在以下列表中选择适用的中继:</target>
|
||||
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Translate Note" xml:space="preserve">
|
||||
<source>Translate Note</source>
|
||||
@@ -1365,6 +1393,11 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Accessibility label for zap button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zaps" xml:space="preserve">
|
||||
<source>Zaps</source>
|
||||
|
||||
<note>Navigation bar title for the Zaps view.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Zebedee" xml:space="preserve">
|
||||
<source>Zebedee</source>
|
||||
<target>Zebedee</target>
|
||||
@@ -1377,12 +1410,6 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
|
||||
<note>Dropdown option label for Lightning wallet, Zeus LN.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="collapsed_event_view_other_notes" translate="no" xml:space="preserve">
|
||||
<source>collapsed_event_view_other_notes</source>
|
||||
<target>collapsed_event_view_other_notes</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped. (Key in .stringsdict)</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="followers_count" translate="no" xml:space="preserve">
|
||||
<source>followers_count</source>
|
||||
<target>followers_count</target>
|
||||
@@ -1514,19 +1541,19 @@ Part of a larger sentence to describe how many profiles a user is following.</no
|
||||
<source>%d other note</source>
|
||||
<target>%d 条更多推文</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NOTES:dict/other:dict/:string" xml:space="preserve">
|
||||
<source>%d other notes</source>
|
||||
<target>%d 条更多推文</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/collapsed_event_view_other_notes:dict/NSStringLocalizedFormatKey:dict/:string" xml:space="preserve">
|
||||
<source>··· %#@NOTES@ ···</source>
|
||||
<target>··· %#@NOTES@ ···</target>
|
||||
|
||||
<note>Text to indicate that the thread was collapsed and that there are other notes to view if tapped.</note>
|
||||
<note/>
|
||||
</trans-unit>
|
||||
<trans-unit id="/followers_count:dict/FOLLOWERS:dict/one:dict/:string" xml:space="preserve">
|
||||
<source>Follower</source>
|
||||
|
||||
Reference in New Issue
Block a user