From 1b1a6dafde8da85e68217afcaeabe47ac1b30229 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Tue, 18 Jun 2024 09:34:22 +1000 Subject: [PATCH 01/16] WIP: Conversation List screen --- Session.xcodeproj/project.pbxproj | 4 + Session/Home/HomeScreen.swift | 131 ++++++++++++++++++ Session/Meta/Translations/InfoPlist.xcstrings | 2 +- Session/Settings/RecoveryPasswordScreen.swift | 2 +- 4 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 Session/Home/HomeScreen.swift diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index 9c3d211dd7..c27d4e3f9e 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -183,6 +183,7 @@ 7BFD1A972747689000FB91B9 /* Session-Turn-Server in Resources */ = {isa = PBXBuildFile; fileRef = 7BFD1A962747689000FB91B9 /* Session-Turn-Server */; }; 88C614F4223F9BE0CB94E4E5 /* Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionUtilitiesKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35C5EF2AACD4A39D6E0E2C49 /* Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionUtilitiesKit.framework */; }; 941061402BBE45EB0056C084 /* ActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9410613F2BBE45EB0056C084 /* ActivityView.swift */; }; + 941BE62F2C1BF888005A880A /* HomeScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941BE62E2C1BF887005A880A /* HomeScreen.swift */; }; 9422EE2B2B8C3A97004C740D /* String+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9422EE2A2B8C3A97004C740D /* String+Utilities.swift */; }; 942C9CA22B67769000B5153A /* SessionSearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 942C9CA12B67769000B5153A /* SessionSearchBar.swift */; }; 943C6D762B705B7D004ACE64 /* CompatibleScrollingVStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 943C6D752B705B7D004ACE64 /* CompatibleScrollingVStack.swift */; }; @@ -1373,6 +1374,7 @@ 89EE44A6174C653D2F4DB573 /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit.debug.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit.debug.xcconfig"; sourceTree = ""; }; 91271A534D1D4AB949B1319E /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension.app store release.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension.app store release.xcconfig"; sourceTree = ""; }; 9410613F2BBE45EB0056C084 /* ActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityView.swift; sourceTree = ""; }; + 941BE62E2C1BF887005A880A /* HomeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreen.swift; sourceTree = ""; }; 9422EE2A2B8C3A97004C740D /* String+Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Utilities.swift"; sourceTree = ""; }; 942C9CA12B67769000B5153A /* SessionSearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionSearchBar.swift; sourceTree = ""; }; 943C6D752B705B7D004ACE64 /* CompatibleScrollingVStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompatibleScrollingVStack.swift; sourceTree = ""; }; @@ -3169,6 +3171,7 @@ 7BAF54CA27ACCEEC003D12F8 /* GlobalSearch */, FDCDB8DF2811007F00352A0C /* HomeViewModel.swift */, B8BB82A4238F627000BA5194 /* HomeVC.swift */, + 941BE62E2C1BF887005A880A /* HomeScreen.swift */, ); path = Home; sourceTree = ""; @@ -6595,6 +6598,7 @@ FD37E9CC28A1E578003AE748 /* AppearanceViewController.swift in Sources */, B8EB20F02640F7F000773E52 /* OpenGroupInvitationView.swift in Sources */, C328254025CA55880062D0A7 /* ContextMenuVC.swift in Sources */, + 941BE62F2C1BF888005A880A /* HomeScreen.swift in Sources */, 7BD687D12A5D0D1200D8E455 /* MessageInfoScreen.swift in Sources */, 7BD687D12A5D0D1200D8E455 /* MessageInfoScreen.swift in Sources */, B8269D2925C7A4B400488AB4 /* InputView.swift in Sources */, diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift new file mode 100644 index 0000000000..0bebee7108 --- /dev/null +++ b/Session/Home/HomeScreen.swift @@ -0,0 +1,131 @@ +// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. + +import SwiftUI +import GRDB +import DifferenceKit +import SessionUIKit +import SessionMessagingKit +import SessionUtilitiesKit +import SignalUtilitiesKit + +struct HomeScreen: View { + @EnvironmentObject var host: HostWrapper + + @State private var viewModel: HomeViewModel = HomeViewModel() + + var body: some View { + ZStack( + alignment: .topLeading, + content: { + ThemeManager.currentTheme.colorSwiftUI(for: .backgroundPrimary).ignoresSafeArea() + + if viewModel.state.showViewedSeedBanner { + SeedBanner() + } + + List(content: { + viewModel.threadData.forEach { section in + switch section.model { + case .messageRequests: + + case .threads: + + } + } + }) + } + ) + } +} + +struct SeedBanner: View { + var body: some View { + ZStack( + alignment: .topLeading, + content: { + ThemeManager.currentTheme.colorSwiftUI(for: .conversationButton_background).ignoresSafeArea() + + Rectangle() + .fill(themeColor: .primary) + .frame( + width: .infinity, + height: 2 + ) + + HStack( + alignment: .center, + spacing: 0, + content: { + VStack( + alignment: .leading, + spacing: Values.smallSpacing, + content: { + HStack( + alignment: .center, + spacing: Values.verySmallSpacing, + content: { + Text("recoveryPasswordBannerTittle".localized()) + .font(.system(size: Values.smallFontSize)) + .bold() + .foregroundColor(themeColor: .textPrimary) + + Image("SessionShieldFilled") + .resizable() + .renderingMode(.template) + .foregroundColor(themeColor: .textPrimary) + .scaledToFit() + .frame( + width: 14, + height: 16 + ) + } + ) + + Text("recoveryPasswordBannerDescription".localized()) + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .textSecondary) + .lineLimit(2) + } + ) + + Spacer() + + Button { + + } label: { + Text("theContinue".localized()) + .bold() + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .sessionButton_text) + .frame( + minWidth: 80, + maxHeight: Values.smallButtonHeight, + alignment: .center + ) + .overlay( + Capsule() + .stroke(themeColor: .sessionButton_border) + ) + } + .accessibility( + Accessibility( + identifier: "Reveal recovery phrase button", + label: "Reveal recovery phrase button" + ) + ) + } + ) + .padding(isIPhone5OrSmaller ? Values.smallSpacing : Values.mediumSpacing) + } + ) + .border( + width: Values.separatorThickness, + edges: [.bottom], + color: .borderSeparator + ) + } +} + +#Preview { + HomeScreen() +} diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index 0f6d974fa0..94a006dfd5 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"sourceLanguage":"en","strings":{"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}}}},"New Message":{},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSAppleMusicUsageDescription":{"localizations":{"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}},"extractionState":"manual"},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}}}},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"localizations":{"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}},"extractionState":"manual"}},"version":"1.0"} \ No newline at end of file +{"strings":{"NSMicrophoneUsageDescription":{"localizations":{"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}}},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}}}},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}}},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"New Message":{},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}}}}},"version":"1.0","sourceLanguage":"en"} \ No newline at end of file diff --git a/Session/Settings/RecoveryPasswordScreen.swift b/Session/Settings/RecoveryPasswordScreen.swift index 7e2562fd3d..645e03f835 100644 --- a/Session/Settings/RecoveryPasswordScreen.swift +++ b/Session/Settings/RecoveryPasswordScreen.swift @@ -40,7 +40,7 @@ struct RecoveryPasswordScreen: View { VStack( alignment: .leading, - spacing: 0 + spacing: 4 ) { HStack( alignment: .center, From 8002d0f177ded6754fc4631e96a78e2a96af2067 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Wed, 19 Jun 2024 11:13:56 +1000 Subject: [PATCH 02/16] WIP: Empty state view --- Session/Home/HomeScreen.swift | 64 ++++++++++++++++--- Session/Meta/Translations/InfoPlist.xcstrings | 2 +- 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index 0bebee7108..a792ea029e 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -12,6 +12,7 @@ struct HomeScreen: View { @EnvironmentObject var host: HostWrapper @State private var viewModel: HomeViewModel = HomeViewModel() + @State private var flow: Onboarding.Flow? var body: some View { ZStack( @@ -23,21 +24,64 @@ struct HomeScreen: View { SeedBanner() } - List(content: { - viewModel.threadData.forEach { section in - switch section.model { - case .messageRequests: - - case .threads: - - } - } - }) + if viewModel.threadData.isEmpty { + EmptyStateView(flow: $flow) + } + +// List(content: { +// viewModel.threadData.forEach { section in +// switch section.model { +// case .messageRequests: +// +// case .threads: +// +// } +// } +// }) } ) } } +// MARK: EmptyStateView + +struct EmptyStateView: View { + @Binding var flow: Onboarding.Flow? + var body: some View { + VStack( + alignment: .center, + spacing: Values.smallSpacing, + content: { + if flow == .register { + // Welcome state after account creation + + } else { + // Normal empty state + Image("SessionGreen64") + .resizable() + .aspectRatio(contentMode: .fit) + .frame( + height: 103, + alignment: .center + ) + } + + Text("conversationsNone".localized()) + .bold() + .font(.system(size: Values.mediumFontSize)) + .foregroundColor(themeColor: .textPrimary) + + Text("onboardingHitThePlusButton".localized()) + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .textPrimary) + .multilineTextAlignment(.center) + } + ) + } +} + +// MARK: SeedBanner + struct SeedBanner: View { var body: some View { ZStack( diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index 94a006dfd5..1ebee79b53 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"strings":{"NSMicrophoneUsageDescription":{"localizations":{"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}}},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}}}},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}}},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"New Message":{},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}}}}},"version":"1.0","sourceLanguage":"en"} \ No newline at end of file +{"version":"1.0","sourceLanguage":"en","strings":{"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}}}},"New Message":{},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}}}},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"NSPhotoLibraryAddUsageDescription":{"localizations":{"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"localizations":{"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}}},"extractionState":"manual"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}}}},"NSFaceIDUsageDescription":{"localizations":{"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}},"extractionState":"manual"}}} \ No newline at end of file From 287cd626b37c845d8bbfed73837d725e3c18364b Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Wed, 19 Jun 2024 11:39:27 +1000 Subject: [PATCH 03/16] WIP: Empty state view --- Session/Home/HomeScreen.swift | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index a792ea029e..2696943ab4 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -54,7 +54,17 @@ struct EmptyStateView: View { content: { if flow == .register { // Welcome state after account creation + Image("Hooray") + .frame( + height: 96, + alignment: .center + ) + Text("onboardingAccountCreated".localized()) + .bold() + .font(.system(size: Values.veryLargeFontSize)) + .foregroundColor(themeColor: .textPrimary) + } else { // Normal empty state Image("SessionGreen64") @@ -64,6 +74,16 @@ struct EmptyStateView: View { height: 103, alignment: .center ) + + Image("SessionHeading") + .resizable() + .renderingMode(.template) + .aspectRatio(contentMode: .fit) + .foregroundColor(themeColor: .textPrimary) + .frame( + height: 22, + alignment: .center + ) } Text("conversationsNone".localized()) From a79d08722fb17f972e73ebcacf6ce6c9042ef84c Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Thu, 20 Jun 2024 15:27:19 +1000 Subject: [PATCH 04/16] WIP: Home Screen Conversation List --- Session/Home/HomeScreen.swift | 56 ++++++++++++++----- Session/Meta/Translations/InfoPlist.xcstrings | 2 +- .../Utilities/DifferenceKit+Utilities.swift | 6 ++ 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index 2696943ab4..4fad2af7dd 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -14,9 +14,13 @@ struct HomeScreen: View { @State private var viewModel: HomeViewModel = HomeViewModel() @State private var flow: Onboarding.Flow? + init(flow: Onboarding.Flow? = nil) { + self.flow = flow + } + var body: some View { ZStack( - alignment: .topLeading, + alignment: .top, content: { ThemeManager.currentTheme.colorSwiftUI(for: .backgroundPrimary).ignoresSafeArea() @@ -25,24 +29,37 @@ struct HomeScreen: View { } if viewModel.threadData.isEmpty { - EmptyStateView(flow: $flow) + ZStack { + EmptyStateView(flow: $flow) + } + .frame( + maxWidth: .infinity, + maxHeight: .infinity, + alignment: .center + ) + } -// List(content: { -// viewModel.threadData.forEach { section in -// switch section.model { -// case .messageRequests: -// -// case .threads: -// -// } -// } -// }) + + + } ) } } +// MARK: ConversationList + +struct ConversationList: View { + @Binding private var viewModel: HomeViewModel + + var body: some View { + List(viewModel.threadData) { sectionModel in + + } + } +} + // MARK: EmptyStateView struct EmptyStateView: View { @@ -64,6 +81,10 @@ struct EmptyStateView: View { .bold() .font(.system(size: Values.veryLargeFontSize)) .foregroundColor(themeColor: .textPrimary) + + Text("onboardingBubbleWelcomeToSession".localized()) + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .sessionButton_text) } else { // Normal empty state @@ -74,6 +95,7 @@ struct EmptyStateView: View { height: 103, alignment: .center ) + .padding(.bottom, Values.mediumSpacing) Image("SessionHeading") .resizable() @@ -84,8 +106,12 @@ struct EmptyStateView: View { height: 22, alignment: .center ) + .padding(.bottom, Values.smallSpacing) } + Line(color: .borderSeparator) + .padding(.vertical, Values.smallSpacing) + Text("conversationsNone".localized()) .bold() .font(.system(size: Values.mediumFontSize)) @@ -97,6 +123,10 @@ struct EmptyStateView: View { .multilineTextAlignment(.center) } ) + .frame( + width: 300, + alignment: .center + ) } } @@ -191,5 +221,5 @@ struct SeedBanner: View { } #Preview { - HomeScreen() + HomeScreen(flow: .register) } diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index 1ebee79b53..4b94a8bfb1 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"version":"1.0","sourceLanguage":"en","strings":{"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}}}},"New Message":{},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}}}},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"NSPhotoLibraryAddUsageDescription":{"localizations":{"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"localizations":{"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}}},"extractionState":"manual"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}}}},"NSFaceIDUsageDescription":{"localizations":{"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}},"extractionState":"manual"}}} \ No newline at end of file +{"strings":{"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"New Message":{},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"NSFaceIDUsageDescription":{"localizations":{"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}},"extractionState":"manual"},"NSMicrophoneUsageDescription":{"localizations":{"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}}},"extractionState":"manual"},"NSPhotoLibraryUsageDescription":{"localizations":{"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"localizations":{"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}},"extractionState":"manual"},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}}},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"}},"sourceLanguage":"en","version":"1.0"} \ No newline at end of file diff --git a/SessionUtilitiesKit/Utilities/DifferenceKit+Utilities.swift b/SessionUtilitiesKit/Utilities/DifferenceKit+Utilities.swift index ebed8523a8..47e01ddacd 100644 --- a/SessionUtilitiesKit/Utilities/DifferenceKit+Utilities.swift +++ b/SessionUtilitiesKit/Utilities/DifferenceKit+Utilities.swift @@ -4,3 +4,9 @@ import Foundation import DifferenceKit extension String: Differentiable {} + +extension ArraySection: Identifiable { + public var id: String { + "\(model.differenceIdentifier)\(elements.count)" + } +} From c0c4258e78e4b91f408e451031937745bde52724 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Fri, 21 Jun 2024 13:11:41 +1000 Subject: [PATCH 05/16] WIP: Home screen conversation list + Session button component by SwiftUI --- Session.xcodeproj/project.pbxproj | 4 + Session/Home/HomeScreen.swift | 20 ++++- Session/Meta/Translations/InfoPlist.xcstrings | 2 +- .../SwiftUI/SessionButton_SwiftUI.swift | 74 +++++++++++++++++++ 4 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 SessionUIKit/Components/SwiftUI/SessionButton_SwiftUI.swift diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index c27d4e3f9e..df67936004 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -198,6 +198,7 @@ 9473386E2BDF5F3E00B9E169 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 9473386D2BDF5F3E00B9E169 /* InfoPlist.xcstrings */; }; 94B3DC172AF8592200C88531 /* QuoteView_SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B3DC162AF8592200C88531 /* QuoteView_SwiftUI.swift */; }; 94C5DCB02BE88170003AA8C5 /* BezierPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C5DCAF2BE88170003AA8C5 /* BezierPathView.swift */; }; + 94E12DBC2C24063A00D28EE0 /* SessionButton_SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */; }; A11CD70D17FA230600A2D1B1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */; }; A163E8AB16F3F6AA0094D68B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A163E8AA16F3F6A90094D68B /* Security.framework */; }; A1C32D5017A06538000A904E /* AddressBookUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1C32D4F17A06537000A904E /* AddressBookUI.framework */; }; @@ -1389,6 +1390,7 @@ 9473386D2BDF5F3E00B9E169 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; 94B3DC162AF8592200C88531 /* QuoteView_SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuoteView_SwiftUI.swift; sourceTree = ""; }; 94C5DCAF2BE88170003AA8C5 /* BezierPathView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BezierPathView.swift; sourceTree = ""; }; + 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionButton_SwiftUI.swift; sourceTree = ""; }; 987AE169AEA3246E4C0897B1 /* Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 998762BFD08C2415FE71186C /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.debug.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.debug.xcconfig"; sourceTree = ""; }; 9DE2662E4E5838CD8E1AF35F /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app store release.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app store release.xcconfig"; sourceTree = ""; }; @@ -2609,6 +2611,7 @@ 942C9CA12B67769000B5153A /* SessionSearchBar.swift */, 943C6D752B705B7D004ACE64 /* CompatibleScrollingVStack.swift */, 9410613F2BBE45EB0056C084 /* ActivityView.swift */, + 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */, ); path = SwiftUI; sourceTree = ""; @@ -5881,6 +5884,7 @@ C331FFE32558FB0000070591 /* TabBar.swift in Sources */, FD37E9D528A1FCE8003AE748 /* Theme+OceanLight.swift in Sources */, FDF848F129406A30007DCAE5 /* Format.swift in Sources */, + 94E12DBC2C24063A00D28EE0 /* SessionButton_SwiftUI.swift in Sources */, 7BA1E0E82A8087DB00123D0D /* SwiftUI+Utilities.swift in Sources */, FD37E9C828A1D73F003AE748 /* Theme+Colors.swift in Sources */, 9422EE2B2B8C3A97004C740D /* String+Utilities.swift in Sources */, diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index 4fad2af7dd..e70e3683ac 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -55,7 +55,25 @@ struct ConversationList: View { var body: some View { List(viewModel.threadData) { sectionModel in - + switch sectionModel.model { + case .messageRequests: + ZStack( + alignment: .center, + content: { + + } + ) + + case .threads: + HStack( + alignment: .center, + content: { + + } + ) + + default: preconditionFailure("Other sections should have no content") + } } } } diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index 4b94a8bfb1..8cf905ba74 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"strings":{"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"New Message":{},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"NSFaceIDUsageDescription":{"localizations":{"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}},"extractionState":"manual"},"NSMicrophoneUsageDescription":{"localizations":{"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}}},"extractionState":"manual"},"NSPhotoLibraryUsageDescription":{"localizations":{"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"localizations":{"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}},"extractionState":"manual"},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}}},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"}},"sourceLanguage":"en","version":"1.0"} \ No newline at end of file +{"version":"1.0","sourceLanguage":"en","strings":{"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}}}},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"localizations":{"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}}},"extractionState":"manual"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}}},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}}}},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"New Message":{},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"}}} \ No newline at end of file diff --git a/SessionUIKit/Components/SwiftUI/SessionButton_SwiftUI.swift b/SessionUIKit/Components/SwiftUI/SessionButton_SwiftUI.swift new file mode 100644 index 0000000000..29067e9307 --- /dev/null +++ b/SessionUIKit/Components/SwiftUI/SessionButton_SwiftUI.swift @@ -0,0 +1,74 @@ +// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. + +import SwiftUI + +struct SessionButton_SwiftUI: View { + public enum Style { + case bordered + case borderless + case destructive + case destructiveBorderless + case filled + } + + public enum Size { + case small + case medium + case large + } + + public struct Info: Equatable { + public let style: Style + public let title: String + public let isEnabled: Bool + public let accessibility: Accessibility? + public let minWidth: CGFloat + public let onTap: () -> () + + public init( + style: Style, + title: String, + isEnabled: Bool = true, + accessibility: Accessibility? = nil, + minWidth: CGFloat = 0, + onTap: @escaping () -> () + ) { + self.style = style + self.title = title + self.isEnabled = isEnabled + self.accessibility = accessibility + self.onTap = onTap + self.minWidth = minWidth + } + + public static func == (lhs: SessionButton_SwiftUI.Info, rhs: SessionButton_SwiftUI.Info) -> Bool { + return ( + lhs.style == rhs.style && + lhs.title == rhs.title && + lhs.isEnabled == rhs.isEnabled && + lhs.accessibility == rhs.accessibility && + lhs.minWidth == rhs.minWidth + ) + } + } + + private let info: SessionButton_SwiftUI.Info + + init(info: SessionButton_SwiftUI.Info) { + self.info = info + } + + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +#Preview { + SessionButton_SwiftUI( + info: .init( + style: .bordered, + title: "Test", + onTap: {} + ) + ) +} From 7c9e12a930da93eef2c4361ea644e5de7fd8d518 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Mon, 24 Jun 2024 14:35:47 +1000 Subject: [PATCH 06/16] WIP: Home screen -> Conversation List --- Scripts/LintLocalizableStrings.swift | 1 + Session/Home/HomeScreen.swift | 126 ++++++++++++++++-- Session/Meta/Translations/InfoPlist.xcstrings | 2 +- 3 files changed, 117 insertions(+), 12 deletions(-) diff --git a/Scripts/LintLocalizableStrings.swift b/Scripts/LintLocalizableStrings.swift index 26f059a6f7..9ac59425aa 100755 --- a/Scripts/LintLocalizableStrings.swift +++ b/Scripts/LintLocalizableStrings.swift @@ -71,6 +71,7 @@ extension ProjectState { .contains("UIImage(named:", caseSensitive: false), .contains("UIImage(systemName:", caseSensitive: false), .contains("[UIImage imageNamed:", caseSensitive: false), + .contains("Image(", caseSensitive: false), .contains("UIFont(name:", caseSensitive: false), .contains(".dateFormat =", caseSensitive: false), .contains("accessibilityLabel =", caseSensitive: false), diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index e70e3683ac..299a975024 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -53,25 +53,129 @@ struct HomeScreen: View { struct ConversationList: View { @Binding private var viewModel: HomeViewModel + private static let mutePrefix: String = "\u{e067} " // stringlint:disable + private static let unreadCountViewSize: CGFloat = 20 + private static let statusIndicatorSize: CGFloat = 14 + var body: some View { List(viewModel.threadData) { sectionModel in switch sectionModel.model { case .messageRequests: - ZStack( - alignment: .center, - content: { - + Section { + ForEach(sectionModel.elements) { threadViewModel in + HStack( + alignment: .center, + content: { + Image("icon_msg_req") + .renderingMode(.template) + .resizable() + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .overlay( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ProfilePictureView.Size.list.viewSize, + height: ProfilePictureView.Size.list.viewSize + ) + ) + + Text("sessionMessageRequests".localized()) + .bold() + .font(.system(size: Values.mediumFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.leading, Values.mediumSpacing) + .padding(.trailing, Values.verySmallSpacing) + + Text("\(threadViewModel.threadUnreadCount ?? 0)") + .bold() + .font(.system(size: Values.veryLargeFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .overlay( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + ) + } + ) + .backgroundColor(themeColor: .conversationButton_unreadBackground) + .frame( + width: .infinity, + height: 68 + ) + } } - ) - case .threads: - HStack( - alignment: .center, - content: { + Section { + ForEach(sectionModel.elements) { threadViewModel in + let unreadCount: UInt = (threadViewModel.threadUnreadCount ?? 0) + let threadIsUnread: Bool = ( + unreadCount > 0 || + threadViewModel.threadWasMarkedUnread == true + ) + let themeBackgroundColor: ThemeValue = (threadIsUnread ? + .conversationButton_unreadBackground : + .conversationButton_background + ) + HStack( + alignment: .center, + content: { + if threadViewModel.threadIsBlocked == true { + Rectangle() + .fill(themeColor: .danger) + .frame( + width: Values.accentLineThickness, + height: .infinity + ) + } else if unreadCount > 0 { + Rectangle() + .fill(themeColor: .conversationButton_unreadStripBackground) + .frame( + width: Values.accentLineThickness, + height: .infinity + ) + } + + ProfilePictureSwiftUI( + size: .list, + publicKey: threadViewModel.threadId, + threadVariant: threadViewModel.threadVariant, + customImageData: threadViewModel.openGroupProfilePictureData, + profile: threadViewModel.profile, + additionalProfile: threadViewModel.additionalProfile + ) + + + + if threadViewModel.threadPinnedPriority > 0 { + Image("Pin") + .resizable() + .renderingMode(.template) + .foregroundColor(themeColor: .textSecondary) + .scaledToFit() + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + } + + if threadIsUnread { + if unreadCount > 0 { + + } + } + } + ) + .backgroundColor(themeColor: themeBackgroundColor) + .frame( + width: .infinity, + height: 68 + ) } - ) - + } default: preconditionFailure("Other sections should have no content") } } diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index 8cf905ba74..95fcb3389c 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"version":"1.0","sourceLanguage":"en","strings":{"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}}}},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"localizations":{"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}}},"extractionState":"manual"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}}},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}}}},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"New Message":{},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"}}} \ No newline at end of file +{"sourceLanguage":"en","strings":{"New Message":{},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}}}},"NSPhotoLibraryAddUsageDescription":{"localizations":{"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}},"extractionState":"manual"},"NSMicrophoneUsageDescription":{"localizations":{"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}}},"extractionState":"manual"},"NSPhotoLibraryUsageDescription":{"localizations":{"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}}}},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"}},"version":"1.0"} \ No newline at end of file From 96f4322cce9aa05ed2d13906e8ec1738f1005357 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Tue, 25 Jun 2024 17:10:07 +1000 Subject: [PATCH 07/16] WIP: Conversation List --- Session.xcodeproj/project.pbxproj | 4 + Session/Home/ConversationList.swift | 362 ++++++++++++++++++ Session/Home/HomeScreen.swift | 138 ------- Session/Meta/Translations/InfoPlist.xcstrings | 2 +- 4 files changed, 367 insertions(+), 139 deletions(-) create mode 100644 Session/Home/ConversationList.swift diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index df67936004..0ece10cfe7 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -199,6 +199,7 @@ 94B3DC172AF8592200C88531 /* QuoteView_SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B3DC162AF8592200C88531 /* QuoteView_SwiftUI.swift */; }; 94C5DCB02BE88170003AA8C5 /* BezierPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C5DCAF2BE88170003AA8C5 /* BezierPathView.swift */; }; 94E12DBC2C24063A00D28EE0 /* SessionButton_SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */; }; + 94E89A9B2C2A997B00FB18E1 /* ConversationList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */; }; A11CD70D17FA230600A2D1B1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */; }; A163E8AB16F3F6AA0094D68B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A163E8AA16F3F6A90094D68B /* Security.framework */; }; A1C32D5017A06538000A904E /* AddressBookUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1C32D4F17A06537000A904E /* AddressBookUI.framework */; }; @@ -1391,6 +1392,7 @@ 94B3DC162AF8592200C88531 /* QuoteView_SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuoteView_SwiftUI.swift; sourceTree = ""; }; 94C5DCAF2BE88170003AA8C5 /* BezierPathView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BezierPathView.swift; sourceTree = ""; }; 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionButton_SwiftUI.swift; sourceTree = ""; }; + 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ConversationList.swift; path = Session/Home/ConversationList.swift; sourceTree = SOURCE_ROOT; }; 987AE169AEA3246E4C0897B1 /* Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 998762BFD08C2415FE71186C /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.debug.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.debug.xcconfig"; sourceTree = ""; }; 9DE2662E4E5838CD8E1AF35F /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app store release.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app store release.xcconfig"; sourceTree = ""; }; @@ -3175,6 +3177,7 @@ FDCDB8DF2811007F00352A0C /* HomeViewModel.swift */, B8BB82A4238F627000BA5194 /* HomeVC.swift */, 941BE62E2C1BF887005A880A /* HomeScreen.swift */, + 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */, ); path = Home; sourceTree = ""; @@ -6550,6 +6553,7 @@ FD09C5E628260FF9000CE219 /* MediaGalleryViewModel.swift in Sources */, 7B9F71D32852EEE2006DFE7B /* Emoji.swift in Sources */, FDC498BB2AC1606C00EDD897 /* AppNotificationUserInfoKey.swift in Sources */, + 94E89A9B2C2A997B00FB18E1 /* ConversationList.swift in Sources */, C328250F25CA06020062D0A7 /* VoiceMessageView.swift in Sources */, 3488F9362191CC4000E524CC /* MediaView.swift in Sources */, B8569AC325CB5D2900DBA3DB /* ConversationVC+Interaction.swift in Sources */, diff --git a/Session/Home/ConversationList.swift b/Session/Home/ConversationList.swift new file mode 100644 index 0000000000..aa042c2426 --- /dev/null +++ b/Session/Home/ConversationList.swift @@ -0,0 +1,362 @@ +// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. + +import SwiftUI +import GRDB +import DifferenceKit +import SessionUIKit +import SessionMessagingKit +import SessionUtilitiesKit +import SignalUtilitiesKit + +struct ConversationList: View { + @Binding private var viewModel: HomeViewModel + + private static let mutePrefix: String = "\u{e067} " // stringlint:disable + private static let unreadCountViewSize: CGFloat = 20 + private static let statusIndicatorSize: CGFloat = 14 + + public init(viewModel: Binding) { + self._viewModel = viewModel + } + + var body: some View { + List(viewModel.threadData) { sectionModel in + switch sectionModel.model { + case .messageRequests: + Section { + ForEach(sectionModel.elements) { threadViewModel in + HStack( + alignment: .center, + content: { + Image("icon_msg_req") + .renderingMode(.template) + .resizable() + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .overlay( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ProfilePictureView.Size.list.viewSize, + height: ProfilePictureView.Size.list.viewSize + ) + ) + + Text("sessionMessageRequests".localized()) + .bold() + .font(.system(size: Values.mediumFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.leading, Values.mediumSpacing) + .padding(.trailing, Values.verySmallSpacing) + + Text("\(threadViewModel.threadUnreadCount ?? 0)") + .bold() + .font(.system(size: Values.veryLargeFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .overlay( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + ) + } + ) + .backgroundColor(themeColor: .conversationButton_unreadBackground) + .frame( + width: .infinity, + height: 68 + ) + } + } + case .threads: + Section { + ForEach(sectionModel.elements) { threadViewModel in + let info: Info = Info(threadViewModel: threadViewModel) + + HStack( + alignment: .center, + content: { + if info.isBlocked { + Rectangle() + .fill(themeColor: .danger) + .frame( + width: Values.accentLineThickness, + height: .infinity + ) + } else if info.unreadCount > 0 { + Rectangle() + .fill(themeColor: .conversationButton_unreadStripBackground) + .frame( + width: Values.accentLineThickness, + height: .infinity + ) + } + + ProfilePictureSwiftUI( + size: .list, + publicKey: threadViewModel.threadId, + threadVariant: threadViewModel.threadVariant, + customImageData: threadViewModel.openGroupProfilePictureData, + profile: threadViewModel.profile, + additionalProfile: threadViewModel.additionalProfile + ) + + VStack( + alignment: .leading, + spacing: Values.verySmallSpacing, + content: { + HStack( + spacing: Values.verySmallSpacing, + content: { + // Display name + Text(info.displayName) + .bold() + .font(.system(size: Values.mediumFontSize)) + .foregroundColor(themeColor: .textPrimary) + + if info.isPinned { + Image("Pin") + .resizable() + .renderingMode(.template) + .foregroundColor(themeColor: .textSecondary) + .scaledToFit() + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + } + + // Unread count + if info.shouldShowUnreadCount { + Text(info.unreadCountString) + .bold() + .font(.system(size: info.unreadCountFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .overlay( + Capsule() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame(minWidth: ConversationList.unreadCountViewSize) + .frame(height: ConversationList.unreadCountViewSize) + ) + } + + // Unread icon + if info.shouldShowUnreadIcon { + ZStack( + alignment: .topTrailing, + content: { + Image(systemName: "envelope") + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.top, 2) + + Circle() + .fill(themeColor: .conversationButton_unreadBackground) + .frame( + width: 6, + height: 6 + ) + .padding(.top, 1) + .padding(.trailing, 1) + } + ) + } + + // Mention icon + if info.shouldShowMentionIcon { + Text("@") // stringlint:disable + .bold() + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .overlay( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + ) + } + + Spacer() + + // Interaction time + Text(info.timeString) + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .textSecondary) + .opacity(Values.lowOpacity) + } + ) + + HStack( + spacing: Values.verySmallSpacing, + content: { + if info.shouldShowTypingIndicator { + + } else { + AttributedText(info.snippet) + } + + Spacer() + + + } + ) + } + ) + } + ) + .backgroundColor(themeColor: info.themeBackgroundColor) + .frame( + width: .infinity, + height: 68 + ) + } + } + default: preconditionFailure("Other sections should have no content") + } + } + } +} + +// MARK: Conversation list row info + +struct Info { + let displayName: String + let unreadCount: UInt + let threadIsUnread: Bool + let themeBackgroundColor: ThemeValue + let isBlocked: Bool + let isPinned: Bool + let shouldShowUnreadCount: Bool + let unreadCountString: String + let unreadCountFontSize: CGFloat + let shouldShowUnreadIcon: Bool + let shouldShowMentionIcon: Bool + let timeString: String + let shouldShowTypingIndicator: Bool + let snippet: NSAttributedString + + init(threadViewModel: SessionThreadViewModel) { + self.displayName = threadViewModel.displayName + self.unreadCount = (threadViewModel.threadUnreadCount ?? 0) + self.threadIsUnread = ( + self.unreadCount > 0 || + threadViewModel.threadWasMarkedUnread == true + ) + self.themeBackgroundColor = (self.threadIsUnread ? + .conversationButton_unreadBackground : + .conversationButton_background + ) + self.isBlocked = (threadViewModel.threadIsBlocked == true) + self.isPinned = threadViewModel.threadPinnedPriority > 0 + self.shouldShowUnreadCount = (threadIsUnread && unreadCount > 0) + self.unreadCountString = (unreadCount < 10000 ? "\(unreadCount)" : "9999+") + self.unreadCountFontSize = (unreadCount < 10000 ? Values.verySmallFontSize : 8) + self.shouldShowUnreadIcon = (threadIsUnread && !self.shouldShowUnreadCount) + self.shouldShowMentionIcon = ( + (threadViewModel.threadUnreadMentionCount ?? 0) > 0 && + threadViewModel.threadVariant != .contact + ) + self.timeString = threadViewModel.lastInteractionDate.formattedForDisplay + self.shouldShowTypingIndicator = (threadViewModel.threadContactIsTyping == true) + let textColor: UIColor + self.snippet = Self.getSnippet(threadViewModel: threadViewModel) + } + + private static func getSnippet(threadViewModel: SessionThreadViewModel) -> NSMutableAttributedString { + // If we don't have an interaction then do nothing + guard threadViewModel.interactionId != nil else { return NSMutableAttributedString() } + + var maybeTextColor: UIColor? { + switch threadViewModel.interactionVariant { + case .infoClosedGroupCurrentUserErrorLeaving: + return ThemeManager.currentTheme.color(for: .danger) + case .infoClosedGroupCurrentUserLeaving: + return ThemeManager.currentTheme.color(for: .textSecondary) + default: + return ThemeManager.currentTheme.color(for: .textPrimary) + } + } + + guard let textColor = maybeTextColor else { return NSMutableAttributedString() } + + let result = NSMutableAttributedString() + + if Date().timeIntervalSince1970 < (threadViewModel.threadMutedUntilTimestamp ?? 0) { + result.append(NSAttributedString( + string: FullConversationCell.mutePrefix, + attributes: [ + .font: UIFont(name: "ElegantIcons", size: 10) as Any, + .foregroundColor: textColor + ] + )) + } + else if threadViewModel.threadOnlyNotifyForMentions == true { + let imageAttachment = NSTextAttachment() + imageAttachment.image = UIImage(named: "NotifyMentions.png")?.withTint(textColor) + imageAttachment.bounds = CGRect(x: 0, y: -2, width: Values.smallFontSize, height: Values.smallFontSize) + + let imageString = NSAttributedString(attachment: imageAttachment) + result.append(imageString) + result.append(NSAttributedString( + string: " ", + attributes: [ + .font: UIFont(name: "ElegantIcons", size: 10) as Any, + .foregroundColor: textColor + ] + )) + } + + if + (threadViewModel.threadVariant == .legacyGroup || threadViewModel.threadVariant == .group || threadViewModel.threadVariant == .community) && + (threadViewModel.interactionVariant?.isGroupControlMessage == false) + { + let authorName: String = threadViewModel.authorName(for: threadViewModel.threadVariant) + + result.append(NSAttributedString( + string: "\(authorName): ", // stringlint:disable + attributes: [ .foregroundColor: textColor ] + )) + } + + let previewText: String = { + if threadViewModel.interactionVariant == .infoClosedGroupCurrentUserErrorLeaving { + return "groupLeaveErrorFailed" + .put(key: "group_name", value: threadViewModel.displayName) + .localized() + } + return Interaction.previewText( + variant: (threadViewModel.interactionVariant ?? .standardIncoming), + body: threadViewModel.interactionBody, + threadContactDisplayName: threadViewModel.threadContactName(), + authorDisplayName: threadViewModel.authorName(for: threadViewModel.threadVariant), + attachmentDescriptionInfo: threadViewModel.interactionAttachmentDescriptionInfo, + attachmentCount: threadViewModel.interactionAttachmentCount, + isOpenGroupInvitation: (threadViewModel.interactionIsOpenGroupInvitation == true) + ) + }() + + result.append(NSAttributedString( + string: MentionUtilities.highlightMentionsNoAttributes( + in: previewText, + threadVariant: threadViewModel.threadVariant, + currentUserPublicKey: threadViewModel.currentUserPublicKey, + currentUserBlinded15PublicKey: threadViewModel.currentUserBlinded15PublicKey, + currentUserBlinded25PublicKey: threadViewModel.currentUserBlinded25PublicKey + ), + attributes: [ .foregroundColor: textColor ] + )) + + return result + } +} + +struct ConversationList_Previews: PreviewProvider { + @State static var viewModel: HomeViewModel = HomeViewModel() + + static var previews: some View { + ConversationList(viewModel: $viewModel) + } +} diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index 299a975024..abc98be659 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -39,149 +39,11 @@ struct HomeScreen: View { ) } - - - - } ) } } -// MARK: ConversationList - -struct ConversationList: View { - @Binding private var viewModel: HomeViewModel - - private static let mutePrefix: String = "\u{e067} " // stringlint:disable - private static let unreadCountViewSize: CGFloat = 20 - private static let statusIndicatorSize: CGFloat = 14 - - var body: some View { - List(viewModel.threadData) { sectionModel in - switch sectionModel.model { - case .messageRequests: - Section { - ForEach(sectionModel.elements) { threadViewModel in - HStack( - alignment: .center, - content: { - Image("icon_msg_req") - .renderingMode(.template) - .resizable() - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .overlay( - Circle() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame( - width: ProfilePictureView.Size.list.viewSize, - height: ProfilePictureView.Size.list.viewSize - ) - ) - - Text("sessionMessageRequests".localized()) - .bold() - .font(.system(size: Values.mediumFontSize)) - .foregroundColor(themeColor: .textPrimary) - .padding(.leading, Values.mediumSpacing) - .padding(.trailing, Values.verySmallSpacing) - - Text("\(threadViewModel.threadUnreadCount ?? 0)") - .bold() - .font(.system(size: Values.veryLargeFontSize)) - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .overlay( - Circle() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) - ) - } - ) - .backgroundColor(themeColor: .conversationButton_unreadBackground) - .frame( - width: .infinity, - height: 68 - ) - } - } - case .threads: - Section { - ForEach(sectionModel.elements) { threadViewModel in - let unreadCount: UInt = (threadViewModel.threadUnreadCount ?? 0) - let threadIsUnread: Bool = ( - unreadCount > 0 || - threadViewModel.threadWasMarkedUnread == true - ) - let themeBackgroundColor: ThemeValue = (threadIsUnread ? - .conversationButton_unreadBackground : - .conversationButton_background - ) - - HStack( - alignment: .center, - content: { - if threadViewModel.threadIsBlocked == true { - Rectangle() - .fill(themeColor: .danger) - .frame( - width: Values.accentLineThickness, - height: .infinity - ) - } else if unreadCount > 0 { - Rectangle() - .fill(themeColor: .conversationButton_unreadStripBackground) - .frame( - width: Values.accentLineThickness, - height: .infinity - ) - } - - ProfilePictureSwiftUI( - size: .list, - publicKey: threadViewModel.threadId, - threadVariant: threadViewModel.threadVariant, - customImageData: threadViewModel.openGroupProfilePictureData, - profile: threadViewModel.profile, - additionalProfile: threadViewModel.additionalProfile - ) - - - - if threadViewModel.threadPinnedPriority > 0 { - Image("Pin") - .resizable() - .renderingMode(.template) - .foregroundColor(themeColor: .textSecondary) - .scaledToFit() - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) - } - - if threadIsUnread { - if unreadCount > 0 { - - } - } - } - ) - .backgroundColor(themeColor: themeBackgroundColor) - .frame( - width: .infinity, - height: 68 - ) - } - } - default: preconditionFailure("Other sections should have no content") - } - } - } -} - // MARK: EmptyStateView struct EmptyStateView: View { diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index 95fcb3389c..e5e303cff1 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"sourceLanguage":"en","strings":{"New Message":{},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}}}},"NSPhotoLibraryAddUsageDescription":{"localizations":{"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}},"extractionState":"manual"},"NSMicrophoneUsageDescription":{"localizations":{"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}}},"extractionState":"manual"},"NSPhotoLibraryUsageDescription":{"localizations":{"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}}}},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"}},"version":"1.0"} \ No newline at end of file +{"sourceLanguage":"en","strings":{"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}}},"New Message":{},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSMicrophoneUsageDescription":{"localizations":{"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}}},"extractionState":"manual"},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}}},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}}},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}}}},"version":"1.0"} \ No newline at end of file From 58bbdfea8ee43024b7097622fb8b41bed4400610 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Wed, 26 Jun 2024 17:04:34 +1000 Subject: [PATCH 08/16] WIP: Home screen data loading --- Session/Home/ConversationList.swift | 9 +- Session/Home/HomeScreen.swift | 256 +++++++++++++++++- Session/Meta/Translations/InfoPlist.xcstrings | 2 +- .../Style Guide/Themes/SwiftUI+Theme.swift | 9 + 4 files changed, 270 insertions(+), 6 deletions(-) diff --git a/Session/Home/ConversationList.swift b/Session/Home/ConversationList.swift index aa042c2426..1cbf5ee540 100644 --- a/Session/Home/ConversationList.swift +++ b/Session/Home/ConversationList.swift @@ -32,7 +32,7 @@ struct ConversationList: View { .renderingMode(.template) .resizable() .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .overlay( + .background( Circle() .fill(themeColor: .conversationButton_unreadBubbleBackground) .frame( @@ -52,7 +52,7 @@ struct ConversationList: View { .bold() .font(.system(size: Values.veryLargeFontSize)) .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .overlay( + .background( Circle() .fill(themeColor: .conversationButton_unreadBubbleBackground) .frame( @@ -133,7 +133,7 @@ struct ConversationList: View { .bold() .font(.system(size: info.unreadCountFontSize)) .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .overlay( + .background( Capsule() .fill(themeColor: .conversationButton_unreadBubbleBackground) .frame(minWidth: ConversationList.unreadCountViewSize) @@ -169,7 +169,7 @@ struct ConversationList: View { .bold() .font(.system(size: Values.verySmallFontSize)) .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .overlay( + .background( Circle() .fill(themeColor: .conversationButton_unreadBubbleBackground) .frame( @@ -217,6 +217,7 @@ struct ConversationList: View { default: preconditionFailure("Other sections should have no content") } } + .transparentListBackground() } } diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index abc98be659..53ef4c0296 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -13,6 +13,14 @@ struct HomeScreen: View { @State private var viewModel: HomeViewModel = HomeViewModel() @State private var flow: Onboarding.Flow? + @State private var dataChangeObservable: DatabaseCancellable? { + didSet { oldValue?.cancel() } // Cancel the old observable if there was one + } + @State private var hasLoadedInitialStateData: Bool = false + @State private var hasLoadedInitialThreadData: Bool = false + @State private var isLoadingMore: Bool = false + @State private var isAutoLoadingNextPage: Bool = false + @State private var viewHasAppeared: Bool = false init(flow: Onboarding.Flow? = nil) { self.flow = flow @@ -37,9 +45,255 @@ struct HomeScreen: View { maxHeight: .infinity, alignment: .center ) - } + + ConversationList(viewModel: $viewModel) + + NewConversationButton(action: createNewConversation) + } + ) + } + + // MARK: - Updating + + public func startObservingChanges(didReturnFromBackground: Bool = false, onReceivedInitialChange: (() -> ())? = nil) { + guard dataChangeObservable == nil else { return } + + var runAndClearInitialChangeCallback: (() -> ())? = nil + + runAndClearInitialChangeCallback = { + guard self.hasLoadedInitialStateData == true && self.hasLoadedInitialThreadData == true else { return } + + onReceivedInitialChange?() + runAndClearInitialChangeCallback = nil + } + + dataChangeObservable = Storage.shared.start( + viewModel.observableState, + onError: { _ in }, + onChange: { state in + // The default scheduler emits changes on the main thread + self.handleUpdates(state) + runAndClearInitialChangeCallback?() + } + ) + + self.viewModel.onThreadChange = { updatedThreadData, changeset in + self.handleThreadUpdates(updatedThreadData, changeset: changeset) + runAndClearInitialChangeCallback?() + } + + // Note: When returning from the background we could have received notifications but the + // PagedDatabaseObserver won't have them so we need to force a re-fetch of the current + // data to ensure everything is up to date + if didReturnFromBackground { + DispatchQueue.global(qos: .userInitiated).async { + self.viewModel.pagedDataObserver?.reload() + } + } + } + + private func stopObservingChanges() { + // Stop observing database changes + self.dataChangeObservable = nil + self.viewModel.onThreadChange = nil + } + + private func autoLoadNextPageIfNeeded() { + guard + self.hasLoadedInitialThreadData && + !self.isAutoLoadingNextPage && + !self.isLoadingMore + else { return } + + self.isAutoLoadingNextPage = true + + DispatchQueue.main.asyncAfter(deadline: .now() + PagedData.autoLoadNextPageDelay) { [weak self] in + self?.isAutoLoadingNextPage = false + + // Note: We sort the headers as we want to prioritise loading newer pages over older ones + let sections: [(HomeViewModel.Section, CGRect)] = (self?.viewModel.threadData + .enumerated() + .map { index, section in (section.model, (self?.tableView.rectForHeader(inSection: index) ?? .zero)) }) + .defaulting(to: []) + let shouldLoadMore: Bool = sections + .contains { section, headerRect in + section == .loadMore && + headerRect != .zero && + (self?.tableView.bounds.contains(headerRect) == true) + } + + guard shouldLoadMore else { return } + + self?.isLoadingMore = true + + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + self?.viewModel.pagedDataObserver?.load(.pageAfter) + } + } + } + + // MARK: - Interaction + + func handleContinueButtonTapped(from seedReminderView: SeedReminderView) { + if let recoveryPasswordView: RecoveryPasswordScreen = try? RecoveryPasswordScreen() { + let viewController: SessionHostingViewController = SessionHostingViewController(rootView: recoveryPasswordView) + viewController.setNavBarTitle("sessionRecoveryPassword".localized()) + self.host.controller?.navigationController?.pushViewController(viewController, animated: true) + } else { + let targetViewController: UIViewController = ConfirmationModal( + info: ConfirmationModal.Info( + title: "theError".localized(), + body: .text("LOAD_RECOVERY_PASSWORD_ERROR".localized()), + cancelTitle: "okay".localized(), + cancelStyle: .alert_text + ) + ) + self.host.controller?.present(targetViewController, animated: true, completion: nil) + } + } + + func show( + _ threadId: String, + variant: SessionThread.Variant, + isMessageRequest: Bool, + with action: ConversationViewModel.Action, + focusedInteractionInfo: Interaction.TimestampInfo?, + animated: Bool + ) { + if let presentedVC = self.host.controller?.presentedViewController { + presentedVC.dismiss(animated: false, completion: nil) + } + + let finalViewControllers: [UIViewController] = [ + self.host.controller, + ( + (isMessageRequest && action != .compose) ? + SessionTableViewController(viewModel: MessageRequestsViewModel()) : + nil + ), + ConversationVC( + threadId: threadId, + threadVariant: variant, + focusedInteractionInfo: focusedInteractionInfo + ) + ].compactMap { $0 } + + self.host.controller?.navigationController?.setViewControllers(finalViewControllers, animated: animated) + } + + private func openSettings() { + let settingsViewController: SessionTableViewController = SessionTableViewController( + viewModel: SettingsViewModel() + ) + let navigationController = StyledNavigationController(rootViewController: settingsViewController) + navigationController.modalPresentationStyle = .fullScreen + self.host.controller?.present(navigationController, animated: true, completion: nil) + } + + private func showSearchUI() { + if let presentedVC = self.host.controller?.presentedViewController { + presentedVC.dismiss(animated: false, completion: nil) + } + let searchController = GlobalSearchViewController() + self.host.controller?.navigationController?.setViewControllers( + [ self.host.controller, searchController ].compactMap{ $0 }, + animated: true + ) + } + + private func createNewConversation() { + let viewController = SessionHostingViewController( + rootView: StartConversationScreen(), + customizedNavigationBackground: .backgroundSecondary + ) + viewController.setNavBarTitle("conversationsStart".localized()) + viewController.setUpDismissingButton(on: .right) + + let navigationController = StyledNavigationController(rootViewController: viewController) + if UIDevice.current.isIPad { + navigationController.modalPresentationStyle = .fullScreen + } + navigationController.modalPresentationCapturesStatusBarAppearance = true + self.host.controller?.present(navigationController, animated: true, completion: nil) + } + + func createNewDMFromDeepLink(sessionId: String) { + let viewController: SessionHostingViewController = SessionHostingViewController(rootView: NewMessageScreen(accountId: sessionId)) + viewController.setNavBarTitle("messageNew".localized()) + let navigationController = StyledNavigationController(rootViewController: viewController) + if UIDevice.current.isIPad { + navigationController.modalPresentationStyle = .fullScreen + } + navigationController.modalPresentationCapturesStatusBarAppearance = true + self.host.controller?.present(navigationController, animated: true, completion: nil) + } +} + +// MARK: NewConversationButton + +struct NewConversationButton: View { + + struct NewConversationButtonStyle: ButtonStyle { + func makeBody(configuration: Self.Configuration) -> some View { + configuration.label + .background( + configuration.isPressed ? + Circle() + .fill(themeColor: .highlighted(.menuButton_background, alwaysDarken: true)) + .frame( + width: NewConversationButton.size, + height: NewConversationButton.size + ) + .shadow( + themeColor: .menuButton_outerShadow, + opacity: 0.3, + radius: 15 + ) : + Circle() + .fill(themeColor: .menuButton_background) + .frame( + width: NewConversationButton.size, + height: NewConversationButton.size + ) + .shadow( + themeColor: .menuButton_outerShadow, + opacity: 0.3, + radius: 15 + ) + ) + } + } + + private static let size: CGFloat = 60 + private var action: () -> () + + init(action: @escaping () -> Void) { + self.action = action + } + + var body: some View { + ZStack { + Button { + action() + } label: { + Image("Plus") + .renderingMode(.template) + .foregroundColor(themeColor: .menuButton_icon) } + .buttonStyle(NewConversationButtonStyle()) + .accessibility( + Accessibility( + identifier: "New conversation button", + label: "New conversation button" + ) + ) + .padding(.bottom, Values.smallSpacing) + } + .frame( + maxWidth: .infinity, + maxHeight: .infinity, + alignment: .bottom ) } } diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index e5e303cff1..9e2ea25a88 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"sourceLanguage":"en","strings":{"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}}},"New Message":{},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSMicrophoneUsageDescription":{"localizations":{"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}}},"extractionState":"manual"},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}}},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}}},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}}}},"version":"1.0"} \ No newline at end of file +{"sourceLanguage":"en","strings":{"NSFaceIDUsageDescription":{"localizations":{"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}},"extractionState":"manual"},"NSCameraUsageDescription":{"localizations":{"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}},"extractionState":"manual"},"New Message":{},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSPhotoLibraryUsageDescription":{"localizations":{"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}}},"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}}}},"NSPhotoLibraryAddUsageDescription":{"localizations":{"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}},"extractionState":"manual"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"}},"version":"1.0"} \ No newline at end of file diff --git a/SessionUIKit/Style Guide/Themes/SwiftUI+Theme.swift b/SessionUIKit/Style Guide/Themes/SwiftUI+Theme.swift index 37b02cc9a1..ffc59daea8 100644 --- a/SessionUIKit/Style Guide/Themes/SwiftUI+Theme.swift +++ b/SessionUIKit/Style Guide/Themes/SwiftUI+Theme.swift @@ -20,6 +20,15 @@ public extension View { ) } } + + func shadow(themeColor: ThemeValue, opacity: CGFloat, radius: CGFloat, x: CGFloat = 0, y: CGFloat = 0) -> some View { + return self.shadow( + color: ThemeManager.currentTheme.colorSwiftUI(for: themeColor)?.opacity(opacity) ?? Color(.sRGBLinear, white: 0, opacity: opacity), + radius: radius, + x: x, + y: y + ) + } } public extension Shape { From 98d48b064e05a5edf8affdbc6d57a935f3aa7f22 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Thu, 27 Jun 2024 14:37:31 +1000 Subject: [PATCH 09/16] WIP: HomeViewModel refactoring --- Session.xcodeproj/project.pbxproj | 4 + Session/Home/ConversationList.swift | 445 +++++++++++++----------- Session/Home/HomeScreen.swift | 2 +- Session/Home/HomeViewModelRequest.swift | 6 + 4 files changed, 261 insertions(+), 196 deletions(-) create mode 100644 Session/Home/HomeViewModelRequest.swift diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index 0ece10cfe7..3190a72813 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -182,6 +182,7 @@ 7BFD1A8C2747150E00FB91B9 /* TurnServerInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BFD1A8B2747150E00FB91B9 /* TurnServerInfo.swift */; }; 7BFD1A972747689000FB91B9 /* Session-Turn-Server in Resources */ = {isa = PBXBuildFile; fileRef = 7BFD1A962747689000FB91B9 /* Session-Turn-Server */; }; 88C614F4223F9BE0CB94E4E5 /* Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionUtilitiesKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35C5EF2AACD4A39D6E0E2C49 /* Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionUtilitiesKit.framework */; }; + 9409BA672C2D1BBD007C90C1 /* HomeViewModelRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9409BA662C2D1BBD007C90C1 /* HomeViewModelRequest.swift */; }; 941061402BBE45EB0056C084 /* ActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9410613F2BBE45EB0056C084 /* ActivityView.swift */; }; 941BE62F2C1BF888005A880A /* HomeScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941BE62E2C1BF887005A880A /* HomeScreen.swift */; }; 9422EE2B2B8C3A97004C740D /* String+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9422EE2A2B8C3A97004C740D /* String+Utilities.swift */; }; @@ -1375,6 +1376,7 @@ 81B86106CE32C944E6A3A8F2 /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app_store_release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app_store_release.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app_store_release.xcconfig"; sourceTree = ""; }; 89EE44A6174C653D2F4DB573 /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit.debug.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit.debug.xcconfig"; sourceTree = ""; }; 91271A534D1D4AB949B1319E /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension.app store release.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension.app store release.xcconfig"; sourceTree = ""; }; + 9409BA662C2D1BBD007C90C1 /* HomeViewModelRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewModelRequest.swift; sourceTree = ""; }; 9410613F2BBE45EB0056C084 /* ActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityView.swift; sourceTree = ""; }; 941BE62E2C1BF887005A880A /* HomeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreen.swift; sourceTree = ""; }; 9422EE2A2B8C3A97004C740D /* String+Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Utilities.swift"; sourceTree = ""; }; @@ -3178,6 +3180,7 @@ B8BB82A4238F627000BA5194 /* HomeVC.swift */, 941BE62E2C1BF887005A880A /* HomeScreen.swift */, 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */, + 9409BA662C2D1BBD007C90C1 /* HomeViewModelRequest.swift */, ); path = Home; sourceTree = ""; @@ -6409,6 +6412,7 @@ FD12A8432AD63BF600EEBA0D /* ObservableTableSource.swift in Sources */, FD52090528B4915F006098F6 /* PrivacySettingsViewModel.swift in Sources */, 7BAF54D027ACCEEC003D12F8 /* EmptySearchResultCell.swift in Sources */, + 9409BA672C2D1BBD007C90C1 /* HomeViewModelRequest.swift in Sources */, B8783E9E23EB948D00404FB8 /* UILabel+Interaction.swift in Sources */, FD37E9D928A230F2003AE748 /* TraitObservingWindow.swift in Sources */, B893063F2383961A005EAA8E /* ScanQRCodeWrapperVC.swift in Sources */, diff --git a/Session/Home/ConversationList.swift b/Session/Home/ConversationList.swift index 1cbf5ee540..cdc5542e47 100644 --- a/Session/Home/ConversationList.swift +++ b/Session/Home/ConversationList.swift @@ -11,217 +11,118 @@ import SignalUtilitiesKit struct ConversationList: View { @Binding private var viewModel: HomeViewModel - private static let mutePrefix: String = "\u{e067} " // stringlint:disable - private static let unreadCountViewSize: CGFloat = 20 - private static let statusIndicatorSize: CGFloat = 14 + public static let mutePrefix: String = "\u{e067} " // stringlint:disable + public static let unreadCountViewSize: CGFloat = 20 + public static let statusIndicatorSize: CGFloat = 14 public init(viewModel: Binding) { self._viewModel = viewModel } var body: some View { - List(viewModel.threadData) { sectionModel in - switch sectionModel.model { - case .messageRequests: - Section { - ForEach(sectionModel.elements) { threadViewModel in - HStack( - alignment: .center, - content: { - Image("icon_msg_req") - .renderingMode(.template) - .resizable() - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Circle() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame( - width: ProfilePictureView.Size.list.viewSize, - height: ProfilePictureView.Size.list.viewSize - ) - ) - - Text("sessionMessageRequests".localized()) - .bold() - .font(.system(size: Values.mediumFontSize)) - .foregroundColor(themeColor: .textPrimary) - .padding(.leading, Values.mediumSpacing) - .padding(.trailing, Values.verySmallSpacing) - - Text("\(threadViewModel.threadUnreadCount ?? 0)") - .bold() - .font(.system(size: Values.veryLargeFontSize)) - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Circle() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) - ) - } - ) - .backgroundColor(themeColor: .conversationButton_unreadBackground) - .frame( - width: .infinity, - height: 68 - ) - } - } - case .threads: - Section { - ForEach(sectionModel.elements) { threadViewModel in - let info: Info = Info(threadViewModel: threadViewModel) - - HStack( - alignment: .center, - content: { - if info.isBlocked { - Rectangle() - .fill(themeColor: .danger) - .frame( - width: Values.accentLineThickness, - height: .infinity - ) - } else if info.unreadCount > 0 { - Rectangle() - .fill(themeColor: .conversationButton_unreadStripBackground) - .frame( - width: Values.accentLineThickness, - height: .infinity - ) + List { + ForEach(viewModel.threadData) { sectionModel in + switch sectionModel.model { + case .messageRequests: + Section { + ForEach(sectionModel.elements) { threadViewModel in + MessageRequestItemRow(threadViewModel: threadViewModel) + .listRowSeparator(.hidden) + .swipeActions(edge: .trailing) { + Button { + + } label: { + VStack { + Image(systemName: "eye.slash") + .foregroundColor(themeColor: .white) + + Text("noteToSelfHide".localized()) + .foregroundColor(themeColor: .white) + } + .backgroundColor(themeColor: .danger) + } } - - ProfilePictureSwiftUI( - size: .list, - publicKey: threadViewModel.threadId, - threadVariant: threadViewModel.threadVariant, - customImageData: threadViewModel.openGroupProfilePictureData, - profile: threadViewModel.profile, - additionalProfile: threadViewModel.additionalProfile - ) - - VStack( - alignment: .leading, - spacing: Values.verySmallSpacing, - content: { - HStack( - spacing: Values.verySmallSpacing, - content: { - // Display name - Text(info.displayName) - .bold() - .font(.system(size: Values.mediumFontSize)) - .foregroundColor(themeColor: .textPrimary) - - if info.isPinned { - Image("Pin") - .resizable() - .renderingMode(.template) - .foregroundColor(themeColor: .textSecondary) - .scaledToFit() - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) - } - - // Unread count - if info.shouldShowUnreadCount { - Text(info.unreadCountString) - .bold() - .font(.system(size: info.unreadCountFontSize)) - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Capsule() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame(minWidth: ConversationList.unreadCountViewSize) - .frame(height: ConversationList.unreadCountViewSize) - ) - } - - // Unread icon - if info.shouldShowUnreadIcon { - ZStack( - alignment: .topTrailing, - content: { - Image(systemName: "envelope") - .font(.system(size: Values.verySmallFontSize)) - .foregroundColor(themeColor: .textPrimary) - .padding(.top, 2) - - Circle() - .fill(themeColor: .conversationButton_unreadBackground) - .frame( - width: 6, - height: 6 - ) - .padding(.top, 1) - .padding(.trailing, 1) - } - ) - } - - // Mention icon - if info.shouldShowMentionIcon { - Text("@") // stringlint:disable - .bold() - .font(.system(size: Values.verySmallFontSize)) - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Circle() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) - ) - } - - Spacer() - - // Interaction time - Text(info.timeString) - .font(.system(size: Values.smallFontSize)) - .foregroundColor(themeColor: .textSecondary) - .opacity(Values.lowOpacity) - } - ) + } + } + case .threads: + Section { + ForEach(sectionModel.elements) { threadViewModel in + ConversationItemRow(threadViewModel: threadViewModel) + .listRowSeparator(.hidden) + .swipeActions(edge: .leading) { + Button { + + } label: { - HStack( - spacing: Values.verySmallSpacing, - content: { - if info.shouldShowTypingIndicator { - - } else { - AttributedText(info.snippet) - } - - Spacer() - - - } - ) } - ) - } - ) - .backgroundColor(themeColor: info.themeBackgroundColor) - .frame( - width: .infinity, - height: 68 - ) + } + } } - } - default: preconditionFailure("Other sections should have no content") + default: preconditionFailure("Other sections should have no content") + } } } .transparentListBackground() } } -// MARK: Conversation list row info +// MARK: MessageRequestItemRow + +struct MessageRequestItemRow: View { + + private var threadViewModel: SessionThreadViewModel + + init(threadViewModel: SessionThreadViewModel) { + self.threadViewModel = threadViewModel + } + + var body: some View { + HStack( + alignment: .center, + content: { + Image("icon_msg_req") + .renderingMode(.template) + .resizable() + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ProfilePictureView.Size.list.viewSize, + height: ProfilePictureView.Size.list.viewSize + ) + ) + + Text("sessionMessageRequests".localized()) + .bold() + .font(.system(size: Values.mediumFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.leading, Values.mediumSpacing) + .padding(.trailing, Values.verySmallSpacing) + + Text("\(threadViewModel.threadUnreadCount ?? 0)") + .bold() + .font(.system(size: Values.veryLargeFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + ) + } + ) + .backgroundColor(themeColor: .conversationButton_unreadBackground) + .frame( + width: .infinity, + height: 68 + ) + } +} + +// MARK: ConversationItemRow info struct Info { let displayName: String @@ -354,6 +255,160 @@ struct Info { } } +// MARK: ConversationItemRow + +struct ConversationItemRow: View { + + private var threadViewModel: SessionThreadViewModel + private var info: Info + + init(threadViewModel: SessionThreadViewModel) { + self.threadViewModel = threadViewModel + self.info = Info(threadViewModel: threadViewModel) + } + + var body: some View { + HStack( + alignment: .center, + content: { + if info.isBlocked { + Rectangle() + .fill(themeColor: .danger) + .frame( + width: Values.accentLineThickness, + height: .infinity + ) + } else if info.unreadCount > 0 { + Rectangle() + .fill(themeColor: .conversationButton_unreadStripBackground) + .frame( + width: Values.accentLineThickness, + height: .infinity + ) + } + + ProfilePictureSwiftUI( + size: .list, + publicKey: threadViewModel.threadId, + threadVariant: threadViewModel.threadVariant, + customImageData: threadViewModel.openGroupProfilePictureData, + profile: threadViewModel.profile, + additionalProfile: threadViewModel.additionalProfile + ) + + VStack( + alignment: .leading, + spacing: Values.verySmallSpacing, + content: { + HStack( + spacing: Values.verySmallSpacing, + content: { + // Display name + Text(info.displayName) + .bold() + .font(.system(size: Values.mediumFontSize)) + .foregroundColor(themeColor: .textPrimary) + + if info.isPinned { + Image("Pin") + .resizable() + .renderingMode(.template) + .foregroundColor(themeColor: .textSecondary) + .scaledToFit() + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + } + + // Unread count + if info.shouldShowUnreadCount { + Text(info.unreadCountString) + .bold() + .font(.system(size: info.unreadCountFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Capsule() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame(minWidth: ConversationList.unreadCountViewSize) + .frame(height: ConversationList.unreadCountViewSize) + ) + } + + // Unread icon + if info.shouldShowUnreadIcon { + ZStack( + alignment: .topTrailing, + content: { + Image(systemName: "envelope") + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.top, 2) + + Circle() + .fill(themeColor: .conversationButton_unreadBackground) + .frame( + width: 6, + height: 6 + ) + .padding(.top, 1) + .padding(.trailing, 1) + } + ) + } + + // Mention icon + if info.shouldShowMentionIcon { + Text("@") // stringlint:disable + .bold() + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + ) + } + + Spacer() + + // Interaction time + Text(info.timeString) + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .textSecondary) + .opacity(Values.lowOpacity) + } + ) + + HStack( + spacing: Values.verySmallSpacing, + content: { + if info.shouldShowTypingIndicator { + + } else { + AttributedText(info.snippet) + } + + Spacer() + + + } + ) + } + ) + } + ) + .backgroundColor(themeColor: info.themeBackgroundColor) + .frame( + width: .infinity, + height: 68 + ) + } +} + struct ConversationList_Previews: PreviewProvider { @State static var viewModel: HomeViewModel = HomeViewModel() diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index 53ef4c0296..4fde3479ca 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -202,7 +202,7 @@ struct HomeScreen: View { ) } - private func createNewConversation() { + func createNewConversation() { let viewController = SessionHostingViewController( rootView: StartConversationScreen(), customizedNavigationBackground: .backgroundSecondary diff --git a/Session/Home/HomeViewModelRequest.swift b/Session/Home/HomeViewModelRequest.swift new file mode 100644 index 0000000000..eb7e49a753 --- /dev/null +++ b/Session/Home/HomeViewModelRequest.swift @@ -0,0 +1,6 @@ +// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. + +import Combine +import GRDB + +struct HomeViewModelRequest: Querya From aa630f9565df7105c48170ea037a7173d76d83dd Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Mon, 1 Jul 2024 09:15:32 +1000 Subject: [PATCH 10/16] WIP: data loading and observation for home screen --- Session/Home/HomeScreen.swift | 102 ++++-------------- Session/Home/HomeVC.swift | 2 +- Session/Home/HomeViewModelRequest.swift | 1 - .../StartConversationScreen.swift | 4 +- Session/Meta/Translations/InfoPlist.xcstrings | 2 +- .../Shared/SessionHostingViewController.swift | 84 ++++++++++++--- 6 files changed, 95 insertions(+), 100 deletions(-) diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index 4fde3479ca..40bd4b7fbc 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -1,6 +1,7 @@ // Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. import SwiftUI +import Combine import GRDB import DifferenceKit import SessionUIKit @@ -33,7 +34,7 @@ struct HomeScreen: View { ThemeManager.currentTheme.colorSwiftUI(for: .backgroundPrimary).ignoresSafeArea() if viewModel.state.showViewedSeedBanner { - SeedBanner() + SeedBanner(action: handleContinueButtonTapped) } if viewModel.threadData.isEmpty { @@ -52,90 +53,19 @@ struct HomeScreen: View { NewConversationButton(action: createNewConversation) } ) + .onReceive(Just(viewModel), perform: { updatedViewModel in + (self.host.controller as? SessionHostingViewController)?.setUpNavBarButton( + leftItem: .profile(profile: updatedViewModel.state.userProfile), + rightItem: .search, + leftAction: openSettings, + rightAction: showSearchUI + ) + }) } - - // MARK: - Updating - - public func startObservingChanges(didReturnFromBackground: Bool = false, onReceivedInitialChange: (() -> ())? = nil) { - guard dataChangeObservable == nil else { return } - - var runAndClearInitialChangeCallback: (() -> ())? = nil - - runAndClearInitialChangeCallback = { - guard self.hasLoadedInitialStateData == true && self.hasLoadedInitialThreadData == true else { return } - - onReceivedInitialChange?() - runAndClearInitialChangeCallback = nil - } - - dataChangeObservable = Storage.shared.start( - viewModel.observableState, - onError: { _ in }, - onChange: { state in - // The default scheduler emits changes on the main thread - self.handleUpdates(state) - runAndClearInitialChangeCallback?() - } - ) - - self.viewModel.onThreadChange = { updatedThreadData, changeset in - self.handleThreadUpdates(updatedThreadData, changeset: changeset) - runAndClearInitialChangeCallback?() - } - - // Note: When returning from the background we could have received notifications but the - // PagedDatabaseObserver won't have them so we need to force a re-fetch of the current - // data to ensure everything is up to date - if didReturnFromBackground { - DispatchQueue.global(qos: .userInitiated).async { - self.viewModel.pagedDataObserver?.reload() - } - } - } - - private func stopObservingChanges() { - // Stop observing database changes - self.dataChangeObservable = nil - self.viewModel.onThreadChange = nil - } - - private func autoLoadNextPageIfNeeded() { - guard - self.hasLoadedInitialThreadData && - !self.isAutoLoadingNextPage && - !self.isLoadingMore - else { return } - - self.isAutoLoadingNextPage = true - DispatchQueue.main.asyncAfter(deadline: .now() + PagedData.autoLoadNextPageDelay) { [weak self] in - self?.isAutoLoadingNextPage = false - - // Note: We sort the headers as we want to prioritise loading newer pages over older ones - let sections: [(HomeViewModel.Section, CGRect)] = (self?.viewModel.threadData - .enumerated() - .map { index, section in (section.model, (self?.tableView.rectForHeader(inSection: index) ?? .zero)) }) - .defaulting(to: []) - let shouldLoadMore: Bool = sections - .contains { section, headerRect in - section == .loadMore && - headerRect != .zero && - (self?.tableView.bounds.contains(headerRect) == true) - } - - guard shouldLoadMore else { return } - - self?.isLoadingMore = true - - DispatchQueue.global(qos: .userInitiated).async { [weak self] in - self?.viewModel.pagedDataObserver?.load(.pageAfter) - } - } - } - // MARK: - Interaction - func handleContinueButtonTapped(from seedReminderView: SeedReminderView) { + func handleContinueButtonTapped() { if let recoveryPasswordView: RecoveryPasswordScreen = try? RecoveryPasswordScreen() { let viewController: SessionHostingViewController = SessionHostingViewController(rootView: recoveryPasswordView) viewController.setNavBarTitle("sessionRecoveryPassword".localized()) @@ -208,7 +138,7 @@ struct HomeScreen: View { customizedNavigationBackground: .backgroundSecondary ) viewController.setNavBarTitle("conversationsStart".localized()) - viewController.setUpDismissingButton(on: .right) + viewController.setUpNavBarButton(rightItem: .close) let navigationController = StyledNavigationController(rootViewController: viewController) if UIDevice.current.isIPad { @@ -371,6 +301,12 @@ struct EmptyStateView: View { // MARK: SeedBanner struct SeedBanner: View { + private var action: () -> () + + init(action: @escaping () -> Void) { + self.action = action + } + var body: some View { ZStack( alignment: .topLeading, @@ -423,7 +359,7 @@ struct SeedBanner: View { Spacer() Button { - + action() } label: { Text("theContinue".localized()) .bold() diff --git a/Session/Home/HomeVC.swift b/Session/Home/HomeVC.swift index 2e613d2124..5f53498623 100644 --- a/Session/Home/HomeVC.swift +++ b/Session/Home/HomeVC.swift @@ -897,7 +897,7 @@ final class HomeVC: BaseVC, LibSessionRespondingViewController, UITableViewDataS customizedNavigationBackground: .backgroundSecondary ) viewController.setNavBarTitle("conversationsStart".localized()) - viewController.setUpDismissingButton(on: .right) + viewController.setUpNavBarButton(rightItem: .close) let navigationController = StyledNavigationController(rootViewController: viewController) if UIDevice.current.isIPad { diff --git a/Session/Home/HomeViewModelRequest.swift b/Session/Home/HomeViewModelRequest.swift index eb7e49a753..13d0d4428c 100644 --- a/Session/Home/HomeViewModelRequest.swift +++ b/Session/Home/HomeViewModelRequest.swift @@ -3,4 +3,3 @@ import Combine import GRDB -struct HomeViewModelRequest: Querya diff --git a/Session/Home/New Conversation/StartConversationScreen.swift b/Session/Home/New Conversation/StartConversationScreen.swift index 32ef74b04c..bbbe7508b6 100644 --- a/Session/Home/New Conversation/StartConversationScreen.swift +++ b/Session/Home/New Conversation/StartConversationScreen.swift @@ -25,7 +25,7 @@ struct StartConversationScreen: View { ) { let viewController: SessionHostingViewController = SessionHostingViewController(rootView: NewMessageScreen()) viewController.setNavBarTitle("messageNew".localized()) - viewController.setUpDismissingButton(on: .right) + viewController.setUpNavBarButton(rightItem: .close) self.host.controller?.navigationController?.pushViewController(viewController, animated: true) } .accessibility( @@ -81,7 +81,7 @@ struct StartConversationScreen: View { ) { let viewController: SessionHostingViewController = SessionHostingViewController(rootView: InviteAFriendScreen()) viewController.setNavBarTitle("sessionInviteAFriend".localized()) - viewController.setUpDismissingButton(on: .right) + viewController.setUpNavBarButton(rightItem: .close) self.host.controller?.navigationController?.pushViewController(viewController, animated: true) } .accessibility( diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index 9e2ea25a88..fc0beba9d8 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"sourceLanguage":"en","strings":{"NSFaceIDUsageDescription":{"localizations":{"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}}},"extractionState":"manual"},"NSCameraUsageDescription":{"localizations":{"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}},"extractionState":"manual"},"New Message":{},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSPhotoLibraryUsageDescription":{"localizations":{"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}},"extractionState":"manual"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}}},"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}}}},"NSPhotoLibraryAddUsageDescription":{"localizations":{"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}}},"extractionState":"manual"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"}},"version":"1.0"} \ No newline at end of file +{"strings":{"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}}}},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}}},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSMicrophoneUsageDescription":{"localizations":{"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}}},"extractionState":"manual"},"New Message":{},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSFaceIDUsageDescription":{"localizations":{"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}}},"extractionState":"manual"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}}}},"sourceLanguage":"en","version":"1.0"} \ No newline at end of file diff --git a/Session/Shared/SessionHostingViewController.swift b/Session/Shared/SessionHostingViewController.swift index 198490eb89..b073ed72ae 100644 --- a/Session/Shared/SessionHostingViewController.swift +++ b/Session/Shared/SessionHostingViewController.swift @@ -7,9 +7,10 @@ public class HostWrapper: ObservableObject { public weak var controller: UIViewController? } -public enum NavigationItemPosition { - case left - case right +public enum NavigationItem { + case profile(profile: Profile) + case search + case close } public class SessionHostingViewController: UIHostingController>>, ThemedNavigation where Content : View { @@ -20,6 +21,9 @@ public class SessionHostingViewController: UIHostingController ())? + private var rightBarButtonItemAction: (() -> ())? lazy var navBarTitleLabel: UILabel = { let result = UILabel() @@ -77,6 +81,8 @@ public class SessionHostingViewController: UIHostingController: UIHostingController ())? = nil, rightAction: (() -> ())? = nil) { + self.leftBarButtonItemAction = leftAction + self.rightBarButtonItemAction = rightAction + navigationItem.leftBarButtonItem = generateBarButtonItem(item: leftItem, action: #selector(leftBarButtonAction)) + navigationItem.rightBarButtonItem = generateBarButtonItem(item: rightItem, action: #selector(rightBarButtonAction)) + } + + private func generateBarButtonItem(item: NavigationItem?, action: Selector?) -> UIBarButtonItem? { + guard let navigationItem: NavigationItem = item else { return nil } + switch navigationItem { + case .profile(let profile): + // Profile picture view + let profilePictureView = ProfilePictureView(size: .navigation) + profilePictureView.accessibilityIdentifier = "User settings" + profilePictureView.accessibilityLabel = "User settings" + profilePictureView.isAccessibilityElement = true + profilePictureView.update( + publicKey: profile.id, + threadVariant: .contact, + customImageData: nil, + profile: profile, + additionalProfile: nil + ) + + let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: action) + profilePictureView.addGestureRecognizer(tapGestureRecognizer) + + // Path status indicator + let pathStatusView = PathStatusView() + pathStatusView.accessibilityLabel = "Current onion routing path indicator" + + // Container view + let profilePictureViewContainer = UIView() + profilePictureViewContainer.addSubview(profilePictureView) + profilePictureView.autoPinEdgesToSuperviewEdges() + profilePictureViewContainer.addSubview(pathStatusView) + pathStatusView.pin(.trailing, to: .trailing, of: profilePictureViewContainer) + pathStatusView.pin(.bottom, to: .bottom, of: profilePictureViewContainer) + + let result = UIBarButtonItem(customView: profilePictureViewContainer) + result.isAccessibilityElement = true + return result + case .search: + let result = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: action) + result.accessibilityLabel = "Search button" + result.isAccessibilityElement = true + return result + case .close: + let result = UIBarButtonItem(image: #imageLiteral(resourceName: "X"), style: .plain, target: self, action: #selector(close)) + result.themeTintColor = .textPrimary + result.isAccessibilityElement = true + return result + } + } + + @objc private func leftBarButtonAction() { + self.leftBarButtonItemAction?() + } + + @objc private func rightBarButtonAction() { + self.rightBarButtonItemAction?() } @objc private func close() { From 32171acbd24245f2f62deed9d4c1a0f1bce544fa Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Mon, 9 Sep 2024 13:20:45 +1000 Subject: [PATCH 11/16] fix merging --- Session/Home/ConversationList.swift | 2 +- Session/Home/HomeScreen.swift | 14 ++++++++------ Session/Meta/Translations/InfoPlist.xcstrings | 2 +- Session/Meta/Translations/Localizable.xcstrings | 6 ++++++ 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Session/Home/ConversationList.swift b/Session/Home/ConversationList.swift index cdc5542e47..798c9520cc 100644 --- a/Session/Home/ConversationList.swift +++ b/Session/Home/ConversationList.swift @@ -410,7 +410,7 @@ struct ConversationItemRow: View { } struct ConversationList_Previews: PreviewProvider { - @State static var viewModel: HomeViewModel = HomeViewModel() + @State static var viewModel: HomeViewModel = HomeViewModel(using: Dependencies()) static var previews: some View { ConversationList(viewModel: $viewModel) diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index 40bd4b7fbc..37f6afb907 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -12,7 +12,7 @@ import SignalUtilitiesKit struct HomeScreen: View { @EnvironmentObject var host: HostWrapper - @State private var viewModel: HomeViewModel = HomeViewModel() + @State private var viewModel: HomeViewModel @State private var flow: Onboarding.Flow? @State private var dataChangeObservable: DatabaseCancellable? { didSet { oldValue?.cancel() } // Cancel the old observable if there was one @@ -23,8 +23,9 @@ struct HomeScreen: View { @State private var isAutoLoadingNextPage: Bool = false @State private var viewHasAppeared: Bool = false - init(flow: Onboarding.Flow? = nil) { + init(flow: Onboarding.Flow? = nil, using dependencies: Dependencies) { self.flow = flow + self.viewModel = HomeViewModel(using: dependencies) } var body: some View { @@ -105,7 +106,8 @@ struct HomeScreen: View { ConversationVC( threadId: threadId, threadVariant: variant, - focusedInteractionInfo: focusedInteractionInfo + focusedInteractionInfo: focusedInteractionInfo, + using: viewModel.dependencies ) ].compactMap { $0 } @@ -125,7 +127,7 @@ struct HomeScreen: View { if let presentedVC = self.host.controller?.presentedViewController { presentedVC.dismiss(animated: false, completion: nil) } - let searchController = GlobalSearchViewController() + let searchController = GlobalSearchViewController(using: viewModel.dependencies) self.host.controller?.navigationController?.setViewControllers( [ self.host.controller, searchController ].compactMap{ $0 }, animated: true @@ -332,7 +334,7 @@ struct SeedBanner: View { alignment: .center, spacing: Values.verySmallSpacing, content: { - Text("recoveryPasswordBannerTittle".localized()) + Text("recoveryPasswordBannerTitle".localized()) .font(.system(size: Values.smallFontSize)) .bold() .foregroundColor(themeColor: .textPrimary) @@ -395,5 +397,5 @@ struct SeedBanner: View { } #Preview { - HomeScreen(flow: .register) + HomeScreen(flow: .register, using: Dependencies()) } diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index fc0beba9d8..21a6677cba 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"strings":{"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ar":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ru":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fil":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"uk":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take pictures and scan QR codes."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sl":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hi":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"bg":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"es-ES":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ku":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"th":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lt":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"pt-BR":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"cs":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"no":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"hr":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"ro":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs camera access to take photos or videos."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs camera access to take photos or videos.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"fa":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sk":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"nl":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ru":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"bn":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to save photos."}},"da":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"de":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to save attachments and media.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to save attachments and media."}}}},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fil":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"tr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hu":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"it":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"uk":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ku":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ja":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lv":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"da":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"no":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hr":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ro":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"de":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your library to update your avatar and send photos."}},"si-LK":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"es-ES":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"lt":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs storage access to send photos and videos."}},"ar":{"stringUnit":{"value":"{app_name} needs storage access to send photos and videos.","state":"translated"}}}},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSMicrophoneUsageDescription":{"localizations":{"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bn":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"pt-PT":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ku":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sl":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"be":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fil":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"lt":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"tr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"de":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"fr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"vi":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"ko":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"en":{"stringUnit":{"state":"translated","value":"Session needs access to your microphone for calls and to send to audio messages."}},"hr":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ja":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ar":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"el":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"ro":{"stringUnit":{"state":"translated","value":"{app_name} needs microphone access to make calls and record audio messages."}},"it":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"id":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}},"lv":{"stringUnit":{"value":"{app_name} needs microphone access to make calls and record audio messages.","state":"translated"}}},"extractionState":"manual"},"New Message":{},"CFBundleGetInfoString":{"comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}},"extractionState":"extracted_with_value"},"CFBundleName":{"comment":"Bundle name","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}},"extractionState":"extracted_with_value"},"NSFaceIDUsageDescription":{"localizations":{"ne-NP":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"sk":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-CN":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"de":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"th":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"el":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fa":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"eo":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"tr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"no":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ko":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"cs":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"lt":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"be":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"id":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"fil":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"hr":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ru":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session's Screen Lock feature uses Face ID."}},"nl":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"zh-TW":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}},"pt-PT":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"bg":{"stringUnit":{"value":"The screen lock feature on {app_name} uses Face ID.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"The screen lock feature on {app_name} uses Face ID."}}},"extractionState":"manual"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"de":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pt-PT":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"zh-CN":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"hi":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"no":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ne-NP":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"el":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"eo":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"fil":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ru":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"id":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"ko":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"nl":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"th":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"fa":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ja":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"pl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"es-ES":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"lt":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"tr":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"uk":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"sl":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"hu":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"bg":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ar":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"it":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ro":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"sk":{"stringUnit":{"value":"{app_name} needs to use Apple Music to play media attachments.","state":"translated"}},"zh_CN":{"stringUnit":{"state":"translated","value":"Session需要Apple Music的访问权限用以播放媒体附件。"}},"fr":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"da":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"vi":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}},"ku":{"stringUnit":{"state":"translated","value":"{app_name} needs to use Apple Music to play media attachments."}}}}},"sourceLanguage":"en","version":"1.0"} \ No newline at end of file +{"sourceLanguage":"en","version":"1.0","strings":{"NSCameraUsageDescription":{"localizations":{"nn-NO":{"stringUnit":{"value":"Session treng tilgang til kameraet for å ta bilete eller videoar, eller skanna QR-kodar.","state":"translated"}},"vi":{"stringUnit":{"value":"Session cần truy cập máy ảnh để chụp ảnh, quay video hoặc quét mã QR.","state":"translated"}},"ha":{"stringUnit":{"value":"Session yana buƙatar samun damar kyamara don ɗaukar hotuna da bidiyo, ko duba lambobin QR.","state":"translated"}},"sr-RS":{"stringUnit":{"value":"Session treba pristup kameri da slika fotografije i snima videe, ili skenira QR kodove.","state":"translated"}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita acceso a la cámara para tomar fotos y videos, o escanear códigos QR."}},"te":{"stringUnit":{"value":"ఫోటోలను మరియు వీడియోలను తీసుకోవడం లేదా QR కోడ్లను స్కాన్ చేయడానికి Session కు కెమెరా యాక్సెస్ కావాలి.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"Session은 사진과 동영상을 찍거나 QR 코드를 스캔하기 위해 카메라 접근이 필요합니다."}},"fi":{"stringUnit":{"state":"translated","value":"Session tarvitsee kameran käyttöoikeuden kuvien ja videoiden ottamiseksi tai QR-koodien skannaamiseksi."}},"ro":{"stringUnit":{"value":"Session are nevoie de acces la cameră pentru a captura poze și filme sau pentru a scana coduri QR.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"Session precisa de acesso à câmera para tirar fotos e vídeos, ou escanear códigos QR.","state":"translated"}},"lg":{"stringUnit":{"value":"Session yeetaaga ssensa ya kkamera okutwala ebifaananyi n’ebifaananyi ebya vidiyo, oba okukebera QR codes.","state":"translated"}},"ny":{"stringUnit":{"state":"translated","value":"Session iyenera kupititsa mwayi kwa kamera kuti kutenga zithunzi ndi makanema, kapena kuwunika ma QR codes."}},"eu":{"stringUnit":{"value":"Session(e)k kameraren sarbidea behar du argazkiak eta bideoak ateratzeko, edo QR kodeak eskaneatzeko.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"Session برای گرفتن عکس‌ و ویدئو، یا اسکن کد‌های QR نیاز به دسترسی دوربین دارد."}},"mn":{"stringUnit":{"value":"Session нь гэрэл зураг болон видеог авах эсвэл QR кодыг скан хийхийн тулд камерт хандалт хэрэгтэй.","state":"translated"}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງການເຂົ້າເຖິງກ້ອງເພື່ອຖ່າຍຮູບແລະວິດີໂອ, ຫຼືສະແກນ QR codes."}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од пристап до камерата за да слика фотографии и видеа, или да скенира QR-кодови."}},"ku":{"stringUnit":{"value":"Session permiya kamera hewce dike da ku wêneyên û vedîdarên twist bike, an QR kodên scanner bike.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"Session लाई फोटो र भिडियो लिन वा QR कोड स्क्यान गर्न क्यामेराको पहुँच आवश्यक छ।"}},"bg":{"stringUnit":{"value":"Session се нуждае от достъп до камерата, за да прави снимки и видеота, или да сканира QR кодове.","state":"translated"}},"id":{"stringUnit":{"value":"Session membutuhkan akses kamera untuk mengambil foto dan video, atau memindai kode QR.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"Session wymaga dostępu do kamery w celu robienia zdjęć i nagrywania filmów lub skanowania kodów QR."}},"cy":{"stringUnit":{"value":"Mae angen mynediad i'r camera ar Session i dynnu lluniau a fideos, neu i sganio côd QR.","state":"translated"}},"ps":{"stringUnit":{"value":"Session ته اړتیا ده چې عکسونه او ویډیوګانې واخلي، یا QR کوډونه سکین کړي.","state":"translated"}},"xh":{"stringUnit":{"value":"Session ifuna ukufikelela kwikhamera ukuthatha iifoto nevidiyo, okanye ukukhangela iikhowudi ze-QR.","state":"translated"}},"sh":{"stringUnit":{"state":"translated","value":"Session treba pristup kameri kako bi snimio slike ili video, ili skenirao QR kodove."}},"es-ES":{"stringUnit":{"value":"Session necesita acceso a la cámara para tomar fotos y videos, o escanear códigos QR.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"Session heeft toegang tot de camera nodig om foto's en video's te maken of QR codes te scannen."}},"pt-BR":{"stringUnit":{"value":"Session precisa de acesso à câmera para tirar fotos e vídeos, ou escanear códigos QR.","state":"translated"}},"sq":{"stringUnit":{"value":"Session ka nevojë për leje përdorimi të kamerës për të bërë foto dhe video, ose për të skanuar kodet QR.","state":"translated"}},"ar":{"stringUnit":{"value":"Session يحتاج إذن الوصول إلى الكاميرا لالتقاط الصور ومقاطع الفيديو، أو لمسح رموز الاستجابة السريعة.","state":"translated"}},"he":{"stringUnit":{"state":"translated","value":"Session צריך הרשאות מצלמה כדי לצלם תצלומים או להקליט וידיאו או לסרוק קודי QR."}},"uk":{"stringUnit":{"value":"Session потребує доступ до камери, щоб фотографувати, знімати відео або сканувати QR-коди.","state":"translated"}},"uz":{"stringUnit":{"state":"translated","value":"Session fotosuratlar va videolarni olish yoki QR kodlarni skanerlash uchun kamera kirishini talab qiladi."}},"tr":{"stringUnit":{"state":"translated","value":"Session, fotoğraf ve video çekmek veya QR kodları taramak için kamera erişimine ihtiyaç duyar."}},"ca":{"stringUnit":{"value":"Session necessita accés a la càmera per fer fotografies i vídeos, o escanejar codis QR.","state":"translated"}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya kamera kuchukua picha na video, au kuchanganua misimbo ya QR."}},"lv":{"stringUnit":{"value":"Session ir nepieciešama piekļuve kamerai, lai uzņemtu attēlus un video, vai skenētu QR kodus.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"फ़ोटो और वीडियो लेने या क्यूआर कोड स्कैन करने के लिए Session को कैमरा एक्सेस की आवश्यकता है।"}},"bal":{"stringUnit":{"value":"Session کماٹ پاتبسینہ مجبورے تصاویرا و ویڈیوشاں بیہ QR سکینشہ.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"Session 需要使用相機來拍攝照片和影片,或掃描 QR 圖碼。","state":"translated"}},"gl":{"stringUnit":{"value":"Session necesita acceder á cámara para tirar fotografías e facer vídeos ou escanear códigos QR.","state":"translated"}},"kn":{"stringUnit":{"value":"Session ಗೆ ಚಿತ್ರಗಳು, ವೀಡಿಯೊಗಳು, ಅಥವಾ QR ಕೋಡ್ಗಳು ಸ್ಕ್ಯಾನ್ ಮಾಡಲು ಕ್ಯಾಮೆರಾ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas fotilan aliron por preni fotojn kaj videojn, aŭ skani QR-kodojn."}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje přístup k fotoaparátu pro pořizování fotografií a videí nebo skenování QR kódů."}},"si-LK":{"stringUnit":{"value":"Sessionට ඡායාරූප සහ වීඩියෝ ගැනීමට හෝ QR කේත පරිලෝකනය කිරීමට කැමරා ප්‍රවේශය අවශ්‍යයි.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"Session potrebuje dostop do kamere za fotografiranje in snemanje, ali skeniranje QR kod."}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება კამერის წვდომა ფოტოებისა და ვიდეოების გადასაღებად, ან QR კოდების დასანახად."}},"ta":{"stringUnit":{"state":"translated","value":"Session புகைப்படங்கள், வீடியோக்களை எடுக்க, QR குறியீடுகளை ஸ்கேன் செய்ய கேமரா அணுகல் தேவை."}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στην κάμερα για λήψη φωτογραφιών και βίντεο ή για σάρωση κωδικών QR."}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ը պետք է հասանելիություն տեսախցիկին՝ լուսանկարներ և տեսանյութեր անելու կամ QR կոդերը սկանավորելու համար։"}},"lt":{"stringUnit":{"value":"Session reikia prieigos prie kameros, kad galėtumėte fotografuoti, filmuoti ar skenuoti QR kodus.","state":"translated"}},"af":{"stringUnit":{"state":"translated","value":"Session het kamera toegang nodig om foto's en video's te neem, of om QR-kodes te skandeer."}},"ur-IN":{"stringUnit":{"value":"Session کو تصاویر اور ویڈیوز لینے یا QR کوڈز اسکین کرنے کے لیے کیمرے کی اجازت درکار ہے۔","state":"translated"}},"sr":{"stringUnit":{"value":"Session треба дозволу за камеру да прави слике и видео клипове, или скенира QR кодове.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要相机权限来拍摄照片和视频,或扫描二维码。"}},"et":{"stringUnit":{"value":"Session vajab fotode ja videote salvestamiseks või QR-koodide skannimiseks kaamera juurdepääsu.","state":"translated"}},"km":{"stringUnit":{"value":"Session ត្រូវការការចូលប្រើកាមេរ៉ាដើម្បីថតរូប និងវីដេអូ ឬស្កេនកូដ QR ។","state":"translated"}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਫੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓਜ਼ ਲੈਣ ਜਾਂ QR ਕੋਡ ਸਕੈਨ ਕਰਨ ਲਈ ਕੈਮਰਾ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।"}},"my":{"stringUnit":{"state":"translated","value":"Session က ဓါတ်ပုံတွေနဲ့ ဗီဒီယိုတွေရိုက်ဖို့၊ ဒါမှမဟုတ် QR ကုဒ်တွေ ရှာဖွေရန် အတွက် ကင်မရာသုံးစွဲခွင့် လိုအပ်ပါတယ်။"}},"bn":{"stringUnit":{"state":"translated","value":"ছবি ও ভিডিও করার জন্য Session এর ক্যামেরা অ্যাকসেস প্রয়োজন বা QR কোড স্ক্যান করা।"}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt die Berechtigung »Kamera«, um Fotos oder Videos aufzunehmen oder QR-Codes zu scannen."}},"nb":{"stringUnit":{"value":"Session trenger kameratilgang for å ta bilder og videoer eller skanne QR-koder.","state":"translated"}},"ru":{"stringUnit":{"value":"Session нужен доступ к камере для съемки фото и видео или сканирования QR-кодов.","state":"translated"}},"hu":{"stringUnit":{"value":"Session-nak kamera engedélyre van szüksége a fotók és videók készítéséhez, vagy a QR kódok beolvasásához.","state":"translated"}},"hr":{"stringUnit":{"value":"Session treba pristup kameri za snimanje fotografija i videozapisa, ili skeniranje QR kôdova.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"Session richiede l'accesso alla fotocamera per scattare foto e video, o scansionare i codici QR."}},"az":{"stringUnit":{"value":"Session foto və video çəkmək və ya QR kodlarını skan etmək üçün kameraya müraciət etməlidir.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"Session a besoin de l’autorisation Appareil photo pour prendre des photos ou des vidéos, ou scanner des codes QR."}},"sv-SE":{"stringUnit":{"value":"Session behöver åtkomst till kameran för att kunna fotografera och filma eller skanna QR-koder.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"Session potrebuje prístup ku kamere na vytvárať fotografie a videá, alebo skenovanie QR kódov."}},"da":{"stringUnit":{"value":"Session kræver tilladelse til at tilgå dit kamera, for at kunne tage billeder eller scanne QR-koder.","state":"translated"}},"be":{"stringUnit":{"value":"Session патрэбен дазвол на камеру, каб рабіць фота ці відэа альбо сканаваць QR-коды.","state":"translated"}},"en":{"stringUnit":{"value":"Session needs camera access to take photos and videos, or scan QR codes.","state":"translated"}},"fil":{"stringUnit":{"value":"Ang Session ay nangangailangan ng access sa camera upang kumuha ng litrato at video, o mag-scan ng mga QR code.","state":"translated"}},"ja":{"stringUnit":{"value":"Sessionで写真や動画を撮るには、またはQRコードをスキャンするにはカメラへのアクセスが必要です。","state":"translated"}},"ms":{"stringUnit":{"value":"Session memerlukan akses kamera untuk mengambil gambar dan video, atau mengimbas kod QR.","state":"translated"}}},"extractionState":"manual"},"CFBundleDisplayName":{"comment":"Bundle display name","localizations":{"en":{"stringUnit":{"value":"Session","state":"new"}}},"extractionState":"extracted_with_value"},"CFBundleGetInfoString":{"localizations":{"en":{"stringUnit":{"value":"","state":"new"}}},"comment":"Get Info string","extractionState":"extracted_with_value"},"NSAppleMusicUsageDescription":{"localizations":{"mn":{"stringUnit":{"value":"Session медиа хавсралтуудыг тоглуулахын тулд Apple Music-ийг ашиглах хэрэгтэй.","state":"translated"}},"ar":{"stringUnit":{"value":"Session يحتاج استخدام Apple Music لتشغيل مرفقات الوسائط.","state":"translated"}},"ja":{"stringUnit":{"value":"Sessionはメディア添付ファイルを再生するためにApple Musicを使用する必要があります。","state":"translated"}},"bal":{"stringUnit":{"value":"Session xیس پاتبسینہ ایپل موزیک لو پہ اجرأ ہٰن اختیارات استعمالے","state":"translated"}},"fi":{"stringUnit":{"value":"Session tarvitsee käyttää Apple Musiikkia mediasisältöjen toistamiseen.","state":"translated"}},"nb":{"stringUnit":{"value":"Session må bruke Apple Music for å spille medievedlegg.","state":"translated"}},"ha":{"stringUnit":{"value":"Session yana buƙatar amfani da Apple Music don kunna abin haɗe-haɗen kafofin watsa labarai.","state":"translated"}},"my":{"stringUnit":{"state":"translated","value":"Session သည် Apple Music ကို အသုံးပြု၍ မီဒီယာလုံခြုံမှုကို ဖွင့်ရန် လိုအပ်သည်။"}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k Apple Music erabiltzea behar du hedabide eranskinak erreproduzitzeko."}},"it":{"stringUnit":{"value":"Session deve utilizzare Apple Music per riprodurre gli allegati media.","state":"translated"}},"hr":{"stringUnit":{"value":"Session treba koristiti Apple Music za reprodukciju medijskih privitaka.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"Session potrebuje uporabo Apple Music za predvajanje medijskih prilog."}},"ne-NP":{"stringUnit":{"value":"Session लाई मिडिया अट्याचमेन्टहरू प्ले गर्न एप्पल म्यूजिक प्रयोग गर्नु पर्छ।","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"Session은 미디어 첨부 파일을 재생하기 위해 Apple Music을 사용해야 합니다."}},"fil":{"stringUnit":{"state":"translated","value":"Kinakailangang magamit ng Session ang Apple Music upang magpatugtog ng mga media attachment."}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas uzi Apple Music por ludi aŭdvidaĵojn."}},"ta":{"stringUnit":{"state":"translated","value":"Session மெடியா இணைப்புகளை விளையாட Apple Music ஐ பயன்படுத்த வேண்டும்."}},"lg":{"stringUnit":{"value":"Session keetaaga kuzannyisa Apple Music okuzannyisa ekwatibwako okuva mu mikutu.","state":"translated"}},"sr-RS":{"stringUnit":{"value":"Session treba da koristi Apple Music za reprodukciju medijskih priloga.","state":"translated"}},"sr":{"stringUnit":{"state":"translated","value":"Session треба да користи Apple Music да би репродуковао медијске прилоге."}},"sq":{"stringUnit":{"value":"Session ka nevojë të përdorë Apple Music për të luajtur attachment-e mediaje.","state":"translated"}},"ku":{"stringUnit":{"value":"Session permiya bikar anînina Apple Music hewce dike da ku tesawirên medyayê bixebitîne.","state":"translated"}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita usar Apple Music para reproducir archivos adjuntos multimedia."}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa usar a Apple Music para reproduzir anexos de mídia."}},"tr":{"stringUnit":{"state":"translated","value":"Session, medya eklerini çalmak için Apple Music'i kullanmak zorunda."}},"kn":{"stringUnit":{"value":"Session ಗೆ ಮಾಧ್ಯಮ ಅಟ್ಯಾಚ್ಮೆಂಟ್‌ಗಳನ್ನು ಪ್ಲೇ ಮಾಡಲು ಆಪಲ್ ಮ್ಯೂಸಿಕ್ ಬಳಸಬೇಕು.","state":"translated"}},"uk":{"stringUnit":{"state":"translated","value":"Session потребує використовувати Apple Music для відтворення медіавкладень."}},"ro":{"stringUnit":{"value":"Session are nevoie de Apple Music pentru a reda atașamente media.","state":"translated"}},"mk":{"stringUnit":{"value":"Session има потреба од Apple Music за да ги репродуцира медиумските прилози.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"Session-nak szüksége van az Apple Music használatára a média mellékletek lejátszásához."}},"ur-IN":{"stringUnit":{"value":"Session کو میڈیا اٹیچمنٹ چلانے کے لیے ایپل میوزک کا استعمال کرنا ہوگا۔","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt die Nutzung von Apple Music, um Medienanhänge abzuspielen."}},"xh":{"stringUnit":{"value":"Session kufuneka isebenzise uMculo weApple ukudlala iziphumo zemidiya.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"Session doit accéder à Apple Music pour lire les pièces jointes multimédias."}},"ps":{"stringUnit":{"state":"translated","value":"Session میوزیک مولا زموږ توانیدونکی د Apple Music نه په لوبولوکې کارول کیږي."}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa usar o Apple Music para reproduzir anexos de mídia."}},"et":{"stringUnit":{"value":"Session vajab Apple Musici kasutamist, et esitada meediamanuseid.","state":"translated"}},"nn-NO":{"stringUnit":{"state":"translated","value":"Session trenger Apple Music for å spille av media-vedlegg."}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita utilitzar Apple Music per reproduir fitxers adjunts de suports."}},"id":{"stringUnit":{"state":"translated","value":"Session membutuhkan Apple Music untuk memutar lampiran media."}},"cy":{"stringUnit":{"value":"Mae angen i Session ddefnyddio Apple Music i chwarae atodiadau cyfryngau.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"मीडिया संलग्नक बजाने के लिए Session को Apple Music के उपयोग की आवश्यकता है।"}},"af":{"stringUnit":{"value":"Session moet Apple Music gebruik om media-aanhegsels te speel.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"Session skal bruge Apple Music for at afspille medievedhæftninger."}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງໃຊ້ Apple Music ເພື່ອປ່ອຍແນບສື່ມວນຊົນ."}},"km":{"stringUnit":{"state":"translated","value":"Session ត្រូវការប្រើប្រាស់ Apple Music ដើម្បីចាក់មេឌៀភ្ជាប់"}},"lv":{"stringUnit":{"state":"translated","value":"Session nepieciešams izmantot Apple Music, lai atskaņotu multivides pielikumus."}},"lt":{"stringUnit":{"state":"translated","value":"Session reikia naudoti Apple Music, kad galėtų leisti medijos priedus."}},"pl":{"stringUnit":{"value":"Session potrzebuje używać Apple Music do odtwarzania załączników multimedialnych.","state":"translated"}},"sw":{"stringUnit":{"value":"Session inahitaji kutumia Apple Music kucheza viambatanisho vya vyombo vya habari.","state":"translated"}},"he":{"stringUnit":{"state":"translated","value":"Session זקוק ל-Apple Music כדי להפעיל צרופות מדיה."}},"fa":{"stringUnit":{"value":"Session باید از Apple Music برای پخش پیوست‌های رسانه‌ای استفاده کند.","state":"translated"}},"ny":{"stringUnit":{"value":"Session iyenera kugwiritsa ntchito Apple Music kuti izisintha ma attachment a media.","state":"translated"}},"sk":{"stringUnit":{"value":"Session potrebuje používať Apple Music na prehrávanie mediálnych príloh.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita usar Apple Music para reproducir archivos adjuntos de medios."}},"uz":{"stringUnit":{"value":"Session media tarkiblarini ijro etish uchun Apple Music'dan foydalanishi kerak.","state":"translated"}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ը պետք է օգտագործի Apple Music՝ մեդիա կցորդները նվագարկելու համար։"}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება Apple Music-ის გამოყენება მედიამიკრძურბების სათამაშოდ."}},"el":{"stringUnit":{"value":"Το Session χρειάζεται πρόσβαση στο Apple Music για αναπαραγωγή συνημμένων πολυμέσων.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"Session 需要使用 Apple Music 來播放媒體附件。","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"Session moet Apple Music gebruiken om mediabijlagen af te spelen."}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita usar Apple Music para reproducir anexos multimedia."}},"bn":{"stringUnit":{"state":"translated","value":"মিডিয়া সংযুক্তি প্লে করার জন্য Session কে Apple Music ব্যবহার করতে হবে।"}},"ms":{"stringUnit":{"state":"translated","value":"Session perlu menggunakan Apple Music untuk memainkan lampiran media."}},"cs":{"stringUnit":{"value":"Session potřebuje použít Apple Music pro přehrávání mediálních příloh.","state":"translated"}},"si-LK":{"stringUnit":{"value":"මාධ්‍ය ඇමුණුම් වාදනය කිරීමට Session ට Apple Music භාවිත කිරීම අවශ්‍යයි.","state":"translated"}},"az":{"stringUnit":{"state":"translated","value":"Session media qoşmalarını oxutmaq üçün Apple Music-dən istifadə etməlidir."}},"ru":{"stringUnit":{"value":"Session нужен доступ к Apple Music для воспроизведения медиафайлов.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要使用Apple Music来播放媒体附件。"}},"bg":{"stringUnit":{"state":"translated","value":"Session трябва да използва Apple Music, за да възпроизвежда медийни прикачени файлове."}},"en":{"stringUnit":{"value":"Session needs to use Apple Music to play media attachments.","state":"translated"}},"be":{"stringUnit":{"value":"Session патрэбен доступ да Apple Music, каб прайграваць медыя ўкладанні.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"Session cần sử dụng Apple Music để phát các tập tin đính kèm phương tiện."}},"sv-SE":{"stringUnit":{"value":"Session behöver åtkomst till Apple Music för att spela upp bifogade mediafiler.","state":"translated"}},"sh":{"stringUnit":{"state":"translated","value":"Session treba koristiti Apple Music za reprodukciju medijskih privitaka."}},"te":{"stringUnit":{"value":"మీడియా అటాచ్మెంట్‌లను ప్లే చేయడానికి Session Apple Musicను ఉపయోగించాలి.","state":"translated"}},"pa-IN":{"stringUnit":{"value":"Session ਨੂੰ ਮੀਡੀਆ ਅਟੈਚਮੈਂਟਸ ਖੇਡਣ ਲਈ ਐਪਲ ਮਿਊਜ਼ਿਕ ਵਰਤਣ ਦੀ ਲੋੜ ਹੈ।","state":"translated"}}},"extractionState":"manual"},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"extractionState":"extracted_with_value"},"NSFaceIDUsageDescription":{"localizations":{"ta":{"stringUnit":{"state":"translated","value":"Session இல் திரை பூட்டு அம்சம் முக அடையாளத்தை பயன்படுத்துகிறது."}},"sv-SE":{"stringUnit":{"state":"translated","value":"Skärmlåsfunktionen på Session använder Face ID."}},"es-419":{"stringUnit":{"value":"La función de pantalla bloqueada en Session usa Face ID.","state":"translated"}},"ru":{"stringUnit":{"value":"Функция блокировки экрана в Session использует Face ID.","state":"translated"}},"lt":{"stringUnit":{"state":"translated","value":"Ekrano užraktas Session naudoja Face ID."}},"sw":{"stringUnit":{"state":"translated","value":"Kipengele cha kufuli skrini kwenye Session kinatumia Face ID."}},"sk":{"stringUnit":{"state":"translated","value":"Funkcia zámku obrazovky na Session používa Face ID."}},"de":{"stringUnit":{"state":"translated","value":"Die Bildschirmsperrfunktion auf Session verwendet Face ID."}},"da":{"stringUnit":{"value":"Skærmlåsfunktionen på Session bruger Face ID.","state":"translated"}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session پر سکرین لاک خصوصیت Face ID کا استعمال کرتی ہے۔"}},"lg":{"stringUnit":{"value":"Enkozesa y'ekiwandiiko k'amaaso ekiriko Session ekosa Face ID.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"Sessionको स्क्रिन लक विशेषताले Face ID प्रयोग गर्छ।","state":"translated"}},"my":{"stringUnit":{"value":"Session တွင် အမ်ကာ မျက်နှာ မြင်စနစ် लॉग इन ၏ လုံခြုံစေသည်။","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"The screen lock feature on Session uses Face ID."}},"hu":{"stringUnit":{"state":"translated","value":"A(z) Session képernyőzár funkciója Face ID-t használ."}},"cy":{"stringUnit":{"state":"translated","value":"Mae'r nodwedd cloi sgrin ar Session yn defnyddio ID Wyneb."}},"be":{"stringUnit":{"state":"translated","value":"Функцыя блакіроўкі экрана ў Session выкарыстоўвае Face ID."}},"et":{"stringUnit":{"state":"translated","value":"Session ekraaniluku funktsioon kasutab Face ID-d."}},"kn":{"stringUnit":{"state":"translated","value":"Session ನ ತರ್ಣ್ ಲಾಕ್ ವೈಶಿಷ್ಟ್ಯವು ಫೇಸ್ ಐಡಿ ಅನ್ನು ಬಳಸುತ್ತದೆ."}},"eu":{"stringUnit":{"state":"translated","value":"Session-ko pantaila blokeatzearen funtzioak Face ID erabiltzen du."}},"km":{"stringUnit":{"state":"translated","value":"The screen lock feature on Session uses Face ID."}},"ca":{"stringUnit":{"state":"translated","value":"La funció de bloqueig de pantalla en Session utilitza Face ID."}},"fa":{"stringUnit":{"state":"translated","value":"ویژگی قفل صفحه در Session از Face ID استفاده می‌کند."}},"ny":{"stringUnit":{"value":"Ntchito yotseka chinsalu pa Session imagwiritsa ntchito Face ID.","state":"translated"}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਉੱਤੇ ਸਕرين ਲਾਕ ਫੀਚਰ Face ID ਵਰਤਦਾ ਹੈ।"}},"id":{"stringUnit":{"state":"translated","value":"Fitur kunci layar pada Session menggunakan Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"Funcția de blocare a ecranului pe Session folosește Face ID."}},"pt-PT":{"stringUnit":{"value":"O recurso de bloqueio de tela do Session usa Face ID.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"Session 上的螢幕鎖功能使用 Face ID。","state":"translated"}},"nn-NO":{"stringUnit":{"value":"Skjermlåsfunksjonen på Session bruker Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"Session पर स्क्रीन लॉक फीचर Face ID का उपयोग करता है।"}},"ja":{"stringUnit":{"state":"translated","value":"Session の画面ロック機能はFace IDを使用します。"}},"mn":{"stringUnit":{"value":"Session дэлгэц түгжихэд Face ID ашиглана.","state":"translated"}},"sr-RS":{"stringUnit":{"value":"Funkcija zaključavanja ekrana na Session koristi Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"La función de bloqueo de pantalla en Session usa Face ID."}},"hr":{"stringUnit":{"state":"translated","value":"Funkcija zaključavanja zaslona na Session koristi Face ID."}},"ar":{"stringUnit":{"value":"ميزة قفل الشاشة على Session تستخدم Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"Funkcja blokady ekranu na Session używa Face ID.","state":"translated"}},"ka":{"stringUnit":{"state":"translated","value":"ეკრანის დაბლოკვის ფუნქცია Session-ზე იყენებს Face ID-ს"}},"sh":{"stringUnit":{"state":"translated","value":"Značajka zaključavanja ekrana na Session koristi Face ID."}},"fi":{"stringUnit":{"value":"Näytön lukitusominaisuus Session käyttää Face ID:tä.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"Tính năng khóa màn hình trên Session sử dụng Face ID."}},"tr":{"stringUnit":{"state":"translated","value":"Session ekran kilidi özelliği Face ID kullanır."}},"eo":{"stringUnit":{"state":"translated","value":"La ŝlosila ekrano en Session uzas Vizaĝo-ID."}},"he":{"stringUnit":{"value":"תכונת נעילת המסך ב-Session משתמשת בזיהוי פנים.","state":"translated"}},"nl":{"stringUnit":{"value":"De vergrendelfunctie op Session gebruikt Face ID.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"Funkce zamčení obrazovky na Session používá Face ID."}},"fr":{"stringUnit":{"state":"translated","value":"La fonctionnalité de verrouillage d'écran sur Session utilise Face ID."}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ի էկրանային կողպման հատկությունը օգտագործում է Face ID:"}},"bg":{"stringUnit":{"state":"translated","value":"Функцията за заключване на екрана в Session използва Face ID."}},"zh-CN":{"stringUnit":{"value":"Session 的屏幕锁功能使用 Face ID。","state":"translated"}},"pt-BR":{"stringUnit":{"value":"A funcionalidade de bloqueio de tela no Session usa reconhecimento facial.","state":"translated"}},"gl":{"stringUnit":{"state":"translated","value":"A funcionalidade de bloqueo de pantalla en Session usa Face ID."}},"fil":{"stringUnit":{"state":"translated","value":"Ang screen lock feature ng Session ay gumagamit ng Face ID."}},"it":{"stringUnit":{"state":"translated","value":"La funzione di blocco schermo su Session usa Face ID."}},"te":{"stringUnit":{"state":"translated","value":"Sessionలో స్క్రీన్ లాక్ ఫీచర్ ఫేస్ ఐడి నీ ఉపయోగిస్తుంది."}},"uz":{"stringUnit":{"state":"translated","value":"Session dagi ekran blokirovkasi funksiyasi Face ID dan foydalanadi."}},"ms":{"stringUnit":{"value":"Ciri kunci skrin pada Session menggunakan Face ID.","state":"translated"}},"sq":{"stringUnit":{"state":"translated","value":"Veçoria e mbylljes së ekranit në Session përdor Face ID."}},"az":{"stringUnit":{"value":"Session üzərində ekran kilidi xüsusiyyəti Face ID istifadə edir.","state":"translated"}},"mk":{"stringUnit":{"state":"translated","value":"Функцијата за заклучување екранот во Session користи Face ID."}},"si-LK":{"stringUnit":{"value":"Session මත තිර අගුළු විශේෂාංගය Face ID භාවිතා කරයි.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"Ekrāna bloķēšanas funkcija lietotnē Session izmanto Face ID."}},"ku":{"stringUnit":{"state":"translated","value":"Taybetmendiya serrnderkî ya Session bi Face ID bicîh dike."}},"th":{"stringUnit":{"state":"translated","value":"ฟีเจอร์ล็อกหน้าจอใน Session ใช้ Face ID"}},"af":{"stringUnit":{"value":"Die skermsluitfunksie op Session gebruik Face ID.","state":"translated"}},"ps":{"stringUnit":{"value":"د Session سکرین لاک فیچر د مخ پيژندنه (Face ID) کاروي.","state":"translated"}},"xh":{"stringUnit":{"value":"Umsebenzi wokutshixa isikrini kwi-Session usebenzisa i-Face ID.","state":"translated"}},"ha":{"stringUnit":{"state":"translated","value":"Tsarin kulle allo akan Session yana amfani da Face ID."}},"sl":{"stringUnit":{"value":"Funkcija zaklepanja zaslona na Session uporablja Face ID.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"Session এর স্ক্রিন লক ফিচারটি ফেস আইডি ব্যবহৃত হয়।"}},"el":{"stringUnit":{"state":"translated","value":"Η λειτουργία κλειδώματος οθόνης στο Session χρησιμοποιεί το Face ID."}},"ko":{"stringUnit":{"value":"Session의 화면 잠금 기능은 Face ID를 사용합니다.","state":"translated"}},"sr":{"stringUnit":{"state":"translated","value":"Функција закључавања екрана на Session користи Face ID."}},"uk":{"stringUnit":{"state":"translated","value":"Функція блокування екрану в Session використовує Face ID."}},"bal":{"stringUnit":{"value":"Session رو پیلناکردگ لاگو کردانت پاس ID.","state":"translated"}},"nb":{"stringUnit":{"state":"translated","value":"Skjermlåsfunksjonen på Session bruker Face ID."}}},"extractionState":"manual"},"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"ku":{"stringUnit":{"state":"translated","value":"Session permiya mîkrofon hewce dike da ku lêgerîn bike û peyman dengî record bike."}},"bg":{"stringUnit":{"state":"translated","value":"Session се нуждае от достъп до микрофона, за да осъществява обаждания и записва аудио съобщения."}},"da":{"stringUnit":{"value":"Session kræver mikrofonadgang for at foretage opkald og optage lydmeddelelser.","state":"translated"}},"ha":{"stringUnit":{"state":"translated","value":"Session yana buƙatar samun damar makirufo don yin kira da rikodin saƙonnin murya."}},"sl":{"stringUnit":{"state":"translated","value":"Session potrebuje dostop do mikrofona za klice in snemanje zvočnih sporočil."}},"en":{"stringUnit":{"state":"translated","value":"Session needs microphone access to make calls and record audio messages."}},"bal":{"stringUnit":{"state":"translated","value":"Session مایکروفون پاتبسینہ حاصل نودہ کلمات پیغامشین زانت"}},"sk":{"stringUnit":{"value":"Session potrebuje prístup k mikrofónu na uskutočnenie hovorov a nahranie zvukových správ.","state":"translated"}},"sr":{"stringUnit":{"value":"Session треба дозволу за микрофон да би обављао позиве и снимао аудио поруке.","state":"translated"}},"ny":{"stringUnit":{"state":"translated","value":"Session iyenera kuitanira microphone kuti ipangane mafoni ndi kujambula mauthenga am'mawu."}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya kipaza sauti kupiga simu na kurekodi ujumbe wa sauti."}},"hy-AM":{"stringUnit":{"value":"Session-ը պահանջում է խոսափողին հասանելիություն զանգեր կատարելու և ձայնային հաղորդագրություններ արձանագրելու համար։","state":"translated"}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງການເຂົ້າເຖິງໄມໂຄໂຟນເພື່ອໂທແລະບັນທຶກເສັຽງຂໍ້ຄວາມສຽງ."}},"fa":{"stringUnit":{"value":"Session برای برقراری تماس و ضبط پیام‌های صوتی نیاز به دسترسی میکروفن دارد.","state":"translated"}},"te":{"stringUnit":{"value":"కాల్ చేయడానికి మరియు ఆడియో సందేశాలను రికార్డ్ చేయడానికి Session మైక్రోఫోన్ యాక్సెస్ అవసరం.","state":"translated"}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita acceder ao micrófono para facer chamadas e gravar mensaxes de audio."}},"sr-RS":{"stringUnit":{"value":"Session treba pristup mikrofonu da bi obavljao pozive i snimao audio poruke.","state":"translated"}},"uk":{"stringUnit":{"value":"Session потрібен доступ до мікрофона для здійснення дзвінків та запису аудіоповідомлень.","state":"translated"}},"uz":{"stringUnit":{"state":"translated","value":"Session qo'ng'iroq qilish va audio xabarlarni yozish uchun mikrofon kirishini talab qiladi."}},"lv":{"stringUnit":{"value":"Session ir nepieciešama piekļuve mikrofonam, lai veiktu zvanus un ierakstītu audio ziņas.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"Session heeft toegang tot de microfoon nodig om audioberichten op te nemen."}},"pt-PT":{"stringUnit":{"value":"Session precisa de acesso ao microfone para fazer chamadas e gravar mensagens de áudio.","state":"translated"}},"fi":{"stringUnit":{"value":"Session tarvitsee mikrofonin käyttöoikeuden puheluiden soittamiseen ja ääniviestien nauhoittamiseen.","state":"translated"}},"cy":{"stringUnit":{"value":"Mae Session angen mynediad i'r meicroffon i wneud galwadau a recordio negeseuon sain.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje přístup k mikrofonu pro volání a nahrávání zvukových zpráv."}},"hu":{"stringUnit":{"state":"translated","value":"Session-nak mikrofon engedélyre van szüksége ahhoz, hogy hívásokat bonyolítson és hangüzeneteket rögzítsen."}},"xh":{"stringUnit":{"value":"Session ifuna ukufikelela kwisixhobo somculo wokwenza iminxeba kunye nokurekhoda imiyalezo yesandi.","state":"translated"}},"es-ES":{"stringUnit":{"value":"Session necesita acceso al micrófono para hacer llamadas y grabar mensajes de audio.","state":"translated"}},"az":{"stringUnit":{"state":"translated","value":"Session zəng etmək və səsli mesajlar yazmaq üçün mikrofona müraciət etməlidir."}},"eu":{"stringUnit":{"value":"Session(e)k mikrofonoaren sarbidea behar du deiak egiteko eta audio mezuak grabatzeko.","state":"translated"}},"ka":{"stringUnit":{"value":"Session-ს სჭირდება მიკროფონის წვდომა ზარების შესასრულებლად და აუდიო შეტყობინებების ჩასაწერად.","state":"translated"}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita acceso al micrófono para hacer llamadas y grabar mensajes de audio."}},"hr":{"stringUnit":{"state":"translated","value":"Session treba pristup mikrofonu za obavljanje poziva i snimanje audio poruka."}},"ja":{"stringUnit":{"value":"Sessionで通話をかけたり、音声メッセージを録音するにはマイクへのアクセスが必要です。","state":"translated"}},"km":{"stringUnit":{"value":"Session ត្រូវការវិស្សមន្តងសម្រាប់ដាក់ស្នើរ និងថតសារ​សំឡេង។","state":"translated"}},"bn":{"stringUnit":{"value":"কল করার জন্য এবং অডিও মেসেজ রেকর্ড করার জন্য Session এর মাইক্রোফোন অ্যাকসেস প্রয়োজন।","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt Mikrofonzugriff, um Anrufe zu tätigen und Audionachrichten aufzuzeichnen."}},"mk":{"stringUnit":{"value":"Session има потреба од пристап до микрофонот за да врши повици и снима аудио пораки.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"Session behöver mikrofonåtkomst för att ringa och spela in ljudmeddelanden."}},"kn":{"stringUnit":{"value":"Session ಗೆ ಕಾಲ್‌ಗಳು ಮಾಡಲು ಮತ್ತು ಆಡಿಯೊ ಸಂದೇಶಗಳನ್ನು ದಾಖಲು ಮಾಡಲು ಮೈಕ್ರೊಫೋನ್ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ.","state":"translated"}},"my":{"stringUnit":{"value":"Session မှ ဖုန်းခေါ်ဆိုမှုများနှင့် အသံမက်ဆေ့များကို မှတ်တမ်းတင်ရန် မိုက်ခရိုဖုန်းအသုံးပြုခွင့် လိုအပ်ပါတယ်။","state":"translated"}},"sq":{"stringUnit":{"state":"translated","value":"Session ka nevojë për leje përdorimi të mikrofonit për të bërë thirrje dhe për të regjistruar mesazhe audio."}},"si-LK":{"stringUnit":{"value":"ඇමතුම් ලබා දීම සහ ශ්‍රව්‍ය පණිවිඩ පටිගත කිරීම සඳහා Sessionට මයික්‍රෆෝන ප්‍රවේශය අවශ්‍යයි.","state":"translated"}},"af":{"stringUnit":{"value":"Session het mikrofoon toegang nodig om oproepe te maak en oudioboodskappe op te neem.","state":"translated"}},"ca":{"stringUnit":{"value":"Session necessita accés al micròfon per fer trucades i gravar missatges d'àudio.","state":"translated"}},"mn":{"stringUnit":{"value":"Session дуудлага хийх болон аудио мессеж бичихийн тулд микрофоны хандалт хэрэгтэй.","state":"translated"}},"fr":{"stringUnit":{"value":"Session a besoin de l’accès au microphone pour passer des appels et enregistrer des messages audio.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"Session cần quyền truy cập microphone để gọi điện và ghi âm tin nhắn thoại."}},"it":{"stringUnit":{"value":"Session richiede l'accesso al microfono per effettuare chiamate e registrare messaggi audio.","state":"translated"}},"el":{"stringUnit":{"value":"Το Session χρειάζεται πρόσβαση στο μικρόφωνο για την αποστολή ηχητικών μηνυμάτων.","state":"translated"}},"sh":{"stringUnit":{"state":"translated","value":"Session treba pristup mikrofonu za obavljanje poziva i snimanje audio poruka."}},"ms":{"stringUnit":{"state":"translated","value":"Session memerlukan akses mikrofon untuk membuat panggilan dan merakam mesej audio."}},"et":{"stringUnit":{"state":"translated","value":"Session vajab mikrofoni juurdepääsu, et teha kõnesid ja salvestada helisõnumeid."}},"tr":{"stringUnit":{"state":"translated","value":"Session, arama yapmak ve sesli mesaj kaydetmek için mikrofon erişimine ihtiyaç duyar."}},"ne-NP":{"stringUnit":{"value":"Session लाई कल गर्न र अडियो सन्देशहरू रेकर्ड गर्न माइक्रोफोनको पहुँच आवश्यक छ।","state":"translated"}},"ta":{"stringUnit":{"value":"Session அழைப்புகளை செய்ய மற்றும் ஆடியோ தகவல்களை பதிவு செய்ய மைக்ரோஃபோன் அணுகல் தேவை.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 需要麥克風存取權來撥打電話和錄製語音訊息。"}},"ko":{"stringUnit":{"state":"translated","value":"Session은 통화를 하고 음성 메시지를 녹음하기 위해 마이크 접근이 필요합니다."}},"id":{"stringUnit":{"state":"translated","value":"Session membutuhkan akses mikrofon untuk melakukan panggilan dan merekam pesan audio."}},"lg":{"stringUnit":{"value":"Session yeetaaga ssensa ya mmikirofono okukola eyitibwamu n’okuwandiika obubaka obuweereze.","state":"translated"}},"ps":{"stringUnit":{"state":"translated","value":"Session د غږیزو پیغامونو لیږلو کولو لپاره مایکروفون ته اړتیا لري."}},"nn-NO":{"stringUnit":{"value":"Session trenger mikrofontilgang for å ringe og ta opp lydmeldinger.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas mikrofonan aliron por fari vokojn kaj registri aŭdajn mesaĝojn."}},"pl":{"stringUnit":{"value":"Session wymaga dostępu do mikrofonu, aby wykonywać połączenia i nagrywać wiadomości dźwiękowe.","state":"translated"}},"lt":{"stringUnit":{"state":"translated","value":"Session reikia prieigos prie mikrofono, kad galėtumėte skambinti ir įrašinėti garso žinutes."}},"hi":{"stringUnit":{"state":"translated","value":"कॉल करने और ऑडियो संदेश रिकॉर्ड करने के लिए Session को माइक्रोफोन एक्सेस की आवश्यकता है।"}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao microfone para fazer chamadas e gravar mensagens de áudio."}},"ru":{"stringUnit":{"state":"translated","value":"Session нужен доступ к микрофону для звонков и записи аудиосообщений."}},"fil":{"stringUnit":{"state":"translated","value":"Ang Session ay nangangailangan ng access sa mikropono upang tumawag at mag-record ng mga mensaheng audio."}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਕਾਲਾ ਕਰਣ ਅਤੇ ਆਡੀਓ ਸੁਨੇਹੇ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਮਾਈਕਰੋਫੋਨ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।"}},"he":{"stringUnit":{"state":"translated","value":"Session צריך הרשאת מיקרופון לשיחות ולהודעות שמע."}},"zh-CN":{"stringUnit":{"value":"Session需要麦克风访问权限来拨打电话和录制语音信息。","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"Session يحتاج إذن الوصول إلى الميكروفون لإجراء المكالمات وتسجيل الرسائل الصوتية."}},"ro":{"stringUnit":{"value":"Session are nevoie de acces la microfon pentru a efectua apeluri și a înregistra mesaje audio.","state":"translated"}},"nb":{"stringUnit":{"value":"Session trenger mikrofontilgang for å foreta samtaler og ta opp lydmeldinger.","state":"translated"}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو کال کرنے اور آڈیو پیغامات ریکارڈ کرنے کے لیے مائیکروفون تک رسائی درکار ہے۔"}},"be":{"stringUnit":{"value":"Session патрэбен доступ да мікрафона, каб здзяйсняць званкі і запісваць аўдыя паведамленні.","state":"translated"}}}},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو تصاویر اور ویڈیوز بھیجنے کے لیے اسٹوریج کی اجازت درکار ہے۔"}},"sl":{"stringUnit":{"value":"Session potrebuje dostop do shrambe za pošiljanje fotografij in videoposnetkov.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"Session precisa de acesso ao armazenamento para enviar fotos e vídeos.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"Session پێویستە بەکارهێنانی خزینە بۆ ناردنی وێنە و ڤیدیۆکان."}},"lo":{"stringUnit":{"value":"Session ຕ້ອງການເຂົ້າເຖິງຟາຍເພື່ອສົ່ງຮູບແລະວິດີໂອ.","state":"translated"}},"he":{"stringUnit":{"value":"Session צריך הרשאות גישה לאחסון על מנת לשלוח תמונות ווידיאו.","state":"translated"}},"sr-RS":{"stringUnit":{"value":"Session treba pristup skladištu da šalje fotografije i videe.","state":"translated"}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਫੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓਜ਼ ਭੇਜਣ ਲਈ ਸਟੋਰੇਜ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।"}},"az":{"stringUnit":{"value":"Session foto və videoları göndərmək üçün anbara müraciət etməlidir.","state":"translated"}},"zh-CN":{"stringUnit":{"value":"Session需要存储权限以取用及发送照片或视频。","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"Session се нуждае от достъп до хранилището, за да изпраща снимки и видеота."}},"fi":{"stringUnit":{"value":"Session tarvitsee tallennustilan käyttöoikeuden kuvien ja videoiden lähettämiseksi.","state":"translated"}},"ta":{"stringUnit":{"value":"Session புகைப்படங்கள் மற்றும் வீடியோக்களை அனுப்ப சேமிப்பக அணுகல் தேவை.","state":"translated"}},"kn":{"stringUnit":{"value":"Session ಗೆ ಚಿತ್ರಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಕಳುಹಿಸಲು ಸಂಗ್ರಹಣೆಯ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ.","state":"translated"}},"hr":{"stringUnit":{"value":"Session treba pristup memoriji za slanje fotografija i videozapisa.","state":"translated"}},"sw":{"stringUnit":{"value":"Session inahitaji ruhusa ya kuhifadhi ili kutuma picha na video.","state":"translated"}},"uk":{"stringUnit":{"value":"Session потребує доступу до сховища для відправлення фотографій та відео.","state":"translated"}},"af":{"stringUnit":{"value":"Session het berging toegang nodig om foto's en video's te stuur.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs storage access to send photos and videos."}},"uz":{"stringUnit":{"value":"Session fotosuratlar va videolarni yuborish uchun saqlashga kirishni talab qiladi.","state":"translated"}},"nb":{"stringUnit":{"value":"Session trenger lagringstilgang for å sende bilder og videoer.","state":"translated"}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita acceso al almacenamiento para enviar fotos y videos."}},"cs":{"stringUnit":{"value":"Session potřebuje přístup k úložišti pro odesílání fotografií a videí.","state":"translated"}},"hy-AM":{"stringUnit":{"value":"Session-ը պահանջում է պահեստային հասանելիություն՝ լուսանկարներ և տեսանյութեր ուղարկելու համար։","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"Session Benötigt Speicherzugriff, um Fotos und Videos zu senden."}},"sr":{"stringUnit":{"value":"Session треба дозволу за складиште да шаље слике и видео клипове.","state":"translated"}},"id":{"stringUnit":{"value":"Session membutuhkan akses penyimpanan untuk mengirim foto dan video.","state":"translated"}},"fil":{"stringUnit":{"value":"Ang Session ay nangangailangan ng access sa storage upang magpadala ng mga litrato at video.","state":"translated"}},"bal":{"stringUnit":{"state":"translated","value":"Session ذخیرہ پاتبسینہ بھیجنے تصویریں دکنیں"}},"bn":{"stringUnit":{"state":"translated","value":"ছবি এবং ভিডিও প্রেরণ করতে Session এর স্টোরেজ অ্যাকসেস প্রয়োজন।"}},"et":{"stringUnit":{"state":"translated","value":"Session vajab fotode ja videote saatmiseks juurdepääsu salvestusruumile."}},"lt":{"stringUnit":{"state":"translated","value":"Session reikia prieigos prie saugyklos norint siųsti nuotraukas ir vaizdo įrašus."}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k biltegirako sarbidea behar du argazkiak eta bideoak bidaltzeko."}},"lg":{"stringUnit":{"state":"translated","value":"Session yeetaaga ssensa y’obusobozi okutuma ebifaananyi n’ebifaananyi ebya vidiyo."}},"nl":{"stringUnit":{"state":"translated","value":"Session heeft toegang nodig tot de opslag om foto's en video's te kunnen verzenden."}},"da":{"stringUnit":{"state":"translated","value":"Session har brug for lageradgang for at sende billeder og videoer."}},"ro":{"stringUnit":{"state":"translated","value":"Session are nevoie de acces la stocare pentru a trimite poze și filme."}},"hu":{"stringUnit":{"value":"Session-nak tárhely hozzáférésre van szüksége a fotók és videók elküldéséhez.","state":"translated"}},"my":{"stringUnit":{"state":"translated","value":"Session သည် ဓာတ်ပုံများနှင့် ဗွီဒီယိုများ ပို့ရန် သိမ်းဆည်းမှုပုံစံခွင့်လိုအပ်သည်။"}},"it":{"stringUnit":{"state":"translated","value":"Session richiede l'accesso allo storage per inviare foto e video."}},"km":{"stringUnit":{"value":"Session ត្រូវការភ្ជាប់អង្គរក្សាទុកដើម្បីផ្ញើរូបទិញនិងវីដេអូ.","state":"translated"}},"ny":{"stringUnit":{"state":"translated","value":"Session imafuna mwayi wosungira kuti atumize zithunzi ndi makanema."}},"mn":{"stringUnit":{"value":"Session зураг болон видеонуудыг илгээхийн тулд сангийн хандалт хэрэгтэй.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στον αποθηκευτικό χώρο για την αποστολή φωτογραφιών και βίντεο."}},"pt-PT":{"stringUnit":{"value":"Session precisa de acesso ao armazenamento para enviar fotos e vídeos.","state":"translated"}},"sh":{"stringUnit":{"value":"Session treba pristup pohrani za slanje slika i videa.","state":"translated"}},"nn-NO":{"stringUnit":{"value":"Session trenger lagringstilgang for å sende bilete og videoar.","state":"translated"}},"fa":{"stringUnit":{"value":"Session برای ارسال عکس‌ها و ویدئو‌ها نیاز به دسترسی حافظه دارد.","state":"translated"}},"sk":{"stringUnit":{"state":"translated","value":"Session potrebuje prístup na disk na posielanie fotiek a videí."}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas aliron al memoro por sendi bildojn kaj videojn."}},"vi":{"stringUnit":{"value":"Session cần quyền truy cập lưu trữ để gửi ảnh và video.","state":"translated"}},"ms":{"stringUnit":{"state":"translated","value":"Session memerlukan akses storan untuk menghantar foto dan video."}},"te":{"stringUnit":{"state":"translated","value":"ఫోటోలు మరియు వీడియోలను పంపడానికి Session కు నిల్వ యాక్సెస్ అవసరం."}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita accés a l'emmagatzematge per enviar fotografies i vídeos."}},"sv-SE":{"stringUnit":{"state":"translated","value":"Session behöver åtkomst till lagringsutrymmet för att kunna skicka foton och filmer."}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso de almacenamiento para enviar fotos y videos."}},"ar":{"stringUnit":{"state":"translated","value":"Session يحتاج إذن الوصول إلى التخزين لإرسال الصور ومقاطع الفيديو."}},"fr":{"stringUnit":{"state":"translated","value":"Session a besoin d'un accès de stockage pour envoyer des photos et des vidéos."}},"tr":{"stringUnit":{"state":"translated","value":"Session, fotoğraf ve video göndermek için depolama erişimine ihtiyaç duyar."}},"cy":{"stringUnit":{"state":"translated","value":"Mae Session angen mynediad i storio i anfon lluniau a fideos."}},"gl":{"stringUnit":{"value":"Session necesita permiso para acceder ao almacenamento para enviar fotos e vídeos.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"Session 需要存儲空間存取權來發送照片和影片。","state":"translated"}},"ps":{"stringUnit":{"value":"Session عکسونه او ویډیوګانې لیږلو لپاره ذخیره کولو ته اړتیا لري.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"Session патрабуе дазволу да сховішча каб дасылаць фота і відэа."}},"ko":{"stringUnit":{"value":"Session은 사진과 동영상을 전송하기 위해 저장공간 접근이 필요합니다.","state":"translated"}},"ja":{"stringUnit":{"value":"Sessionは写真や動画を送信するためにストレージへのアクセスが必要です。","state":"translated"}},"xh":{"stringUnit":{"value":"Session ifuna ukufikelela kwindawo yokugcina ukuthumela iifoto nevidiyo.","state":"translated"}},"mk":{"stringUnit":{"value":"Session има потреба од пристап до складиштето за да испраќа фотографии и видеа.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"Session लाई फोटो र भिडियोहरू पठाउन स्टोरज पहुँच आवश्यक छ।","state":"translated"}},"hi":{"stringUnit":{"value":"Session को फ़ोटो और वीडियो भेजने के लिए संग्रहण पहुंच चाहिए।","state":"translated"}},"ha":{"stringUnit":{"value":"Session yana buƙatar samun damar ajiya don aikawa da hotuna da bidiyo.","state":"translated"}},"ka":{"stringUnit":{"value":"Session-ს სჭირდება მეხსიერების წვდომა ფოტოებისა და ვიდეოების გასაგზავნად.","state":"translated"}},"sq":{"stringUnit":{"state":"translated","value":"Session ka nevojë për leje të hapësirës ruajtëse për të dërguar foto dhe video."}},"si-LK":{"stringUnit":{"state":"translated","value":"ඡායාරූප සහ වීඩියෝ යැවීමට Sessionට ගබඩා ප්‍රවේශය අවශ්‍යයි."}},"ru":{"stringUnit":{"value":"Session нужен доступ к хранилищу для отправки фотографий и видео.","state":"translated"}}}},"New Message":{},"CFBundleName":{"extractionState":"extracted_with_value","comment":"Bundle name","localizations":{"en":{"stringUnit":{"value":"Session","state":"new"}}}},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"da":{"stringUnit":{"value":"Session skal have lageradgang for at gemme vedhæftninger og mediefiler.","state":"translated"}},"lv":{"stringUnit":{"value":"Session ir nepieciešama pieeja glabātuve failu un multimediju saglabāšanai.","state":"translated"}},"lt":{"stringUnit":{"value":"Session reikia prieigos prie saugyklos, kad galėtų įrašyti priedus ir mediją.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"Session richiede l'accesso allo storage per salvare allegati e media."}},"sv-SE":{"stringUnit":{"value":"Session behöver åtkomst till lagringsutrymmet för att kunna spara bifogade filer och media.","state":"translated"}},"ny":{"stringUnit":{"value":"Session imafuna mwayi wosungira kuti asunge attachments ndi media.","state":"translated"}},"ps":{"stringUnit":{"state":"translated","value":"Session پیوستونونو او میډیا خوندي کولو لپاره ذخیره کولو ته اړتیا لري."}},"hy-AM":{"stringUnit":{"value":"Session-ը պահանջում է պահեստային հասանելիություն կցորդներն ու մեդիան պահպանելու համար։","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"Session membutuhkan akses penyimpanan untuk menyimpan lampiran dan media."}},"cy":{"stringUnit":{"value":"Mae Session angen mynediad i storio i gadw atodiadau a chyfryngau.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στον αποθηκευτικό χώρο για να αποθηκεύσει συνημμένα και πολυμέσα."}},"gl":{"stringUnit":{"value":"Session necesita permiso para acceder ao almacenamento para gardar anexos e medios.","state":"translated"}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება მეხსიერების წვდომა მიმაგრებული ფაილებისა და მედიების შესანახად."}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од пристап до складиштето за да зачува прилози и медиуми."}},"fr":{"stringUnit":{"value":"Session doit accéder au stockage pour enregistrer les pièces jointes et les médias.","state":"translated"}},"ms":{"stringUnit":{"value":"Session memerlukan akses storan untuk menyimpan lampiran dan media.","state":"translated"}},"tr":{"stringUnit":{"value":"Session, ekleri ve medyayı kaydetmek için depolama erişimine ihtiyaç duyar.","state":"translated"}},"nn-NO":{"stringUnit":{"state":"translated","value":"Session trenger lagringstilgang for å lagre vedlegg og media."}},"sk":{"stringUnit":{"value":"Session potrebuje prístup k úložisku na uloženie príloh a médií.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"Session 需要存儲空間存取權以保存附件和媒體。","state":"translated"}},"nl":{"stringUnit":{"value":"Session heeft opslagtoegang nodig om bijlagen en media op te slaan.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"Session cần quyền truy cập lưu trữ để lưu các tập tin đính kèm và phương tiện."}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso de almacenamiento para guardar archivos adjuntos y medios."}},"az":{"stringUnit":{"value":"Session qoşmaları və mediyanı yaddaşda saxlamaq üçün anbara müraciət etməlidir.","state":"translated"}},"es-419":{"stringUnit":{"value":"Session necesita acceso al almacenamiento para guardar adjuntos y multimedia.","state":"translated"}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو منسلکات اور میڈیا محفوظ کرنے کے لیے اسٹوریج کی اجازت درکار ہے۔"}},"fa":{"stringUnit":{"state":"translated","value":"Session برای ذخیره پیوست‌ها و رسانه‌ها نیاز به دسترسی به حافظه دارد."}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao armazenamento para salvar anexos e mídia."}},"sr":{"stringUnit":{"value":"Session треба приступ складишту да сачува прилоге и медије.","state":"translated"}},"uz":{"stringUnit":{"state":"translated","value":"Session fayl va media tarkiblarini saqlash uchun saqlashga kirishni talab qiladi."}},"pl":{"stringUnit":{"value":"Session potrzebuje dostępu do pamięci, aby zapisywać załączniki i multimedia.","state":"translated"}},"sl":{"stringUnit":{"value":"Session potrebuje dostop do shrambe za shranjevanje prilog in medijev.","state":"translated"}},"be":{"stringUnit":{"value":"Session патрабуе дазволу да сховішча каб захоўваць ўкладанні і медыя.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"Session-nak tárhely hozzáférés szükséges a mellékletek és médiák mentéséhez."}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要存储权限来保存附件和媒体。"}},"eo":{"stringUnit":{"value":"Session bezonas aliron al memoro por konservi aldonaĵojn kaj aŭdvidaĵojn.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt Speicherzugriff, um Anhänge und Medien zu speichern."}},"ro":{"stringUnit":{"value":"Session are nevoie de acces la stocare pentru a salva atașamente și media.","state":"translated"}},"af":{"stringUnit":{"value":"Session het berging toegang nodig om aanhegsels en media te stoor.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"Session permiya hilkişina xelasî û medyayê hewce dike."}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje přístup k úložišti pro ukládání příloh a médií."}},"ar":{"stringUnit":{"value":"Session يحتاج إذن الوصول إلى التخزين لحفظ المرفقات والوسائط.","state":"translated"}},"si-LK":{"stringUnit":{"state":"translated","value":"ඇමුණුම් සහ මාධ්‍ය සුරැකීම සඳහා Sessionට ගබඩා ප්‍රවේශය අවශ්‍යවේ."}},"km":{"stringUnit":{"value":"Session ត្រូវការចូលប្រើវើសកម្មដើម្បីរក្សាទុកឯកសារ និងមេឌៀ។","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"Sessionは添付ファイルやメディアを保存するためにストレージへのアクセスが必要です。"}},"he":{"stringUnit":{"state":"translated","value":"Session זקוק לגישה לאחסון כדי לשמור צרופות ומדיה."}},"bg":{"stringUnit":{"state":"translated","value":"Session се нуждае от достъп до хранилището, за да запазва прикачени файлове и медия."}},"bn":{"stringUnit":{"state":"translated","value":"সংযুক্তি এবং মিডিয়া সংরক্ষণ করতে Session এর স্টোরেজ অ্যাকসেস প্রয়োজন।"}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya hifadhi ili kuhifadhi viambatanisho na vyombo vya habari."}},"uk":{"stringUnit":{"value":"Session потребує доступу до сховища для збереження вкладень та медіа.","state":"translated"}},"ta":{"stringUnit":{"value":"Session இணைப்புகள் மற்றும் மெடியாவை சேமிக்க சேமிப்பக அணுகல் தேவை.","state":"translated"}},"ha":{"stringUnit":{"state":"translated","value":"Session yana buƙatar samun damar ajiya don adana abubuwan haɗe-haɗe da kafofin watsa labarai."}},"fil":{"stringUnit":{"state":"translated","value":"Ang Session ay nangangailangan ng access sa storage upang mag-save ng mga attachment at media."}},"xh":{"stringUnit":{"value":"Session ifuna ukufikelela kwindawo yokugcina ukuthumela iziphumo kunye nemidiya.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"Session은 첨부 파일과 미디어를 저장하기 위해 저장 공간 접근이 필요합니다."}},"fi":{"stringUnit":{"value":"Session tarvitsee tallennustilan käyttöoikeuden liitteiden ja median tallentamiseksi.","state":"translated"}},"en":{"stringUnit":{"value":"Session needs storage access to save attachments and media.","state":"translated"}},"my":{"stringUnit":{"value":"Session သည် ပူးတွဲချက်များနှင့် မီဒီယာကို သိမ်းဆည်းရန် သိုလှောင်မှုခွင့်ပြုချက်လိုအပ်ပါသည်။","state":"translated"}},"kn":{"stringUnit":{"state":"translated","value":"Session ಗೆ ಅಟ್ಯಾಚ್ಮೆಂಟ್‌ಗಳು ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ಉಳಿಸಲು ಸಂಗ್ರಹಣೆಯ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ."}},"hr":{"stringUnit":{"value":"Session treba pristup memoriji za spremanje privitaka i medija.","state":"translated"}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita accés a l'emmagatzematge per desar els fitxers adjunts i els suports."}},"mn":{"stringUnit":{"state":"translated","value":"Session нь хавсралт болон медиа хадгалахын тулд сангийн хандалт хэрэгтэй."}},"ru":{"stringUnit":{"state":"translated","value":"Session нужен доступ к хранилищу для сохранения вложений и медиафайлов."}},"bal":{"stringUnit":{"value":"Session ذخیرہ پاتبسینہ محفوظ عریض او ذرہے","state":"translated"}},"pt-BR":{"stringUnit":{"value":"Session precisa de acesso ao armazenamento para salvar anexos e mídias.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"Session लाई अट्याचमेन्ट र मिडिया सेभ गर्न स्टोरज पहुँच आवश्यक छ।","state":"translated"}},"sq":{"stringUnit":{"state":"translated","value":"Session ka nevojë për leje të hapësirës ruajtëse për të ruajtur attachment-et dhe median."}},"pa-IN":{"stringUnit":{"value":"Session ਨੂੰ ਅਟੈਚਮੈਂਟਸ ਅਤੇ ਮੀਡੀਆ ਸੰਭਾਲਣ ਲਈ ਸਟੋਰੇਜ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"Session को अनुलग्नक और मीडिया को सहेजने के लिए संग्रहण पहुंच चाहिए।"}},"nb":{"stringUnit":{"state":"translated","value":"Session trenger lagringstilgang for å lagre vedlegg og media."}},"et":{"stringUnit":{"value":"Session vajab salvestusruumi ligipääsu, et salvestada manuseid ja meediat.","state":"translated"}},"sr-RS":{"stringUnit":{"value":"Session treba pristup skladištu da sačuva priloge i medije.","state":"translated"}},"lo":{"stringUnit":{"value":"Session ຕ້ອງການເຂົ້າເຖິງຟາຍເພື່ອບັນທຶກຢາງແລະວິດີໂອ.","state":"translated"}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k biltegirako sarbidea behar du eranskinak eta hedabideak gordetzeko."}},"te":{"stringUnit":{"value":"అటాచ్మెంట్‌లు మరియు మీడియాను సేవ్ చేయడానికి Session కు నిల్వ యాక్సెస్ అవసరం.","state":"translated"}},"lg":{"stringUnit":{"value":"Session yeetaaga ssensa y’obusobozi okusigala ekwatibwako aammaamu n’emikutu.","state":"translated"}},"sh":{"stringUnit":{"value":"Session treba pristup pohrani za spremanje privitaka i medija.","state":"translated"}}}}}} \ No newline at end of file diff --git a/Session/Meta/Translations/Localizable.xcstrings b/Session/Meta/Translations/Localizable.xcstrings index 571e6805c4..fc379ac80e 100644 --- a/Session/Meta/Translations/Localizable.xcstrings +++ b/Session/Meta/Translations/Localizable.xcstrings @@ -1,6 +1,9 @@ { "sourceLanguage" : "en", "strings" : { + "@" : { + + }, "%@%@" : { "localizations" : { "en" : { @@ -10,6 +13,9 @@ } } } + }, + "%llu" : { + }, "about" : { "extractionState" : "manual", From 11868b680502e507cf5d2aefcc8e46a7ceb27590 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Tue, 10 Sep 2024 08:56:37 +1000 Subject: [PATCH 12/16] WIP: refactor home screen view model --- Session.xcodeproj/project.pbxproj | 35 +-- Session/Home/ConversationList.swift | 25 +- Session/Home/HomeScreen.swift | 55 ++-- Session/Home/HomeScreenDataModel.swift | 386 ++++++++++++++++++++++++ Session/Home/HomeScreenViewModel.swift | 109 +++++++ Session/Home/HomeViewModelRequest.swift | 5 - Session/Meta/AppDelegate.swift | 30 +- 7 files changed, 567 insertions(+), 78 deletions(-) create mode 100644 Session/Home/HomeScreenDataModel.swift create mode 100644 Session/Home/HomeScreenViewModel.swift delete mode 100644 Session/Home/HomeViewModelRequest.swift diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index 2d4ce39333..261d08eeb1 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -164,12 +164,9 @@ 7BFA8AE32831D0D4001876F3 /* ContextMenuVC+EmojiReactsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BFA8AE22831D0D4001876F3 /* ContextMenuVC+EmojiReactsView.swift */; }; 7BFD1A8A2745C4F000FB91B9 /* Permissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BFD1A892745C4F000FB91B9 /* Permissions.swift */; }; 7BFD1A972747689000FB91B9 /* Session-Turn-Server in Resources */ = {isa = PBXBuildFile; fileRef = 7BFD1A962747689000FB91B9 /* Session-Turn-Server */; }; - 88C614F4223F9BE0CB94E4E5 /* Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionUtilitiesKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35C5EF2AACD4A39D6E0E2C49 /* Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionUtilitiesKit.framework */; }; - 9409BA672C2D1BBD007C90C1 /* HomeViewModelRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9409BA662C2D1BBD007C90C1 /* HomeViewModelRequest.swift */; }; - 941061402BBE45EB0056C084 /* ActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9410613F2BBE45EB0056C084 /* ActivityView.swift */; }; - 941BE62F2C1BF888005A880A /* HomeScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941BE62E2C1BF887005A880A /* HomeScreen.swift */; }; 9409433E2C7EB81800D9D2E0 /* WebRTCSession+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9409433D2C7EB81800D9D2E0 /* WebRTCSession+Constants.swift */; }; 940943402C7ED62300D9D2E0 /* StartupError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9409433F2C7ED62300D9D2E0 /* StartupError.swift */; }; + 941BE62F2C1BF888005A880A /* HomeScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941BE62E2C1BF887005A880A /* HomeScreen.swift */; }; 942256802C23F8BB00C0FDBF /* StartConversationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9422567D2C23F8BB00C0FDBF /* StartConversationScreen.swift */; }; 942256812C23F8BB00C0FDBF /* NewMessageScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9422567E2C23F8BB00C0FDBF /* NewMessageScreen.swift */; }; 942256822C23F8BB00C0FDBF /* InviteAFriendScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9422567F2C23F8BB00C0FDBF /* InviteAFriendScreen.swift */; }; @@ -197,6 +194,8 @@ 94B3DC172AF8592200C88531 /* QuoteView_SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B3DC162AF8592200C88531 /* QuoteView_SwiftUI.swift */; }; 94C5DCB02BE88170003AA8C5 /* BezierPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C5DCAF2BE88170003AA8C5 /* BezierPathView.swift */; }; 94E12DBC2C24063A00D28EE0 /* SessionButton_SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */; }; + 94E5EDA52C8ECBFC0084ED63 /* HomeScreenDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E5EDA42C8ECBFC0084ED63 /* HomeScreenDataModel.swift */; }; + 94E5EDA72C8ECC150084ED63 /* HomeScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E5EDA62C8ECC150084ED63 /* HomeScreenViewModel.swift */; }; 94E89A9B2C2A997B00FB18E1 /* ConversationList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */; }; 94E9BC0D2C7BFBDA006984EA /* Localization+Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E9BC0C2C7BFBDA006984EA /* Localization+Style.swift */; }; A11CD70D17FA230600A2D1B1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */; }; @@ -1361,16 +1360,10 @@ 7BFD1A892745C4F000FB91B9 /* Permissions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Permissions.swift; sourceTree = ""; }; 7BFD1A8B2747150E00FB91B9 /* TurnServerInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TurnServerInfo.swift; sourceTree = ""; }; 7BFD1A962747689000FB91B9 /* Session-Turn-Server */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Session-Turn-Server"; sourceTree = ""; }; - 7C0E07EB26851D7BB4CF060E /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.app store release.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.app store release.xcconfig"; sourceTree = ""; }; - 7FE80FEC012334C282A6C8CB /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit-SessionUtilitiesKitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit-SessionUtilitiesKitTests.debug.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit-SessionUtilitiesKitTests/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit-SessionUtilitiesKitTests.debug.xcconfig"; sourceTree = ""; }; - 81B86106CE32C944E6A3A8F2 /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app_store_release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app_store_release.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app_store_release.xcconfig"; sourceTree = ""; }; - 89EE44A6174C653D2F4DB573 /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit.debug.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SignalUtilitiesKit.debug.xcconfig"; sourceTree = ""; }; - 91271A534D1D4AB949B1319E /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension.app store release.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-SessionNotificationServiceExtension.app store release.xcconfig"; sourceTree = ""; }; - 9409BA662C2D1BBD007C90C1 /* HomeViewModelRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewModelRequest.swift; sourceTree = ""; }; - 9410613F2BBE45EB0056C084 /* ActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityView.swift; sourceTree = ""; }; - 941BE62E2C1BF887005A880A /* HomeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreen.swift; sourceTree = ""; }; 9409433D2C7EB81800D9D2E0 /* WebRTCSession+Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WebRTCSession+Constants.swift"; sourceTree = ""; }; 9409433F2C7ED62300D9D2E0 /* StartupError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartupError.swift; sourceTree = ""; }; + 9410613F2BBE45EB0056C084 /* ActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityView.swift; sourceTree = ""; }; + 941BE62E2C1BF887005A880A /* HomeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreen.swift; sourceTree = ""; }; 9422567D2C23F8BB00C0FDBF /* StartConversationScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartConversationScreen.swift; sourceTree = ""; }; 9422567E2C23F8BB00C0FDBF /* NewMessageScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewMessageScreen.swift; sourceTree = ""; }; 9422567F2C23F8BB00C0FDBF /* InviteAFriendScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InviteAFriendScreen.swift; sourceTree = ""; }; @@ -1398,10 +1391,9 @@ 94B3DC162AF8592200C88531 /* QuoteView_SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuoteView_SwiftUI.swift; sourceTree = ""; }; 94C5DCAF2BE88170003AA8C5 /* BezierPathView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BezierPathView.swift; sourceTree = ""; }; 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionButton_SwiftUI.swift; sourceTree = ""; }; + 94E5EDA42C8ECBFC0084ED63 /* HomeScreenDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenDataModel.swift; sourceTree = ""; }; + 94E5EDA62C8ECC150084ED63 /* HomeScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenViewModel.swift; sourceTree = ""; }; 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ConversationList.swift; path = Session/Home/ConversationList.swift; sourceTree = SOURCE_ROOT; }; - 987AE169AEA3246E4C0897B1 /* Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GlobalDependencies_FrameworkAndExtensionDependencies_ExtendedDependencies_SessionShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 998762BFD08C2415FE71186C /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.debug.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionUtilitiesKit.debug.xcconfig"; sourceTree = ""; }; - 9DE2662E4E5838CD8E1AF35F /* Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app store release.xcconfig"; path = "Target Support Files/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension/Pods-GlobalDependencies-FrameworkAndExtensionDependencies-ExtendedDependencies-SessionShareExtension.app store release.xcconfig"; sourceTree = ""; }; 94E9BC0C2C7BFBDA006984EA /* Localization+Style.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Localization+Style.swift"; sourceTree = ""; }; A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; A163E8AA16F3F6A90094D68B /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; @@ -2537,11 +2529,6 @@ 942256932C23F8DD00C0FDBF /* SwiftUI */ = { isa = PBXGroup; children = ( - 7BDE2A992A8C59CF00AE4393 /* AttributedText.swift */, - 7B87EF432A8DA720002A0E8F /* SessionTextField.swift */, - 7BF570D22A9C1F9300DB013E /* Toast.swift */, - 942C9CA12B67769000B5153A /* SessionSearchBar.swift */, - 943C6D752B705B7D004ACE64 /* CompatibleScrollingVStack.swift */, 9410613F2BBE45EB0056C084 /* ActivityView.swift */, 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */, 9422568D2C23F8DD00C0FDBF /* ActivityView.swift */, @@ -3099,7 +3086,8 @@ B8BB82A4238F627000BA5194 /* HomeVC.swift */, 941BE62E2C1BF887005A880A /* HomeScreen.swift */, 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */, - 9409BA662C2D1BBD007C90C1 /* HomeViewModelRequest.swift */, + 94E5EDA42C8ECBFC0084ED63 /* HomeScreenDataModel.swift */, + 94E5EDA62C8ECC150084ED63 /* HomeScreenViewModel.swift */, ); path = Home; sourceTree = ""; @@ -5134,7 +5122,6 @@ buildActionMask = 2147483647; files = ( 4535186E1FC635DD00210559 /* MainInterface.storyboard in Resources */, - 94367C442C6C828500814252 /* Localizable.xcstrings in Resources */, B8D07406265C683A00F77E07 /* ElegantIcons.ttf in Resources */, FD86FDA42BC51C5400EC251B /* PrivacyInfo.xcprivacy in Resources */, 3478504C1FD7496D007B8332 /* Images.xcassets in Resources */, @@ -5146,7 +5133,6 @@ buildActionMask = 2147483647; files = ( FD86FDA52BC51C5500EC251B /* PrivacyInfo.xcprivacy in Resources */, - 94367C452C6C828500814252 /* Localizable.xcstrings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6092,7 +6078,6 @@ FD12A8432AD63BF600EEBA0D /* ObservableTableSource.swift in Sources */, FD52090528B4915F006098F6 /* PrivacySettingsViewModel.swift in Sources */, 7BAF54D027ACCEEC003D12F8 /* EmptySearchResultCell.swift in Sources */, - 9409BA672C2D1BBD007C90C1 /* HomeViewModelRequest.swift in Sources */, B8783E9E23EB948D00404FB8 /* UILabel+Interaction.swift in Sources */, FD37E9D928A230F2003AE748 /* TraitObservingWindow.swift in Sources */, B893063F2383961A005EAA8E /* ScanQRCodeWrapperVC.swift in Sources */, @@ -6215,6 +6200,7 @@ 942256802C23F8BB00C0FDBF /* StartConversationScreen.swift in Sources */, 7B9F71C928470667006DFE7B /* ReactionListSheet.swift in Sources */, FD12A8412AD63BEA00EEBA0D /* NavigatableState.swift in Sources */, + 94E5EDA52C8ECBFC0084ED63 /* HomeScreenDataModel.swift in Sources */, 7B7037452834BCC0000DCF35 /* ReactionView.swift in Sources */, FD7115F428C71EB200B47552 /* ThreadDisappearingMessagesSettingsViewModel.swift in Sources */, B8D84ECF25E3108A005A043E /* ExpandingAttachmentsButton.swift in Sources */, @@ -6293,6 +6279,7 @@ FD71163828E2C50700B47552 /* SessionTableViewModel.swift in Sources */, FD71164A28E3EA5B00B47552 /* DismissType.swift in Sources */, C328251F25CA3A900062D0A7 /* QuoteView.swift in Sources */, + 94E5EDA72C8ECC150084ED63 /* HomeScreenViewModel.swift in Sources */, 7B3A39322980D02B002FE4AC /* SessionCarouselView.swift in Sources */, FD37E9CC28A1E578003AE748 /* AppearanceViewController.swift in Sources */, B8EB20F02640F7F000773E52 /* OpenGroupInvitationView.swift in Sources */, diff --git a/Session/Home/ConversationList.swift b/Session/Home/ConversationList.swift index 798c9520cc..eaed97a920 100644 --- a/Session/Home/ConversationList.swift +++ b/Session/Home/ConversationList.swift @@ -9,19 +9,19 @@ import SessionUtilitiesKit import SignalUtilitiesKit struct ConversationList: View { - @Binding private var viewModel: HomeViewModel + @Binding private var threadData: [HomeScreenDataModel.SectionModel] public static let mutePrefix: String = "\u{e067} " // stringlint:disable public static let unreadCountViewSize: CGFloat = 20 public static let statusIndicatorSize: CGFloat = 14 - public init(viewModel: Binding) { - self._viewModel = viewModel + public init(threadData: Binding<[HomeScreenDataModel.SectionModel]>) { + self._threadData = threadData } var body: some View { List { - ForEach(viewModel.threadData) { sectionModel in + ForEach(self.threadData) { sectionModel in switch sectionModel.model { case .messageRequests: Section { @@ -154,7 +154,7 @@ struct Info { self.isBlocked = (threadViewModel.threadIsBlocked == true) self.isPinned = threadViewModel.threadPinnedPriority > 0 self.shouldShowUnreadCount = (threadIsUnread && unreadCount > 0) - self.unreadCountString = (unreadCount < 10000 ? "\(unreadCount)" : "9999+") + self.unreadCountString = (unreadCount < 10000 ? "\(unreadCount)" : "9999+") // stringlint:disable self.unreadCountFontSize = (unreadCount < 10000 ? Values.verySmallFontSize : 8) self.shouldShowUnreadIcon = (threadIsUnread && !self.shouldShowUnreadCount) self.shouldShowMentionIcon = ( @@ -163,7 +163,6 @@ struct Info { ) self.timeString = threadViewModel.lastInteractionDate.formattedForDisplay self.shouldShowTypingIndicator = (threadViewModel.threadContactIsTyping == true) - let textColor: UIColor self.snippet = Self.getSnippet(threadViewModel: threadViewModel) } @@ -409,10 +408,10 @@ struct ConversationItemRow: View { } } -struct ConversationList_Previews: PreviewProvider { - @State static var viewModel: HomeViewModel = HomeViewModel(using: Dependencies()) - - static var previews: some View { - ConversationList(viewModel: $viewModel) - } -} +//struct ConversationList_Previews: PreviewProvider { +// @State static var viewModel: HomeViewModel = HomeViewModel(using: Dependencies()) +// +// static var previews: some View { +// ConversationList(viewModel: $viewModel) +// } +//} diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index 37f6afb907..a73cd7711a 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -12,7 +12,7 @@ import SignalUtilitiesKit struct HomeScreen: View { @EnvironmentObject var host: HostWrapper - @State private var viewModel: HomeViewModel + @State private var viewModel: HomeScreenViewModel @State private var flow: Onboarding.Flow? @State private var dataChangeObservable: DatabaseCancellable? { didSet { oldValue?.cancel() } // Cancel the old observable if there was one @@ -23,17 +23,18 @@ struct HomeScreen: View { @State private var isAutoLoadingNextPage: Bool = false @State private var viewHasAppeared: Bool = false - init(flow: Onboarding.Flow? = nil, using dependencies: Dependencies) { + init(flow: Onboarding.Flow? = nil, using dependencies: Dependencies, onReceivedInitialChange: (() -> ())? = nil) { self.flow = flow - self.viewModel = HomeViewModel(using: dependencies) + self.viewModel = HomeScreenViewModel( + using: dependencies, + onReceivedInitialChange: onReceivedInitialChange + ) } var body: some View { ZStack( alignment: .top, content: { - ThemeManager.currentTheme.colorSwiftUI(for: .backgroundPrimary).ignoresSafeArea() - if viewModel.state.showViewedSeedBanner { SeedBanner(action: handleContinueButtonTapped) } @@ -49,14 +50,15 @@ struct HomeScreen: View { ) } - ConversationList(viewModel: $viewModel) + ConversationList(threadData: $viewModel.threadData) NewConversationButton(action: createNewConversation) } ) - .onReceive(Just(viewModel), perform: { updatedViewModel in + .backgroundColor(themeColor: .backgroundPrimary) + .onReceive(Just(viewModel.dataModel), perform: { updatedDataModel in (self.host.controller as? SessionHostingViewController)?.setUpNavBarButton( - leftItem: .profile(profile: updatedViewModel.state.userProfile), + leftItem: .profile(profile: updatedDataModel.state.userProfile), rightItem: .search, leftAction: openSettings, rightAction: showSearchUI @@ -75,7 +77,7 @@ struct HomeScreen: View { let targetViewController: UIViewController = ConfirmationModal( info: ConfirmationModal.Info( title: "theError".localized(), - body: .text("LOAD_RECOVERY_PASSWORD_ERROR".localized()), + body: .text("recoveryPasswordErrorLoad".localized()), cancelTitle: "okay".localized(), cancelStyle: .alert_text ) @@ -100,14 +102,16 @@ struct HomeScreen: View { self.host.controller, ( (isMessageRequest && action != .compose) ? - SessionTableViewController(viewModel: MessageRequestsViewModel()) : - nil + SessionTableViewController( + viewModel: MessageRequestsViewModel( + using: viewModel.dataModel.dependencies) + ) : nil ), ConversationVC( threadId: threadId, threadVariant: variant, focusedInteractionInfo: focusedInteractionInfo, - using: viewModel.dependencies + using: viewModel.dataModel.dependencies ) ].compactMap { $0 } @@ -127,7 +131,7 @@ struct HomeScreen: View { if let presentedVC = self.host.controller?.presentedViewController { presentedVC.dismiss(animated: false, completion: nil) } - let searchController = GlobalSearchViewController(using: viewModel.dependencies) + let searchController = GlobalSearchViewController(using: viewModel.dataModel.dependencies) self.host.controller?.navigationController?.setViewControllers( [ self.host.controller, searchController ].compactMap{ $0 }, animated: true @@ -252,9 +256,13 @@ struct EmptyStateView: View { .font(.system(size: Values.veryLargeFontSize)) .foregroundColor(themeColor: .textPrimary) - Text("onboardingBubbleWelcomeToSession".localized()) - .font(.system(size: Values.smallFontSize)) - .foregroundColor(themeColor: .sessionButton_text) + Text( + "onboardingBubbleWelcomeToSession" + .put(key: "emoji", value: "") + .localized() + ) + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .sessionButton_text) } else { // Normal empty state @@ -313,14 +321,10 @@ struct SeedBanner: View { ZStack( alignment: .topLeading, content: { - ThemeManager.currentTheme.colorSwiftUI(for: .conversationButton_background).ignoresSafeArea() - Rectangle() .fill(themeColor: .primary) - .frame( - width: .infinity, - height: 2 - ) + .frame(height: 2) + .frame(maxWidth: .infinity) HStack( alignment: .center, @@ -388,6 +392,7 @@ struct SeedBanner: View { .padding(isIPhone5OrSmaller ? Values.smallSpacing : Values.mediumSpacing) } ) + .backgroundColor(themeColor: .conversationButton_background) .border( width: Values.separatorThickness, edges: [.bottom], @@ -396,6 +401,6 @@ struct SeedBanner: View { } } -#Preview { - HomeScreen(flow: .register, using: Dependencies()) -} +//#Preview { +// HomeScreen(flow: .register, using: Dependencies()) +//} diff --git a/Session/Home/HomeScreenDataModel.swift b/Session/Home/HomeScreenDataModel.swift new file mode 100644 index 0000000000..959b58e4fc --- /dev/null +++ b/Session/Home/HomeScreenDataModel.swift @@ -0,0 +1,386 @@ +// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. + +import Foundation +import GRDB +import DifferenceKit +import SignalUtilitiesKit +import SessionMessagingKit +import SessionUtilitiesKit + +public class HomeScreenDataModel { + + public typealias SectionModel = ArraySection + + // MARK: - Section + + public enum Section: Differentiable { + case messageRequests + case threads + case loadMore + } + + // MARK: - Variables + + public static let pageSize: Int = (UIDevice.current.isIPad ? 20 : 15) + + public struct State: Equatable { + let showViewedSeedBanner: Bool + let hasHiddenMessageRequests: Bool + let unreadMessageRequestThreadCount: Int + let userProfile: Profile + } + + public let dependencies: Dependencies + + // MARK: - Initialization + + init(using dependencies: Dependencies) { + typealias InitialData = ( + showViewedSeedBanner: Bool, + hasHiddenMessageRequests: Bool, + profile: Profile + ) + + let initialData: InitialData? = Storage.shared.read { db -> InitialData in + ( + !db[.hasViewedSeed], + db[.hasHiddenMessageRequests], + Profile.fetchOrCreateCurrentUser(db) + ) + } + + self.dependencies = dependencies + self.state = State( + showViewedSeedBanner: (initialData?.showViewedSeedBanner ?? true), + hasHiddenMessageRequests: (initialData?.hasHiddenMessageRequests ?? false), + unreadMessageRequestThreadCount: 0, + userProfile: (initialData?.profile ?? Profile.fetchOrCreateCurrentUser()) + ) + self.pagedDataObserver = nil + + // Note: Since this references self we need to finish initializing before setting it, we + // also want to skip the initial query and trigger it async so that the push animation + // doesn't stutter (it should load basically immediately but without this there is a + // distinct stutter) + let userPublicKey: String = self.state.userProfile.id + let thread: TypedTableAlias = TypedTableAlias() + self.pagedDataObserver = PagedDatabaseObserver( + pagedTable: SessionThread.self, + pageSize: Self.pageSize, + idColumn: .id, + observedChanges: [ + PagedData.ObservedChanges( + table: SessionThread.self, + columns: [ + .id, + .shouldBeVisible, + .pinnedPriority, + .mutedUntilTimestamp, + .onlyNotifyForMentions, + .markedAsUnread + ] + ), + PagedData.ObservedChanges( + table: Interaction.self, + columns: [ + .body, + .wasRead + ], + joinToPagedType: { + let interaction: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(Interaction.self) ON \(interaction[.threadId]) = \(thread[.id])") + }() + ), + PagedData.ObservedChanges( + table: Contact.self, + columns: [.isBlocked], + joinToPagedType: { + let contact: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(Contact.self) ON \(contact[.id]) = \(thread[.id])") + }() + ), + PagedData.ObservedChanges( + table: Profile.self, + columns: [.name, .nickname, .profilePictureFileName], + joinToPagedType: { + let profile: TypedTableAlias = TypedTableAlias() + let groupMember: TypedTableAlias = TypedTableAlias() + let threadVariants: [SessionThread.Variant] = [.legacyGroup, .group] + let targetRole: GroupMember.Role = GroupMember.Role.standard + + return SQL(""" + JOIN \(Profile.self) ON ( + ( -- Contact profile change + \(profile[.id]) = \(thread[.id]) AND + \(SQL("\(thread[.variant]) = \(SessionThread.Variant.contact)")) + ) OR ( -- Closed group profile change + \(SQL("\(thread[.variant]) IN \(threadVariants)")) AND ( + profile.id = ( -- Front profile + SELECT MIN(\(groupMember[.profileId])) + FROM \(GroupMember.self) + JOIN \(Profile.self) ON \(profile[.id]) = \(groupMember[.profileId]) + WHERE ( + \(groupMember[.groupId]) = \(thread[.id]) AND + \(SQL("\(groupMember[.role]) = \(targetRole)")) AND + \(groupMember[.profileId]) != \(userPublicKey) + ) + ) OR + profile.id = ( -- Back profile + SELECT MAX(\(groupMember[.profileId])) + FROM \(GroupMember.self) + JOIN \(Profile.self) ON \(profile[.id]) = \(groupMember[.profileId]) + WHERE ( + \(groupMember[.groupId]) = \(thread[.id]) AND + \(SQL("\(groupMember[.role]) = \(targetRole)")) AND + \(groupMember[.profileId]) != \(userPublicKey) + ) + ) OR ( -- Fallback profile + profile.id = \(userPublicKey) AND + ( + SELECT COUNT(\(groupMember[.profileId])) + FROM \(GroupMember.self) + JOIN \(Profile.self) ON \(profile[.id]) = \(groupMember[.profileId]) + WHERE ( + \(groupMember[.groupId]) = \(thread[.id]) AND + \(SQL("\(groupMember[.role]) = \(targetRole)")) AND + \(groupMember[.profileId]) != \(userPublicKey) + ) + ) = 1 + ) + ) + ) + ) + """) + }() + ), + PagedData.ObservedChanges( + table: ClosedGroup.self, + columns: [.name], + joinToPagedType: { + let closedGroup: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(ClosedGroup.self) ON \(closedGroup[.threadId]) = \(thread[.id])") + }() + ), + PagedData.ObservedChanges( + table: OpenGroup.self, + columns: [.name, .imageData], + joinToPagedType: { + let openGroup: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(OpenGroup.self) ON \(openGroup[.threadId]) = \(thread[.id])") + }() + ), + PagedData.ObservedChanges( + table: RecipientState.self, + columns: [.state], + joinToPagedType: { + let interaction: TypedTableAlias = TypedTableAlias() + let recipientState: TypedTableAlias = TypedTableAlias() + + return """ + JOIN \(Interaction.self) ON \(interaction[.threadId]) = \(thread[.id]) + JOIN \(RecipientState.self) ON \(recipientState[.interactionId]) = \(interaction[.id]) + """ + }() + ), + PagedData.ObservedChanges( + table: ThreadTypingIndicator.self, + columns: [.threadId], + joinToPagedType: { + let typingIndicator: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(ThreadTypingIndicator.self) ON \(typingIndicator[.threadId]) = \(thread[.id])") + }() + ) + ], + /// **Note:** This `optimisedJoinSQL` value includes the required minimum joins needed for the query but differs + /// from the JOINs that are actually used for performance reasons as the basic logic can be simpler for where it's used + joinSQL: SessionThreadViewModel.optimisedJoinSQL, + filterSQL: SessionThreadViewModel.homeFilterSQL(userPublicKey: userPublicKey), + groupSQL: SessionThreadViewModel.groupSQL, + orderSQL: SessionThreadViewModel.homeOrderSQL, + dataQuery: SessionThreadViewModel.baseQuery( + userPublicKey: userPublicKey, + groupSQL: SessionThreadViewModel.groupSQL, + orderSQL: SessionThreadViewModel.homeOrderSQL + ), + onChangeUnsorted: { [weak self] updatedData, updatedPageInfo in + PagedData.processAndTriggerUpdates( + updatedData: self?.process(data: updatedData, for: updatedPageInfo), + currentDataRetriever: { self?.threadData }, + onDataChangeRetriever: { self?.onThreadChange }, + onUnobservedDataChange: { updatedData in + self?.unobservedThreadDataChanges = updatedData + } + ) + + self?.hasReceivedInitialThreadData = true + } + ) + + // Run the initial query on a background thread so we don't block the main thread + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + // The `.pageBefore` will query from a `0` offset loading the first page + self?.pagedDataObserver?.load(.pageBefore) + } + } + + // MARK: - State + + /// This value is the current state of the view + public private(set) var state: State + + /// This is all the data the screen needs to populate itself, please see the following link for tips to help optimise + /// performance https://github.com/groue/GRDB.swift#valueobservation-performance + /// + /// **Note:** This observation will be triggered twice immediately (and be de-duped by the `removeDuplicates`) + /// this is due to the behaviour of `ValueConcurrentObserver.asyncStartObservation` which triggers it's own + /// fetch (after the ones in `ValueConcurrentObserver.asyncStart`/`ValueConcurrentObserver.syncStart`) + /// just in case the database has changed between the two reads - unfortunately it doesn't look like there is a way to prevent this + public lazy var observableState = ValueObservation + .trackingConstantRegion { db -> State in try Self.retrieveState(db) } + .removeDuplicates() + .handleEvents(didFail: { SNLog("[HomeViewModel] Observation failed with error: \($0)") }) + + private static func retrieveState(_ db: Database) throws -> State { + let hasViewedSeed: Bool = db[.hasViewedSeed] + let hasHiddenMessageRequests: Bool = db[.hasHiddenMessageRequests] + let userProfile: Profile = Profile.fetchOrCreateCurrentUser(db) + let unreadMessageRequestThreadCount: Int = try SessionThread + .unreadMessageRequestsCountQuery(userPublicKey: userProfile.id) + .fetchOne(db) + .defaulting(to: 0) + + return State( + showViewedSeedBanner: !hasViewedSeed, + hasHiddenMessageRequests: hasHiddenMessageRequests, + unreadMessageRequestThreadCount: unreadMessageRequestThreadCount, + userProfile: userProfile + ) + } + + public func updateState(_ updatedState: State) { + let oldState: State = self.state + self.state = updatedState + + // If the messageRequest content changed then we need to re-process the thread data (assuming + // we've received the initial thread data) + guard + self.hasReceivedInitialThreadData, + ( + oldState.hasHiddenMessageRequests != updatedState.hasHiddenMessageRequests || + oldState.unreadMessageRequestThreadCount != updatedState.unreadMessageRequestThreadCount + ), + let currentPageInfo: PagedData.PageInfo = self.pagedDataObserver?.pageInfo.wrappedValue + else { return } + + /// **MUST** have the same logic as in the 'PagedDataObserver.onChangeUnsorted' above + let currentData: [SectionModel] = (self.unobservedThreadDataChanges ?? self.threadData) + let updatedThreadData: [SectionModel] = self.process( + data: (currentData.first(where: { $0.model == .threads })?.elements ?? []), + for: currentPageInfo + ) + + PagedData.processAndTriggerUpdates( + updatedData: updatedThreadData, + currentDataRetriever: { [weak self] in (self?.unobservedThreadDataChanges ?? self?.threadData) }, + onDataChangeRetriever: { [weak self] in self?.onThreadChange }, + onUnobservedDataChange: { [weak self] updatedData in + self?.unobservedThreadDataChanges = updatedData + } + ) + } + + // MARK: - Thread Data + + private var hasReceivedInitialThreadData: Bool = false + public private(set) var unobservedThreadDataChanges: [SectionModel]? + public private(set) var threadData: [SectionModel] = [] + public private(set) var pagedDataObserver: PagedDatabaseObserver? + + public var onThreadChange: (([SectionModel], StagedChangeset<[SectionModel]>) -> ())? { + didSet { + guard onThreadChange != nil else { return } + + // When starting to observe interaction changes we want to trigger a UI update just in case the + // data was changed while we weren't observing + if let changes: [SectionModel] = self.unobservedThreadDataChanges { + PagedData.processAndTriggerUpdates( + updatedData: changes, + currentDataRetriever: { [weak self] in self?.threadData }, + onDataChangeRetriever: { [weak self] in self?.onThreadChange }, + onUnobservedDataChange: { [weak self] updatedData in + self?.unobservedThreadDataChanges = updatedData + } + ) + self.unobservedThreadDataChanges = nil + } + } + } + + private func process(data: [SessionThreadViewModel], for pageInfo: PagedData.PageInfo) -> [SectionModel] { + let finalUnreadMessageRequestCount: Int = (self.state.hasHiddenMessageRequests ? + 0 : + self.state.unreadMessageRequestThreadCount + ) + let groupedOldData: [String: [SessionThreadViewModel]] = (self.threadData + .first(where: { $0.model == .threads })? + .elements) + .defaulting(to: []) + .grouped(by: \.threadId) + + return [ + // If there are no unread message requests then hide the message request banner + (finalUnreadMessageRequestCount == 0 ? + [] : + [SectionModel( + section: .messageRequests, + elements: [ + SessionThreadViewModel( + threadId: SessionThreadViewModel.messageRequestsSectionId, + unreadCount: UInt(finalUnreadMessageRequestCount) + ) + ] + )] + ), + [ + SectionModel( + section: .threads, + elements: data + .filter { threadViewModel in + threadViewModel.id != SessionThreadViewModel.invalidId && + threadViewModel.id != SessionThreadViewModel.messageRequestsSectionId + } + .sorted { lhs, rhs -> Bool in + guard lhs.threadPinnedPriority == rhs.threadPinnedPriority else { + return lhs.threadPinnedPriority > rhs.threadPinnedPriority + } + + return lhs.lastInteractionDate > rhs.lastInteractionDate + } + .map { viewModel -> SessionThreadViewModel in + viewModel.populatingCurrentUserBlindedKeys( + currentUserBlinded15PublicKeyForThisThread: groupedOldData[viewModel.threadId]? + .first? + .currentUserBlinded15PublicKey, + currentUserBlinded25PublicKeyForThisThread: groupedOldData[viewModel.threadId]? + .first? + .currentUserBlinded25PublicKey + ) + } + ) + ], + (!data.isEmpty && (pageInfo.pageOffset + pageInfo.currentCount) < pageInfo.totalCount ? + [SectionModel(section: .loadMore)] : + [] + ) + ].flatMap { $0 } + } + + public func updateThreadData(_ updatedData: [SectionModel]) { + self.threadData = updatedData + } +} diff --git a/Session/Home/HomeScreenViewModel.swift b/Session/Home/HomeScreenViewModel.swift new file mode 100644 index 0000000000..4f8242408b --- /dev/null +++ b/Session/Home/HomeScreenViewModel.swift @@ -0,0 +1,109 @@ +// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. + +import Foundation +import GRDB +import DifferenceKit +import SignalUtilitiesKit +import SessionMessagingKit +import SessionUtilitiesKit + +public class HomeScreenViewModel: ObservableObject { + + @Published var state: HomeScreenDataModel.State + @Published var threadData: [HomeScreenDataModel.SectionModel] = [] + + public var dataModel: HomeScreenDataModel + + private var dataChangeObservable: DatabaseCancellable? { + didSet { oldValue?.cancel() } // Cancel the old observable if there was one + } + private var hasLoadedInitialStateData: Bool = false + private var hasLoadedInitialThreadData: Bool = false + private var isLoadingMore: Bool = false + private var isAutoLoadingNextPage: Bool = false + + init(using dependencies: Dependencies, onReceivedInitialChange: (() -> ())? = nil) { + self.dataModel = HomeScreenDataModel(using: dependencies) + self.state = self.dataModel.state + self.startObservingChanges(onReceivedInitialChange: onReceivedInitialChange) + } + + // MARK: - Updating + + public func startObservingChanges(didReturnFromBackground: Bool = false, onReceivedInitialChange: (() -> ())? = nil) { + guard dataChangeObservable == nil else { return } + + var runAndClearInitialChangeCallback: (() -> ())? = nil + + runAndClearInitialChangeCallback = { [weak self] in + guard self?.hasLoadedInitialStateData == true && self?.hasLoadedInitialThreadData == true else { return } + + onReceivedInitialChange?() + runAndClearInitialChangeCallback = nil + } + + dataChangeObservable = Storage.shared.start( + dataModel.observableState, + onError: { _ in }, + onChange: { [weak self] state in + // The default scheduler emits changes on the main thread + self?.state = state + runAndClearInitialChangeCallback?() + } + ) + + self.dataModel.onThreadChange = { [weak self] updatedThreadData, changeset in + self?.threadData = updatedThreadData + runAndClearInitialChangeCallback?() + } + + // Note: When returning from the background we could have received notifications but the + // PagedDatabaseObserver won't have them so we need to force a re-fetch of the current + // data to ensure everything is up to date + if didReturnFromBackground { + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + self?.dataModel.pagedDataObserver?.reload() + } + } + } + + public func stopObservingChanges() { + // Stop observing database changes + self.dataChangeObservable = nil + self.dataModel.onThreadChange = nil + } + +// private func autoLoadNextPageIfNeeded() { +// guard +// self.hasLoadedInitialThreadData && +// !self.isAutoLoadingNextPage && +// !self.isLoadingMore +// else { return } +// +// self.isAutoLoadingNextPage = true +// +// DispatchQueue.main.asyncAfter(deadline: .now() + PagedData.autoLoadNextPageDelay) { [weak self] in +// self?.isAutoLoadingNextPage = false +// +// // Note: We sort the headers as we want to prioritise loading newer pages over older ones +// let sections: [(HomeViewModel.Section, CGRect)] = (self?.dataModel.threadData +// .enumerated() +// .map { index, section in (section.model, (self?.tableView.rectForHeader(inSection: index) ?? .zero)) }) +// .defaulting(to: []) +// let shouldLoadMore: Bool = sections +// .contains { section, headerRect in +// section == .loadMore && +// headerRect != .zero && +// (self?.tableView.bounds.contains(headerRect) == true) +// } +// +// guard shouldLoadMore else { return } +// +// self?.isLoadingMore = true +// +// DispatchQueue.global(qos: .userInitiated).async { [weak self] in +// self?.viewModel.pagedDataObserver?.load(.pageAfter) +// } +// } +// } +} diff --git a/Session/Home/HomeViewModelRequest.swift b/Session/Home/HomeViewModelRequest.swift deleted file mode 100644 index 13d0d4428c..0000000000 --- a/Session/Home/HomeViewModelRequest.swift +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. - -import Combine -import GRDB - diff --git a/Session/Meta/AppDelegate.swift b/Session/Meta/AppDelegate.swift index 7f1a0839fd..c3db96d007 100644 --- a/Session/Meta/AppDelegate.swift +++ b/Session/Meta/AppDelegate.swift @@ -667,18 +667,26 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD case .completed: DispatchQueue.main.async { [dependencies] in - let viewController: HomeVC = HomeVC(using: dependencies) +// let viewController: HomeVC = HomeVC(using: dependencies) +// +// /// We want to start observing the changes for the 'HomeVC' and want to wait until we actually get data back before we +// /// continue as we don't want to show a blank home screen +// DispatchQueue.global(qos: .userInitiated).async { +// viewController.startObservingChanges() { +// populateHomeScreenTimer.invalidate() +// +// DispatchQueue.main.async { +// rootViewControllerSetupComplete(viewController) +// } +// } +// } - /// We want to start observing the changes for the 'HomeVC' and want to wait until we actually get data back before we - /// continue as we don't want to show a blank home screen - DispatchQueue.global(qos: .userInitiated).async { - viewController.startObservingChanges() { - populateHomeScreenTimer.invalidate() - - DispatchQueue.main.async { - rootViewControllerSetupComplete(viewController) - } - } + let viewController = SessionHostingViewController(rootView: HomeScreen(using: dependencies)) + + populateHomeScreenTimer.invalidate() + + DispatchQueue.main.async { + rootViewControllerSetupComplete(viewController) } } } From 2f4c4a07d14559e648bb7d79b9b66b7cb4aa7fc9 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Tue, 15 Oct 2024 13:52:26 +1100 Subject: [PATCH 13/16] WIP: refactor viewModel and dataModel --- Session.xcodeproj/project.pbxproj | 20 +- Session/Home/ConversationList.swift | 417 ---------------- .../Home/HomeScreen+ConversationList.swift | 411 ++++++++++++++++ Session/Home/HomeScreen.swift | 445 +++++++++--------- Session/Home/HomeScreenDataModel.swift | 4 +- Session/Home/HomeScreenViewModel.swift | 11 +- 6 files changed, 648 insertions(+), 660 deletions(-) delete mode 100644 Session/Home/ConversationList.swift create mode 100644 Session/Home/HomeScreen+ConversationList.swift diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index 4843deafe8..01d6da670b 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -196,7 +196,7 @@ 94E12DBC2C24063A00D28EE0 /* SessionButton_SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */; }; 94E5EDA52C8ECBFC0084ED63 /* HomeScreenDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E5EDA42C8ECBFC0084ED63 /* HomeScreenDataModel.swift */; }; 94E5EDA72C8ECC150084ED63 /* HomeScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E5EDA62C8ECC150084ED63 /* HomeScreenViewModel.swift */; }; - 94E89A9B2C2A997B00FB18E1 /* ConversationList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */; }; + 94E89A9B2C2A997B00FB18E1 /* HomeScreen+ConversationList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E89A9A2C2A997B00FB18E1 /* HomeScreen+ConversationList.swift */; }; 94E9BC0D2C7BFBDA006984EA /* Localization+Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E9BC0C2C7BFBDA006984EA /* Localization+Style.swift */; }; A11CD70D17FA230600A2D1B1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */; }; A163E8AB16F3F6AA0094D68B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A163E8AA16F3F6A90094D68B /* Security.framework */; }; @@ -1396,7 +1396,7 @@ 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionButton_SwiftUI.swift; sourceTree = ""; }; 94E5EDA42C8ECBFC0084ED63 /* HomeScreenDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenDataModel.swift; sourceTree = ""; }; 94E5EDA62C8ECC150084ED63 /* HomeScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenViewModel.swift; sourceTree = ""; }; - 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ConversationList.swift; path = Session/Home/ConversationList.swift; sourceTree = SOURCE_ROOT; }; + 94E89A9A2C2A997B00FB18E1 /* HomeScreen+ConversationList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "HomeScreen+ConversationList.swift"; path = "Session/Home/HomeScreen+ConversationList.swift"; sourceTree = SOURCE_ROOT; }; 94E9BC0C2C7BFBDA006984EA /* Localization+Style.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Localization+Style.swift"; sourceTree = ""; }; A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; A163E8AA16F3F6A90094D68B /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; @@ -3091,7 +3091,7 @@ FDCDB8DF2811007F00352A0C /* HomeViewModel.swift */, B8BB82A4238F627000BA5194 /* HomeVC.swift */, 941BE62E2C1BF887005A880A /* HomeScreen.swift */, - 94E89A9A2C2A997B00FB18E1 /* ConversationList.swift */, + 94E89A9A2C2A997B00FB18E1 /* HomeScreen+ConversationList.swift */, 94E5EDA42C8ECBFC0084ED63 /* HomeScreenDataModel.swift */, 94E5EDA62C8ECC150084ED63 /* HomeScreenViewModel.swift */, ); @@ -5279,7 +5279,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - FD0B1FA92CA3805C00F60F46 /* Ensure InfoPlist.xcstrings updated */ = { + 9471CAA62CACFB0600090FB7 /* Generate Licenses Plist */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; @@ -5289,17 +5289,17 @@ ); inputPaths = ( ); - name = "Ensure InfoPlist.xcstrings updated"; + name = "Generate Licenses Plist"; outputFileListPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Scripts/LintLocalizableStrings.swift\" update\n"; + shellScript = "\"${SRCROOT}/Scripts/GenerateLicenses.swift\"\n"; showEnvVarsInLog = 0; }; - 9471CAA62CACFB0600090FB7 /* Generate Licenses Plist */ = { + FD0B1FA92CA3805C00F60F46 /* Ensure InfoPlist.xcstrings updated */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; @@ -5309,14 +5309,14 @@ ); inputPaths = ( ); - name = "Generate Licenses Plist"; + name = "Ensure InfoPlist.xcstrings updated"; outputFileListPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Scripts/GenerateLicenses.swift\"\n"; + shellScript = "\"${SRCROOT}/Scripts/LintLocalizableStrings.swift\" update\n"; showEnvVarsInLog = 0; }; FD5E93D32C12D3990038C25A /* Add App Group To Build Info Plist */ = { @@ -6294,7 +6294,7 @@ FDEF57212C3CF03A00131302 /* WebRTCSession.swift in Sources */, 7B9F71D32852EEE2006DFE7B /* Emoji.swift in Sources */, FDC498BB2AC1606C00EDD897 /* AppNotificationUserInfoKey.swift in Sources */, - 94E89A9B2C2A997B00FB18E1 /* ConversationList.swift in Sources */, + 94E89A9B2C2A997B00FB18E1 /* HomeScreen+ConversationList.swift in Sources */, C328250F25CA06020062D0A7 /* VoiceMessageView.swift in Sources */, 3488F9362191CC4000E524CC /* MediaView.swift in Sources */, B8569AC325CB5D2900DBA3DB /* ConversationVC+Interaction.swift in Sources */, diff --git a/Session/Home/ConversationList.swift b/Session/Home/ConversationList.swift deleted file mode 100644 index eaed97a920..0000000000 --- a/Session/Home/ConversationList.swift +++ /dev/null @@ -1,417 +0,0 @@ -// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. - -import SwiftUI -import GRDB -import DifferenceKit -import SessionUIKit -import SessionMessagingKit -import SessionUtilitiesKit -import SignalUtilitiesKit - -struct ConversationList: View { - @Binding private var threadData: [HomeScreenDataModel.SectionModel] - - public static let mutePrefix: String = "\u{e067} " // stringlint:disable - public static let unreadCountViewSize: CGFloat = 20 - public static let statusIndicatorSize: CGFloat = 14 - - public init(threadData: Binding<[HomeScreenDataModel.SectionModel]>) { - self._threadData = threadData - } - - var body: some View { - List { - ForEach(self.threadData) { sectionModel in - switch sectionModel.model { - case .messageRequests: - Section { - ForEach(sectionModel.elements) { threadViewModel in - MessageRequestItemRow(threadViewModel: threadViewModel) - .listRowSeparator(.hidden) - .swipeActions(edge: .trailing) { - Button { - - } label: { - VStack { - Image(systemName: "eye.slash") - .foregroundColor(themeColor: .white) - - Text("noteToSelfHide".localized()) - .foregroundColor(themeColor: .white) - } - .backgroundColor(themeColor: .danger) - } - } - } - } - case .threads: - Section { - ForEach(sectionModel.elements) { threadViewModel in - ConversationItemRow(threadViewModel: threadViewModel) - .listRowSeparator(.hidden) - .swipeActions(edge: .leading) { - Button { - - } label: { - - } - } - } - } - default: preconditionFailure("Other sections should have no content") - } - } - } - .transparentListBackground() - } -} - -// MARK: MessageRequestItemRow - -struct MessageRequestItemRow: View { - - private var threadViewModel: SessionThreadViewModel - - init(threadViewModel: SessionThreadViewModel) { - self.threadViewModel = threadViewModel - } - - var body: some View { - HStack( - alignment: .center, - content: { - Image("icon_msg_req") - .renderingMode(.template) - .resizable() - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Circle() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame( - width: ProfilePictureView.Size.list.viewSize, - height: ProfilePictureView.Size.list.viewSize - ) - ) - - Text("sessionMessageRequests".localized()) - .bold() - .font(.system(size: Values.mediumFontSize)) - .foregroundColor(themeColor: .textPrimary) - .padding(.leading, Values.mediumSpacing) - .padding(.trailing, Values.verySmallSpacing) - - Text("\(threadViewModel.threadUnreadCount ?? 0)") - .bold() - .font(.system(size: Values.veryLargeFontSize)) - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Circle() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) - ) - } - ) - .backgroundColor(themeColor: .conversationButton_unreadBackground) - .frame( - width: .infinity, - height: 68 - ) - } -} - -// MARK: ConversationItemRow info - -struct Info { - let displayName: String - let unreadCount: UInt - let threadIsUnread: Bool - let themeBackgroundColor: ThemeValue - let isBlocked: Bool - let isPinned: Bool - let shouldShowUnreadCount: Bool - let unreadCountString: String - let unreadCountFontSize: CGFloat - let shouldShowUnreadIcon: Bool - let shouldShowMentionIcon: Bool - let timeString: String - let shouldShowTypingIndicator: Bool - let snippet: NSAttributedString - - init(threadViewModel: SessionThreadViewModel) { - self.displayName = threadViewModel.displayName - self.unreadCount = (threadViewModel.threadUnreadCount ?? 0) - self.threadIsUnread = ( - self.unreadCount > 0 || - threadViewModel.threadWasMarkedUnread == true - ) - self.themeBackgroundColor = (self.threadIsUnread ? - .conversationButton_unreadBackground : - .conversationButton_background - ) - self.isBlocked = (threadViewModel.threadIsBlocked == true) - self.isPinned = threadViewModel.threadPinnedPriority > 0 - self.shouldShowUnreadCount = (threadIsUnread && unreadCount > 0) - self.unreadCountString = (unreadCount < 10000 ? "\(unreadCount)" : "9999+") // stringlint:disable - self.unreadCountFontSize = (unreadCount < 10000 ? Values.verySmallFontSize : 8) - self.shouldShowUnreadIcon = (threadIsUnread && !self.shouldShowUnreadCount) - self.shouldShowMentionIcon = ( - (threadViewModel.threadUnreadMentionCount ?? 0) > 0 && - threadViewModel.threadVariant != .contact - ) - self.timeString = threadViewModel.lastInteractionDate.formattedForDisplay - self.shouldShowTypingIndicator = (threadViewModel.threadContactIsTyping == true) - self.snippet = Self.getSnippet(threadViewModel: threadViewModel) - } - - private static func getSnippet(threadViewModel: SessionThreadViewModel) -> NSMutableAttributedString { - // If we don't have an interaction then do nothing - guard threadViewModel.interactionId != nil else { return NSMutableAttributedString() } - - var maybeTextColor: UIColor? { - switch threadViewModel.interactionVariant { - case .infoClosedGroupCurrentUserErrorLeaving: - return ThemeManager.currentTheme.color(for: .danger) - case .infoClosedGroupCurrentUserLeaving: - return ThemeManager.currentTheme.color(for: .textSecondary) - default: - return ThemeManager.currentTheme.color(for: .textPrimary) - } - } - - guard let textColor = maybeTextColor else { return NSMutableAttributedString() } - - let result = NSMutableAttributedString() - - if Date().timeIntervalSince1970 < (threadViewModel.threadMutedUntilTimestamp ?? 0) { - result.append(NSAttributedString( - string: FullConversationCell.mutePrefix, - attributes: [ - .font: UIFont(name: "ElegantIcons", size: 10) as Any, - .foregroundColor: textColor - ] - )) - } - else if threadViewModel.threadOnlyNotifyForMentions == true { - let imageAttachment = NSTextAttachment() - imageAttachment.image = UIImage(named: "NotifyMentions.png")?.withTint(textColor) - imageAttachment.bounds = CGRect(x: 0, y: -2, width: Values.smallFontSize, height: Values.smallFontSize) - - let imageString = NSAttributedString(attachment: imageAttachment) - result.append(imageString) - result.append(NSAttributedString( - string: " ", - attributes: [ - .font: UIFont(name: "ElegantIcons", size: 10) as Any, - .foregroundColor: textColor - ] - )) - } - - if - (threadViewModel.threadVariant == .legacyGroup || threadViewModel.threadVariant == .group || threadViewModel.threadVariant == .community) && - (threadViewModel.interactionVariant?.isGroupControlMessage == false) - { - let authorName: String = threadViewModel.authorName(for: threadViewModel.threadVariant) - - result.append(NSAttributedString( - string: "\(authorName): ", // stringlint:disable - attributes: [ .foregroundColor: textColor ] - )) - } - - let previewText: String = { - if threadViewModel.interactionVariant == .infoClosedGroupCurrentUserErrorLeaving { - return "groupLeaveErrorFailed" - .put(key: "group_name", value: threadViewModel.displayName) - .localized() - } - return Interaction.previewText( - variant: (threadViewModel.interactionVariant ?? .standardIncoming), - body: threadViewModel.interactionBody, - threadContactDisplayName: threadViewModel.threadContactName(), - authorDisplayName: threadViewModel.authorName(for: threadViewModel.threadVariant), - attachmentDescriptionInfo: threadViewModel.interactionAttachmentDescriptionInfo, - attachmentCount: threadViewModel.interactionAttachmentCount, - isOpenGroupInvitation: (threadViewModel.interactionIsOpenGroupInvitation == true) - ) - }() - - result.append(NSAttributedString( - string: MentionUtilities.highlightMentionsNoAttributes( - in: previewText, - threadVariant: threadViewModel.threadVariant, - currentUserPublicKey: threadViewModel.currentUserPublicKey, - currentUserBlinded15PublicKey: threadViewModel.currentUserBlinded15PublicKey, - currentUserBlinded25PublicKey: threadViewModel.currentUserBlinded25PublicKey - ), - attributes: [ .foregroundColor: textColor ] - )) - - return result - } -} - -// MARK: ConversationItemRow - -struct ConversationItemRow: View { - - private var threadViewModel: SessionThreadViewModel - private var info: Info - - init(threadViewModel: SessionThreadViewModel) { - self.threadViewModel = threadViewModel - self.info = Info(threadViewModel: threadViewModel) - } - - var body: some View { - HStack( - alignment: .center, - content: { - if info.isBlocked { - Rectangle() - .fill(themeColor: .danger) - .frame( - width: Values.accentLineThickness, - height: .infinity - ) - } else if info.unreadCount > 0 { - Rectangle() - .fill(themeColor: .conversationButton_unreadStripBackground) - .frame( - width: Values.accentLineThickness, - height: .infinity - ) - } - - ProfilePictureSwiftUI( - size: .list, - publicKey: threadViewModel.threadId, - threadVariant: threadViewModel.threadVariant, - customImageData: threadViewModel.openGroupProfilePictureData, - profile: threadViewModel.profile, - additionalProfile: threadViewModel.additionalProfile - ) - - VStack( - alignment: .leading, - spacing: Values.verySmallSpacing, - content: { - HStack( - spacing: Values.verySmallSpacing, - content: { - // Display name - Text(info.displayName) - .bold() - .font(.system(size: Values.mediumFontSize)) - .foregroundColor(themeColor: .textPrimary) - - if info.isPinned { - Image("Pin") - .resizable() - .renderingMode(.template) - .foregroundColor(themeColor: .textSecondary) - .scaledToFit() - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) - } - - // Unread count - if info.shouldShowUnreadCount { - Text(info.unreadCountString) - .bold() - .font(.system(size: info.unreadCountFontSize)) - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Capsule() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame(minWidth: ConversationList.unreadCountViewSize) - .frame(height: ConversationList.unreadCountViewSize) - ) - } - - // Unread icon - if info.shouldShowUnreadIcon { - ZStack( - alignment: .topTrailing, - content: { - Image(systemName: "envelope") - .font(.system(size: Values.verySmallFontSize)) - .foregroundColor(themeColor: .textPrimary) - .padding(.top, 2) - - Circle() - .fill(themeColor: .conversationButton_unreadBackground) - .frame( - width: 6, - height: 6 - ) - .padding(.top, 1) - .padding(.trailing, 1) - } - ) - } - - // Mention icon - if info.shouldShowMentionIcon { - Text("@") // stringlint:disable - .bold() - .font(.system(size: Values.verySmallFontSize)) - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Circle() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) - ) - } - - Spacer() - - // Interaction time - Text(info.timeString) - .font(.system(size: Values.smallFontSize)) - .foregroundColor(themeColor: .textSecondary) - .opacity(Values.lowOpacity) - } - ) - - HStack( - spacing: Values.verySmallSpacing, - content: { - if info.shouldShowTypingIndicator { - - } else { - AttributedText(info.snippet) - } - - Spacer() - - - } - ) - } - ) - } - ) - .backgroundColor(themeColor: info.themeBackgroundColor) - .frame( - width: .infinity, - height: 68 - ) - } -} - -//struct ConversationList_Previews: PreviewProvider { -// @State static var viewModel: HomeViewModel = HomeViewModel(using: Dependencies()) -// -// static var previews: some View { -// ConversationList(viewModel: $viewModel) -// } -//} diff --git a/Session/Home/HomeScreen+ConversationList.swift b/Session/Home/HomeScreen+ConversationList.swift new file mode 100644 index 0000000000..162b11abae --- /dev/null +++ b/Session/Home/HomeScreen+ConversationList.swift @@ -0,0 +1,411 @@ +// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. + +import SwiftUI +import GRDB +import DifferenceKit +import SessionUIKit +import SessionMessagingKit +import SessionUtilitiesKit +import SignalUtilitiesKit + +extension HomeScreen { + struct ConversationList: View { + @Binding private var threadData: [HomeScreenDataModel.SectionModel] + + public static let mutePrefix: String = "\u{e067} " // stringlint:disable + public static let unreadCountViewSize: CGFloat = 20 + public static let statusIndicatorSize: CGFloat = 14 + + public init(threadData: Binding<[HomeScreenDataModel.SectionModel]>) { + self._threadData = threadData + } + + var body: some View { + List { + ForEach(self.threadData) { sectionModel in + switch sectionModel.model { + case .messageRequests: + Section { + ForEach(sectionModel.elements) { threadViewModel in + MessageRequestItemRow(threadViewModel: threadViewModel) + .listRowSeparator(.hidden) + .swipeActions(edge: .trailing) { + Button { + + } label: { + VStack { + Image(systemName: "eye.slash") + .foregroundColor(themeColor: .white) + + Text("noteToSelfHide".localized()) + .foregroundColor(themeColor: .white) + } + .backgroundColor(themeColor: .danger) + } + } + } + } + case .threads: + Section { + ForEach(sectionModel.elements) { threadViewModel in + ConversationItemRow(threadViewModel: threadViewModel) + .listRowSeparator(.hidden) + .swipeActions(edge: .leading) { + Button { + + } label: { + + } + } + } + } + default: preconditionFailure("Other sections should have no content") + } + } + } + .transparentListBackground() + } + } + + // MARK: MessageRequestItemRow + + struct MessageRequestItemRow: View { + + private var threadViewModel: SessionThreadViewModel + + init(threadViewModel: SessionThreadViewModel) { + self.threadViewModel = threadViewModel + } + + var body: some View { + HStack( + alignment: .center, + content: { + Image("icon_msg_req") + .renderingMode(.template) + .resizable() + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ProfilePictureView.Size.list.viewSize, + height: ProfilePictureView.Size.list.viewSize + ) + ) + + Text("sessionMessageRequests".localized()) + .bold() + .font(.system(size: Values.mediumFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.leading, Values.mediumSpacing) + .padding(.trailing, Values.verySmallSpacing) + + Text("\(threadViewModel.threadUnreadCount ?? 0)") + .bold() + .font(.system(size: Values.veryLargeFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + ) + } + ) + .backgroundColor(themeColor: .conversationButton_unreadBackground) + .frame( + width: .infinity, + height: 68 + ) + } + } + + // MARK: ConversationItemRow info + + struct Info { + let displayName: String + let unreadCount: UInt + let threadIsUnread: Bool + let themeBackgroundColor: ThemeValue + let isBlocked: Bool + let isPinned: Bool + let shouldShowUnreadCount: Bool + let unreadCountString: String + let unreadCountFontSize: CGFloat + let shouldShowUnreadIcon: Bool + let shouldShowMentionIcon: Bool + let timeString: String + let shouldShowTypingIndicator: Bool + let snippet: NSAttributedString + + init(threadViewModel: SessionThreadViewModel) { + self.displayName = threadViewModel.displayName + self.unreadCount = (threadViewModel.threadUnreadCount ?? 0) + self.threadIsUnread = ( + self.unreadCount > 0 || + threadViewModel.threadWasMarkedUnread == true + ) + self.themeBackgroundColor = (self.threadIsUnread ? + .conversationButton_unreadBackground : + .conversationButton_background + ) + self.isBlocked = (threadViewModel.threadIsBlocked == true) + self.isPinned = threadViewModel.threadPinnedPriority > 0 + self.shouldShowUnreadCount = (threadIsUnread && unreadCount > 0) + self.unreadCountString = (unreadCount < 10000 ? "\(unreadCount)" : "9999+") // stringlint:disable + self.unreadCountFontSize = (unreadCount < 10000 ? Values.verySmallFontSize : 8) + self.shouldShowUnreadIcon = (threadIsUnread && !self.shouldShowUnreadCount) + self.shouldShowMentionIcon = ( + (threadViewModel.threadUnreadMentionCount ?? 0) > 0 && + threadViewModel.threadVariant != .contact + ) + self.timeString = threadViewModel.lastInteractionDate.formattedForDisplay + self.shouldShowTypingIndicator = (threadViewModel.threadContactIsTyping == true) + self.snippet = Self.getSnippet(threadViewModel: threadViewModel) + } + + private static func getSnippet(threadViewModel: SessionThreadViewModel) -> NSMutableAttributedString { + // If we don't have an interaction then do nothing + guard threadViewModel.interactionId != nil else { return NSMutableAttributedString() } + + var maybeTextColor: UIColor? { + switch threadViewModel.interactionVariant { + case .infoClosedGroupCurrentUserErrorLeaving: + return ThemeManager.currentTheme.color(for: .danger) + case .infoClosedGroupCurrentUserLeaving: + return ThemeManager.currentTheme.color(for: .textSecondary) + default: + return ThemeManager.currentTheme.color(for: .textPrimary) + } + } + + guard let textColor = maybeTextColor else { return NSMutableAttributedString() } + + let result = NSMutableAttributedString() + + if Date().timeIntervalSince1970 < (threadViewModel.threadMutedUntilTimestamp ?? 0) { + result.append(NSAttributedString( + string: FullConversationCell.mutePrefix, + attributes: [ + .font: UIFont(name: "ElegantIcons", size: 10) as Any, + .foregroundColor: textColor + ] + )) + } + else if threadViewModel.threadOnlyNotifyForMentions == true { + let imageAttachment = NSTextAttachment() + imageAttachment.image = UIImage(named: "NotifyMentions.png")?.withTint(textColor) + imageAttachment.bounds = CGRect(x: 0, y: -2, width: Values.smallFontSize, height: Values.smallFontSize) + + let imageString = NSAttributedString(attachment: imageAttachment) + result.append(imageString) + result.append(NSAttributedString( + string: " ", + attributes: [ + .font: UIFont(name: "ElegantIcons", size: 10) as Any, + .foregroundColor: textColor + ] + )) + } + + if + (threadViewModel.threadVariant == .legacyGroup || threadViewModel.threadVariant == .group || threadViewModel.threadVariant == .community) && + (threadViewModel.interactionVariant?.isGroupControlMessage == false) + { + let authorName: String = threadViewModel.authorName(for: threadViewModel.threadVariant) + + result.append(NSAttributedString( + string: "\(authorName): ", // stringlint:disable + attributes: [ .foregroundColor: textColor ] + )) + } + + let previewText: String = { + if threadViewModel.interactionVariant == .infoClosedGroupCurrentUserErrorLeaving { + return "groupLeaveErrorFailed" + .put(key: "group_name", value: threadViewModel.displayName) + .localized() + } + return Interaction.previewText( + variant: (threadViewModel.interactionVariant ?? .standardIncoming), + body: threadViewModel.interactionBody, + threadContactDisplayName: threadViewModel.threadContactName(), + authorDisplayName: threadViewModel.authorName(for: threadViewModel.threadVariant), + attachmentDescriptionInfo: threadViewModel.interactionAttachmentDescriptionInfo, + attachmentCount: threadViewModel.interactionAttachmentCount, + isOpenGroupInvitation: (threadViewModel.interactionIsOpenGroupInvitation == true) + ) + }() + + result.append(NSAttributedString( + string: MentionUtilities.highlightMentionsNoAttributes( + in: previewText, + threadVariant: threadViewModel.threadVariant, + currentUserPublicKey: threadViewModel.currentUserPublicKey, + currentUserBlinded15PublicKey: threadViewModel.currentUserBlinded15PublicKey, + currentUserBlinded25PublicKey: threadViewModel.currentUserBlinded25PublicKey + ), + attributes: [ .foregroundColor: textColor ] + )) + + return result + } + } + + // MARK: ConversationItemRow + + struct ConversationItemRow: View { + + private var threadViewModel: SessionThreadViewModel + private var info: Info + + init(threadViewModel: SessionThreadViewModel) { + self.threadViewModel = threadViewModel + self.info = Info(threadViewModel: threadViewModel) + } + + var body: some View { + HStack( + alignment: .center, + content: { + if info.isBlocked { + Rectangle() + .fill(themeColor: .danger) + .frame( + width: Values.accentLineThickness, + height: .infinity + ) + } else if info.unreadCount > 0 { + Rectangle() + .fill(themeColor: .conversationButton_unreadStripBackground) + .frame( + width: Values.accentLineThickness, + height: .infinity + ) + } + + ProfilePictureSwiftUI( + size: .list, + publicKey: threadViewModel.threadId, + threadVariant: threadViewModel.threadVariant, + customImageData: threadViewModel.openGroupProfilePictureData, + profile: threadViewModel.profile, + additionalProfile: threadViewModel.additionalProfile + ) + + VStack( + alignment: .leading, + spacing: Values.verySmallSpacing, + content: { + HStack( + spacing: Values.verySmallSpacing, + content: { + // Display name + Text(info.displayName) + .bold() + .font(.system(size: Values.mediumFontSize)) + .foregroundColor(themeColor: .textPrimary) + + if info.isPinned { + Image("Pin") + .resizable() + .renderingMode(.template) + .foregroundColor(themeColor: .textSecondary) + .scaledToFit() + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + } + + // Unread count + if info.shouldShowUnreadCount { + Text(info.unreadCountString) + .bold() + .font(.system(size: info.unreadCountFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Capsule() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame(minWidth: ConversationList.unreadCountViewSize) + .frame(height: ConversationList.unreadCountViewSize) + ) + } + + // Unread icon + if info.shouldShowUnreadIcon { + ZStack( + alignment: .topTrailing, + content: { + Image(systemName: "envelope") + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.top, 2) + + Circle() + .fill(themeColor: .conversationButton_unreadBackground) + .frame( + width: 6, + height: 6 + ) + .padding(.top, 1) + .padding(.trailing, 1) + } + ) + } + + // Mention icon + if info.shouldShowMentionIcon { + Text("@") // stringlint:disable + .bold() + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + ) + } + + Spacer() + + // Interaction time + Text(info.timeString) + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .textSecondary) + .opacity(Values.lowOpacity) + } + ) + + HStack( + spacing: Values.verySmallSpacing, + content: { + if info.shouldShowTypingIndicator { + + } else { + AttributedText(info.snippet) + } + + Spacer() + + + } + ) + } + ) + } + ) + .backgroundColor(themeColor: info.themeBackgroundColor) + .frame( + width: .infinity, + height: 68 + ) + } + } +} diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index a73cd7711a..c0821087ac 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -11,23 +11,16 @@ import SignalUtilitiesKit struct HomeScreen: View { @EnvironmentObject var host: HostWrapper - - @State private var viewModel: HomeScreenViewModel - @State private var flow: Onboarding.Flow? - @State private var dataChangeObservable: DatabaseCancellable? { - didSet { oldValue?.cancel() } // Cancel the old observable if there was one - } - @State private var hasLoadedInitialStateData: Bool = false - @State private var hasLoadedInitialThreadData: Bool = false - @State private var isLoadingMore: Bool = false - @State private var isAutoLoadingNextPage: Bool = false - @State private var viewHasAppeared: Bool = false + @StateObject private var viewModel: HomeScreenViewModel + private var flow: Onboarding.Flow? init(flow: Onboarding.Flow? = nil, using dependencies: Dependencies, onReceivedInitialChange: (() -> ())? = nil) { self.flow = flow - self.viewModel = HomeScreenViewModel( - using: dependencies, - onReceivedInitialChange: onReceivedInitialChange + _viewModel = StateObject( + wrappedValue: HomeScreenViewModel( + using: dependencies, + onReceivedInitialChange: onReceivedInitialChange + ) ) } @@ -41,7 +34,7 @@ struct HomeScreen: View { if viewModel.threadData.isEmpty { ZStack { - EmptyStateView(flow: $flow) + EmptyStateView(flow: self.flow) } .frame( maxWidth: .infinity, @@ -69,8 +62,8 @@ struct HomeScreen: View { // MARK: - Interaction func handleContinueButtonTapped() { - if let recoveryPasswordView: RecoveryPasswordScreen = try? RecoveryPasswordScreen() { - let viewController: SessionHostingViewController = SessionHostingViewController(rootView: recoveryPasswordView) + if let recoveryPasswordScreen: RecoveryPasswordScreen = try? RecoveryPasswordScreen() { + let viewController: SessionHostingViewController = SessionHostingViewController(rootView: recoveryPasswordScreen) viewController.setNavBarTitle("sessionRecoveryPassword".localized()) self.host.controller?.navigationController?.pushViewController(viewController, animated: true) } else { @@ -168,236 +161,242 @@ struct HomeScreen: View { // MARK: NewConversationButton -struct NewConversationButton: View { - - struct NewConversationButtonStyle: ButtonStyle { - func makeBody(configuration: Self.Configuration) -> some View { - configuration.label - .background( - configuration.isPressed ? - Circle() - .fill(themeColor: .highlighted(.menuButton_background, alwaysDarken: true)) - .frame( - width: NewConversationButton.size, - height: NewConversationButton.size - ) - .shadow( - themeColor: .menuButton_outerShadow, - opacity: 0.3, - radius: 15 - ) : - Circle() - .fill(themeColor: .menuButton_background) - .frame( - width: NewConversationButton.size, - height: NewConversationButton.size - ) - .shadow( - themeColor: .menuButton_outerShadow, - opacity: 0.3, - radius: 15 - ) - ) - } - } - - private static let size: CGFloat = 60 - private var action: () -> () - - init(action: @escaping () -> Void) { - self.action = action - } - - var body: some View { - ZStack { - Button { - action() - } label: { - Image("Plus") - .renderingMode(.template) - .foregroundColor(themeColor: .menuButton_icon) +extension HomeScreen { + struct NewConversationButton: View { + + struct NewConversationButtonStyle: ButtonStyle { + func makeBody(configuration: Self.Configuration) -> some View { + configuration.label + .background( + configuration.isPressed ? + Circle() + .fill(themeColor: .highlighted(.menuButton_background, alwaysDarken: true)) + .frame( + width: NewConversationButton.size, + height: NewConversationButton.size + ) + .shadow( + themeColor: .menuButton_outerShadow, + opacity: 0.3, + radius: 15 + ) : + Circle() + .fill(themeColor: .menuButton_background) + .frame( + width: NewConversationButton.size, + height: NewConversationButton.size + ) + .shadow( + themeColor: .menuButton_outerShadow, + opacity: 0.3, + radius: 15 + ) + ) } - .buttonStyle(NewConversationButtonStyle()) - .accessibility( - Accessibility( - identifier: "New conversation button", - label: "New conversation button" + } + + private static let size: CGFloat = 60 + private var action: () -> () + + init(action: @escaping () -> Void) { + self.action = action + } + + var body: some View { + ZStack { + Button { + action() + } label: { + Image("Plus") + .renderingMode(.template) + .foregroundColor(themeColor: .menuButton_icon) + } + .buttonStyle(NewConversationButtonStyle()) + .accessibility( + Accessibility( + identifier: "New conversation button", + label: "New conversation button" + ) ) + .padding(.bottom, Values.smallSpacing) + } + .frame( + maxWidth: .infinity, + maxHeight: .infinity, + alignment: .bottom ) - .padding(.bottom, Values.smallSpacing) } - .frame( - maxWidth: .infinity, - maxHeight: .infinity, - alignment: .bottom - ) } } // MARK: EmptyStateView -struct EmptyStateView: View { - @Binding var flow: Onboarding.Flow? - var body: some View { - VStack( - alignment: .center, - spacing: Values.smallSpacing, - content: { - if flow == .register { - // Welcome state after account creation - Image("Hooray") - .frame( - height: 96, - alignment: .center +extension HomeScreen { + struct EmptyStateView: View { + var flow: Onboarding.Flow? + var body: some View { + VStack( + alignment: .center, + spacing: Values.smallSpacing, + content: { + if flow == .register { + // Welcome state after account creation + Image("Hooray") + .frame( + height: 96, + alignment: .center + ) + + Text("onboardingAccountCreated".localized()) + .bold() + .font(.system(size: Values.veryLargeFontSize)) + .foregroundColor(themeColor: .textPrimary) + + Text( + "onboardingBubbleWelcomeToSession" + .put(key: "emoji", value: "") + .localized() ) + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .sessionButton_text) + + } else { + // Normal empty state + Image("SessionGreen64") + .resizable() + .aspectRatio(contentMode: .fit) + .frame( + height: 103, + alignment: .center + ) + .padding(.bottom, Values.mediumSpacing) + + Image("SessionHeading") + .resizable() + .renderingMode(.template) + .aspectRatio(contentMode: .fit) + .foregroundColor(themeColor: .textPrimary) + .frame( + height: 22, + alignment: .center + ) + .padding(.bottom, Values.smallSpacing) + } + + Line(color: .borderSeparator) + .padding(.vertical, Values.smallSpacing) - Text("onboardingAccountCreated".localized()) + Text("conversationsNone".localized()) .bold() - .font(.system(size: Values.veryLargeFontSize)) + .font(.system(size: Values.mediumFontSize)) .foregroundColor(themeColor: .textPrimary) - Text( - "onboardingBubbleWelcomeToSession" - .put(key: "emoji", value: "") - .localized() - ) - .font(.system(size: Values.smallFontSize)) - .foregroundColor(themeColor: .sessionButton_text) - - } else { - // Normal empty state - Image("SessionGreen64") - .resizable() - .aspectRatio(contentMode: .fit) - .frame( - height: 103, - alignment: .center - ) - .padding(.bottom, Values.mediumSpacing) - - Image("SessionHeading") - .resizable() - .renderingMode(.template) - .aspectRatio(contentMode: .fit) + Text("onboardingHitThePlusButton".localized()) + .font(.system(size: Values.verySmallFontSize)) .foregroundColor(themeColor: .textPrimary) - .frame( - height: 22, - alignment: .center - ) - .padding(.bottom, Values.smallSpacing) + .multilineTextAlignment(.center) } - - Line(color: .borderSeparator) - .padding(.vertical, Values.smallSpacing) - - Text("conversationsNone".localized()) - .bold() - .font(.system(size: Values.mediumFontSize)) - .foregroundColor(themeColor: .textPrimary) - - Text("onboardingHitThePlusButton".localized()) - .font(.system(size: Values.verySmallFontSize)) - .foregroundColor(themeColor: .textPrimary) - .multilineTextAlignment(.center) - } - ) - .frame( - width: 300, - alignment: .center - ) + ) + .frame( + width: 300, + alignment: .center + ) + } } } // MARK: SeedBanner -struct SeedBanner: View { - private var action: () -> () - - init(action: @escaping () -> Void) { - self.action = action - } - - var body: some View { - ZStack( - alignment: .topLeading, - content: { - Rectangle() - .fill(themeColor: .primary) - .frame(height: 2) - .frame(maxWidth: .infinity) - - HStack( - alignment: .center, - spacing: 0, - content: { - VStack( - alignment: .leading, - spacing: Values.smallSpacing, - content: { - HStack( - alignment: .center, - spacing: Values.verySmallSpacing, - content: { - Text("recoveryPasswordBannerTitle".localized()) - .font(.system(size: Values.smallFontSize)) - .bold() - .foregroundColor(themeColor: .textPrimary) - - Image("SessionShieldFilled") - .resizable() - .renderingMode(.template) - .foregroundColor(themeColor: .textPrimary) - .scaledToFit() - .frame( - width: 14, - height: 16 - ) - } - ) - - Text("recoveryPasswordBannerDescription".localized()) - .font(.system(size: Values.verySmallFontSize)) - .foregroundColor(themeColor: .textSecondary) - .lineLimit(2) +extension HomeScreen { + struct SeedBanner: View { + private var action: () -> () + + init(action: @escaping () -> Void) { + self.action = action + } + + var body: some View { + ZStack( + alignment: .topLeading, + content: { + Rectangle() + .fill(themeColor: .primary) + .frame(height: 2) + .frame(maxWidth: .infinity) + + HStack( + alignment: .center, + spacing: 0, + content: { + VStack( + alignment: .leading, + spacing: Values.smallSpacing, + content: { + HStack( + alignment: .center, + spacing: Values.verySmallSpacing, + content: { + Text("recoveryPasswordBannerTitle".localized()) + .font(.system(size: Values.smallFontSize)) + .bold() + .foregroundColor(themeColor: .textPrimary) + + Image("SessionShieldFilled") + .resizable() + .renderingMode(.template) + .foregroundColor(themeColor: .textPrimary) + .scaledToFit() + .frame( + width: 14, + height: 16 + ) + } + ) + + Text("recoveryPasswordBannerDescription".localized()) + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .textSecondary) + .lineLimit(2) + } + ) + + Spacer() + + Button { + action() + } label: { + Text("theContinue".localized()) + .bold() + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .sessionButton_text) + .frame( + minWidth: 80, + maxHeight: Values.smallButtonHeight, + alignment: .center + ) + .overlay( + Capsule() + .stroke(themeColor: .sessionButton_border) + ) } - ) - - Spacer() - - Button { - action() - } label: { - Text("theContinue".localized()) - .bold() - .font(.system(size: Values.smallFontSize)) - .foregroundColor(themeColor: .sessionButton_text) - .frame( - minWidth: 80, - maxHeight: Values.smallButtonHeight, - alignment: .center - ) - .overlay( - Capsule() - .stroke(themeColor: .sessionButton_border) + .accessibility( + Accessibility( + identifier: "Reveal recovery phrase button", + label: "Reveal recovery phrase button" ) - } - .accessibility( - Accessibility( - identifier: "Reveal recovery phrase button", - label: "Reveal recovery phrase button" ) - ) - } - ) - .padding(isIPhone5OrSmaller ? Values.smallSpacing : Values.mediumSpacing) - } - ) - .backgroundColor(themeColor: .conversationButton_background) - .border( - width: Values.separatorThickness, - edges: [.bottom], - color: .borderSeparator - ) + } + ) + .padding(isIPhone5OrSmaller ? Values.smallSpacing : Values.mediumSpacing) + } + ) + .backgroundColor(themeColor: .conversationButton_background) + .border( + width: Values.separatorThickness, + edges: [.bottom], + color: .borderSeparator + ) + } } } diff --git a/Session/Home/HomeScreenDataModel.swift b/Session/Home/HomeScreenDataModel.swift index 959b58e4fc..e6b2102c4c 100644 --- a/Session/Home/HomeScreenDataModel.swift +++ b/Session/Home/HomeScreenDataModel.swift @@ -231,7 +231,7 @@ public class HomeScreenDataModel { // MARK: - State /// This value is the current state of the view - public private(set) var state: State + public var state: State /// This is all the data the screen needs to populate itself, please see the following link for tips to help optimise /// performance https://github.com/groue/GRDB.swift#valueobservation-performance @@ -298,7 +298,7 @@ public class HomeScreenDataModel { private var hasReceivedInitialThreadData: Bool = false public private(set) var unobservedThreadDataChanges: [SectionModel]? - public private(set) var threadData: [SectionModel] = [] + public var threadData: [SectionModel] = [] public private(set) var pagedDataObserver: PagedDatabaseObserver? public var onThreadChange: (([SectionModel], StagedChangeset<[SectionModel]>) -> ())? { diff --git a/Session/Home/HomeScreenViewModel.swift b/Session/Home/HomeScreenViewModel.swift index 4f8242408b..073e2a0e74 100644 --- a/Session/Home/HomeScreenViewModel.swift +++ b/Session/Home/HomeScreenViewModel.swift @@ -8,11 +8,7 @@ import SessionMessagingKit import SessionUtilitiesKit public class HomeScreenViewModel: ObservableObject { - - @Published var state: HomeScreenDataModel.State - @Published var threadData: [HomeScreenDataModel.SectionModel] = [] - - public var dataModel: HomeScreenDataModel + @Published public var dataModel: HomeScreenDataModel private var dataChangeObservable: DatabaseCancellable? { didSet { oldValue?.cancel() } // Cancel the old observable if there was one @@ -24,7 +20,6 @@ public class HomeScreenViewModel: ObservableObject { init(using dependencies: Dependencies, onReceivedInitialChange: (() -> ())? = nil) { self.dataModel = HomeScreenDataModel(using: dependencies) - self.state = self.dataModel.state self.startObservingChanges(onReceivedInitialChange: onReceivedInitialChange) } @@ -47,13 +42,13 @@ public class HomeScreenViewModel: ObservableObject { onError: { _ in }, onChange: { [weak self] state in // The default scheduler emits changes on the main thread - self?.state = state + self?.dataModel.state = state runAndClearInitialChangeCallback?() } ) self.dataModel.onThreadChange = { [weak self] updatedThreadData, changeset in - self?.threadData = updatedThreadData + self?.dataModel.threadData = updatedThreadData runAndClearInitialChangeCallback?() } From 6fd8b18f3c87a05c8e7aea2fad90907cc04fd4f9 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Thu, 17 Oct 2024 17:11:17 +1100 Subject: [PATCH 14/16] WIP --- Session.xcodeproj/project.pbxproj | 19 +- .../Home/HomeScreen+ConversationList.swift | 6 +- Session/Home/HomeScreen+DataModel.swift | 50 + Session/Home/HomeScreen+ViewModel.swift | 506 + Session/Home/HomeScreen.swift | 52 +- Session/Home/HomeScreenDataModel.swift | 386 - Session/Home/HomeScreenViewModel.swift | 104 - Session/Meta/AppDelegate.swift | 47 +- .../Settings.bundle/ThirdPartyLicenses.plist | 82 + Session/Meta/Translations/InfoPlist.xcstrings | 2 +- .../Meta/Translations/Localizable.xcstrings | 23062 ++++++++-------- 11 files changed, 12249 insertions(+), 12067 deletions(-) create mode 100644 Session/Home/HomeScreen+DataModel.swift create mode 100644 Session/Home/HomeScreen+ViewModel.swift delete mode 100644 Session/Home/HomeScreenDataModel.swift delete mode 100644 Session/Home/HomeScreenViewModel.swift diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index b5268fc5d2..ff8d9de231 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -194,8 +194,8 @@ 94B3DC172AF8592200C88531 /* QuoteView_SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B3DC162AF8592200C88531 /* QuoteView_SwiftUI.swift */; }; 94C5DCB02BE88170003AA8C5 /* BezierPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C5DCAF2BE88170003AA8C5 /* BezierPathView.swift */; }; 94E12DBC2C24063A00D28EE0 /* SessionButton_SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */; }; - 94E5EDA52C8ECBFC0084ED63 /* HomeScreenDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E5EDA42C8ECBFC0084ED63 /* HomeScreenDataModel.swift */; }; - 94E5EDA72C8ECC150084ED63 /* HomeScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E5EDA62C8ECC150084ED63 /* HomeScreenViewModel.swift */; }; + 94E5EDA52C8ECBFC0084ED63 /* HomeScreen+DataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E5EDA42C8ECBFC0084ED63 /* HomeScreen+DataModel.swift */; }; + 94E5EDA72C8ECC150084ED63 /* HomeScreen+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E5EDA62C8ECC150084ED63 /* HomeScreen+ViewModel.swift */; }; 94E89A9B2C2A997B00FB18E1 /* HomeScreen+ConversationList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E89A9A2C2A997B00FB18E1 /* HomeScreen+ConversationList.swift */; }; 94E9BC0D2C7BFBDA006984EA /* Localization+Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E9BC0C2C7BFBDA006984EA /* Localization+Style.swift */; }; A11CD70D17FA230600A2D1B1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */; }; @@ -1394,8 +1394,8 @@ 94B3DC162AF8592200C88531 /* QuoteView_SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuoteView_SwiftUI.swift; sourceTree = ""; }; 94C5DCAF2BE88170003AA8C5 /* BezierPathView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BezierPathView.swift; sourceTree = ""; }; 94E12DBB2C24063A00D28EE0 /* SessionButton_SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionButton_SwiftUI.swift; sourceTree = ""; }; - 94E5EDA42C8ECBFC0084ED63 /* HomeScreenDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenDataModel.swift; sourceTree = ""; }; - 94E5EDA62C8ECC150084ED63 /* HomeScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenViewModel.swift; sourceTree = ""; }; + 94E5EDA42C8ECBFC0084ED63 /* HomeScreen+DataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeScreen+DataModel.swift"; sourceTree = ""; }; + 94E5EDA62C8ECC150084ED63 /* HomeScreen+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeScreen+ViewModel.swift"; sourceTree = ""; }; 94E89A9A2C2A997B00FB18E1 /* HomeScreen+ConversationList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "HomeScreen+ConversationList.swift"; path = "Session/Home/HomeScreen+ConversationList.swift"; sourceTree = SOURCE_ROOT; }; 94E9BC0C2C7BFBDA006984EA /* Localization+Style.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Localization+Style.swift"; sourceTree = ""; }; A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; @@ -3092,8 +3092,8 @@ B8BB82A4238F627000BA5194 /* HomeVC.swift */, 941BE62E2C1BF887005A880A /* HomeScreen.swift */, 94E89A9A2C2A997B00FB18E1 /* HomeScreen+ConversationList.swift */, - 94E5EDA42C8ECBFC0084ED63 /* HomeScreenDataModel.swift */, - 94E5EDA62C8ECC150084ED63 /* HomeScreenViewModel.swift */, + 94E5EDA42C8ECBFC0084ED63 /* HomeScreen+DataModel.swift */, + 94E5EDA62C8ECC150084ED63 /* HomeScreen+ViewModel.swift */, ); path = Home; sourceTree = ""; @@ -5045,7 +5045,8 @@ developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - Base + en, + Base, ); mainGroup = D221A07E169C9E5E00537ABF; packageReferences = ( @@ -6211,7 +6212,7 @@ 942256802C23F8BB00C0FDBF /* StartConversationScreen.swift in Sources */, 7B9F71C928470667006DFE7B /* ReactionListSheet.swift in Sources */, FD12A8412AD63BEA00EEBA0D /* NavigatableState.swift in Sources */, - 94E5EDA52C8ECBFC0084ED63 /* HomeScreenDataModel.swift in Sources */, + 94E5EDA52C8ECBFC0084ED63 /* HomeScreen+DataModel.swift in Sources */, 7B7037452834BCC0000DCF35 /* ReactionView.swift in Sources */, FD7115F428C71EB200B47552 /* ThreadDisappearingMessagesSettingsViewModel.swift in Sources */, B8D84ECF25E3108A005A043E /* ExpandingAttachmentsButton.swift in Sources */, @@ -6290,7 +6291,7 @@ FD71163828E2C50700B47552 /* SessionTableViewModel.swift in Sources */, FD71164A28E3EA5B00B47552 /* DismissType.swift in Sources */, C328251F25CA3A900062D0A7 /* QuoteView.swift in Sources */, - 94E5EDA72C8ECC150084ED63 /* HomeScreenViewModel.swift in Sources */, + 94E5EDA72C8ECC150084ED63 /* HomeScreen+ViewModel.swift in Sources */, 7B3A39322980D02B002FE4AC /* SessionCarouselView.swift in Sources */, FD37E9CC28A1E578003AE748 /* AppearanceViewController.swift in Sources */, B8EB20F02640F7F000773E52 /* OpenGroupInvitationView.swift in Sources */, diff --git a/Session/Home/HomeScreen+ConversationList.swift b/Session/Home/HomeScreen+ConversationList.swift index 162b11abae..4f3a29c9f6 100644 --- a/Session/Home/HomeScreen+ConversationList.swift +++ b/Session/Home/HomeScreen+ConversationList.swift @@ -10,14 +10,14 @@ import SignalUtilitiesKit extension HomeScreen { struct ConversationList: View { - @Binding private var threadData: [HomeScreenDataModel.SectionModel] + private var threadData: [DataModel.SectionModel] public static let mutePrefix: String = "\u{e067} " // stringlint:disable public static let unreadCountViewSize: CGFloat = 20 public static let statusIndicatorSize: CGFloat = 14 - public init(threadData: Binding<[HomeScreenDataModel.SectionModel]>) { - self._threadData = threadData + public init(threadData: [DataModel.SectionModel]) { + self.threadData = threadData } var body: some View { diff --git a/Session/Home/HomeScreen+DataModel.swift b/Session/Home/HomeScreen+DataModel.swift new file mode 100644 index 0000000000..a999e71b81 --- /dev/null +++ b/Session/Home/HomeScreen+DataModel.swift @@ -0,0 +1,50 @@ +// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. + +import Foundation +import GRDB +import DifferenceKit +import SignalUtilitiesKit +import SessionMessagingKit +import SessionUtilitiesKit + +extension HomeScreen { + public class DataModel { + public typealias SectionModel = ArraySection + + // MARK: - Section + + public enum Section: Differentiable { + case messageRequests + case threads + case loadMore + } + + // MARK: - Variables + + public static let pageSize: Int = (UIDevice.current.isIPad ? 20 : 15) + + public struct State: Equatable { + let showViewedSeedBanner: Bool + let hasHiddenMessageRequests: Bool + let unreadMessageRequestThreadCount: Int + let userProfile: Profile + } + + public static func retrieveState(_ db: Database) throws -> State { + let hasViewedSeed: Bool = db[.hasViewedSeed] + let hasHiddenMessageRequests: Bool = db[.hasHiddenMessageRequests] + let userProfile: Profile = Profile.fetchOrCreateCurrentUser(db) + let unreadMessageRequestThreadCount: Int = try SessionThread + .unreadMessageRequestsCountQuery(userPublicKey: userProfile.id) + .fetchOne(db) + .defaulting(to: 0) + + return State( + showViewedSeedBanner: !hasViewedSeed, + hasHiddenMessageRequests: hasHiddenMessageRequests, + unreadMessageRequestThreadCount: unreadMessageRequestThreadCount, + userProfile: userProfile + ) + } + } +} diff --git a/Session/Home/HomeScreen+ViewModel.swift b/Session/Home/HomeScreen+ViewModel.swift new file mode 100644 index 0000000000..58be8a4735 --- /dev/null +++ b/Session/Home/HomeScreen+ViewModel.swift @@ -0,0 +1,506 @@ +// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. + +import Foundation +import SwiftUI +import GRDB +import DifferenceKit +import SignalUtilitiesKit +import SessionMessagingKit +import SessionUtilitiesKit + +extension HomeScreen { + public class ViewModel: ObservableObject { + public let dependencies: Dependencies + + public var onReceivedInitialChange: (() -> ())? { + didSet { + self.startObservingChanges(onReceivedInitialChange: onReceivedInitialChange) + } + } + + private var dataChangeObservable: DatabaseCancellable? { + didSet { oldValue?.cancel() } // Cancel the old observable if there was one + } + private var hasLoadedInitialStateData: Bool = false + private var hasLoadedInitialThreadData: Bool = false + private var isLoadingMore: Bool = false + private var isAutoLoadingNextPage: Bool = false + private var viewHasAppeared: Bool = false + @State var shouldLoadMore: Bool = false + + // MARK: - Initialization + + init(using dependencies: Dependencies) { + typealias InitialData = ( + showViewedSeedBanner: Bool, + hasHiddenMessageRequests: Bool, + profile: Profile + ) + + let initialData: InitialData? = Storage.shared.read { db -> InitialData in + ( + !db[.hasViewedSeed], + db[.hasHiddenMessageRequests], + Profile.fetchOrCreateCurrentUser(db) + ) + } + + self.dependencies = dependencies + + self.state = DataModel.State( + showViewedSeedBanner: (initialData?.showViewedSeedBanner ?? true), + hasHiddenMessageRequests: (initialData?.hasHiddenMessageRequests ?? false), + unreadMessageRequestThreadCount: 0, + userProfile: (initialData?.profile ?? Profile.fetchOrCreateCurrentUser()) + ) + self.pagedDataObserver = nil + + // Note: Since this references self we need to finish initializing before setting it, we + // also want to skip the initial query and trigger it async so that the push animation + // doesn't stutter (it should load basically immediately but without this there is a + // distinct stutter) + let userPublicKey: String = self.state.userProfile.id + let thread: TypedTableAlias = TypedTableAlias() + self.pagedDataObserver = PagedDatabaseObserver( + pagedTable: SessionThread.self, + pageSize: HomeViewModel.pageSize, + idColumn: .id, + observedChanges: [ + PagedData.ObservedChanges( + table: SessionThread.self, + columns: [ + .id, + .shouldBeVisible, + .pinnedPriority, + .mutedUntilTimestamp, + .onlyNotifyForMentions, + .markedAsUnread + ] + ), + PagedData.ObservedChanges( + table: Interaction.self, + columns: [ + .body, + .wasRead + ], + joinToPagedType: { + let interaction: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(Interaction.self) ON \(interaction[.threadId]) = \(thread[.id])") + }() + ), + PagedData.ObservedChanges( + table: Contact.self, + columns: [.isBlocked], + joinToPagedType: { + let contact: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(Contact.self) ON \(contact[.id]) = \(thread[.id])") + }() + ), + PagedData.ObservedChanges( + table: Profile.self, + columns: [.name, .nickname, .profilePictureFileName], + joinToPagedType: { + let profile: TypedTableAlias = TypedTableAlias() + let groupMember: TypedTableAlias = TypedTableAlias() + let threadVariants: [SessionThread.Variant] = [.legacyGroup, .group] + let targetRole: GroupMember.Role = GroupMember.Role.standard + + return SQL(""" + JOIN \(Profile.self) ON ( + ( -- Contact profile change + \(profile[.id]) = \(thread[.id]) AND + \(SQL("\(thread[.variant]) = \(SessionThread.Variant.contact)")) + ) OR ( -- Closed group profile change + \(SQL("\(thread[.variant]) IN \(threadVariants)")) AND ( + profile.id = ( -- Front profile + SELECT MIN(\(groupMember[.profileId])) + FROM \(GroupMember.self) + JOIN \(Profile.self) ON \(profile[.id]) = \(groupMember[.profileId]) + WHERE ( + \(groupMember[.groupId]) = \(thread[.id]) AND + \(SQL("\(groupMember[.role]) = \(targetRole)")) AND + \(groupMember[.profileId]) != \(userPublicKey) + ) + ) OR + profile.id = ( -- Back profile + SELECT MAX(\(groupMember[.profileId])) + FROM \(GroupMember.self) + JOIN \(Profile.self) ON \(profile[.id]) = \(groupMember[.profileId]) + WHERE ( + \(groupMember[.groupId]) = \(thread[.id]) AND + \(SQL("\(groupMember[.role]) = \(targetRole)")) AND + \(groupMember[.profileId]) != \(userPublicKey) + ) + ) OR ( -- Fallback profile + profile.id = \(userPublicKey) AND + ( + SELECT COUNT(\(groupMember[.profileId])) + FROM \(GroupMember.self) + JOIN \(Profile.self) ON \(profile[.id]) = \(groupMember[.profileId]) + WHERE ( + \(groupMember[.groupId]) = \(thread[.id]) AND + \(SQL("\(groupMember[.role]) = \(targetRole)")) AND + \(groupMember[.profileId]) != \(userPublicKey) + ) + ) = 1 + ) + ) + ) + ) + """) + }() + ), + PagedData.ObservedChanges( + table: ClosedGroup.self, + columns: [.name], + joinToPagedType: { + let closedGroup: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(ClosedGroup.self) ON \(closedGroup[.threadId]) = \(thread[.id])") + }() + ), + PagedData.ObservedChanges( + table: OpenGroup.self, + columns: [.name, .imageData], + joinToPagedType: { + let openGroup: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(OpenGroup.self) ON \(openGroup[.threadId]) = \(thread[.id])") + }() + ), + PagedData.ObservedChanges( + table: RecipientState.self, + columns: [.state], + joinToPagedType: { + let interaction: TypedTableAlias = TypedTableAlias() + let recipientState: TypedTableAlias = TypedTableAlias() + + return """ + JOIN \(Interaction.self) ON \(interaction[.threadId]) = \(thread[.id]) + JOIN \(RecipientState.self) ON \(recipientState[.interactionId]) = \(interaction[.id]) + """ + }() + ), + PagedData.ObservedChanges( + table: ThreadTypingIndicator.self, + columns: [.threadId], + joinToPagedType: { + let typingIndicator: TypedTableAlias = TypedTableAlias() + + return SQL("JOIN \(ThreadTypingIndicator.self) ON \(typingIndicator[.threadId]) = \(thread[.id])") + }() + ) + ], + /// **Note:** This `optimisedJoinSQL` value includes the required minimum joins needed for the query but differs + /// from the JOINs that are actually used for performance reasons as the basic logic can be simpler for where it's used + joinSQL: SessionThreadViewModel.optimisedJoinSQL, + filterSQL: SessionThreadViewModel.homeFilterSQL(userPublicKey: userPublicKey), + groupSQL: SessionThreadViewModel.groupSQL, + orderSQL: SessionThreadViewModel.homeOrderSQL, + dataQuery: SessionThreadViewModel.baseQuery( + userPublicKey: userPublicKey, + groupSQL: SessionThreadViewModel.groupSQL, + orderSQL: SessionThreadViewModel.homeOrderSQL + ), + onChangeUnsorted: { [weak self] updatedData, updatedPageInfo in + PagedData.processAndTriggerUpdates( + updatedData: self?.process(data: updatedData, for: updatedPageInfo), + currentDataRetriever: { self?.threadData }, + onDataChangeRetriever: { self?.onThreadChange }, + onUnobservedDataChange: { updatedData in + self?.unobservedThreadDataChanges = updatedData + } + ) + + self?.hasReceivedInitialThreadData = true + } + ) + + Storage.shared.addObserver(self.pagedDataObserver) + + self.registerForNotifications() + + // Run the initial query on a background thread so we don't block the main thread + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + // The `.pageBefore` will query from a `0` offset loading the first page + self?.pagedDataObserver?.load(.pageBefore) + } + } + + // MARK: - State + + /// This value is the current state of the view + @Published public private(set) var state: DataModel.State + + /// This is all the data the screen needs to populate itself, please see the following link for tips to help optimise + /// performance https://github.com/groue/GRDB.swift#valueobservation-performance + /// + /// **Note:** This observation will be triggered twice immediately (and be de-duped by the `removeDuplicates`) + /// this is due to the behaviour of `ValueConcurrentObserver.asyncStartObservation` which triggers it's own + /// fetch (after the ones in `ValueConcurrentObserver.asyncStart`/`ValueConcurrentObserver.syncStart`) + /// just in case the database has changed between the two reads - unfortunately it doesn't look like there is a way to prevent this + public lazy var observableState = ValueObservation + .trackingConstantRegion { db -> DataModel.State in try DataModel.retrieveState(db) } + .removeDuplicates() + .handleEvents(didFail: { SNLog("[HomeViewModel] Observation failed with error: \($0)") }) + + public func updateState(_ updatedState: DataModel.State) { + let oldState: DataModel.State = self.state + self.state = updatedState + + // If the messageRequest content changed then we need to re-process the thread data (assuming + // we've received the initial thread data) + guard + self.hasReceivedInitialThreadData, + ( + oldState.hasHiddenMessageRequests != updatedState.hasHiddenMessageRequests || + oldState.unreadMessageRequestThreadCount != updatedState.unreadMessageRequestThreadCount + ), + let currentPageInfo: PagedData.PageInfo = self.pagedDataObserver?.pageInfo.wrappedValue + else { return } + + /// **MUST** have the same logic as in the 'PagedDataObserver.onChangeUnsorted' above + let currentData: [DataModel.SectionModel] = (self.unobservedThreadDataChanges ?? self.threadData) + let updatedThreadData: [DataModel.SectionModel] = self.process( + data: (currentData.first(where: { $0.model == .threads })?.elements ?? []), + for: currentPageInfo + ) + + PagedData.processAndTriggerUpdates( + updatedData: updatedThreadData, + currentDataRetriever: { [weak self] in (self?.unobservedThreadDataChanges ?? self?.threadData) }, + onDataChangeRetriever: { [weak self] in self?.onThreadChange }, + onUnobservedDataChange: { [weak self] updatedData in + self?.unobservedThreadDataChanges = updatedData + } + ) + } + + // MARK: - Thread Data + + private var hasReceivedInitialThreadData: Bool = false + public private(set) var unobservedThreadDataChanges: [DataModel.SectionModel]? + @Published public private(set) var threadData: [DataModel.SectionModel] = [] + public private(set) var pagedDataObserver: PagedDatabaseObserver? + + public var onThreadChange: (([DataModel.SectionModel], StagedChangeset<[DataModel.SectionModel]>) -> ())? { + didSet { + guard onThreadChange != nil else { return } + + // When starting to observe interaction changes we want to trigger a UI update just in case the + // data was changed while we weren't observing + if let changes: [DataModel.SectionModel] = self.unobservedThreadDataChanges { + PagedData.processAndTriggerUpdates( + updatedData: changes, + currentDataRetriever: { [weak self] in self?.threadData }, + onDataChangeRetriever: { [weak self] in self?.onThreadChange }, + onUnobservedDataChange: { [weak self] updatedData in + self?.unobservedThreadDataChanges = updatedData + } + ) + self.unobservedThreadDataChanges = nil + } + } + } + + private func process(data: [SessionThreadViewModel], for pageInfo: PagedData.PageInfo) -> [DataModel.SectionModel] { + let finalUnreadMessageRequestCount: Int = (self.state.hasHiddenMessageRequests ? + 0 : + self.state.unreadMessageRequestThreadCount + ) + let groupedOldData: [String: [SessionThreadViewModel]] = (self.threadData + .first(where: { $0.model == .threads })? + .elements) + .defaulting(to: []) + .grouped(by: \.threadId) + + return [ + // If there are no unread message requests then hide the message request banner + (finalUnreadMessageRequestCount == 0 ? + [] : + [DataModel.SectionModel( + section: .messageRequests, + elements: [ + SessionThreadViewModel( + threadId: SessionThreadViewModel.messageRequestsSectionId, + unreadCount: UInt(finalUnreadMessageRequestCount) + ) + ] + )] + ), + [ + DataModel.SectionModel( + section: .threads, + elements: data + .filter { threadViewModel in + threadViewModel.id != SessionThreadViewModel.invalidId && + threadViewModel.id != SessionThreadViewModel.messageRequestsSectionId + } + .sorted { lhs, rhs -> Bool in + guard lhs.threadPinnedPriority == rhs.threadPinnedPriority else { + return lhs.threadPinnedPriority > rhs.threadPinnedPriority + } + + return lhs.lastInteractionDate > rhs.lastInteractionDate + } + .map { viewModel -> SessionThreadViewModel in + viewModel.populatingCurrentUserBlindedKeys( + currentUserBlinded15PublicKeyForThisThread: groupedOldData[viewModel.threadId]? + .first? + .currentUserBlinded15PublicKey, + currentUserBlinded25PublicKeyForThisThread: groupedOldData[viewModel.threadId]? + .first? + .currentUserBlinded25PublicKey + ) + } + ) + ], + (!data.isEmpty && (pageInfo.pageOffset + pageInfo.currentCount) < pageInfo.totalCount ? + [DataModel.SectionModel(section: .loadMore)] : + [] + ) + ].flatMap { $0 } + } + + public func updateThreadData(_ updatedData: [DataModel.SectionModel]) { + self.threadData = updatedData + } + + // MARK: - Updating + + public func startObservingChanges(didReturnFromBackground: Bool = false, onReceivedInitialChange: (() -> ())? = nil) { + guard dataChangeObservable == nil else { return } + + var runAndClearInitialChangeCallback: (() -> ())? = nil + + runAndClearInitialChangeCallback = { [weak self] in + guard self?.hasLoadedInitialStateData == true && self?.hasLoadedInitialThreadData == true else { return } + + onReceivedInitialChange?() + runAndClearInitialChangeCallback = nil + } + + dataChangeObservable = Storage.shared.start( + self.observableState, + onError: { _ in }, + onChange: { [weak self] state in + // The default scheduler emits changes on the main thread + self?.handleStateUpdates(state) + runAndClearInitialChangeCallback?() + } + ) + + self.onThreadChange = { [weak self] updatedThreadData, changeset in + self?.handleThreadUpdates(updatedThreadData) + runAndClearInitialChangeCallback?() + } + + // Note: When returning from the background we could have received notifications but the + // PagedDatabaseObserver won't have them so we need to force a re-fetch of the current + // data to ensure everything is up to date + if didReturnFromBackground { + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + self?.pagedDataObserver?.reload() + } + } + } + + private func stopObservingChanges() { + // Stop observing database changes + self.dataChangeObservable = nil + self.onThreadChange = nil + } + + private func handleStateUpdates(_ updatedState: DataModel.State, animated: Bool = true) { + // Ensure the first load runs without animations (if we don't do this the cells will animate + // in from a frame of CGRect.zero) + guard hasLoadedInitialStateData else { + hasLoadedInitialStateData = true + handleStateUpdates(updatedState, animated: false) + return + } + + if animated { + withAnimation(.easeInOut) { + self.updateState(updatedState) + } + } else { + self.updateState(updatedState) + } + } + + private func handleThreadUpdates(_ updatedData: [DataModel.SectionModel]) { + // Ensure the first load runs without animations (if we don't do this the cells will animate + // in from a frame of CGRect.zero) + guard hasLoadedInitialThreadData else { + self.updateThreadData(updatedData) + self.hasLoadedInitialThreadData = true + return + } + + withAnimation(.easeInOut) { + self.updateThreadData(updatedData) + self.isLoadingMore = false + self.autoLoadNextPageIfNeeded() + } + } + + private func autoLoadNextPageIfNeeded() { + guard + self.hasLoadedInitialThreadData && + !self.isAutoLoadingNextPage && + !self.isLoadingMore + else { return } + + self.isAutoLoadingNextPage = true + + DispatchQueue.main.asyncAfter(deadline: .now() + PagedData.autoLoadNextPageDelay) { [weak self] in + self?.isAutoLoadingNextPage = false + + // Note: We sort the headers as we want to prioritise loading newer pages over older ones + let sections: [DataModel.Section] = (self?.threadData + .enumerated() + .map { _, section in section.model }) + .defaulting(to: []) + + guard sections.contains(.loadMore) && (self?.shouldLoadMore == true) else { return } + + self?.isLoadingMore = true + + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + self?.pagedDataObserver?.load(.pageAfter) + } + } + } + + // MARK: Notification + + func registerForNotifications() { + // Notifications + NotificationCenter.default.addObserver( + self, + selector: #selector(applicationDidBecomeActive(_:)), + name: UIApplication.didBecomeActiveNotification, + object: nil + ) + NotificationCenter.default.addObserver( + self, + selector: #selector(applicationDidResignActive(_:)), + name: UIApplication.didEnterBackgroundNotification, object: nil + ) + } + + @objc func applicationDidBecomeActive(_ notification: Notification) { + /// Need to dispatch to the next run loop to prevent a possible crash caused by the database resuming mid-query + DispatchQueue.main.async { [weak self] in + self?.startObservingChanges(didReturnFromBackground: true) + } + } + + @objc func applicationDidResignActive(_ notification: Notification) { + self.stopObservingChanges() + } + } +} diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index c0821087ac..11bf4cdea3 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -11,17 +11,41 @@ import SignalUtilitiesKit struct HomeScreen: View { @EnvironmentObject var host: HostWrapper - @StateObject private var viewModel: HomeScreenViewModel + @StateObject private var viewModel: ViewModel private var flow: Onboarding.Flow? + public var onReceivedInitialChange: (() -> ())? { + didSet { + viewModel.onReceivedInitialChange = onReceivedInitialChange + } + } - init(flow: Onboarding.Flow? = nil, using dependencies: Dependencies, onReceivedInitialChange: (() -> ())? = nil) { + init(flow: Onboarding.Flow? = nil, using dependencies: Dependencies) { + _viewModel = StateObject(wrappedValue: ViewModel(using: dependencies)) self.flow = flow - _viewModel = StateObject( - wrappedValue: HomeScreenViewModel( - using: dependencies, - onReceivedInitialChange: onReceivedInitialChange - ) - ) + self.initialize() + } + + private func initialize() { + // Note: This is a hack to ensure `isRTL` is initially gets run on the main thread so the value + // is cached (it gets called on background threads and if it hasn't cached the value then it can + // cause odd performance issues since it accesses UIKit) + if Singleton.hasAppContext { _ = Singleton.appContext.isRTL } + + // Preparation + // TODO: [HomeScreen Refactoring] +// SessionApp.homeViewController.mutate { $0 = self } + + // Start polling if needed (i.e. if the user just created or restored their Session ID) + if Identity.userExists(), let appDelegate: AppDelegate = UIApplication.shared.delegate as? AppDelegate { + appDelegate.startPollersIfNeeded() + } + + // Onion request path countries cache + IP2Country.populateCacheIfNeededAsync() + } + + public mutating func startObservingChanges(onReceivedInitialChange: (() -> ())? = nil) { + self.onReceivedInitialChange = onReceivedInitialChange } var body: some View { @@ -43,15 +67,15 @@ struct HomeScreen: View { ) } - ConversationList(threadData: $viewModel.threadData) + ConversationList(threadData: viewModel.threadData) NewConversationButton(action: createNewConversation) } ) .backgroundColor(themeColor: .backgroundPrimary) - .onReceive(Just(viewModel.dataModel), perform: { updatedDataModel in + .onReceive(Just(viewModel.state), perform: { updatedState in (self.host.controller as? SessionHostingViewController)?.setUpNavBarButton( - leftItem: .profile(profile: updatedDataModel.state.userProfile), + leftItem: .profile(profile: updatedState.userProfile), rightItem: .search, leftAction: openSettings, rightAction: showSearchUI @@ -97,14 +121,14 @@ struct HomeScreen: View { (isMessageRequest && action != .compose) ? SessionTableViewController( viewModel: MessageRequestsViewModel( - using: viewModel.dataModel.dependencies) + using: viewModel.dependencies) ) : nil ), ConversationVC( threadId: threadId, threadVariant: variant, focusedInteractionInfo: focusedInteractionInfo, - using: viewModel.dataModel.dependencies + using: viewModel.dependencies ) ].compactMap { $0 } @@ -124,7 +148,7 @@ struct HomeScreen: View { if let presentedVC = self.host.controller?.presentedViewController { presentedVC.dismiss(animated: false, completion: nil) } - let searchController = GlobalSearchViewController(using: viewModel.dataModel.dependencies) + let searchController = GlobalSearchViewController(using: viewModel.dependencies) self.host.controller?.navigationController?.setViewControllers( [ self.host.controller, searchController ].compactMap{ $0 }, animated: true diff --git a/Session/Home/HomeScreenDataModel.swift b/Session/Home/HomeScreenDataModel.swift deleted file mode 100644 index e6b2102c4c..0000000000 --- a/Session/Home/HomeScreenDataModel.swift +++ /dev/null @@ -1,386 +0,0 @@ -// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. - -import Foundation -import GRDB -import DifferenceKit -import SignalUtilitiesKit -import SessionMessagingKit -import SessionUtilitiesKit - -public class HomeScreenDataModel { - - public typealias SectionModel = ArraySection - - // MARK: - Section - - public enum Section: Differentiable { - case messageRequests - case threads - case loadMore - } - - // MARK: - Variables - - public static let pageSize: Int = (UIDevice.current.isIPad ? 20 : 15) - - public struct State: Equatable { - let showViewedSeedBanner: Bool - let hasHiddenMessageRequests: Bool - let unreadMessageRequestThreadCount: Int - let userProfile: Profile - } - - public let dependencies: Dependencies - - // MARK: - Initialization - - init(using dependencies: Dependencies) { - typealias InitialData = ( - showViewedSeedBanner: Bool, - hasHiddenMessageRequests: Bool, - profile: Profile - ) - - let initialData: InitialData? = Storage.shared.read { db -> InitialData in - ( - !db[.hasViewedSeed], - db[.hasHiddenMessageRequests], - Profile.fetchOrCreateCurrentUser(db) - ) - } - - self.dependencies = dependencies - self.state = State( - showViewedSeedBanner: (initialData?.showViewedSeedBanner ?? true), - hasHiddenMessageRequests: (initialData?.hasHiddenMessageRequests ?? false), - unreadMessageRequestThreadCount: 0, - userProfile: (initialData?.profile ?? Profile.fetchOrCreateCurrentUser()) - ) - self.pagedDataObserver = nil - - // Note: Since this references self we need to finish initializing before setting it, we - // also want to skip the initial query and trigger it async so that the push animation - // doesn't stutter (it should load basically immediately but without this there is a - // distinct stutter) - let userPublicKey: String = self.state.userProfile.id - let thread: TypedTableAlias = TypedTableAlias() - self.pagedDataObserver = PagedDatabaseObserver( - pagedTable: SessionThread.self, - pageSize: Self.pageSize, - idColumn: .id, - observedChanges: [ - PagedData.ObservedChanges( - table: SessionThread.self, - columns: [ - .id, - .shouldBeVisible, - .pinnedPriority, - .mutedUntilTimestamp, - .onlyNotifyForMentions, - .markedAsUnread - ] - ), - PagedData.ObservedChanges( - table: Interaction.self, - columns: [ - .body, - .wasRead - ], - joinToPagedType: { - let interaction: TypedTableAlias = TypedTableAlias() - - return SQL("JOIN \(Interaction.self) ON \(interaction[.threadId]) = \(thread[.id])") - }() - ), - PagedData.ObservedChanges( - table: Contact.self, - columns: [.isBlocked], - joinToPagedType: { - let contact: TypedTableAlias = TypedTableAlias() - - return SQL("JOIN \(Contact.self) ON \(contact[.id]) = \(thread[.id])") - }() - ), - PagedData.ObservedChanges( - table: Profile.self, - columns: [.name, .nickname, .profilePictureFileName], - joinToPagedType: { - let profile: TypedTableAlias = TypedTableAlias() - let groupMember: TypedTableAlias = TypedTableAlias() - let threadVariants: [SessionThread.Variant] = [.legacyGroup, .group] - let targetRole: GroupMember.Role = GroupMember.Role.standard - - return SQL(""" - JOIN \(Profile.self) ON ( - ( -- Contact profile change - \(profile[.id]) = \(thread[.id]) AND - \(SQL("\(thread[.variant]) = \(SessionThread.Variant.contact)")) - ) OR ( -- Closed group profile change - \(SQL("\(thread[.variant]) IN \(threadVariants)")) AND ( - profile.id = ( -- Front profile - SELECT MIN(\(groupMember[.profileId])) - FROM \(GroupMember.self) - JOIN \(Profile.self) ON \(profile[.id]) = \(groupMember[.profileId]) - WHERE ( - \(groupMember[.groupId]) = \(thread[.id]) AND - \(SQL("\(groupMember[.role]) = \(targetRole)")) AND - \(groupMember[.profileId]) != \(userPublicKey) - ) - ) OR - profile.id = ( -- Back profile - SELECT MAX(\(groupMember[.profileId])) - FROM \(GroupMember.self) - JOIN \(Profile.self) ON \(profile[.id]) = \(groupMember[.profileId]) - WHERE ( - \(groupMember[.groupId]) = \(thread[.id]) AND - \(SQL("\(groupMember[.role]) = \(targetRole)")) AND - \(groupMember[.profileId]) != \(userPublicKey) - ) - ) OR ( -- Fallback profile - profile.id = \(userPublicKey) AND - ( - SELECT COUNT(\(groupMember[.profileId])) - FROM \(GroupMember.self) - JOIN \(Profile.self) ON \(profile[.id]) = \(groupMember[.profileId]) - WHERE ( - \(groupMember[.groupId]) = \(thread[.id]) AND - \(SQL("\(groupMember[.role]) = \(targetRole)")) AND - \(groupMember[.profileId]) != \(userPublicKey) - ) - ) = 1 - ) - ) - ) - ) - """) - }() - ), - PagedData.ObservedChanges( - table: ClosedGroup.self, - columns: [.name], - joinToPagedType: { - let closedGroup: TypedTableAlias = TypedTableAlias() - - return SQL("JOIN \(ClosedGroup.self) ON \(closedGroup[.threadId]) = \(thread[.id])") - }() - ), - PagedData.ObservedChanges( - table: OpenGroup.self, - columns: [.name, .imageData], - joinToPagedType: { - let openGroup: TypedTableAlias = TypedTableAlias() - - return SQL("JOIN \(OpenGroup.self) ON \(openGroup[.threadId]) = \(thread[.id])") - }() - ), - PagedData.ObservedChanges( - table: RecipientState.self, - columns: [.state], - joinToPagedType: { - let interaction: TypedTableAlias = TypedTableAlias() - let recipientState: TypedTableAlias = TypedTableAlias() - - return """ - JOIN \(Interaction.self) ON \(interaction[.threadId]) = \(thread[.id]) - JOIN \(RecipientState.self) ON \(recipientState[.interactionId]) = \(interaction[.id]) - """ - }() - ), - PagedData.ObservedChanges( - table: ThreadTypingIndicator.self, - columns: [.threadId], - joinToPagedType: { - let typingIndicator: TypedTableAlias = TypedTableAlias() - - return SQL("JOIN \(ThreadTypingIndicator.self) ON \(typingIndicator[.threadId]) = \(thread[.id])") - }() - ) - ], - /// **Note:** This `optimisedJoinSQL` value includes the required minimum joins needed for the query but differs - /// from the JOINs that are actually used for performance reasons as the basic logic can be simpler for where it's used - joinSQL: SessionThreadViewModel.optimisedJoinSQL, - filterSQL: SessionThreadViewModel.homeFilterSQL(userPublicKey: userPublicKey), - groupSQL: SessionThreadViewModel.groupSQL, - orderSQL: SessionThreadViewModel.homeOrderSQL, - dataQuery: SessionThreadViewModel.baseQuery( - userPublicKey: userPublicKey, - groupSQL: SessionThreadViewModel.groupSQL, - orderSQL: SessionThreadViewModel.homeOrderSQL - ), - onChangeUnsorted: { [weak self] updatedData, updatedPageInfo in - PagedData.processAndTriggerUpdates( - updatedData: self?.process(data: updatedData, for: updatedPageInfo), - currentDataRetriever: { self?.threadData }, - onDataChangeRetriever: { self?.onThreadChange }, - onUnobservedDataChange: { updatedData in - self?.unobservedThreadDataChanges = updatedData - } - ) - - self?.hasReceivedInitialThreadData = true - } - ) - - // Run the initial query on a background thread so we don't block the main thread - DispatchQueue.global(qos: .userInitiated).async { [weak self] in - // The `.pageBefore` will query from a `0` offset loading the first page - self?.pagedDataObserver?.load(.pageBefore) - } - } - - // MARK: - State - - /// This value is the current state of the view - public var state: State - - /// This is all the data the screen needs to populate itself, please see the following link for tips to help optimise - /// performance https://github.com/groue/GRDB.swift#valueobservation-performance - /// - /// **Note:** This observation will be triggered twice immediately (and be de-duped by the `removeDuplicates`) - /// this is due to the behaviour of `ValueConcurrentObserver.asyncStartObservation` which triggers it's own - /// fetch (after the ones in `ValueConcurrentObserver.asyncStart`/`ValueConcurrentObserver.syncStart`) - /// just in case the database has changed between the two reads - unfortunately it doesn't look like there is a way to prevent this - public lazy var observableState = ValueObservation - .trackingConstantRegion { db -> State in try Self.retrieveState(db) } - .removeDuplicates() - .handleEvents(didFail: { SNLog("[HomeViewModel] Observation failed with error: \($0)") }) - - private static func retrieveState(_ db: Database) throws -> State { - let hasViewedSeed: Bool = db[.hasViewedSeed] - let hasHiddenMessageRequests: Bool = db[.hasHiddenMessageRequests] - let userProfile: Profile = Profile.fetchOrCreateCurrentUser(db) - let unreadMessageRequestThreadCount: Int = try SessionThread - .unreadMessageRequestsCountQuery(userPublicKey: userProfile.id) - .fetchOne(db) - .defaulting(to: 0) - - return State( - showViewedSeedBanner: !hasViewedSeed, - hasHiddenMessageRequests: hasHiddenMessageRequests, - unreadMessageRequestThreadCount: unreadMessageRequestThreadCount, - userProfile: userProfile - ) - } - - public func updateState(_ updatedState: State) { - let oldState: State = self.state - self.state = updatedState - - // If the messageRequest content changed then we need to re-process the thread data (assuming - // we've received the initial thread data) - guard - self.hasReceivedInitialThreadData, - ( - oldState.hasHiddenMessageRequests != updatedState.hasHiddenMessageRequests || - oldState.unreadMessageRequestThreadCount != updatedState.unreadMessageRequestThreadCount - ), - let currentPageInfo: PagedData.PageInfo = self.pagedDataObserver?.pageInfo.wrappedValue - else { return } - - /// **MUST** have the same logic as in the 'PagedDataObserver.onChangeUnsorted' above - let currentData: [SectionModel] = (self.unobservedThreadDataChanges ?? self.threadData) - let updatedThreadData: [SectionModel] = self.process( - data: (currentData.first(where: { $0.model == .threads })?.elements ?? []), - for: currentPageInfo - ) - - PagedData.processAndTriggerUpdates( - updatedData: updatedThreadData, - currentDataRetriever: { [weak self] in (self?.unobservedThreadDataChanges ?? self?.threadData) }, - onDataChangeRetriever: { [weak self] in self?.onThreadChange }, - onUnobservedDataChange: { [weak self] updatedData in - self?.unobservedThreadDataChanges = updatedData - } - ) - } - - // MARK: - Thread Data - - private var hasReceivedInitialThreadData: Bool = false - public private(set) var unobservedThreadDataChanges: [SectionModel]? - public var threadData: [SectionModel] = [] - public private(set) var pagedDataObserver: PagedDatabaseObserver? - - public var onThreadChange: (([SectionModel], StagedChangeset<[SectionModel]>) -> ())? { - didSet { - guard onThreadChange != nil else { return } - - // When starting to observe interaction changes we want to trigger a UI update just in case the - // data was changed while we weren't observing - if let changes: [SectionModel] = self.unobservedThreadDataChanges { - PagedData.processAndTriggerUpdates( - updatedData: changes, - currentDataRetriever: { [weak self] in self?.threadData }, - onDataChangeRetriever: { [weak self] in self?.onThreadChange }, - onUnobservedDataChange: { [weak self] updatedData in - self?.unobservedThreadDataChanges = updatedData - } - ) - self.unobservedThreadDataChanges = nil - } - } - } - - private func process(data: [SessionThreadViewModel], for pageInfo: PagedData.PageInfo) -> [SectionModel] { - let finalUnreadMessageRequestCount: Int = (self.state.hasHiddenMessageRequests ? - 0 : - self.state.unreadMessageRequestThreadCount - ) - let groupedOldData: [String: [SessionThreadViewModel]] = (self.threadData - .first(where: { $0.model == .threads })? - .elements) - .defaulting(to: []) - .grouped(by: \.threadId) - - return [ - // If there are no unread message requests then hide the message request banner - (finalUnreadMessageRequestCount == 0 ? - [] : - [SectionModel( - section: .messageRequests, - elements: [ - SessionThreadViewModel( - threadId: SessionThreadViewModel.messageRequestsSectionId, - unreadCount: UInt(finalUnreadMessageRequestCount) - ) - ] - )] - ), - [ - SectionModel( - section: .threads, - elements: data - .filter { threadViewModel in - threadViewModel.id != SessionThreadViewModel.invalidId && - threadViewModel.id != SessionThreadViewModel.messageRequestsSectionId - } - .sorted { lhs, rhs -> Bool in - guard lhs.threadPinnedPriority == rhs.threadPinnedPriority else { - return lhs.threadPinnedPriority > rhs.threadPinnedPriority - } - - return lhs.lastInteractionDate > rhs.lastInteractionDate - } - .map { viewModel -> SessionThreadViewModel in - viewModel.populatingCurrentUserBlindedKeys( - currentUserBlinded15PublicKeyForThisThread: groupedOldData[viewModel.threadId]? - .first? - .currentUserBlinded15PublicKey, - currentUserBlinded25PublicKeyForThisThread: groupedOldData[viewModel.threadId]? - .first? - .currentUserBlinded25PublicKey - ) - } - ) - ], - (!data.isEmpty && (pageInfo.pageOffset + pageInfo.currentCount) < pageInfo.totalCount ? - [SectionModel(section: .loadMore)] : - [] - ) - ].flatMap { $0 } - } - - public func updateThreadData(_ updatedData: [SectionModel]) { - self.threadData = updatedData - } -} diff --git a/Session/Home/HomeScreenViewModel.swift b/Session/Home/HomeScreenViewModel.swift deleted file mode 100644 index 073e2a0e74..0000000000 --- a/Session/Home/HomeScreenViewModel.swift +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. - -import Foundation -import GRDB -import DifferenceKit -import SignalUtilitiesKit -import SessionMessagingKit -import SessionUtilitiesKit - -public class HomeScreenViewModel: ObservableObject { - @Published public var dataModel: HomeScreenDataModel - - private var dataChangeObservable: DatabaseCancellable? { - didSet { oldValue?.cancel() } // Cancel the old observable if there was one - } - private var hasLoadedInitialStateData: Bool = false - private var hasLoadedInitialThreadData: Bool = false - private var isLoadingMore: Bool = false - private var isAutoLoadingNextPage: Bool = false - - init(using dependencies: Dependencies, onReceivedInitialChange: (() -> ())? = nil) { - self.dataModel = HomeScreenDataModel(using: dependencies) - self.startObservingChanges(onReceivedInitialChange: onReceivedInitialChange) - } - - // MARK: - Updating - - public func startObservingChanges(didReturnFromBackground: Bool = false, onReceivedInitialChange: (() -> ())? = nil) { - guard dataChangeObservable == nil else { return } - - var runAndClearInitialChangeCallback: (() -> ())? = nil - - runAndClearInitialChangeCallback = { [weak self] in - guard self?.hasLoadedInitialStateData == true && self?.hasLoadedInitialThreadData == true else { return } - - onReceivedInitialChange?() - runAndClearInitialChangeCallback = nil - } - - dataChangeObservable = Storage.shared.start( - dataModel.observableState, - onError: { _ in }, - onChange: { [weak self] state in - // The default scheduler emits changes on the main thread - self?.dataModel.state = state - runAndClearInitialChangeCallback?() - } - ) - - self.dataModel.onThreadChange = { [weak self] updatedThreadData, changeset in - self?.dataModel.threadData = updatedThreadData - runAndClearInitialChangeCallback?() - } - - // Note: When returning from the background we could have received notifications but the - // PagedDatabaseObserver won't have them so we need to force a re-fetch of the current - // data to ensure everything is up to date - if didReturnFromBackground { - DispatchQueue.global(qos: .userInitiated).async { [weak self] in - self?.dataModel.pagedDataObserver?.reload() - } - } - } - - public func stopObservingChanges() { - // Stop observing database changes - self.dataChangeObservable = nil - self.dataModel.onThreadChange = nil - } - -// private func autoLoadNextPageIfNeeded() { -// guard -// self.hasLoadedInitialThreadData && -// !self.isAutoLoadingNextPage && -// !self.isLoadingMore -// else { return } -// -// self.isAutoLoadingNextPage = true -// -// DispatchQueue.main.asyncAfter(deadline: .now() + PagedData.autoLoadNextPageDelay) { [weak self] in -// self?.isAutoLoadingNextPage = false -// -// // Note: We sort the headers as we want to prioritise loading newer pages over older ones -// let sections: [(HomeViewModel.Section, CGRect)] = (self?.dataModel.threadData -// .enumerated() -// .map { index, section in (section.model, (self?.tableView.rectForHeader(inSection: index) ?? .zero)) }) -// .defaulting(to: []) -// let shouldLoadMore: Bool = sections -// .contains { section, headerRect in -// section == .loadMore && -// headerRect != .zero && -// (self?.tableView.bounds.contains(headerRect) == true) -// } -// -// guard shouldLoadMore else { return } -// -// self?.isLoadingMore = true -// -// DispatchQueue.global(qos: .userInitiated).async { [weak self] in -// self?.viewModel.pagedDataObserver?.load(.pageAfter) -// } -// } -// } -} diff --git a/Session/Meta/AppDelegate.swift b/Session/Meta/AppDelegate.swift index 1d314f669c..7c4713270e 100644 --- a/Session/Meta/AppDelegate.swift +++ b/Session/Meta/AppDelegate.swift @@ -591,13 +591,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD /// Start a timeout for the creation of the rootViewController setup process (if it takes too long then we want to give the user /// the option to export their logs) - let populateHomeScreenTimer: Timer = Timer.scheduledTimerOnMainThread( - withTimeInterval: AppDelegate.maxRootViewControllerInitialQueryDuration, - repeats: false - ) { [weak self] timer in - timer.invalidate() + /// Note: Refactor to fix `Capture of 'populateHomeScreenTimer' with non-sendable type 'Timer' in a @Sendable closure; this is an error in the Swift 6 language mode` + let populateHomeScreenTimer: DispatchSourceTimer? = DispatchSource.makeTimerSource(queue: .main) + populateHomeScreenTimer?.schedule(deadline: .now() + AppDelegate.maxRootViewControllerInitialQueryDuration) + populateHomeScreenTimer?.setEventHandler { [weak self] in self?.showFailedStartupAlert(calledFrom: lifecycleMethod, error: .startupTimeout) } + populateHomeScreenTimer?.resume() // All logic which needs to run after the 'rootViewController' is created let rootViewControllerSetupComplete: (UIViewController) -> () = { [weak self] rootViewController in @@ -650,7 +650,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD DispatchQueue.main.async { [dependencies] in let viewController = SessionHostingViewController(rootView: LandingScreen(using: dependencies)) viewController.setUpNavBarSessionIcon() - populateHomeScreenTimer.invalidate() + populateHomeScreenTimer?.cancel() rootViewControllerSetupComplete(viewController) } @@ -661,32 +661,25 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD ) viewController.setUpNavBarSessionIcon() viewController.setUpClearDataBackButton(flow: .register) - populateHomeScreenTimer.invalidate() + populateHomeScreenTimer?.cancel() rootViewControllerSetupComplete(viewController) } case .completed: DispatchQueue.main.async { [dependencies] in -// let viewController: HomeVC = HomeVC(using: dependencies) -// -// /// We want to start observing the changes for the 'HomeVC' and want to wait until we actually get data back before we -// /// continue as we don't want to show a blank home screen -// DispatchQueue.global(qos: .userInitiated).async { -// viewController.startObservingChanges() { -// populateHomeScreenTimer.invalidate() -// -// DispatchQueue.main.async { -// rootViewControllerSetupComplete(viewController) -// } -// } -// } - - let viewController = SessionHostingViewController(rootView: HomeScreen(using: dependencies)) - - populateHomeScreenTimer.invalidate() - - DispatchQueue.main.async { - rootViewControllerSetupComplete(viewController) + var homeScreen: HomeScreen = HomeScreen(using: dependencies) + let viewController = SessionHostingViewController(rootView: homeScreen) + viewController.setUpNavBarSessionHeading() + /// We want to start observing the changes for the 'HomeVC' and want to wait until we actually get data back before we + /// continue as we don't want to show a blank home screen + DispatchQueue.global(qos: .userInitiated).async { + homeScreen.startObservingChanges() { + populateHomeScreenTimer?.cancel() + + DispatchQueue.main.async { + rootViewControllerSetupComplete(viewController) + } + } } } } diff --git a/Session/Meta/Settings.bundle/ThirdPartyLicenses.plist b/Session/Meta/Settings.bundle/ThirdPartyLicenses.plist index 1e94962d94..6ca29b9545 100644 --- a/Session/Meta/Settings.bundle/ThirdPartyLicenses.plist +++ b/Session/Meta/Settings.bundle/ThirdPartyLicenses.plist @@ -985,6 +985,88 @@ SOFTWARE. License The MIT License (MIT) +Copyright (c) 2016 swiftlyfalling (https://github.com/swiftlyfalling) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + Title + session-grdb-swift + + + License + The author disclaims copyright to this source code. In place of +a legal notice, here is a blessing: + + * May you do good and not evil. + * May you find forgiveness for yourself and forgive others. + * May you share freely, never taking more than you give. + + Title + session-grdb-swift + + + License + /* +** LICENSE for the sqlite3 WebAssembly/JavaScript APIs. +** +** This bundle (typically released as sqlite3.js or sqlite3.mjs) +** is an amalgamation of JavaScript source code from two projects: +** +** 1) https://emscripten.org: the Emscripten "glue code" is covered by +** the terms of the MIT license and University of Illinois/NCSA +** Open Source License, as described at: +** +** https://emscripten.org/docs/introducing_emscripten/emscripten_license.html +** +** 2) https://sqlite.org: all code and documentation labeled as being +** from this source are released under the same terms as the sqlite3 +** C library: +** +** 2022-10-16 +** +** The author disclaims copyright to this source code. In place of a +** legal notice, here is a blessing: +** +** * May you do good and not evil. +** * May you find forgiveness for yourself and forgive others. +** * May you share freely, never taking more than you give. +*/ + + Title + session-grdb-swift + + + License + The author disclaims copyright to this source code. In place of +a legal notice, here is a blessing: + + May you do good and not evil. + May you find forgiveness for yourself and forgive others. + May you share freely, never taking more than you give. + + Title + session-grdb-swift + + + License + The MIT License (MIT) + Copyright (c) 2015 ibireme <ibireme@gmail.com> Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/Session/Meta/Translations/InfoPlist.xcstrings b/Session/Meta/Translations/InfoPlist.xcstrings index 460bb18a0b..7e1d224367 100644 --- a/Session/Meta/Translations/InfoPlist.xcstrings +++ b/Session/Meta/Translations/InfoPlist.xcstrings @@ -1 +1 @@ -{"sourceLanguage":"en","version":"1.0","strings":{"NSAppleMusicUsageDescription":{"localizations":{"uz":{"stringUnit":{"value":"Session media tarkiblarini ijro etish uchun Apple Music'dan foydalanishi kerak.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"Session moet Apple Music gebruiken om mediabijlagen af te spelen."}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita usar Apple Music para reproducir archivos adjuntos de medios."}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita utilitzar Apple Music per reproduir fitxers adjunts de suports."}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງໃຊ້ Apple Music ເພື່ອປ່ອຍແນບສື່ມວນຊົນ."}},"sk":{"stringUnit":{"value":"Session potrebuje používať Apple Music na prehrávanie mediálnych príloh.","state":"translated"}},"th":{"stringUnit":{"value":"Session ต้องใช้ Apple Music เพื่อเล่นไฟล์สื่อที่แนบมา","state":"translated"}},"hi":{"stringUnit":{"value":"मीडिया संलग्नक बजाने के लिए Session को Apple Music के उपयोग की आवश्यकता है।","state":"translated"}},"uk":{"stringUnit":{"value":"Session потребує використовувати Apple Music для відтворення медіавкладень.","state":"translated"}},"he":{"stringUnit":{"state":"translated","value":"Session זקוק ל-Apple Music כדי להפעיל צרופות מדיה."}},"kn":{"stringUnit":{"value":"Session ಗೆ ಮಾಧ್ಯಮ ಅಟ್ಯಾಚ್ಮೆಂಟ್‌ಗಳನ್ನು ಪ್ಲೇ ಮಾಡಲು ಆಪಲ್ ಮ್ಯೂಸಿಕ್ ಬಳಸಬೇಕು.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"Session behöver åtkomst till Apple Music för att spela upp bifogade mediafiler.","state":"translated"}},"eo":{"stringUnit":{"value":"Session bezonas uzi Apple Music por ludi aŭdvidaĵojn.","state":"translated"}},"fr":{"stringUnit":{"value":"Session doit accéder à Apple Music pour lire les pièces jointes multimédias.","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"Session, medya eklerini çalmak için Apple Music'i kullanmak zorunda."}},"fil":{"stringUnit":{"state":"translated","value":"Kinakailangang magamit ng Session ang Apple Music upang magpatugtog ng mga media attachment."}},"lt":{"stringUnit":{"value":"Session reikia naudoti Apple Music, kad galėtų leisti medijos priedus.","state":"translated"}},"ps":{"stringUnit":{"value":"Session میوزیک مولا زموږ توانیدونکی د Apple Music نه په لوبولوکې کارول کیږي.","state":"translated"}},"nb":{"stringUnit":{"state":"translated","value":"Session trenger å bruke Apple Music for å spille av mediavedlegg."}},"sl":{"stringUnit":{"value":"Session potrebuje uporabo Apple Music za predvajanje medijskih prilog.","state":"translated"}},"sr":{"stringUnit":{"state":"translated","value":"Session треба да користи Apple Music да би репродуковао медијске прилоге."}},"fi":{"stringUnit":{"state":"translated","value":"Session tarvitsee käyttää Apple Musiikkia mediasisältöjen toistamiseen."}},"be":{"stringUnit":{"state":"translated","value":"Session патрэбен доступ да Apple Music, каб прайграваць медыя ўкладанні."}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება Apple Music-ის გამოყენება მედიამიკრძურბების სათამაშოდ."}},"te":{"stringUnit":{"state":"translated","value":"మీడియా అటాచ్మెంట్‌లను ప్లే చేయడానికి Session Apple Musicను ఉపయోగించాలి."}},"vi":{"stringUnit":{"state":"translated","value":"Session cần sử dụng Apple Music để phát các tập tin đính kèm phương tiện."}},"it":{"stringUnit":{"state":"translated","value":"Session deve utilizzare Apple Music per riprodurre gli allegati multimediali."}},"xh":{"stringUnit":{"value":"Session kufuneka isebenzise uMculo weApple ukudlala iziphumo zemidiya.","state":"translated"}},"ar":{"stringUnit":{"value":"Session يحتاج استخدام Apple Music لتشغيل مرفقات الوسائط.","state":"translated"}},"pt-PT":{"stringUnit":{"value":"Session precisa usar o Apple Music para reproduzir anexos de multimédia.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"Sessionはメディア添付ファイルを再生するためにApple Musicを使用する必要があります"}},"ne-NP":{"stringUnit":{"value":"Session लाई मिडिया अट्याचमेन्टहरू प्ले गर्न एप्पल म्यूजिक प्रयोग गर्नु पर्छ।","state":"translated"}},"el":{"stringUnit":{"value":"Το Session χρειάζεται πρόσβαση στο Apple Music για αναπαραγωγή συνημμένων πολυμέσων.","state":"translated"}},"lv":{"stringUnit":{"value":"Session nepieciešams izmantot Apple Music, lai atskaņotu multivides pielikumus.","state":"translated"}},"gl":{"stringUnit":{"value":"Session necesita usar Apple Music para reproducir anexos multimedia.","state":"translated"}},"fa":{"stringUnit":{"value":"Session باید از Apple Music برای پخش پیوست‌های رسانه‌ای استفاده کند.","state":"translated"}},"bn":{"stringUnit":{"value":"মিডিয়া সংযুক্তি প্লে করার জন্য Session কে Apple Music ব্যবহার করতে হবে।","state":"translated"}},"km":{"stringUnit":{"state":"translated","value":"Session ត្រូវការប្រើប្រាស់ Apple Music ដើម្បីចាក់មេឌៀភ្ជាប់"}},"si-LK":{"stringUnit":{"value":"මාධ්‍ය ඇමුණුම් වාදනය කිරීමට Session ට Apple Music භාවිත කිරීම අවශ්‍යයි.","state":"translated"}},"es-419":{"stringUnit":{"value":"Session necesita usar Apple Music para reproducir archivos adjuntos multimedia.","state":"translated"}},"sq":{"stringUnit":{"value":"Session ka nevojë të përdorë Apple Music për të luajtur attachment-e mediaje.","state":"translated"}},"my":{"stringUnit":{"value":"Session သည် Apple Music ကို အသုံးပြု၍ မီဒီယာလုံခြုံမှုကို ဖွင့်ရန် လိုအပ်သည်။","state":"translated"}},"sr-RS":{"stringUnit":{"value":"Session treba da koristi Apple Music za reprodukciju medijskih priloga.","state":"translated"}},"az":{"stringUnit":{"state":"translated","value":"Session media qoşmalarını oxutmaq üçün Apple Music-i istifadə etməlidir."}},"mk":{"stringUnit":{"value":"Session има потреба од Apple Music за да ги репродуцира медиумските прилози.","state":"translated"}},"mn":{"stringUnit":{"value":"Session медиа хавсралтуудыг тоглуулахын тулд Apple Music-ийг ашиглах хэрэгтэй.","state":"translated"}},"hr":{"stringUnit":{"value":"Session treba koristiti Apple Music za reprodukciju medijskih privitaka.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"Session permiya bikar anînina Apple Music hewce dike da ku tesawirên medyayê bixebitîne."}},"et":{"stringUnit":{"value":"Session vajab Apple Musici kasutamist, et esitada meediamanuseid.","state":"translated"}},"ro":{"stringUnit":{"value":"Session are nevoie de acces la Apple Music pentru a reda atașamente media.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa usar a Apple Music para reproduzir anexos de mídia."}},"sh":{"stringUnit":{"value":"Session treba koristiti Apple Music za reprodukciju medijskih privitaka.","state":"translated"}},"ur-IN":{"stringUnit":{"value":"Session کو میڈیا اٹیچمنٹ چلانے کے لیے ایپل میوزک کا استعمال کرنا ہوگا۔","state":"translated"}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k Apple Music erabiltzea behar du hedabide eranskinak erreproduzitzeko."}},"bal":{"stringUnit":{"state":"translated","value":"Session xیس پاتبسینہ ایپل موزیک لو پہ اجرأ ہٰن اختیارات استعمالے"}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要使用Apple Music来播放媒体附件。"}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਮੀਡੀਆ ਅਟੈਚਮੈਂਟਸ ਖੇਡਣ ਲਈ ਐਪਲ ਮਿਊਜ਼ਿਕ ਵਰਤਣ ਦੀ ਲੋੜ ਹੈ।"}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje použít Apple Music pro přehrávání mediálních příloh."}},"lg":{"stringUnit":{"state":"translated","value":"Session keetaaga kuzannyisa Apple Music okuzannyisa ekwatibwako okuva mu mikutu."}},"da":{"stringUnit":{"state":"translated","value":"Session skal bruge Apple Music for at afspille medievedhæftninger."}},"ta":{"stringUnit":{"state":"translated","value":"Session மெடியா இணைப்புகளை விளையாட Apple Music ஐ பயன்படுத்த வேண்டும்."}},"nn-NO":{"stringUnit":{"value":"Session trenger Apple Music for å spille av media-vedlegg.","state":"translated"}},"id":{"stringUnit":{"value":"Session membutuhkan Apple Music untuk memutar lampiran media.","state":"translated"}},"sw":{"stringUnit":{"value":"Session inahitaji kutumia Apple Music kucheza viambatanisho vya vyombo vya habari.","state":"translated"}},"af":{"stringUnit":{"value":"Session moet Apple Music gebruik om media-aanhegsels te speel.","state":"translated"}},"bg":{"stringUnit":{"value":"Session трябва да използва Apple Music, за да възпроизвежда медийни прикачени файлове.","state":"translated"}},"cy":{"stringUnit":{"value":"Mae angen i Session ddefnyddio Apple Music i chwarae atodiadau cyfryngau.","state":"translated"}},"en":{"stringUnit":{"value":"Session needs to use Apple Music to play media attachments.","state":"translated"}},"ko":{"stringUnit":{"value":"Session은 미디어 첨부 파일을 재생하기 위해 Apple Music을 사용해야 합니다.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 需要使用 Apple Music 來播放媒體附件。"}},"hy-AM":{"stringUnit":{"value":"Session-ը պետք է օգտագործի Apple Music՝ մեդիա կցորդները նվագարկելու համար։","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt Zugriff auf Apple Music, um Medienanhänge abzuspielen."}},"ny":{"stringUnit":{"value":"Session iyenera kugwiritsa ntchito Apple Music kuti izisintha ma attachment a media.","state":"translated"}},"ms":{"stringUnit":{"value":"Session perlu menggunakan Apple Music untuk memainkan lampiran media.","state":"translated"}},"hu":{"stringUnit":{"value":"Session-nak szüksége van az Apple Music használatára a média mellékletek lejátszásához.","state":"translated"}},"ha":{"stringUnit":{"state":"translated","value":"Session yana buƙatar amfani da Apple Music don kunna abin haɗe-haɗen kafofin watsa labarai."}},"ru":{"stringUnit":{"state":"translated","value":"Session требуется доступ к Apple Music для воспроизведения медиафайлов."}},"pl":{"stringUnit":{"state":"translated","value":"Do odtwarzania załączników multimedialnych aplikacja Session potrzebuje używać aplikacji Apple Music."}}},"extractionState":"manual"},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"ms":{"stringUnit":{"value":"Ciri kunci skrin pada Session menggunakan Face ID.","state":"translated"}},"vi":{"stringUnit":{"state":"translated","value":"Tính năng khóa màn hình trên Session sử dụng Face ID."}},"ny":{"stringUnit":{"state":"translated","value":"Ntchito yotseka chinsalu pa Session imagwiritsa ntchito Face ID."}},"kn":{"stringUnit":{"value":"Session ನ ತರ್ಣ್ ಲಾಕ್ ವೈಶಿಷ್ಟ್ಯವು ಫೇಸ್ ಐಡಿ ಅನ್ನು ಬಳಸುತ್ತದೆ.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"Sessionको स्क्रिन लक विशेषताले Face ID प्रयोग गर्छ।"}},"ro":{"stringUnit":{"state":"translated","value":"Funcția de blocare a ecranului din Session folosește Face ID."}},"bg":{"stringUnit":{"state":"translated","value":"Функцията за заключване на екрана в Session използва Face ID."}},"ja":{"stringUnit":{"value":"Session の画面ロック機能はFace IDを使用します。","state":"translated"}},"bal":{"stringUnit":{"value":"Session رو پیلناکردگ لاگو کردانت پاس ID.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session的屏幕锁功能使用 Face ID。"}},"eu":{"stringUnit":{"value":"Session-ko pantaila blokeatzearen funtzioak Face ID erabiltzen du.","state":"translated"}},"ka":{"stringUnit":{"value":"ეკრანის დაბლოკვის ფუნქცია Session-ზე იყენებს Face ID-ს","state":"translated"}},"sr":{"stringUnit":{"value":"Функција закључавања екрана на Session користи Face ID.","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"Session पर स्क्रीन लॉक फीचर Face ID का उपयोग करता है।"}},"sv-SE":{"stringUnit":{"value":"Skärmlåsfunktionen på Session använder Face ID.","state":"translated"}},"xh":{"stringUnit":{"state":"translated","value":"Umsebenzi wokutshixa isikrini kwi-Session usebenzisa i-Face ID."}},"nl":{"stringUnit":{"state":"translated","value":"De vergrendelfunctie op Session gebruikt Face ID."}},"pt-PT":{"stringUnit":{"value":"A funcionalidade de bloqueio de ecrã Session usa Face ID.","state":"translated"}},"mk":{"stringUnit":{"value":"Функцијата за заклучување екранот во Session користи Face ID.","state":"translated"}},"el":{"stringUnit":{"value":"Η λειτουργία κλειδώματος οθόνης στο Session χρησιμοποιεί το Face ID.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"Session의 화면 잠금 기능은 Face ID를 사용합니다."}},"lv":{"stringUnit":{"value":"Ekrāna bloķēšanas funkcija lietotnē Session izmanto Face ID.","state":"translated"}},"ha":{"stringUnit":{"state":"translated","value":"Tsarin kulle allo akan Session yana amfani da Face ID."}},"af":{"stringUnit":{"value":"Die skermsluitfunksie op Session gebruik Face ID.","state":"translated"}},"ca":{"stringUnit":{"value":"La funció de bloqueig de pantalla en Session utilitza Face ID.","state":"translated"}},"ta":{"stringUnit":{"state":"translated","value":"Session இல் திரை பூட்டு அம்சம் முக அடையாளத்தை பயன்படுத்துகிறது."}},"be":{"stringUnit":{"value":"Функцыя блакіроўкі экрана ў Session выкарыстоўвае Face ID.","state":"translated"}},"ps":{"stringUnit":{"state":"translated","value":"د Session سکرین لاک فیچر د مخ پيژندنه (Face ID) کاروي."}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ի էկրանային կողպման հատկությունը օգտագործում է Face ID:"}},"lg":{"stringUnit":{"state":"translated","value":"Enkozesa y'ekiwandiiko k'amaaso ekiriko Session ekosa Face ID."}},"he":{"stringUnit":{"state":"translated","value":"תכונת נעילת המסך ב-Session משתמשת בזיהוי פנים."}},"bn":{"stringUnit":{"value":"Session এর স্ক্রিন লক ফিচারটি ফেস আইডি ব্যবহৃত হয়।","state":"translated"}},"sq":{"stringUnit":{"state":"translated","value":"Veçoria e mbylljes së ekranit në Session përdor Face ID."}},"pt-BR":{"stringUnit":{"state":"translated","value":"A funcionalidade de bloqueio de tela no Session usa reconhecimento facial."}},"it":{"stringUnit":{"state":"translated","value":"La funzione di blocco schermo su Session usa il Face ID."}},"sh":{"stringUnit":{"state":"translated","value":"Značajka zaključavanja ekrana na Session koristi Face ID."}},"sw":{"stringUnit":{"state":"translated","value":"Kipengele cha kufuli skrini kwenye Session kinatumia Face ID."}},"ku":{"stringUnit":{"state":"translated","value":"Taybetmendiya serrnderkî ya Session bi Face ID bicîh dike."}},"sr-RS":{"stringUnit":{"state":"translated","value":"Funkcija zaključavanja ekrana na Session koristi Face ID."}},"cs":{"stringUnit":{"state":"translated","value":"Funkce zamčení obrazovky Session používá Face ID."}},"hr":{"stringUnit":{"state":"translated","value":"Funkcija zaključavanja zaslona na Session koristi Face ID."}},"sl":{"stringUnit":{"value":"Funkcija zaklepanja zaslona na Session uporablja Face ID.","state":"translated"}},"my":{"stringUnit":{"state":"translated","value":"Session တွင် အမ်ကာ မျက်နှာ မြင်စနစ် लॉग इन ၏ လုံခြုံစေသည်။"}},"sk":{"stringUnit":{"state":"translated","value":"Funkcia zámku obrazovky na Session používa Face ID."}},"fi":{"stringUnit":{"value":"Näytön lukitusominaisuus Session käyttää Face ID:tä.","state":"translated"}},"si-LK":{"stringUnit":{"value":"Session මත තිර අගුළු විශේෂාංගය Face ID භාවිතා කරයි.","state":"translated"}},"eo":{"stringUnit":{"value":"La ŝlosila ekrano en Session uzas Vizaĝo-ID.","state":"translated"}},"nn-NO":{"stringUnit":{"value":"Skjermlåsfunksjonen på Session bruker Face ID.","state":"translated"}},"fil":{"stringUnit":{"value":"Ang screen lock feature ng Session ay gumagamit ng Face ID.","state":"translated"}},"ru":{"stringUnit":{"value":"Функция блокировки экрана в Session использует Face ID.","state":"translated"}},"pl":{"stringUnit":{"value":"Funkcja blokady ekranu w aplikacji Session używa Face ID.","state":"translated"}},"lt":{"stringUnit":{"state":"translated","value":"Ekrano užraktas Session naudoja Face ID."}},"cy":{"stringUnit":{"state":"translated","value":"Mae'r nodwedd cloi sgrin ar Session yn defnyddio ID Wyneb."}},"uk":{"stringUnit":{"state":"translated","value":"Функція блокування екрана в Session використовує Face ID."}},"hu":{"stringUnit":{"value":"A Session képernyőzár funkciója Face ID-t használ.","state":"translated"}},"et":{"stringUnit":{"value":"Session ekraaniluku funktsioon kasutab Face ID-d.","state":"translated"}},"az":{"stringUnit":{"state":"translated","value":"Session tətbiqinin ekran kilidi özəlliyi Face ID istifadə edir."}},"mn":{"stringUnit":{"state":"translated","value":"Session дэлгэц түгжихэд Face ID ашиглана."}},"fa":{"stringUnit":{"state":"translated","value":"ویژگی قفل صفحه در Session از Face ID استفاده می‌کند."}},"ur-IN":{"stringUnit":{"value":"Session پر سکرین لاک خصوصیت Face ID کا استعمال کرتی ہے۔","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"Session ekran kilidi özelliği Face ID kullanır."}},"km":{"stringUnit":{"state":"translated","value":"The screen lock feature on Session uses Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"ميزة قفل الشاشة على Session تستخدم Face ID."}},"pa-IN":{"stringUnit":{"value":"Session ਉੱਤੇ ਸਕرين ਲਾਕ ਫੀਚਰ Face ID ਵਰਤਦਾ ਹੈ।","state":"translated"}},"de":{"stringUnit":{"value":"Die Bildschirmsperrfunktion von Session verwendet Face ID.","state":"translated"}},"es-419":{"stringUnit":{"value":"La función de pantalla bloqueada en Session usa Face ID.","state":"translated"}},"en":{"stringUnit":{"value":"The screen lock feature on Session uses Face ID.","state":"translated"}},"es-ES":{"stringUnit":{"value":"La función de bloqueo de pantalla en Session usa Face ID.","state":"translated"}},"id":{"stringUnit":{"value":"Fitur kunci layar pada Session menggunakan Face ID.","state":"translated"}},"da":{"stringUnit":{"value":"Skærmlåsfunktionen på Session bruger Face ID.","state":"translated"}},"uz":{"stringUnit":{"value":"Session dagi ekran blokirovkasi funksiyasi Face ID dan foydalanadi.","state":"translated"}},"gl":{"stringUnit":{"value":"A funcionalidade de bloqueo de pantalla en Session usa Face ID.","state":"translated"}},"te":{"stringUnit":{"state":"translated","value":"Sessionలో స్క్రీన్ లాక్ ఫీచర్ ఫేస్ ఐడి నీ ఉపయోగిస్తుంది."}},"th":{"stringUnit":{"state":"translated","value":"ฟีเจอร์ล็อกหน้าจอใน Session ใช้ Face ID"}},"fr":{"stringUnit":{"state":"translated","value":"La fonctionnalité de verrouillage d'écran sur Session utilise Face ID."}},"nb":{"stringUnit":{"state":"translated","value":"Skjermlåsfunksjonen på Session bruker Face ID."}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 上的螢幕鎖功能使用 Face ID。"}}}},"CFBundleName":{"extractionState":"extracted_with_value","localizations":{"en":{"stringUnit":{"value":"Session","state":"new"}}},"comment":"Bundle name"},"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"hr":{"stringUnit":{"state":"translated","value":"Session treba pristup mikrofonu za obavljanje poziva i snimanje audio poruka."}},"bal":{"stringUnit":{"state":"translated","value":"Session مایکروفون پاتبسینہ حاصل نودہ کلمات پیغامشین زانت"}},"ny":{"stringUnit":{"state":"translated","value":"Session iyenera kuitanira microphone kuti ipangane mafoni ndi kujambula mauthenga am'mawu."}},"he":{"stringUnit":{"state":"translated","value":"Session צריך הרשאת מיקרופון לשיחות ולהודעות שמע."}},"ur-IN":{"stringUnit":{"value":"Session کو کال کرنے اور آڈیو پیغامات ریکارڈ کرنے کے لیے مائیکروفون تک رسائی درکار ہے۔","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs microphone access to make calls and record audio messages."}},"th":{"stringUnit":{"value":"Session ต้องได้รับอนุญาตให้เข้าถึงไมโครโฟนเพื่อโทรและบันทึกข้อความเสียง","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso al micrófono para hacer llamadas y grabar mensajes de audio."}},"af":{"stringUnit":{"state":"translated","value":"Session het mikrofoon toegang nodig om oproepe te maak en oudioboodskappe op te neem."}},"es-419":{"stringUnit":{"value":"Session necesita acceso al micrófono para hacer llamadas y grabar mensajes de audio.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"Session permiya mîkrofon hewce dike da ku lêgerîn bike û peyman dengî record bike."}},"lo":{"stringUnit":{"value":"Session ຕ້ອງການເຂົ້າເຖິງໄມໂຄໂຟນເພື່ອໂທແລະບັນທຶກເສັຽງຂໍ້ຄວາມສຽງ.","state":"translated"}},"az":{"stringUnit":{"value":"Session zəng etmək və səsli mesajlar yazmaq üçün mikrofona müraciət etməlidir.","state":"translated"}},"lg":{"stringUnit":{"value":"Session yeetaaga ssensa ya mmikirofono okukola eyitibwamu n’okuwandiika obubaka obuweereze.","state":"translated"}},"ru":{"stringUnit":{"value":"Session требуется доступ к микрофону для совершения звонков и записи голосовых сообщений.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao microfone para fazer chamadas e gravar mensagens de áudio."}},"fil":{"stringUnit":{"state":"translated","value":"Ang Session ay nangangailangan ng access sa mikropono upang tumawag at mag-record ng mga mensaheng audio."}},"hi":{"stringUnit":{"state":"translated","value":"कॉल करने और ऑडियो संदेश रिकॉर्ड करने के लिए Session को माइक्रोफोन एक्सेस की आवश्यकता है।"}},"sr":{"stringUnit":{"value":"Session треба дозволу за микрофон да би обављао позиве и снимао аудио поруке.","state":"translated"}},"mn":{"stringUnit":{"value":"Session дуудлага хийх болон аудио мессеж бичихийн тулд микрофоны хандалт хэрэгтэй.","state":"translated"}},"fi":{"stringUnit":{"value":"Session tarvitsee mikrofonin käyttöoikeuden puheluiden soittamiseen ja ääniviestien nauhoittamiseen.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"Session برای برقراری تماس و ضبط پیام‌های صوتی نیاز به دسترسی میکروفن دارد."}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од пристап до микрофонот за да врши повици и снима аудио пораки."}},"vi":{"stringUnit":{"value":"Session cần quyền truy cập microphone để gọi điện và ghi âm tin nhắn thoại.","state":"translated"}},"sh":{"stringUnit":{"value":"Session treba pristup mikrofonu za obavljanje poziva i snimanje audio poruka.","state":"translated"}},"hy-AM":{"stringUnit":{"value":"Session-ը պահանջում է խոսափողին հասանելիություն զանգեր կատարելու և ձայնային հաղորդագրություններ արձանագրելու համար։","state":"translated"}},"uk":{"stringUnit":{"value":"Session потребує доступу до мікрофона для здійснення дзвінків та запису голосових повідомлень.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt Mikrofonzugriff, um Anrufe zu tätigen und Audionachrichten aufzuzeichnen."}},"nb":{"stringUnit":{"state":"translated","value":"Session trenger mikrofontilgang for å ringe og spille inn lydmeldinger."}},"ha":{"stringUnit":{"value":"Session yana buƙatar samun damar makirufo don yin kira da rikodin saƙonnin murya.","state":"translated"}},"ko":{"stringUnit":{"state":"translated","value":"Session은 통화를 하고 음성 메시지를 녹음하기 위해 마이크 접근이 필요합니다."}},"sk":{"stringUnit":{"value":"Session potrebuje prístup k mikrofónu na uskutočnenie hovorov a nahranie zvukových správ.","state":"translated"}},"sv-SE":{"stringUnit":{"state":"translated","value":"Session behöver mikrofonåtkomst för att ringa och spela in ljudmeddelanden."}},"tr":{"stringUnit":{"state":"translated","value":"Session, arama yapmak ve sesli mesaj kaydetmek için mikrofon erişimine ihtiyaç duyar."}},"lt":{"stringUnit":{"value":"Session reikia prieigos prie mikrofono, kad galėtumėte skambinti ir įrašinėti garso žinutes.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"Session ir nepieciešama piekļuve mikrofonam, lai veiktu zvanus un ierakstītu audio ziņas."}},"sr-RS":{"stringUnit":{"state":"translated","value":"Session treba pristup mikrofonu da bi obavljao pozive i snimao audio poruke."}},"sl":{"stringUnit":{"value":"Session potrebuje dostop do mikrofona za klice in snemanje zvočnih sporočil.","state":"translated"}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita accés al micròfon per fer trucades i gravar missatges d'àudio."}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita acceder ao micrófono para facer chamadas e gravar mensaxes de audio."}},"eu":{"stringUnit":{"value":"Session(e)k mikrofonoaren sarbidea behar du deiak egiteko eta audio mezuak grabatzeko.","state":"translated"}},"km":{"stringUnit":{"value":"Session ត្រូវការវិស្សមន្តងសម្រាប់ដាក់ស្នើរ និងថតសារ​សំឡេង។","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao microfone para fazer chamadas e gravar mensagens de áudio."}},"ne-NP":{"stringUnit":{"state":"translated","value":"Session लाई कल गर्न र अडियो सन्देशहरू रेकर्ड गर्न माइक्रोफोनको पहुँच आवश्यक छ।"}},"sw":{"stringUnit":{"value":"Session inahitaji ruhusa ya kipaza sauti kupiga simu na kurekodi ujumbe wa sauti.","state":"translated"}},"ms":{"stringUnit":{"value":"Session memerlukan akses mikrofon untuk membuat panggilan dan merakam mesej audio.","state":"translated"}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas mikrofonan aliron por fari vokojn kaj registri aŭdajn mesaĝojn."}},"ro":{"stringUnit":{"value":"Session are nevoie de acces la microfon pentru a efectua apeluri și a înregistra mesaje audio.","state":"translated"}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要麦克风访问权限来进行语音通话及录制语音消息。"}},"te":{"stringUnit":{"value":"కాల్ చేయడానికి మరియు ఆడియో సందేశాలను రికార్డ్ చేయడానికి Session మైక్రోఫోన్ యాక్సెస్ అవసరం.","state":"translated"}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 需要麥克風存取權來語音通話和錄製語音訊息。"}},"kn":{"stringUnit":{"value":"Session ಗೆ ಕಾಲ್‌ಗಳು ಮಾಡಲು ಮತ್ತು ಆಡಿಯೊ ಸಂದೇಶಗಳನ್ನು ದಾಖಲು ಮಾಡಲು ಮೈಕ್ರೊಫೋನ್ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ.","state":"translated"}},"it":{"stringUnit":{"value":"Session richiede l'accesso al microfono per effettuare chiamate e registrare messaggi audio.","state":"translated"}},"id":{"stringUnit":{"value":"Session membutuhkan akses mikrofon untuk melakukan panggilan dan merekam pesan audio.","state":"translated"}},"cy":{"stringUnit":{"state":"translated","value":"Mae Session angen mynediad i'r meicroffon i wneud galwadau a recordio negeseuon sain."}},"be":{"stringUnit":{"value":"Session патрэбен доступ да мікрафона, каб здзяйсняць званкі і запісваць аўдыя паведамленні.","state":"translated"}},"bn":{"stringUnit":{"state":"translated","value":"কল করার জন্য এবং অডিও মেসেজ রেকর্ড করার জন্য Session এর মাইক্রোফোন অ্যাকসেস প্রয়োজন।"}},"el":{"stringUnit":{"value":"Το Session χρειάζεται πρόσβαση στο μικρόφωνο για την αποστολή ηχητικών μηνυμάτων.","state":"translated"}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje přístup k mikrofonu pro volání a nahrávání zvukových zpráv."}},"da":{"stringUnit":{"value":"Session kræver mikrofonadgang for at foretage opkald og optage lydmeddelelser.","state":"translated"}},"ar":{"stringUnit":{"value":"Session يحتاج إذن الوصول إلى الميكروفون لإجراء المكالمات وتسجيل الرسائل الصوتية.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"Session a besoin de l’accès au microphone pour passer des appels et enregistrer des messages audio."}},"xh":{"stringUnit":{"state":"translated","value":"Session ifuna ukufikelela kwisixhobo somculo wokwenza iminxeba kunye nokurekhoda imiyalezo yesandi."}},"nn-NO":{"stringUnit":{"value":"Session trenger mikrofontilgang for å ringe og ta opp lydmeldinger.","state":"translated"}},"nl":{"stringUnit":{"state":"translated","value":"Session heeft toegang tot de microfoon nodig om audioberichten op te nemen."}},"pl":{"stringUnit":{"state":"translated","value":"Aby wykonywać połączenia i nagrywać wiadomości audio, aplikacja Session potrzebuje dostępu do mikrofonu."}},"ta":{"stringUnit":{"value":"Session அழைப்புகளை செய்ய மற்றும் ஆடியோ தகவல்களை பதிவு செய்ய மைக்ரோஃபோன் அணுகல் தேவை.","state":"translated"}},"bg":{"stringUnit":{"state":"translated","value":"Session се нуждае от достъп до микрофона, за да осъществява обаждания и записва аудио съобщения."}},"ps":{"stringUnit":{"value":"Session د غږیزو پیغامونو لیږلو کولو لپاره مایکروفون ته اړتیا لري.","state":"translated"}},"uz":{"stringUnit":{"value":"Session qo'ng'iroq qilish va audio xabarlarni yozish uchun mikrofon kirishini talab qiladi.","state":"translated"}},"et":{"stringUnit":{"value":"Session vajab mikrofoni juurdepääsu, et teha kõnesid ja salvestada helisõnumeid.","state":"translated"}},"hu":{"stringUnit":{"state":"translated","value":"Session alkalmazásnak mikrofon-hozzáférésre van szüksége hívások bonyolítására és hangüzeneteket rögzítésére."}},"sq":{"stringUnit":{"value":"Session ka nevojë për leje përdorimi të mikrofonit për të bërë thirrje dhe për të regjistruar mesazhe audio.","state":"translated"}},"pa-IN":{"stringUnit":{"value":"Session ਨੂੰ ਕਾਲਾ ਕਰਣ ਅਤੇ ਆਡੀਓ ਸੁਨੇਹੇ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਮਾਈਕਰੋਫੋਨ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।","state":"translated"}},"my":{"stringUnit":{"state":"translated","value":"Session မှ ဖုန်းခေါ်ဆိုမှုများနှင့် အသံမက်ဆေ့များကို မှတ်တမ်းတင်ရန် မိုက်ခရိုဖုန်းအသုံးပြုခွင့် လိုအပ်ပါတယ်။"}},"si-LK":{"stringUnit":{"value":"ඇමතුම් ලබා දීම සහ ශ්‍රව්‍ය පණිවිඩ පටිගත කිරීම සඳහා Sessionට මයික්‍රෆෝන ප්‍රවේශය අවශ්‍යයි.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"Sessionで通話をかけたり、音声メッセージを録音するにはマイクへのアクセスが必要です。"}},"ka":{"stringUnit":{"value":"Session-ს სჭირდება მიკროფონის წვდომა ზარების შესასრულებლად და აუდიო შეტყობინებების ჩასაწერად.","state":"translated"}}}},"NSPhotoLibraryAddUsageDescription":{"localizations":{"lo":{"stringUnit":{"value":"Session ຕ້ອງການເຂົ້າເຖິງຟາຍເພື່ອບັນທຶກຢາງແລະວິດີໂອ.","state":"translated"}},"hr":{"stringUnit":{"state":"translated","value":"Session treba pristup memoriji za spremanje privitaka i medija."}},"eu":{"stringUnit":{"value":"Session(e)k biltegirako sarbidea behar du eranskinak eta hedabideak gordetzeko.","state":"translated"}},"ku":{"stringUnit":{"state":"translated","value":"Session permiya hilkişina xelasî û medyayê hewce dike."}},"fa":{"stringUnit":{"state":"translated","value":"Session برای ذخیره پیوست‌ها و رسانه‌ها نیاز به دسترسی به حافظه دارد."}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو منسلکات اور میڈیا محفوظ کرنے کے لیے اسٹوریج کی اجازت درکار ہے۔"}},"uz":{"stringUnit":{"value":"Session fayl va media tarkiblarini saqlash uchun saqlashga kirishni talab qiladi.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"Session skal have lageradgang for at gemme vedhæftninger og mediefiler."}},"ru":{"stringUnit":{"state":"translated","value":"Session требуется доступ к хранилищу для сохранения вложений и медиафайлов."}},"lt":{"stringUnit":{"value":"Session reikia prieigos prie saugyklos, kad galėtų įrašyti priedus ir mediją.","state":"translated"}},"pa-IN":{"stringUnit":{"value":"Session ਨੂੰ ਅਟੈਚਮੈਂਟਸ ਅਤੇ ਮੀਡੀਆ ਸੰਭਾਲਣ ਲਈ ਸਟੋਰੇਜ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।","state":"translated"}},"zh-TW":{"stringUnit":{"value":"Session 需要存儲權限以保存附件和媒體。","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"Aby zapisywać załączniki i multimedia, aplikacja Session potrzebuje dostępu do pamięci."}},"es-419":{"stringUnit":{"value":"Session necesita acceso al almacenamiento para guardar adjuntos y multimedia.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"Session लाई अट्याचमेन्ट र मिडिया सेभ गर्न स्टोरज पहुँच आवश्यक छ।","state":"translated"}},"id":{"stringUnit":{"value":"Session membutuhkan akses penyimpanan untuk menyimpan lampiran dan media.","state":"translated"}},"sl":{"stringUnit":{"state":"translated","value":"Session potrebuje dostop do shrambe za shranjevanje prilog in medijev."}},"zh-CN":{"stringUnit":{"value":"Session需要存储权限来保存附件和媒体。","state":"translated"}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება მეხსიერების წვდომა მიმაგრებული ფაილებისა და მედიების შესანახად."}},"uk":{"stringUnit":{"value":"Session потребує доступу до сховища для збереження вкладень та медіа.","state":"translated"}},"hy-AM":{"stringUnit":{"value":"Session-ը պահանջում է պահեստային հասանելիություն կցորդներն ու մեդիան պահպանելու համար։","state":"translated"}},"nl":{"stringUnit":{"value":"Session heeft opslagtoegang nodig om bijlagen en media op te slaan.","state":"translated"}},"bg":{"stringUnit":{"value":"Session се нуждае от достъп до хранилището, за да запазва прикачени файлове и медия.","state":"translated"}},"tr":{"stringUnit":{"state":"translated","value":"Session, ekleri ve medyayı kaydetmek için depolama erişimine ihtiyaç duyar."}},"af":{"stringUnit":{"value":"Session het berging toegang nodig om aanhegsels en media te stoor.","state":"translated"}},"ps":{"stringUnit":{"state":"translated","value":"Session پیوستونونو او میډیا خوندي کولو لپاره ذخیره کولو ته اړتیا لري."}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya hifadhi ili kuhifadhi viambatanisho na vyombo vya habari."}},"eo":{"stringUnit":{"value":"Session bezonas aliron al memoro por konservi aldonaĵojn kaj aŭdvidaĵojn.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao armazenamento para salvar anexos e mídias."}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt Speicherzugriff, um Anhänge und Medien zu speichern."}},"ny":{"stringUnit":{"value":"Session imafuna mwayi wosungira kuti asunge attachments ndi media.","state":"translated"}},"bn":{"stringUnit":{"value":"সংযুক্তি এবং মিডিয়া সংরক্ষণ করতে Session এর স্টোরেজ অ্যাকসেস প্রয়োজন।","state":"translated"}},"lg":{"stringUnit":{"value":"Session yeetaaga ssensa y’obusobozi okusigala ekwatibwako aammaamu n’emikutu.","state":"translated"}},"it":{"stringUnit":{"value":"Session richiede l'accesso allo storage per salvare allegati e media.","state":"translated"}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од пристап до складиштето за да зачува прилози и медиуми."}},"my":{"stringUnit":{"state":"translated","value":"Session သည် ပူးတွဲချက်များနှင့် မီဒီယာကို သိမ်းဆည်းရန် သိုလှောင်မှုခွင့်ပြုချက်လိုအပ်ပါသည်။"}},"ms":{"stringUnit":{"state":"translated","value":"Session memerlukan akses storan untuk menyimpan lampiran dan media."}},"vi":{"stringUnit":{"state":"translated","value":"Session cần quyền truy cập lưu trữ để lưu các tập tin đính kèm và phương tiện."}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje přístup k úložišti pro ukládání příloh a médií."}},"sk":{"stringUnit":{"state":"translated","value":"Session potrebuje prístup k úložisku na uloženie príloh a médií."}},"ko":{"stringUnit":{"state":"translated","value":"Session은 첨부 파일과 미디어를 저장하기 위해 저장 공간 접근이 필요합니다."}},"en":{"stringUnit":{"state":"translated","value":"Session needs storage access to save attachments and media."}},"lv":{"stringUnit":{"value":"Session ir nepieciešama pieeja glabātuve failu un multimediju saglabāšanai.","state":"translated"}},"kn":{"stringUnit":{"state":"translated","value":"Session ಗೆ ಅಟ್ಯಾಚ್ಮೆಂಟ್‌ಗಳು ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ಉಳಿಸಲು ಸಂಗ್ರಹಣೆಯ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ."}},"hu":{"stringUnit":{"state":"translated","value":"Session alkalmazásnak tárhely-hozzáférésre van szüksége a mellékletek és médiák mentéséhez."}},"km":{"stringUnit":{"state":"translated","value":"Session ត្រូវការចូលប្រើវើសកម្មដើម្បីរក្សាទុកឯកសារ និងមេឌៀ។"}},"cy":{"stringUnit":{"value":"Mae Session angen mynediad i storio i gadw atodiadau a chyfryngau.","state":"translated"}},"be":{"stringUnit":{"value":"Session патрабуе дазволу да сховішча каб захоўваць ўкладанні і медыя.","state":"translated"}},"sq":{"stringUnit":{"value":"Session ka nevojë për leje të hapësirës ruajtëse për të ruajtur attachment-et dhe median.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao armazenamento para salvar anexos e mídia."}},"ro":{"stringUnit":{"value":"Session are nevoie de acces la spațiul de stocare pentru a salva atașamente și media.","state":"translated"}},"ca":{"stringUnit":{"value":"Session necessita accés a l'emmagatzematge per desar els fitxers adjunts i els suports.","state":"translated"}},"az":{"stringUnit":{"value":"Session qoşmaları və medianı saxlamaq üçün anbara müraciət etməlidir.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"Session doit accéder au stockage pour enregistrer les pièces jointes et les médias."}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita permiso para acceder ao almacenamento para gardar anexos e medios."}},"xh":{"stringUnit":{"state":"translated","value":"Session ifuna ukufikelela kwindawo yokugcina ukuthumela iziphumo kunye nemidiya."}},"sv-SE":{"stringUnit":{"value":"Session behöver åtkomst till lagringsutrymmet för att kunna spara bifogade filer och media.","state":"translated"}},"bal":{"stringUnit":{"value":"Session ذخیرہ پاتبسینہ محفوظ عریض او ذرہے","state":"translated"}},"hi":{"stringUnit":{"state":"translated","value":"Session को अनुलग्नक और मीडिया को सहेजने के लिए संग्रहण पहुंच चाहिए।"}},"th":{"stringUnit":{"value":"Session ต้องได้รับอนุญาตให้เข้าถึงที่เก็บข้อมูลเพื่อบันทึกไฟล์แนบและสื่อ","state":"translated"}},"sh":{"stringUnit":{"value":"Session treba pristup pohrani za spremanje privitaka i medija.","state":"translated"}},"ha":{"stringUnit":{"value":"Session yana buƙatar samun damar ajiya don adana abubuwan haɗe-haɗe da kafofin watsa labarai.","state":"translated"}},"fi":{"stringUnit":{"value":"Session tarvitsee tallennustilan käyttöoikeuden liitteiden ja median tallentamiseksi.","state":"translated"}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στον αποθηκευτικό χώρο για να αποθηκεύσει συνημμένα και πολυμέσα."}},"nn-NO":{"stringUnit":{"value":"Session trenger lagringstilgang for å lagre vedlegg og media.","state":"translated"}},"sr-RS":{"stringUnit":{"state":"translated","value":"Session treba pristup skladištu da sačuva priloge i medije."}},"et":{"stringUnit":{"state":"translated","value":"Session vajab salvestusruumi ligipääsu, et salvestada manuseid ja meediat."}},"nb":{"stringUnit":{"state":"translated","value":"Session trenger lagringstilgang for å lagre vedlegg og media."}},"ta":{"stringUnit":{"state":"translated","value":"Session இணைப்புகள் மற்றும் மெடியாவை சேமிக்க சேமிப்பக அணுகல் தேவை."}},"fil":{"stringUnit":{"state":"translated","value":"Ang Session ay nangangailangan ng access sa storage upang mag-save ng mga attachment at media."}},"ja":{"stringUnit":{"value":"Sessionは添付ファイルやメディアを保存するためにストレージへのアクセスが必要です。","state":"translated"}},"sr":{"stringUnit":{"state":"translated","value":"Session треба приступ складишту да сачува прилоге и медије."}},"mn":{"stringUnit":{"state":"translated","value":"Session нь хавсралт болон медиа хадгалахын тулд сангийн хандалт хэрэгтэй."}},"te":{"stringUnit":{"value":"అటాచ్మెంట్‌లు మరియు మీడియాను సేవ్ చేయడానికి Session కు నిల్వ యాక్సెస్ అవసరం.","state":"translated"}},"ar":{"stringUnit":{"state":"translated","value":"Session يحتاج إذن الوصول إلى التخزين لحفظ المرفقات والوسائط."}},"he":{"stringUnit":{"state":"translated","value":"Session זקוק לגישה לאחסון כדי לשמור צרופות ומדיה."}},"si-LK":{"stringUnit":{"state":"translated","value":"ඇමුණුම් සහ මාධ්‍ය සුරැකීම සඳහා Sessionට ගබඩා ප්‍රවේශය අවශ්‍යවේ."}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso de almacenamiento para guardar archivos adjuntos y medios."}}},"extractionState":"manual"},"CFBundleGetInfoString":{"extractionState":"extracted_with_value","comment":"Get Info string","localizations":{"en":{"stringUnit":{"state":"new","value":""}}}},"NSPhotoLibraryUsageDescription":{"localizations":{"lv":{"stringUnit":{"value":"Session vajag pieeju failiem, lai sūtītu atēlus un video.","state":"translated"}},"bn":{"stringUnit":{"value":"ছবি এবং ভিডিও প্রেরণ করতে Session এর স্টোরেজ অ্যাকসেস প্রয়োজন।","state":"translated"}},"cy":{"stringUnit":{"state":"translated","value":"Mae Session angen mynediad i storio i anfon lluniau a fideos."}},"uk":{"stringUnit":{"value":"Session потребує доступу до сховища для відправлення фотографій та відео.","state":"translated"}},"ru":{"stringUnit":{"value":"Session требуется доступ к хранилищу для отправки фотографий и видео.","state":"translated"}},"ps":{"stringUnit":{"state":"translated","value":"Session عکسونه او ویډیوګانې لیږلو لپاره ذخیره کولو ته اړتیا لري."}},"mn":{"stringUnit":{"value":"Session зураг болон видеонуудыг илгээхийн тулд сангийн хандалт хэрэгтэй.","state":"translated"}},"si-LK":{"stringUnit":{"value":"ඡායාරූප සහ වීඩියෝ යැවීමට Sessionට ගබඩා ප්‍රවේශය අවශ්‍යයි.","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso de almacenamiento para enviar fotos y videos."}},"hr":{"stringUnit":{"state":"translated","value":"Session treba pristup memoriji za slanje fotografija i videozapisa."}},"zh-CN":{"stringUnit":{"value":"Session需要存储权限以取用及发送照片或视频。","state":"translated"}},"sq":{"stringUnit":{"value":"Session ka nevojë për leje të hapësirës ruajtëse për të dërguar foto dhe video.","state":"translated"}},"ar":{"stringUnit":{"value":"Session يحتاج إذن الوصول إلى التخزين لإرسال الصور ومقاطع الفيديو.","state":"translated"}},"th":{"stringUnit":{"state":"translated","value":"Session ต้องได้รับอนุญาตให้เข้าถึงที่เก็บข้อมูลเพื่อส่งรูปภาพและวิดีโอ"}},"sh":{"stringUnit":{"value":"Session treba pristup pohrani za slanje slika i videa.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao armazenamento para enviar fotos e vídeos."}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya kuhifadhi ili kutuma picha na video."}},"fa":{"stringUnit":{"value":"Session برای ارسال عکس‌ها و ویدئو‌ها نیاز به دسترسی حافظه دارد.","state":"translated"}},"ca":{"stringUnit":{"value":"Session necessita accés a l'emmagatzematge per enviar fotografies i vídeos.","state":"translated"}},"kn":{"stringUnit":{"value":"Session ಗೆ ಚಿತ್ರಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಕಳುಹಿಸಲು ಸಂಗ್ರಹಣೆಯ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ.","state":"translated"}},"mk":{"stringUnit":{"value":"Session има потреба од пристап до складиштето за да испраќа фотографии и видеа.","state":"translated"}},"fil":{"stringUnit":{"state":"translated","value":"Ang Session ay nangangailangan ng access sa storage upang magpadala ng mga litrato at video."}},"km":{"stringUnit":{"value":"Session ត្រូវការភ្ជាប់អង្គរក្សាទុកដើម្បីផ្ញើរូបទិញនិងវីដេអូ.","state":"translated"}},"ro":{"stringUnit":{"value":"Session are nevoie de acces la spațiul de stocare pentru a trimite poze și clipuri video.","state":"translated"}},"it":{"stringUnit":{"state":"translated","value":"Session richiede l'accesso all'archiviazione per inviare foto e video."}},"lg":{"stringUnit":{"value":"Session yeetaaga ssensa y’obusobozi okutuma ebifaananyi n’ebifaananyi ebya vidiyo.","state":"translated"}},"lt":{"stringUnit":{"state":"translated","value":"Session reikia prieigos prie saugyklos norint siųsti nuotraukas ir vaizdo įrašus."}},"sk":{"stringUnit":{"value":"Session potrebuje prístup na disk na posielanie fotiek a videí.","state":"translated"}},"nl":{"stringUnit":{"value":"Session heeft toegang nodig tot de opslag om foto's en video's te kunnen verzenden.","state":"translated"}},"ka":{"stringUnit":{"value":"Session-ს სჭირდება მეხსიერების წვდომა ფოტოებისა და ვიდეოების გასაგზავნად.","state":"translated"}},"ha":{"stringUnit":{"state":"translated","value":"Session yana buƙatar samun damar ajiya don aikawa da hotuna da bidiyo."}},"nn-NO":{"stringUnit":{"value":"Session trenger lagringstilgang for å sende bilete og videoar.","state":"translated"}},"ta":{"stringUnit":{"value":"Session புகைப்படங்கள் மற்றும் வீடியோக்களை அனுப்ப சேமிப்பக அணுகல் தேவை.","state":"translated"}},"en":{"stringUnit":{"value":"Session needs storage access to send photos and videos.","state":"translated"}},"bal":{"stringUnit":{"state":"translated","value":"Session ذخیرہ پاتبسینہ بھیجنے تصویریں دکنیں"}},"eo":{"stringUnit":{"value":"Session bezonas aliron al memoro por sendi bildojn kaj videojn.","state":"translated"}},"af":{"stringUnit":{"value":"Session het berging toegang nodig om foto's en video's te stuur.","state":"translated"}},"te":{"stringUnit":{"value":"ఫోటోలు మరియు వీడియోలను పంపడానికి Session కు నిల్వ యాక్సెస్ అవసరం.","state":"translated"}},"uz":{"stringUnit":{"state":"translated","value":"Session fotosuratlar va videolarni yuborish uchun saqlashga kirishni talab qiladi."}},"id":{"stringUnit":{"value":"Session membutuhkan akses penyimpanan untuk mengirim foto dan video.","state":"translated"}},"pt-BR":{"stringUnit":{"value":"Session precisa de acesso ao seu armazenamento para enviar fotos e vídeos.","state":"translated"}},"xh":{"stringUnit":{"value":"Session ifuna ukufikelela kwindawo yokugcina ukuthumela iifoto nevidiyo.","state":"translated"}},"sl":{"stringUnit":{"value":"Session potrebuje dostop do shrambe za pošiljanje fotografij in videoposnetkov.","state":"translated"}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງການເຂົ້າເຖິງຟາຍເພື່ອສົ່ງຮູບແລະວິດີໂອ."}},"tr":{"stringUnit":{"state":"translated","value":"Session, fotoğraf ve video göndermek için depolama erişimine ihtiyaç duyar."}},"vi":{"stringUnit":{"value":"Session cần quyền truy cập lưu trữ để gửi ảnh và video.","state":"translated"}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k biltegirako sarbidea behar du argazkiak eta bideoak bidaltzeko."}},"be":{"stringUnit":{"value":"Session патрабуе дазволу да сховішча каб дасылаць фота і відэа.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"Aby wysyłać zdjęcia i filmy, aplikacja Session potrzebuje dostępu do pamięci."}},"hu":{"stringUnit":{"value":"Session alkalmazásnak tárhely-hozzáférésre van szüksége a fotók és videók elküldéséhez.","state":"translated"}},"ne-NP":{"stringUnit":{"value":"Session लाई फोटो र भिडियोहरू पठाउन स्टोरज पहुँच आवश्यक छ।","state":"translated"}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਫੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓਜ਼ ਭੇਜਣ ਲਈ ਸਟੋਰੇਜ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।"}},"bg":{"stringUnit":{"value":"Session се нуждае от достъп до хранилището, за да изпраща снимки и видеота.","state":"translated"}},"nb":{"stringUnit":{"value":"Session trenger lagringstilgang for å sende bilder og videoer.","state":"translated"}},"da":{"stringUnit":{"state":"translated","value":"Session har brug for lageradgang for at sende billeder og videoer."}},"my":{"stringUnit":{"value":"Session သည် ဓာတ်ပုံများနှင့် ဗွီဒီယိုများ ပို့ရန် သိမ်းဆည်းမှုပုံစံခွင့်လိုအပ်သည်။","state":"translated"}},"hi":{"stringUnit":{"value":"Session को फ़ोटो और वीडियो भेजने के लिए संग्रहण पहुंच चाहिए।","state":"translated"}},"ur-IN":{"stringUnit":{"value":"Session کو تصاویر اور ویڈیوز بھیجنے کے لیے اسٹوریج کی اجازت درکار ہے۔","state":"translated"}},"sr":{"stringUnit":{"value":"Session треба дозволу за складиште да шаље слике и видео клипове.","state":"translated"}},"sr-RS":{"stringUnit":{"value":"Session treba pristup skladištu da šalje fotografije i videe.","state":"translated"}},"he":{"stringUnit":{"state":"translated","value":"Session צריך הרשאות גישה לאחסון על מנת לשלוח תמונות ווידיאו."}},"ku":{"stringUnit":{"value":"Session permiya hilkişina wêneyên û vedîdarên bişîne.","state":"translated"}},"fi":{"stringUnit":{"value":"Session tarvitsee tallennustilan käyttöoikeuden kuvien ja videoiden lähettämiseksi.","state":"translated"}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita acceso al almacenamiento para enviar fotos y videos."}},"ny":{"stringUnit":{"value":"Session imafuna mwayi wosungira kuti atumize zithunzi ndi makanema.","state":"translated"}},"de":{"stringUnit":{"state":"translated","value":"Session Benötigt Speicherzugriff, um Fotos und Videos zu senden."}},"ko":{"stringUnit":{"state":"translated","value":"Session은 사진과 동영상을 전송하기 위해 저장공간 접근이 필요합니다."}},"et":{"stringUnit":{"state":"translated","value":"Session vajab fotode ja videote saatmiseks juurdepääsu salvestusruumile."}},"ms":{"stringUnit":{"state":"translated","value":"Session memerlukan akses storan untuk menghantar foto dan video."}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στον αποθηκευτικό χώρο για την αποστολή φωτογραφιών και βίντεο."}},"cs":{"stringUnit":{"value":"Session potřebuje přístup k úložišti pro odesílání fotografií a videí.","state":"translated"}},"sv-SE":{"stringUnit":{"value":"Session behöver åtkomst till lagringsutrymmet för att kunna skicka foton och filmer.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"Session a besoin d'un accès au stockage pour envoyer des photos et des vidéos."}},"zh-TW":{"stringUnit":{"value":"Session 需要存儲權限來發送照片和影片。","state":"translated"}},"az":{"stringUnit":{"value":"Session foto və videoları göndərmək üçün anbara müraciət etməlidir.","state":"translated"}},"gl":{"stringUnit":{"value":"Session necesita permiso para acceder ao almacenamento para enviar fotos e vídeos.","state":"translated"}},"ja":{"stringUnit":{"state":"translated","value":"Sessionは写真や動画を送信するためにストレージへのアクセスが必要です"}},"hy-AM":{"stringUnit":{"value":"Session-ը պահանջում է պահեստային հասանելիություն՝ լուսանկարներ և տեսանյութեր ուղարկելու համար։","state":"translated"}}},"extractionState":"manual"},"NSHumanReadableCopyright":{"localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}},"comment":"Copyright (human-readable)","extractionState":"extracted_with_value"},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"ta":{"stringUnit":{"state":"translated","value":"Session புகைப்படங்கள், வீடியோக்களை எடுக்க, QR குறியீடுகளை ஸ்கேன் செய்ய கேமரா அணுகல் தேவை."}},"si-LK":{"stringUnit":{"value":"Sessionට ඡායාරූප සහ වීඩියෝ ගැනීමට හෝ QR කේත පරිලෝකනය කිරීමට කැමරා ප්‍රවේශය අවශ්‍යයි.","state":"translated"}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take photos and videos, or scan QR codes."}},"cy":{"stringUnit":{"value":"Mae angen mynediad i'r camera ar Session i dynnu lluniau a fideos, neu i sganio côd QR.","state":"translated"}},"sq":{"stringUnit":{"state":"translated","value":"Session ka nevojë për leje përdorimi të kamerës për të bërë foto dhe video, ose për të skanuar kodet QR."}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од пристап до камерата за да слика фотографии и видеа, или да скенира QR-кодови."}},"ja":{"stringUnit":{"state":"translated","value":"Sessionで写真や動画を撮るには、またはQRコードをスキャンするにはカメラへのアクセスが必要です。"}},"km":{"stringUnit":{"state":"translated","value":"Session ត្រូវការការចូលប្រើកាមេរ៉ាដើម្បីថតរូប និងវីដេអូ ឬស្កេនកូដ QR ។"}},"ps":{"stringUnit":{"value":"Session ته اړتیا ده چې عکسونه او ویډیوګانې واخلي، یا QR کوډونه سکین کړي.","state":"translated"}},"ru":{"stringUnit":{"value":"Session требуется доступ к камере для съемки фото, видео, а также сканирования QR-кодов.","state":"translated"}},"sk":{"stringUnit":{"value":"Session potrebuje prístup ku kamere na vytvárať fotografie a videá, alebo skenovanie QR kódov.","state":"translated"}},"bg":{"stringUnit":{"value":"Session се нуждае от достъп до камерата, за да прави снимки и видеота, или да сканира QR кодове.","state":"translated"}},"es-419":{"stringUnit":{"value":"Session necesita acceso a la cámara para tomar fotos y videos, o escanear códigos QR.","state":"translated"}},"ne-NP":{"stringUnit":{"state":"translated","value":"Session लाई फोटो र भिडियो लिन वा QR कोड स्क्यान गर्न क्यामेराको पहुँच आवश्यक छ।"}},"zh-CN":{"stringUnit":{"value":"Session需要相机权限来拍摄照片和视频,或扫描二维码。","state":"translated"}},"lt":{"stringUnit":{"value":"Session reikia prieigos prie kameros, kad galėtumėte fotografuoti, filmuoti ar skenuoti QR kodus.","state":"translated"}},"lv":{"stringUnit":{"state":"translated","value":"Session ir nepieciešama piekļuve kamerai, lai uzņemtu attēlus un video, vai skenētu QR kodus."}},"hu":{"stringUnit":{"state":"translated","value":"Session alkalmazásnak kamera-hozzáférésre van szüksége fotók és videók készítéséhez, illetve QR-kódok beolvasásához."}},"hy-AM":{"stringUnit":{"value":"Session-ը պետք է հասանելիություն տեսախցիկին՝ լուսանկարներ և տեսանյութեր անելու կամ QR կոդերը սկանավորելու համար։","state":"translated"}},"kn":{"stringUnit":{"state":"translated","value":"Session ಗೆ ಚಿತ್ರಗಳು, ವೀಡಿಯೊಗಳು, ಅಥವಾ QR ಕೋಡ್ಗಳು ಸ್ಕ್ಯಾನ್ ಮಾಡಲು ಕ್ಯಾಮೆರಾ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ."}},"te":{"stringUnit":{"value":"ఫోటోలను మరియు వీడియోలను తీసుకోవడం లేదా QR కోడ్లను స్కాన్ చేయడానికి Session కు కెమెరా యాక్సెస్ కావాలి.","state":"translated"}},"fr":{"stringUnit":{"state":"translated","value":"Session a besoin de l’autorisation Caméra pour prendre des photos ou des vidéos, ou scanner des codes QR."}},"sr-RS":{"stringUnit":{"value":"Session treba pristup kameri da slika fotografije i snima videe, ili skenira QR kodove.","state":"translated"}},"xh":{"stringUnit":{"state":"translated","value":"Session ifuna ukufikelela kwikhamera ukuthatha iifoto nevidiyo, okanye ukukhangela iikhowudi ze-QR."}},"lg":{"stringUnit":{"value":"Session yeetaaga ssensa ya kkamera okutwala ebifaananyi n’ebifaananyi ebya vidiyo, oba okukebera QR codes.","state":"translated"}},"uk":{"stringUnit":{"value":"Session потребує доступ до камери, щоб фотографувати, знімати відео або сканувати QR-коди.","state":"translated"}},"fa":{"stringUnit":{"state":"translated","value":"Session برای گرفتن عکس‌ و ویدئو، یا اسکن کد‌های QR نیاز به دسترسی دوربین دارد."}},"af":{"stringUnit":{"state":"translated","value":"Session het kamera toegang nodig om foto's en video's te neem, of om QR-kodes te skandeer."}},"nb":{"stringUnit":{"value":"Session trenger kameratilgang for å ta bilder og videoer eller skanne QR-koder.","state":"translated"}},"nn-NO":{"stringUnit":{"state":"translated","value":"Session treng tilgang til kameraet for å ta bilete eller videoar, eller skanna QR-kodar."}},"sr":{"stringUnit":{"value":"Session треба дозволу за камеру да прави слике и видео клипове, или скенира QR кодове.","state":"translated"}},"bn":{"stringUnit":{"value":"ছবি ও ভিডিও করার জন্য Session এর ক্যামেরা অ্যাকসেস প্রয়োজন বা QR কোড স্ক্যান করা।","state":"translated"}},"ku":{"stringUnit":{"value":"Session پێویستە بەکارهێنانی کامێرای پێویستە بۆ وەرگرتنی وێنه‌ و ڤیدیۆکان، یان ڕووپیاکانی QR codeکان.","state":"translated"}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita acceder á cámara para tirar fotografías e facer vídeos ou escanear códigos QR."}},"ar":{"stringUnit":{"state":"translated","value":"Session يحتاج إذن الوصول إلى الكاميرا لالتقاط الصور ومقاطع الفيديو، أو لمسح رموز الاستجابة السريعة."}},"tr":{"stringUnit":{"value":"Session, fotoğraf ve video çekmek veya QR kodları taramak için kamera erişimine ihtiyaç duyar.","state":"translated"}},"fil":{"stringUnit":{"value":"Kailangan ng Session ng access sa camera para kumuha ng mga larawan at video, o ma-scan ang mga QR code.","state":"translated"}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k kameraren sarbidea behar du argazkiak eta bideoak ateratzeko, edo QR kodeak eskaneatzeko."}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt die Berechtigung »Kamera«, um Fotos oder Videos aufzunehmen oder QR-Codes zu scannen."}},"eo":{"stringUnit":{"value":"Session bezonas fotilan aliron por preni fotojn kaj videojn, aŭ skani QR-kodojn.","state":"translated"}},"ro":{"stringUnit":{"state":"translated","value":"Session are nevoie de acces la cameră pentru a realiza poze și clipuri video sau pentru a scana coduri QR."}},"ha":{"stringUnit":{"value":"Session yana buƙatar samun damar kyamara don ɗaukar hotuna da bidiyo, ko duba lambobin QR.","state":"translated"}},"sl":{"stringUnit":{"value":"Session potrebuje dostop do kamere za fotografiranje in snemanje, ali skeniranje QR kod.","state":"translated"}},"pl":{"stringUnit":{"state":"translated","value":"Aby robić zdjęcia, nagrywać filmy i skanować kody QR, aplikacja Session potrzebuje dostępu do aparatu"}},"pa-IN":{"stringUnit":{"value":"Session ਨੂੰ ਫੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓਜ਼ ਲੈਣ ਜਾਂ QR ਕੋਡ ਸਕੈਨ ਕਰਨ ਲਈ ਕੈਮਰਾ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।","state":"translated"}},"id":{"stringUnit":{"state":"translated","value":"Session membutuhkan akses kamera untuk mengambil foto dan video, atau memindai kode QR."}},"vi":{"stringUnit":{"value":"Session cần truy cập máy ảnh để chụp ảnh, quay video hoặc quét mã QR.","state":"translated"}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita accés a la càmera per fer fotografies i vídeos, o escanejar codis QR."}},"sh":{"stringUnit":{"value":"Session treba pristup kameri kako bi snimio slike ili video, ili skenirao QR kodove.","state":"translated"}},"el":{"stringUnit":{"value":"Το Session χρειάζεται πρόσβαση στην κάμερα για λήψη φωτογραφιών και βίντεο ή για σάρωση κωδικών QR.","state":"translated"}},"hr":{"stringUnit":{"value":"Session treba pristup kameri za snimanje fotografija i videozapisa, ili skeniranje QR kôdova.","state":"translated"}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya kamera kuchukua picha na video, au kuchanganua misimbo ya QR."}},"lo":{"stringUnit":{"value":"Session ຕ້ອງການເຂົ້າເຖິງກ້ອງເພື່ອຖ່າຍຮູບແລະວິດີໂອ, ຫຼືສະແກນ QR codes.","state":"translated"}},"zh-TW":{"stringUnit":{"value":"Session 需要使用相機來拍攝照片和影片,或掃描 QR 圖碼。","state":"translated"}},"hi":{"stringUnit":{"value":"फ़ोटो और वीडियो लेने या क्यूआर कोड स्कैन करने के लिए Session को कैमरा एक्सेस की आवश्यकता है।","state":"translated"}},"et":{"stringUnit":{"value":"Session vajab fotode ja videote salvestamiseks või QR-koodide skannimiseks kaamera juurdepääsu.","state":"translated"}},"fi":{"stringUnit":{"value":"Session tarvitsee kameran käyttöoikeuden kuvien ja videoiden ottamiseksi tai QR-koodien skannaamiseksi.","state":"translated"}},"ko":{"stringUnit":{"value":"Session은 사진과 동영상을 찍거나 QR 코드를 스캔하기 위해 카메라 접근이 필요합니다.","state":"translated"}},"cs":{"stringUnit":{"value":"Session potřebuje přístup k fotoaparátu pro pořizování fotografií a videí nebo skenování QR kódů.","state":"translated"}},"bal":{"stringUnit":{"value":"Session کماٹ پاتبسینہ مجبورے تصاویرا و ویڈیوشاں بیہ QR سکینشہ.","state":"translated"}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو تصاویر اور ویڈیوز لینے یا QR کوڈز اسکین کرنے کے لیے کیمرے کی اجازت درکار ہے۔"}},"th":{"stringUnit":{"value":"Session ต้องได้รับอนุญาตให้เข้าถึงกล้องเพื่อถ่ายรูปและวิดีโอ หรือสแกนรหัส QR","state":"translated"}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso a la cámara para tomar fotos y videos, o escanear códigos QR."}},"sv-SE":{"stringUnit":{"value":"Session behöver åtkomst till kameran för att kunna fotografera och filma eller skanna QR-koder.","state":"translated"}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa de acesso à câmera para tirar fotos e vídeos, ou escanear códigos QR."}},"da":{"stringUnit":{"state":"translated","value":"Session kræver tilladelse til at tilgå dit kamera, for at kunne tage billeder eller scanne QR-koder."}},"mn":{"stringUnit":{"value":"Session нь гэрэл зураг болон видеог авах эсвэл QR кодыг скан хийхийн тулд камерт хандалт хэрэгтэй.","state":"translated"}},"be":{"stringUnit":{"state":"translated","value":"Session патрэбен дазвол на камеру, каб рабіць фота ці відэа альбо сканаваць QR-коды."}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება კამერის წვდომა ფოტოებისა და ვიდეოების გადასაღებად, ან QR კოდების დასანახად."}},"it":{"stringUnit":{"value":"Session richiede l'accesso alla fotocamera per scattare foto e video, o scansionare i codici QR.","state":"translated"}},"uz":{"stringUnit":{"state":"translated","value":"Session fotosuratlar va videolarni olish yoki QR kodlarni skanerlash uchun kamera kirishini talab qiladi."}},"ny":{"stringUnit":{"value":"Session iyenera kupititsa mwayi kwa kamera kuti kutenga zithunzi ndi makanema, kapena kuwunika ma QR codes.","state":"translated"}},"my":{"stringUnit":{"state":"translated","value":"Session က ဓါတ်ပုံတွေနဲ့ ဗီဒီယိုတွေရိုက်ဖို့၊ ဒါမှမဟုတ် QR ကုဒ်တွေ ရှာဖွေရန် အတွက် ကင်မရာသုံးစွဲခွင့် လိုအပ်ပါတယ်။"}},"ms":{"stringUnit":{"value":"Session memerlukan akses kamera untuk mengambil gambar dan video, atau mengimbas kod QR.","state":"translated"}},"nl":{"stringUnit":{"value":"Session heeft toegang tot de camera nodig om foto's en video's te maken of QR-codes te scannen.","state":"translated"}},"he":{"stringUnit":{"value":"Session צריך הרשאות מצלמה כדי לצלם תצלומים או להקליט וידיאו או לסרוק קודי QR.","state":"translated"}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa de acesso à câmera para tirar fotos e vídeos, ou escanear códigos QR."}},"az":{"stringUnit":{"state":"translated","value":"Session foto və video çəkmək və ya QR kodlarını skan etmək üçün kameraya müraciət etməlidir."}}}},"New Message":{},"CFBundleDisplayName":{"localizations":{"en":{"stringUnit":{"value":"Session","state":"new"}}},"extractionState":"extracted_with_value","comment":"Bundle display name"}}} \ No newline at end of file +{"sourceLanguage":"en","strings":{"CFBundleDisplayName":{"comment":"Bundle display name","extractionState":"extracted_with_value","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}}},"CFBundleGetInfoString":{"comment":"Get Info string","extractionState":"extracted_with_value","localizations":{"en":{"stringUnit":{"state":"new","value":""}}}},"CFBundleName":{"comment":"Bundle name","extractionState":"extracted_with_value","localizations":{"en":{"stringUnit":{"state":"new","value":"Session"}}}},"New Message":{},"NSAppleMusicUsageDescription":{"extractionState":"manual","localizations":{"af":{"stringUnit":{"state":"translated","value":"Session moet Apple Music gebruik om media-aanhegsels te speel."}},"ar":{"stringUnit":{"state":"translated","value":"Session يحتاج استخدام Apple Music لتشغيل مرفقات الوسائط."}},"az":{"stringUnit":{"state":"translated","value":"Session media qoşmalarını oxutmaq üçün Apple Music-i istifadə etməlidir."}},"bal":{"stringUnit":{"state":"translated","value":"Session xیس پاتبسینہ ایپل موزیک لو پہ اجرأ ہٰن اختیارات استعمالے"}},"be":{"stringUnit":{"state":"translated","value":"Session патрэбен доступ да Apple Music, каб прайграваць медыя ўкладанні."}},"bg":{"stringUnit":{"state":"translated","value":"Session трябва да използва Apple Music, за да възпроизвежда медийни прикачени файлове."}},"bn":{"stringUnit":{"state":"translated","value":"মিডিয়া সংযুক্তি প্লে করার জন্য Session কে Apple Music ব্যবহার করতে হবে।"}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita utilitzar Apple Music per reproduir fitxers adjunts de suports."}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje použít Apple Music pro přehrávání mediálních příloh."}},"cy":{"stringUnit":{"state":"translated","value":"Mae angen i Session ddefnyddio Apple Music i chwarae atodiadau cyfryngau."}},"da":{"stringUnit":{"state":"translated","value":"Session skal bruge Apple Music for at afspille medievedhæftninger."}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt Zugriff auf Apple Music, um Medienanhänge abzuspielen."}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στο Apple Music για αναπαραγωγή συνημμένων πολυμέσων."}},"en":{"stringUnit":{"state":"translated","value":"Session needs to use Apple Music to play media attachments."}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas uzi Apple Music por ludi aŭdvidaĵojn."}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita usar Apple Music para reproducir archivos adjuntos multimedia."}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita usar Apple Music para reproducir archivos adjuntos de medios."}},"et":{"stringUnit":{"state":"translated","value":"Session vajab Apple Musici kasutamist, et esitada meediamanuseid."}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k Apple Music erabiltzea behar du hedabide eranskinak erreproduzitzeko."}},"fa":{"stringUnit":{"state":"translated","value":"Session باید از Apple Music برای پخش پیوست‌های رسانه‌ای استفاده کند."}},"fi":{"stringUnit":{"state":"translated","value":"Session tarvitsee käyttää Apple Musiikkia mediasisältöjen toistamiseen."}},"fil":{"stringUnit":{"state":"translated","value":"Kinakailangang magamit ng Session ang Apple Music upang magpatugtog ng mga media attachment."}},"fr":{"stringUnit":{"state":"translated","value":"Session doit accéder à Apple Music pour lire les pièces jointes multimédias."}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita usar Apple Music para reproducir anexos multimedia."}},"ha":{"stringUnit":{"state":"translated","value":"Session yana buƙatar amfani da Apple Music don kunna abin haɗe-haɗen kafofin watsa labarai."}},"he":{"stringUnit":{"state":"translated","value":"Session זקוק ל-Apple Music כדי להפעיל צרופות מדיה."}},"hi":{"stringUnit":{"state":"translated","value":"मीडिया संलग्नक बजाने के लिए Session को Apple Music के उपयोग की आवश्यकता है।"}},"hr":{"stringUnit":{"state":"translated","value":"Session treba koristiti Apple Music za reprodukciju medijskih privitaka."}},"hu":{"stringUnit":{"state":"translated","value":"Session-nak szüksége van az Apple Music használatára a média mellékletek lejátszásához."}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ը պետք է օգտագործի Apple Music՝ մեդիա կցորդները նվագարկելու համար։"}},"id":{"stringUnit":{"state":"translated","value":"Session membutuhkan Apple Music untuk memutar lampiran media."}},"it":{"stringUnit":{"state":"translated","value":"Session deve utilizzare Apple Music per riprodurre gli allegati multimediali."}},"ja":{"stringUnit":{"state":"translated","value":"Sessionはメディア添付ファイルを再生するためにApple Musicを使用する必要があります"}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება Apple Music-ის გამოყენება მედიამიკრძურბების სათამაშოდ."}},"km":{"stringUnit":{"state":"translated","value":"Session ត្រូវការប្រើប្រាស់ Apple Music ដើម្បីចាក់មេឌៀភ្ជាប់"}},"kn":{"stringUnit":{"state":"translated","value":"Session ಗೆ ಮಾಧ್ಯಮ ಅಟ್ಯಾಚ್ಮೆಂಟ್‌ಗಳನ್ನು ಪ್ಲೇ ಮಾಡಲು ಆಪಲ್ ಮ್ಯೂಸಿಕ್ ಬಳಸಬೇಕು."}},"ko":{"stringUnit":{"state":"translated","value":"Session은 미디어 첨부 파일을 재생하기 위해 Apple Music을 사용해야 합니다."}},"ku":{"stringUnit":{"state":"translated","value":"Session پێویستە بە پارێزمەنیی ژمارەی تەلەفۆنەکان بۆ بەکردنەوەی هەموو پەیوەستەکان."}},"ku-TR":{"stringUnit":{"state":"translated","value":"Session permiya bikar anînina Apple Music hewce dike da ku tesawirên medyayê bixebitîne."}},"lg":{"stringUnit":{"state":"translated","value":"Session keetaaga kuzannyisa Apple Music okuzannyisa ekwatibwako okuva mu mikutu."}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງໃຊ້ Apple Music ເພື່ອປ່ອຍແນບສື່ມວນຊົນ."}},"lt":{"stringUnit":{"state":"translated","value":"Session reikia naudoti Apple Music, kad galėtų leisti medijos priedus."}},"lv":{"stringUnit":{"state":"translated","value":"Session nepieciešams izmantot Apple Music, lai atskaņotu multivides pielikumus."}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од Apple Music за да ги репродуцира медиумските прилози."}},"mn":{"stringUnit":{"state":"translated","value":"Session медиа хавсралтуудыг тоглуулахын тулд Apple Music-ийг ашиглах хэрэгтэй."}},"ms":{"stringUnit":{"state":"translated","value":"Session perlu menggunakan Apple Music untuk memainkan lampiran media."}},"my":{"stringUnit":{"state":"translated","value":"Session သည် Apple Music ကို အသုံးပြု၍ မီဒီယာလုံခြုံမှုကို ဖွင့်ရန် လိုအပ်သည်။"}},"nb":{"stringUnit":{"state":"translated","value":"Session trenger å bruke Apple Music for å spille av mediavedlegg."}},"nb-NO":{"stringUnit":{"state":"translated","value":"Session må bruke Apple Music for å spille medievedlegg."}},"ne-NP":{"stringUnit":{"state":"translated","value":"Session लाई मिडिया अट्याचमेन्टहरू प्ले गर्न एप्पल म्यूजिक प्रयोग गर्नु पर्छ।"}},"nl":{"stringUnit":{"state":"translated","value":"Session moet Apple Music gebruiken om mediabijlagen af te spelen."}},"nn-NO":{"stringUnit":{"state":"translated","value":"Session trenger Apple Music for å spille av media-vedlegg."}},"ny":{"stringUnit":{"state":"translated","value":"Session iyenera kugwiritsa ntchito Apple Music kuti izisintha ma attachment a media."}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਮੀਡੀਆ ਅਟੈਚਮੈਂਟਸ ਖੇਡਣ ਲਈ ਐਪਲ ਮਿਊਜ਼ਿਕ ਵਰਤਣ ਦੀ ਲੋੜ ਹੈ।"}},"pl":{"stringUnit":{"state":"translated","value":"Do odtwarzania załączników multimedialnych aplikacja Session potrzebuje używać aplikacji Apple Music."}},"ps":{"stringUnit":{"state":"translated","value":"Session میوزیک مولا زموږ توانیدونکی د Apple Music نه په لوبولوکې کارول کیږي."}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa usar a Apple Music para reproduzir anexos de mídia."}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa usar o Apple Music para reproduzir anexos de multimédia."}},"ro":{"stringUnit":{"state":"translated","value":"Session are nevoie de acces la Apple Music pentru a reda atașamente media."}},"ru":{"stringUnit":{"state":"translated","value":"Session требуется доступ к Apple Music для воспроизведения медиафайлов."}},"sh":{"stringUnit":{"state":"translated","value":"Session treba koristiti Apple Music za reprodukciju medijskih privitaka."}},"si-LK":{"stringUnit":{"state":"translated","value":"මාධ්‍ය ඇමුණුම් වාදනය කිරීමට Session ට Apple Music භාවිත කිරීම අවශ්‍යයි."}},"sk":{"stringUnit":{"state":"translated","value":"Session potrebuje používať Apple Music na prehrávanie mediálnych príloh."}},"sl":{"stringUnit":{"state":"translated","value":"Session potrebuje uporabo Apple Music za predvajanje medijskih prilog."}},"sq":{"stringUnit":{"state":"translated","value":"Session ka nevojë të përdorë Apple Music për të luajtur attachment-e mediaje."}},"sr":{"stringUnit":{"state":"translated","value":"Session треба да користи Apple Music да би репродуковао медијске прилоге."}},"sr-Latn":{"stringUnit":{"state":"translated","value":"Session treba da koristi Apple Music za reprodukciju medijskih priloga."}},"sv-SE":{"stringUnit":{"state":"translated","value":"Session behöver åtkomst till Apple Music för att spela upp bifogade mediafiler."}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji kutumia Apple Music kucheza viambatanisho vya vyombo vya habari."}},"ta":{"stringUnit":{"state":"translated","value":"Session மெடியா இணைப்புகளை விளையாட Apple Music ஐ பயன்படுத்த வேண்டும்."}},"te":{"stringUnit":{"state":"translated","value":"మీడియా అటాచ్మెంట్‌లను ప్లే చేయడానికి Session Apple Musicను ఉపయోగించాలి."}},"th":{"stringUnit":{"state":"translated","value":"Session ต้องใช้ Apple Music เพื่อเล่นไฟล์สื่อที่แนบมา"}},"tr":{"stringUnit":{"state":"translated","value":"Session, medya eklerini çalmak için Apple Music'i kullanmak zorunda."}},"uk":{"stringUnit":{"state":"translated","value":"Session потребує використовувати Apple Music для відтворення медіавкладень."}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو میڈیا اٹیچمنٹ چلانے کے لیے ایپل میوزک کا استعمال کرنا ہوگا۔"}},"uz":{"stringUnit":{"state":"translated","value":"Session media tarkiblarini ijro etish uchun Apple Music'dan foydalanishi kerak."}},"vi":{"stringUnit":{"state":"translated","value":"Session cần sử dụng Apple Music để phát các tập tin đính kèm phương tiện."}},"xh":{"stringUnit":{"state":"translated","value":"Session kufuneka isebenzise uMculo weApple ukudlala iziphumo zemidiya."}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要使用Apple Music来播放媒体附件。"}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 需要使用 Apple Music 來播放媒體附件。"}}}},"NSCameraUsageDescription":{"extractionState":"manual","localizations":{"af":{"stringUnit":{"state":"translated","value":"Session het kamera toegang nodig om foto's en video's te neem, of om QR-kodes te skandeer."}},"ar":{"stringUnit":{"state":"translated","value":"Session يحتاج إذن الوصول إلى الكاميرا لالتقاط الصور ومقاطع الفيديو، أو لمسح رموز الاستجابة السريعة."}},"az":{"stringUnit":{"state":"translated","value":"Session foto və video çəkmək və ya QR kodlarını skan etmək üçün kameraya müraciət etməlidir."}},"bal":{"stringUnit":{"state":"translated","value":"Session کماٹ پاتبسینہ مجبورے تصاویرا و ویڈیوشاں بیہ QR سکینشہ."}},"be":{"stringUnit":{"state":"translated","value":"Session патрэбен дазвол на камеру, каб рабіць фота ці відэа альбо сканаваць QR-коды."}},"bg":{"stringUnit":{"state":"translated","value":"Session се нуждае от достъп до камерата, за да прави снимки и видеота, или да сканира QR кодове."}},"bn":{"stringUnit":{"state":"translated","value":"ছবি ও ভিডিও করার জন্য Session এর ক্যামেরা অ্যাকসেস প্রয়োজন বা QR কোড স্ক্যান করা।"}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita accés a la càmera per fer fotografies i vídeos, o escanejar codis QR."}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje přístup k fotoaparátu pro pořizování fotografií a videí nebo skenování QR kódů."}},"cy":{"stringUnit":{"state":"translated","value":"Mae angen mynediad i'r camera ar Session i dynnu lluniau a fideos, neu i sganio côd QR."}},"da":{"stringUnit":{"state":"translated","value":"Session kræver tilladelse til at tilgå dit kamera, for at kunne tage billeder eller scanne QR-koder."}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt die Berechtigung »Kamera«, um Fotos oder Videos aufzunehmen oder QR-Codes zu scannen."}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στην κάμερα για λήψη φωτογραφιών και βίντεο ή για σάρωση κωδικών QR."}},"en":{"stringUnit":{"state":"translated","value":"Session needs camera access to take photos and videos, or scan QR codes."}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas fotilan aliron por preni fotojn kaj videojn, aŭ skani QR-kodojn."}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita acceso a la cámara para tomar fotos y videos, o escanear códigos QR."}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso a la cámara para tomar fotos y videos, o escanear códigos QR."}},"et":{"stringUnit":{"state":"translated","value":"Session vajab fotode ja videote salvestamiseks või QR-koodide skannimiseks kaamera juurdepääsu."}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k kameraren sarbidea behar du argazkiak eta bideoak ateratzeko, edo QR kodeak eskaneatzeko."}},"fa":{"stringUnit":{"state":"translated","value":"Session برای گرفتن عکس‌ و ویدئو، یا اسکن کد‌های QR نیاز به دسترسی دوربین دارد."}},"fi":{"stringUnit":{"state":"translated","value":"Session tarvitsee kameran käyttöoikeuden kuvien ja videoiden ottamiseksi tai QR-koodien skannaamiseksi."}},"fil":{"stringUnit":{"state":"translated","value":"Ang Session ay nangangailangan ng access sa camera upang kumuha ng litrato at video, o mag-scan ng mga QR code."}},"fr":{"stringUnit":{"state":"translated","value":"Session a besoin de l’autorisation Caméra pour prendre des photos ou des vidéos, ou scanner des codes QR."}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita acceder á cámara para tirar fotografías e facer vídeos ou escanear códigos QR."}},"ha":{"stringUnit":{"state":"translated","value":"Session yana buƙatar samun damar kyamara don ɗaukar hotuna da bidiyo, ko duba lambobin QR."}},"he":{"stringUnit":{"state":"translated","value":"Session צריך הרשאות מצלמה כדי לצלם תצלומים או להקליט וידיאו או לסרוק קודי QR."}},"hi":{"stringUnit":{"state":"translated","value":"फ़ोटो और वीडियो लेने या क्यूआर कोड स्कैन करने के लिए Session को कैमरा एक्सेस की आवश्यकता है।"}},"hr":{"stringUnit":{"state":"translated","value":"Session treba pristup kameri za snimanje fotografija i videozapisa, ili skeniranje QR kôdova."}},"hu":{"stringUnit":{"state":"translated","value":"Session alkalmazásnak kamera-hozzáférésre van szüksége fotók és videók készítéséhez, illetve QR-kódok beolvasásához."}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ը պետք է հասանելիություն տեսախցիկին՝ լուսանկարներ և տեսանյութեր անելու կամ QR կոդերը սկանավորելու համար։"}},"id":{"stringUnit":{"state":"translated","value":"Session membutuhkan akses kamera untuk mengambil foto dan video, atau memindai kode QR."}},"it":{"stringUnit":{"state":"translated","value":"Session richiede l'accesso alla fotocamera per scattare foto e video, o scansionare i codici QR."}},"ja":{"stringUnit":{"state":"translated","value":"Sessionで写真や動画を撮るには、またはQRコードをスキャンするにはカメラへのアクセスが必要です。"}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება კამერის წვდომა ფოტოებისა და ვიდეოების გადასაღებად, ან QR კოდების დასანახად."}},"km":{"stringUnit":{"state":"translated","value":"Session ត្រូវការការចូលប្រើកាមេរ៉ាដើម្បីថតរូប និងវីដេអូ ឬស្កេនកូដ QR ។"}},"kn":{"stringUnit":{"state":"translated","value":"Session ಗೆ ಚಿತ್ರಗಳು, ವೀಡಿಯೊಗಳು, ಅಥವಾ QR ಕೋಡ್ಗಳು ಸ್ಕ್ಯಾನ್ ಮಾಡಲು ಕ್ಯಾಮೆರಾ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ."}},"ko":{"stringUnit":{"state":"translated","value":"Session은 사진과 동영상을 찍거나 QR 코드를 스캔하기 위해 카메라 접근이 필요합니다."}},"ku":{"stringUnit":{"state":"translated","value":"Session پێویستە بەکارهێنانی کامێرای پێویستە بۆ وەرگرتنی وێنه‌ و ڤیدیۆکان، یان ڕووپیاکانی QR codeکان."}},"ku-TR":{"stringUnit":{"state":"translated","value":"Session permiya kamera hewce dike da ku wêneyên û vedîdarên twist bike, an QR kodên scanner bike."}},"lg":{"stringUnit":{"state":"translated","value":"Session yeetaaga ssensa ya kkamera okutwala ebifaananyi n’ebifaananyi ebya vidiyo, oba okukebera QR codes."}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງການເຂົ້າເຖິງກ້ອງເພື່ອຖ່າຍຮູບແລະວິດີໂອ, ຫຼືສະແກນ QR codes."}},"lt":{"stringUnit":{"state":"translated","value":"Session reikia prieigos prie kameros, kad galėtumėte fotografuoti, filmuoti ar skenuoti QR kodus."}},"lv":{"stringUnit":{"state":"translated","value":"Session ir nepieciešama piekļuve kamerai, lai uzņemtu attēlus un video, vai skenētu QR kodus."}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од пристап до камерата за да слика фотографии и видеа, или да скенира QR-кодови."}},"mn":{"stringUnit":{"state":"translated","value":"Session нь гэрэл зураг болон видеог авах эсвэл QR кодыг скан хийхийн тулд камерт хандалт хэрэгтэй."}},"ms":{"stringUnit":{"state":"translated","value":"Session memerlukan akses kamera untuk mengambil gambar dan video, atau mengimbas kod QR."}},"my":{"stringUnit":{"state":"translated","value":"Session က ဓါတ်ပုံတွေနဲ့ ဗီဒီယိုတွေရိုက်ဖို့၊ ဒါမှမဟုတ် QR ကုဒ်တွေ ရှာဖွေရန် အတွက် ကင်မရာသုံးစွဲခွင့် လိုအပ်ပါတယ်။"}},"nb":{"stringUnit":{"state":"translated","value":"Session trenger kameratilgang for å ta bilder og videoer eller skanne QR-koder."}},"nb-NO":{"stringUnit":{"state":"translated","value":"Session trenger kameratilgang for å ta bilder og video, eller skanne QR-koder."}},"ne-NP":{"stringUnit":{"state":"translated","value":"Session लाई फोटो र भिडियो लिन वा QR कोड स्क्यान गर्न क्यामेराको पहुँच आवश्यक छ।"}},"nl":{"stringUnit":{"state":"translated","value":"Session heeft toegang tot de camera nodig om foto's en video's te maken of QR-codes te scannen."}},"nn-NO":{"stringUnit":{"state":"translated","value":"Session treng tilgang til kameraet for å ta bilete eller videoar, eller skanna QR-kodar."}},"ny":{"stringUnit":{"state":"translated","value":"Session iyenera kupititsa mwayi kwa kamera kuti kutenga zithunzi ndi makanema, kapena kuwunika ma QR codes."}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਫੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓਜ਼ ਲੈਣ ਜਾਂ QR ਕੋਡ ਸਕੈਨ ਕਰਨ ਲਈ ਕੈਮਰਾ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।"}},"pl":{"stringUnit":{"state":"translated","value":"Aby robić zdjęcia, nagrywać filmy i skanować kody QR, aplikacja Session potrzebuje dostępu do aparatu"}},"ps":{"stringUnit":{"state":"translated","value":"Session ته اړتیا ده چې عکسونه او ویډیوګانې واخلي، یا QR کوډونه سکین کړي."}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa de acesso à câmera para tirar fotos e vídeos, ou escanear códigos QR."}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa de acesso à câmera para tirar fotos e vídeos, ou escanear códigos QR."}},"ro":{"stringUnit":{"state":"translated","value":"Session are nevoie de acces la cameră pentru a realiza poze și clipuri video sau pentru a scana coduri QR."}},"ru":{"stringUnit":{"state":"translated","value":"Session требуется доступ к камере для съемки фото, видео, а также сканирования QR-кодов."}},"sh":{"stringUnit":{"state":"translated","value":"Session treba pristup kameri kako bi snimio slike ili video, ili skenirao QR kodove."}},"si-LK":{"stringUnit":{"state":"translated","value":"Sessionට ඡායාරූප සහ වීඩියෝ ගැනීමට හෝ QR කේත පරිලෝකනය කිරීමට කැමරා ප්‍රවේශය අවශ්‍යයි."}},"sk":{"stringUnit":{"state":"translated","value":"Session potrebuje prístup ku kamere na vytvárať fotografie a videá, alebo skenovanie QR kódov."}},"sl":{"stringUnit":{"state":"translated","value":"Session potrebuje dostop do kamere za fotografiranje in snemanje, ali skeniranje QR kod."}},"sq":{"stringUnit":{"state":"translated","value":"Session ka nevojë për leje përdorimi të kamerës për të bërë foto dhe video, ose për të skanuar kodet QR."}},"sr":{"stringUnit":{"state":"translated","value":"Session треба дозволу за камеру да прави слике и видео клипове, или скенира QR кодове."}},"sr-Latn":{"stringUnit":{"state":"translated","value":"Session treba pristup kameri da slika fotografije i snima videe, ili skenira QR kodove."}},"sv-SE":{"stringUnit":{"state":"translated","value":"Session behöver åtkomst till kameran för att kunna fotografera och filma eller skanna QR-koder."}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya kamera kuchukua picha na video, au kuchanganua misimbo ya QR."}},"ta":{"stringUnit":{"state":"translated","value":"Session புகைப்படங்கள், வீடியோக்களை எடுக்க, QR குறியீடுகளை ஸ்கேன் செய்ய கேமரா அணுகல் தேவை."}},"te":{"stringUnit":{"state":"translated","value":"ఫోటోలను మరియు వీడియోలను తీసుకోవడం లేదా QR కోడ్లను స్కాన్ చేయడానికి Session కు కెమెరా యాక్సెస్ కావాలి."}},"th":{"stringUnit":{"state":"translated","value":"Session ต้องได้รับอนุญาตให้เข้าถึงกล้องเพื่อถ่ายรูปและวิดีโอ หรือสแกนรหัส QR"}},"tr":{"stringUnit":{"state":"translated","value":"Session, fotoğraf ve video çekmek veya QR kodları taramak için kamera erişimine ihtiyaç duyar."}},"uk":{"stringUnit":{"state":"translated","value":"Session потребує доступ до камери, щоб фотографувати, знімати відео або сканувати QR-коди."}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو تصاویر اور ویڈیوز لینے یا QR کوڈز اسکین کرنے کے لیے کیمرے کی اجازت درکار ہے۔"}},"uz":{"stringUnit":{"state":"translated","value":"Session fotosuratlar va videolarni olish yoki QR kodlarni skanerlash uchun kameraga kirishga ruxsat talab qiladi."}},"vi":{"stringUnit":{"state":"translated","value":"Session cần truy cập máy ảnh để chụp ảnh, quay video hoặc quét mã QR."}},"xh":{"stringUnit":{"state":"translated","value":"Session ifuna ukufikelela kwikhamera ukuthatha iifoto nevidiyo, okanye ukukhangela iikhowudi ze-QR."}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要相机权限来拍摄照片和视频,或扫描二维码。"}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 需要使用相機來拍攝照片和影片,或掃描 QR 圖碼。"}}}},"NSFaceIDUsageDescription":{"extractionState":"manual","localizations":{"af":{"stringUnit":{"state":"translated","value":"Die skermsluitfunksie op Session gebruik Face ID."}},"ar":{"stringUnit":{"state":"translated","value":"ميزة قفل الشاشة على Session تستخدم Face ID."}},"az":{"stringUnit":{"state":"translated","value":"Session tətbiqinin ekran kilidi özəlliyi Face ID istifadə edir."}},"bal":{"stringUnit":{"state":"translated","value":"Session رو پیلناکردگ لاگو کردانت پاس ID."}},"be":{"stringUnit":{"state":"translated","value":"Функцыя блакіроўкі экрана ў Session выкарыстоўвае Face ID."}},"bg":{"stringUnit":{"state":"translated","value":"Функцията за заключване на екрана в Session използва Face ID."}},"bn":{"stringUnit":{"state":"translated","value":"Session এর স্ক্রিন লক ফিচারটি ফেস আইডি ব্যবহৃত হয়।"}},"ca":{"stringUnit":{"state":"translated","value":"La funció de bloqueig de pantalla en Session utilitza Face ID."}},"cs":{"stringUnit":{"state":"translated","value":"Funkce zamčení obrazovky Session používá Face ID."}},"cy":{"stringUnit":{"state":"translated","value":"Mae'r nodwedd cloi sgrin ar Session yn defnyddio ID Wyneb."}},"da":{"stringUnit":{"state":"translated","value":"Skærmlåsfunktionen på Session bruger Face ID."}},"de":{"stringUnit":{"state":"translated","value":"Die Bildschirmsperrfunktion von Session verwendet Face ID."}},"el":{"stringUnit":{"state":"translated","value":"Η λειτουργία κλειδώματος οθόνης στο Session χρησιμοποιεί το Face ID."}},"en":{"stringUnit":{"state":"translated","value":"The screen lock feature on Session uses Face ID."}},"eo":{"stringUnit":{"state":"translated","value":"La ŝlosila ekrano en Session uzas Vizaĝo-ID."}},"es-419":{"stringUnit":{"state":"translated","value":"La función de pantalla bloqueada en Session usa Face ID."}},"es-ES":{"stringUnit":{"state":"translated","value":"La función de bloqueo de pantalla en Session usa Face ID."}},"et":{"stringUnit":{"state":"translated","value":"Session ekraaniluku funktsioon kasutab Face ID-d."}},"eu":{"stringUnit":{"state":"translated","value":"Session-ko pantaila blokeatzearen funtzioak Face ID erabiltzen du."}},"fa":{"stringUnit":{"state":"translated","value":"ویژگی قفل صفحه در Session از Face ID استفاده می‌کند."}},"fi":{"stringUnit":{"state":"translated","value":"Näytön lukitusominaisuus Session käyttää Face ID:tä."}},"fil":{"stringUnit":{"state":"translated","value":"Ang screen lock feature ng Session ay gumagamit ng Face ID."}},"fr":{"stringUnit":{"state":"translated","value":"La fonctionnalité de verrouillage d'écran sur Session utilise Face ID."}},"gl":{"stringUnit":{"state":"translated","value":"A funcionalidade de bloqueo de pantalla en Session usa Face ID."}},"ha":{"stringUnit":{"state":"translated","value":"Tsarin kulle allo akan Session yana amfani da Face ID."}},"he":{"stringUnit":{"state":"translated","value":"תכונת נעילת המסך ב-Session משתמשת בזיהוי פנים."}},"hi":{"stringUnit":{"state":"translated","value":"Session पर स्क्रीन लॉक फीचर Face ID का उपयोग करता है।"}},"hr":{"stringUnit":{"state":"translated","value":"Funkcija zaključavanja zaslona na Session koristi Face ID."}},"hu":{"stringUnit":{"state":"translated","value":"A Session képernyőzár funkciója Face ID-t használ."}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ի էկրանային կողպման հատկությունը օգտագործում է Face ID:"}},"id":{"stringUnit":{"state":"translated","value":"Fitur kunci layar pada Session menggunakan Face ID."}},"it":{"stringUnit":{"state":"translated","value":"La funzione di blocco schermo su Session usa il Face ID."}},"ja":{"stringUnit":{"state":"translated","value":"Session の画面ロック機能はFace IDを使用します。"}},"ka":{"stringUnit":{"state":"translated","value":"ეკრანის დაბლოკვის ფუნქცია Session-ზე იყენებს Face ID-ს"}},"km":{"stringUnit":{"state":"translated","value":"The screen lock feature on Session uses Face ID."}},"kn":{"stringUnit":{"state":"translated","value":"Session ನ ತರ್ಣ್ ಲಾಕ್ ವೈಶಿಷ್ಟ್ಯವು ಫೇಸ್ ಐಡಿ ಅನ್ನು ಬಳಸುತ್ತದೆ."}},"ko":{"stringUnit":{"state":"translated","value":"Session의 화면 잠금 기능은 Face ID를 사용합니다."}},"ku":{"stringUnit":{"state":"translated","value":"فەرمۆن جێگیرکردنی تابلەکردنی سکرین ناستەوەی Session پێی ئەنجامدەدرێت."}},"ku-TR":{"stringUnit":{"state":"translated","value":"Taybetmendiya serrnderkî ya Session bi Face ID bicîh dike."}},"lg":{"stringUnit":{"state":"translated","value":"Enkozesa y'ekiwandiiko k'amaaso ekiriko Session ekosa Face ID."}},"lt":{"stringUnit":{"state":"translated","value":"Ekrano užraktas Session naudoja Face ID."}},"lv":{"stringUnit":{"state":"translated","value":"Ekrāna bloķēšanas funkcija lietotnē Session izmanto Face ID."}},"mk":{"stringUnit":{"state":"translated","value":"Функцијата за заклучување екранот во Session користи Face ID."}},"mn":{"stringUnit":{"state":"translated","value":"Session дэлгэц түгжихэд Face ID ашиглана."}},"ms":{"stringUnit":{"state":"translated","value":"Ciri kunci skrin pada Session menggunakan Face ID."}},"my":{"stringUnit":{"state":"translated","value":"Session တွင် အမ်ကာ မျက်နှာ မြင်စနစ် लॉग इन ၏ လုံခြုံစေသည်။"}},"nb":{"stringUnit":{"state":"translated","value":"Skjermlåsfunksjonen på Session bruker Face ID."}},"nb-NO":{"stringUnit":{"state":"translated","value":"Skjermlåsfunksjonen på Session bruker Face ID."}},"ne-NP":{"stringUnit":{"state":"translated","value":"Sessionको स्क्रिन लक विशेषताले Face ID प्रयोग गर्छ।"}},"nl":{"stringUnit":{"state":"translated","value":"De vergrendelfunctie op Session gebruikt Face ID."}},"nn-NO":{"stringUnit":{"state":"translated","value":"Skjermlåsfunksjonen på Session bruker Face ID."}},"ny":{"stringUnit":{"state":"translated","value":"Ntchito yotseka chinsalu pa Session imagwiritsa ntchito Face ID."}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਉੱਤੇ ਸਕرين ਲਾਕ ਫੀਚਰ Face ID ਵਰਤਦਾ ਹੈ।"}},"pl":{"stringUnit":{"state":"translated","value":"Funkcja blokady ekranu w aplikacji Session używa Face ID."}},"ps":{"stringUnit":{"state":"translated","value":"د Session سکرین لاک فیچر د مخ پيژندنه (Face ID) کاروي."}},"pt-BR":{"stringUnit":{"state":"translated","value":"A funcionalidade de bloqueio de tela no Session usa reconhecimento facial."}},"pt-PT":{"stringUnit":{"state":"translated","value":"A funcionalidade de bloqueio de ecrã Session usa Face ID."}},"ro":{"stringUnit":{"state":"translated","value":"Funcția de blocare a ecranului din Session folosește Face ID."}},"ru":{"stringUnit":{"state":"translated","value":"Функция блокировки экрана в Session использует Face ID."}},"sh":{"stringUnit":{"state":"translated","value":"Značajka zaključavanja ekrana na Session koristi Face ID."}},"si-LK":{"stringUnit":{"state":"translated","value":"Session මත තිර අගුළු විශේෂාංගය Face ID භාවිතා කරයි."}},"sk":{"stringUnit":{"state":"translated","value":"Funkcia zámku obrazovky na Session používa Face ID."}},"sl":{"stringUnit":{"state":"translated","value":"Funkcija zaklepanja zaslona na Session uporablja Face ID."}},"sq":{"stringUnit":{"state":"translated","value":"Veçoria e mbylljes së ekranit në Session përdor Face ID."}},"sr":{"stringUnit":{"state":"translated","value":"Функција закључавања екрана на Session користи Face ID."}},"sr-Latn":{"stringUnit":{"state":"translated","value":"Funkcija zaključavanja ekrana na Session koristi Face ID."}},"sv-SE":{"stringUnit":{"state":"translated","value":"Skärmlåsfunktionen på Session använder Face ID."}},"sw":{"stringUnit":{"state":"translated","value":"Kipengele cha kufuli skrini kwenye Session kinatumia Face ID."}},"ta":{"stringUnit":{"state":"translated","value":"Session இல் திரை பூட்டு அம்சம் முக அடையாளத்தை பயன்படுத்துகிறது."}},"te":{"stringUnit":{"state":"translated","value":"Sessionలో స్క్రీన్ లాక్ ఫీచర్ ఫేస్ ఐడి నీ ఉపయోగిస్తుంది."}},"th":{"stringUnit":{"state":"translated","value":"ฟีเจอร์ล็อกหน้าจอใน Session ใช้ Face ID"}},"tr":{"stringUnit":{"state":"translated","value":"Session ekran kilidi özelliği Face ID kullanır."}},"uk":{"stringUnit":{"state":"translated","value":"Функція блокування екрана в Session використовує Face ID."}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session پر سکرین لاک خصوصیت Face ID کا استعمال کرتی ہے۔"}},"uz":{"stringUnit":{"state":"translated","value":"Session dagi ekran blokirovkasi funksiyasi Face ID dan foydalanadi."}},"vi":{"stringUnit":{"state":"translated","value":"Tính năng khóa màn hình trên Session sử dụng Face ID."}},"xh":{"stringUnit":{"state":"translated","value":"Umsebenzi wokutshixa isikrini kwi-Session usebenzisa i-Face ID."}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session的屏幕锁功能使用 Face ID。"}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 上的螢幕鎖功能使用 Face ID。"}}}},"NSHumanReadableCopyright":{"comment":"Copyright (human-readable)","extractionState":"extracted_with_value","localizations":{"en":{"stringUnit":{"state":"new","value":"com.loki-project.loki-messenger"}}}},"NSMicrophoneUsageDescription":{"extractionState":"manual","localizations":{"af":{"stringUnit":{"state":"translated","value":"Session het mikrofoon toegang nodig om oproepe te maak en oudioboodskappe op te neem."}},"ar":{"stringUnit":{"state":"translated","value":"Session يحتاج إذن الوصول إلى الميكروفون لإجراء المكالمات وتسجيل الرسائل الصوتية."}},"az":{"stringUnit":{"state":"translated","value":"Session zəng etmək və səsli mesajlar yazmaq üçün mikrofona müraciət etməlidir."}},"bal":{"stringUnit":{"state":"translated","value":"Session مایکروفون پاتبسینہ حاصل نودہ کلمات پیغامشین زانت"}},"be":{"stringUnit":{"state":"translated","value":"Session патрэбен доступ да мікрафона, каб здзяйсняць званкі і запісваць аўдыя паведамленні."}},"bg":{"stringUnit":{"state":"translated","value":"Session се нуждае от достъп до микрофона, за да осъществява обаждания и записва аудио съобщения."}},"bn":{"stringUnit":{"state":"translated","value":"কল করার জন্য এবং অডিও মেসেজ রেকর্ড করার জন্য Session এর মাইক্রোফোন অ্যাকসেস প্রয়োজন।"}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita accés al micròfon per fer trucades i gravar missatges d'àudio."}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje přístup k mikrofonu pro volání a nahrávání zvukových zpráv."}},"cy":{"stringUnit":{"state":"translated","value":"Mae Session angen mynediad i'r meicroffon i wneud galwadau a recordio negeseuon sain."}},"da":{"stringUnit":{"state":"translated","value":"Session kræver mikrofonadgang for at foretage opkald og optage lydmeddelelser."}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt Mikrofonzugriff, um Anrufe zu tätigen und Audionachrichten aufzuzeichnen."}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στο μικρόφωνο για την αποστολή ηχητικών μηνυμάτων."}},"en":{"stringUnit":{"state":"translated","value":"Session needs microphone access to make calls and record audio messages."}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas mikrofonan aliron por fari vokojn kaj registri aŭdajn mesaĝojn."}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita acceso al micrófono para hacer llamadas y grabar mensajes de audio."}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso al micrófono para hacer llamadas y grabar mensajes de audio."}},"et":{"stringUnit":{"state":"translated","value":"Session vajab mikrofoni juurdepääsu, et teha kõnesid ja salvestada helisõnumeid."}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k mikrofonoaren sarbidea behar du deiak egiteko eta audio mezuak grabatzeko."}},"fa":{"stringUnit":{"state":"translated","value":"Session برای برقراری تماس و ضبط پیام‌های صوتی نیاز به دسترسی میکروفن دارد."}},"fi":{"stringUnit":{"state":"translated","value":"Session tarvitsee mikrofonin käyttöoikeuden puheluiden soittamiseen ja ääniviestien nauhoittamiseen."}},"fil":{"stringUnit":{"state":"translated","value":"Ang Session ay nangangailangan ng access sa mikropono upang tumawag at mag-record ng mga mensaheng audio."}},"fr":{"stringUnit":{"state":"translated","value":"Session a besoin de l’accès au microphone pour passer des appels et enregistrer des messages audio."}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita acceder ao micrófono para facer chamadas e gravar mensaxes de audio."}},"ha":{"stringUnit":{"state":"translated","value":"Session yana buƙatar samun damar makirufo don yin kira da rikodin saƙonnin murya."}},"he":{"stringUnit":{"state":"translated","value":"Session צריך הרשאת מיקרופון לשיחות ולהודעות שמע."}},"hi":{"stringUnit":{"state":"translated","value":"कॉल करने और ऑडियो संदेश रिकॉर्ड करने के लिए Session को माइक्रोफोन एक्सेस की आवश्यकता है।"}},"hr":{"stringUnit":{"state":"translated","value":"Session treba pristup mikrofonu za obavljanje poziva i snimanje audio poruka."}},"hu":{"stringUnit":{"state":"translated","value":"Session alkalmazásnak mikrofon-hozzáférésre van szüksége hívások bonyolítására és hangüzeneteket rögzítésére."}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ը պահանջում է խոսափողին հասանելիություն զանգեր կատարելու և ձայնային հաղորդագրություններ արձանագրելու համար։"}},"id":{"stringUnit":{"state":"translated","value":"Session membutuhkan akses mikrofon untuk melakukan panggilan dan merekam pesan audio."}},"it":{"stringUnit":{"state":"translated","value":"Session richiede l'accesso al microfono per effettuare chiamate e registrare messaggi audio."}},"ja":{"stringUnit":{"state":"translated","value":"Sessionで通話をかけたり、音声メッセージを録音するにはマイクへのアクセスが必要です。"}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება მიკროფონის წვდომა ზარების შესასრულებლად და აუდიო შეტყობინებების ჩასაწერად."}},"km":{"stringUnit":{"state":"translated","value":"Session ត្រូវការវិស្សមន្តងសម្រាប់ដាក់ស្នើរ និងថតសារ​សំឡេង។"}},"kn":{"stringUnit":{"state":"translated","value":"Session ಗೆ ಕಾಲ್‌ಗಳು ಮಾಡಲು ಮತ್ತು ಆಡಿಯೊ ಸಂದೇಶಗಳನ್ನು ದಾಖಲು ಮಾಡಲು ಮೈಕ್ರೊಫೋನ್ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ."}},"ko":{"stringUnit":{"state":"translated","value":"Session은 통화를 하고 음성 메시지를 녹음하기 위해 마이크 접근이 필요합니다."}},"ku":{"stringUnit":{"state":"translated","value":"Session دەتوانێت بەکارهێنانی داده‌یەکیی وەکو پەیوەستەکان بکات بۆ پەیوەندیش"}},"ku-TR":{"stringUnit":{"state":"translated","value":"Session permiya mîkrofon hewce dike da ku lêgerîn bike û peyman dengî record bike."}},"lg":{"stringUnit":{"state":"translated","value":"Session yeetaaga ssensa ya mmikirofono okukola eyitibwamu n’okuwandiika obubaka obuweereze."}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງການເຂົ້າເຖິງໄມໂຄໂຟນເພື່ອໂທແລະບັນທຶກເສັຽງຂໍ້ຄວາມສຽງ."}},"lt":{"stringUnit":{"state":"translated","value":"Session reikia prieigos prie mikrofono, kad galėtumėte skambinti ir įrašinėti garso žinutes."}},"lv":{"stringUnit":{"state":"translated","value":"Session ir nepieciešama piekļuve mikrofonam, lai veiktu zvanus un ierakstītu audio ziņas."}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од пристап до микрофонот за да врши повици и снима аудио пораки."}},"mn":{"stringUnit":{"state":"translated","value":"Session дуудлага хийх болон аудио мессеж бичихийн тулд микрофоны хандалт хэрэгтэй."}},"ms":{"stringUnit":{"state":"translated","value":"Session memerlukan akses mikrofon untuk membuat panggilan dan merakam mesej audio."}},"my":{"stringUnit":{"state":"translated","value":"Session မှ ဖုန်းခေါ်ဆိုမှုများနှင့် အသံမက်ဆေ့များကို မှတ်တမ်းတင်ရန် မိုက်ခရိုဖုန်းအသုံးပြုခွင့် လိုအပ်ပါတယ်။"}},"nb":{"stringUnit":{"state":"translated","value":"Session trenger mikrofontilgang for å ringe og spille inn lydmeldinger."}},"nb-NO":{"stringUnit":{"state":"translated","value":"Session trenger mikrofontilgang for å foreta samtaler og ta opp lydmeldinger."}},"ne-NP":{"stringUnit":{"state":"translated","value":"Session लाई कल गर्न र अडियो सन्देशहरू रेकर्ड गर्न माइक्रोफोनको पहुँच आवश्यक छ।"}},"nl":{"stringUnit":{"state":"translated","value":"Session heeft toegang tot de microfoon nodig om audioberichten op te nemen."}},"nn-NO":{"stringUnit":{"state":"translated","value":"Session trenger mikrofontilgang for å ringe og ta opp lydmeldinger."}},"ny":{"stringUnit":{"state":"translated","value":"Session iyenera kuitanira microphone kuti ipangane mafoni ndi kujambula mauthenga am'mawu."}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਕਾਲਾ ਕਰਣ ਅਤੇ ਆਡੀਓ ਸੁਨੇਹੇ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਮਾਈਕਰੋਫੋਨ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।"}},"pl":{"stringUnit":{"state":"translated","value":"Aby wykonywać połączenia i nagrywać wiadomości audio, aplikacja Session potrzebuje dostępu do mikrofonu."}},"ps":{"stringUnit":{"state":"translated","value":"Session د غږیزو پیغامونو لیږلو کولو لپاره مایکروفون ته اړتیا لري."}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao microfone para fazer chamadas e gravar mensagens de áudio."}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao microfone para fazer chamadas e gravar mensagens de áudio."}},"ro":{"stringUnit":{"state":"translated","value":"Session are nevoie de acces la microfon pentru a efectua apeluri și a înregistra mesaje audio."}},"ru":{"stringUnit":{"state":"translated","value":"Session требуется доступ к микрофону для совершения звонков и записи голосовых сообщений."}},"sh":{"stringUnit":{"state":"translated","value":"Session treba pristup mikrofonu za obavljanje poziva i snimanje audio poruka."}},"si-LK":{"stringUnit":{"state":"translated","value":"ඇමතුම් ලබා දීම සහ ශ්‍රව්‍ය පණිවිඩ පටිගත කිරීම සඳහා Sessionට මයික්‍රෆෝන ප්‍රවේශය අවශ්‍යයි."}},"sk":{"stringUnit":{"state":"translated","value":"Session potrebuje prístup k mikrofónu na uskutočnenie hovorov a nahranie zvukových správ."}},"sl":{"stringUnit":{"state":"translated","value":"Session potrebuje dostop do mikrofona za klice in snemanje zvočnih sporočil."}},"sq":{"stringUnit":{"state":"translated","value":"Session ka nevojë për leje përdorimi të mikrofonit për të bërë thirrje dhe për të regjistruar mesazhe audio."}},"sr":{"stringUnit":{"state":"translated","value":"Session треба дозволу за микрофон да би обављао позиве и снимао аудио поруке."}},"sr-Latn":{"stringUnit":{"state":"translated","value":"Session treba pristup mikrofonu da bi obavljao pozive i snimao audio poruke."}},"sv-SE":{"stringUnit":{"state":"translated","value":"Session behöver mikrofonåtkomst för att ringa och spela in ljudmeddelanden."}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya kipaza sauti kupiga simu na kurekodi ujumbe wa sauti."}},"ta":{"stringUnit":{"state":"translated","value":"Session அழைப்புகளை செய்ய மற்றும் ஆடியோ தகவல்களை பதிவு செய்ய மைக்ரோஃபோன் அணுகல் தேவை."}},"te":{"stringUnit":{"state":"translated","value":"కాల్ చేయడానికి మరియు ఆడియో సందేశాలను రికార్డ్ చేయడానికి Session మైక్రోఫోన్ యాక్సెస్ అవసరం."}},"th":{"stringUnit":{"state":"translated","value":"Session ต้องได้รับอนุญาตให้เข้าถึงไมโครโฟนเพื่อโทรและบันทึกข้อความเสียง"}},"tr":{"stringUnit":{"state":"translated","value":"Session, arama yapmak ve sesli mesaj kaydetmek için mikrofon erişimine ihtiyaç duyar."}},"uk":{"stringUnit":{"state":"translated","value":"Session потребує доступу до мікрофона для здійснення дзвінків та запису голосових повідомлень."}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو کال کرنے اور آڈیو پیغامات ریکارڈ کرنے کے لیے مائیکروفون تک رسائی درکار ہے۔"}},"uz":{"stringUnit":{"state":"translated","value":"Session qo'ng'iroqlar va audio xabarlarni yozish uchun mikrofonga kirishga ruxsat talab qiladi."}},"vi":{"stringUnit":{"state":"translated","value":"Session cần quyền truy cập microphone để gọi điện và ghi âm tin nhắn thoại."}},"xh":{"stringUnit":{"state":"translated","value":"Session ifuna ukufikelela kwisixhobo somculo wokwenza iminxeba kunye nokurekhoda imiyalezo yesandi."}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要麦克风访问权限来进行语音通话及录制语音消息。"}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 需要麥克風存取權來語音通話和錄製語音訊息。"}}}},"NSPhotoLibraryAddUsageDescription":{"extractionState":"manual","localizations":{"af":{"stringUnit":{"state":"translated","value":"Session het berging toegang nodig om aanhegsels en media te stoor."}},"ar":{"stringUnit":{"state":"translated","value":"Session يحتاج إذن الوصول إلى التخزين لحفظ المرفقات والوسائط."}},"az":{"stringUnit":{"state":"translated","value":"Session qoşmaları və medianı saxlamaq üçün anbara müraciət etməlidir."}},"bal":{"stringUnit":{"state":"translated","value":"Session ذخیرہ پاتبسینہ محفوظ عریض او ذرہے"}},"be":{"stringUnit":{"state":"translated","value":"Session патрабуе дазволу да сховішча каб захоўваць ўкладанні і медыя."}},"bg":{"stringUnit":{"state":"translated","value":"Session се нуждае от достъп до хранилището, за да запазва прикачени файлове и медия."}},"bn":{"stringUnit":{"state":"translated","value":"সংযুক্তি এবং মিডিয়া সংরক্ষণ করতে Session এর স্টোরেজ অ্যাকসেস প্রয়োজন।"}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita accés a l'emmagatzematge per desar els fitxers adjunts i els suports."}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje přístup k úložišti pro ukládání příloh a médií."}},"cy":{"stringUnit":{"state":"translated","value":"Mae Session angen mynediad i storio i gadw atodiadau a chyfryngau."}},"da":{"stringUnit":{"state":"translated","value":"Session skal have lageradgang for at gemme vedhæftninger og mediefiler."}},"de":{"stringUnit":{"state":"translated","value":"Session benötigt Speicherzugriff, um Anhänge und Medien zu speichern."}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στον αποθηκευτικό χώρο για να αποθηκεύσει συνημμένα και πολυμέσα."}},"en":{"stringUnit":{"state":"translated","value":"Session needs storage access to save attachments and media."}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas aliron al memoro por konservi aldonaĵojn kaj aŭdvidaĵojn."}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita acceso al almacenamiento para guardar adjuntos y multimedia."}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso de almacenamiento para guardar archivos adjuntos y medios."}},"et":{"stringUnit":{"state":"translated","value":"Session vajab salvestusruumi ligipääsu, et salvestada manuseid ja meediat."}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k biltegirako sarbidea behar du eranskinak eta hedabideak gordetzeko."}},"fa":{"stringUnit":{"state":"translated","value":"Session برای ذخیره پیوست‌ها و رسانه‌ها نیاز به دسترسی به حافظه دارد."}},"fi":{"stringUnit":{"state":"translated","value":"Session tarvitsee tallennustilan käyttöoikeuden liitteiden ja median tallentamiseksi."}},"fil":{"stringUnit":{"state":"translated","value":"Ang Session ay nangangailangan ng access sa storage upang mag-save ng mga attachment at media."}},"fr":{"stringUnit":{"state":"translated","value":"Session doit accéder au stockage pour enregistrer les pièces jointes et les médias."}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita permiso para acceder ao almacenamento para gardar anexos e medios."}},"ha":{"stringUnit":{"state":"translated","value":"Session yana buƙatar samun damar ajiya don adana abubuwan haɗe-haɗe da kafofin watsa labarai."}},"he":{"stringUnit":{"state":"translated","value":"Session זקוק לגישה לאחסון כדי לשמור צרופות ומדיה."}},"hi":{"stringUnit":{"state":"translated","value":"Session को अनुलग्नक और मीडिया को सहेजने के लिए संग्रहण पहुंच चाहिए।"}},"hr":{"stringUnit":{"state":"translated","value":"Session treba pristup memoriji za spremanje privitaka i medija."}},"hu":{"stringUnit":{"state":"translated","value":"Session alkalmazásnak tárhely-hozzáférésre van szüksége a mellékletek és médiák mentéséhez."}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ը պահանջում է պահեստային հասանելիություն կցորդներն ու մեդիան պահպանելու համար։"}},"id":{"stringUnit":{"state":"translated","value":"Session membutuhkan akses penyimpanan untuk menyimpan lampiran dan media."}},"it":{"stringUnit":{"state":"translated","value":"Session richiede l'accesso allo storage per salvare allegati e media."}},"ja":{"stringUnit":{"state":"translated","value":"Sessionは添付ファイルやメディアを保存するためにストレージへのアクセスが必要です。"}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება მეხსიერების წვდომა მიმაგრებული ფაილებისა და მედიების შესანახად."}},"km":{"stringUnit":{"state":"translated","value":"Session ត្រូវការចូលប្រើវើសកម្មដើម្បីរក្សាទុកឯកសារ និងមេឌៀ។"}},"kn":{"stringUnit":{"state":"translated","value":"Session ಗೆ ಅಟ್ಯಾಚ್ಮೆಂಟ್‌ಗಳು ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ಉಳಿಸಲು ಸಂಗ್ರಹಣೆಯ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ."}},"ko":{"stringUnit":{"state":"translated","value":"Session은 첨부 파일과 미디어를 저장하기 위해 저장 공간 접근이 필요합니다."}},"ku":{"stringUnit":{"state":"translated","value":"Session پێویستە بەکارهێنانی خزینەی فایل بۆ هەڵگرتنی پەیوەستەکان و میدیا ناردن"}},"ku-TR":{"stringUnit":{"state":"translated","value":"Session permiya hilkişina xelasî û medyayê hewce dike."}},"lg":{"stringUnit":{"state":"translated","value":"Session yeetaaga ssensa y’obusobozi okusigala ekwatibwako aammaamu n’emikutu."}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງການເຂົ້າເຖິງຟາຍເພື່ອບັນທຶກຢາງແລະວິດີໂອ."}},"lt":{"stringUnit":{"state":"translated","value":"Session reikia prieigos prie saugyklos, kad galėtų įrašyti priedus ir mediją."}},"lv":{"stringUnit":{"state":"translated","value":"Session ir nepieciešama pieeja glabātuve failu un multimediju saglabāšanai."}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од пристап до складиштето за да зачува прилози и медиуми."}},"mn":{"stringUnit":{"state":"translated","value":"Session нь хавсралт болон медиа хадгалахын тулд сангийн хандалт хэрэгтэй."}},"ms":{"stringUnit":{"state":"translated","value":"Session memerlukan akses storan untuk menyimpan lampiran dan media."}},"my":{"stringUnit":{"state":"translated","value":"Session သည် ပူးတွဲချက်များနှင့် မီဒီယာကို သိမ်းဆည်းရန် သိုလှောင်မှုခွင့်ပြုချက်လိုအပ်ပါသည်။"}},"nb":{"stringUnit":{"state":"translated","value":"Session trenger lagringstilgang for å lagre vedlegg og media."}},"nb-NO":{"stringUnit":{"state":"translated","value":"Session trenger lagringstilgang for å lagre vedlegg og media."}},"ne-NP":{"stringUnit":{"state":"translated","value":"Session लाई अट्याचमेन्ट र मिडिया सेभ गर्न स्टोरज पहुँच आवश्यक छ।"}},"nl":{"stringUnit":{"state":"translated","value":"Session heeft opslagtoegang nodig om bijlagen en media op te slaan."}},"nn-NO":{"stringUnit":{"state":"translated","value":"Session trenger lagringstilgang for å lagre vedlegg og media."}},"ny":{"stringUnit":{"state":"translated","value":"Session imafuna mwayi wosungira kuti asunge attachments ndi media."}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਅਟੈਚਮੈਂਟਸ ਅਤੇ ਮੀਡੀਆ ਸੰਭਾਲਣ ਲਈ ਸਟੋਰੇਜ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।"}},"pl":{"stringUnit":{"state":"translated","value":"Aby zapisywać załączniki i multimedia, aplikacja Session potrzebuje dostępu do pamięci."}},"ps":{"stringUnit":{"state":"translated","value":"Session پیوستونونو او میډیا خوندي کولو لپاره ذخیره کولو ته اړتیا لري."}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao armazenamento para salvar anexos e mídias."}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao armazenamento para salvar anexos e mídia."}},"ro":{"stringUnit":{"state":"translated","value":"Session are nevoie de acces la spațiul de stocare pentru a salva atașamente și media."}},"ru":{"stringUnit":{"state":"translated","value":"Session требуется доступ к хранилищу для сохранения вложений и медиафайлов."}},"sh":{"stringUnit":{"state":"translated","value":"Session treba pristup pohrani za spremanje privitaka i medija."}},"si-LK":{"stringUnit":{"state":"translated","value":"ඇමුණුම් සහ මාධ්‍ය සුරැකීම සඳහා Sessionට ගබඩා ප්‍රවේශය අවශ්‍යවේ."}},"sk":{"stringUnit":{"state":"translated","value":"Session potrebuje prístup k úložisku na uloženie príloh a médií."}},"sl":{"stringUnit":{"state":"translated","value":"Session potrebuje dostop do shrambe za shranjevanje prilog in medijev."}},"sq":{"stringUnit":{"state":"translated","value":"Session ka nevojë për leje të hapësirës ruajtëse për të ruajtur attachment-et dhe median."}},"sr":{"stringUnit":{"state":"translated","value":"Session треба приступ складишту да сачува прилоге и медије."}},"sr-Latn":{"stringUnit":{"state":"translated","value":"Session treba pristup skladištu da sačuva priloge i medije."}},"sv-SE":{"stringUnit":{"state":"translated","value":"Session behöver åtkomst till lagringsutrymmet för att kunna spara bifogade filer och media."}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya hifadhi ili kuhifadhi viambatanisho na vyombo vya habari."}},"ta":{"stringUnit":{"state":"translated","value":"Session இணைப்புகள் மற்றும் மெடியாவை சேமிக்க சேமிப்பக அணுகல் தேவை."}},"te":{"stringUnit":{"state":"translated","value":"అటాచ్మెంట్‌లు మరియు మీడియాను సేవ్ చేయడానికి Session కు నిల్వ యాక్సెస్ అవసరం."}},"th":{"stringUnit":{"state":"translated","value":"Session ต้องได้รับอนุญาตให้เข้าถึงที่เก็บข้อมูลเพื่อบันทึกไฟล์แนบและสื่อ"}},"tr":{"stringUnit":{"state":"translated","value":"Session, ekleri ve medyayı kaydetmek için depolama erişimine ihtiyaç duyar."}},"uk":{"stringUnit":{"state":"translated","value":"Session потребує доступу до сховища для збереження вкладень та медіа."}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو منسلکات اور میڈیا محفوظ کرنے کے لیے اسٹوریج کی اجازت درکار ہے۔"}},"uz":{"stringUnit":{"state":"translated","value":"Session fayl va media tarkiblarini saqlash uchun saqlashga kirishni talab qiladi."}},"vi":{"stringUnit":{"state":"translated","value":"Session cần quyền truy cập lưu trữ để lưu các tập tin đính kèm và phương tiện."}},"xh":{"stringUnit":{"state":"translated","value":"Session ifuna ukufikelela kwindawo yokugcina ukuthumela iziphumo kunye nemidiya."}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要存储权限来保存附件和媒体。"}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 需要存儲權限以保存附件和媒體。"}}}},"NSPhotoLibraryUsageDescription":{"extractionState":"manual","localizations":{"af":{"stringUnit":{"state":"translated","value":"Session het berging toegang nodig om foto's en video's te stuur."}},"ar":{"stringUnit":{"state":"translated","value":"Session يحتاج إذن الوصول إلى التخزين لإرسال الصور ومقاطع الفيديو."}},"az":{"stringUnit":{"state":"translated","value":"Session foto və videoları göndərmək üçün anbara müraciət etməlidir."}},"bal":{"stringUnit":{"state":"translated","value":"Session ذخیرہ پاتبسینہ بھیجنے تصویریں دکنیں"}},"be":{"stringUnit":{"state":"translated","value":"Session патрабуе дазволу да сховішча каб дасылаць фота і відэа."}},"bg":{"stringUnit":{"state":"translated","value":"Session се нуждае от достъп до хранилището, за да изпраща снимки и видеота."}},"bn":{"stringUnit":{"state":"translated","value":"ছবি এবং ভিডিও প্রেরণ করতে Session এর স্টোরেজ অ্যাকসেস প্রয়োজন।"}},"ca":{"stringUnit":{"state":"translated","value":"Session necessita accés a l'emmagatzematge per enviar fotografies i vídeos."}},"cs":{"stringUnit":{"state":"translated","value":"Session potřebuje přístup k úložišti pro odesílání fotografií a videí."}},"cy":{"stringUnit":{"state":"translated","value":"Mae Session angen mynediad i storio i anfon lluniau a fideos."}},"da":{"stringUnit":{"state":"translated","value":"Session har brug for lageradgang for at sende billeder og videoer."}},"de":{"stringUnit":{"state":"translated","value":"Session Benötigt Speicherzugriff, um Fotos und Videos zu senden."}},"el":{"stringUnit":{"state":"translated","value":"Το Session χρειάζεται πρόσβαση στον αποθηκευτικό χώρο για την αποστολή φωτογραφιών και βίντεο."}},"en":{"stringUnit":{"state":"translated","value":"Session needs storage access to send photos and videos."}},"eo":{"stringUnit":{"state":"translated","value":"Session bezonas aliron al memoro por sendi bildojn kaj videojn."}},"es-419":{"stringUnit":{"state":"translated","value":"Session necesita acceso al almacenamiento para enviar fotos y videos."}},"es-ES":{"stringUnit":{"state":"translated","value":"Session necesita acceso de almacenamiento para enviar fotos y videos."}},"et":{"stringUnit":{"state":"translated","value":"Session vajab fotode ja videote saatmiseks juurdepääsu salvestusruumile."}},"eu":{"stringUnit":{"state":"translated","value":"Session(e)k biltegirako sarbidea behar du argazkiak eta bideoak bidaltzeko."}},"fa":{"stringUnit":{"state":"translated","value":"Session برای ارسال عکس‌ها و ویدئو‌ها نیاز به دسترسی حافظه دارد."}},"fi":{"stringUnit":{"state":"translated","value":"Session tarvitsee tallennustilan käyttöoikeuden kuvien ja videoiden lähettämiseksi."}},"fil":{"stringUnit":{"state":"translated","value":"Ang Session ay nangangailangan ng access sa storage upang magpadala ng mga litrato at video."}},"fr":{"stringUnit":{"state":"translated","value":"Session a besoin d'un accès au stockage pour envoyer des photos et des vidéos."}},"gl":{"stringUnit":{"state":"translated","value":"Session necesita permiso para acceder ao almacenamento para enviar fotos e vídeos."}},"ha":{"stringUnit":{"state":"translated","value":"Session yana buƙatar samun damar ajiya don aikawa da hotuna da bidiyo."}},"he":{"stringUnit":{"state":"translated","value":"Session צריך הרשאות גישה לאחסון על מנת לשלוח תמונות ווידיאו."}},"hi":{"stringUnit":{"state":"translated","value":"Session को फ़ोटो और वीडियो भेजने के लिए संग्रहण पहुंच चाहिए।"}},"hr":{"stringUnit":{"state":"translated","value":"Session treba pristup memoriji za slanje fotografija i videozapisa."}},"hu":{"stringUnit":{"state":"translated","value":"Session alkalmazásnak tárhely-hozzáférésre van szüksége a fotók és videók elküldéséhez."}},"hy-AM":{"stringUnit":{"state":"translated","value":"Session-ը պահանջում է պահեստային հասանելիություն՝ լուսանկարներ և տեսանյութեր ուղարկելու համար։"}},"id":{"stringUnit":{"state":"translated","value":"Session membutuhkan akses penyimpanan untuk mengirim foto dan video."}},"it":{"stringUnit":{"state":"translated","value":"Session richiede l'accesso all'archiviazione per inviare foto e video."}},"ja":{"stringUnit":{"state":"translated","value":"Sessionは写真や動画を送信するためにストレージへのアクセスが必要です"}},"ka":{"stringUnit":{"state":"translated","value":"Session-ს სჭირდება მეხსიერების წვდომა ფოტოებისა და ვიდეოების გასაგზავნად."}},"km":{"stringUnit":{"state":"translated","value":"Session ត្រូវការភ្ជាប់អង្គរក្សាទុកដើម្បីផ្ញើរូបទិញនិងវីដេអូ."}},"kn":{"stringUnit":{"state":"translated","value":"Session ಗೆ ಚಿತ್ರಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಕಳುಹಿಸಲು ಸಂಗ್ರಹಣೆಯ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ."}},"ko":{"stringUnit":{"state":"translated","value":"Session은 사진과 동영상을 전송하기 위해 저장공간 접근이 필요합니다."}},"ku":{"stringUnit":{"state":"translated","value":"Session پێویستە بەکارهێنانی خزینە بۆ ناردنی وێنە و ڤیدیۆکان."}},"ku-TR":{"stringUnit":{"state":"translated","value":"Session permiya hilkişina wêneyên û vedîdarên bişîne."}},"lg":{"stringUnit":{"state":"translated","value":"Session yeetaaga ssensa y’obusobozi okutuma ebifaananyi n’ebifaananyi ebya vidiyo."}},"lo":{"stringUnit":{"state":"translated","value":"Session ຕ້ອງການເຂົ້າເຖິງຟາຍເພື່ອສົ່ງຮູບແລະວິດີໂອ."}},"lt":{"stringUnit":{"state":"translated","value":"Session reikia prieigos prie saugyklos norint siųsti nuotraukas ir vaizdo įrašus."}},"lv":{"stringUnit":{"state":"translated","value":"Session vajag pieeju failiem, lai sūtītu atēlus un video."}},"mk":{"stringUnit":{"state":"translated","value":"Session има потреба од пристап до складиштето за да испраќа фотографии и видеа."}},"mn":{"stringUnit":{"state":"translated","value":"Session зураг болон видеонуудыг илгээхийн тулд сангийн хандалт хэрэгтэй."}},"ms":{"stringUnit":{"state":"translated","value":"Session memerlukan akses storan untuk menghantar foto dan video."}},"my":{"stringUnit":{"state":"translated","value":"Session သည် ဓာတ်ပုံများနှင့် ဗွီဒီယိုများ ပို့ရန် သိမ်းဆည်းမှုပုံစံခွင့်လိုအပ်သည်။"}},"nb":{"stringUnit":{"state":"translated","value":"Session trenger lagringstilgang for å sende bilder og videoer."}},"nb-NO":{"stringUnit":{"state":"translated","value":"Session trenger lagringstilgang for å sende bilder og videoer."}},"ne-NP":{"stringUnit":{"state":"translated","value":"Session लाई फोटो र भिडियोहरू पठाउन स्टोरज पहुँच आवश्यक छ।"}},"nl":{"stringUnit":{"state":"translated","value":"Session heeft toegang nodig tot de opslag om foto's en video's te kunnen verzenden."}},"nn-NO":{"stringUnit":{"state":"translated","value":"Session trenger lagringstilgang for å sende bilete og videoar."}},"ny":{"stringUnit":{"state":"translated","value":"Session imafuna mwayi wosungira kuti atumize zithunzi ndi makanema."}},"pa-IN":{"stringUnit":{"state":"translated","value":"Session ਨੂੰ ਫੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓਜ਼ ਭੇਜਣ ਲਈ ਸਟੋਰੇਜ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ।"}},"pl":{"stringUnit":{"state":"translated","value":"Aby wysyłać zdjęcia i filmy, aplikacja Session potrzebuje dostępu do pamięci."}},"ps":{"stringUnit":{"state":"translated","value":"Session عکسونه او ویډیوګانې لیږلو لپاره ذخیره کولو ته اړتیا لري."}},"pt-BR":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao seu armazenamento para enviar fotos e vídeos."}},"pt-PT":{"stringUnit":{"state":"translated","value":"Session precisa de acesso ao armazenamento para enviar fotos e vídeos."}},"ro":{"stringUnit":{"state":"translated","value":"Session are nevoie de acces la spațiul de stocare pentru a trimite poze și clipuri video."}},"ru":{"stringUnit":{"state":"translated","value":"Session требуется доступ к хранилищу для отправки фотографий и видео."}},"sh":{"stringUnit":{"state":"translated","value":"Session treba pristup pohrani za slanje slika i videa."}},"si-LK":{"stringUnit":{"state":"translated","value":"ඡායාරූප සහ වීඩියෝ යැවීමට Sessionට ගබඩා ප්‍රවේශය අවශ්‍යයි."}},"sk":{"stringUnit":{"state":"translated","value":"Session potrebuje prístup na disk na posielanie fotiek a videí."}},"sl":{"stringUnit":{"state":"translated","value":"Session potrebuje dostop do shrambe za pošiljanje fotografij in videoposnetkov."}},"sq":{"stringUnit":{"state":"translated","value":"Session ka nevojë për leje të hapësirës ruajtëse për të dërguar foto dhe video."}},"sr":{"stringUnit":{"state":"translated","value":"Session треба дозволу за складиште да шаље слике и видео клипове."}},"sr-Latn":{"stringUnit":{"state":"translated","value":"Session treba pristup skladištu da šalje fotografije i videe."}},"sv-SE":{"stringUnit":{"state":"translated","value":"Session behöver åtkomst till lagringsutrymmet för att kunna skicka foton och filmer."}},"sw":{"stringUnit":{"state":"translated","value":"Session inahitaji ruhusa ya kuhifadhi ili kutuma picha na video."}},"ta":{"stringUnit":{"state":"translated","value":"Session புகைப்படங்கள் மற்றும் வீடியோக்களை அனுப்ப சேமிப்பக அணுகல் தேவை."}},"te":{"stringUnit":{"state":"translated","value":"ఫోటోలు మరియు వీడియోలను పంపడానికి Session కు నిల్వ యాక్సెస్ అవసరం."}},"th":{"stringUnit":{"state":"translated","value":"Session ต้องได้รับอนุญาตให้เข้าถึงที่เก็บข้อมูลเพื่อส่งรูปภาพและวิดีโอ"}},"tr":{"stringUnit":{"state":"translated","value":"Session, fotoğraf ve video göndermek için depolama erişimine ihtiyaç duyar."}},"uk":{"stringUnit":{"state":"translated","value":"Session потребує доступу до сховища для відправлення фотографій та відео."}},"ur-IN":{"stringUnit":{"state":"translated","value":"Session کو تصاویر اور ویڈیوز بھیجنے کے لیے اسٹوریج کی اجازت درکار ہے۔"}},"uz":{"stringUnit":{"state":"translated","value":"Session fotosuratlar va videolarni yuborish uchun saqlashga kirishni talab qiladi."}},"vi":{"stringUnit":{"state":"translated","value":"Session cần quyền truy cập lưu trữ để gửi ảnh và video."}},"xh":{"stringUnit":{"state":"translated","value":"Session ifuna ukufikelela kwindawo yokugcina ukuthumela iifoto nevidiyo."}},"zh-CN":{"stringUnit":{"state":"translated","value":"Session需要存储权限以取用及发送照片或视频。"}},"zh-TW":{"stringUnit":{"state":"translated","value":"Session 需要存儲權限來發送照片和影片。"}}}}},"version":"1.0"} \ No newline at end of file diff --git a/Session/Meta/Translations/Localizable.xcstrings b/Session/Meta/Translations/Localizable.xcstrings index 595608bc99..2d0595c4d3 100644 --- a/Session/Meta/Translations/Localizable.xcstrings +++ b/Session/Meta/Translations/Localizable.xcstrings @@ -1,6 +1,22 @@ { "sourceLanguage" : "en", "strings" : { + "@" : { + + }, + "%@%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@%2$@" + } + } + } + }, + "%llu" : { + + }, "about" : { "extractionState" : "manual", "localizations" : { @@ -971,972 +987,972 @@ } } }, - "accountIDCopy" : { + "accountIdCopied" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Kopieer Rekening ID" + "value" : "Rekening gekopieer" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "نسخ معرف الحساب" + "value" : "تم نسخ معرف الحساب" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Hesab Kimliyini kopyala" + "value" : "Hesab Kimliyi kopyalandı" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "حساب کارت آئی ڈی کاپی کن" + "value" : "Account ID kopeke." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Скапіяваць Account ID" + "value" : "Ідэнтыфікатар уліковага запісу скапіраваны" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Копирай Account ID" + "value" : "ID на акаунтът е копиран" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "অ্যাকাউন্ট আইডি কপি করুন" + "value" : "অ্যাকাউন্ট আইডি কপি করা হয়েছে" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar ID del compte" + "value" : "ID del compte copiat" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Kopírovat ID účtu" + "value" : "ID účtu zkopírováno" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Copïo ID Cyfrif" + "value" : "ID Cyfrif wedi'i gopïo" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiér Account ID" + "value" : "Konto-ID kopieret" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Account-ID kopieren" + "value" : "Account-ID kopiert" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Αντιγραφή ID Λογαριασμού" + "value" : "Το ID Λογαριασμού Αντιγράφηκε" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Copy Account ID" + "value" : "Account ID Copied" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Kopii identigilon de konto" + "value" : "Konto-identigilo kopiita" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar ID de cuenta" + "value" : "ID de cuenta copiada" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar ID de cuenta" + "value" : "ID de cuenta copiada" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Kopeeri konto ID" + "value" : "Konto ID kopeeritud" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Kontu IDa kopiatu" + "value" : "Kontu ID kopiatu da" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "کپی کردن ID حساب کاربری" + "value" : "شناسه حساب کپی شد" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Kopioi Account ID" + "value" : "Tilin tunnus kopioitu" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Kopyahin ang Account ID" + "value" : "Nakopya na ang Account ID" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Copier l'ID de compte" + "value" : "ID de compte copié" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar ID de Conta" + "value" : "ID da conta copiado" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Kwafi ID na Asusun" + "value" : "Idan Asusu An Kwafi" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "העתק מזהה חשבון" + "value" : "קוד חשבון הועתק" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "खाता आईडी कॉपी करें" + "value" : "खाता आईडी कॉपी की गई" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiraj ID računa" + "value" : "ID Računa Kopiran" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Felhasználó ID másolása" + "value" : "Felhasználó ID másolva" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Պատճենել հաշվի ID-ն" + "value" : "Հաշվի ID-ն պատճենված է" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Salin ID Akun" + "value" : "ID Akun Disalin" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Copia ID utente" + "value" : "ID utente copiato" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "アカウント ID をコピー" + "value" : "アカウントIDがコピーされました" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "აკაუნტის ID-ის დაკოპირება" + "value" : "ანგარიშის ID დაკოპირდა" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "Copy Account ID" + "value" : "Account ID បានចម្លង" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಖಾತೆ ಐಡಿಯನ್ನು ನಕಲು ಮಾಡು" + "value" : "ಖಾತೆ ID ನಕಲಿಸಲಾಗಿದೆ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "계정 ID 복사" + "value" : "계정 ID 복사됨" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "لەبەرگەی ناونیشانی هەژمار" + "value" : "ناسنامەی هەژمار کۆپی کرایەوە" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiya Hesabê IDê" + "value" : "ID hesabê kopî kirî ye" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Koppa Account ID" + "value" : "Account ID Yasibwako" } }, "lo" : { "stringUnit" : { "state" : "translated", - "value" : "ເສັກກີ້າບເອີຢ໇ລໍ່ອີພອ່ຍ" + "value" : "ກົດລະເບີຕິ້ກໍໃຫ້ຊື່ໃຫ້ສະເພາະ." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kopijuoti paskyros ID" + "value" : "Paskyros ID nukopijuotas" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Kopēt Konta ID" + "value" : "Konts ID kopēts" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Копирај ИД на Сметка" + "value" : "Акаунт ID копирано" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Account ID-г хуулах" + "value" : "Бүртгэлийн ID хуулсан" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Salin Akaun ID" + "value" : "ID Akaun Disalin" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "Account ID ကို ကူးယူပါ" + "value" : "အကောင့်အိုင်ဒီ ကူးယူပြီးပါပြီ" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kopier konto-ID" + "value" : "Kontoid kopiert" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Kopier kontoid" + "value" : "Kontonummer kopiert" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "खाता आईडी प्रतिलिपि गर्नुहोस्" + "value" : "खाता आईडी कपी गरियो।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kopieer Account-ID" + "value" : "Account-ID gekopieerd" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Kopier konto-ID" + "value" : "Konto-ID kopiert" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Chotsani Akaunti ID" + "value" : "ID ya Akaunti Yaki embossed" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਅਕਾਊਂਟ ID ਕਾਪੀ ਕਰੋ" + "value" : "ਖਾਤਾ ਆਈ.ਡੀ. ਕਾਪੀ ਕੀਤੀ ਗਈ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiuj identyfikator konta" + "value" : "Skopiowano identyfikator konta" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "د ټولنې URL کاپي کړئ" + "value" : "د حساب آی ډي نقل شو" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar ID da Conta" + "value" : "ID da Conta Copiado" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar ID da Conta" + "value" : "ID da Conta Copiado" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Copiază ID-ul contului" + "value" : "ID cont copiat" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Скопировать ID аккаунта" + "value" : "ID аккаунта скопирован" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiraj Account ID" + "value" : "ID računa kopiran" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "Account ID පිටපත් කරන්න" + "value" : "Account ID පිටපත් කරන ලදී" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Kopírovať ID účtu" + "value" : "ID účtu skopírované" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiraj ID računa" + "value" : "ID računa kopiran" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Kopjo ID-në e llogarisë" + "value" : "Copy ID të llogarisë" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Копирај Account ID" + "value" : "Идентификација налога је копирана" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiraj ID naloga" + "value" : "ID naloga je kopiran" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiera Konto-ID" + "value" : "Kontonummer Kopierat" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Nakili ID ya Akaunti" + "value" : "Kitambulisho cha Akaunti Imenakiliwa" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "கணக்கு அடையாளத்தை நகலெடு" + "value" : "கணக்கு அடையாளம் நகலெடுக்கப்பட்டது" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "అకౌంట్ ID కాపీ చేయండి" + "value" : "ఖాతా ఐడి కాపీ చేయబడింది" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "Copy Account ID" + "value" : "คัดลอก ID บัญชีแล้ว" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Hesap ID'sini Kopyala" + "value" : "Hesap Kimliği Kopyalandı" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Копіювати ID облікового запису" + "value" : "ID облікового запису скопійовано" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "اکاؤنٹ آئی ڈی کاپی کریں" + "value" : "Account ID کو کاپی کیا گیا" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Hisob ID sini nusxalash" + "value" : "Akkaunt ID nusxalandi" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Sao chép Account ID" + "value" : "ID Tài khoản đã sao chép" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Kopa i i-ID yeAkhawunti" + "value" : "Iakhawunti ye-ID ikopiwe" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "复制帐户ID" + "value" : "账户ID已复制" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "複製帳號 ID" + "value" : "帳號 ID 已複製" } } } }, - "accountIdCopied" : { + "accountIDCopy" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Rekening gekopieer" + "value" : "Kopieer Rekening ID" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تم نسخ معرف الحساب" + "value" : "نسخ معرف الحساب" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Hesab Kimliyi kopyalandı" + "value" : "Hesab Kimliyini kopyala" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "Account ID kopeke." + "value" : "حساب کارت آئی ڈی کاپی کن" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Ідэнтыфікатар уліковага запісу скапіраваны" + "value" : "Скапіяваць Account ID" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "ID на акаунтът е копиран" + "value" : "Копирай Account ID" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "অ্যাকাউন্ট আইডি কপি করা হয়েছে" + "value" : "অ্যাকাউন্ট আইডি কপি করুন" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "ID del compte copiat" + "value" : "Copiar ID del compte" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "ID účtu zkopírováno" + "value" : "Kopírovat ID účtu" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "ID Cyfrif wedi'i gopïo" + "value" : "Copïo ID Cyfrif" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Konto-ID kopieret" + "value" : "Kopiér Account ID" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Account-ID kopiert" + "value" : "Account-ID kopieren" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Το ID Λογαριασμού Αντιγράφηκε" + "value" : "Αντιγραφή ID Λογαριασμού" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Account ID Copied" + "value" : "Copy Account ID" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Konto-identigilo kopiita" + "value" : "Kopii identigilon de konto" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "ID de cuenta copiada" + "value" : "Copiar ID de cuenta" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "ID de cuenta copiada" + "value" : "Copiar ID de cuenta" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Konto ID kopeeritud" + "value" : "Kopeeri konto ID" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Kontu ID kopiatu da" + "value" : "Kontu IDa kopiatu" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "شناسه حساب کپی شد" + "value" : "کپی کردن ID حساب کاربری" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Tilin tunnus kopioitu" + "value" : "Kopioi Account ID" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Nakopya na ang Account ID" + "value" : "Kopyahin ang Account ID" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "ID de compte copié" + "value" : "Copier l'ID de compte" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "ID da conta copiado" + "value" : "Copiar ID de Conta" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Idan Asusu An Kwafi" + "value" : "Kwafi ID na Asusun" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "קוד חשבון הועתק" + "value" : "העתק מזהה חשבון" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "खाता आईडी कॉपी की गई" + "value" : "खाता आईडी कॉपी करें" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "ID Računa Kopiran" + "value" : "Kopiraj ID računa" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Felhasználó ID másolva" + "value" : "Felhasználó ID másolása" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Հաշվի ID-ն պատճենված է" + "value" : "Պատճենել հաշվի ID-ն" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "ID Akun Disalin" + "value" : "Salin ID Akun" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "ID utente copiato" + "value" : "Copia ID utente" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "アカウントIDがコピーされました" + "value" : "アカウント ID をコピー" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ანგარიშის ID დაკოპირდა" + "value" : "აკაუნტის ID-ის დაკოპირება" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "Account ID បានចម្លង" + "value" : "Copy Account ID" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಖಾತೆ ID ನಕಲಿಸಲಾಗಿದೆ" + "value" : "ಖಾತೆ ಐಡಿಯನ್ನು ನಕಲು ಮಾಡು" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "계정 ID 복사됨" + "value" : "계정 ID 복사" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "ناسنامەی هەژمار کۆپی کرایەوە" + "value" : "لەبەرگەی ناونیشانی هەژمار" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "ID hesabê kopî kirî ye" + "value" : "Kopiya Hesabê IDê" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Account ID Yasibwako" + "value" : "Koppa Account ID" } }, "lo" : { "stringUnit" : { "state" : "translated", - "value" : "ກົດລະເບີຕິ້ກໍໃຫ້ຊື່ໃຫ້ສະເພາະ." + "value" : "ເສັກກີ້າບເອີຢ໇ລໍ່ອີພອ່ຍ" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Paskyros ID nukopijuotas" + "value" : "Kopijuoti paskyros ID" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Konts ID kopēts" + "value" : "Kopēt Konta ID" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Акаунт ID копирано" + "value" : "Копирај ИД на Сметка" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Бүртгэлийн ID хуулсан" + "value" : "Account ID-г хуулах" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "ID Akaun Disalin" + "value" : "Salin Akaun ID" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "အကောင့်အိုင်ဒီ ကူးယူပြီးပါပြီ" + "value" : "Account ID ကို ကူးယူပါ" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kontoid kopiert" + "value" : "Kopier konto-ID" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Kontonummer kopiert" + "value" : "Kopier kontoid" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "खाता आईडी कपी गरियो।" + "value" : "खाता आईडी प्रतिलिपि गर्नुहोस्" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Account-ID gekopieerd" + "value" : "Kopieer Account-ID" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Konto-ID kopiert" + "value" : "Kopier konto-ID" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "ID ya Akaunti Yaki embossed" + "value" : "Chotsani Akaunti ID" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਖਾਤਾ ਆਈ.ਡੀ. ਕਾਪੀ ਕੀਤੀ ਗਈ।" + "value" : "ਅਕਾਊਂਟ ID ਕਾਪੀ ਕਰੋ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Skopiowano identyfikator konta" + "value" : "Kopiuj identyfikator konta" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "د حساب آی ډي نقل شو" + "value" : "د ټولنې URL کاپي کړئ" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "ID da Conta Copiado" + "value" : "Copiar ID da Conta" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "ID da Conta Copiado" + "value" : "Copiar ID da Conta" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "ID cont copiat" + "value" : "Copiază ID-ul contului" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "ID аккаунта скопирован" + "value" : "Скопировать ID аккаунта" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "ID računa kopiran" + "value" : "Kopiraj Account ID" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "Account ID පිටපත් කරන ලදී" + "value" : "Account ID පිටපත් කරන්න" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "ID účtu skopírované" + "value" : "Kopírovať ID účtu" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "ID računa kopiran" + "value" : "Kopiraj ID računa" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Copy ID të llogarisë" + "value" : "Kopjo ID-në e llogarisë" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Идентификација налога је копирана" + "value" : "Копирај Account ID" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "ID naloga je kopiran" + "value" : "Kopiraj ID naloga" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Kontonummer Kopierat" + "value" : "Kopiera Konto-ID" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Kitambulisho cha Akaunti Imenakiliwa" + "value" : "Nakili ID ya Akaunti" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "கணக்கு அடையாளம் நகலெடுக்கப்பட்டது" + "value" : "கணக்கு அடையாளத்தை நகலெடு" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "ఖాతా ఐడి కాపీ చేయబడింది" + "value" : "అకౌంట్ ID కాపీ చేయండి" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "คัดลอก ID บัญชีแล้ว" + "value" : "Copy Account ID" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Hesap Kimliği Kopyalandı" + "value" : "Hesap ID'sini Kopyala" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "ID облікового запису скопійовано" + "value" : "Копіювати ID облікового запису" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "Account ID کو کاپی کیا گیا" + "value" : "اکاؤنٹ آئی ڈی کاپی کریں" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Akkaunt ID nusxalandi" + "value" : "Hisob ID sini nusxalash" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "ID Tài khoản đã sao chép" + "value" : "Sao chép Account ID" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Iakhawunti ye-ID ikopiwe" + "value" : "Kopa i i-ID yeAkhawunti" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "账户ID已复制" + "value" : "复制帐户ID" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "帳號 ID 已複製" + "value" : "複製帳號 ID" } } } @@ -8689,6 +8705,491 @@ } } }, + "adminPromotedToAdmin" : { + "extractionState" : "manual", + "localizations" : { + "af" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} is bevorder tot Admin" + } + }, + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} تم ترقيته إلى مشرف." + } + }, + "az" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} Admin olaraq yüksəldildi." + } + }, + "bal" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} rīhīyā Admin šumār." + } + }, + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} быў павышаны да адміністратара." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} беше повишен в Администратор." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} অ্যাডমিন হিসেবে উন্নীত হয়েছে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ha estat ascendit a Admin." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} byl/a povýšen/a na správce." + } + }, + "cy" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} y penodwyd i admin." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} blev forfremmet til Admin." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} wurde zu Admin befördert." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} έγινε Διαχειριστής." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} was promoted to Admin." + } + }, + "eo" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} estis promociita al Admin." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} fue promovido a Admin." + } + }, + "es-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} fue promovido a Administrador." + } + }, + "et" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} määrati adminiks." + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} Admin izendatu dute." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} به مدیر ارتقاء یافت." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ylennettiin ylläpitäjäksi." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Na-promote si {name} sa Admin." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} a été promu en tant qu'administrateur." + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} foi ascendido a Admin." + } + }, + "ha" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} an tayar masa zuwa Admin." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}‏ קודמ/ה למנהל." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} को एडमिन बनाया गया।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} je promoviran u Admina." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} adminisztrátorrá lett előléptetve." + } + }, + "hy-AM" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}֊ը բարձրացվել է որպես ադմին:" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} dipromosikan menjadi Admin." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} è ora amministratore." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} がアドミンに昇格しました" + } + }, + "ka" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}ს მიენიჭა ადმინისტრატორის როლი." + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}‍ ត្រូវបានបដិស្មីជា Admin។" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ಅವರು ನಿರ್ವಾಹಕರಾಗಿ ಬಡ್ತಿ ಪಡೆದಿದ್ದಾರೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}님이 관리자(Admin)로 승격되었습니다." + } + }, + "ku" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} بە بەڕێوەبەر هەڵبژێردرا." + } + }, + "ku-TR" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} wekî admîn hate xwepêşandin." + } + }, + "lg" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} yakyusibwa okufuuka Admin." + } + }, + "lo" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}ໄດ້ຮັບການແຕັຄອດເປັນAdmin." + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} buvo paskirtas adminu." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} tika paaugstināts par administrētāju." + } + }, + "mk" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} беше промовиран во Админ." + } + }, + "mn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} Админ боллоо." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} dinaikkan ke Admin." + } + }, + "my" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ကို အုပ်ချုပ်ရေးမှူးအဖြစ် တိုးတက်လာပါတယ်။" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ble oppgradert til administrator." + } + }, + "nb-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ble forfremmet til Admin." + } + }, + "ne-NP" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}लाई Admin मा बढुवा गरियो।" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} is gepromoveerd tot Admin." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} vart promotert til admin." + } + }, + "ny" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} akwezedwa kukhala Admin." + } + }, + "pa-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਬਣਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} został(a) administratorem." + } + }, + "ps" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} اډمین ته لوړ شوی." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} foi promovido a Administrador." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} foi promovido a Admin." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} a fost promovat la nivel de administrator." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} назначен(а) администратором." + } + }, + "sh" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} je unaprijeđen u Admina." + } + }, + "si-LK" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} පරිපාලක (Admin) තනතුරට උසස් කරන ලදී." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} bol/a povýšený/á na správcu." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} je bil_a promoviran_a v administratorja." + } + }, + "sq" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} u promovua në Administrator." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} је унапређен у администратора." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} je unapredjen u admina." + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} blev befordrad till Admin." + } + }, + "sw" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} amepandishwa cheo kuwa Admin." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} நிர்வாகியாக உயர்த்தப்பட்டார்." + } + }, + "te" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} అడ్మిన్ గా ప్రమోట్ చేయబడ్డారు." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ได้รับการเลื่อนตำแหน่งเป็นผู้ดูแลระบบ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} yönetici olarak terfi etti." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} було підвищено до адміністратора." + } + }, + "ur-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} کو ایڈمن مقرر کیا گیا۔" + } + }, + "uz" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} Administrator sifatida ko'tarildi." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} được thăng lên làm Admin." + } + }, + "xh" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} inyuselwe kubu-Admin." + } + }, + "zh-CN" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}被设置为管理员。" + } + }, + "zh-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} 被設置為管理員。" + } + } + } + }, "adminPromoteMoreDescription" : { "extractionState" : "manual", "localizations" : { @@ -10138,491 +10639,6 @@ } } }, - "adminPromotedToAdmin" : { - "extractionState" : "manual", - "localizations" : { - "af" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} is bevorder tot Admin" - } - }, - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} تم ترقيته إلى مشرف." - } - }, - "az" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} Admin olaraq yüksəldildi." - } - }, - "bal" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} rīhīyā Admin šumār." - } - }, - "be" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} быў павышаны да адміністратара." - } - }, - "bg" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} беше повишен в Администратор." - } - }, - "bn" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} অ্যাডমিন হিসেবে উন্নীত হয়েছে।" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ha estat ascendit a Admin." - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} byl/a povýšen/a na správce." - } - }, - "cy" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} y penodwyd i admin." - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} blev forfremmet til Admin." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} wurde zu Admin befördert." - } - }, - "el" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} έγινε Διαχειριστής." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} was promoted to Admin." - } - }, - "eo" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} estis promociita al Admin." - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} fue promovido a Admin." - } - }, - "es-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} fue promovido a Administrador." - } - }, - "et" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} määrati adminiks." - } - }, - "eu" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} Admin izendatu dute." - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} به مدیر ارتقاء یافت." - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ylennettiin ylläpitäjäksi." - } - }, - "fil" : { - "stringUnit" : { - "state" : "translated", - "value" : "Na-promote si {name} sa Admin." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} a été promu en tant qu'administrateur." - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} foi ascendido a Admin." - } - }, - "ha" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} an tayar masa zuwa Admin." - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}‏ קודמ/ה למנהל." - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} को एडमिन बनाया गया।" - } - }, - "hr" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} je promoviran u Admina." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} adminisztrátorrá lett előléptetve." - } - }, - "hy-AM" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}֊ը բարձրացվել է որպես ադմին:" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} dipromosikan menjadi Admin." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} è ora amministratore." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} がアドミンに昇格しました" - } - }, - "ka" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}ს მიენიჭა ადმინისტრატორის როლი." - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}‍ ត្រូវបានបដិស្មីជា Admin។" - } - }, - "kn" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ಅವರು ನಿರ್ವಾಹಕರಾಗಿ ಬಡ್ತಿ ಪಡೆದಿದ್ದಾರೆ." - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}님이 관리자(Admin)로 승격되었습니다." - } - }, - "ku" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} بە بەڕێوەبەر هەڵبژێردرا." - } - }, - "ku-TR" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} wekî admîn hate xwepêşandin." - } - }, - "lg" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} yakyusibwa okufuuka Admin." - } - }, - "lo" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}ໄດ້ຮັບການແຕັຄອດເປັນAdmin." - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} buvo paskirtas adminu." - } - }, - "lv" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} tika paaugstināts par administrētāju." - } - }, - "mk" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} беше промовиран во Админ." - } - }, - "mn" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} Админ боллоо." - } - }, - "ms" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} dinaikkan ke Admin." - } - }, - "my" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ကို အုပ်ချုပ်ရေးမှူးအဖြစ် တိုးတက်လာပါတယ်။" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ble oppgradert til administrator." - } - }, - "nb-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ble forfremmet til Admin." - } - }, - "ne-NP" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}लाई Admin मा बढुवा गरियो।" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} is gepromoveerd tot Admin." - } - }, - "nn-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} vart promotert til admin." - } - }, - "ny" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} akwezedwa kukhala Admin." - } - }, - "pa-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਬਣਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} został(a) administratorem." - } - }, - "ps" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} اډمین ته لوړ شوی." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} foi promovido a Administrador." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} foi promovido a Admin." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} a fost promovat la nivel de administrator." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} назначен(а) администратором." - } - }, - "sh" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} je unaprijeđen u Admina." - } - }, - "si-LK" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} පරිපාලක (Admin) තනතුරට උසස් කරන ලදී." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} bol/a povýšený/á na správcu." - } - }, - "sl" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} je bil_a promoviran_a v administratorja." - } - }, - "sq" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} u promovua në Administrator." - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} је унапређен у администратора." - } - }, - "sr-Latn" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} je unapredjen u admina." - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} blev befordrad till Admin." - } - }, - "sw" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} amepandishwa cheo kuwa Admin." - } - }, - "ta" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} நிர்வாகியாக உயர்த்தப்பட்டார்." - } - }, - "te" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} అడ్మిన్ గా ప్రమోట్ చేయబడ్డారు." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ได้รับการเลื่อนตำแหน่งเป็นผู้ดูแลระบบ" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} yönetici olarak terfi etti." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} було підвищено до адміністратора." - } - }, - "ur-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} کو ایڈمن مقرر کیا گیا۔" - } - }, - "uz" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} Administrator sifatida ko'tarildi." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} được thăng lên làm Admin." - } - }, - "xh" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} inyuselwe kubu-Admin." - } - }, - "zh-CN" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}被设置为管理员。" - } - }, - "zh-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} 被設置為管理員。" - } - } - } - }, "adminPromotionFailed" : { "extractionState" : "manual", "localizations" : { @@ -14485,2834 +14501,2867 @@ } } }, - "adminRemoveFailed" : { + "adminRemovedUser" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Kon nie {name} as Admin verwyder nie." + "value" : "{name} is as Admin verwyder" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "فشل في إزالة {name} كمدير." + "value" : "{name} تم إزالته كمشرف." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name} istifadəçisini Admin olaraq çıxartma uğursuz oldu." + "value" : "{name} artıq Admin deyil." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} کو ایڈمن کے طور پر ہٹانے میں ناکامی" + "value" : "{name} gōra Admin." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Не атрымалася выдаліць {name} як Адміна." + "value" : "{name} быў выдалены як Адміністратар." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно премахване на {name} като администратор." + "value" : "{name} беше премахнат като Администратор." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} কে এডমিন থেকে সরাতে ব্যর্থ হয়েছে।" + "value" : "{name} অ্যাডমিন হিসেবে থেকে সরিয়ে দেওয়া হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "No s'ha pogut eliminar {name} com a administrador." + "value" : "{name} ha estat eliminat com a Admin." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Nepodařilo se odebrat {name} jako správce." + "value" : "{name} byl/a odebrán/a jako správce." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Methwyd tynnu {name} fel Admin." + "value" : "{name} y wedi cael ei dynnu fel admin." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke fjerne {name} som administrator." + "value" : "{name} blev fjernet som Admin." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Fehler beim Entfernen von {name} als Admin." + "value" : "{name} wurde als Admin entfernt." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Αποτυχία κατάργησης {name} ως Διαχειριστής." + "value" : "{name} αφαιρέθηκε ως Διαχειριστής." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Failed to remove {name} as Admin." + "value" : "{name} was removed as Admin." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Malsukcesis forigi {name} kiel Admin." + "value" : "{name} estis deprenita kiel Admin." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Falló al remover a {name} como Admin." + "value" : "{name} fue removido como Admin." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Error al remover a {name} como Administrador." + "value" : "{name} fue destituido como Administrador." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Ebaõnnestus eemaldada {name} administraatoriks." + "value" : "{name} eemaldati administraatorina." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Ez da posible izan {name} Administrari bezala kentzea." + "value" : "{name} Admin izateko kendu dute." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "حذف {name} به عنوان مدیر ناموفق بود." + "value" : "{name} از مدیریت حذف شد." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Käyttäjän {name} poisto valvojana epäonnistui." + "value" : "{name} poistettiin ylläpitäjänä." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Nabigo sa pag-alis kay {name} bilang Admin." + "value" : "Tinanggal si {name} bilang Admin." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Échec de supprimer {name} en tant qu'administrateur." + "value" : "{name} a été retiré en tant qu'administrateur." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Non se puido eliminar a {name} como Admin." + "value" : "{name} foi eliminado como Admin." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "An kasa cire sunan {name} a matsayin Admin." + "value" : "{name} an cire shi a matsayin Admin." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "נכשל להסיר את {name} כאדמין." + "value" : "{name}‏ הוסר/ה כמנהל." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} को एडमिन के रूप में हटाने में विफल।" + "value" : "{name} को एडमिन से हटा दिया गया।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Uklanjanje {name} kao administratora nije uspjelo." + "value" : "{name} je uklonjen kao Admin." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Nem sikerült eltávolítani {name}-t mint adminisztrátor." + "value" : "{name} el lett távolítva mint adminisztrátor." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Չհաջողվեց հեռացնել {name}-ին որպես Admin։" + "value" : "{name}֊ը հեռացվել է ադմինից:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Gagal menghapus {name} sebagai Admin." + "value" : "{name} dihapus sebagai Admin." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Impossibile rimuovere {name} come amministratore." + "value" : "{name} è stato rimosso come amministratore." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{name} をアドミンから解除できませんでした。" + "value" : "{name} はアドミンから削除されました" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ვერ შევძელიში {name} ადმინისტრატორთან მოცილება" + "value" : "{name}ს აღარ არის ადმინისტრატორი." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បរាជ័យក្នុងការដក {name} ជាអ្នកគ្រប់គ្រង។" + "value" : "{name}‍ ត្រូវបានដកចេញពីការកាន់តំណែងជា Admin។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ರನ್ನು ನಿರ್ವಾಹಕರ ಸ್ಥಾನದಿಂದ ತೆಗೆದುಹಾಕಲು ವಿಫಲವಾಗಿದೆ." + "value" : "{name} ಅವರು ನಿರ್ವಾಹಕರನ್ನಾಗಿ ತೆಗೆದುಹಾಕಲ್ಪಟ್ಟಿದ್ದಾರೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}님을 관리자로 제거하지 못했습니다." + "value" : "{name}님이 관리자에서 제거되었습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "شکستی پاشەکەوتکردنی {name} وه‌ک بەرگ واهێشتە" + "value" : "{name} لە بەڕێوەبەری لابرا." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Bi ser neket ku {name} alîkarî bike" + "value" : "{name} wekî admîn hate rakirin." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Ensobi okuzaako okwongeza {name} nga Admin." + "value" : "{name} yasasulwa okuva ku kifo kya Admin." + } + }, + "lo" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}ແມ່ນໄດ້ຖືກລຶບເຖິງAdmin." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Nepavyko pašalinti {name} kaip administratoriaus." + "value" : "{name} buvo pašalintas kaip adminas." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Neizdevās noņemt {name} kā administratoru." + "value" : "{name} tika noņemts no administrēšanas." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно отстранување на {name} како адм." + "value" : "{name} беше отстранет како Админ." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ийг Админаас хасахад алдаа гарлаа." + "value" : "{name} Админ зургаас хасагдлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Gagal mengeluarkan {name} sebagai Admin." + "value" : "{name} dikeluarkan sebagai Admin." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name} အနေဖြင့် အသိအမှတ်များကို ဖယ်ရန်မအောင်မြင်ပါ" + "value" : "{name} ကို အုပ်ချုပ်ရေးမှူးအဖြစ်မှ ဖယ်ရှားခဲ့သည်။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke fjerne {name} som admin." + "value" : "{name} ble fjernet som Admin." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke fjerne {name} som Admin." + "value" : "{name} ble fjernet som Admin." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name} लाई Admin मा हटाउन असफल भयो।" + "value" : "{name}लाई Admin बाट हटाइएको थियो।." } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Het verwijderen van {name} als Admin is mislukt." + "value" : "{name} is verwijderd als Admin." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Klarte ikkje fjernha {name} som admin." + "value" : "{name} vart fjerna som admin." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Zalephera kuchotsa {name} ngati Admin." + "value" : "{name} achotsedwa monga Admin." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ਨੂੰ ਐਡਮਿਨ ਦੇ ਰੂਪ ਵਿੱਚ ਹਟਾਉਣ ਵਿੱਚ ਅਸਫਲ।" + "value" : "{name}ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਵਜੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nie udało się usunąć użytkownika {name} z roli administratora." + "value" : "\"Usunięto z roli administratora: {name}" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{name} د ایډمین څخه لرې کولو کې ناکام." + "value" : "{name} د اډمین په توګه لرې کړل شوی." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Falha ao remover {name} como Admin." + "value" : "{name} foi removido como Administrador." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Erro ao remover {name} como Admin." + "value" : "{name} foi removido(a) como Admin." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Nu s-a putut elimina {name} ca administrator." + "value" : "{name} a fost eliminat ca administrator." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Не удалось удалить статус администратора для {name}." + "value" : "{name} был(а) снят(а) с должности администратора." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Nije uspjelo uklanjanje {name} kao administratora." + "value" : "{name} je uklonjen kao Admin." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} පරිපාලක ලෙස ඉවත් කිරීමට අසමත් විය." + "value" : "{name} පරිපාලක ආධිකාරීත්වයෙන් ඉවත් කරන ලදී." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Nepodarilo sa odstrániť používateľa {name} ako Admin." + "value" : "{name} bol/a odstránený/á ako správca." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Ni uspelo odstraniti {name} kot Admin." + "value" : "{name} ni več administrator." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Dështoi heqja e {name} si Admin." + "value" : "{name} u largua si Administrator." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспех у уклањању {name} као администратора" + "value" : "{name} је уклоњен као администратор." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Neuspelo uklanjanje {name} kao administratora." + "value" : "{name} je uklonjen kao admin." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Misslyckades med att ta bort {name} som administratör." + "value" : "{name} blev borttagen som Admin." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Imeshindikana kumwondoa {name} kama Admin." + "value" : "{name} ameondolewa kama Admin." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ஐ நிர்வாகியாக இருந்து நீக்குவதில் தவறிவிட்டது." + "value" : "{name} நிர்வாகி பதவியில் இருந்து நீக்கப்பட்டார்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ను అడ్మిన్ గా తొలగించడంలో విఫలమైంది." + "value" : "{name} అడ్మిన్ గా తొలగించబడ్డారు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "การลบ {name} จากแอดมินล้มเหลว" + "value" : "{name} ถูกปลดออกจากผู้ดูแลระบบ" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} yönetici olarak kaldırılamadı." + "value" : "{name} yönetici olarak kaldırıldı." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Не вдалося видалити {name} як адміністратора" + "value" : "{name} було вилучено із групи." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "Admin کے طور پر {name} کو ہٹانے میں ناکام" + "value" : "{name} کو ایڈمن کے عہدہ سے ہٹا دیا گیا۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ni administrativ vazifasidan olib tashlashda muammo chiqdi." + "value" : "{name} Administrator sifatida olib tashlandi." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Không thể xóa {name} khỏi Admin." + "value" : "{name} đã bị loại khỏi Admin." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Koyekile ukususa {name} njenge Admin." + "value" : "{name} ikhutshelwe ngaphandle kwindawo ye-Admin." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "移除{name}管理员身份失败。" + "value" : "{name}被移除了管理员身份。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "無法移除 {name} 的管理者身分。" + "value" : "{name} 被撤下管理員的身份。" } } } }, - "adminRemoveFailedMultiple" : { + "adminRemovedUserMultiple" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Kon nie {name} en {count} ander as Admin verwyder nie." + "value" : "{name} en {count} ander is verwyder as Admin." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "فشل في إزالة {name} و{count} آخرين كمسؤول." + "value" : "تمت إزالة {name} و{count} آخرين من منصبهم كمسؤولين." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name}digər {count} nəfər Adminlikdən çıxarılmadı." + "value" : "{name}digər {count} nəfər Adminlikdən çıxarıldı." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {count} drīg gōra Admin intixabi agah kean gwašnī." + "value" : "{name} a {count} drīg gōra Admin." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Не атрымалася выдаліць {name} і {count} іншых з адміністратараў." + "value" : "{name} і яшчэ {count} іншых былі паніжаны на пасадзе адміністратара." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно премахване на {name} и {count} други като администратори." + "value" : "{name} и {count} други бяха премахнати като администратори." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} এবং {count} জন অন্য সদস্য অ্যাডমিন হিসেবে সরাতে ব্যর্থ হয়েছে।" + "value" : "{name} এবং {count} জন অন্য সদস্য অ্যাডমিন হিসেবে সরিয়ে দেওয়া হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "No s'ha pogut eliminar {name} i {count} altres com a administradors." + "value" : "{name} i {count} altres han estat eliminats com a administradors." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Selhalo odebrání správcovství {name} a {count} dalším." + "value" : "{name} a {count} dalším bylo odebráno správcovství." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Methwyd tynnu {name} a {count} eraill fel Admin." + "value" : "{name} y a {count} eraill wedi cael eu symud o'r grŵp." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke fjerne {name} og {count} andre som Admin." + "value" : "{name} og {count} andre blev fjernet som Admin." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Fehler beim Entfernen von {name} und {count} anderen als Admin." + "value" : "{name} und {count} andere wurden als Admin entfernt." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Αποτυχία αφαίρεσης {name} και {count} άλλων ως Διαχειριστές." + "value" : "{name} και {count} άλλοι αφαιρέθηκαν ως Διαχειριστές." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Failed to remove {name} and {count} others as Admin." + "value" : "{name} and {count} others were removed as Admin." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Malsukcesis forigi {name} kaj {count} aliaj kiel Admoj." + "value" : "{name} kaj {count} aliaj estis forigitaj kiel Admoj." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Error al eliminar a {name} y a otros {count} Admins más." + "value" : "{name} y {count} más fueron removidos como Admins." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Error al eliminar {name} y {count} otros más administradores." + "value" : "{name} y otros {count} fueron eliminados como moderadores." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Ebaõnnestus {name} ja {count} teise eemaldamine Administraatori kohalt." + "value" : "{name} ja {count} teist eemaldati Administraatori kohalt." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} eta {count} beste Admin moduan kentzea huts egin du." + "value" : "{name} eta {count} beste Admin moduan kendu dituzte." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "حذف {name} و {count} سایرین از مدیریت ناموفق بود." + "value" : "{name} و{count} سایرین از مدیریت حذف شدند." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Käyttäjän {name} ja {count} muun poistaminen valvojana epäonnistui." + "value" : "{name} ja {count} muuta poistettiin ylläpitäjästä." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Nabigong tanggalin sina {name} at {count} iba pa bilang Admin." + "value" : "{name} at {count} iba pa ay tinanggal bilang Admin." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Échec de la suppression de {name} et {count} autres en tant qu'administrateur." + "value" : "{name} et {count} autres ont été supprimé·e·s en tant qu'administrateur." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "An kasa cire {name} da {count} wasu daga zama Admin." + "value" : "{name} da {count} wasu an cire su daga zama Admin." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "נכשל בהסרת {name}‏ ו{count} אחרים‏ מניהול." + "value" : "{name}‏ ו{count} אחרים‏ הוסרו מניהול." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} और {count} अन्य को व्यवस्थापक पद से हटाने में विफल |" + "value" : "{name} और {count} अन्य को व्यवस्थापक पद से हटा दिया गया |" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Uklanjanje {name} i {count} drugi kao administratora nije uspjelo." + "value" : "{name} i {count} drugi su uklonjeni kao administratori." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Nem sikerült eltávolítani őket adminisztrátorként: {name} és {count} másik személy." + "value" : "{name} és {count} másik személy el lettek távolítva adminisztrátorként." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Չհաջողվեց հեռացնել {name}֊ին և {count} ուրիշներ որպես ադմին՝ Administrator:" + "value" : "{name}֊ը և {count} ուրիշներ հեռացվել են որպես ադմին՝ Administrator:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Gagal menghapus {name} dan {count} lainnya sebagai Admin." + "value" : "{name} dan {count} lainnya telah dihapus sebagai Admin." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Impossibile rimuovere {name} e altri {count} come amministratori." + "value" : "{name} e altri {count} sono stati rimossi come Amministratori." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count}名 をAdminから削除できませんでした。" + "value" : "{name}{count}名 がAdminから削除されました。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ვერ მოვახერხეთ {name}-ის და {count} სხვა-ის ადმინისტრატორის როლიდან წაშლა." + "value" : "{name} და {count} სხვა წაიშალნენ ადმინისტრატორის როლიდან." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បរាជ័យក្នុងការដក {name} និង {count} គេផ្សេងទៀត ចេញពីតួនាទី Admin។" + "value" : "{name} និង {count} គេផ្សេងទៀត ត្រូវបានដកចេញពីតួនាទី Admin។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ಮತ್ತು {count} ಇತರರನ್ನು ನಿರ್ವಾಹಕರಾಗಿ ತೆಗೆದುಹಾಕಲು ವಿಫಲವಾಗಿದೆ." + "value" : "{name} ಮತ್ತು {count} ಇತರರನ್ನು ನಿರ್ವಾಹಕರಾಗಿ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name} 님과 {count} 명의 사람들의 관리자 직책을 제거하지 못했습니다." + "value" : "{name}님과 {count} 명의 사람들의 관리자 직책이 제거되었습니다" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "شکستی وەرگرتنی {name} و {count} کەس دیکە وەک بەڕێوەبەر." + "value" : "{name} و {count} کەس دیکە وەرگیندران وەک بەڕێوەبەر." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Bi ser neket ku {name} û {count} yên din wekî admîn bike." + "value" : "{name} û {count} yên din wekî admîn hatine rakirin." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Ensobi okwogolola {name} ne {count} abalala nga Admin." + "value" : "{name} ne {count} abalala basasulwa nga Admin." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Nepavyko pašalinti {name} ir dar {count} iš administratorių." + "value" : "{name} ir dar {count} buvo pašalinti iš administratorių." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно отстранување на {name} и {count} други како администратори." + "value" : "{name} и {count} други беа отстранети како Админ." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} болон {count} бусад Админ эрхээс хасагдахад алдаа гарлаа." + "value" : "{name} болон {count} бусад Админ эрхээс хасагдлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Gagal mengeluarkan {name} dan {count} lainnya sebagai Admin." + "value" : "{name} dan {count} lainnya dikeluarkan sebagai Admin." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name}နှင့် {count} ဦး ကို အုပ်ချုပ်ရေးမှူး အဖြစ် ဖွဲခြင်းမအောင်မြင်ဘူး။" + "value" : "{name} နှင့် {count} ဦး အုပ်ချုပ်ရေးမှူးအဖြစ် တန်းမြင့်နေသည်။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke fjerne {name} og {count} andre som Admin." + "value" : "{name} og {count} andre ble fjernet som Admin." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke fjerne {name} og {count} andre som Admin." + "value" : "{name} og {count} andre ble fjernet som Admin." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count} अन्यलाई प्रशासकबाट हटाउन असफल।" + "value" : "{name}{count} अन्यलाई प्रशासकबाट हटाइयो।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Mislukt om {name} en {count} anderen om te verwijderen als beheerder." + "value" : "{name} en {count} anderen zijn verwijderd als beheerder." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Klarte ikkje å fjerna {name} og {count} andre som Admin." + "value" : "{name} og {count} andre vart fjerna som Admin." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Zalephera kuchotsa {name} ndi {count} ena monga Admin." + "value" : "{name} ndi {count} ena adachotsedwa monga Admin." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ਅਤੇ {count} ਹੋਰ ਨੂੰ ਐਡਮਿਨ ਤੋਂ ਹਟਾਉਣ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ।" + "value" : "{name} ਅਤੇ {count} ਹੋਰ ਨੂੰ ਐਡਮਿਨ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nie udało się usunąć użytkownika {name} oraz {count} innych użytkowników z roli administratora." + "value" : "{name} i {count} innych użytkowników nie są już administratorami." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{name} او {count} نور د ایډمین څخه لرې کولو کې ناکام." + "value" : "{name} او {count} نور د ایډمین څخه لرې کړل شوی دی." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Falha ao remover {name} e {count} outros como Admin." + "value" : "{name} e {count} outros foram removidos como Admin." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Falha ao remover {name} e {count} outros de Admin." + "value" : "{name} e {count} outros foram removidos de Admin." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Eroare la eliminarea {name} și a altor {count} ca administratori." + "value" : "{name} și alți {count} au fost eliminați ca administratori." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Не удалось удалить {name} и {count} других пользователей с правами Администратора." + "value" : "{name} и {count} других пользователей были удалены админом." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Nije moguće ukloniti {name} i {count} drugih kao Admin." + "value" : "{name} i {count} drugih su uklonjeni kao Admin." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} සහ {count} වෙනත් අය පරිපාලක තනතුරින් ඉවත් කිරීමට අසමත් විය." + "value" : "{name} සහ {count} වෙනත් අය පරිපාලක තනතුරින් ඉවත් කරන ලදී." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Nepodarilo sa odstrániť {name} a {count} ďalší ako správcov." + "value" : "{name} a {count} ďalší boli odstránení ako správcovia." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Ni uspelo odstraniti {name} in {count} drugih kot administratorji." + "value" : "{name} in {count} drugi so bili odstranjeni kot administratorji." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Dështoi largimi i {name} dhe {count} të tjerë si Admin." + "value" : "{name} dhe {count} të tjerë u larguan nga roli i Admin." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно уклањање {name} и {count} осталих као администратори." + "value" : "{name} и {count} осталих су уклоњени као администратори." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Nije uspelo uklanjanje {name} i {count} drugih kao admina." + "value" : "{name} i {count} drugih su uklonjeni kao admini." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Misslyckades med att ta bort {name} och {count} andra som Admin." + "value" : "{name} och {count} andra togs bort som Admin." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Imeshindikana kuwaondoa {name} na {count} wengine kama Admin." + "value" : "{name} na {count} wengine wameondolewa kama Admin." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} மற்றும் {count} பிறர் நிர்வாகத்திலிருந்து நீக்குவதில் தவறிவிட்டது." + "value" : "{name} மற்றும் {count} பிறர் நிர்வாகியிலிருந்து நீக்கப்பட்டனர்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} మరియు {count} ఇతరులు అడ్మిన్ స్థాయి నుంచి తొలగించడంలో విఫలమైంది." + "value" : "{name} మరియు {count} ఇతరులు అడ్మిన్ స్థాయి నుండి తొలగించబడ్డారు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ไม่สามารถลบ {name} และ {count} คนอื่นๆ ออกจากสถานะ Admin ได้." + "value" : "{name} และ {count} คนอื่นๆ ถูกลบออกจากสถานะ Admin." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ve {count} üye Yönetici seviyesinden düşürülemedi." + "value" : "{name} ve {count} üye Yönetici seviyesinden düşürüldü." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Не вдалося вилучити {name} та ще {count} інших з переліку адміністраторів." + "value" : "{name} та ще {count} інших було вилучено з переліку адміністраторів." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} اور {count} دیگر کو ایڈمن کے طور پر ہٹانے میں ناکامی ہوئی۔" + "value" : "{name} اور {count} دیگر کو ایڈمن کے طور پر ہٹا دیا گیا۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name} va {count} boshqa Administrator sifatida olib tashlashda xatolik." + "value" : "{name} va {count} boshqalar Administrator sifatida olib tashlandi." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Không thể xoá {name}{count} người khác khỏi vai trò Quản trị viên." + "value" : "{name}{count} người khác đã bị xoá khỏi vai trò Quản trị viên." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Koyekile ukususa {name} kunye {count} abanye abantu kubu-Admin." + "value" : "{name} kunye {count} abanye abantu basusiwe kubu-Admin." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "移除{name}和其他{count}人的管理员身份失败。" + "value" : "{name}和其他{count}人的管理身份被移除。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "無法移除 {name}{count} 位其他成員 的管理員身份。" + "value" : "{name}{count} 位其他成員 被移除管理員身份。" } } } }, - "adminRemoveFailedOther" : { + "adminRemovedUserOther" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Kon nie {name} en {other_name} as Admin verwyder nie." + "value" : "{name} en {other_name} is verwyder as Admin." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "فشل في إزالة {name} و{other_name} كمسؤول." + "value" : "تمت إزالة {name} و{other_name} من منصبي المسؤول." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} Adminlikdən çıxarılmadı." + "value" : "{name}{other_name} Adminlikdən çıxarıldı." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {other_name} gōra Admin intixabi agah kean gwašnī." + "value" : "{name} a {other_name} gōra Admin." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Не атрымалася выдаліць {name} і {other_name} з адміністратараў." + "value" : "{name} і {other_name} былі паніжаны на пасадзе адміністратара." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно премахване на {name} и {other_name} като администратори." + "value" : "{name} и {other_name} бяха премахнати като администратори." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} এবং {other_name} অ্যাডমিন হিসেবে সরাতে ব্যর্থ হয়েছে।" + "value" : "{name} এবং {other_name} অ্যাডমিন হিসেবে সরিয়ে দেওয়া হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "No s'ha pogut eliminar {name} i {other_name} com a administradors." + "value" : "{name} i {other_name} han estat eliminats com a administradors." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Selhalo odebrání {name} a {other_name} jako správce." + "value" : "{name} a {other_name} bylo odebráno správcovství." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Methwyd tynnu {name} a {other_name} fel Admin." + "value" : "{name} y a {other_name} wedi cael eu symud o'r grŵp fel Admin." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke fjerne {name} og {other_name} som Admin." + "value" : "{name} og {other_name} blev fjernet som Admin." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Fehler beim Entfernen von {name} und {other_name} als Admin." + "value" : "{name} und {other_name} wurden als Administrator entfernt." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Αποτυχία αφαίρεσης {name} και {other_name} ως Διαχειριστές." + "value" : "{name} και {other_name} αφαιρέθηκαν ως Διαχειριστές." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Failed to remove {name} and {other_name} as Admin." + "value" : "{name} and {other_name} were removed as Admin." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Malsukcesis forigi {name} kaj {other_name} kiel Admoj." + "value" : "{name} kaj {other_name} estis forigitaj kiel Admoj." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "No se pudo eliminar a {name} y {other_name} como administradores." + "value" : "{name} y {other_name} fueron removidos como Admins." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Error al eliminar a {name} y a {other_name} como moderadores." + "value" : "{name} y {other_name} fueron eliminados como moderadores." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Ebaõnnestus {name} ja {other_name} eemaldamine Administraatori kohalt." + "value" : "{name} ja {other_name} eemaldati Administraatori kohalt." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} eta {other_name} Admin moduan kentzea huts egin du." + "value" : "{name} eta {other_name} Admin moduan kendu dituzte." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "حذف {name}و{other_name} از مدیریت ناموفق بود." + "value" : "{name} و {other_name} از مدیریت حذف شدند." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Käyttäjien {name} ja {other_name} poistaminen ylläpitäjänä epäonnistui." + "value" : "{name} ja {other_name} poistettiin ylläpitäjästä." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Nabigong tanggalin sina {name} at {other_name} bilang Admin." + "value" : "{name} at {other_name} ay tinanggal bilang Admin." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Échec de la suppression de {name} et {other_name} en tant qu'administrateur." + "value" : "{name} et {other_name}ont été supprimé·e·s en tant qu'administrateur." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "An kasa cire {name} da {other_name} daga zama Admin." + "value" : "{name} da {other_name} an cire su daga zama Admin." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "נכשל בהסרת {name}‏ ו{other_name}‏ מניהול." + "value" : "{name}‏ ו{other_name}‏ הוסרו מניהול." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} और {other_name} व्यवस्थापक पद से हटाने में विफल |" + "value" : "{name} and {other_name} को व्यवस्थापक पद से हटा दिया गया |" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Uklanjanje {name} i {other_name} kao administratora nije uspjelo." + "value" : "{name} i {other_name} su uklonjeni kao administratori." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Nem sikerült eltávolítani őket adminisztrátorként: {name} és {other_name}." + "value" : "{name} és {other_name} el lettek távolítva adminisztrátorként." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Չհաջողվեց հեռացնել {name}֊ին և {other_name}֊ին որպես ադմին՝ Administrator:" + "value" : "{name}֊ը և {other_name}֊ը հեռացվել են որպես ադմին՝ Administrator:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Gagal menghapus {name} dan {other_name} sebagai Admin." + "value" : "{name} dan {other_name} telah dihapus sebagai Admin." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Impossibile rimuovere {name} e {other_name} come amministratori." + "value" : "{name} e {other_name} sono stati rimossi come amministratori." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name}は、Adminとして削除できませんでした。" + "value" : "{name}{other_name} がAdminに昇格しました。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ვერ მოვახერხეთ {name}-ის და {other_name}-ის ადმინისტრატორის როლიდან წაშლა." + "value" : "{name} და {other_name} წაიშალნენ ადმინისტრატორის როლიდან." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បរាជ័យក្នុងការដក {name} និង {other_name} ចេញពីតួនាទី Admin។" + "value" : "{name} និង {other_name} ត្រូវបានដកចេញពីតួនាទី Admin។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ಮತ್ತು {other_name} ಅವರನ್ನು ನಿರ್ವಾಹಕರಾಗಿ ತೆಗೆದುಹಾಕಲು ವಿಫಲವಾಗಿದೆ." + "value" : "{name} ಮತ್ತು {other_name} ಅವರಿಗೆ ನಿರ್ವಾಹಕರಾಗಿ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}님과 {other_name}님의 관리자 직책을 제거하지 못했습니다." + "value" : "{name}님과 {other_name}님의 관리자 직책이 제거되었습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "شکستی وەرگرتنی {name} و {other_name} وەک بەڕێوەبەر." + "value" : "{name} و {other_name} وەرگیندران وەک بەڕێوەبەر." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Bi ser neket ku {name} û {other_name} wekî admîn bike." + "value" : "{name} û {other_name} wekî admîn hatine rakirin." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Ensobi okwogolola {name} ne {other_name} nga Admin." + "value" : "{name} ne {other_name} basasulwa nga Admin." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Nepavyko pašalinti {name} ir {other_name} iš administratorių." + "value" : "{name} ir {other_name} buvo pašalinti iš administratorių." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно отстранување на {name} и {other_name} како администратори." + "value" : "{name} и {other_name} беа отстранени како администратори." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} болон {other_name} Админ эрхээс хасагдахад алдаа гарлаа." + "value" : "{name} болон {other_name} Админ эрхээс хасагдлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Gagal mengeluarkan {name} dan {other_name} sebagai Admin." + "value" : "{name} dan {other_name} dikeluarkan sebagai Admin." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name} နှင့် {other_name} ကို အုပ်ချုပ်ရေးမှူး အဖြစ် ဖွဲခြင်းမအောင်မြင်ပါ။" + "value" : "{name}နှင့် {other_name} အုပ်ချုပ်ရေးမှူးအဖြစ် တန်းမြင့်နေသည်။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke fjerne {name} og {other_name} som Admin." + "value" : "{name} og {other_name} ble fjernet som Admin." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke fjerne {name} og {other_name} som Admin." + "value" : "{name} og {other_name} ble fjernet som Admin." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name}लाईप्रशासकबाट हटाउन असफल।" + "value" : "{name}{other_name}लाईप्रशासकबाट हटाइयो।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Mislukt om {name} en {other_name} als beheerder te verwijderen." + "value" : "{name} en {other_name} zijn verwijderd als beheerder." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Klarte ikkje å fjerna {name} og {other_name} som Admin." + "value" : "{name} og {other_name} vart fjerna som Admin." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Zalephera kuchotsa {name} ndi {other_name} monga Admin." + "value" : "{name} ndi {other_name} adachotsedwa monga Admin." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ਤੇ {other_name} ਨੂੰ ਐਡਮਿਨ ਤੋਂ ਹਟਾਉਣ ਵਿੱਚ ਫੇਲ੍ਹ ਹੋਏ।" + "value" : "{name} ਤੇ {other_name} ਨੂੰ ਐਡਮਿਨ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nie udało się usunąć użytkowników {name} i {other_name} z roli administatora." + "value" : "Użytkownicy {name} i {other_name} nie są już administratorami." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{name} او {other_name} د ایډمین څخه لرې کولو کې ناکام." + "value" : "{name} او {other_name} د ایډمین څخه لرې کړل شوی دی." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Falha ao remover {name} e {other_name} como Admin." + "value" : "{name} e {other_name} foram removidos como Admin." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Falha ao remover {name} e {other_name} de Admin." + "value" : "{name} e {other_name} foram removidos de Admin." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Eroare la eliminarea {name} și {other_name} ca administratori." + "value" : "{name} și {other_name} au fost eliminați ca administratori." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Не удалось удалить {name} и {other_name} с правами Администратора." + "value" : "Пользователи {name} и {other_name} были удалены админом." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Nije moguće ukloniti {name} i {other_name} kao Admin." + "value" : "{name} i {other_name} su uklonjeni kao Admin." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} සහ {other_name} පරිපාලක තනතුරින් ඉවත් කිරීමට අසමත් විය." + "value" : "{name} සහ {other_name} පරිපාලක තනතුරින් ඉවත් කරන ලදී." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Nepodarilo sa odstrániť {name} a {other_name} ako správcov." + "value" : "{name} a {other_name} boli odstránení ako správcovia." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Ni uspelo odstraniti {name} in {other_name} kot administratorja." + "value" : "{name} in {other_name} sta bila odstranjena kot administratorja." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Dështoi largimi i {name} dhe {other_name} si Admin." + "value" : "{name} dhe {other_name} u larguan nga roli i Admin." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно уклањање {name} и {other_name} као администратори." + "value" : "{name} и {other_name} су уклоњени као администратори." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Nije uspelo uklanjanje {name} i {other_name} kao admina." + "value" : "{name} i {other_name} su uklonjeni kao admini." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Misslyckades med att ta bort {name} och {other_name} som Admin." + "value" : "{name} och {other_name} togs bort som Admin." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Imeshindikana kuwaondoa {name} na {other_name} kama Admin." + "value" : "{name} na {other_name} wameondolewa kama Admin." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} மற்றும் {other_name} நிர்வாகியிலிருந்து நீக்குவதில் தவறிவிட்டது." + "value" : "{name} மற்றும் {other_name} நிர்வாகியிலிருந்து நீக்கப்பட்டனர்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} మరియు {other_name} అడ్మిన్ గా తొలగించడంలో విఫలమైంది." + "value" : "{name} మరియు {other_name} అడ్మిన్ స్థాయి నుండి తొలగించబడ్డారు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ไม่สามารถลบ {name} และ {other_name} ออกจากสถานะ Admin ได้." + "value" : "{name} และ {other_name} ถูกลบออกจากสถานะ Admin." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ve {other_name} Yönetici seviyesinden düşürülemedi." + "value" : "{name} ve {other_name} Yönetici seviyesinden düşürüldü." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Не вдалось видалити {name} та {other_name} як Адміністратора." + "value" : "{name} та {other_name} було вилучено з переліку адміністраторів." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} اور {other_name} کو ایڈمن کے طور پر ہٹانے میں ناکامی ہوئی۔" + "value" : "{name} اور {other_name} کو ایڈمن کے طور پر ہٹا دیا گیا۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name} va {other_name} Administrator sifatida olib tashlashda xatolik." + "value" : "{name} va {other_name} Administrator sifatida olib tashlandi." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Không thể xoá {name}{other_name} khỏi vai trò Quản trị viên." + "value" : "{name}{other_name} đã bị xoá khỏi vai trò Quản trị viên." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Koyekile ukususa {name} kunye {other_name} kubu-Admin." + "value" : "{name} kunye {other_name} basusiwe kubu-Admin." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "移除{name}{other_name}的管理员身份失败。" + "value" : "{name}{other_name}的管理身份被移除。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "無法移除 {name}{other_name} 的管理員身份。" + "value" : "{name}{other_name} 被移除管理員身份。" } } } }, - "adminRemovedUser" : { + "adminRemoveFailed" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "{name} is as Admin verwyder" + "value" : "Kon nie {name} as Admin verwyder nie." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "{name} تم إزالته كمشرف." + "value" : "فشل في إزالة {name} كمدير." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name} artıq Admin deyil." + "value" : "{name} istifadəçisini Admin olaraq çıxartma uğursuz oldu." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} gōra Admin." + "value" : "{name} کو ایڈمن کے طور پر ہٹانے میں ناکامی" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "{name} быў выдалены як Адміністратар." + "value" : "Не атрымалася выдаліць {name} як Адміна." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} беше премахнат като Администратор." + "value" : "Неуспешно премахване на {name} като администратор." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} অ্যাডমিন হিসেবে থেকে সরিয়ে দেওয়া হয়েছে।" + "value" : "{name} কে এডমিন থেকে সরাতে ব্যর্থ হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ha estat eliminat com a Admin." + "value" : "No s'ha pogut eliminar {name} com a administrador." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "{name} byl/a odebrán/a jako správce." + "value" : "Nepodařilo se odebrat {name} jako správce." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y wedi cael ei dynnu fel admin." + "value" : "Methwyd tynnu {name} fel Admin." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "{name} blev fjernet som Admin." + "value" : "Kunne ikke fjerne {name} som administrator." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "{name} wurde als Admin entfernt." + "value" : "Fehler beim Entfernen von {name} als Admin." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "{name} αφαιρέθηκε ως Διαχειριστής." + "value" : "Αποτυχία κατάργησης {name} ως Διαχειριστής." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "{name} was removed as Admin." + "value" : "Failed to remove {name} as Admin." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "{name} estis deprenita kiel Admin." + "value" : "Malsukcesis forigi {name} kiel Admin." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "{name} fue removido como Admin." + "value" : "Falló al remover a {name} como Admin." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "{name} fue destituido como Administrador." + "value" : "Error al remover a {name} como Administrador." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "{name} eemaldati administraatorina." + "value" : "Ebaõnnestus eemaldada {name} administraatoriks." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} Admin izateko kendu dute." + "value" : "Ez da posible izan {name} Administrari bezala kentzea." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "{name} از مدیریت حذف شد." + "value" : "حذف {name} به عنوان مدیر ناموفق بود." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} poistettiin ylläpitäjänä." + "value" : "Käyttäjän {name} poisto valvojana epäonnistui." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Tinanggal si {name} bilang Admin." + "value" : "Nabigo sa pag-alis kay {name} bilang Admin." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a été retiré en tant qu'administrateur." + "value" : "Échec de supprimer {name} en tant qu'administrateur." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} foi eliminado como Admin." + "value" : "Non se puido eliminar a {name} como Admin." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "{name} an cire shi a matsayin Admin." + "value" : "An kasa cire sunan {name} a matsayin Admin." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‏ הוסר/ה כמנהל." + "value" : "נכשל להסיר את {name} כאדמין." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} को एडमिन से हटा दिया गया।" + "value" : "{name} को एडमिन के रूप में हटाने में विफल।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} je uklonjen kao Admin." + "value" : "Uklanjanje {name} kao administratora nije uspjelo." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} el lett távolítva mint adminisztrátor." + "value" : "Nem sikerült eltávolítani {name}-t mint adminisztrátor." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "{name}֊ը հեռացվել է ադմինից:" + "value" : "Չհաջողվեց հեռացնել {name}-ին որպես Admin։" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dihapus sebagai Admin." + "value" : "Gagal menghapus {name} sebagai Admin." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "{name} è stato rimosso come amministratore." + "value" : "Impossibile rimuovere {name} come amministratore." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{name} はアドミンから削除されました" + "value" : "{name} をアドミンから解除できませんでした。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ს აღარ არის ადმინისტრატორი." + "value" : "ვერ შევძელიში {name} ადმინისტრატორთან მოცილება" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‍ ត្រូវបានដកចេញពីការកាន់តំណែងជា Admin។" + "value" : "បរាជ័យក្នុងការដក {name} ជាអ្នកគ្រប់គ្រង។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ಅವರು ನಿರ್ವಾಹಕರನ್ನಾಗಿ ತೆಗೆದುಹಾಕಲ್ಪಟ್ಟಿದ್ದಾರೆ." + "value" : "{name} ರನ್ನು ನಿರ್ವಾಹಕರ ಸ್ಥಾನದಿಂದ ತೆಗೆದುಹಾಕಲು ವಿಫಲವಾಗಿದೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}님이 관리자에서 제거되었습니다." + "value" : "{name}님을 관리자로 제거하지 못했습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "{name} لە بەڕێوەبەری لابرا." + "value" : "شکستی پاشەکەوتکردنی {name} وه‌ک بەرگ واهێشتە" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} wekî admîn hate rakirin." + "value" : "Bi ser neket ku {name} alîkarî bike" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} yasasulwa okuva ku kifo kya Admin." - } - }, - "lo" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}ແມ່ນໄດ້ຖືກລຶບເຖິງAdmin." + "value" : "Ensobi okuzaako okwongeza {name} nga Admin." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "{name} buvo pašalintas kaip adminas." + "value" : "Nepavyko pašalinti {name} kaip administratoriaus." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "{name} tika noņemts no administrēšanas." + "value" : "Neizdevās noņemt {name} kā administratoru." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} беше отстранет како Админ." + "value" : "Неуспешно отстранување на {name} како адм." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} Админ зургаас хасагдлаа." + "value" : "{name} ийг Админаас хасахад алдаа гарлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dikeluarkan sebagai Admin." + "value" : "Gagal mengeluarkan {name} sebagai Admin." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ကို အုပ်ချုပ်ရေးမှူးအဖြစ်မှ ဖယ်ရှားခဲ့သည်။" + "value" : "{name} အနေဖြင့် အသိအမှတ်များကို ဖယ်ရန်မအောင်မြင်ပါ" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ble fjernet som Admin." + "value" : "Kunne ikke fjerne {name} som admin." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ble fjernet som Admin." + "value" : "Kunne ikke fjerne {name} som Admin." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name}लाई Admin बाट हटाइएको थियो।." + "value" : "{name} लाई Admin मा हटाउन असफल भयो।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} is verwijderd als Admin." + "value" : "Het verwijderen van {name} als Admin is mislukt." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} vart fjerna som admin." + "value" : "Klarte ikkje fjernha {name} som admin." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "{name} achotsedwa monga Admin." + "value" : "Zalephera kuchotsa {name} ngati Admin." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਵਜੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" + "value" : "{name} ਨੂੰ ਐਡਮਿਨ ਦੇ ਰੂਪ ਵਿੱਚ ਹਟਾਉਣ ਵਿੱਚ ਅਸਫਲ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "\"Usunięto z roli administratora: {name}" + "value" : "Nie udało się usunąć użytkownika {name} z roli administratora." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{name} د اډمین په توګه لرې کړل شوی." + "value" : "{name} د ایډمین څخه لرې کولو کې ناکام." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} foi removido como Administrador." + "value" : "Falha ao remover {name} como Admin." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "{name} foi removido(a) como Admin." + "value" : "Erro ao remover {name} como Admin." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a fost eliminat ca administrator." + "value" : "Nu s-a putut elimina {name} ca administrator." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "{name} был(а) снят(а) с должности администратора." + "value" : "Не удалось удалить статус администратора для {name}." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} je uklonjen kao Admin." + "value" : "Nije uspjelo uklanjanje {name} kao administratora." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} පරිපාලක ආධිකාරීත්වයෙන් ඉවත් කරන ලදී." + "value" : "{name} පරිපාලක ලෙස ඉවත් කිරීමට අසමත් විය." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} bol/a odstránený/á ako správca." + "value" : "Nepodarilo sa odstrániť používateľa {name} ako Admin." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ni več administrator." + "value" : "Ni uspelo odstraniti {name} kot Admin." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "{name} u largua si Administrator." + "value" : "Dështoi heqja e {name} si Admin." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} је уклоњен као администратор." + "value" : "Неуспех у уклањању {name} као администратора" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} je uklonjen kao admin." + "value" : "Neuspelo uklanjanje {name} kao administratora." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "{name} blev borttagen som Admin." + "value" : "Misslyckades med att ta bort {name} som administratör." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ameondolewa kama Admin." + "value" : "Imeshindikana kumwondoa {name} kama Admin." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} நிர்வாகி பதவியில் இருந்து நீக்கப்பட்டார்." + "value" : "{name} ஐ நிர்வாகியாக இருந்து நீக்குவதில் தவறிவிட்டது." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} అడ్మిన్ గా తొలగించబడ్డారు." + "value" : "{name} ను అడ్మిన్ గా తొలగించడంలో విఫలమైంది." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ถูกปลดออกจากผู้ดูแลระบบ" + "value" : "การลบ {name} จากแอดมินล้มเหลว" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} yönetici olarak kaldırıldı." + "value" : "{name} yönetici olarak kaldırılamadı." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} було вилучено із групи." + "value" : "Не вдалося видалити {name} як адміністратора" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} کو ایڈمن کے عہدہ سے ہٹا دیا گیا۔" + "value" : "Admin کے طور پر {name} کو ہٹانے میں ناکام" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name} Administrator sifatida olib tashlandi." + "value" : "{name}ni administrativ vazifasidan olib tashlashda muammo chiqdi." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} đã bị loại khỏi Admin." + "value" : "Không thể xóa {name} khỏi Admin." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ikhutshelwe ngaphandle kwindawo ye-Admin." + "value" : "Koyekile ukususa {name} njenge Admin." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}被移除了管理员身份。" + "value" : "移除{name}管理员身份失败。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "{name} 被撤下管理員的身份。" + "value" : "無法移除 {name} 的管理者身分。" } } } }, - "adminRemovedUserMultiple" : { + "adminRemoveFailedMultiple" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "{name} en {count} ander is verwyder as Admin." + "value" : "Kon nie {name} en {count} ander as Admin verwyder nie." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تمت إزالة {name} و{count} آخرين من منصبهم كمسؤولين." + "value" : "فشل في إزالة {name} و{count} آخرين كمسؤول." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name}digər {count} nəfər Adminlikdən çıxarıldı." + "value" : "{name}digər {count} nəfər Adminlikdən çıxarılmadı." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {count} drīg gōra Admin." + "value" : "{name} a {count} drīg gōra Admin intixabi agah kean gwašnī." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "{name} і яшчэ {count} іншых былі паніжаны на пасадзе адміністратара." + "value" : "Не атрымалася выдаліць {name} і {count} іншых з адміністратараў." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {count} други бяха премахнати като администратори." + "value" : "Неуспешно премахване на {name} и {count} други като администратори." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} এবং {count} জন অন্য সদস্য অ্যাডমিন হিসেবে সরিয়ে দেওয়া হয়েছে।" + "value" : "{name} এবং {count} জন অন্য সদস্য অ্যাডমিন হিসেবে সরাতে ব্যর্থ হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} altres han estat eliminats com a administradors." + "value" : "No s'ha pogut eliminar {name} i {count} altres com a administradors." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {count} dalším bylo odebráno správcovství." + "value" : "Selhalo odebrání správcovství {name} a {count} dalším." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y a {count} eraill wedi cael eu symud o'r grŵp." + "value" : "Methwyd tynnu {name} a {count} eraill fel Admin." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {count} andre blev fjernet som Admin." + "value" : "Kunne ikke fjerne {name} og {count} andre som Admin." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "{name} und {count} andere wurden als Admin entfernt." + "value" : "Fehler beim Entfernen von {name} und {count} anderen als Admin." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "{name} και {count} άλλοι αφαιρέθηκαν ως Διαχειριστές." + "value" : "Αποτυχία αφαίρεσης {name} και {count} άλλων ως Διαχειριστές." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "{name} and {count} others were removed as Admin." + "value" : "Failed to remove {name} and {count} others as Admin." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "{name} kaj {count} aliaj estis forigitaj kiel Admoj." + "value" : "Malsukcesis forigi {name} kaj {count} aliaj kiel Admoj." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y {count} más fueron removidos como Admins." + "value" : "Error al eliminar a {name} y a otros {count} Admins más." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y otros {count} fueron eliminados como moderadores." + "value" : "Error al eliminar {name} y {count} otros más administradores." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ja {count} teist eemaldati Administraatori kohalt." + "value" : "Ebaõnnestus {name} ja {count} teise eemaldamine Administraatori kohalt." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} eta {count} beste Admin moduan kendu dituzte." + "value" : "{name} eta {count} beste Admin moduan kentzea huts egin du." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و{count} سایرین از مدیریت حذف شدند." + "value" : "حذف {name} و {count} سایرین از مدیریت ناموفق بود." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ja {count} muuta poistettiin ylläpitäjästä." + "value" : "Käyttäjän {name} ja {count} muun poistaminen valvojana epäonnistui." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "{name} at {count} iba pa ay tinanggal bilang Admin." + "value" : "Nabigong tanggalin sina {name} at {count} iba pa bilang Admin." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} et {count} autres ont été supprimé·e·s en tant qu'administrateur." + "value" : "Échec de la suppression de {name} et {count} autres en tant qu'administrateur." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "{name} da {count} wasu an cire su daga zama Admin." + "value" : "An kasa cire {name} da {count} wasu daga zama Admin." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‏ ו{count} אחרים‏ הוסרו מניהול." + "value" : "נכשל בהסרת {name}‏ ו{count} אחרים‏ מניהול." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} और {count} अन्य को व्यवस्थापक पद से हटा दिया गया |" + "value" : "{name} और {count} अन्य को व्यवस्थापक पद से हटाने में विफल |" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} drugi su uklonjeni kao administratori." + "value" : "Uklanjanje {name} i {count} drugi kao administratora nije uspjelo." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} és {count} másik személy el lettek távolítva adminisztrátorként." + "value" : "Nem sikerült eltávolítani őket adminisztrátorként: {name} és {count} másik személy." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "{name}֊ը և {count} ուրիշներ հեռացվել են որպես ադմին՝ Administrator:" + "value" : "Չհաջողվեց հեռացնել {name}֊ին և {count} ուրիշներ որպես ադմին՝ Administrator:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dan {count} lainnya telah dihapus sebagai Admin." + "value" : "Gagal menghapus {name} dan {count} lainnya sebagai Admin." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e altri {count} sono stati rimossi come Amministratori." + "value" : "Impossibile rimuovere {name} e altri {count} come amministratori." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count}名 がAdminから削除されました。" + "value" : "{name}{count}名 をAdminから削除できませんでした。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "{name} და {count} სხვა წაიშალნენ ადმინისტრატორის როლიდან." + "value" : "ვერ მოვახერხეთ {name}-ის და {count} სხვა-ის ადმინისტრატორის როლიდან წაშლა." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "{name} និង {count} គេផ្សេងទៀត ត្រូវបានដកចេញពីតួនាទី Admin។" + "value" : "បរាជ័យក្នុងការដក {name} និង {count} គេផ្សេងទៀត ចេញពីតួនាទី Admin។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ಮತ್ತು {count} ಇತರರನ್ನು ನಿರ್ವಾಹಕರಾಗಿ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." + "value" : "{name} ಮತ್ತು {count} ಇತರರನ್ನು ನಿರ್ವಾಹಕರಾಗಿ ತೆಗೆದುಹಾಕಲು ವಿಫಲವಾಗಿದೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}님과 {count} 명의 사람들의 관리자 직책이 제거되었습니다" + "value" : "{name} 님과 {count} 명의 사람들의 관리자 직책을 제거하지 못했습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و {count} کەس دیکە وەرگیندران وەک بەڕێوەبەر." + "value" : "شکستی وەرگرتنی {name} و {count} کەس دیکە وەک بەڕێوەبەر." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} û {count} yên din wekî admîn hatine rakirin." + "value" : "Bi ser neket ku {name} û {count} yên din wekî admîn bike." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ne {count} abalala basasulwa nga Admin." + "value" : "Ensobi okwogolola {name} ne {count} abalala nga Admin." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ir dar {count} buvo pašalinti iš administratorių." + "value" : "Nepavyko pašalinti {name} ir dar {count} iš administratorių." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {count} други беа отстранети како Админ." + "value" : "Неуспешно отстранување на {name} и {count} други како администратори." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} болон {count} бусад Админ эрхээс хасагдлаа." + "value" : "{name} болон {count} бусад Админ эрхээс хасагдахад алдаа гарлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dan {count} lainnya dikeluarkan sebagai Admin." + "value" : "Gagal mengeluarkan {name} dan {count} lainnya sebagai Admin." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name} နှင့် {count} ဦး အုပ်ချုပ်ရေးမှူးအဖြစ် တန်းမြင့်နေသည်။" + "value" : "{name}နှင့် {count} ဦး ကို အုပ်ချုပ်ရေးမှူး အဖြစ် ဖွဲခြင်းမအောင်မြင်ဘူး။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {count} andre ble fjernet som Admin." + "value" : "Kunne ikke fjerne {name} og {count} andre som Admin." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {count} andre ble fjernet som Admin." + "value" : "Kunne ikke fjerne {name} og {count} andre som Admin." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count} अन्यलाई प्रशासकबाट हटाइयो।" + "value" : "{name}{count} अन्यलाई प्रशासकबाट हटाउन असफल।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} en {count} anderen zijn verwijderd als beheerder." + "value" : "Mislukt om {name} en {count} anderen om te verwijderen als beheerder." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {count} andre vart fjerna som Admin." + "value" : "Klarte ikkje å fjerna {name} og {count} andre som Admin." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ndi {count} ena adachotsedwa monga Admin." + "value" : "Zalephera kuchotsa {name} ndi {count} ena monga Admin." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ਅਤੇ {count} ਹੋਰ ਨੂੰ ਐਡਮਿਨ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" + "value" : "{name} ਅਤੇ {count} ਹੋਰ ਨੂੰ ਐਡਮਿਨ ਤੋਂ ਹਟਾਉਣ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} innych użytkowników nie są już administratorami." + "value" : "Nie udało się usunąć użytkownika {name} oraz {count} innych użytkowników z roli administratora." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{name} او {count} نور د ایډمین څخه لرې کړل شوی دی." + "value" : "{name} او {count} نور د ایډمین څخه لرې کولو کې ناکام." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e {count} outros foram removidos como Admin." + "value" : "Falha ao remover {name} e {count} outros como Admin." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e {count} outros foram removidos de Admin." + "value" : "Falha ao remover {name} e {count} outros de Admin." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "{name} și alți {count} au fost eliminați ca administratori." + "value" : "Eroare la eliminarea {name} și a altor {count} ca administratori." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {count} других пользователей были удалены админом." + "value" : "Не удалось удалить {name} и {count} других пользователей с правами Администратора." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} drugih su uklonjeni kao Admin." + "value" : "Nije moguće ukloniti {name} i {count} drugih kao Admin." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} සහ {count} වෙනත් අය පරිපාලක තනතුරින් ඉවත් කරන ලදී." + "value" : "{name} සහ {count} වෙනත් අය පරිපාලක තනතුරින් ඉවත් කිරීමට අසමත් විය." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {count} ďalší boli odstránení ako správcovia." + "value" : "Nepodarilo sa odstrániť {name} a {count} ďalší ako správcov." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} in {count} drugi so bili odstranjeni kot administratorji." + "value" : "Ni uspelo odstraniti {name} in {count} drugih kot administratorji." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dhe {count} të tjerë u larguan nga roli i Admin." + "value" : "Dështoi largimi i {name} dhe {count} të tjerë si Admin." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {count} осталих су уклоњени као администратори." + "value" : "Неуспешно уклањање {name} и {count} осталих као администратори." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} drugih su uklonjeni kao admini." + "value" : "Nije uspelo uklanjanje {name} i {count} drugih kao admina." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "{name} och {count} andra togs bort som Admin." + "value" : "Misslyckades med att ta bort {name} och {count} andra som Admin." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "{name} na {count} wengine wameondolewa kama Admin." + "value" : "Imeshindikana kuwaondoa {name} na {count} wengine kama Admin." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} மற்றும் {count} பிறர் நிர்வாகியிலிருந்து நீக்கப்பட்டனர்." + "value" : "{name} மற்றும் {count} பிறர் நிர்வாகத்திலிருந்து நீக்குவதில் தவறிவிட்டது." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} మరియు {count} ఇతరులు అడ్మిన్ స్థాయి నుండి తొలగించబడ్డారు." + "value" : "{name} మరియు {count} ఇతరులు అడ్మిన్ స్థాయి నుంచి తొలగించడంలో విఫలమైంది." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "{name} และ {count} คนอื่นๆ ถูกลบออกจากสถานะ Admin." + "value" : "ไม่สามารถลบ {name} และ {count} คนอื่นๆ ออกจากสถานะ Admin ได้." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ve {count} üye Yönetici seviyesinden düşürüldü." + "value" : "{name} ve {count} üye Yönetici seviyesinden düşürülemedi." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} та ще {count} інших було вилучено з переліку адміністраторів." + "value" : "Не вдалося вилучити {name} та ще {count} інших з переліку адміністраторів." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} اور {count} دیگر کو ایڈمن کے طور پر ہٹا دیا گیا۔" + "value" : "{name} اور {count} دیگر کو ایڈمن کے طور پر ہٹانے میں ناکامی ہوئی۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name} va {count} boshqalar Administrator sifatida olib tashlandi." + "value" : "{name} va {count} boshqa Administrator sifatida olib tashlashda xatolik." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count} người khác đã bị xoá khỏi vai trò Quản trị viên." + "value" : "Không thể xoá {name}{count} người khác khỏi vai trò Quản trị viên." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} kunye {count} abanye abantu basusiwe kubu-Admin." + "value" : "Koyekile ukususa {name} kunye {count} abanye abantu kubu-Admin." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}和其他{count}人的管理身份被移除。" + "value" : "移除{name}和其他{count}人的管理员身份失败。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count} 位其他成員 被移除管理員身份。" + "value" : "無法移除 {name}{count} 位其他成員 的管理員身份。" } } } }, - "adminRemovedUserOther" : { + "adminRemoveFailedOther" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "{name} en {other_name} is verwyder as Admin." + "value" : "Kon nie {name} en {other_name} as Admin verwyder nie." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تمت إزالة {name} و{other_name} من منصبي المسؤول." + "value" : "فشل في إزالة {name} و{other_name} كمسؤول." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} Adminlikdən çıxarıldı." + "value" : "{name}{other_name} Adminlikdən çıxarılmadı." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {other_name} gōra Admin." + "value" : "{name} a {other_name} gōra Admin intixabi agah kean gwašnī." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "{name} і {other_name} былі паніжаны на пасадзе адміністратара." + "value" : "Не атрымалася выдаліць {name} і {other_name} з адміністратараў." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {other_name} бяха премахнати като администратори." + "value" : "Неуспешно премахване на {name} и {other_name} като администратори." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} এবং {other_name} অ্যাডমিন হিসেবে সরিয়ে দেওয়া হয়েছে।" + "value" : "{name} এবং {other_name} অ্যাডমিন হিসেবে সরাতে ব্যর্থ হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {other_name} han estat eliminats com a administradors." + "value" : "No s'ha pogut eliminar {name} i {other_name} com a administradors." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {other_name} bylo odebráno správcovství." + "value" : "Selhalo odebrání {name} a {other_name} jako správce." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y a {other_name} wedi cael eu symud o'r grŵp fel Admin." + "value" : "Methwyd tynnu {name} a {other_name} fel Admin." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {other_name} blev fjernet som Admin." + "value" : "Kunne ikke fjerne {name} og {other_name} som Admin." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "{name} und {other_name} wurden als Administrator entfernt." + "value" : "Fehler beim Entfernen von {name} und {other_name} als Admin." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "{name} και {other_name} αφαιρέθηκαν ως Διαχειριστές." + "value" : "Αποτυχία αφαίρεσης {name} και {other_name} ως Διαχειριστές." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "{name} and {other_name} were removed as Admin." + "value" : "Failed to remove {name} and {other_name} as Admin." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "{name} kaj {other_name} estis forigitaj kiel Admoj." + "value" : "Malsukcesis forigi {name} kaj {other_name} kiel Admoj." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y {other_name} fueron removidos como Admins." + "value" : "No se pudo eliminar a {name} y {other_name} como administradores." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y {other_name} fueron eliminados como moderadores." + "value" : "Error al eliminar a {name} y a {other_name} como moderadores." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ja {other_name} eemaldati Administraatori kohalt." + "value" : "Ebaõnnestus {name} ja {other_name} eemaldamine Administraatori kohalt." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} eta {other_name} Admin moduan kendu dituzte." + "value" : "{name} eta {other_name} Admin moduan kentzea huts egin du." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و {other_name} از مدیریت حذف شدند." + "value" : "حذف {name}و{other_name} از مدیریت ناموفق بود." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ja {other_name} poistettiin ylläpitäjästä." + "value" : "Käyttäjien {name} ja {other_name} poistaminen ylläpitäjänä epäonnistui." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "{name} at {other_name} ay tinanggal bilang Admin." + "value" : "Nabigong tanggalin sina {name} at {other_name} bilang Admin." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} et {other_name}ont été supprimé·e·s en tant qu'administrateur." + "value" : "Échec de la suppression de {name} et {other_name} en tant qu'administrateur." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "{name} da {other_name} an cire su daga zama Admin." + "value" : "An kasa cire {name} da {other_name} daga zama Admin." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‏ ו{other_name}‏ הוסרו מניהול." + "value" : "נכשל בהסרת {name}‏ ו{other_name}‏ מניהול." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} and {other_name} को व्यवस्थापक पद से हटा दिया गया |" + "value" : "{name} और {other_name} व्यवस्थापक पद से हटाने में विफल |" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {other_name} su uklonjeni kao administratori." + "value" : "Uklanjanje {name} i {other_name} kao administratora nije uspjelo." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} és {other_name} el lettek távolítva adminisztrátorként." + "value" : "Nem sikerült eltávolítani őket adminisztrátorként: {name} és {other_name}." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "{name}֊ը և {other_name}֊ը հեռացվել են որպես ադմին՝ Administrator:" + "value" : "Չհաջողվեց հեռացնել {name}֊ին և {other_name}֊ին որպես ադմին՝ Administrator:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dan {other_name} telah dihapus sebagai Admin." + "value" : "Gagal menghapus {name} dan {other_name} sebagai Admin." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e {other_name} sono stati rimossi come amministratori." + "value" : "Impossibile rimuovere {name} e {other_name} come amministratori." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} がAdminに昇格しました。" + "value" : "{name}{other_name}は、Adminとして削除できませんでした。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "{name} და {other_name} წაიშალნენ ადმინისტრატორის როლიდან." + "value" : "ვერ მოვახერხეთ {name}-ის და {other_name}-ის ადმინისტრატორის როლიდან წაშლა." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "{name} និង {other_name} ត្រូវបានដកចេញពីតួនាទី Admin។" + "value" : "បរាជ័យក្នុងការដក {name} និង {other_name} ចេញពីតួនាទី Admin។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ಮತ್ತು {other_name} ಅವರಿಗೆ ನಿರ್ವಾಹಕರಾಗಿ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." + "value" : "{name} ಮತ್ತು {other_name} ಅವರನ್ನು ನಿರ್ವಾಹಕರಾಗಿ ತೆಗೆದುಹಾಕಲು ವಿಫಲವಾಗಿದೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}님과 {other_name}님의 관리자 직책이 제거되었습니다." + "value" : "{name}님과 {other_name}님의 관리자 직책을 제거하지 못했습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و {other_name} وەرگیندران وەک بەڕێوەبەر." + "value" : "شکستی وەرگرتنی {name} و {other_name} وەک بەڕێوەبەر." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} û {other_name} wekî admîn hatine rakirin." + "value" : "Bi ser neket ku {name} û {other_name} wekî admîn bike." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ne {other_name} basasulwa nga Admin." + "value" : "Ensobi okwogolola {name} ne {other_name} nga Admin." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ir {other_name} buvo pašalinti iš administratorių." + "value" : "Nepavyko pašalinti {name} ir {other_name} iš administratorių." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {other_name} беа отстранени како администратори." + "value" : "Неуспешно отстранување на {name} и {other_name} како администратори." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} болон {other_name} Админ эрхээс хасагдлаа." + "value" : "{name} болон {other_name} Админ эрхээс хасагдахад алдаа гарлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dan {other_name} dikeluarkan sebagai Admin." + "value" : "Gagal mengeluarkan {name} dan {other_name} sebagai Admin." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name}နှင့် {other_name} အုပ်ချုပ်ရေးမှူးအဖြစ် တန်းမြင့်နေသည်။" + "value" : "{name} နှင့် {other_name} ကို အုပ်ချုပ်ရေးမှူး အဖြစ် ဖွဲခြင်းမအောင်မြင်ပါ။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {other_name} ble fjernet som Admin." + "value" : "Kunne ikke fjerne {name} og {other_name} som Admin." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {other_name} ble fjernet som Admin." + "value" : "Kunne ikke fjerne {name} og {other_name} som Admin." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name}लाईप्रशासकबाट हटाइयो।" + "value" : "{name}{other_name}लाईप्रशासकबाट हटाउन असफल।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} en {other_name} zijn verwijderd als beheerder." + "value" : "Mislukt om {name} en {other_name} als beheerder te verwijderen." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {other_name} vart fjerna som Admin." + "value" : "Klarte ikkje å fjerna {name} og {other_name} som Admin." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ndi {other_name} adachotsedwa monga Admin." + "value" : "Zalephera kuchotsa {name} ndi {other_name} monga Admin." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ਤੇ {other_name} ਨੂੰ ਐਡਮਿਨ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" + "value" : "{name} ਤੇ {other_name} ਨੂੰ ਐਡਮਿਨ ਤੋਂ ਹਟਾਉਣ ਵਿੱਚ ਫੇਲ੍ਹ ਹੋਏ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Użytkownicy {name} i {other_name} nie są już administratorami." + "value" : "Nie udało się usunąć użytkowników {name} i {other_name} z roli administatora." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{name} او {other_name} د ایډمین څخه لرې کړل شوی دی." + "value" : "{name} او {other_name} د ایډمین څخه لرې کولو کې ناکام." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e {other_name} foram removidos como Admin." + "value" : "Falha ao remover {name} e {other_name} como Admin." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e {other_name} foram removidos de Admin." + "value" : "Falha ao remover {name} e {other_name} de Admin." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "{name} și {other_name} au fost eliminați ca administratori." + "value" : "Eroare la eliminarea {name} și {other_name} ca administratori." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Пользователи {name} и {other_name} были удалены админом." + "value" : "Не удалось удалить {name} и {other_name} с правами Администратора." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {other_name} su uklonjeni kao Admin." + "value" : "Nije moguće ukloniti {name} i {other_name} kao Admin." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} සහ {other_name} පරිපාලක තනතුරින් ඉවත් කරන ලදී." + "value" : "{name} සහ {other_name} පරිපාලක තනතුරින් ඉවත් කිරීමට අසමත් විය." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {other_name} boli odstránení ako správcovia." + "value" : "Nepodarilo sa odstrániť {name} a {other_name} ako správcov." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} in {other_name} sta bila odstranjena kot administratorja." + "value" : "Ni uspelo odstraniti {name} in {other_name} kot administratorja." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dhe {other_name} u larguan nga roli i Admin." + "value" : "Dështoi largimi i {name} dhe {other_name} si Admin." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {other_name} су уклоњени као администратори." + "value" : "Неуспешно уклањање {name} и {other_name} као администратори." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {other_name} su uklonjeni kao admini." + "value" : "Nije uspelo uklanjanje {name} i {other_name} kao admina." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "{name} och {other_name} togs bort som Admin." + "value" : "Misslyckades med att ta bort {name} och {other_name} som Admin." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "{name} na {other_name} wameondolewa kama Admin." + "value" : "Imeshindikana kuwaondoa {name} na {other_name} kama Admin." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} மற்றும் {other_name} நிர்வாகியிலிருந்து நீக்கப்பட்டனர்." + "value" : "{name} மற்றும் {other_name} நிர்வாகியிலிருந்து நீக்குவதில் தவறிவிட்டது." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} మరియు {other_name} అడ్మిన్ స్థాయి నుండి తొలగించబడ్డారు." + "value" : "{name} మరియు {other_name} అడ్మిన్ గా తొలగించడంలో విఫలమైంది." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "{name} และ {other_name} ถูกลบออกจากสถานะ Admin." + "value" : "ไม่สามารถลบ {name} และ {other_name} ออกจากสถานะ Admin ได้." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ve {other_name} Yönetici seviyesinden düşürüldü." + "value" : "{name} ve {other_name} Yönetici seviyesinden düşürülemedi." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} та {other_name} було вилучено з переліку адміністраторів." + "value" : "Не вдалось видалити {name} та {other_name} як Адміністратора." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} اور {other_name} کو ایڈمن کے طور پر ہٹا دیا گیا۔" + "value" : "{name} اور {other_name} کو ایڈمن کے طور پر ہٹانے میں ناکامی ہوئی۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name} va {other_name} Administrator sifatida olib tashlandi." + "value" : "{name} va {other_name} Administrator sifatida olib tashlashda xatolik." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} đã bị xoá khỏi vai trò Quản trị viên." + "value" : "Không thể xoá {name}{other_name} khỏi vai trò Quản trị viên." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} kunye {other_name} basusiwe kubu-Admin." + "value" : "Koyekile ukususa {name} kunye {other_name} kubu-Admin." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name}的管理身份被移除。" + "value" : "移除{name}{other_name}的管理员身份失败。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} 被移除管理員身份。" + "value" : "無法移除 {name}{other_name} 的管理員身份。" + } + } + } + }, + "adminSendingPromotion" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sending admin promotion" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sending admin promotions" + } + } + } + } + } } } } @@ -39483,1439 +39532,1439 @@ } } }, - "attachmentsFileSize" : { + "attachmentsFilesEmpty" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Lêer Grootte:" + "value" : "Jy het geen lêers in hierdie gesprek nie." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "حجم الملف:" + "value" : "لا تملك أي ملفات في هذه المحادثة." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Fayl ölçüsü:" + "value" : "Bu danışıqda heç bir faylınız yoxdur." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "بُرگ حجم:" + "value" : "شما فاصلے ناہ بیتنگی۔" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Памер файла:" + "value" : "У вас няма файлаў у гэтай размове." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Размер на файла:" + "value" : "Вие нямате никакви файлове в този разговор." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "ফাইলের আকার:" + "value" : "এই কথোপকথনে আপনার কোনো ফাইল নেই।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Mida del fitxer:" + "value" : "No tens cap fitxer en aquesta conversa." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Velikost souboru:" + "value" : "V této konverzaci nemáte žádné soubory." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Maint Ffeil:" + "value" : "Nid oes gennych unrhyw ffeiliau yn y sgwrs hon." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Filstørrelse:" + "value" : "Du har ingen filer i denne samtale." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Dateigröße:" + "value" : "Diese Unterhaltung enthält keine Dateien." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Μέγεθος Αρχείου:" + "value" : "Δεν έχετε κανένα αρχείο σε αυτή τη συνομιλία." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "File Size:" + "value" : "You don't have any files in this conversation." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Amplekso de la dosiero:" + "value" : "Vi ne havas ajnajn dosierojn en ĉi tiu konversacio." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tamaño del archivo:" + "value" : "No tienes ningún archivo en esta conversación." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Tamaño del archivo:" + "value" : "No tienes ningún documento en esta conversación." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Faili suurus:" + "value" : "Teil ei ole selles vestluses ühtegi faili." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Fitxategi Tamaina:" + "value" : "Ez daukazu fitxategirik elkarrizketa honetan." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "اندازه فایل:" + "value" : "شما در این مکالمه هیچ فایلی ندارید." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Tiedoston koko:" + "value" : "Sinulla ei ole tiedostoja tässä keskustelussa." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Laki ng Talaksan:" + "value" : "Wala kang mga file sa pag-uusap na ito." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Taille du fichier :" + "value" : "Vous n'avez aucun fichier dans cette conversation." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Tamaño do ficheiro:" + "value" : "Non tes ningún ficheiro nesta conversa." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Girman Fayil:" + "value" : "Ba ku da duk wani fayil a cikin wannan tattaunawa." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "גודל קובץ:" + "value" : "אין לך קבצים בשיחה הזאת." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "फ़ाइल आकार:" + "value" : "इस वार्तालाप में आपके पास कोई फाइलें नहीं हैं।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Veličina datoteke:" + "value" : "Nemate datoteka u ovom razgovoru." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Fájl méret:" + "value" : "Nincs fájl ebben a beszélgetésben." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ֆայլի չափսը՝" + "value" : "Դուք այս զրույցում ֆայլեր չունեք։" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ukuran Berkas:" + "value" : "Anda tidak memiliki berkas apapun dalam percakapan ini." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Dimensione file:" + "value" : "Non hai alcun file in questa chat." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ファイルサイズ:" + "value" : "この会話にはファイルがありません。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ფაილის ზომა:" + "value" : "ამ საუბარში ფაილები არ გაქვთ." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ទំហំឯកសារ៖" + "value" : "អ្នកមិនមានឯកសារណាមួយនៅក្នុងការសន្ទនាពីនេះទេ។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಕಡತದ ಗಾತ್ರ:" + "value" : "ಈ ಸಂಭಾಷಣೆಯಲ್ಲಿ ನೀವು ಯಾವುದೇ ಫೈಲ್‌ಗಳನ್ನು ಹೊಂದಿಲ್ಲ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "파일 크기:" + "value" : "이 대화에 파일이 없습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "قەبارەی فایل:" + "value" : "تۆ هیچ پەڕگەیکێت نییە لەم گفتگوویە." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Mezinahiya dosyeyê:" + "value" : "Tu pelên di vê sohbetê de nînin." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Obunene bwa Fayiro:" + "value" : "Tolina fayiro zona mu ngeri eno." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Failo dydis:" + "value" : "Šiame pokalbyje nėra failų." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Faila izmērs:" + "value" : "Šajā sarunā tev nav neviena faila." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Големина на датотека:" + "value" : "Во овој разговор немате датотеки." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Файлын хэмжээ:" + "value" : "Энэ ярианд танд файлс байхгүй байна." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Saiz Fail:" + "value" : "Anda belum mempunyai sebarang fail dalam perbualan ini." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "ဖိုင်အရွယ်အစား:" + "value" : "ဤဆွေးနွေးပွဲတွင် ဖိုင်များ မရှိသေးပါ။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Filstørrelse:" + "value" : "Du har ingen filer i denne samtalen." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Filstørrelse:" + "value" : "Du har ingen filer i denne samtalen." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "कुराकानी गर्दा इन्टर किजको कार्य।" + "value" : "तपाईंसँग यस कुराकानीमा कुनै फाइलहरू छैनन्।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bestandsgrootte:" + "value" : "U heeft geen bestanden in dit gesprek." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Filstorleik:" + "value" : "Du har inga filer i denne samtalen." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Kukala panka:" + "value" : "Simulibe mafayilo mu kuyankhulana uku." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਫਾਇਲ ਦਾ ਆਕਾਰ:" + "value" : "ਤੁਹਾਡੇ ਕੋਲ ਇਸ ਗੱਲਬਾਤ ਵਿੱਚ ਕੋਈ ਫਾਇਲ ਨਹੀਂ ਹੈ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Rozmiar pliku:" + "value" : "Nie masz żadnych plików w tej konwersacji." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "د فایل کچه:" + "value" : "تاسو په دې مکالمه کې هېڅ فایل نلرئ." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Tamanho do Arquivo:" + "value" : "Você não tem nenhum arquivo nesta conversa." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Tamanho do ficheiro:" + "value" : "Não tem nenhum ficheiro nesta conversa." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Dimensiune fișier:" + "value" : "Nu ai fișiere în această conversație." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Размер Файла:" + "value" : "В этой беседе нет файлов." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Veličina datoteke:" + "value" : "Nemaš nijednu datoteku u ovom razgovoru." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ගොනුවේ ප්‍රමානය:" + "value" : "ඔබ මෙම සංවාදයේ කිසිදු ගොනුවක් නොමැත." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Veľkosť súboru:" + "value" : "V tejto konverzácii nemáte žiadne súbory." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Velikost datoteke:" + "value" : "V tem pogovoru nimate nobenih datotek." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Madhësia e kartelës:" + "value" : "Ju nuk keni ndonjë skedarë në këtë bisedë." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Величина фајла:" + "value" : "Нематe фајловe у овом разговору." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Veličina fajla:" + "value" : "Nemate nijedan fajl u ovoj konverzaciji." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Filstorlek:" + "value" : "Du har inga filer i den här konversationen." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Ukubwa wa Jalada:" + "value" : "Hauna faili zozote katika mazungumzo haya." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "கோப்பு அளவு:" + "value" : "இந்த உரையாடலில் உங்களுக்கு கோப்புகள் எதுவும் இல்லை." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "ఫైల్ పరిమాణం:" + "value" : "ఈ సంభాషణలో మీకు ఏ ఫైళ్లు లేవు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ขนาดไฟล์:" + "value" : "คุณไม่มีไฟล์ในการสนทนานี้" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Dosya Boyutu:" + "value" : "Bu konuşmada herhangi bir dosyanız yok." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Розмір файлу:" + "value" : "У вас немає жодного файлу в цій розмові." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "فائل کا سائز:" + "value" : "اس گفتگو میں آپ کے پاس کوئی فائلیں نہیں ہیں۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Fayl hajmi:" + "value" : "Bu suhbatda hech qanday fayl yo'q." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Dung lượng tệp tin:" + "value" : "Bạn không có tệp nào trong cuộc trò chuyện này." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Ubukhulu beFayile:" + "value" : "Awunazo zifayile kule ncoko." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "文件大小:" + "value" : "您在此会话中没有任何文件。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "檔案大小:" + "value" : "此對話中沒有檔案。" } } } }, - "attachmentsFileType" : { + "attachmentsFileSize" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Lêer Tipe:" + "value" : "Lêer Grootte:" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "نوع الملف:" + "value" : "حجم الملف:" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Fayl növü:" + "value" : "Fayl ölçüsü:" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "بُرگ قسم:" + "value" : "بُرگ حجم:" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Тып файла:" + "value" : "Памер файла:" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Тип на файла:" + "value" : "Размер на файла:" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "ফাইলের ধরণ:" + "value" : "ফাইলের আকার:" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Tipus de fitxer:" + "value" : "Mida del fitxer:" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Typ souboru:" + "value" : "Velikost souboru:" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Math Ffeil:" + "value" : "Maint Ffeil:" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Filtype:" + "value" : "Filstørrelse:" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Dateityp:" + "value" : "Dateigröße:" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Τύπος Αρχείου:" + "value" : "Μέγεθος Αρχείου:" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "File Type:" + "value" : "File Size:" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo de la dosiero:" + "value" : "Amplekso de la dosiero:" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo de archivo:" + "value" : "Tamaño del archivo:" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo de archivo:" + "value" : "Tamaño del archivo:" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Failitüüp:" + "value" : "Faili suurus:" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Fitxategi Mota:" + "value" : "Fitxategi Tamaina:" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "نوع فایل:" + "value" : "اندازه فایل:" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Tiedoston tyyppi:" + "value" : "Tiedoston koko:" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Uri ng Talaksan:" + "value" : "Laki ng Talaksan:" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Type de fichier :" + "value" : "Taille du fichier :" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo de ficheiro:" + "value" : "Tamaño do ficheiro:" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Nau'in Fayil:" + "value" : "Girman Fayil:" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "סוג קובץ:" + "value" : "גודל קובץ:" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "फ़ाइल प्रकार:" + "value" : "फ़ाइल आकार:" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Vrsta datoteke:" + "value" : "Veličina datoteke:" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Fájl típus:" + "value" : "Fájl méret:" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ֆայլի տեսակ:" + "value" : "Ֆայլի չափսը՝" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Jenis Berkas:" + "value" : "Ukuran Berkas:" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo file:" + "value" : "Dimensione file:" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ファイルタイプ:" + "value" : "ファイルサイズ:" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ფაილის ტიპი:" + "value" : "ფაილის ზომა:" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ប្រភេទឯកសារ៖" + "value" : "ទំហំឯកសារ៖" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಕಡತದ ಪ್ರಕಾರ:" + "value" : "ಕಡತದ ಗಾತ್ರ:" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "파일 유형:" + "value" : "파일 크기:" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "جۆری فایل:" + "value" : "قەبارەی فایل:" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "جۆری دۆسیە:" + "value" : "Mezinahiya dosyeyê:" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Ekikula kya Fayiro:" + "value" : "Obunene bwa Fayiro:" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Failo tipas:" + "value" : "Failo dydis:" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Faila paplašinājums:" + "value" : "Faila izmērs:" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Тип на датотека:" + "value" : "Големина на датотека:" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Файлын төрөл:" + "value" : "Файлын хэмжээ:" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Jenis Fail:" + "value" : "Saiz Fail:" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "ဖိုင်အမျိုးအစား:" + "value" : "ဖိုင်အရွယ်အစား:" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Filtype:" + "value" : "Filstørrelse:" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Filtype:" + "value" : "Filstørrelse:" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "GIF" + "value" : "कुराकानी गर्दा इन्टर किजको कार्य।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bestandstype:" + "value" : "Bestandsgrootte:" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Filtype:" + "value" : "Filstorleik:" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Mtundu wa panka:" + "value" : "Kukala panka:" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਫਾਇਲ ਦਾ ਪ੍ਰਕਾਰ:" + "value" : "ਫਾਇਲ ਦਾ ਆਕਾਰ:" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Typ pliku:" + "value" : "Rozmiar pliku:" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "د فایل ډول:" + "value" : "د فایل کچه:" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo de Arquivo:" + "value" : "Tamanho do Arquivo:" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo de ficheiro:" + "value" : "Tamanho do ficheiro:" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Tip fişier:" + "value" : "Dimensiune fișier:" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Тип Файла:" + "value" : "Размер Файла:" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Tip datoteke:" + "value" : "Veličina datoteke:" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ගොනුවේ වර්ගය:" + "value" : "ගොනුවේ ප්‍රමානය:" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Typ súboru:" + "value" : "Veľkosť súboru:" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Vrsta datoteke:" + "value" : "Velikost datoteke:" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Lloji i kartelës:" + "value" : "Madhësia e kartelës:" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Тип фајла:" + "value" : "Величина фајла:" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Tip fajla:" + "value" : "Veličina fajla:" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Filtyp:" + "value" : "Filstorlek:" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Aina ya Jalada:" + "value" : "Ukubwa wa Jalada:" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "கோப்பு வகை:" + "value" : "கோப்பு அளவு:" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "ఫైల్ రకం:" + "value" : "ఫైల్ పరిమాణం:" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ประเภทไฟล์:" + "value" : "ขนาดไฟล์:" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Dosya Türü:" + "value" : "Dosya Boyutu:" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Тип файлу:" + "value" : "Розмір файлу:" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "فائل کی قسم:" + "value" : "فائل کا سائز:" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Fayl turi:" + "value" : "Fayl hajmi:" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Loại tệp tin:" + "value" : "Dung lượng tệp tin:" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Uhlobo lweFayile:" + "value" : "Ubukhulu beFayile:" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "文件类型:" + "value" : "文件大小:" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "檔案類型:" + "value" : "檔案大小:" } } } }, - "attachmentsFilesEmpty" : { + "attachmentsFileType" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Jy het geen lêers in hierdie gesprek nie." + "value" : "Lêer Tipe:" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "لا تملك أي ملفات في هذه المحادثة." + "value" : "نوع الملف:" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Bu danışıqda heç bir faylınız yoxdur." + "value" : "Fayl növü:" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "شما فاصلے ناہ بیتنگی۔" + "value" : "بُرگ قسم:" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "У вас няма файлаў у гэтай размове." + "value" : "Тып файла:" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Вие нямате никакви файлове в този разговор." + "value" : "Тип на файла:" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "এই কথোপকথনে আপনার কোনো ফাইল নেই।" + "value" : "ফাইলের ধরণ:" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "No tens cap fitxer en aquesta conversa." + "value" : "Tipus de fitxer:" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "V této konverzaci nemáte žádné soubory." + "value" : "Typ souboru:" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Nid oes gennych unrhyw ffeiliau yn y sgwrs hon." + "value" : "Math Ffeil:" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Du har ingen filer i denne samtale." + "value" : "Filtype:" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Diese Unterhaltung enthält keine Dateien." + "value" : "Dateityp:" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Δεν έχετε κανένα αρχείο σε αυτή τη συνομιλία." + "value" : "Τύπος Αρχείου:" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "You don't have any files in this conversation." + "value" : "File Type:" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Vi ne havas ajnajn dosierojn en ĉi tiu konversacio." + "value" : "Tipo de la dosiero:" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "No tienes ningún archivo en esta conversación." + "value" : "Tipo de archivo:" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "No tienes ningún documento en esta conversación." + "value" : "Tipo de archivo:" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Teil ei ole selles vestluses ühtegi faili." + "value" : "Failitüüp:" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Ez daukazu fitxategirik elkarrizketa honetan." + "value" : "Fitxategi Mota:" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "شما در این مکالمه هیچ فایلی ندارید." + "value" : "نوع فایل:" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Sinulla ei ole tiedostoja tässä keskustelussa." + "value" : "Tiedoston tyyppi:" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Wala kang mga file sa pag-uusap na ito." + "value" : "Uri ng Talaksan:" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Vous n'avez aucun fichier dans cette conversation." + "value" : "Type de fichier :" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Non tes ningún ficheiro nesta conversa." + "value" : "Tipo de ficheiro:" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Ba ku da duk wani fayil a cikin wannan tattaunawa." + "value" : "Nau'in Fayil:" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "אין לך קבצים בשיחה הזאת." + "value" : "סוג קובץ:" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "इस वार्तालाप में आपके पास कोई फाइलें नहीं हैं।" + "value" : "फ़ाइल प्रकार:" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Nemate datoteka u ovom razgovoru." + "value" : "Vrsta datoteke:" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Nincs fájl ebben a beszélgetésben." + "value" : "Fájl típus:" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Դուք այս զրույցում ֆայլեր չունեք։" + "value" : "Ֆայլի տեսակ:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Anda tidak memiliki berkas apapun dalam percakapan ini." + "value" : "Jenis Berkas:" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Non hai alcun file in questa chat." + "value" : "Tipo file:" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "この会話にはファイルがありません。" + "value" : "ファイルタイプ:" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ამ საუბარში ფაილები არ გაქვთ." + "value" : "ფაილის ტიპი:" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "អ្នកមិនមានឯកសារណាមួយនៅក្នុងការសន្ទនាពីនេះទេ។" + "value" : "ប្រភេទឯកសារ៖" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಈ ಸಂಭಾಷಣೆಯಲ್ಲಿ ನೀವು ಯಾವುದೇ ಫೈಲ್‌ಗಳನ್ನು ಹೊಂದಿಲ್ಲ." + "value" : "ಕಡತದ ಪ್ರಕಾರ:" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "이 대화에 파일이 없습니다." + "value" : "파일 유형:" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "تۆ هیچ پەڕگەیکێت نییە لەم گفتگوویە." + "value" : "جۆری فایل:" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Tu pelên di vê sohbetê de nînin." + "value" : "جۆری دۆسیە:" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Tolina fayiro zona mu ngeri eno." + "value" : "Ekikula kya Fayiro:" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Šiame pokalbyje nėra failų." + "value" : "Failo tipas:" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Šajā sarunā tev nav neviena faila." + "value" : "Faila paplašinājums:" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Во овој разговор немате датотеки." + "value" : "Тип на датотека:" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Энэ ярианд танд файлс байхгүй байна." + "value" : "Файлын төрөл:" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Anda belum mempunyai sebarang fail dalam perbualan ini." + "value" : "Jenis Fail:" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "ဤဆွေးနွေးပွဲတွင် ဖိုင်များ မရှိသေးပါ။" + "value" : "ဖိုင်အမျိုးအစား:" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Du har ingen filer i denne samtalen." + "value" : "Filtype:" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Du har ingen filer i denne samtalen." + "value" : "Filtype:" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "तपाईंसँग यस कुराकानीमा कुनै फाइलहरू छैनन्।" + "value" : "GIF" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "U heeft geen bestanden in dit gesprek." + "value" : "Bestandstype:" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Du har inga filer i denne samtalen." + "value" : "Filtype:" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Simulibe mafayilo mu kuyankhulana uku." + "value" : "Mtundu wa panka:" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਤੁਹਾਡੇ ਕੋਲ ਇਸ ਗੱਲਬਾਤ ਵਿੱਚ ਕੋਈ ਫਾਇਲ ਨਹੀਂ ਹੈ।" + "value" : "ਫਾਇਲ ਦਾ ਪ੍ਰਕਾਰ:" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nie masz żadnych plików w tej konwersacji." + "value" : "Typ pliku:" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "تاسو په دې مکالمه کې هېڅ فایل نلرئ." + "value" : "د فایل ډول:" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Você não tem nenhum arquivo nesta conversa." + "value" : "Tipo de Arquivo:" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Não tem nenhum ficheiro nesta conversa." + "value" : "Tipo de ficheiro:" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Nu ai fișiere în această conversație." + "value" : "Tip fişier:" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "В этой беседе нет файлов." + "value" : "Тип Файла:" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Nemaš nijednu datoteku u ovom razgovoru." + "value" : "Tip datoteke:" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ඔබ මෙම සංවාදයේ කිසිදු ගොනුවක් නොමැත." + "value" : "ගොනුවේ වර්ගය:" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "V tejto konverzácii nemáte žiadne súbory." + "value" : "Typ súboru:" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "V tem pogovoru nimate nobenih datotek." + "value" : "Vrsta datoteke:" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Ju nuk keni ndonjë skedarë në këtë bisedë." + "value" : "Lloji i kartelës:" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Нематe фајловe у овом разговору." + "value" : "Тип фајла:" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Nemate nijedan fajl u ovoj konverzaciji." + "value" : "Tip fajla:" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Du har inga filer i den här konversationen." + "value" : "Filtyp:" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Hauna faili zozote katika mazungumzo haya." + "value" : "Aina ya Jalada:" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "இந்த உரையாடலில் உங்களுக்கு கோப்புகள் எதுவும் இல்லை." + "value" : "கோப்பு வகை:" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "ఈ సంభాషణలో మీకు ఏ ఫైళ్లు లేవు." + "value" : "ఫైల్ రకం:" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "คุณไม่มีไฟล์ในการสนทนานี้" + "value" : "ประเภทไฟล์:" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Bu konuşmada herhangi bir dosyanız yok." + "value" : "Dosya Türü:" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "У вас немає жодного файлу в цій розмові." + "value" : "Тип файлу:" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "اس گفتگو میں آپ کے پاس کوئی فائلیں نہیں ہیں۔" + "value" : "فائل کی قسم:" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Bu suhbatda hech qanday fayl yo'q." + "value" : "Fayl turi:" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Bạn không có tệp nào trong cuộc trò chuyện này." + "value" : "Loại tệp tin:" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Awunazo zifayile kule ncoko." + "value" : "Uhlobo lweFayile:" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "您在此会话中没有任何文件。" + "value" : "文件类型:" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "此對話中沒有檔案。" + "value" : "檔案類型:" } } } @@ -61116,6 +61165,485 @@ } } }, + "blockUnblockedUser" : { + "extractionState" : "manual", + "localizations" : { + "af" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ontblokkeer {name}" + } + }, + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم الغاء الحظر عن {name}" + } + }, + "az" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} əngəldən çıxarıldı" + } + }, + "bal" : { + "stringUnit" : { + "state" : "translated", + "value" : "غیر بلاک کیا {name}" + } + }, + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Разблакіравана {name}" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Разблокиран {name}" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আনব্লক {name}" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desbloquejat {name}" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} odblokován(a)" + } + }, + "cy" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wedi dadrwystro {name}" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afblokeret {name}" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} entsperrt" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Κατάργηση φραγής {name}" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unblocked {name}" + } + }, + "eo" : { + "stringUnit" : { + "state" : "translated", + "value" : "Malbarita {name}" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desbloqueado {name}" + } + }, + "es-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desbloqueado {name}" + } + }, + "et" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tühista {name} blokeering" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} desblokeatu da" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "رفع مسدودیت {name}" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esto poistettiin {name}" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Na-unblock {name}" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Débloqué {name}" + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desbloqueado {name}" + } + }, + "ha" : { + "stringUnit" : { + "state" : "translated", + "value" : "An cire katanga {name}" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטל חסימה של {name}" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनब्लॉक किया {name}" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deblokirao/la {name}" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blokkolás feloldva: {name}" + } + }, + "hy-AM" : { + "stringUnit" : { + "state" : "translated", + "value" : "Արգելաբացել {name}" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buka blokir {name}" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sbloccato {name}" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ブロック解除済み {name}" + } + }, + "ka" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}-ის ბლოკი მოხსნილია" + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "បានឈប់ទប់ស្កាត់ {name}" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ಅನ್ಬ್ಲಾಕ್ ಮಾಡಿದನು" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} 차단 해제" + } + }, + "ku" : { + "stringUnit" : { + "state" : "translated", + "value" : "لابردنی دوورخستنەوە {name}" + } + }, + "ku-TR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Astengî hate rakirin {name}" + } + }, + "lg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ozeemu {name}" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atblokuota {name}" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atbloķēts {name}" + } + }, + "mk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Одблокиран {name}" + } + }, + "mn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} түгжээг арилгасан" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nyahsekat {name}" + } + }, + "my" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ကိုဘလော့ဖြေလိုက်ပြီ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opphev blokkering {name}" + } + }, + "nb-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blokkering opphevet {name}" + } + }, + "ne-NP" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनब्लक गरिएको {name}" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gedeblokkeerd {name}" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blokkering opphevet {name}" + } + }, + "ny" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachotsedwa pakusiya {name}" + } + }, + "pa-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਅਨਬਲੌਕ ਕੀਤਾ {name}" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odblokowano {name}" + } + }, + "ps" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} بېبندیز شو" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desbloqueado {name}" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desbloqueado {name}" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} a fost deblocat/ă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} разблокирован(а)" + } + }, + "sh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odblokiran {name}" + } + }, + "si-LK" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} අනවහිර කළා." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odblokovaný {name}" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odblokiran {name}" + } + }, + "sq" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zhbllokuar {name}" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Одблокирали сте {name}" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odblokirajte {name}" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avblockerad {name}" + } + }, + "sw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kizuizi kiliondolewa kwa {name}" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} விடுவிக்கப்பட்டது" + } + }, + "te" : { + "stringUnit" : { + "state" : "translated", + "value" : "అనుమతించబడిన {name}" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลิกปิดกั้น {name}." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Engel kaldırıldı {name}" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} розблоковано" + } + }, + "ur-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} کو ان بلاک کیا گیا" + } + }, + "uz" : { + "stringUnit" : { + "state" : "translated", + "value" : "Af qilingan {name}" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bỏ chặn {name}" + } + }, + "xh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Isusiwe {name}" + } + }, + "zh-CN" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消屏蔽{name}" + } + }, + "zh-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "解除封鎖 {name}" + } + } + } + }, "blockUnblockName" : { "extractionState" : "manual", "localizations" : { @@ -62535,485 +63063,6 @@ } } }, - "blockUnblockedUser" : { - "extractionState" : "manual", - "localizations" : { - "af" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ontblokkeer {name}" - } - }, - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تم الغاء الحظر عن {name}" - } - }, - "az" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} əngəldən çıxarıldı" - } - }, - "bal" : { - "stringUnit" : { - "state" : "translated", - "value" : "غیر بلاک کیا {name}" - } - }, - "be" : { - "stringUnit" : { - "state" : "translated", - "value" : "Разблакіравана {name}" - } - }, - "bg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Разблокиран {name}" - } - }, - "bn" : { - "stringUnit" : { - "state" : "translated", - "value" : "আনব্লক {name}" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desbloquejat {name}" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} odblokován(a)" - } - }, - "cy" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wedi dadrwystro {name}" - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Afblokeret {name}" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} entsperrt" - } - }, - "el" : { - "stringUnit" : { - "state" : "translated", - "value" : "Κατάργηση φραγής {name}" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unblocked {name}" - } - }, - "eo" : { - "stringUnit" : { - "state" : "translated", - "value" : "Malbarita {name}" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desbloqueado {name}" - } - }, - "es-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desbloqueado {name}" - } - }, - "et" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tühista {name} blokeering" - } - }, - "eu" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} desblokeatu da" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "رفع مسدودیت {name}" - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Esto poistettiin {name}" - } - }, - "fil" : { - "stringUnit" : { - "state" : "translated", - "value" : "Na-unblock {name}" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Débloqué {name}" - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desbloqueado {name}" - } - }, - "ha" : { - "stringUnit" : { - "state" : "translated", - "value" : "An cire katanga {name}" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "בטל חסימה של {name}" - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "अनब्लॉक किया {name}" - } - }, - "hr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deblokirao/la {name}" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Blokkolás feloldva: {name}" - } - }, - "hy-AM" : { - "stringUnit" : { - "state" : "translated", - "value" : "Արգելաբացել {name}" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buka blokir {name}" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sbloccato {name}" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ブロック解除済み {name}" - } - }, - "ka" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}-ის ბლოკი მოხსნილია" - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "បានឈប់ទប់ស្កាត់ {name}" - } - }, - "kn" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ಅನ್ಬ್ಲಾಕ್ ಮಾಡಿದನು" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} 차단 해제" - } - }, - "ku" : { - "stringUnit" : { - "state" : "translated", - "value" : "لابردنی دوورخستنەوە {name}" - } - }, - "ku-TR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Astengî hate rakirin {name}" - } - }, - "lg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ozeemu {name}" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atblokuota {name}" - } - }, - "lv" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atbloķēts {name}" - } - }, - "mk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Одблокиран {name}" - } - }, - "mn" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} түгжээг арилгасан" - } - }, - "ms" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nyahsekat {name}" - } - }, - "my" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ကိုဘလော့ဖြေလိုက်ပြီ" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Opphev blokkering {name}" - } - }, - "nb-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Blokkering opphevet {name}" - } - }, - "ne-NP" : { - "stringUnit" : { - "state" : "translated", - "value" : "अनब्लक गरिएको {name}" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gedeblokkeerd {name}" - } - }, - "nn-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Blokkering opphevet {name}" - } - }, - "ny" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wachotsedwa pakusiya {name}" - } - }, - "pa-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਅਨਬਲੌਕ ਕੀਤਾ {name}" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odblokowano {name}" - } - }, - "ps" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} بېبندیز شو" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desbloqueado {name}" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desbloqueado {name}" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} a fost deblocat/ă" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} разблокирован(а)" - } - }, - "sh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odblokiran {name}" - } - }, - "si-LK" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} අනවහිර කළා." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odblokovaný {name}" - } - }, - "sl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odblokiran {name}" - } - }, - "sq" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zhbllokuar {name}" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Одблокирали сте {name}" - } - }, - "sr-Latn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odblokirajte {name}" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Avblockerad {name}" - } - }, - "sw" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kizuizi kiliondolewa kwa {name}" - } - }, - "ta" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} விடுவிக்கப்பட்டது" - } - }, - "te" : { - "stringUnit" : { - "state" : "translated", - "value" : "అనుమతించబడిన {name}" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เลิกปิดกั้น {name}." - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Engel kaldırıldı {name}" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} розблоковано" - } - }, - "ur-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} کو ان بلاک کیا گیا" - } - }, - "uz" : { - "stringUnit" : { - "state" : "translated", - "value" : "Af qilingan {name}" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bỏ chặn {name}" - } - }, - "xh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Isusiwe {name}" - } - }, - "zh-CN" : { - "stringUnit" : { - "state" : "translated", - "value" : "取消屏蔽{name}" - } - }, - "zh-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "解除封鎖 {name}" - } - } - } - }, "call" : { "extractionState" : "manual", "localizations" : { @@ -66882,1445 +66931,1678 @@ } } }, - "callsInProgress" : { + "callsIncoming" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Oproep aan die gang" + "value" : "Inkomende oproep van {name}" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "المكالمة جارية" + "value" : "مكالمة واردة من {name}" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Zəng davam edir" + "value" : "{name} sizə zəng edir" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "کال جاری ہے" + "value" : "{name} سے آنے والی کال" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Ідзе выклік" + "value" : "Уваходны выклік ад {name}" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Обаждане в процес" + "value" : "Входящо обаждане от {name}" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "কল প্রক্রিয়াতে আছে" + "value" : "{name} থেকে আসন্ন কল" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Telefonada en procés" + "value" : "Trucada entrant de {name}" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Probíhající hovor" + "value" : "Příchozí hovor od {name}" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Galwad ar y gweill" + "value" : "Galwad i mewn gan {name}" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Opkald i gang" + "value" : "Indgående opkald fra {name}" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Anruf aktiv" + "value" : "Eingehender Anruf von {name}" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Κλήση σε εξέλιξη" + "value" : "Εισερχόμενη κλήση από «{name}»" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Call in progress" + "value" : "Incoming call from {name}" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Voko farata" + "value" : "Envena alvoko el {name}" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Llamada en curso" + "value" : "Llamada entrante de {name}" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Llamada en curso" + "value" : "Llamada entrante de {name}" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Kõne on pooleli" + "value" : "Sissetulev kõne kasutajalt {name}" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Call in progress" + "value" : "{name}-ren sarrera-deia" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "تماس در حال انجام است" + "value" : "تماس ورودی از {name}" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Puhelu on kesken" + "value" : "Saapuva puhelu käyttäjältä {name}" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Tawag sa Progreso" + "value" : "Papasok na tawag mula kay {name}" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Appel en cours" + "value" : "Appel entrant de {name}" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Chamada en curso" + "value" : "Chamada recibida de {name}" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Ana cikin kiran" + "value" : "Kiran shigowa daga {name}" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "שיחה בתהליך" + "value" : "שיחה נכנסת מ-{name}" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "कॉल प्रगति पर है" + "value" : "आ रहे हैं {name} से कॉल" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Poziv u tijeku" + "value" : "Dolazni poziv od {name}" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Hívás folyamatban" + "value" : "Bejövő hívás: {name}" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ընթացիկ զանգ" + "value" : "Մուտքային զանգ «{name}»-ից" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Panggilan sedang berlangsung" + "value" : "Panggilan masuk dari {name}" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Chiamata in corso" + "value" : "Chiamata in arrivo da {name}" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "通話中" + "value" : "『{name}』 からの着信" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ზარი მიმდინარეობს" + "value" : "შემომავალი ზარი {name}-ისგან" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ការហៅកំពុងដំណើរការ" + "value" : "ការហៅចូលពី {name}" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಕರೆ ಪ್ರಗತಿಪರವಾಗಿದೆ" + "value" : "{name}ನಿಂದ ಕರ್ವಲನ ಕರೆ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "통화 중" + "value" : "{name}에서 걸려오는 전화" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "پەیوەندی بەردەوامە" + "value" : "بانگی دێت لە {name}" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Bangê Bejeziyene" + "value" : "Gerîna hatî ji {name}" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Call in progress" - } - }, - "lo" : { - "stringUnit" : { - "state" : "translated", - "value" : "ກໍາລັງໂທຢູ່" + "value" : "Akaka kyetaaga okuva eri {name}" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Skambutis vykdomas" + "value" : "Gaunamasis skambutis nuo {name}" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Zvans procesā" + "value" : "Ienākošais zvans no {name}" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Повик во тек" + "value" : "Доаѓачки повик од {name}" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Дуудлага хийгдэж байна" + "value" : "{name}-с ирж буй дуудлага" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Panggilan sedang berlangsung" + "value" : "Panggilan masuk daripada {name}" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "ခေါ်ဆိုနေဆဲ" + "value" : "{name} အသံခေါ်ဆိုမှုလက်ခံမှု" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Samtale pågår" + "value" : "Innkommende anrop fra {name}" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Samtale pågår" + "value" : "Inkommende anrop fra {name}" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "कल प्रगति हुँदैछ" + "value" : "{name} बाट आगमन कल" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gesprek gaande" + "value" : "Inkomende oproep van {name}" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Samtale pågår" + "value" : "Inngåande samtale frå {name}" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Call in progress" + "value" : "Kayachiy yaykumukun wa {name}" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਕੌਲ ਜਾਰੀ ਹੈ" + "value" : "{name} ਤੋਂ ਕਾਲ ਆ ਰਹੀ ਹੈ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Trwa połączenie" + "value" : "Połączenie przychodzące od {name}" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "کال دوام لري" + "value" : "له {name} څخه راتلونکی زنګ" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Chamada em andamento" + "value" : "Chamada recebida de {name}" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Chamada em curso" + "value" : "Chamada recebida de {name}" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Apel în curs" + "value" : "Primire apel de la {name}" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Вызов в процессе" + "value" : "Входящий звонок от {name}" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Poziv u toku" + "value" : "Dolazni poziv od {name}" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ඇමතුම ක්‍රියාකරමින්" + "value" : "{name} වෙතින් එන ඇමතුම" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Prebiehajúci hovor" + "value" : "Prichádzajúci hovor od {name}" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Klic v teku" + "value" : "Dohodni klic od {name}" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Thirrje në progres" + "value" : "Thirrje ardhëse nga {name}" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Позив је у току" + "value" : "Долазни позив од {name}" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Poziv u toku" + "value" : "Zove Vas {name}" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Pågående samtal" + "value" : "Inkommande samtal från {name}" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Simu inayoendelea" + "value" : "Simu inaingia kutoka {name}" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "அழைப்பு நடக்கிறது" + "value" : "{name} உடன் வரும் அழைப்பு" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "కాల్ జరుగుతోంది" + "value" : "{name} నుండి కొత్తగా వచ్చిన కాల్" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "สายโทรดำเนินการอยู่" + "value" : "สายเรียกเข้าจาก {name}" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Devam eden arama" + "value" : "{name}'den Gelen arama" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Активний дзвінок" + "value" : "Вхідний дзвінок від {name}" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "کال جاری ہے" + "value" : "سے آنے والی کال {name}" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Qo'ng'iroq davom etmoqda" + "value" : "{name} dan kiruvchi qo'ng'iroq" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cuộc gọi đang diễn ra" + "value" : "Cuộc gọi đến từ {name}" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Ukutsalela kusenzeka" + "value" : "Ifowuni esIncoming evela ku {name}" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "通话中" + "value" : "来自{name}的通话" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "通話進行中" + "value" : "來自{name}的來電" } } } }, - "callsIncoming" : { + "callsIncomingUnknown" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Inkomende oproep van {name}" + "value" : "Inkomende oproep" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مكالمة واردة من {name}" + "value" : "مكالمة واردة" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name} sizə zəng edir" + "value" : "Gələn zəng" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} سے آنے والی کال" + "value" : "آنے والی کال" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Уваходны выклік ад {name}" + "value" : "Уваходны выклік" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Входящо обаждане от {name}" + "value" : "Входящо обаждане" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} থেকে আসন্ন কল" + "value" : "আসন্ন কল" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Trucada entrant de {name}" + "value" : "Telefonada entrant" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Příchozí hovor od {name}" + "value" : "Příchozí hovor" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Galwad i mewn gan {name}" + "value" : "Galwad i mewn" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Indgående opkald fra {name}" + "value" : "Indgående opkald" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Eingehender Anruf von {name}" + "value" : "Eingehender Anruf" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Εισερχόμενη κλήση από «{name}»" + "value" : "Εισερχόμενη κλήση" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Incoming call from {name}" + "value" : "Incoming call" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Envena alvoko el {name}" + "value" : "Envena alvoko" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Llamada entrante de {name}" + "value" : "Llamada entrante" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Llamada entrante de {name}" + "value" : "Llamada entrante" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Sissetulev kõne kasutajalt {name}" + "value" : "Sissetulev kõne" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{name}-ren sarrera-deia" + "value" : "Sarrera-deia" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "تماس ورودی از {name}" + "value" : "تماس ورودی" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Saapuva puhelu käyttäjältä {name}" + "value" : "Saapuva puhelu" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Papasok na tawag mula kay {name}" + "value" : "Papasok na tawag" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Appel entrant de {name}" + "value" : "Appel entrant" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Chamada recibida de {name}" + "value" : "Chamada recibida" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Kiran shigowa daga {name}" + "value" : "Banga tê" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "שיחה נכנסת מ-{name}" + "value" : "שיחה נכנסת" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "आ रहे हैं {name} से कॉल" + "value" : "आने वाली कॉल" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Dolazni poziv od {name}" + "value" : "Dolazni poziv" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Bejövő hívás: {name}" + "value" : "Bejövő hívás" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Մուտքային զանգ «{name}»-ից" + "value" : "Մուտքային զանգ" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Panggilan masuk dari {name}" + "value" : "Panggilan masuk" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Chiamata in arrivo da {name}" + "value" : "Chiamata in arrivo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "『{name}』 からの着信" + "value" : "着信" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "შემომავალი ზარი {name}-ისგან" + "value" : "შემომავალი ზარი" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ការហៅចូលពី {name}" + "value" : "ការហៅចូល" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ನಿಂದ ಕರ್ವಲನ ಕರೆ" + "value" : "ಕಾಲ್ಗ್ರಹಣ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}에서 걸려오는 전화" + "value" : "수신 전화" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "بانگی دێت لە {name}" + "value" : "بانگی دێت" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Gerîna hatî ji {name}" + "value" : "Gerîna habe" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Akaka kyetaaga okuva eri {name}" + "value" : "Akaka kyetaaga" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Gaunamasis skambutis nuo {name}" + "value" : "Gaunamasis skambutis" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Ienākošais zvans no {name}" + "value" : "Ienākošais zvans" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Доаѓачки повик од {name}" + "value" : "Доаѓачки повик" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name}-с ирж буй дуудлага" + "value" : "Орж ирж буй дуудлага" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Panggilan masuk daripada {name}" + "value" : "Panggilan masuk" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name} အသံခေါ်ဆိုမှုလက်ခံမှု" + "value" : "ဝင်ခေါ်ဆိုမှု" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Innkommende anrop fra {name}" + "value" : "Innkommende anrop" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Inkommende anrop fra {name}" + "value" : "Innkommende anrop" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name} बाट आगमन कल" + "value" : "आगमन कल" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Inkomende oproep van {name}" + "value" : "Inkomende oproep" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Inngåande samtale frå {name}" + "value" : "Inngåande samtale" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Kayachiy yaykumukun wa {name}" + "value" : "Kayachiy yaykumukun" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ਤੋਂ ਕਾਲ ਆ ਰਹੀ ਹੈ" + "value" : "ਆਉਣ ਵਾਲੀ ਕਾਲ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Połączenie przychodzące od {name}" + "value" : "Połączenie przychodzące" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "له {name} څخه راتلونکی زنګ" + "value" : "راتلونکی زنګ" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Chamada recebida de {name}" + "value" : "Recebendo chamada" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Chamada recebida de {name}" + "value" : "A receber chamada" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Primire apel de la {name}" + "value" : "Apel de intrare" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Входящий звонок от {name}" + "value" : "Входящий звонок" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Dolazni poziv od {name}" + "value" : "Dolazni poziv" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} වෙතින් එන ඇමතුම" + "value" : "ලැබෙන ඇමතුම" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Prichádzajúci hovor od {name}" + "value" : "Prichádzajúci hovor" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Dohodni klic od {name}" + "value" : "Dohodni klic" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Thirrje ardhëse nga {name}" + "value" : "Thirrje ardhëse" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Долазни позив од {name}" + "value" : "Долазни позив" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Zove Vas {name}" + "value" : "Dolazni poziv" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Inkommande samtal från {name}" + "value" : "Inkommande samtal" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Simu inaingia kutoka {name}" + "value" : "Simu inaingia" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} உடன் வரும் அழைப்பு" + "value" : "உடன் வரும் அழைப்பு" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} నుండి కొత్తగా వచ్చిన కాల్" + "value" : "కొత్తగా వచ్చిన కాల్" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "สายเรียกเข้าจาก {name}" + "value" : "สายเรียกเข้า" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name}'den Gelen arama" + "value" : "Gelen arama" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Вхідний дзвінок від {name}" + "value" : "Вхідний дзвінок" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "سے آنے والی کال {name}" + "value" : "آنے والی کال" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dan kiruvchi qo'ng'iroq" + "value" : "Kiruvchi qo'ng'iroq" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cuộc gọi đến từ {name}" + "value" : "Cuộc gọi đến" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Ifowuni esIncoming evela ku {name}" + "value" : "Ifowuni esIncoming" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "来自{name}的通话" + "value" : "呼入通话" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "來自{name}的來電" + "value" : "來電" } } } }, - "callsIncomingUnknown" : { + "callsInProgress" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Inkomende oproep" + "value" : "Oproep aan die gang" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مكالمة واردة" + "value" : "المكالمة جارية" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Gələn zəng" + "value" : "Zəng davam edir" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "آنے والی کال" + "value" : "کال جاری ہے" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Уваходны выклік" + "value" : "Ідзе выклік" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Входящо обаждане" + "value" : "Обаждане в процес" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "আসন্ন কল" + "value" : "কল প্রক্রিয়াতে আছে" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Telefonada entrant" + "value" : "Telefonada en procés" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Příchozí hovor" + "value" : "Probíhající hovor" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Galwad i mewn" + "value" : "Galwad ar y gweill" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Indgående opkald" + "value" : "Opkald i gang" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Eingehender Anruf" + "value" : "Anruf aktiv" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Εισερχόμενη κλήση" + "value" : "Κλήση σε εξέλιξη" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Incoming call" + "value" : "Call in progress" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Envena alvoko" + "value" : "Voko farata" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Llamada entrante" + "value" : "Llamada en curso" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Llamada entrante" + "value" : "Llamada en curso" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Sissetulev kõne" + "value" : "Kõne on pooleli" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Sarrera-deia" + "value" : "Call in progress" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "تماس ورودی" + "value" : "تماس در حال انجام است" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Saapuva puhelu" + "value" : "Puhelu on kesken" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Papasok na tawag" + "value" : "Tawag sa Progreso" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Appel entrant" + "value" : "Appel en cours" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Chamada recibida" + "value" : "Chamada en curso" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Banga tê" + "value" : "Ana cikin kiran" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "שיחה נכנסת" + "value" : "שיחה בתהליך" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "आने वाली कॉल" + "value" : "कॉल प्रगति पर है" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Dolazni poziv" + "value" : "Poziv u tijeku" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Bejövő hívás" + "value" : "Hívás folyamatban" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Մուտքային զանգ" + "value" : "Ընթացիկ զանգ" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Panggilan masuk" + "value" : "Panggilan sedang berlangsung" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Chiamata in arrivo" + "value" : "Chiamata in corso" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "着信" + "value" : "通話中" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "შემომავალი ზარი" + "value" : "ზარი მიმდინარეობს" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ការហៅចូល" + "value" : "ការហៅកំពុងដំណើរការ" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಕಾಲ್ಗ್ರಹಣ" + "value" : "ಕರೆ ಪ್ರಗತಿಪರವಾಗಿದೆ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "수신 전화" + "value" : "통화 중" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "بانگی دێت" + "value" : "پەیوەندی بەردەوامە" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Gerîna habe" + "value" : "Bangê Bejeziyene" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Akaka kyetaaga" + "value" : "Call in progress" + } + }, + "lo" : { + "stringUnit" : { + "state" : "translated", + "value" : "ກໍາລັງໂທຢູ່" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Gaunamasis skambutis" + "value" : "Skambutis vykdomas" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Ienākošais zvans" + "value" : "Zvans procesā" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Доаѓачки повик" + "value" : "Повик во тек" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Орж ирж буй дуудлага" + "value" : "Дуудлага хийгдэж байна" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Panggilan masuk" + "value" : "Panggilan sedang berlangsung" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "ဝင်ခေါ်ဆိုမှု" + "value" : "ခေါ်ဆိုနေဆဲ" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Innkommende anrop" + "value" : "Samtale pågår" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Innkommende anrop" + "value" : "Samtale pågår" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "आगमन कल" + "value" : "कल प्रगति हुँदैछ" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Inkomende oproep" + "value" : "Gesprek gaande" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Inngåande samtale" + "value" : "Samtale pågår" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Kayachiy yaykumukun" + "value" : "Call in progress" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਆਉਣ ਵਾਲੀ ਕਾਲ" + "value" : "ਕੌਲ ਜਾਰੀ ਹੈ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Połączenie przychodzące" + "value" : "Trwa połączenie" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "راتلونکی زنګ" + "value" : "کال دوام لري" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Recebendo chamada" + "value" : "Chamada em andamento" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "A receber chamada" + "value" : "Chamada em curso" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Apel de intrare" + "value" : "Apel în curs" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Входящий звонок" + "value" : "Вызов в процессе" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Dolazni poziv" + "value" : "Poziv u toku" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ලැබෙන ඇමතුම" + "value" : "ඇමතුම ක්‍රියාකරමින්" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Prichádzajúci hovor" + "value" : "Prebiehajúci hovor" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Dohodni klic" + "value" : "Klic v teku" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Thirrje ardhëse" + "value" : "Thirrje në progres" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Долазни позив" + "value" : "Позив је у току" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Dolazni poziv" + "value" : "Poziv u toku" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Inkommande samtal" + "value" : "Pågående samtal" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Simu inaingia" + "value" : "Simu inayoendelea" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "உடன் வரும் அழைப்பு" + "value" : "அழைப்பு நடக்கிறது" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "కొత్తగా వచ్చిన కాల్" + "value" : "కాల్ జరుగుతోంది" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "สายเรียกเข้า" + "value" : "สายโทรดำเนินการอยู่" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Gelen arama" + "value" : "Devam eden arama" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Вхідний дзвінок" + "value" : "Активний дзвінок" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "آنے والی کال" + "value" : "کال جاری ہے" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Kiruvchi qo'ng'iroq" + "value" : "Qo'ng'iroq davom etmoqda" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cuộc gọi đến" + "value" : "Cuộc gọi đang diễn ra" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Ifowuni esIncoming" + "value" : "Ukutsalela kusenzeka" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "呼入通话" + "value" : "通话中" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "來電" + "value" : "通話進行中" + } + } + } + }, + "callsMicrophonePermissionsRequired" : { + "extractionState" : "manual", + "localizations" : { + "az" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mikrofon müraciətinə icazə vermədiyiniz üçün {name} edən zəngi buraxdınız." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmeškali jste hovor od {name}, protože jste neudělili přístup k mikrofonu." + } + }, + "cy" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buoch yn methu alwad gan {name} oherwydd nad ydych wedi rhoi mynediad meicroffon." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast einen Anruf von {name} verpasst, weil Du keinen Mikrofonzugriff gewährt hast." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Χάσατε μια κλήση από {name} επειδή δεν έχετε παραχωρήσει πρόσβαση στο μικρόφωνο." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You missed a call from {name} because you haven't granted microphone access." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perdiste una llamada de {name} porque no has otorgado acceso al micrófono." + } + }, + "es-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perdiste una llamada de {name} porque no has otorgado acceso al micrófono." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شما یک تماس از {name} از دست دادید چون هنوز مجوز دسترسی به میکروفون را صادر نکرده اید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Missasit puhelun käyttäjältä {name}, koska et ole myöntänyt mikrofonin käyttöoikeutta." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez manqué un appel de {name} car vous n'avez pas accordé l'accès au microphone." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपको {name} से कॉल छूट गया क्योंकि आपने माइक्रोफोन एक्सेस की अनुमति नहीं दी है।" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elmulasztottad {name} hívását, mert a mikrofon-hozzáférés nem lett megadva." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai perso una chiamata da {name} perché non hai concesso l'accesso al microfono." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}からの通話を逃した理由は、マイクへのアクセスを許可していないためです。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}님으로부터 받은 전화를 놓쳤습니다. 마이크 접근 권한을 허용하지 않았기 때문입니다." + } + }, + "ku-TR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Te ji telefona ji {name} hatî ma, ji ber ku te destûra gihîna mîkrofonê nedaye." + } + }, + "mn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Та {name}-аас дуудлага авч чадсангүй, учир нь та микрофон ашиглах зөвшөөрөлгүй байна." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda terlepas panggilan daripada {name} kerana anda belum memberikan akses mikrofon." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je hebt een gemiste oproep van {name} omdat je geen microfoontoegang hebt verleend." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você perdeu uma chamada de {name} porque você não concedeu acesso ao microfone." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você perdeu uma chamada de {name} porque você não concedeu acesso ao microfone." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ai ratat un apel de la {name} deoarece nu ai acordat acces la microfon." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы пропустили звонок от {name} потому что не предоставили доступ к микрофону." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmeškali ste hovor od {name}, pretože ste neudelili prístup k mikrofónu." + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du missade ett samtal från {name} eftersom du inte har beviljat mikrofonåtkomst." + } + }, + "sw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ulikosa simu kutoka {name} kwa sababu hujatoa ruhusa ya matumizi ya kipaza sauti." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீங்கள் {name} -ன் அழைப்பை தவறவிட்டீர்கள் ஏனெனில் நீங்கள் மைக்ரோஃபோன் அணுகலை வழங்கவில்லை." + } + }, + "te" : { + "stringUnit" : { + "state" : "translated", + "value" : "మీరు {name} నుండి కాల్ మిస్ చేశారు కారణం మీరు మైక్రోఫోన్ యాక్సెస్ను ఇవ్వలేదు." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณพลาดสายจาก {name} เพราะคุณไม่ได้อนุญาต การเข้าถึงไมโครโฟน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} kişisinden gelen bir çağrıyı, mikrofon erişimini vermediğiniz için kaçırdınız." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви пропустили дзвінок від {name} через те, що не надали доступ до мікрофону." + } + }, + "ur-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ نے {name} کی کال مس کر دی کیونکہ آپ نے مائیکروفون تک رسائی اجازت نہیں دی ہے۔" + } + }, + "uz" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siz {name}dan qo'ng'iroqni o'tkazib yubordingiz, chunki siz mikrofon kirishiga ruxsat bermagansiz." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn đã bỏ lỡ cuộc gọi từ {name} vì bạn chưa cấp quyền truy cập micro." + } + }, + "xh" : { + "stringUnit" : { + "state" : "translated", + "value" : "You missed a call from {name} because you haven't granted microphone access." + } + }, + "zh-CN" : { + "stringUnit" : { + "state" : "translated", + "value" : "您错过了来自{name}的通话,因为您没有授予麦克风访问权限。" + } + }, + "zh-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您錯過了{name}的來電,因為您還未授權麥克風存取權限。" } } } @@ -81851,22 +82133,22 @@ "be" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Дадзеныя не выдалены %lld Service Node. Ідэнтыфікатар Service Node: {service_node_id}." + "value" : "Дадзеныя не выдалены %lld Service Nodes. Ідэнтыфікатары Service Nodes: {service_node_id}." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Дадзеныя не выдалены %lld Service Nodes. Ідэнтыфікатары Service Nodes: {service_node_id}." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Дадзеныя не выдалены %lld Service Nodes. Ідэнтыфікатары Service Nodes: {service_node_id}." + "value" : "Дадзеныя не выдалены %lld Service Node. Ідэнтыфікатар Service Node: {service_node_id}." } }, "other" : { @@ -81935,22 +82217,22 @@ "cs" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Data nebyla odstraněna %lld Service Node. ID Service Node: {service_node_id}." + "value" : "Data nebyla smazána %lld provozními uzly. ID provozních uzlů: {service_node_id}." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Data nebyla smazána %lld provozními uzly. ID provozních uzlů: {service_node_id}." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Data nebyla smazána %lld provozními uzly. ID provozních uzlů: {service_node_id}." + "value" : "Data nebyla odstraněna %lld Service Node. ID Service Node: {service_node_id}." } }, "other" : { @@ -81965,37 +82247,37 @@ "cy" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Data not deleted by %lld Nôd Gwasanaeth. ID Nôd Gwasanaeth: {service_node_id}." } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Data not deleted by %lld Nôd Gwasanaeth. ID Nôd Gwasanaeth: {service_node_id}." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Data not deleted by %lld Nôd Gwasanaeth. ID Nôd Gwasanaeth: {service_node_id}." } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Data not deleted by %lld Nôd Gwasanaeth. ID Nôd Gwasanaeth: {service_node_id}." } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "Data not deleted by %lld Nôd Gwasanaeth. ID Nôd Gwasanaeth: {service_node_id}." } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Data not deleted by %lld Nôd Gwasanaeth. ID Nôd Gwasanaeth: {service_node_id}." @@ -82277,25 +82559,25 @@ "he" : { "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "נתונים לא נמחקו על ידי %lld Service Node. מזהה Service Node: {service_node_id}." + "value" : "נתונים לא נמחקו על ידי %lld Service Nodes. מזהי Service Nodes: {service_node_id}." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "נתונים לא נמחקו על ידי %lld Service Nodes. מזהי Service Nodes: {service_node_id}." + "value" : "נתונים לא נמחקו על ידי %lld Service Node. מזהה Service Node: {service_node_id}." } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "נתונים לא נמחקו על ידי %lld Service Nodes. מזהי Service Nodes: {service_node_id}." } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "נתונים לא נמחקו על ידי %lld Service Nodes. מזהי Service Nodes: {service_node_id}." @@ -82325,16 +82607,16 @@ "hr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Podatke nije izbrisao %lld Service Node. ID uslužnog čvora: {service_node_id}." + "value" : "Podatke nije izbrisao %lld Service Node. ID-ovi uslužnih čvorova: {service_node_id}." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Podatke nije izbrisao %lld Service Node. ID-ovi uslužnih čvorova: {service_node_id}." + "value" : "Podatke nije izbrisao %lld Service Node. ID uslužnog čvora: {service_node_id}." } }, "other" : { @@ -82541,22 +82823,22 @@ "lt" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Duomenų nepavyko ištrinti per %lld Service Node. Service Node ID: {service_node_id}." + "value" : "Duomenų nepavyko ištrinti per %lld Service Node'us. Service Node ID: {service_node_id}." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Duomenų nepavyko ištrinti per %lld Service Node'us. Service Node ID: {service_node_id}." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Duomenų nepavyko ištrinti per %lld Service Node'us. Service Node ID: {service_node_id}." + "value" : "Duomenų nepavyko ištrinti per %lld Service Node. Service Node ID: {service_node_id}." } }, "other" : { @@ -82571,22 +82853,22 @@ "lv" : { "variations" : { "plural" : { - "zero" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Dati netika izdzēsti %lld Service Node. Service Node ID: {service_node_id}." + "value" : "Dati netika izdzēsti %lld pakalpojuma mezglos. Pakalpojuma mezgla ID {service_node_id}." } }, - "one" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Dati netika izdzēsti %lld pakalpojuma mezglos. Pakalpojuma mezgla ID {service_node_id}." } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", - "value" : "Dati netika izdzēsti %lld pakalpojuma mezglos. Pakalpojuma mezgla ID {service_node_id}." + "value" : "Dati netika izdzēsti %lld Service Node. Service Node ID: {service_node_id}." } } } @@ -82781,12 +83063,6 @@ "pl" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dane nie zostały usunięte przez %lld węzeł usługi. Identyfikator węzła usługi: {service_node_id}." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -82799,6 +83075,12 @@ "value" : "Dane nie zostały usunięte przez %lld węzłów usługi. Identyfikatory węzłów usługi: {service_node_id}." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dane nie zostały usunięte przez %lld węzeł usługi. Identyfikator węzła usługi: {service_node_id}." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -82865,16 +83147,16 @@ "ro" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Datele nu au fost șterse de %lld noduri de serviciu. ID-ul nodului de serviciu: {service_node_id}." + "value" : "Datele nu au fost șterse de %lld Noduri de serviciu. ID-uri de serviciu: {service_node_id}." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Datele nu au fost șterse de %lld Noduri de serviciu. ID-uri de serviciu: {service_node_id}." + "value" : "Datele nu au fost șterse de %lld noduri de serviciu. ID-ul nodului de serviciu: {service_node_id}." } }, "other" : { @@ -82889,22 +83171,22 @@ "ru" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Не удалось удалить данные на %lld узле. ID узла: {service_node_id}." + "value" : "Не удалось удалить данные на %lld узлах. ID узлов: {service_node_id}." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Не удалось удалить данные на %lld узлах. ID узлов: {service_node_id}." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Не удалось удалить данные на %lld узлах. ID узлов: {service_node_id}." + "value" : "Не удалось удалить данные на %lld узле. ID узла: {service_node_id}." } }, "other" : { @@ -82919,22 +83201,22 @@ "sh" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Podaci nisu izbrisani od strane %lld Service Node. ID Service Node: {service_node_id}." + "value" : "Podaci nisu izbrisani od strane %lld Service Node. ID-jevi Service Node-a: {service_node_id}." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Podaci nisu izbrisani od strane %lld Service Node. ID-jevi Service Node-a: {service_node_id}." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Podaci nisu izbrisani od strane %lld Service Node. ID-jevi Service Node-a: {service_node_id}." + "value" : "Podaci nisu izbrisani od strane %lld Service Node. ID Service Node: {service_node_id}." } }, "other" : { @@ -82967,22 +83249,22 @@ "sk" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Údaje neboli vymazané %lld Servisným uzlom. ID servisného uzla: {service_node_id}." + "value" : "Údaje neboli vymazané %lld Servisnými uzlami. ID servisných uzlov: {service_node_id}." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Údaje neboli vymazané %lld Servisnými uzlami. ID servisných uzlov: {service_node_id}." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Údaje neboli vymazané %lld Servisnými uzlami. ID servisných uzlov: {service_node_id}." + "value" : "Údaje neboli vymazané %lld Servisným uzlom. ID servisného uzla: {service_node_id}." } }, "other" : { @@ -82997,28 +83279,28 @@ "sl" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Podatkov ni izbrisal %lld Service Node. ID Service Node: {service_node_id}." + "value" : "Podatkov ni izbrisal %lld Service Nodes. ID-ji Service Node: {service_node_id}." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Podatkov ni izbrisal %lld Service Node. ID-ji Service Node: {service_node_id}." + "value" : "Podatkov ni izbrisal %lld Service Node. ID Service Node: {service_node_id}." } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Podatkov ni izbrisal %lld Service Nodes. ID-ji Service Node: {service_node_id}." } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "Podatkov ni izbrisal %lld Service Nodes. ID-ji Service Node: {service_node_id}." + "value" : "Podatkov ni izbrisal %lld Service Node. ID-ji Service Node: {service_node_id}." } } } @@ -83045,16 +83327,16 @@ "sr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Податке није избрисао %lld Service Node. ИД Service Node: {service_node_id}." + "value" : "Податке није избрисало %lld Service Nodes. ИД-ови Service Nodes: {service_node_id}." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Податке није избрисало %lld Service Nodes. ИД-ови Service Nodes: {service_node_id}." + "value" : "Податке није избрисао %lld Service Node. ИД Service Node: {service_node_id}." } }, "other" : { @@ -83069,16 +83351,16 @@ "sr-Latn" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Podaci nisu obrisani na %lld Service Node. ID Service Node-a: {service_node_id}." + "value" : "Podaci nisu obrisani na %lld Service Node-a. ID-ovi Service Node-a: {service_node_id}." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Podaci nisu obrisani na %lld Service Node-a. ID-ovi Service Node-a: {service_node_id}." + "value" : "Podaci nisu obrisani na %lld Service Node. ID Service Node-a: {service_node_id}." } }, "other" : { @@ -83195,22 +83477,22 @@ "uk" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Дані не видалено %lld Service Node. Ідентифікатор сервісного вузла: {service_node_id}." + "value" : "Дані не видалено %lld Service Node. Ідентифікатори сервісних вузлів: {service_node_id}." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Дані не видалено %lld Service Node. Ідентифікатори сервісних вузлів: {service_node_id}." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Дані не видалено %lld Service Node. Ідентифікатори сервісних вузлів: {service_node_id}." + "value" : "Дані не видалено %lld Service Node. Ідентифікатор сервісного вузла: {service_node_id}." } }, "other" : { @@ -96331,1912 +96613,1912 @@ } } }, - "communityJoinError" : { + "communityJoined" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Kon nie by gemeenskap aansluit nie" + "value" : "Aangesluit by Gemeenskap" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "فشل في الانضمام إلى المجتمع" + "value" : "انضم إلى المجتمع" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "İcmaya qoşulma uğursuz oldu" + "value" : "İcmaya qoşuldu" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "کمیونیٹی میں شامل ہونے میں ناکامی" + "value" : "Community میں شامل" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Не атрымалася далучыцца да суполкі" + "value" : "Далучыўся да супольнасці" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно присъединяване към общност" + "value" : "Присъедих се към Обществото" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "কমিউনিটিতে যোগ দিতে ব্যর্থ হয়েছে" + "value" : "Community তে যোগদান করা হয়েছে" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Ha fallat intentar unir-se a la comunitat" + "value" : "S'ha unit a comunitat" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Selhalo připojení ke komunitě" + "value" : "Připojeno ke komunitě" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Methwyd ymuno â chymuned" + "value" : "Ymuno â'r Gymuned" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke deltage i fællesskabet" + "value" : "Deltaget i Fællesskab" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Fehler beim Beitritt zur Community" + "value" : "Community beigetreten" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Αποτυχία συμμετοχής στην κοινότητα" + "value" : "Έγγραφα Κοινότητας" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Failed to join community" + "value" : "Joined Community" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Malsukcesis aniĝi al komunumo" + "value" : "Aliĝitis al Komunumo" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "No se pudo unir a la comunidad" + "value" : "Unido a Comunidad" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Error al unirse a la comunidad" + "value" : "Te uniste a la comunidad" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Kogukonnaga liitumine ebaõnnestus" + "value" : "Liitunud Kogukonnaga" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Hutsa izan da komunitatean sartzen" + "value" : "Komunitatean sartuta" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "پیوستن به انجمن ناموفق بود" + "value" : "پیوست به انجمن" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Liittyminen yhteisöön epäonnistui" + "value" : "Liitytty yhteisöön" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Hindi makasali sa grupo" + "value" : "Sumali sa Community" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Impossible de rejoindre la communauté" + "value" : "Communauté rejointe" + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uníronse á Comunidade" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "An kasa shiga al'umma" + "value" : "Shiga Community" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "נכשל להצטרף לקהילה" + "value" : "הצטרפת ל־Community" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "समुदाय में शामिल होना विफल रहा" + "value" : "Community में शामिल हो गए" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Pridruživanje zajednici nije uspjelo" + "value" : "Pridružili ste se zajednici" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Nem sikerült csatlakozni a közösséghez" + "value" : "Csatlakozott a közösséghez" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Չհաջողվեց միանալ համայնքին" + "value" : "Միացել ենք համայնքին" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Gagal bergabung ke komunitas" + "value" : "Bergabung dengan Komunitas" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Impossibile unirsi alla community" + "value" : "Sei entrato nella Comunità" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "コミュニティに参加できませんでした" + "value" : "コミュニティに参加しました" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ვერ შეუერთდა თემს" + "value" : "შეუერთდით Community-ს" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បរាជ័យក្នុងការចូលរួមសហគមន៍" + "value" : "បានចូលរួមសហគមន៍" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಕುಟುಂಬಕ್ಕೆ ಸೇರಲು ವಿಫಲವಾಗಿದೆ" + "value" : "Community ಸೇರಿದೆ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "커뮤니티 참여 실패" + "value" : "커뮤니티에 가입했습니다" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "شکستی ئەو دانگە وەربوون" + "value" : "کۆمەڵگەی بوونیشت لەگەڵ" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Bi ser neket ku têkeve civaka civakê" + "value" : "Di Civatê de tesîre" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Ensobi okuzaako okwetaaza ku community" + "value" : "Wegattadda ku Community" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Nepavyko prisijungti prie bendruomenės" + "value" : "Prisijungė prie Community" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Neizdevās pievienoties kopienai" + "value" : "Pievienojies kopienai" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно приклучување во заедницата" + "value" : "Приклучи се на Заедница" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Коммюнити нэгдэхэд алдаа гарлаа" + "value" : "Community-д Нэгдсэн" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Gagal menyertai komuniti" + "value" : "Telah menyertai Community" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "အသိုင်းအဝန်းကို ပူးပေါင်းလိုက်၍ မရ ပါ" + "value" : "Community အသစ်" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke bli med i community" + "value" : "Bli med i nettsamfunn" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke bli med i Community" + "value" : "Bli med nettsamfunn" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "समुदायमा सामेल हुन असफल भयो" + "value" : "समुदायमा सामेल हुनुभयो" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Het is niet gelukt om lid te worden van de community" + "value" : "Lid geworden van de Community" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Klarte ikkje bli med i community" + "value" : "Blei med nettsamfunn" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Zalephera kuvomereza mgulu" + "value" : "Kwati Community" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਕਮਿਉਨਿਟੀ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਵਿੱਚ ਅਸਫਲ" + "value" : "ਕਮੇਟੀ ਵਿੱਚ ਸ਼ਾਮਿਲ ਹੋ ਗਿਆ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nie udało się dołączyć do społeczności" + "value" : "Dołączono do społeczności" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "د ټولنې سره یوځای کیدل ناکام شول" + "value" : "ټولنې سره یوځای شوې" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Não foi possível participar da comunidade" + "value" : "Inserido na Comunidade" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Não foi possível participar na comunidade" + "value" : "Entrou na comunidade" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Nu s-a putut alătura comunității" + "value" : "S-a alăturat comunității" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Не удалось присоединиться к сообществу" + "value" : "Присоединились к сообществу" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Nije uspjelo pridruživanje zajednici" + "value" : "Pridružio se Community" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ප්‍රජාවට එක් වීමට අසමත් විය" + "value" : "Community එකට එක්වුණා" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Nie je možné sa pripojiť ku komunite" + "value" : "Pripojil sa ku komunite" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Ni se uspelo pridružiti skupnosti" + "value" : "Pridružili ste se skupnosti" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Dështoi bashkimi me komunitetin" + "value" : "U bashkua në Community" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Придруживање заједници није успело" + "value" : "Придружили сте се заједници" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Neuspešno pridruživanje zajednici" + "value" : "Pridružen Zajednici" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Misslyckades med att gå med i gemenskapen" + "value" : "Gått med i Community" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Imeshindikana kujiunga na jamii" + "value" : "Umejiunga na Jamii" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "சமூகம் சேருவதில் தோல்வி" + "value" : "சமூகத்தில் சேர்ந்தார்" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "సమూహంలో చేరడంలో విఫలమైంది" + "value" : "Communityలో చేరారు" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ไม่สามารถเข้าร่วมชุมชนได้" + "value" : "เข้าร่วม Community แล้ว" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Topluluğa katılınamadı" + "value" : "Topluluğa Katıldınız" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Не вдалося приєднатися до спільноти" + "value" : "Приєднано до спільноти" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "کمیونٹی میں شامل ہونے میں ناکام" + "value" : "Community میں شامل ہوا" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Jamoaga qo'shilishda muammo chiqdi" + "value" : "Community ga qo'shilindi" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Không thể tham gia cộng đồng" + "value" : "Đã tham gia Community" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Koyekile ukujoyina uluntu" + "value" : "Ujoyine i Community" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "加入社群失败" + "value" : "已加入社群" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "無法加入社群" + "value" : "已加入社群" } } } }, - "communityJoinOfficial" : { + "communityJoinedAlready" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Of sluit aan by een van hierdie..." + "value" : "Jy is reeds 'n lid van hierdie Gemeenskap." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أو انضم إلى واحدة من..." + "value" : "أنت متصل بالفعل بهذا المجتمع." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Ya da bunlardan birinə qoşulun..." + "value" : "Artıq bu icmanın üzvüsünüz." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "یہاں ھَنی اھد يېں..." + "value" : "کمنینت تراچ بیتے" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Або далучыцеся да аднаго з гэтых..." + "value" : "Вы ўжо з'яўляецеся ўдзельнікам гэтай community." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Или се присъедините към някоя от тези..." + "value" : "Вече сте член на тази общност." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "অথবা এরকম আরও কোথাও যোগ দিন..." + "value" : "You are already a member of this community." } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "O uneix-te a alguns d'aquests..." + "value" : "Ja sou membre d'aquesta comunitat." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Nebo se připojte k jedné z těchto..." + "value" : "Již jste členem této komunity." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Neu ymunwch ag un o'r rhain..." + "value" : "Rydych eisoes yn aelod o'r gymuned hon." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Eller deltag i en af disse..." + "value" : "Du er allerede medlem af dette fællesskab." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Oder tritt eine von diesen bei..." + "value" : "Du bist bereits ein Mitglied dieser Community." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Ή γίνετε μέλος σε ένα από αυτά..." + "value" : "Είστε ήδη μέλος αυτής της community." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Or join one of these..." + "value" : "You are already a member of this community." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Aŭ aliĝu unu de ĉi tiuj…..." + "value" : "Vi jam estas membro de ĉi tiu komunumo." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "O únete a uno de estos..." + "value" : "Ya eres miembro de esta comunidad." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "O únete a uno de estos..." + "value" : "Ya eres miembro de esta comunidad." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Või liituge ühega neist..." + "value" : "Olete juba selle kogukonna liige." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Edo batu hauetara..." + "value" : "Dagoeneko komunitate honetako kidea zara." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "یا به یکی از این‌ها بپیوندید…" + "value" : "شما قبلا عضو این گروه شده اید." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Tai liity johonkin näistä..." + "value" : "Olet jo jäsen tässä yhteisössä." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "O sumali sa isa sa mga ito..." + "value" : "Isa ka nang miyembro ng grupong ito." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ou rejoignez un de ceux-ci..." + "value" : "Vous êtes déjà membre de cette communauté." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Ou únete a algunha destas..." + "value" : "Xa es membro desta comunidade." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Ko shiga ɗaya daga cikin waɗannan..." + "value" : "Kai ma memba ne na wannan al'ummar." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "או הצטרף לאחד מאלה…..." + "value" : "את/ה כבר חבר בקהילה הזו." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "या इनमें से एक को जोड़ें..." + "value" : "आप पहले से ही इस समुदाय के सदस्य हैं।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Ili se pridružite jednom od ovih..." + "value" : "Već ste član ove zajednice." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Vagy csatlakozz az egyikhez az alábbiakból..." + "value" : "Te már csatlakoztál ehhez a közösséghez." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Կամ միացե՛ք սրանցից մեկին…" + "value" : "Դուք արդեն այս համայնքի անդամ եք։" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Atau gabung salah satu dari ini..." + "value" : "Anda sudah menjadi anggota komunitas ini." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Oppure unisciti a uno di questi..." + "value" : "Fai già parte di questa Comunità." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "または、以下のコミュニティに参加する…" + "value" : "あなたは既にこのCommunityのメンバーです。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ან შემოუერთდით ერთ-ერთს..." + "value" : "თქვენ უკვე წევრია ამ Community-ში." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ឬចូលរួមក្នុងចំណោមណាមួយនេះ…" + "value" : "អ្នកជាសមាជិករួចហើយនៃសហគមន៍នេះ។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಅಥವಾ ಇವುಗಳಲ್ಲಿ ಒಂದನ್ನು ಸೇರಿಯಿರಿ..." + "value" : "ನೀವು ಈಗಾಗಲೇ ಈ ಸಮುದಾಯದ ಸದಸ್ಯರಿದ್ದೀರಿ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "또는 이 중에서 참여..." + "value" : "이미 이 그룹에 연결되어 있습니다!" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "یان یەکێک لە ئەم هەژماران ببە دەبەش..." + "value" : "تۆ پێشتر ئەم کۆمەڵگایە عضو بوویت." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "An tevlî yek ji van bibe..." + "value" : "Tu jixwe girêdayî vê civatê yî." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Oba jjangira emu kuzinno..." + "value" : "Oli mwendamu mu bukulakulanya buno bwonna." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Arba prisijunkite prie vienos iš šių..." + "value" : "Jūs jau esate šioje bendruomenėje." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Vai pievienojies kādai no šīm..." + "value" : "Jūs jau esat šīs kopienas loceklis." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Или приклучи се на една од овие..." + "value" : "Вие веќе сте член на оваа заедница." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Эсвэл эдгээрийн нэгийг ороорой..." + "value" : "Та аль хэдийн энэ Community-н гишүүн байна." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Atau sertai salah satu dari ini..." + "value" : "Anda sudah menjadi ahli komuniti ini." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "သို့မဟုတ် ဤဝက်ဘ်ဆိုက်တစ်ခုမှတစ်ခုကို ဝင်ရောက်ကြပါ..." + "value" : "You are already a member of this community." } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Eller bli med i en av disse..." + "value" : "Du er allerede medlem av dette fellesskapet." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Eller bli med i en av disse..." + "value" : "Du er allerede medlem av dette Community." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "वा ती मध्ये कुनैमा सम्मिलित हुनुहोस्" + "value" : "तपाईं पहिल्यै यो समुदायको सदस्य हुनुहुन्छ।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Of neem deel aan een van deze..." + "value" : "U bent al bij deze community aangesloten." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Eller bli med i ein av desse…..." + "value" : "Du er allereie medlem av denne fellesskapet." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Kapena lumikizanani ndi limodzi la izi..." + "value" : "Inu muli kale membala wa gulu ili." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਜਾਂ ਇਨ੍ਹਾਂ ਵਿੱਚੋਂ ਇੱਕ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ…" + "value" : "ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ ਇਸ ਕਮਿਊਨਿਟੀ ਦੇ ਮੈਂਬਰ ਹੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Lub dołącz do jednej z tych..." + "value" : "Jesteś już członkiem tej społeczności." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "یا د دې یو سره یوځای شئ..." + "value" : "تاسو دمخه د دې ټولنې غړی یاست." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Ou junte-se a um desses..." + "value" : "Você já é um membro deste Community." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Ou junte-se a um destes..." + "value" : "Você já está associado a esta comunidade." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Sau alătură-te uneia dintre acestea..." + "value" : "Ești deja membru al acestei comunități." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Или присоединитесь к одной из этих..." + "value" : "Вы уже являетесь участником этого сообщества." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Ili se pridruži jednom od ovih..." + "value" : "Već ste član ove zajednice." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "නැත්නම් මේ එකකට එකතු වෙන්න..." + "value" : "ඔබ දැනටමත් මෙම ප්‍රජාවට එක් වී ඇත." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Alebo sa pripojte k jednej z týchto…..." + "value" : "K tejto komunite ste už pripojení." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Ali se pridruži eni izmed teh..." + "value" : "Ste že član te skupnosti." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Ose bashkohuni me njërën nga këto..." + "value" : "Ju jeni tashmë anëtar i kësaj komuniteti." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Или се придружите једној од ових…..." + "value" : "Већ сте члан ове Community." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Ili se pridružite nekoj od ovih..." + "value" : "Već ste član ove zajednice." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Eller gå med i en av dessa..." + "value" : "Du är redan medlem i denna gemenskap." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Ama ujiunge na mojawapo ya hizi..." + "value" : "Wewe tayari ni mwanachama wa huu jumuiya." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "அல்லது இவற்றில் ஏதேனும் ஒன்றில் சேருங்கள்..." + "value" : "நீங்கள் ஏற்கனவே இந்த சமுதாயத்தின் உறுப்பினராக உள்ளீர்கள்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "ఈ వాటిలో ఒకటిలో చేరండి..." + "value" : "మీరు ఇప్పటికే ఈ Community యొక్క సభ్యులు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "หรือเข้าร่วมอย่างใดอย่างหนึ่งเหล่านี้..." + "value" : "คุณเป็นสมาชิกของชุมชนนี้แล้ว" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Veya bunlardan birine katılın..." + "value" : "Bu topluluğun zaten üyesisiniz." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Або приєднуйтесь до однієї з цих..." + "value" : "Ви вже є учасником цієї спільноти." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "یا ان میں سے کسی میں شامل ہوں..." + "value" : "آپ پہلے سے ہی اس community کے رکن ہیں۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Yoki bulardan biriga qo'shiling..." + "value" : "Siz allaqachon bu hamjamiyat a'zosi bo'lgansiz." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Hoặc tham gia một trong các cộng đồng này..." + "value" : "Bạn đã là thành viên của cộng đồng này." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Okanye joyina elinye lala..." + "value" : "Uvele ube lilungu lale Community." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "或加入下列社群…..." + "value" : "您已是这个社群的成员了。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "或加入這些..." + "value" : "您已經是此社群的成員。" } } } }, - "communityJoined" : { + "communityJoinError" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Aangesluit by Gemeenskap" + "value" : "Kon nie by gemeenskap aansluit nie" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "انضم إلى المجتمع" + "value" : "فشل في الانضمام إلى المجتمع" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "İcmaya qoşuldu" + "value" : "İcmaya qoşulma uğursuz oldu" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "Community میں شامل" + "value" : "کمیونیٹی میں شامل ہونے میں ناکامی" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Далучыўся да супольнасці" + "value" : "Не атрымалася далучыцца да суполкі" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Присъедих се към Обществото" + "value" : "Неуспешно присъединяване към общност" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "Community তে যোগদান করা হয়েছে" + "value" : "কমিউনিটিতে যোগ দিতে ব্যর্থ হয়েছে" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "S'ha unit a comunitat" + "value" : "Ha fallat intentar unir-se a la comunitat" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Připojeno ke komunitě" + "value" : "Selhalo připojení ke komunitě" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Ymuno â'r Gymuned" + "value" : "Methwyd ymuno â chymuned" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Deltaget i Fællesskab" + "value" : "Kunne ikke deltage i fællesskabet" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Community beigetreten" + "value" : "Fehler beim Beitritt zur Community" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Έγγραφα Κοινότητας" + "value" : "Αποτυχία συμμετοχής στην κοινότητα" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Joined Community" + "value" : "Failed to join community" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Aliĝitis al Komunumo" + "value" : "Malsukcesis aniĝi al komunumo" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Unido a Comunidad" + "value" : "No se pudo unir a la comunidad" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Te uniste a la comunidad" + "value" : "Error al unirse a la comunidad" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Liitunud Kogukonnaga" + "value" : "Kogukonnaga liitumine ebaõnnestus" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Komunitatean sartuta" + "value" : "Hutsa izan da komunitatean sartzen" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "پیوست به انجمن" + "value" : "پیوستن به انجمن ناموفق بود" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Liitytty yhteisöön" + "value" : "Liittyminen yhteisöön epäonnistui" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Sumali sa Community" + "value" : "Hindi makasali sa grupo" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Communauté rejointe" - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uníronse á Comunidade" + "value" : "Impossible de rejoindre la communauté" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Shiga Community" + "value" : "An kasa shiga al'umma" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "הצטרפת ל־Community" + "value" : "נכשל להצטרף לקהילה" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "Community में शामिल हो गए" + "value" : "समुदाय में शामिल होना विफल रहा" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Pridružili ste se zajednici" + "value" : "Pridruživanje zajednici nije uspjelo" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Csatlakozott a közösséghez" + "value" : "Nem sikerült csatlakozni a közösséghez" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Միացել ենք համայնքին" + "value" : "Չհաջողվեց միանալ համայնքին" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Bergabung dengan Komunitas" + "value" : "Gagal bergabung ke komunitas" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sei entrato nella Comunità" + "value" : "Impossibile unirsi alla community" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "コミュニティに参加しました" + "value" : "コミュニティに参加できませんでした" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "შეუერთდით Community-ს" + "value" : "ვერ შეუერთდა თემს" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បានចូលរួមសហគមន៍" + "value" : "បរាជ័យក្នុងការចូលរួមសហគមន៍" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "Community ಸೇರಿದೆ" + "value" : "ಕುಟುಂಬಕ್ಕೆ ಸೇರಲು ವಿಫಲವಾಗಿದೆ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "커뮤니티에 가입했습니다" + "value" : "커뮤니티 참여 실패" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "کۆمەڵگەی بوونیشت لەگەڵ" + "value" : "شکستی ئەو دانگە وەربوون" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Di Civatê de tesîre" + "value" : "Bi ser neket ku têkeve civaka civakê" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Wegattadda ku Community" + "value" : "Ensobi okuzaako okwetaaza ku community" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Prisijungė prie Community" + "value" : "Nepavyko prisijungti prie bendruomenės" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Pievienojies kopienai" + "value" : "Neizdevās pievienoties kopienai" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Приклучи се на Заедница" + "value" : "Неуспешно приклучување во заедницата" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Community-д Нэгдсэн" + "value" : "Коммюнити нэгдэхэд алдаа гарлаа" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Telah menyertai Community" + "value" : "Gagal menyertai komuniti" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "Community အသစ်" + "value" : "အသိုင်းအဝန်းကို ပူးပေါင်းလိုက်၍ မရ ပါ" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bli med i nettsamfunn" + "value" : "Kunne ikke bli med i community" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Bli med nettsamfunn" + "value" : "Kunne ikke bli med i Community" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "समुदायमा सामेल हुनुभयो" + "value" : "समुदायमा सामेल हुन असफल भयो" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lid geworden van de Community" + "value" : "Het is niet gelukt om lid te worden van de community" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Blei med nettsamfunn" + "value" : "Klarte ikkje bli med i community" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Kwati Community" + "value" : "Zalephera kuvomereza mgulu" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਕਮੇਟੀ ਵਿੱਚ ਸ਼ਾਮਿਲ ਹੋ ਗਿਆ" + "value" : "ਕਮਿਉਨਿਟੀ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਵਿੱਚ ਅਸਫਲ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Dołączono do społeczności" + "value" : "Nie udało się dołączyć do społeczności" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "ټولنې سره یوځای شوې" + "value" : "د ټولنې سره یوځای کیدل ناکام شول" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Inserido na Comunidade" + "value" : "Não foi possível participar da comunidade" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Entrou na comunidade" + "value" : "Não foi possível participar na comunidade" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "S-a alăturat comunității" + "value" : "Nu s-a putut alătura comunității" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Присоединились к сообществу" + "value" : "Не удалось присоединиться к сообществу" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Pridružio se Community" + "value" : "Nije uspjelo pridruživanje zajednici" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "Community එකට එක්වුණා" + "value" : "ප්‍රජාවට එක් වීමට අසමත් විය" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Pripojil sa ku komunite" + "value" : "Nie je možné sa pripojiť ku komunite" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Pridružili ste se skupnosti" + "value" : "Ni se uspelo pridružiti skupnosti" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "U bashkua në Community" + "value" : "Dështoi bashkimi me komunitetin" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Придружили сте се заједници" + "value" : "Придруживање заједници није успело" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Pridružen Zajednici" + "value" : "Neuspešno pridruživanje zajednici" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Gått med i Community" + "value" : "Misslyckades med att gå med i gemenskapen" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Umejiunga na Jamii" + "value" : "Imeshindikana kujiunga na jamii" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "சமூகத்தில் சேர்ந்தார்" + "value" : "சமூகம் சேருவதில் தோல்வி" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "Communityలో చేరారు" + "value" : "సమూహంలో చేరడంలో విఫలమైంది" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "เข้าร่วม Community แล้ว" + "value" : "ไม่สามารถเข้าร่วมชุมชนได้" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Topluluğa Katıldınız" + "value" : "Topluluğa katılınamadı" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Приєднано до спільноти" + "value" : "Не вдалося приєднатися до спільноти" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "Community میں شامل ہوا" + "value" : "کمیونٹی میں شامل ہونے میں ناکام" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Community ga qo'shilindi" + "value" : "Jamoaga qo'shilishda muammo chiqdi" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Đã tham gia Community" + "value" : "Không thể tham gia cộng đồng" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Ujoyine i Community" + "value" : "Koyekile ukujoyina uluntu" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "已加入社群" + "value" : "加入社群失败" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "已加入社群" + "value" : "無法加入社群" } } } }, - "communityJoinedAlready" : { + "communityJoinOfficial" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Jy is reeds 'n lid van hierdie Gemeenskap." + "value" : "Of sluit aan by een van hierdie..." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أنت متصل بالفعل بهذا المجتمع." + "value" : "أو انضم إلى واحدة من..." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Artıq bu icmanın üzvüsünüz." + "value" : "Ya da bunlardan birinə qoşulun..." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "کمنینت تراچ بیتے" + "value" : "یہاں ھَنی اھد يېں..." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Вы ўжо з'яўляецеся ўдзельнікам гэтай community." + "value" : "Або далучыцеся да аднаго з гэтых..." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Вече сте член на тази общност." + "value" : "Или се присъедините към някоя от тези..." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "You are already a member of this community." + "value" : "অথবা এরকম আরও কোথাও যোগ দিন..." } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Ja sou membre d'aquesta comunitat." + "value" : "O uneix-te a alguns d'aquests..." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Již jste členem této komunity." + "value" : "Nebo se připojte k jedné z těchto..." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Rydych eisoes yn aelod o'r gymuned hon." + "value" : "Neu ymunwch ag un o'r rhain..." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Du er allerede medlem af dette fællesskab." + "value" : "Eller deltag i en af disse..." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Du bist bereits ein Mitglied dieser Community." + "value" : "Oder tritt eine von diesen bei..." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Είστε ήδη μέλος αυτής της community." + "value" : "Ή γίνετε μέλος σε ένα από αυτά..." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "You are already a member of this community." + "value" : "Or join one of these..." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Vi jam estas membro de ĉi tiu komunumo." + "value" : "Aŭ aliĝu unu de ĉi tiuj…..." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ya eres miembro de esta comunidad." + "value" : "O únete a uno de estos..." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Ya eres miembro de esta comunidad." + "value" : "O únete a uno de estos..." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Olete juba selle kogukonna liige." + "value" : "Või liituge ühega neist..." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Dagoeneko komunitate honetako kidea zara." + "value" : "Edo batu hauetara..." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "شما قبلا عضو این گروه شده اید." + "value" : "یا به یکی از این‌ها بپیوندید…" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Olet jo jäsen tässä yhteisössä." + "value" : "Tai liity johonkin näistä..." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Isa ka nang miyembro ng grupong ito." + "value" : "O sumali sa isa sa mga ito..." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Vous êtes déjà membre de cette communauté." + "value" : "Ou rejoignez un de ceux-ci..." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Xa es membro desta comunidade." + "value" : "Ou únete a algunha destas..." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Kai ma memba ne na wannan al'ummar." + "value" : "Ko shiga ɗaya daga cikin waɗannan..." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "את/ה כבר חבר בקהילה הזו." + "value" : "או הצטרף לאחד מאלה…..." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "आप पहले से ही इस समुदाय के सदस्य हैं।" + "value" : "या इनमें से एक को जोड़ें..." } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Već ste član ove zajednice." + "value" : "Ili se pridružite jednom od ovih..." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Te már csatlakoztál ehhez a közösséghez." + "value" : "Vagy csatlakozz az egyikhez az alábbiakból..." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Դուք արդեն այս համայնքի անդամ եք։" + "value" : "Կամ միացե՛ք սրանցից մեկին…" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Anda sudah menjadi anggota komunitas ini." + "value" : "Atau gabung salah satu dari ini..." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Fai già parte di questa Comunità." + "value" : "Oppure unisciti a uno di questi..." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "あなたは既にこのCommunityのメンバーです。" + "value" : "または、以下のコミュニティに参加する…" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "თქვენ უკვე წევრია ამ Community-ში." + "value" : "ან შემოუერთდით ერთ-ერთს..." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "អ្នកជាសមាជិករួចហើយនៃសហគមន៍នេះ។" + "value" : "ឬចូលរួមក្នុងចំណោមណាមួយនេះ…" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ನೀವು ಈಗಾಗಲೇ ಈ ಸಮುದಾಯದ ಸದಸ್ಯರಿದ್ದೀರಿ." + "value" : "ಅಥವಾ ಇವುಗಳಲ್ಲಿ ಒಂದನ್ನು ಸೇರಿಯಿರಿ..." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "이미 이 그룹에 연결되어 있습니다!" + "value" : "또는 이 중에서 참여..." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "تۆ پێشتر ئەم کۆمەڵگایە عضو بوویت." + "value" : "یان یەکێک لە ئەم هەژماران ببە دەبەش..." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Tu jixwe girêdayî vê civatê yî." + "value" : "An tevlî yek ji van bibe..." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Oli mwendamu mu bukulakulanya buno bwonna." + "value" : "Oba jjangira emu kuzinno..." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Jūs jau esate šioje bendruomenėje." + "value" : "Arba prisijunkite prie vienos iš šių..." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Jūs jau esat šīs kopienas loceklis." + "value" : "Vai pievienojies kādai no šīm..." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Вие веќе сте член на оваа заедница." + "value" : "Или приклучи се на една од овие..." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Та аль хэдийн энэ Community-н гишүүн байна." + "value" : "Эсвэл эдгээрийн нэгийг ороорой..." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Anda sudah menjadi ahli komuniti ini." + "value" : "Atau sertai salah satu dari ini..." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "You are already a member of this community." + "value" : "သို့မဟုတ် ဤဝက်ဘ်ဆိုက်တစ်ခုမှတစ်ခုကို ဝင်ရောက်ကြပါ..." } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Du er allerede medlem av dette fellesskapet." + "value" : "Eller bli med i en av disse..." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Du er allerede medlem av dette Community." + "value" : "Eller bli med i en av disse..." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "तपाईं पहिल्यै यो समुदायको सदस्य हुनुहुन्छ।" + "value" : "वा ती मध्ये कुनैमा सम्मिलित हुनुहोस्" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "U bent al bij deze community aangesloten." + "value" : "Of neem deel aan een van deze..." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Du er allereie medlem av denne fellesskapet." + "value" : "Eller bli med i ein av desse…..." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Inu muli kale membala wa gulu ili." + "value" : "Kapena lumikizanani ndi limodzi la izi..." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ ਇਸ ਕਮਿਊਨਿਟੀ ਦੇ ਮੈਂਬਰ ਹੋ।" + "value" : "ਜਾਂ ਇਨ੍ਹਾਂ ਵਿੱਚੋਂ ਇੱਕ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ…" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jesteś już członkiem tej społeczności." + "value" : "Lub dołącz do jednej z tych..." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "تاسو دمخه د دې ټولنې غړی یاست." + "value" : "یا د دې یو سره یوځای شئ..." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Você já é um membro deste Community." + "value" : "Ou junte-se a um desses..." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Você já está associado a esta comunidade." + "value" : "Ou junte-se a um destes..." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Ești deja membru al acestei comunități." + "value" : "Sau alătură-te uneia dintre acestea..." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Вы уже являетесь участником этого сообщества." + "value" : "Или присоединитесь к одной из этих..." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Već ste član ove zajednice." + "value" : "Ili se pridruži jednom od ovih..." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ඔබ දැනටමත් මෙම ප්‍රජාවට එක් වී ඇත." + "value" : "නැත්නම් මේ එකකට එකතු වෙන්න..." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "K tejto komunite ste už pripojení." + "value" : "Alebo sa pripojte k jednej z týchto…..." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Ste že član te skupnosti." + "value" : "Ali se pridruži eni izmed teh..." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Ju jeni tashmë anëtar i kësaj komuniteti." + "value" : "Ose bashkohuni me njërën nga këto..." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Већ сте члан ове Community." + "value" : "Или се придружите једној од ових…..." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Već ste član ove zajednice." + "value" : "Ili se pridružite nekoj od ovih..." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Du är redan medlem i denna gemenskap." + "value" : "Eller gå med i en av dessa..." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Wewe tayari ni mwanachama wa huu jumuiya." + "value" : "Ama ujiunge na mojawapo ya hizi..." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "நீங்கள் ஏற்கனவே இந்த சமுதாயத்தின் உறுப்பினராக உள்ளீர்கள்." + "value" : "அல்லது இவற்றில் ஏதேனும் ஒன்றில் சேருங்கள்..." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "మీరు ఇప్పటికే ఈ Community యొక్క సభ్యులు." + "value" : "ఈ వాటిలో ఒకటిలో చేరండి..." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "คุณเป็นสมาชิกของชุมชนนี้แล้ว" + "value" : "หรือเข้าร่วมอย่างใดอย่างหนึ่งเหล่านี้..." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Bu topluluğun zaten üyesisiniz." + "value" : "Veya bunlardan birine katılın..." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Ви вже є учасником цієї спільноти." + "value" : "Або приєднуйтесь до однієї з цих..." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "آپ پہلے سے ہی اس community کے رکن ہیں۔" + "value" : "یا ان میں سے کسی میں شامل ہوں..." } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Siz allaqachon bu hamjamiyat a'zosi bo'lgansiz." + "value" : "Yoki bulardan biriga qo'shiling..." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Bạn đã là thành viên của cộng đồng này." + "value" : "Hoặc tham gia một trong các cộng đồng này..." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Uvele ube lilungu lale Community." + "value" : "Okanye joyina elinye lala..." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "您已是这个社群的成员了。" + "value" : "或加入下列社群…..." } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "您已經是此社群的成員。" + "value" : "或加入這些..." } } } @@ -106917,972 +107199,972 @@ } } }, - "conversationsAddToHome" : { + "conversationsAddedToHome" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Voeg by tuisskerm" + "value" : "Bygevoeg by tuisskerm" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أضِف إلى الشاشة الرئيسية" + "value" : "تمت الإضافة للشاشة الرئيسية" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Əsas ekrana əlavə et" + "value" : "Əsas ekrana əlavə edildi" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "موبایل گند کسرہ" + "value" : "موبایل گندِ ایریں شود" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Дадаць на галоўны экран" + "value" : "Дадана на галоўны экран" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Добавяне на работния плот" + "value" : "Добавено на работния плот" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "Add to home screen" + "value" : "হোম স্ক্রিনে যোগ করা হয়েছে" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Afegeix a la pantalla d'inici" + "value" : "S'ha afegit a la pantalla d'inici." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Přidat na plochu" + "value" : "Přidáno na plochu" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Ychwanegu at y sgrin gartref" + "value" : "Ychwanegwyd at y sgrin gartref" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Føj til startskærm" + "value" : "Føjet til startskærm" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Zum Startbildschirm hinzufügen" + "value" : "Zum Startbildschirm hinzugefügt" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Προσθήκη στην αρχική οθόνη" + "value" : "Προστέθηκε στην αρχική οθόνη" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Add to home screen" + "value" : "Added to home screen" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Aldoni al la ĉefekrano" + "value" : "Aldonita al la ĉefekrano" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Añadir a la pantalla de inicio" + "value" : "Agregado a la pantalla de inicio" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Añadir a la pantalla de inicio" + "value" : "Agregado a la pantalla de inicio" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Lisa avakuvale" + "value" : "Avakuvale lisatud" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Gehitu etxeko pantailara" + "value" : "Etxeko pantailara gehituta" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "افزودن به صفحه اصلی" + "value" : "به صفحهٔ اصلی اضافه شد" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Lisää kotiruudulle" + "value" : "Lisätty kotiruudulle" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Idagdag sa home screen" + "value" : "Naidagdag sa home screen" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ajouter à l’écran d’accueil" + "value" : "Ajouté à l’écran d’accueil" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Engadir á pantalla de inicio" + "value" : "Engadido á pantalla de inicio" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Ƙara zuwa allon gida" + "value" : "An ƙara zuwa allon gida" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "הוסף אל מסך הבית" + "value" : "התווסף אל מסך הבית" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "होम स्क्रीन में शामिल करें" + "value" : "होम स्क्रीन में जोड़ा गया" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Dodaj na početni zaslon" + "value" : "Dodano na početni zaslon" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Parancsikon hozzáadása" + "value" : "Parancsikon hozzáadva" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ավելացնել Հիմնական էկրանին" + "value" : "Ավելացված է գլխավոր էկրանին" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tambahkan ke layar beranda" + "value" : "Ditambahkan ke layar beranda" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Aggiungi alla schermata principale" + "value" : "Aggiunto alla schermata principale" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ホーム画面に追加する" + "value" : "ホーム画面に追加しました" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "მთავარ ეკრანზე დამატება" + "value" : "მთავარ ეკრანზე დამატებულია" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បន្ថែមទៅអេក្រង់ដើម" + "value" : "បានបន្ថែមទៅអេក្រង់ដើម" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಮುಖಪುಟಕ್ಕೆ ಸೇರಿಸು" + "value" : "ಮುಖಪುಟಕ್ಕೆ ಸೇರಿಸಲಾಗಿದೆ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "홈 화면에 추가" + "value" : "홈 화면에 추가됨" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "ژوورەوی پەیوەندیکردن زیاد بکە" + "value" : "ژوورەوی پەیوەندیکردن زیادکرا" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Li ser pêşgehê bişopîne" + "value" : "Ser pêşgeha xane kiriye" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Yongeza ku nninga nalyo" + "value" : "Kiyongezeddwako ku nninga yange" } }, "lo" : { "stringUnit" : { "state" : "translated", - "value" : "ເພີ່ມເນື້ອເຫຼ່າເຊື່ອ" + "value" : "ເພີ່ມໄປໃນເນື້ອເຫຼ່າເພື່ອ" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pridėti į pradžios ekraną" + "value" : "Pridėta į pradžios ekraną" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Pievienot sākuma ekrānam" + "value" : "Pievienots sākuma ekrānam" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Додади на почетниот екран" + "value" : "Додадено на почетниот екран" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Эхлэх дэлгэцэнд нэмэх" + "value" : "Эхлэх дэлгэцэнд нэмсэн" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Tambah ke skrin utama" + "value" : "Ditambah ke skrin utama" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "ပင်မ စခရင်သို့ ထည့်မည်" + "value" : "ဟုမ်းစကရင်ထဲသို့ ထည့်လိုက်ပါပြီ" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til på startskjermen" + "value" : "Lagt til på startskjermen" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til på startskjermen" + "value" : "Lagt til startskjermen" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "घर स्क्रिनमा थप्नुहोस्" + "value" : "घर स्क्रिनमा थपियो" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aan thuisscherm toevoegen" + "value" : "Aan thuisscherm toegevoegd" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til heimeskjermen" + "value" : "Lagt til heimeskjermen" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Onjezerani ku chinsalu chachikulu" + "value" : "Oonjezeredwa ku chinsalu chachikulu" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਮੁੱਖ اسڪਰੀਨ ਤੇ ਸ਼ਾਮਿਲ ਕਰੋ" + "value" : "ਮੁੱਖ ਸਕ੍ਰੀਨ 'ਤੇ ਸ਼ਾਮਿਲ ਕੀਤਾ ਗਿਆ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Dodaj do ekranu głównego" + "value" : "Dodano do ekranu głównego" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "کور پردې ته اضافه کړئ" + "value" : "کور پردې ته اضافه شو" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Adicionar a tela inicial" + "value" : "Adicionada à tela inicial" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Adicionar ao ecrã inicial" + "value" : "Adicionado ao ecrã inicial" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Adaugă pe ecranul principal" + "value" : "Adăugat pe ecranul principal" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Добавить на главный экран" + "value" : "Добавлено на главный экран" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Dodaj na početni ekran" + "value" : "Dodano na početni ekran" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "මුල් තිරයට එකතු කරන්න" + "value" : "මුල් තිරයට එක් කරන ලදී" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Pridať na plochu" + "value" : "Pridané na plochu" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Dodaj na domači zaslon" + "value" : "Dodano na domači zaslon" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Shtoje te skena e kreut" + "value" : "U shtua te skena e kreut" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Додај на почетни екран" + "value" : "Додато на почетни екран" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Dodaj na početni ekran" + "value" : "Dodato na početni ekran" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Lägg till på hemskärmen" + "value" : "Tillagd på Hemskärmen" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Ongeza kwenye skrini ya nyumbani" + "value" : "Imeongezwa kwenye skiirini ya mwanzo" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "முகப்பு திரையில் சேர்க்க" + "value" : "முகப்பு திரையில் சேர்க்கப்பட்டது" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "హోమ్ స్క్రీన్కు జోడించండి" + "value" : "హోమ్ స్క్రీన్కు జోడించబడింది" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "เพิ่มไปยังหน้าจอหลัก" + "value" : "เพิ่มไปยังหน้าจอหลักแล้ว" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Ana ekrana ekle" + "value" : "Ana ekrana eklendi" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Додати до домашнього екрану" + "value" : "Додано до домашнього екрана" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ہوم اسکرین میں شامل کریں" + "value" : "ہوم اسکرین میں شامل کر دیا گیا۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Asosiy ekranga qo'shish" + "value" : "Asosiy ekranga qo'shildi" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Thêm vào màn hình chính" + "value" : "Đã thêm vào màn hình chính" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Yongeza kwiscreen sasekhaya" + "value" : "Ikongeze kwiscreen sasekhaya" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "添加到主屏幕" + "value" : "已添加到主屏幕" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "新增至主畫面" + "value" : "已新增至主畫面" } } } }, - "conversationsAddedToHome" : { + "conversationsAddToHome" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Bygevoeg by tuisskerm" + "value" : "Voeg by tuisskerm" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تمت الإضافة للشاشة الرئيسية" + "value" : "أضِف إلى الشاشة الرئيسية" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Əsas ekrana əlavə edildi" + "value" : "Əsas ekrana əlavə et" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "موبایل گندِ ایریں شود" + "value" : "موبایل گند کسرہ" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Дадана на галоўны экран" + "value" : "Дадаць на галоўны экран" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Добавено на работния плот" + "value" : "Добавяне на работния плот" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "হোম স্ক্রিনে যোগ করা হয়েছে" + "value" : "Add to home screen" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "S'ha afegit a la pantalla d'inici." + "value" : "Afegeix a la pantalla d'inici" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Přidáno na plochu" + "value" : "Přidat na plochu" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Ychwanegwyd at y sgrin gartref" + "value" : "Ychwanegu at y sgrin gartref" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Føjet til startskærm" + "value" : "Føj til startskærm" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Zum Startbildschirm hinzugefügt" + "value" : "Zum Startbildschirm hinzufügen" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Προστέθηκε στην αρχική οθόνη" + "value" : "Προσθήκη στην αρχική οθόνη" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Added to home screen" + "value" : "Add to home screen" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Aldonita al la ĉefekrano" + "value" : "Aldoni al la ĉefekrano" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Agregado a la pantalla de inicio" + "value" : "Añadir a la pantalla de inicio" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Agregado a la pantalla de inicio" + "value" : "Añadir a la pantalla de inicio" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Avakuvale lisatud" + "value" : "Lisa avakuvale" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Etxeko pantailara gehituta" + "value" : "Gehitu etxeko pantailara" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "به صفحهٔ اصلی اضافه شد" + "value" : "افزودن به صفحه اصلی" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Lisätty kotiruudulle" + "value" : "Lisää kotiruudulle" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Naidagdag sa home screen" + "value" : "Idagdag sa home screen" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ajouté à l’écran d’accueil" + "value" : "Ajouter à l’écran d’accueil" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Engadido á pantalla de inicio" + "value" : "Engadir á pantalla de inicio" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "An ƙara zuwa allon gida" + "value" : "Ƙara zuwa allon gida" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "התווסף אל מסך הבית" + "value" : "הוסף אל מסך הבית" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "होम स्क्रीन में जोड़ा गया" + "value" : "होम स्क्रीन में शामिल करें" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Dodano na početni zaslon" + "value" : "Dodaj na početni zaslon" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Parancsikon hozzáadva" + "value" : "Parancsikon hozzáadása" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ավելացված է գլխավոր էկրանին" + "value" : "Ավելացնել Հիմնական էկրանին" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ditambahkan ke layar beranda" + "value" : "Tambahkan ke layar beranda" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Aggiunto alla schermata principale" + "value" : "Aggiungi alla schermata principale" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ホーム画面に追加しました" + "value" : "ホーム画面に追加する" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "მთავარ ეკრანზე დამატებულია" + "value" : "მთავარ ეკრანზე დამატება" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បានបន្ថែមទៅអេក្រង់ដើម" + "value" : "បន្ថែមទៅអេក្រង់ដើម" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಮುಖಪುಟಕ್ಕೆ ಸೇರಿಸಲಾಗಿದೆ" + "value" : "ಮುಖಪುಟಕ್ಕೆ ಸೇರಿಸು" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "홈 화면에 추가됨" + "value" : "홈 화면에 추가" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "ژوورەوی پەیوەندیکردن زیادکرا" + "value" : "ژوورەوی پەیوەندیکردن زیاد بکە" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Ser pêşgeha xane kiriye" + "value" : "Li ser pêşgehê bişopîne" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Kiyongezeddwako ku nninga yange" + "value" : "Yongeza ku nninga nalyo" } }, "lo" : { "stringUnit" : { "state" : "translated", - "value" : "ເພີ່ມໄປໃນເນື້ອເຫຼ່າເພື່ອ" + "value" : "ເພີ່ມເນື້ອເຫຼ່າເຊື່ອ" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pridėta į pradžios ekraną" + "value" : "Pridėti į pradžios ekraną" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Pievienots sākuma ekrānam" + "value" : "Pievienot sākuma ekrānam" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Додадено на почетниот екран" + "value" : "Додади на почетниот екран" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Эхлэх дэлгэцэнд нэмсэн" + "value" : "Эхлэх дэлгэцэнд нэмэх" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Ditambah ke skrin utama" + "value" : "Tambah ke skrin utama" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "ဟုမ်းစကရင်ထဲသို့ ထည့်လိုက်ပါပြီ" + "value" : "ပင်မ စခရင်သို့ ထည့်မည်" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lagt til på startskjermen" + "value" : "Legg til på startskjermen" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Lagt til startskjermen" + "value" : "Legg til på startskjermen" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "घर स्क्रिनमा थपियो" + "value" : "घर स्क्रिनमा थप्नुहोस्" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aan thuisscherm toegevoegd" + "value" : "Aan thuisscherm toevoegen" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Lagt til heimeskjermen" + "value" : "Legg til heimeskjermen" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Oonjezeredwa ku chinsalu chachikulu" + "value" : "Onjezerani ku chinsalu chachikulu" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਮੁੱਖ ਸਕ੍ਰੀਨ 'ਤੇ ਸ਼ਾਮਿਲ ਕੀਤਾ ਗਿਆ" + "value" : "ਮੁੱਖ اسڪਰੀਨ ਤੇ ਸ਼ਾਮਿਲ ਕਰੋ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Dodano do ekranu głównego" + "value" : "Dodaj do ekranu głównego" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "کور پردې ته اضافه شو" + "value" : "کور پردې ته اضافه کړئ" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Adicionada à tela inicial" + "value" : "Adicionar a tela inicial" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Adicionado ao ecrã inicial" + "value" : "Adicionar ao ecrã inicial" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Adăugat pe ecranul principal" + "value" : "Adaugă pe ecranul principal" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Добавлено на главный экран" + "value" : "Добавить на главный экран" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Dodano na početni ekran" + "value" : "Dodaj na početni ekran" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "මුල් තිරයට එක් කරන ලදී" + "value" : "මුල් තිරයට එකතු කරන්න" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Pridané na plochu" + "value" : "Pridať na plochu" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Dodano na domači zaslon" + "value" : "Dodaj na domači zaslon" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "U shtua te skena e kreut" + "value" : "Shtoje te skena e kreut" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Додато на почетни екран" + "value" : "Додај на почетни екран" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Dodato na početni ekran" + "value" : "Dodaj na početni ekran" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Tillagd på Hemskärmen" + "value" : "Lägg till på hemskärmen" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Imeongezwa kwenye skiirini ya mwanzo" + "value" : "Ongeza kwenye skrini ya nyumbani" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "முகப்பு திரையில் சேர்க்கப்பட்டது" + "value" : "முகப்பு திரையில் சேர்க்க" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "హోమ్ స్క్రీన్కు జోడించబడింది" + "value" : "హోమ్ స్క్రీన్కు జోడించండి" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "เพิ่มไปยังหน้าจอหลักแล้ว" + "value" : "เพิ่มไปยังหน้าจอหลัก" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Ana ekrana eklendi" + "value" : "Ana ekrana ekle" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Додано до домашнього екрана" + "value" : "Додати до домашнього екрану" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ہوم اسکرین میں شامل کر دیا گیا۔" + "value" : "ہوم اسکرین میں شامل کریں" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Asosiy ekranga qo'shildi" + "value" : "Asosiy ekranga qo'shish" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Đã thêm vào màn hình chính" + "value" : "Thêm vào màn hình chính" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Ikongeze kwiscreen sasekhaya" + "value" : "Yongeza kwiscreen sasekhaya" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "已添加到主屏幕" + "value" : "添加到主屏幕" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "已新增至主畫面" + "value" : "新增至主畫面" } } } @@ -110797,972 +111079,972 @@ } } }, - "conversationsDeleteDescription" : { + "conversationsDeleted" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Is jy seker jy wil jou gesprek met {name} uitvee? Nuwe boodskappe van {name} sal 'n nuwe gesprek begin." + "value" : "Gesprek geskrap" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "هل أنت متأكد من أنك تريد حذف محادثتك مع {name}? ستبدأ الرسائل الجديدة من {name} محادثة جديدة." + "value" : "تم حذف المحادثة" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ilə danışığınızı silmək istədiyinizə əminsiniz? {name} göndərən yeni mesajlar yeni bir danışıq başladacaq." + "value" : "Danışıq silindi" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "چو شما یقینت بنت کہ اپنے گپ و گفت {name} کنت؟ نوی پیغاماں {name} نا نوی گپ شروع بیت." + "value" : "گپ وڑی" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Вы ўпэўненыя, што жадаеце выдаліць размову з {name}? Новыя паведамленні ад {name} пачнуць новую размову." + "value" : "Гутарка выдалена" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Сигурен ли си, че искаш да изтриеш своя разговор с {name}? Нови съобщения от {name} ще започнат нов разговор." + "value" : "Разговорът е изтрит" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "আপনি কি {name}‍ সাথে আপনার কথোপকথন মুছে দিতে চান? {name}‍ থেকে নতুন বার্তাগুলি একটি নতুন কথোপকথন শুরু করবে।" + "value" : "কথোপকথন মুছে ফেলা হয়েছে" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Esteu segur que voleu suprimir la vostra conversa amb {name}? Els nous missatges de {name} començaran una nova conversa." + "value" : "S'ha suprimit la conversa" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Opravdu chcete smazat svou konverzaci s {name}? Nové zprávy od {name} zahájí novou konverzaci." + "value" : "Konverzace byla smazána" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Ydych chi'n siŵr eich bod am ddileu eich sgwrs gyda {name}? Bydd negeseuon newydd gan {name} yn cychwyn sgwrs newydd." + "value" : "Sgwrs wedi'i dileu" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Er du sikker på, at du vil slette din samtale med {name}? Nye beskeder fra {name} vil starte en ny samtale." + "value" : "Samtale slettet" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Möchtest du deine Unterhaltung mit {name} wirklich löschen? Neue Nachrichten von {name} werden eine neue Unterhaltung starten." + "value" : "Die Unterhaltung wurde gelöscht." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Σίγουρα θέλετε να διαγράψετε τη συνομιλία σας με {name}? Νέα μηνύματα από {name} θα ξεκινήσουν μια νέα συνομιλία." + "value" : "Η συνομιλία διαγράφηκε" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Are you sure you want to delete your conversation with {name}? New messages from {name} will start a new conversation." + "value" : "Conversation deleted" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Ĉu vi certas, ke vi volas forigi vian konversacion kun {name}? Novaj mesaĝoj de {name} komencos novan konversacion." + "value" : "Konversacio forviŝite" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "¿Estás seguro de que deseas eliminar tu conversación con {name}? Los mensajes nuevos de {name}? iniciarán una nueva conversación." + "value" : "Conversación eliminada" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "¿Estás seguro de que quieres eliminar tu conversación con {name}? Los nuevos mensajes de {name} iniciarán una nueva conversación." + "value" : "Conversación eliminada" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Kas soovite kustutada oma vestluse kasutajaga {name}? Uued sõnumid kasutajalt {name} käivitavad uue vestluse." + "value" : "Vestlus kustutatud" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Ziur zaude zure elkarrizketa {name}-rekin ezabatu nahi duzula? {name}-ren mezu berriak elkarrizketa berri bat hasiko du." + "value" : "Elkarrizketa ezabatuta" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "آیا مطمئن هستید که می‌خواهید مکالمه خود را با {name}‍ حذف کنید؟ پیام‌های جدید از {name} یک مکالمه جدید را شروع می‌کنند." + "value" : "مکالمه حذف شد" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Haluatko varmasti poistaa keskustelusi käyttäjän {name} kanssa? Uudet viestit käyttäjältä {name} aloittavat uuden keskustelun." + "value" : "Keskustelu poistettu" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Sigurado ka bang gusto mong burahin ang usapan mo kay {name}? Ang mga bagong mensahe mula kay {name} ay magsisimula ng bagong usapan." + "value" : "Nabura na ang Usapan" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Êtes-vous sûr de vouloir supprimer votre conversation avec {name} ? Les nouveaux messages de {name} commenceront une nouvelle conversation." + "value" : "Conversation supprimée" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Tes a certeza de querer borrar a túa conversa con {name}? As novas mensaxes de {name} iniciarán unha nova conversa." + "value" : "Conversa borrada" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Ka tabbata kana so ka goge tattaunawarka da {name}? Sabbin saƙonni daga {name} zasu fara sabuwar tattaunawa." + "value" : "Tattaunawa an share" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "האם אתה בטוח שברצונך למחוק את השיחה שלך עם {name}? הודעות חדשות מ־{name} יתחילו שיחה חדשה." + "value" : "השיחה נמחקה" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "क्या आप वाकई {name} के साथ अपनी वार्तालाप हटाना चाहते हैं? {name} से नए संदेश नई वार्तालाप शुरू करेंगे।" + "value" : "बातचीत हटाई गई" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Jeste li sigurni da želite izbrisati razgovor s {name}? Nove poruke od {name} započet će novi razgovor." + "value" : "Razgovor uklonjen" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Biztos, hogy törölni szeretnéd a(z) {name} beszélgetést? {name} új üzenetei új beszélgetést indítanak." + "value" : "Beszélgetés törölve" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Վստա՞հ եք, որ ուզում եք ջնջել Ձեր խոսակցությունը {name}֊ի հետ: Նոր հաղորդագրությունները {name}֊ից կսկսեն նոր զրույց։" + "value" : "Ջնջված է" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Apakah Anda yakin ingin menghapus percakapan Anda dengan {name}? Pesan baru dari {name} akan memulai percakapan baru." + "value" : "Percakapan dihapus" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sei sicuro di voler eliminare la tua conversazione con {name}? Nuovi messaggi da parte di {name} avvieranno una nuova chat." + "value" : "Conversazione eliminata" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "本当に{name}との会話を削除しますか?{name}からの新しいメッセージは新しい会話として扱われます。" + "value" : "会話を削除しました" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "დარწმუნებული ხართ, რომ გსურთ თქვენი საუბრის წაშლა {name}-თან? ახალი შეტყობინებები {name}-დან დაიწყებს ახალ საუბარს." + "value" : "საუბარი წაშლილია" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "តើអ្នកប្រាកដទេថាចង់លុបការសន្ទនារបស់អ្នកជាមួយ {name}? សារថ្មីពី {name} នឹងចាប់ផ្តើមការសន្ទនាថ្មី។" + "value" : "ការសន្ទនាត្រូវបានលុប" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ನೀವು {name} ಸಮಾಗಮವನ್ನು ಅಳಿಸಲು ಖಚಿತವಾಗಿದ್ದೀರಾ? {name}ರಿಂದ ಹೊಸ ಸಂದೇಶಗಳು ಹೊಸ ಸಂಭಾಷಣೆಯನ್ನು ಪ್ರಾರಂಭಿಸಲಿವೆ." + "value" : "ಸಂಭಾಷಣೆಯನ್ನು ಅಳಿಸಲಾಗಿದೆ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}과의 대화를 삭제하시겠습니까? {name}로부터 새로운 메시지가 오면 새로운 대화가 시작됩니다." + "value" : "대화를 삭제함" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "دڵنیایت دەتەوێت گفتوگۆکەت لەگەڵ {name} بسڕیتەوە؟ پەیامە نوێەکان لە {name} دەستی پەیوەندی نوێ دەکەن." + "value" : "گفتوگۆ سڕایەوە" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Tu piştrast î ku tu dixwazî bi {name} re sohbetê xwe jê bibî? Notiyên nû yên ji {name} re kêm dikevin." + "value" : "Sohbet hate jêbirin" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Oli mukakafu nti oyagala okusazaamu okuteesa kwo ne {name}? Obubaka obuggya okuva eri {name} bunaddamu okutandika okuteseza kuno." + "value" : "Okuggya okwekeneenya" } }, "lo" : { "stringUnit" : { "state" : "translated", - "value" : "ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການລຶບການສົນທະນາຂອງທ່ານກັບ {name}? ຂໍ້ຄວາມໃໝ່ຈາກ {name} ຈະເລີ່ມການສົນທະນາໃໝ່." + "value" : "ລຶບຫຼາຍເເລ້ວ" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Ar tikrai norite ištrinti savo pokalbį su {name}? Naujos žinutės iš {name} sukurs naują pokalbį." + "value" : "Pokalbis ištrintas" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Vai esat pārliecināts, ka vēlaties dzēst savu sarunu ar {name}? Jauni ziņojumi no {name} sāks jaunu sarunu." + "value" : "Saruna izdzēsta" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Дали сте сигурни дека сакате да ја избришете вашата конверзација со {name}? Новите пораки од {name} ќе почнат нова конверзација." + "value" : "Разговорот е избришан" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Та {name} -тэй яриагаа устгахдаа итгэлтэй байна уу? {name} -ээс ирэх шинэ зурвасууд шинэ яриаг эхлүүлнэ." + "value" : "Харилцан яриа устгагдсан" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Adakah anda yakin anda mahu memadamkan perbualan anda dengan {name}? Mesej baru daripada {name} akan memulakan perbualan baru." + "value" : "Perbualan dipadam" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "သင် {name} နှင့်သော ဆက်သွယ်မှုကို ဖျက်လိုကြောင်း ယဉ်သောပါသလား? {name} မှ ပေးပို့သော သစ်စ(Python)သည် အသစ်သော ဆက်သွယ်မှု တစ်ခုစတင်မှာဖြစ်သည်။" + "value" : "စကားပြောဆိုမှု ဖျက်ပြီးပါပြီ" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Er du sikker på at du vil slette samtalen din med {name}? Nye meldinger fra {name} vil starte en ny samtale." + "value" : "Samtalen slettet" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Er du sikker på at du ønsker å slette samtalen din med {name}? Nye meldinger fra {name} vil starte en ny samtale." + "value" : "Samtalen slettet" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "तपाईं {name} सँगको कुराकानी मेटाउन निश्चित हुनुहुन्छ? {name} बाट नयाँ सन्देशहरूले नयाँ कुराकानी सुरु गर्नेछन्।" + "value" : "वार्ता मेटियो" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Weet u zeker dat u uw conversatie met {name} wilt verwijderen? Nieuwe berichten van {name} zullen een nieuwe conversatie starten." + "value" : "Gesprek verwijderd" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Er du sikker på at du ønskjer å slette samtalen med {name} ? Nye meldingar frå {name} vil starte ein ny samtale." + "value" : "Konversasjonen sletta" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Mukutsimikizika kuti mukufuna kufufuta mauthenga anu ndi {name}? Mauthenga atsopano kuchokera kwa {name} ayamba kulankhula kwatsopano." + "value" : "Rikani Kukambirana" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਕੀ ਤੁਸੀਂ ਯਕੀਨਨ ਆਪਣੀ ਗੱਲਬਾਤ {name} ਨਾਲ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ? {name} ਤੋਂ ਨਵੇਂ ਸੁਨੇਹੇ ਇਕ ਨਵੀਂ ਗੱਲਬਾਤ ਸ਼ੁਰੂ ਕਰਨਗੇ।" + "value" : "ਗੱਲਬਾਤ ਮਿਟਾ ਦਿੱਤੀ ਗਈ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Czy na pewno chcesz usunąć swoją konwersację z użytkownikiem {name}? Nowe wiadomości od użytkownika {name} rozpoczną nową konwersację." + "value" : "Rozmowa usunięta" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "آیا تاسو ډاډه یاست چې غواړئ له {name} سره خپل مکالمه حذف کړئ؟ د {name} نوې پیغامونه به نوې مکالمه پیل کړي." + "value" : "خبرتیا" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Você tem certeza que deseja excluir sua conversa com {name}? Novas mensagens de {name} iniciarão uma nova conversa." + "value" : "Conversa excluída" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Tem certeza de que deseja apagar sua conversa com {name}? Novas mensagens de {name} iniciarão uma nova conversa." + "value" : "Conversa excluída" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Ești sigur/ă că dorești să ștergi conversația cu {name}? Mesajele noi de la {name} vor începe o conversație nouă." + "value" : "Conversație ștearsă" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Вы уверены, что хотите удалить вашу беседу с {name}? Новые сообщения от {name} начнут новую беседу." + "value" : "Беседа удалена" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Jesi li siguran da želiš obrisati svoj razgovor sa {name}? Nove poruke od {name} pokrenuće novi razgovor." + "value" : "Razgovor je izbrisan" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ඔබට {name} සමඟ ඇති ඔබේ සංවාදය මකීමට අවශ්‍ය බව විශ්වාසද? {name} වෙතින් පැමිණෙන නව පණිවිඩ නව සංවාදයක් ආරම්භ කරනු ඇත." + "value" : "සංවාදය මකා දමන ලදී" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Naozaj chcete vymazať svoju konverzáciu s {name}? Nové správy od {name} začnú novú konverzáciu." + "value" : "Konverzácia úspešne zmazaná" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Ali ste prepričani, da želite izbrisati svoj pogovor z {name}? Nova sporočila od {name} bodo začela nov pogovor." + "value" : "Pogovor izbrisan" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "A jeni të sigurt që doni ta fshini bisedën tuaj me {name}? Mesazhet e reja nga {name} do të fillojnë një bisedë të re." + "value" : "Biseda u fshi" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Да ли сте сигурни да желите да обришете вашу преписку са {name}? Нове поруке од {name} ће започети нову преписку." + "value" : "Преписка је избрисана" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Da li ste sigurni da želite da izbrišete svoj razgovor sa {name}? Nove poruke od {name} će započeti novi razgovor." + "value" : "Konverzacija je obrisana" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Är du säker på att du vill radera din konversation med {name}? Nya meddelanden från {name} kommer att starta en ny konversation." + "value" : "Konversationen har raderats" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Je, una uhakika unataka kufuta mazungumzo yako na {name}? Jumbe mpya kutoka kwa {name} zitaanzisha mazungumzo mapya." + "value" : "Mazungumzo yamefutwa" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} உடன் உங்கள் உரையாடலை நீக்க விரும்புகிறீர்களா? {name} வழங்கிய புதிய தகவல்கள் புதிய உரையாடலைத் தொடங்கும்." + "value" : "உரையாடல் அழிக்கப்பட்டது" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "మీరు {name} తో మీ సంభాషణను తొలగించాలనుకుంటున్నారా? {name} నుండి కొత్త సందేశాలు ఒక కొత్త సంభాషణను ప్రారంభిస్తాయి." + "value" : "సంభాషణ తొలగించబడింది" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "คุณแน่ใจหรือไม่ว่าต้องการลบการสนทนาของคุณกับ {name}? ข้อความใหม่จาก {name} จะเริ่มการสนทนาใหม่" + "value" : "Conversation deleted" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Bu sohbeti {name} ile silmek istediğinizden emin misiniz? {name} tarafından gelen yeni mesajlar yeni bir sohbet başlatacaktır." + "value" : "Konuşma silindi" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Ви дійсно хочете видалити розмову з {name}? Нові повідомлення від {name} почнуть нову розмову." + "value" : "Розмову видалено" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "کیا آپ واقعی {name} کے ساتھ اپنی گفتگو حذف کرنا چاہتے ہیں؟ {name} سے نئے پیغامات ایک نئی گفتگو شروع کریں گے۔" + "value" : "مکالمہ حذف کردیا گیا" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Haqiqatan ham {name} bilan suhbatni o'chirmoqchimisiz? Yangi xabarlar {name} dan yangi suhbat bostiradi." + "value" : "Suhbat o'chirildi" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Bạn có chắc chắn rằng bạn muốn xoá cuộc trò chuyện với {name}? Các tin nhắn mới từ {name} sẽ bắt đầu một cuộc trò chuyện mới." + "value" : "Cuộc hội thoại đã được xoá" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Uqinisekile ukuba ufuna ukususa incoko yakho no {name}? Imiyalezo emitsha ivela {name} iza kuqala incoko entsha." + "value" : "Incoko icinyiwe" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "您确定要删除您与{name}的会话吗?来自{name}的新消息将创建一个新会话。" + "value" : "会话已删除" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "您確定要刪除與 {name} 的對話嗎?來自 {name} 的新訊息將開始一個新的對話。" + "value" : "對話已刪除" } } } }, - "conversationsDeleted" : { + "conversationsDeleteDescription" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Gesprek geskrap" + "value" : "Is jy seker jy wil jou gesprek met {name} uitvee? Nuwe boodskappe van {name} sal 'n nuwe gesprek begin." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تم حذف المحادثة" + "value" : "هل أنت متأكد من أنك تريد حذف محادثتك مع {name}? ستبدأ الرسائل الجديدة من {name} محادثة جديدة." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Danışıq silindi" + "value" : "{name} ilə danışığınızı silmək istədiyinizə əminsiniz? {name} göndərən yeni mesajlar yeni bir danışıq başladacaq." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "گپ وڑی" + "value" : "چو شما یقینت بنت کہ اپنے گپ و گفت {name} کنت؟ نوی پیغاماں {name} نا نوی گپ شروع بیت." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Гутарка выдалена" + "value" : "Вы ўпэўненыя, што жадаеце выдаліць размову з {name}? Новыя паведамленні ад {name} пачнуць новую размову." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Разговорът е изтрит" + "value" : "Сигурен ли си, че искаш да изтриеш своя разговор с {name}? Нови съобщения от {name} ще започнат нов разговор." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "কথোপকথন মুছে ফেলা হয়েছে" + "value" : "আপনি কি {name}‍ সাথে আপনার কথোপকথন মুছে দিতে চান? {name}‍ থেকে নতুন বার্তাগুলি একটি নতুন কথোপকথন শুরু করবে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "S'ha suprimit la conversa" + "value" : "Esteu segur que voleu suprimir la vostra conversa amb {name}? Els nous missatges de {name} començaran una nova conversa." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Konverzace byla smazána" + "value" : "Opravdu chcete smazat svou konverzaci s {name}? Nové zprávy od {name} zahájí novou konverzaci." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Sgwrs wedi'i dileu" + "value" : "Ydych chi'n siŵr eich bod am ddileu eich sgwrs gyda {name}? Bydd negeseuon newydd gan {name} yn cychwyn sgwrs newydd." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Samtale slettet" + "value" : "Er du sikker på, at du vil slette din samtale med {name}? Nye beskeder fra {name} vil starte en ny samtale." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Die Unterhaltung wurde gelöscht." + "value" : "Möchtest du deine Unterhaltung mit {name} wirklich löschen? Neue Nachrichten von {name} werden eine neue Unterhaltung starten." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Η συνομιλία διαγράφηκε" + "value" : "Σίγουρα θέλετε να διαγράψετε τη συνομιλία σας με {name}? Νέα μηνύματα από {name} θα ξεκινήσουν μια νέα συνομιλία." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Conversation deleted" + "value" : "Are you sure you want to delete your conversation with {name}? New messages from {name} will start a new conversation." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Konversacio forviŝite" + "value" : "Ĉu vi certas, ke vi volas forigi vian konversacion kun {name}? Novaj mesaĝoj de {name} komencos novan konversacion." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Conversación eliminada" + "value" : "¿Estás seguro de que deseas eliminar tu conversación con {name}? Los mensajes nuevos de {name}? iniciarán una nueva conversación." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Conversación eliminada" + "value" : "¿Estás seguro de que quieres eliminar tu conversación con {name}? Los nuevos mensajes de {name} iniciarán una nueva conversación." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Vestlus kustutatud" + "value" : "Kas soovite kustutada oma vestluse kasutajaga {name}? Uued sõnumid kasutajalt {name} käivitavad uue vestluse." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Elkarrizketa ezabatuta" + "value" : "Ziur zaude zure elkarrizketa {name}-rekin ezabatu nahi duzula? {name}-ren mezu berriak elkarrizketa berri bat hasiko du." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "مکالمه حذف شد" + "value" : "آیا مطمئن هستید که می‌خواهید مکالمه خود را با {name}‍ حذف کنید؟ پیام‌های جدید از {name} یک مکالمه جدید را شروع می‌کنند." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Keskustelu poistettu" + "value" : "Haluatko varmasti poistaa keskustelusi käyttäjän {name} kanssa? Uudet viestit käyttäjältä {name} aloittavat uuden keskustelun." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Nabura na ang Usapan" + "value" : "Sigurado ka bang gusto mong burahin ang usapan mo kay {name}? Ang mga bagong mensahe mula kay {name} ay magsisimula ng bagong usapan." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Conversation supprimée" + "value" : "Êtes-vous sûr de vouloir supprimer votre conversation avec {name} ? Les nouveaux messages de {name} commenceront une nouvelle conversation." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Conversa borrada" + "value" : "Tes a certeza de querer borrar a túa conversa con {name}? As novas mensaxes de {name} iniciarán unha nova conversa." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Tattaunawa an share" + "value" : "Ka tabbata kana so ka goge tattaunawarka da {name}? Sabbin saƙonni daga {name} zasu fara sabuwar tattaunawa." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "השיחה נמחקה" + "value" : "האם אתה בטוח שברצונך למחוק את השיחה שלך עם {name}? הודעות חדשות מ־{name} יתחילו שיחה חדשה." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "बातचीत हटाई गई" + "value" : "क्या आप वाकई {name} के साथ अपनी वार्तालाप हटाना चाहते हैं? {name} से नए संदेश नई वार्तालाप शुरू करेंगे।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Razgovor uklonjen" + "value" : "Jeste li sigurni da želite izbrisati razgovor s {name}? Nove poruke od {name} započet će novi razgovor." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Beszélgetés törölve" + "value" : "Biztos, hogy törölni szeretnéd a(z) {name} beszélgetést? {name} új üzenetei új beszélgetést indítanak." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ջնջված է" + "value" : "Վստա՞հ եք, որ ուզում եք ջնջել Ձեր խոսակցությունը {name}֊ի հետ: Նոր հաղորդագրությունները {name}֊ից կսկսեն նոր զրույց։" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Percakapan dihapus" + "value" : "Apakah Anda yakin ingin menghapus percakapan Anda dengan {name}? Pesan baru dari {name} akan memulai percakapan baru." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Conversazione eliminata" + "value" : "Sei sicuro di voler eliminare la tua conversazione con {name}? Nuovi messaggi da parte di {name} avvieranno una nuova chat." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "会話を削除しました" + "value" : "本当に{name}との会話を削除しますか?{name}からの新しいメッセージは新しい会話として扱われます。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "საუბარი წაშლილია" + "value" : "დარწმუნებული ხართ, რომ გსურთ თქვენი საუბრის წაშლა {name}-თან? ახალი შეტყობინებები {name}-დან დაიწყებს ახალ საუბარს." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ការសន្ទនាត្រូវបានលុប" + "value" : "តើអ្នកប្រាកដទេថាចង់លុបការសន្ទនារបស់អ្នកជាមួយ {name}? សារថ្មីពី {name} នឹងចាប់ផ្តើមការសន្ទនាថ្មី។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಸಂಭಾಷಣೆಯನ್ನು ಅಳಿಸಲಾಗಿದೆ" + "value" : "ನೀವು {name} ಸಮಾಗಮವನ್ನು ಅಳಿಸಲು ಖಚಿತವಾಗಿದ್ದೀರಾ? {name}ರಿಂದ ಹೊಸ ಸಂದೇಶಗಳು ಹೊಸ ಸಂಭಾಷಣೆಯನ್ನು ಪ್ರಾರಂಭಿಸಲಿವೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "대화를 삭제함" + "value" : "{name}과의 대화를 삭제하시겠습니까? {name}로부터 새로운 메시지가 오면 새로운 대화가 시작됩니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "گفتوگۆ سڕایەوە" + "value" : "دڵنیایت دەتەوێت گفتوگۆکەت لەگەڵ {name} بسڕیتەوە؟ پەیامە نوێەکان لە {name} دەستی پەیوەندی نوێ دەکەن." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Sohbet hate jêbirin" + "value" : "Tu piştrast î ku tu dixwazî bi {name} re sohbetê xwe jê bibî? Notiyên nû yên ji {name} re kêm dikevin." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Okuggya okwekeneenya" + "value" : "Oli mukakafu nti oyagala okusazaamu okuteesa kwo ne {name}? Obubaka obuggya okuva eri {name} bunaddamu okutandika okuteseza kuno." } }, "lo" : { "stringUnit" : { "state" : "translated", - "value" : "ລຶບຫຼາຍເເລ້ວ" + "value" : "ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການລຶບການສົນທະນາຂອງທ່ານກັບ {name}? ຂໍ້ຄວາມໃໝ່ຈາກ {name} ຈະເລີ່ມການສົນທະນາໃໝ່." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pokalbis ištrintas" + "value" : "Ar tikrai norite ištrinti savo pokalbį su {name}? Naujos žinutės iš {name} sukurs naują pokalbį." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Saruna izdzēsta" + "value" : "Vai esat pārliecināts, ka vēlaties dzēst savu sarunu ar {name}? Jauni ziņojumi no {name} sāks jaunu sarunu." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Разговорот е избришан" + "value" : "Дали сте сигурни дека сакате да ја избришете вашата конверзација со {name}? Новите пораки од {name} ќе почнат нова конверзација." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Харилцан яриа устгагдсан" + "value" : "Та {name} -тэй яриагаа устгахдаа итгэлтэй байна уу? {name} -ээс ирэх шинэ зурвасууд шинэ яриаг эхлүүлнэ." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Perbualan dipadam" + "value" : "Adakah anda yakin anda mahu memadamkan perbualan anda dengan {name}? Mesej baru daripada {name} akan memulakan perbualan baru." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "စကားပြောဆိုမှု ဖျက်ပြီးပါပြီ" + "value" : "သင် {name} နှင့်သော ဆက်သွယ်မှုကို ဖျက်လိုကြောင်း ယဉ်သောပါသလား? {name} မှ ပေးပို့သော သစ်စ(Python)သည် အသစ်သော ဆက်သွယ်မှု တစ်ခုစတင်မှာဖြစ်သည်။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Samtalen slettet" + "value" : "Er du sikker på at du vil slette samtalen din med {name}? Nye meldinger fra {name} vil starte en ny samtale." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Samtalen slettet" + "value" : "Er du sikker på at du ønsker å slette samtalen din med {name}? Nye meldinger fra {name} vil starte en ny samtale." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "वार्ता मेटियो" + "value" : "तपाईं {name} सँगको कुराकानी मेटाउन निश्चित हुनुहुन्छ? {name} बाट नयाँ सन्देशहरूले नयाँ कुराकानी सुरु गर्नेछन्।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gesprek verwijderd" + "value" : "Weet u zeker dat u uw conversatie met {name} wilt verwijderen? Nieuwe berichten van {name} zullen een nieuwe conversatie starten." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Konversasjonen sletta" + "value" : "Er du sikker på at du ønskjer å slette samtalen med {name} ? Nye meldingar frå {name} vil starte ein ny samtale." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Rikani Kukambirana" + "value" : "Mukutsimikizika kuti mukufuna kufufuta mauthenga anu ndi {name}? Mauthenga atsopano kuchokera kwa {name} ayamba kulankhula kwatsopano." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਗੱਲਬਾਤ ਮਿਟਾ ਦਿੱਤੀ ਗਈ" + "value" : "ਕੀ ਤੁਸੀਂ ਯਕੀਨਨ ਆਪਣੀ ਗੱਲਬਾਤ {name} ਨਾਲ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ? {name} ਤੋਂ ਨਵੇਂ ਸੁਨੇਹੇ ਇਕ ਨਵੀਂ ਗੱਲਬਾਤ ਸ਼ੁਰੂ ਕਰਨਗੇ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Rozmowa usunięta" + "value" : "Czy na pewno chcesz usunąć swoją konwersację z użytkownikiem {name}? Nowe wiadomości od użytkownika {name} rozpoczną nową konwersację." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "خبرتیا" + "value" : "آیا تاسو ډاډه یاست چې غواړئ له {name} سره خپل مکالمه حذف کړئ؟ د {name} نوې پیغامونه به نوې مکالمه پیل کړي." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Conversa excluída" + "value" : "Você tem certeza que deseja excluir sua conversa com {name}? Novas mensagens de {name} iniciarão uma nova conversa." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Conversa excluída" + "value" : "Tem certeza de que deseja apagar sua conversa com {name}? Novas mensagens de {name} iniciarão uma nova conversa." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Conversație ștearsă" + "value" : "Ești sigur/ă că dorești să ștergi conversația cu {name}? Mesajele noi de la {name} vor începe o conversație nouă." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Беседа удалена" + "value" : "Вы уверены, что хотите удалить вашу беседу с {name}? Новые сообщения от {name} начнут новую беседу." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Razgovor je izbrisan" + "value" : "Jesi li siguran da želiš obrisati svoj razgovor sa {name}? Nove poruke od {name} pokrenuće novi razgovor." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "සංවාදය මකා දමන ලදී" + "value" : "ඔබට {name} සමඟ ඇති ඔබේ සංවාදය මකීමට අවශ්‍ය බව විශ්වාසද? {name} වෙතින් පැමිණෙන නව පණිවිඩ නව සංවාදයක් ආරම්භ කරනු ඇත." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Konverzácia úspešne zmazaná" + "value" : "Naozaj chcete vymazať svoju konverzáciu s {name}? Nové správy od {name} začnú novú konverzáciu." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Pogovor izbrisan" + "value" : "Ali ste prepričani, da želite izbrisati svoj pogovor z {name}? Nova sporočila od {name} bodo začela nov pogovor." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Biseda u fshi" + "value" : "A jeni të sigurt që doni ta fshini bisedën tuaj me {name}? Mesazhet e reja nga {name} do të fillojnë një bisedë të re." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Преписка је избрисана" + "value" : "Да ли сте сигурни да желите да обришете вашу преписку са {name}? Нове поруке од {name} ће започети нову преписку." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Konverzacija je obrisana" + "value" : "Da li ste sigurni da želite da izbrišete svoj razgovor sa {name}? Nove poruke od {name} će započeti novi razgovor." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Konversationen har raderats" + "value" : "Är du säker på att du vill radera din konversation med {name}? Nya meddelanden från {name} kommer att starta en ny konversation." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Mazungumzo yamefutwa" + "value" : "Je, una uhakika unataka kufuta mazungumzo yako na {name}? Jumbe mpya kutoka kwa {name} zitaanzisha mazungumzo mapya." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "உரையாடல் அழிக்கப்பட்டது" + "value" : "{name} உடன் உங்கள் உரையாடலை நீக்க விரும்புகிறீர்களா? {name} வழங்கிய புதிய தகவல்கள் புதிய உரையாடலைத் தொடங்கும்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "సంభాషణ తొలగించబడింది" + "value" : "మీరు {name} తో మీ సంభాషణను తొలగించాలనుకుంటున్నారా? {name} నుండి కొత్త సందేశాలు ఒక కొత్త సంభాషణను ప్రారంభిస్తాయి." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "Conversation deleted" + "value" : "คุณแน่ใจหรือไม่ว่าต้องการลบการสนทนาของคุณกับ {name}? ข้อความใหม่จาก {name} จะเริ่มการสนทนาใหม่" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Konuşma silindi" + "value" : "Bu sohbeti {name} ile silmek istediğinizden emin misiniz? {name} tarafından gelen yeni mesajlar yeni bir sohbet başlatacaktır." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Розмову видалено" + "value" : "Ви дійсно хочете видалити розмову з {name}? Нові повідомлення від {name} почнуть нову розмову." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "مکالمہ حذف کردیا گیا" + "value" : "کیا آپ واقعی {name} کے ساتھ اپنی گفتگو حذف کرنا چاہتے ہیں؟ {name} سے نئے پیغامات ایک نئی گفتگو شروع کریں گے۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Suhbat o'chirildi" + "value" : "Haqiqatan ham {name} bilan suhbatni o'chirmoqchimisiz? Yangi xabarlar {name} dan yangi suhbat bostiradi." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cuộc hội thoại đã được xoá" + "value" : "Bạn có chắc chắn rằng bạn muốn xoá cuộc trò chuyện với {name}? Các tin nhắn mới từ {name} sẽ bắt đầu một cuộc trò chuyện mới." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Incoko icinyiwe" + "value" : "Uqinisekile ukuba ufuna ukususa incoko yakho no {name}? Imiyalezo emitsha ivela {name} iza kuqala incoko entsha." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "会话已删除" + "value" : "您确定要删除您与{name}的会话吗?来自{name}的新消息将创建一个新会话。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "對話已刪除" + "value" : "您確定要刪除與 {name} 的對話嗎?來自 {name} 的新訊息將開始一個新的對話。" } } } @@ -132460,37 +132742,37 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "حذف الرسائل" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "حذف الرسالة" + "value" : "حذف الرسائل" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "حذف الرسائل" + "value" : "حذف الرسالة" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "حذف الرسائل" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "حذف الرسائل" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "حذف الرسائل" @@ -132568,22 +132850,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Выдаліць паведамленне" + "value" : "Выдаліць паведамленні" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Выдаліць паведамленні" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Выдаліць паведамленні" + "value" : "Выдаліць паведамленне" } }, "other" : { @@ -132692,22 +132974,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Smazat zprávu" + "value" : "Smazat zprávy" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Smazat zprávy" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Smazat zprávy" + "value" : "Smazat zprávu" } }, "other" : { @@ -132732,37 +133014,37 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Dileu Negeseuon" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "Dileu Neges" + "value" : "Dileu Negeseuon" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Dileu Negeseuon" + "value" : "Dileu Neges" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Dileu Negeseuon" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "Dileu Negeseuon" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Dileu Negeseuon" @@ -133176,25 +133458,25 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "מחק הודעה" + "value" : "מחק הודעות" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "מחק הודעות" + "value" : "מחק הודעה" } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "מחק הודעות" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "מחק הודעות" @@ -133244,13 +133526,13 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Izbriši poruku" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Izbriši poruku" @@ -133590,22 +133872,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Ištrinti žinutę" + "value" : "Ištrinti žinutes" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Ištrinti žinutes" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Ištrinti žinutes" + "value" : "Ištrinti žinutę" } }, "other" : { @@ -133926,22 +134208,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Usuń wiadomość" + "value" : "Usuń wiadomości" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Usuń wiadomości" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Usuń wiadomości" + "value" : "Usuń wiadomość" } }, "other" : { @@ -134050,16 +134332,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Șterge mesajul" + "value" : "Șterge mesajele" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Șterge mesajele" + "value" : "Șterge mesajul" } }, "other" : { @@ -134084,22 +134366,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Удалить Сообщение" + "value" : "Удалить сообщения" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Удалить сообщения" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Удалить сообщения" + "value" : "Удалить Сообщение" } }, "other" : { @@ -134124,22 +134406,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Obriši poruku" + "value" : "Obriši poruke" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Obriši poruke" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Obriši poruke" + "value" : "Obriši poruku" } }, "other" : { @@ -134192,22 +134474,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Vymazať správu" + "value" : "Vymazať správy" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Vymazať správy" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Vymazať správy" + "value" : "Vymazať správu" } }, "other" : { @@ -134232,28 +134514,28 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Izbriši sporočilo" + "value" : "Izbriši sporočila" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Izbriši sporočili" + "value" : "Izbriši sporočilo" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Izbriši sporočila" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "Izbriši sporočila" + "value" : "Izbriši sporočili" } } } @@ -134300,16 +134582,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Обриши поруку" + "value" : "Обриши поруке" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Обриши поруке" + "value" : "Обриши поруку" } }, "other" : { @@ -134334,16 +134616,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Obriši poruku" + "value" : "Ukloni poruke" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Ukloni poruke" + "value" : "Obriši poruku" } }, "other" : { @@ -134530,19 +134812,19 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Видалити повідомлення" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Видалити повідомлення" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Видалити повідомлення" @@ -134711,6 +134993,39 @@ } } }, + "deleteMessageConfirm" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Are you sure you want to delete this message?" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Are you sure you want to delete these messages?" + } + } + } + } + } + } + } + } + }, "deleteMessageDeleted" : { "extractionState" : "manual", "localizations" : { @@ -134753,37 +135068,37 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "تم حذف الرسائل" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "تم حذف الرسالة" + "value" : "تم حذف الرسائل" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "تم حذف الرسائل" + "value" : "تم حذف الرسالة" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "تم حذف الرسائل" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "تم حذف الرسائل" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "تم حذف الرسائل" @@ -134861,22 +135176,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Паведамленне выдалена" + "value" : "Паведамленні выдалены" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Паведамленні выдалены" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Паведамленні выдалены" + "value" : "Паведамленне выдалена" } }, "other" : { @@ -134985,22 +135300,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Zpráva smazána" + "value" : "Zprávy smazány" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Zprávy smazány" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Zprávy smazány" + "value" : "Zpráva smazána" } }, "other" : { @@ -135025,37 +135340,37 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Negeseuon wedi'u dileu" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "Neges wedi'i dileu" + "value" : "Negeseuon wedi'u dileu" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Negeseuon wedi'u dileu" + "value" : "Neges wedi'i dileu" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Negeseuon wedi'u dileu" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "Negeseuon wedi'u dileu" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Negeseuon wedi'u dileu" @@ -135469,25 +135784,25 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "הודעה נמחקה" + "value" : "הודעות נמחקו" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "הודעות נמחקו" + "value" : "הודעה נמחקה" } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "הודעות נמחקו" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "הודעות נמחקו" @@ -135537,16 +135852,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Poruka izbrisana" + "value" : "Poruke obrisane" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Poruke obrisane" + "value" : "Poruka izbrisana" } }, "other" : { @@ -135883,22 +136198,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Žinutė ištrinta" + "value" : "Žinutės ištrintos" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Žinutės ištrintos" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Žinutės ištrintos" + "value" : "Žinutė ištrinta" } }, "other" : { @@ -136191,22 +136506,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Wiadomość usunięta" + "value" : "Usunięto wiadomości" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Usunięto wiadomości" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Usunięto wiadomości" + "value" : "Wiadomość usunięta" } }, "other" : { @@ -136315,16 +136630,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Mesaj șters" + "value" : "Mesaje șterse" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Mesaje șterse" + "value" : "Mesaj șters" } }, "other" : { @@ -136349,22 +136664,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Сообщение удалено" + "value" : "Сообщения удалены" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Сообщения удалены" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Сообщения удалены" + "value" : "Сообщение удалено" } }, "other" : { @@ -136389,22 +136704,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Poruka obrisana" + "value" : "Poruke obrisane" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Poruke obrisane" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Poruke obrisane" + "value" : "Poruka obrisana" } }, "other" : { @@ -136457,22 +136772,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Správa vymazaná" + "value" : "Správy vymazané" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Správy vymazané" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Správy vymazané" + "value" : "Správa vymazaná" } }, "other" : { @@ -136497,28 +136812,28 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Sporočilo izbrisano" + "value" : "Sporočila so izbrisana" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Sporočili sta izbrisani" + "value" : "Sporočilo izbrisano" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Sporočila so izbrisana" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "Sporočila so izbrisana" + "value" : "Sporočili sta izbrisani" } } } @@ -136565,16 +136880,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Порука је обрисана" + "value" : "Поруке су обрисане" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Поруке су обрисане" + "value" : "Порука је обрисана" } }, "other" : { @@ -136599,16 +136914,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Poruka obrisana" + "value" : "Poruke obrisane" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Poruke obrisane" + "value" : "Poruka obrisana" } }, "other" : { @@ -136795,22 +137110,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Повідомлення видалено" + "value" : "Повідомлення видалені" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Повідомлення видалені" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Повідомлення видалені" + "value" : "Повідомлення видалено" } }, "other" : { @@ -137934,6 +138249,39 @@ } } }, + "deleteMessageDescriptionDevice" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Are you sure you want to delete this message from this device only?" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Are you sure you want to delete these messages from this device only?" + } + } + } + } + } + } + } + } + }, "deleteMessageDescriptionEveryone" : { "extractionState" : "manual", "localizations" : { @@ -139972,22 +140320,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Не атрымалася выдаліць паведамленне" + "value" : "Не атрымалася выдаліць паведамленні" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Не атрымалася выдаліць паведамленні" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Не атрымалася выдаліць паведамленні" + "value" : "Не атрымалася выдаліць паведамленне" } }, "other" : { @@ -140096,22 +140444,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nepodařilo se smazat zprávu" + "value" : "Nepodařilo se smazat zprávy" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Nepodařilo se smazat zprávy" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Nepodařilo se smazat zprávy" + "value" : "Nepodařilo se smazat zprávu" } }, "other" : { @@ -140136,40 +140484,40 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Methu dileu neges" + "value" : "Methu dileu negeseuon" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "Methu dileu neges" + "value" : "Methwyd dileu negeseuon" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Methu dileu negeseuon" + "value" : "Methu dileu neges" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Methu dileu negeseuon" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "Methwyd dileu negeseuon" + "value" : "Methu dileu negeseuon" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", - "value" : "Methu dileu negeseuon" + "value" : "Methu dileu neges" } } } @@ -140608,25 +140956,25 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "נכשל במחיקת הודעה" + "value" : "נכשל במחיקת הודעות" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "נכשל במחיקת הודעות" + "value" : "נכשל במחיקת הודעה" } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "נכשל במחיקת הודעות" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "נכשל במחיקת הודעות" @@ -140676,16 +141024,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Neuspješno brisanje poruke" + "value" : "Neuspješno brisanje poruka" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Neuspješno brisanje poruka" + "value" : "Neuspješno brisanje poruke" } }, "other" : { @@ -141022,22 +141370,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nepavyko ištrinti žinutės" + "value" : "Nepavyko ištrinti žinučių" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Nepavyko ištrinti žinučių" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Nepavyko ištrinti žinučių" + "value" : "Nepavyko ištrinti žinutės" } }, "other" : { @@ -141062,19 +141410,19 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Neizdevās dzēst ziņas" + "value" : "Neizdevās dzēst ziņu" } }, - "one" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "Neizdevās dzēst ziņu" + "value" : "Neizdevās dzēst ziņas" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Neizdevās dzēst ziņas" @@ -141392,19 +141740,19 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Nie udało się usunąć wiadomości" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Nie udało się usunąć wiadomości" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Nie udało się usunąć wiadomości" @@ -141516,16 +141864,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Eroare la ștergerea mesajului" + "value" : "Eroare la ștergerea mesajelor" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Eroare la ștergerea mesajelor" + "value" : "Eroare la ștergerea mesajului" } }, "other" : { @@ -141550,22 +141898,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Не удалось удалить сообщение" + "value" : "Не удалось удалить сообщения" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Не удалось удалить сообщения" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Не удалось удалить сообщения" + "value" : "Не удалось удалить сообщение" } }, "other" : { @@ -141590,22 +141938,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Brisanje poruke nije uspjelo" + "value" : "Brisanje poruka nije uspjelo" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Brisanje poruka nije uspjelo" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Brisanje poruka nije uspjelo" + "value" : "Brisanje poruke nije uspjelo" } }, "other" : { @@ -141658,22 +142006,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Správu sa nepodarilo vymazať" + "value" : "Správy sa nepodarilo vymazať" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Správy sa nepodarilo vymazať" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Správy sa nepodarilo vymazať" + "value" : "Správu sa nepodarilo vymazať" } }, "other" : { @@ -141698,25 +142046,25 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Neuspešna odstranitev sporočila" + "value" : "Neuspešna odstranitev sporočil" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Neuspešna odstranitev sporočil" + "value" : "Neuspešna odstranitev sporočila" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Neuspešna odstranitev sporočil" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "Neuspešna odstranitev sporočil" @@ -141766,16 +142114,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно брисање поруке" + "value" : "Неуспешно брисање порука" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Неуспешно брисање порука" + "value" : "Неуспешно брисање поруке" } }, "other" : { @@ -141800,16 +142148,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nije uspelo brisanje poruke" + "value" : "Nije uspelo brisanje poruka" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Nije uspelo brisanje poruka" + "value" : "Nije uspelo brisanje poruke" } }, "other" : { @@ -141996,19 +142344,19 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Не вдалося видалити повідомлення" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Не вдалося видалити повідомлення" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Не вдалося видалити повідомлення" @@ -142177,6 +142525,39 @@ } } }, + "deleteMessageNoteToSelfWarning" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "This message cannot be deleted from all your devices" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Some of the messages you have selected cannot be deleted from all your devices" + } + } + } + } + } + } + } + } + }, "deleteMessagesDescriptionEveryone" : { "extractionState" : "manual", "localizations" : { @@ -142662,6 +143043,39 @@ } } }, + "deleteMessageWarning" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "This message cannot be deleted for everyone" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Some of the messages you have selected cannot be deleted for everyone" + } + } + } + } + } + } + } + } + }, "deleting" : { "extractionState" : "manual", "localizations" : { @@ -164259,6 +164673,17 @@ } } }, + "displayNameVisible" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your Display Name is visible to users, groups and communities you interact with." + } + } + } + }, "document" : { "extractionState" : "manual", "localizations" : { @@ -173001,12 +173426,6 @@ "be" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "І яшчэ %lld адрэагаваў {emoji} на гэта паведамленне." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -173019,6 +173438,12 @@ "value" : "І %lld іншых карыстальнікаў адрэагавалі {emoji} на гэта паведамленне." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "І яшчэ %lld адрэагаваў {emoji} на гэта паведамленне." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -173085,12 +173510,6 @@ "cs" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "A %lld další reagoval {emoji} na tuto zprávu." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -173103,6 +173522,12 @@ "value" : "A %lld dalších reagovalo s {emoji} na tuto zprávu." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "A %lld další reagoval {emoji} na tuto zprávu." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -173115,40 +173540,40 @@ "cy" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Ac mae %lld arall wedi ymateb {emoji} i'r neges hon." + "value" : "Ac mae %lld arall wedi ymateb gyda {emoji} i'r neges hon." } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Ac mae %lld arall wedi ymateb gyda {emoji} i'r neges hon." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Ac mae %lld arall wedi ymateb gyda {emoji} i'r neges hon." } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Ac mae %lld arall wedi ymateb gyda {emoji} i'r neges hon." } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "Ac mae %lld arall wedi ymateb gyda {emoji} i'r neges hon." } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", - "value" : "Ac mae %lld arall wedi ymateb gyda {emoji} i'r neges hon." + "value" : "Ac mae %lld arall wedi ymateb {emoji} i'r neges hon." } } } @@ -173427,25 +173852,25 @@ "he" : { "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "ועוד %lld אחד הגיב עם {emoji} להודעה זו." + "value" : "ועוד %lld אחרים הגיבו עם {emoji} להודעה זו." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "ועוד %lld אחרים הגיבו עם {emoji} להודעה זו." + "value" : "ועוד %lld אחד הגיב עם {emoji} להודעה זו." } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "ועוד %lld אחרים הגיבו עם {emoji} להודעה זו." } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "ועוד %lld אחרים הגיבו עם {emoji} להודעה זו." @@ -173475,16 +173900,16 @@ "hr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "I %lld osoba je reagirala {emoji} na ovu poruku." + "value" : "I %lld osobe su reagirale {emoji} na ovu poruku." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "I %lld osobe su reagirale {emoji} na ovu poruku." + "value" : "I %lld osoba je reagirala {emoji} na ovu poruku." } }, "other" : { @@ -173691,22 +174116,22 @@ "lt" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Ir %lld kitas sureagavo {emoji} į šią žinutę." + "value" : "Ir %lld kiti sureagavo {emoji} į šią žinutę." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Ir %lld kiti sureagavo {emoji} į šią žinutę." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Ir %lld kiti sureagavo {emoji} į šią žinutę." + "value" : "Ir %lld kitas sureagavo {emoji} į šią žinutę." } }, "other" : { @@ -173721,19 +174146,19 @@ "lv" : { "variations" : { "plural" : { - "zero" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Un vēl %lld citi ir reaģējuši {emoji} uz šo ziņu." + "value" : "Un vēl %lld cits ir reaģējis {emoji} uz šo ziņu." } }, - "one" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "Un vēl %lld cits ir reaģējis {emoji} uz šo ziņu." + "value" : "Un vēl %lld citi ir reaģējuši {emoji} uz šo ziņu." } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Un vēl %lld citi ir reaģējuši {emoji} uz šo ziņu." @@ -173931,12 +174356,6 @@ "pl" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "I %lld innych zareagowało {emoji} na tą wiadomość." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -173949,6 +174368,12 @@ "value" : "I %lld innych osób zareagowało {emoji} na tę wiadomość." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "I %lld innych zareagowało {emoji} na tą wiadomość." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -174015,16 +174440,16 @@ "ro" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Şi încă %lld a reacţionat {emoji} la acest mesaj." + "value" : "Și încă %lld au reacționat {emoji} la acest mesaj." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Și încă %lld au reacționat {emoji} la acest mesaj." + "value" : "Şi încă %lld a reacţionat {emoji} la acest mesaj." } }, "other" : { @@ -174039,22 +174464,22 @@ "ru" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "И ещё %lld пользователь поставил(а) {emoji} этому сообщению." + "value" : "И %lld других поставили {emoji} этому сообщению." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "И %lld других поставили {emoji} этому сообщению." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "И %lld других поставили {emoji} этому сообщению." + "value" : "И ещё %lld пользователь поставил(а) {emoji} этому сообщению." } }, "other" : { @@ -174069,12 +174494,6 @@ "sh" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "I %lld drugi je reagovao {emoji} na ovu poruku." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -174087,6 +174506,12 @@ "value" : "I %lld drugih je reagovalo {emoji} na ovu poruku." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "I %lld drugi je reagovao {emoji} na ovu poruku." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -174117,22 +174542,22 @@ "sk" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "A %lld ďalší reagoval {emoji} na túto správu." + "value" : "A %lld ďalší reagovali {emoji} na túto správu." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "A %lld ďalší reagovali {emoji} na túto správu." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "A %lld ďalší reagovali {emoji} na túto správu." + "value" : "A %lld ďalší reagoval {emoji} na túto správu." } }, "other" : { @@ -174147,28 +174572,28 @@ "sl" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "In %lld drug je reagiral {emoji} na to sporočilo." + "value" : "In %lld drugi so reagirali {emoji} na to sporočilo." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "In %lld druga sta reagirala {emoji} na to sporočilo." + "value" : "In %lld drug je reagiral {emoji} na to sporočilo." } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "In %lld drugi so reagirali {emoji} na to sporočilo." + "value" : "In %lld drugih je reagiralo {emoji} na to sporočilo." } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "In %lld drugih je reagiralo {emoji} na to sporočilo." + "value" : "In %lld druga sta reagirala {emoji} na to sporočilo." } } } @@ -174195,16 +174620,16 @@ "sr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "И %lld други је реаговао {emoji} на ову поруку." + "value" : "И %lld други су реаговали {emoji} на ову поруку." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "И %lld други су реаговали {emoji} на ову поруку." + "value" : "И %lld други је реаговао {emoji} на ову поруку." } }, "other" : { @@ -174219,16 +174644,16 @@ "sr-Latn" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "I još %lld osoba je reagovala {emoji} na ovu poruku." + "value" : "I još %lld osobe su reagovale {emoji} na ovu poruku." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "I još %lld osobe su reagovale {emoji} na ovu poruku." + "value" : "I još %lld osoba je reagovala {emoji} na ovu poruku." } }, "other" : { @@ -174345,22 +174770,22 @@ "uk" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Та ще %lld інший відреагував {emoji} на це повідомлення." + "value" : "Та ще %lld інших відреагували {emoji} на це повідомлення." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Та ще %lld інших відреагували {emoji} на це повідомлення." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Та ще %lld інших відреагували {emoji} на це повідомлення." + "value" : "Та ще %lld інший відреагував {emoji} на це повідомлення." } }, "other" : { @@ -192732,6 +193157,61 @@ } } }, + "groupInviteReinvite" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} invited you to rejoin {group_name}, where you are an Admin." + } + } + } + }, + "groupInviteReinviteYou" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You were invited to rejoin {group_name}, where you are an Admin." + } + } + } + }, + "groupInviteSending" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sending invite" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sending invites" + } + } + } + } + } + } + } + } + }, "groupInviteSent" : { "extractionState" : "manual", "localizations" : { @@ -195582,6 +196062,17 @@ } } }, + "groupInviteYouHistory" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You were invited to join the group. Chat history was shared." + } + } + } + }, "groupLeave" : { "extractionState" : "manual", "localizations" : { @@ -203192,491 +203683,6 @@ } } }, - "groupMemberYouLeft" : { - "extractionState" : "manual", - "localizations" : { - "af" : { - "stringUnit" : { - "state" : "translated", - "value" : "You het die groep verlaat" - } - }, - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "أنت غادرت المجموعة." - } - }, - "az" : { - "stringUnit" : { - "state" : "translated", - "value" : "Siz qrupu tərk etdiniz." - } - }, - "bal" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šumār jāmš." - } - }, - "be" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы пакінулі групу." - } - }, - "bg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вие напуснахте групата." - } - }, - "bn" : { - "stringUnit" : { - "state" : "translated", - "value" : "আপনি গ্রুপ থেকে বের হয়ে গিয়েছেন।" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tu has abandonat el grup." - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Opustil/a jste skupinu." - } - }, - "cy" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rydych chi wedi gadael y grŵp." - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du forlod gruppen." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du hast die Gruppe verlassen." - } - }, - "el" : { - "stringUnit" : { - "state" : "translated", - "value" : "Εσείς αποχωρήσατε από την ομάδα." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You left the group." - } - }, - "eo" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vi forlasis la grupon." - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : " abandonaste el grupo." - } - }, - "es-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : " has abandonado el grupo." - } - }, - "et" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sina lahkusid grupist." - } - }, - "eu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zuk taldea utzi duzu." - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "شما گروه را ترک کردید." - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sinä poistuit ryhmästä." - } - }, - "fil" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ikaw ay umalis sa grupo." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous avez quitté le groupe." - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ti abandonaches o grupo." - } - }, - "ha" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ku sun bar ƙungiyar." - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "את/ה עזבת את הקבוצה." - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "आप ने समूह छोड़ दिया।" - } - }, - "hr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Napustili ste grupu." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Te kiléptél a csoportból." - } - }, - "hy-AM" : { - "stringUnit" : { - "state" : "translated", - "value" : "Դուք լքեցիք խումբը:" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anda keluar dari grup." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hai lasciato il gruppo." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Youがグループを退会しました" - } - }, - "ka" : { - "stringUnit" : { - "state" : "translated", - "value" : "თქვენ დატოვეთ ჯგუფი." - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "អ្នកបានចាកចេញពីក្រុម។" - } - }, - "kn" : { - "stringUnit" : { - "state" : "translated", - "value" : "ನೀವು ಗುಂಪನ್ನು ತೊರೆದು ಹೋದಿದ್ದೀರಿ." - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "당신이 그룹을 나갔습니다." - } - }, - "ku" : { - "stringUnit" : { - "state" : "translated", - "value" : "تۆ گروپەکەت بەجێهێشتووە." - } - }, - "ku-TR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tu ji komê derketî." - } - }, - "lg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ggwe wafuma mu kibiina." - } - }, - "lo" : { - "stringUnit" : { - "state" : "translated", - "value" : "ທ່ານອອກຈາກກຸ່ມ." - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jūs išėjote iš grupės." - } - }, - "lv" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tu atstāji grupu." - } - }, - "mk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вие ја напуштивте групата." - } - }, - "mn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Та бүлгээс гарлаа." - } - }, - "ms" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anda meninggalkan kumpulan." - } - }, - "my" : { - "stringUnit" : { - "state" : "translated", - "value" : "သင် အဖွဲ့မှ ထွက်သွားပါပြီ။" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du forlot gruppen." - } - }, - "nb-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du forlot gruppen." - } - }, - "ne-NP" : { - "stringUnit" : { - "state" : "translated", - "value" : "तपाईंले समूह छोड्नुभयो।" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "U heeft de groep verlaten." - } - }, - "nn-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du forlot gruppa." - } - }, - "ny" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inu achoka gulu." - } - }, - "pa-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਤੁਸੀਂਗਰੁੱਪ ਛੱਡ ਚੁੱਕੇ ਹੋ।" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Opuszczasz grupę." - } - }, - "ps" : { - "stringUnit" : { - "state" : "translated", - "value" : "تاسو ګروپ پریښود." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Você saiu do grupo." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Você saiu do grupo." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tu ai părăsit grupul." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы покинули группу." - } - }, - "sh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ti si napustio grupu." - } - }, - "si-LK" : { - "stringUnit" : { - "state" : "translated", - "value" : "ඔබ කණ්ඩායම හැර ගියේය." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vy ste opustili skupinu." - } - }, - "sl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vi ste zapustili skupino." - } - }, - "sq" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ju braktisët grupin." - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ви сте напустили групу." - } - }, - "sr-Latn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vi ste napustili grupu." - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du lämnade gruppen." - } - }, - "sw" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wewe umetoka kwenye kundi." - } - }, - "ta" : { - "stringUnit" : { - "state" : "translated", - "value" : "நீங்கள் குழுவிலிருந்து வெளியேறிவிட்டீர்கள்." - } - }, - "te" : { - "stringUnit" : { - "state" : "translated", - "value" : "మీరు సమూహాన్ని వదిలారు." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คุณ ได้ออกจากกลุ่ม" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sen gruptan ayrıldın." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ви покинули групу." - } - }, - "ur-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "آپ نے گروپ چھوڑ دیا۔" - } - }, - "uz" : { - "stringUnit" : { - "state" : "translated", - "value" : "Siz guruhni tark etdik." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn đã rời nhóm." - } - }, - "xh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mna bashiye iqela." - } - }, - "zh-CN" : { - "stringUnit" : { - "state" : "translated", - "value" : "离开了群组。" - } - }, - "zh-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "離開了此群組。" - } - } - } - }, "groupMembers" : { "extractionState" : "manual", "localizations" : { @@ -204635,6 +204641,491 @@ } } }, + "groupMemberYouLeft" : { + "extractionState" : "manual", + "localizations" : { + "af" : { + "stringUnit" : { + "state" : "translated", + "value" : "You het die groep verlaat" + } + }, + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أنت غادرت المجموعة." + } + }, + "az" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siz qrupu tərk etdiniz." + } + }, + "bal" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šumār jāmš." + } + }, + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы пакінулі групу." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вие напуснахте групата." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনি গ্রুপ থেকে বের হয়ে গিয়েছেন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu has abandonat el grup." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opustil/a jste skupinu." + } + }, + "cy" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rydych chi wedi gadael y grŵp." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du forlod gruppen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast die Gruppe verlassen." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εσείς αποχωρήσατε από την ομάδα." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You left the group." + } + }, + "eo" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi forlasis la grupon." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : " abandonaste el grupo." + } + }, + "es-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : " has abandonado el grupo." + } + }, + "et" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sina lahkusid grupist." + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zuk taldea utzi duzu." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شما گروه را ترک کردید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sinä poistuit ryhmästä." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikaw ay umalis sa grupo." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez quitté le groupe." + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ti abandonaches o grupo." + } + }, + "ha" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ku sun bar ƙungiyar." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "את/ה עזבת את הקבוצה." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आप ने समूह छोड़ दिया।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Napustili ste grupu." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Te kiléptél a csoportból." + } + }, + "hy-AM" : { + "stringUnit" : { + "state" : "translated", + "value" : "Դուք լքեցիք խումբը:" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda keluar dari grup." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai lasciato il gruppo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Youがグループを退会しました" + } + }, + "ka" : { + "stringUnit" : { + "state" : "translated", + "value" : "თქვენ დატოვეთ ჯგუფი." + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "អ្នកបានចាកចេញពីក្រុម។" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೀವು ಗುಂಪನ್ನು ತೊರೆದು ಹೋದಿದ್ದೀರಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "당신이 그룹을 나갔습니다." + } + }, + "ku" : { + "stringUnit" : { + "state" : "translated", + "value" : "تۆ گروپەکەت بەجێهێشتووە." + } + }, + "ku-TR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu ji komê derketî." + } + }, + "lg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ggwe wafuma mu kibiina." + } + }, + "lo" : { + "stringUnit" : { + "state" : "translated", + "value" : "ທ່ານອອກຈາກກຸ່ມ." + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jūs išėjote iš grupės." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu atstāji grupu." + } + }, + "mk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вие ја напуштивте групата." + } + }, + "mn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Та бүлгээс гарлаа." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda meninggalkan kumpulan." + } + }, + "my" : { + "stringUnit" : { + "state" : "translated", + "value" : "သင် အဖွဲ့မှ ထွက်သွားပါပြီ။" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du forlot gruppen." + } + }, + "nb-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du forlot gruppen." + } + }, + "ne-NP" : { + "stringUnit" : { + "state" : "translated", + "value" : "तपाईंले समूह छोड्नुभयो।" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "U heeft de groep verlaten." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du forlot gruppa." + } + }, + "ny" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inu achoka gulu." + } + }, + "pa-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਤੁਸੀਂਗਰੁੱਪ ਛੱਡ ਚੁੱਕੇ ਹੋ।" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opuszczasz grupę." + } + }, + "ps" : { + "stringUnit" : { + "state" : "translated", + "value" : "تاسو ګروپ پریښود." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você saiu do grupo." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você saiu do grupo." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu ai părăsit grupul." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы покинули группу." + } + }, + "sh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ti si napustio grupu." + } + }, + "si-LK" : { + "stringUnit" : { + "state" : "translated", + "value" : "ඔබ කණ්ඩායම හැර ගියේය." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vy ste opustili skupinu." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi ste zapustili skupino." + } + }, + "sq" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ju braktisët grupin." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви сте напустили групу." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi ste napustili grupu." + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du lämnade gruppen." + } + }, + "sw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wewe umetoka kwenye kundi." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீங்கள் குழுவிலிருந்து வெளியேறிவிட்டீர்கள்." + } + }, + "te" : { + "stringUnit" : { + "state" : "translated", + "value" : "మీరు సమూహాన్ని వదిలారు." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณ ได้ออกจากกลุ่ม" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sen gruptan ayrıldın." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви покинули групу." + } + }, + "ur-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ نے گروپ چھوڑ دیا۔" + } + }, + "uz" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siz guruhni tark etdik." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn đã rời nhóm." + } + }, + "xh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mna bashiye iqela." + } + }, + "zh-CN" : { + "stringUnit" : { + "state" : "translated", + "value" : "离开了群组。" + } + }, + "zh-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "離開了此群組。" + } + } + } + }, "groupName" : { "extractionState" : "manual", "localizations" : { @@ -207515,6 +208006,17 @@ } } }, + "groupNameVisible" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Group name is visible to all group members." + } + } + } + }, "groupNoMessages" : { "extractionState" : "manual", "localizations" : { @@ -209886,6 +210388,491 @@ } } }, + "groupRemoved" : { + "extractionState" : "manual", + "localizations" : { + "af" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} is as lede van die groep verwyder" + } + }, + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} تم إزالته من المجموعة." + } + }, + "az" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} qrupdan çıxarıldı." + } + }, + "bal" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} gōra z group." + } + }, + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} выдалены з групы." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} беше премахнат от групата." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}কে গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} s'ha suprimit del grup." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} byl odebrán ze skupiny." + } + }, + "cy" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnwyd {name} o'r grŵp." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} blev fjernet fra gruppen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} wurde aus der Gruppe entfernt." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} αφαιρέθηκε από την ομάδα." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} was removed from the group." + } + }, + "eo" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} estas forigita el la grupo." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ha sido expulsado del grupo." + } + }, + "es-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} fue expulsado del grupo." + } + }, + "et" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} eemaldati grupist." + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} taldetik kendu da." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} از گروه حذف شد." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} poistettiin ryhmästä." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinanggal si {name} sa grupo." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} a été retiré du groupe." + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} foi eliminado do grupo." + } + }, + "ha" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} an cire shi daga ƙungiyar." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}‏ הוסר מהקבוצה." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} को समूह से हटा दिया गया।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} je uklonjen iz grupe." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} el lett távolítva a csoportból." + } + }, + "hy-AM" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} հեռացվել է խմբից:" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} telah dikeluarkan dari grup." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} è stato rimosso dal gruppo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} はグループから削除されました" + } + }, + "ka" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}ს ჯგუფიდან წაიშალა." + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}‍ ត្រូវបានដកចេញពីក្រុមនេះ។" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ಅವರನ್ನು ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}님이 그룹에서 제거되었습니다." + } + }, + "ku" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} لە گروپەکە لابرا." + } + }, + "ku-TR" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ji komê hatiye derxistin." + } + }, + "lg" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} yasasulwa okuva mu kibiina." + } + }, + "lo" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}ໄດ້ຖືກລຶບອອກຈາກກຸ່ມ." + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} buvo pašalintas iš grupės." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} tika noņemts no grupas." + } + }, + "mk" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} беше отстранет од групата." + } + }, + "mn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} бүлгээс хасагдлаа." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} dikeluarkan daripada kumpulan." + } + }, + "my" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ကို အဖွဲ့မှ ဖယ်ရှားခဲ့သည်။" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ble fjernet fra gruppen." + } + }, + "nb-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ble fjernet fra gruppen." + } + }, + "ne-NP" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}लाई समूहबाट हटाइएको थियो।" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} is verwijderd uit de groep." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} vart fjerna frå gruppa." + } + }, + "ny" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} achotsedwa mu gulu." + } + }, + "pa-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}ਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} został(a) usunięty(-a) z grupy." + } + }, + "ps" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} له ګروپ څخه لیرې شو." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} foi removido do grupo." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} foi removido(a) do grupo." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} a fost eliminat din grup." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} был(а) удален(а) из группы." + } + }, + "sh" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} je uklonjen iz grupe." + } + }, + "si-LK" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} කණ්ඩායමෙන් ඉවත් කරන ලදී." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} bol/a odstránený/á zo skupiny." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} je bil_a odstranjen_a iz skupine." + } + }, + "sq" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} u largua nga grupi." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} је уклоњен из групе." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} je izbrisan iz grupe." + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} togs bort från gruppen." + } + }, + "sw" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ameondolewa kwenye kundi." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} குழுவிலிருந்து நீக்கப்பட்டார்." + } + }, + "te" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} సమూహం నుండి తొలగించబడ్డారు." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ถูกลบออกจากกลุ่ม" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} gruptan çıkarıldı." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} було вилучено із групи." + } + }, + "ur-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} کو گروپ سے ہٹا دیا گیا۔" + } + }, + "uz" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} guruhdan chiqarib yuborildi." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} đã bị xoá khỏi nhóm." + } + }, + "xh" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ikhutshelwe ngaphandle kweqela." + } + }, + "zh-CN" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}已被移出群组。" + } + }, + "zh-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} 已被移出群組。" + } + } + } + }, "groupRemoveDescription" : { "extractionState" : "manual", "localizations" : { @@ -211323,7484 +212310,7010 @@ } } }, - "groupRemoveMessages" : { + "groupRemovedMultiple" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verwyder gebruiker en hul boodskappe" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verwyder gebruikers en hul boodskappe" - } - } - } - } - } + "value" : "{name} en {count} ander is uit die groep verwyder." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "zero" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين ورسائلهم" - } - }, - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدم ورسائله" - } - }, - "two" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين ورسائلهم" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين ورسائلهم" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين ورسائلهم" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين ورسائلهم" - } - } - } - } - } + "value" : "{name} و {count} آخرين تم إزالتهم من المجموعة." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "İstifadəçini və mesajlarını sil" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "İstifadəçiləri və mesajlarını sil" - } - } - } - } - } + "value" : "{name}başqa {count} nəfər qrupdan çıxarıldı." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "مستخدم اور انے سار پیغام برس ک" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "مستخدم اور انے سار پیغاما برس ک" - } - } - } - } - } + "value" : "{name} a {count} drīg gōra z group." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Выдаліць карыстальніка і яго паведамленні" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Выдаліць карыстальнікаў і іх паведамленні" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Выдаліць карыстальнікаў і іх паведамленні" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Выдаліць карыстальнікаў і іх паведамленні" - } - } - } - } - } + "value" : "{name} і {count} іншых былі выдалены з групы." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Премахване на потребител и неговите съобщения" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Премахване на потребители и техните съобщения" - } - } - } - } - } + "value" : "{name} и {count} други бяха премахнати от групата." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "দীর্ঘ বার্তা সহ ব্যবহারকারীকে সরান" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "দীর্ঘ বার্তা সহ ব্যবহারকারীদের সরান" - } - } - } - } - } + "value" : "{name} এবং {count} জন অন্যরা গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Suprimeix l'usuari i els seus missatges" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Suprimeix els usuaris i els seus missatges" - } - } - } - } - } + "value" : "{name} i {count} altres han estat eliminats del grup." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele a jeho zprávy" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele a jejich zprávy" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele a jejich zprávy" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele a jejich zprávy" - } - } - } - } - } + "value" : "{name} a {count} dalších byli odebráni ze skupiny." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "zero" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr a'u negeseuon" - } - }, - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddiwr a'u negeseuon" - } - }, - "two" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr a'u negeseuon" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr a'u negeseuon" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr a'u negeseuon" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr a'u negeseuon" - } - } - } - } - } + "value" : "{name} y a {count} eraill wedi cael eu symud o'r grŵp." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brugeren og deres beskeder" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brugerne og deres beskeder" - } - } - } - } - } + "value" : "{name} og {count} andre blev fjernet fra gruppen." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitglied und dessen Nachrichten entfernen" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitglieder und deren Nachrichten entfernen" - } - } - } - } - } + "value" : "{name} und {count} andere wurden aus der Gruppe entfernt." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Αφαίρεση χρήστη και των μηνυμάτων του" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Αφαίρεση χρηστών και των μηνυμάτων τους" - } - } - } - } - } + "value" : "{name} και {count} άλλα αφαιρέθηκαν από την ομάδα." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remove user and their messages" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remove users and their messages" - } - } - } - } - } + "value" : "{name} and {count} others were removed from the group." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Forigi uzanton kaj iliajn mesaĝojn" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Forigi uzantojn kaj iliajn mesaĝojn" - } - } - } - } - } + "value" : "{name} kaj {count} aliaj estis forigitaj de la grupo." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eliminar usuario y sus mensajes" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eliminar usuarios y sus mensajes" - } - } - } - } - } + "value" : "{name} y {count} más fueron expulsados del grupo." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Borrar usuario y sus mensajes" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Borrar usuario y sus mensajes" - } - } - } - } - } + "value" : "{name} y {count} más fueron expulsados del grupo." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eemalda kasutaja ja nende sõnumid" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eemalda kasutajad ja nende sõnumid" - } - } - } - } - } + "value" : "{name} ja {count} teist eemaldati grupist." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Erabiltzailea eta haien mezuak kendu" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Erabiltzaileak eta haien mezuak kendu" - } - } - } - } - } + "value" : "{name} eta {count} beste taldetik kendu ziren." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "کاربر و پیام هایش را حذف کنید" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "کاربران و پیام هایشان را حذف کنید" - } - } - } - } - } + "value" : "{name} و {count} نفر دیگر از گروه حذف شدند." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poista käyttäjä ja hänen viestinsä" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poista käyttäjät ja heidän viestinsä" - } - } - } - } - } + "value" : "{name} ja {count} muuta poistettiin ryhmästä." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alisin ang user at ang kanilang mga mensahe" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alisin ang mga user at ang kanilang mga mensahe" - } - } - } - } - } + "value" : "{name} at {count} iba pa tinanggal sa grupo." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Supprimer l'utilisateur et ses messages" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Supprimer les utilisateurs et leurs messages" - } - } - } - } - } + "value" : "{name} et {count} autres ont été retirés du groupe." + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} e {count} máis foron eliminados do grupo." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cire mai amfani da saƙonnin su" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cire masu amfani da saƙonninsu" - } - } - } - } - } + "value" : "{name} da{count} wasu an cire su daga ƙungiyar." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "הסר משתמש והודעותיו" - } - }, - "two" : { - "stringUnit" : { - "state" : "translated", - "value" : "הסר משתמשים והודעותיהם" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "הסר משתמשים והודעותיהם" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "הסר משתמשים והודעותיהם" - } - } - } - } - } + "value" : "{name}‏ ו{count} אחרים‏ הוסרו מהקבוצה." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "उपयोगकर्ता और उनके भेजे हुए संदेशो को हटाएं" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "उपयोगकर्ताओं और उनके भेजे हुए संदेशो को हटाएं" - } - } - } - } - } + "value" : "{name} और {count} अन्य समूह से हटा दिए गए।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnika i njegove poruke" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike i njihove poruke" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike i njihove poruke" - } - } - } - } - } + "value" : "{name} i {count} drugi su uklonjeni iz grupe." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Felhasználó és üzeneteik eltávolítása" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Felhasználók és üzeneteik eltávolítása" - } - } - } - } - } + "value" : "{name} és {count} mások el lettek távolítva a csoportból." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Հեռացնել օգտատիրոջը և նրանց հաղորդագրությունները" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Հեռացնել օգտատերերին և նրանց հաղորդագրությունները" - } - } - } - } - } + "value" : "{name}֊ը և {count} ուրիշներ հեռացվել են խմբից:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hapus pengguna dan pesan mereka" - } - } - } - } - } + "value" : "{name} dan {count} lainnya dikeluarkan dari grup." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rimuovi l'utente e i suoi messaggi" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rimuovi gli utenti e i loro messaggi" - } - } - } - } - } + "value" : "Hanno rimosso {name} e altri {count} dal gruppo." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ユーザーとそのメッセージを削除" - } - } - } - } - } + "value" : "{name}{count}人 がグループから削除されました" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "მომხმარებლის წაშლა და მათი შეტყობინებები" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "მომხმარებლების და მათი შეტყობინებების მოხსნა" - } - } - } - } - } + "value" : "{name}ს და {count} სხვებს ჯგუფიდან წაიშალნენ." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ដកអ្នកប្រើនិងសាររបស់ពួកគេ" - } - } - } - } - } + "value" : "{name}‍ និង {count} គេផ្សង ទៀត‍ ត្រូវណាដកចេញេញីក្រុមនេះ។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "ಬಳಕೆದಾರರನ್ನು ಮತ್ತು ಅವರ ಸಂದೇಶಗಳನ್ನು ತೆಗೆದುಹಾಕಿ" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ಬಳಕೆದಾರರನ್ನು ಮತ್ತು ಅವರ ಸಂದೇಶಗಳನ್ನು ತೆಗೆದುಹಾಕಿ" - } - } - } - } - } + "value" : "{name} ಪ್ರ ಮತ್ತು {count} ಇತರೆರು ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲ್ಪಟ್ಟರು." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "사용자 및 메시지 제거" - } - } - } - } - } + "value" : "{name}님{count}명이 그룹에서 제거되었습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "لابردنی بەکارهێنەر و پەیامەکانیان" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "کارەکان و پیامەکانیشان لاببردن" - } - } - } - } - } + "value" : "{name} و {count} کەس دیکە لە گروپەکە لابران." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bikarhêner û peyamekên wî rake" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bikarhêner û peyamekên wan rake" - } - } - } - } - } + "value" : "{name} û {count} yên din ji komê hatine derxistin." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ggyawo omukozesa nebamazima bibikwata" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ggyawo abakozesa nebamazima bibikwata" - } - } - } - } - } + "value" : "{name} ne {count} abalala basasulwa okuva mu kibiina." + } + }, + "lo" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} ແລະ {count}" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šalinti naudotoją ir jo žinutes" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šalinti naudotojus ir jų žinutes" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šalinti naudotojus ir jų žinutes" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šalinti naudotojus ir jų žinutes" - } - } - } - } - } + "value" : "{name} ir {count} kiti buvo pašalinti iš grupės." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} un {count} citi tika noņemti no grupas." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Отстрани корисник и неговите пораки" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Отстрани корисници и нивните пораки" - } - } - } - } - } + "value" : "{name} и {count} други беа отстранети од групата." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Хэрэглэгчийг болон тэдний мессежийг устгах" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Хэрэглэгчдийг болон тэдний мессежийг устгах" - } - } - } - } - } + "value" : "{name} болон {count} бусад бүлгээс хасагдлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alih keluar pengguna dan mesej mereka" - } - } - } - } - } + "value" : "{name} dan {count} lainnya dikeluarkan dari kumpulan." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "အသုံးပြုသူများ နှင့် ၎င်းတို့၏မက်ဆေ့ချ်များကို ဖယ်ရှားမည်" - } - } - } - } - } + "value" : "{name} နှင့် {count} ဦး အဖွဲ့မှ ဖယ်ရှားခံရသည်။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brukeren og meldinga deres" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brukere og beskjedene deres" - } - } - } - } - } + "value" : "{name} og {count} andre ble fjernet fra gruppen." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern bruker og deres meldinger" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brukere og deres meldinger" - } - } - } - } - } + "value" : "{name} og {count} andre ble fjernet fra gruppen." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "प्रयोगकर्ता र उनीहरूको सन्देशहरू हटाउनुहोस्" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "प्रयोगकर्ताहरू र उनीहरूको सन्देशहरू हटाउनुहोस्" - } - } - } - } - } + "value" : "{name}{count} अन्य समूहबाट हटाइएको थियो।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verwijder gebruiker en hun berichten" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verwijder gebruikers en hun berichten" - } - } - } - } - } + "value" : "{name} en {count} anderen zijn verwijderd uit de groep." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brukaren og meldingane deira" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brukarar og meldingane deira" - } - } - } - } - } + "value" : "{name} og {count} andre vart fjerna frå gruppa." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chotsani wogwiritsa ntchito ndi mauthenga awo" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chotsani ogwiritsa ntchito ndi mauthenga awo" - } - } - } - } - } + "value" : "{name} ndi {count} ena achotsedwa mu gulu." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਵਰਤੋਂਕਾਰ ਅਤੇ ਉਨ੍ਹਾਂ ਦੇ ਸਨੇਹੇ ਹਟਾਓ" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਵਰਤੋਂਕਾਰਾਂ ਅਤੇ ਉਹਨਾ ਦੇ ਸੰਕਰਟਹਕਰਾਂ ਨੂੰ ਹਟਾਓ" - } - } - } - } - } + "value" : "{name}ਅਤੇ{count}ਹੋਰਾਂਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।." } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usuń użytkownika i jego wiadomości" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usuń użytkowników i ich wiadomości" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usuń użytkowników i ich wiadomości" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usuń użytkowników i ich wiadomości" - } - } - } - } - } + "value" : "{name} i {count} innych użytkowników zostali usunięci z grupy." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "کارونکی او د هغه پیغامونه لرې کړئ" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "کاروونکي او د هغوی پیغامونه لرې کړئ" - } - } - } - } - } + "value" : "{name} او {count} نور له ګروپ څخه ایستل شوي." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remover usuário e suas mensagens" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remover usuários e suas mensagens" - } - } - } - } - } + "value" : "{name} e {count} outros foram removidos do grupo." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remover utilizador e as suas mensagens" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remover utilizadores e as suas mensagens" - } - } - } - } - } + "value" : "{name} e {count} outros foram removidos do grupo." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elimină utilizatorul și mesajele acestuia" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elimină utilizatorii și mesajele acestora" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elimină utilizatorii și mesajele acestora" - } - } - } - } - } + "value" : "{name} și alți {count} au fost eliminați din grup." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Удалить пользователя и его сообщения" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Удалить пользователей и их сообщения" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Удалить пользователей и их сообщения" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Удалить пользователей и их сообщения" - } - } - } - } - } + "value" : "{name} и {count} других пользователей были удалены из группы." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnika i njihove poruke" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike i njihove poruke" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike i njihove poruke" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike i njihove poruke" - } - } - } - } - } + "value" : "{name} i {count} drugih su uklonjeni iz grupe." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "පරිශීලක සහ ඔවුන්ගේ පණිවිඩ ඉවත් කරන්න" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "පරිශීලකයින් සහ ඔවුන්ගේ පණිවිඩ ඉවත් කරන්න" - } - } - } - } - } + "value" : "{name} සහ {count} වෙනත් අය කණ්ඩායමෙන් ඉවත් කරන ලදී." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť používateľa a jeho správy" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť používateľov a ich správy" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť používateľov a ich správy" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť používateľov a ich správy" - } - } - } - } - } + "value" : "{name}a {count} ďalší boli odstránení zo skupiny." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrani uporabnika in njegova sporočila" - } - }, - "two" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrani uporabnika in njuna sporočila" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrani uporabnike in njihova sporočila" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrani uporabnike in njihova sporočila" - } - } - } - } - } + "value" : "{name} in {count} drugi so bili odstranjeni iz skupine." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiqi përdoruesin dhe mesazhet e tyre" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiqi përdoruesit dhe mesazhet e tyre" - } - } - } - } - } + "value" : "{name} dhe {count} të tjerë u larguan nga grupi." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уклони корисника и његове поруке" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уклони кориснике и њихове поруке" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уклони кориснике и њихове поруке" - } - } - } - } - } + "value" : "{name} и {count} осталих су уклоњени из групе." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnika i njihove poruke" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike i njihove poruke" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike i njihove poruke" - } - } - } - } - } + "value" : "{name} i {count} drugih su uklonjeni iz grupe." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ta bort användare och deras meddelanden" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ta bort användare och deras meddelanden" - } - } - } - } - } + "value" : "{name} och {count} andra togs bort från gruppen." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ondoa mtumiaji na jumbe zao" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ondoa watumiaji na jumbe zao" - } - } - } - } - } + "value" : "{name} na {count} wengine wameondolewa kutoka kwenye kundi." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "மீது அவர் தகவல்கள் ஒட்டுவதின் முகம்" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "கட்டும் முழுக் செய்திகள் இணைக்கும் வசம்" - } - } - } - } - } + "value" : "{name} மற்றும் {count} பிறர் குழுவிலிருந்து நீக்கப்பட்டனர்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "వినియోగదారిని మరియు వారి సందేశాలను తొలగించు" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "వినియోగదారులను మరియు వారి సందేశాలను తొలగించు" - } - } - } - } - } + "value" : "{name} మరియు {count} ఇతరులు సమూహం నుండి తొలగించబడ్డారు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ลบผู้ใช้และข้อความของพวกเขา" - } - } - } - } - } + "value" : "{name} and {count} อื่นๆ ถูกลบออกจากกลุ่ม" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kullanıcıyı ve mesajlarını sil" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kullanıcıları ve mesajlarını sil" - } - } - } - } - } + "value" : "{name} ve {count} diğer gruptan çıkarıldı." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити користувача та його повідомлення" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити користувачів та їхні повідомлення" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити користувачів та їхні повідомлення" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити користувачів та їхні повідомлення" - } - } - } - } - } + "value" : "{name} та ще {count} інших були вилучені із групи." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "صارف کو اور ان کے پیغامات کو حذف کریں" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "صارفین کو اور ان کے پیغامات کو حذف کریں" - } - } - } - } - } + "value" : "{name} اور {count} دیگر گروپ سے ہٹا دیے گئے۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Foydalanuvchi va ularning xabarlarini olib tashlash" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Foydalanuvchilar va ularning xabarlarini olib tashlash" - } - } - } - } - } + "value" : "{name} va {count} boshqalar guruhdan chiqarib yuborildi." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa người dùng và tin nhắn của họ" - } - } - } - } - } + "value" : "{name} {count} người khác đã bị xoá khỏi nhóm." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Susa umsebenzisi kunye nemiyalezo yabo" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Susa abasebenzisi kunye nemiyalezo yabo" - } - } - } - } - } + "value" : "{name} kunye {count} abanye abantu bakhutshelwe ngaphandle kweqela." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "移除用户及其消息" - } - } - } - } - } + "value" : "{name}{count}其他成员被移出了群组。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "移除成員及其訊息" - } - } - } - } - } + "value" : "{name}{count} 其他成員 被移出了群組。" } } } }, - "groupRemoveUserOnly" : { + "groupRemovedTwo" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verwyder gebruiker" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verwyder gebruikers" - } - } - } - } - } + "value" : "{name} en {other_name} is uit die groep verwyder." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "zero" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين" - } - }, - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدم" - } - }, - "two" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "إزالة المستخدمين" - } - } - } - } - } + "value" : "{name} و {other_name} تم إزالتهم من المجموعة." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "İstifadəçini sil" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "İstifadəçiləri sil" - } - } - } - } - } + "value" : "{name}{other_name} qrupdan çıxarıldı." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "صرف برجی مستخدم" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "صرف برجی مستخدماں" - } - } - } - } - } + "value" : "{name} a {other_name} gōra z group." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Выдаліць карыстальніка" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Выдаліць карыстальнікаў" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Выдаліць карыстальнікаў" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Выдаліць карыстальнікаў" - } - } - } - } - } + "value" : "{name} і {other_name} былі выдалены з групы." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Премахване на потребителя" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Премахване на потребители" - } - } - } - } - } + "value" : "{name} и {other_name} бяха премахнати от групата." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "ব্যবহারকারীকে সরান" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ব্যবহারকারীদের সরান" - } - } - } - } - } + "value" : "{name} এবং {other_name} গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Suprimeix usuari" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Suprimeix usuaris" - } - } - } - } - } + "value" : "{name} i {other_name} han estat eliminats del grup." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele" - } - } - } - } - } + "value" : "{name} a {other_name} byli odebráni ze skupiny." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "zero" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr" - } - }, - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddiwr" - } - }, - "two" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tynnu defnyddwyr" - } - } - } - } - } + "value" : "{name} y a {other_name} wedi cael eu symud o'r grŵp." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brugeren" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brugerne" - } - } - } - } - } + "value" : "{name} og {other_name} blev fjernet fra gruppen." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitglied entfernen" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitglieder entfernen" - } - } - } - } - } + "value" : "{name} und {other_name} wurden aus der Gruppe entfernt." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Αφαίρεση Απλά Χρήστη" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Αφαίρεση Χρηστών" - } - } - } - } - } + "value" : "{name} και {other_name} αφαιρέθηκαν από την ομάδα." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remove user" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remove users" - } - } - } - } - } + "value" : "{name} and {other_name} were removed from the group." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Forigi uzanton" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Forigi uzantojn" - } - } - } - } - } + "value" : "{name} kaj {other_name} estis forigitaj de la grupo." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eliminar usuario" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eliminar usuarios" - } - } - } - } - } + "value" : "{name} y {other_name} fueron expulsados del grupo." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Borrar usuario" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Borrar usuarios" - } - } - } - } - } + "value" : "{name} y {other_name} fueron expulsados del grupo." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eemalda kasutaja" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eemalda kasutajad" - } - } - } - } - } + "value" : "{name} ja {other_name} eemaldati grupist." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Erabiltzailea kendu" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Erabiltzaileak kendu" - } - } - } - } - } + "value" : "{name} eta {other_name} taldetik kendu ziren." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "کاربر را حذف کنید" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "کاربران را حذف کنید" - } - } - } - } - } + "value" : "{name} و {other_name} از گروه حذف شدند." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poista käyttäjä" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poista käyttäjät" - } - } - } - } - } + "value" : "{name} ja {other_name} poistettiin ryhmästä." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alisin ang user" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alisin ang mga user" - } - } - } - } - } + "value" : "{name} at {other_name} tinanggal sa grupo." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Supprimer l'utilisateur" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Supprimer les utilisateurs" - } - } - } - } - } + "value" : "{name} et {other_name} ont été retirés du groupe." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eliminar usuario" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eliminar usuarios" - } - } - } - } - } + "value" : "{name} e {other_name} foron eliminados do grupo." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cire mai amfani" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cire masu amfani" - } - } - } - } - } + "value" : "{name} da {other_name} an cire su daga ƙungiyar." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "הסר משתמש" - } - }, - "two" : { - "stringUnit" : { - "state" : "translated", - "value" : "הסר משתמשים" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "הסר משתמשים" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "הסר משתמשים" - } - } - } - } - } + "value" : "{name}‏ ו{other_name}‏ הוסרו מהקבוצה." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "उपयोगकर्ता को हटाएं" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "उपयोगकर्ताओं को हटाएं" - } - } - } - } - } + "value" : "{name} और {other_name} समूह से हटा दिए गए।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnika" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike" - } - } - } - } - } + "value" : "{name} i {other_name} su uklonjeni iz grupe." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Felhasználó eltávolítása" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Felhasználók eltávolítása" - } - } - } - } - } + "value" : "{name} és {other_name} el lettek távolítva a csoportból." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Հեռացնել օգտատիրոջը" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Հեռացնել օգտատերերին" - } - } - } - } - } + "value" : "{name}֊ը և {other_name}֊ը հեռացվել են խմբից:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hapus pengguna" - } - } - } - } - } + "value" : "{name} dan {other_name} dikeluarkan dari grup." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rimuovi l'utente" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rimuovi gli utenti" - } - } - } - } - } + "value" : "Hanno rimosso {name} e {other_name} dal gruppo." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ユーザーを削除" - } - } - } - } - } + "value" : "{name}{other_name} がグループから削除されました" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "მოხსნა მომხმარებელი" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "მომხმარებლების მოხსნა" - } - } - } - } - } + "value" : "{name}ს და {other_name}ს ჯგუფიდან წაიშალნენ." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ដកអ្នកប្រើ" - } - } - } - } - } + "value" : "{name}‍ និង {other_name}‍ ត្រូវបានដកចេញពីក្រុមនេះ។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ" - } - } - } - } - } + "value" : "{name} ಪ್ರ ಮತ್ತು {other_name} ಪ್ರ ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲ್ಪಟ್ಟರು." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "사용자 제거" - } - } - } - } - } + "value" : "{name}님{other_name}님이 그룹에서 제거되었습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "لابردنی بەکارهێنەر" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "کارەکان لاببردن" - } - } - } - } - } + "value" : "{name} و {other_name} لە گروپەکە لابران." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bikarhênerê rake" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bikarhêneran rake" - } - } - } - } - } + "value" : "{name} û {other_name} ji komê hatine derxistin." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ggyawo omukozesa" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ggyawo abakozesa" - } - } - } - } - } + "value" : "{name} ne {other_name} basasulwa okuva mu kibiina." + } + }, + "lo" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}และ{other_name}ໄດ້ຖືກລຶບອອກຈາກກຸ່ມ." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šalinti naudotoją" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šalinti naudotojus" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šalinti naudotojus" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šalinti naudotojus" - } - } - } - } - } + "value" : "{name} ir {other_name} buvo pašalinti iš grupės." } }, - "mk" : { + "lv" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Отстрани корисник" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Отстрани корисници" - } - } - } - } - } + "value" : "{name} un {other_name} tika noņemti no grupas." + } + }, + "mk" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} и {other_name} беа отстранети од групата." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Хэрэглэгчийг устгах" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Хэрэглэгч устгах" - } - } - } - } - } + "value" : "{name} болон {other_name} бүлгээс хасагдлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alih keluar pengguna" - } - } - } - } - } + "value" : "{name} dan {other_name} dikeluarkan dari kumpulan." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "အသုံးပြုသူများကို ဖယ်ရှားမည်" - } - } - } - } - } + "value" : "{name} နှင့် {other_name} အဖွဲ့မှ ဖယ်ရှားခံရသည်။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern bruker" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brukere" - } - } - } - } - } + "value" : "{name} og {other_name} ble fjernet fra gruppen." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern bruker" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brukere" - } - } - } - } - } + "value" : "{name} og {other_name} ble fjernet fra gruppen." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "प्रयोगकर्ता हटाउनुहोस्" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "प्रयोगकर्ताहरूलाई हटाउनुहोस्" - } - } - } - } - } + "value" : "{name}{other_name} समूहबाट हटाइएको थियो।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verwijder gebruiker" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verwijder gebruikers" - } - } - } - } - } + "value" : "{name} en {other_name} zijn verwijderd uit de groep." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brukaren" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjern brukarar" - } - } - } - } - } + "value" : "{name} og {other_name} vart fjerna frå gruppa." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chotsani wogwiritsa ntchito" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chotsani ogwiritsa ntchito" - } - } - } - } - } + "value" : "{name} ndi {other_name} achotsedwa mu gulu." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਵਰਤੋਂਕਾਰ ਹਟਾਓ" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਹਟਾਓ" - } - } - } - } - } + "value" : "{name}ਅਤੇ{other_name}ਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usuń użytkownika" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pamiętaj użytkowników" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usuń użytkowników" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usuń użytkowników" - } - } - } - } - } + "value" : "Użytkownicy {name} i {other_name} zostali usunięci z grupy." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "یو کاروونکی لرې کړئ" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "کاروونکو لرې کړئ" - } - } - } - } - } + "value" : "{name} او {other_name} له ګروپ څخه ایستل شوي." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remover usuário" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remover usuários" - } - } - } - } - } + "value" : "{name} e {other_name} foram removidos do grupo." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remover Utilizador" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remover utilizadores" - } - } - } - } - } + "value" : "{name} e {other_name} foram removidos do grupo." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elimină utilizatorul" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elimină utilizatorii" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elimină utilizatorii" - } - } - } - } - } + "value" : "{name} și {other_name} au fost eliminați din grup." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Удалить пользователя" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Удалить пользователей" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Удалить пользователей" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Удалить пользователей" - } - } - } - } - } + "value" : "{name} и {other_name} были удалены из группы." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnika" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike" - } - } - } - } - } + "value" : "{name} i {other_name} su uklonjeni iz grupe." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "පරිශීලකයෙකු ඉවත් කරන්න" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "පරිශීලකයින් ඉවත් කරන්න" - } - } - } - } - } + "value" : "{name} සහ {other_name} කණ්ඩායමෙන් ඉවත් කරන ලදී." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť používateľa" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť používateľov" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť používateľov" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť používateľov" - } - } - } - } - } + "value" : "{name} a {other_name} boli odstránení zo skupiny." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrani uporabnika" - } - }, - "two" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrani uporabnika" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrani uporabnike" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrani uporabnike" - } - } - } - } - } + "value" : "{name} in {other_name} sta bila odstranjena iz skupine." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiqe përdoruesin" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiqi përdoruesit" - } - } - } - } - } + "value" : "{name} dhe {other_name} u larguan nga grupi." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уклони корисника" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уклони кориснике" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уклони кориснике" - } - } - } - } - } + "value" : "{name} и {other_name} су уклоњени из групе." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnika" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukloni korisnike" - } - } - } - } - } + "value" : "{name} i {other_name} su uklonjeni iz grupe." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ta bort användare" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ta bort användare" - } - } - } - } - } + "value" : "{name} och {other_name} togs bort från gruppen." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ondoa mtumiaji" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ondoa watumiaji" - } - } - } - } - } + "value" : "{name} na {other_name} wameondolewa kutoka kwenye kundi" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "குழுவிலிருந்து அளவை மட்டுமே அகற்றவும்" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "பயனர்களை அகற்று" - } - } - } - } - } + "value" : "{name} மற்றும் {other_name} குழுவிலிருந்து நீக்கப்பட்டனர்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "వినియోగదారీని తొలగించు" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "వినియోగదారులను తొలగించు" - } - } - } - } - } + "value" : "{name} మరియు {other_name} సమూహం నుండి తొలగించబడ్డారు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "ลบผู้ใช้" - } - } - } - } - } + "value" : "{name} และ {other_name} ถูกลบออกจากกลุ่ม" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kullanıcıyı sil" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kullanıcıları sil" - } - } - } - } - } + "value" : "{name} ve {other_name} gruptan çıkarıldı." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити користувача" - } - }, - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити користувачів" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити користувачів" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити користувачів" - } - } - } - } - } + "value" : "{name} та {other_name} були вилучені із групи." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "صرف صارف کو حذف کریں" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "صرف صارفین کو حذف کریں" - } - } - } - } - } + "value" : "{name} اور {other_name} کو گروپ سے ہٹا دیا گیا۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Foydalanuvchini chiqarib yuborish" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Foydalanuvchilarni chiqarib yuborish" - } - } - } - } - } + "value" : "{name} va {other_name} guruhdan chiqarib yuborildi." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa người dùng" - } - } - } - } - } + "value" : "{name}{other_name} đã bị xoá khỏi nhóm." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Susa umsebenzisi" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Susa abasebenzisi" - } - } - } - } - } + "value" : "{name} kunye {other_name} bakhutshelwe ngaphandle kweqela." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "移除用户" - } - } - } - } - } + "value" : "{name}{other_name}被移出了群组。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "移除成員" - } - } - } - } - } + "value" : "{name}{other_name} 被移出了群組。" } } } }, - "groupRemoved" : { + "groupRemovedYou" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "{name} is as lede van die groep verwyder" + "value" : "Jy is verwyder van {group_name}." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "{name} تم إزالته من المجموعة." + "value" : "تمت إزالتك من {group_name}." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name} qrupdan çıxarıldı." + "value" : "{group_name} qrupundan çıxarıldınız." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} gōra z group." + "value" : "ما گپ درخواست قبول کردی {group_name}. تان ہٹا دئیے گئے ہیں." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "{name} выдалены з групы." + "value" : "Вас выдалілі з {group_name}." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} беше премахнат от групата." + "value" : "Бяхте премахнат от {group_name}." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name}কে গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" + "value" : "আপনাকে {group_name} থেকে সরানো হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "{name} s'ha suprimit del grup." + "value" : "Heu estat expulsat de {group_name}." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "{name} byl odebrán ze skupiny." + "value" : "Byli jste odebráni z {group_name}." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Tynnwyd {name} o'r grŵp." + "value" : "Tynnwyd chi allan o {group_name}." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "{name} blev fjernet fra gruppen." + "value" : "Du blev fjernet fra {group_name}." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "{name} wurde aus der Gruppe entfernt." + "value" : "Du wurdest aus der Gruppe {group_name} entfernt." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "{name} αφαιρέθηκε από την ομάδα." + "value" : "Έχετε αφαιρεθεί από {group_name}." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "{name} was removed from the group." + "value" : "You were removed from {group_name}." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "{name} estas forigita el la grupo." + "value" : "Vi estis forigita el {group_name}." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ha sido expulsado del grupo." + "value" : "Has sido eliminado del grupo {group_name}." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "{name} fue expulsado del grupo." + "value" : "Has sido eliminado del grupo {group_name}." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "{name} eemaldati grupist." + "value" : "Teid eemaldati grupist {group_name}." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} taldetik kendu da." + "value" : "{group_name}-tik kendu zaituzte." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "{name} از گروه حذف شد." + "value" : "شما از {group_name} حذف شدید." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} poistettiin ryhmästä." + "value" : "Sinut poistettiin ryhmästä {group_name}." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Tinanggal si {name} sa grupo." + "value" : "Ikaw ay inalis mula sa {group_name}." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a été retiré du groupe." + "value" : "Vous avez été retiré de {group_name}." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} foi eliminado do grupo." + "value" : "Fuches eliminadx de {group_name}." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "{name} an cire shi daga ƙungiyar." + "value" : "An cire ku daga {group_name}." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‏ הוסר מהקבוצה." + "value" : "הוסרת מ{group_name}." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} को समूह से हटा दिया गया।" + "value" : "आपको {group_name} से हटा दिया गया है।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} je uklonjen iz grupe." + "value" : "Uklonjeni ste iz {group_name}." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} el lett távolítva a csoportból." + "value" : "El lettél távolítva {group_name} csoportból." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "{name} հեռացվել է խմբից:" + "value" : "Դուք հեռացվել եք {group_name} խմբից։" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "{name} telah dikeluarkan dari grup." + "value" : "Anda dikeluarkan dari {group_name}." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "{name} è stato rimosso dal gruppo." + "value" : "Sei stato rimosso da {group_name}." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{name} はグループから削除されました" + "value" : "{group_name}から削除されました。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ს ჯგუფიდან წაიშალა." + "value" : "თქვენ ჯგუფიდან წაგერთვათ {group_name}." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‍ ត្រូវបានដកចេញពីក្រុមនេះ។" + "value" : "អ្នកត្រូវបានយកចេញពី {group_name}។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ಅವರನ್ನು ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." + "value" : "ನೀವು {group_name} ನಿಂದ ತೆಗೆದುಹಾಕಲ್ಪಟ್ಟಿದ್ದೀರಿ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}님이 그룹에서 제거되었습니다." + "value" : "{group_name}에서 제거되었습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "{name} لە گروپەکە لابرا." + "value" : "تۆ لە {group_name} لە دەرکرایت." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ji komê hatiye derxistin." + "value" : "Te ji {group_name}ê hate derxistin." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} yasasulwa okuva mu kibiina." - } - }, - "lo" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}ໄດ້ຖືກລຶບອອກຈາກກຸ່ມ." + "value" : "Wakugiddwa mu {group_name}." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "{name} buvo pašalintas iš grupės." + "value" : "Jūs buvote pašalinti iš {group_name}." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "{name} tika noņemts no grupas." + "value" : "Jūs esat noņemts no {group_name}." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} беше отстранет од групата." + "value" : "Бевте отстранети од {group_name}." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} бүлгээс хасагдлаа." + "value" : "Та {group_name} бүлгээс хасагдсан байна." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dikeluarkan daripada kumpulan." + "value" : "Anda telah dikeluarkan dari {group_name}." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ကို အဖွဲ့မှ ဖယ်ရှားခဲ့သည်။" + "value" : "သင်သည် {group_name} မှ ဖယ်ရှားခံလိုက်ရသည်။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ble fjernet fra gruppen." + "value" : "Du ble fjernet fra {group_name}." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ble fjernet fra gruppen." + "value" : "Du ble fjernet fra {group_name}." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name}लाई समूहबाट हटाइएको थियो।" + "value" : "तपाईंलाई {group_name} बाट हटाइयो।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} is verwijderd uit de groep." + "value" : "U bent verwijderd uit {group_name}." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} vart fjerna frå gruppa." + "value" : "Du blei fjerna frå {group_name}." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "{name} achotsedwa mu gulu." + "value" : "Munachotsedwa ku {group_name}." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" + "value" : "ਤੁਹਾਨੂੰ {group_name} ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਸੀ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} został(a) usunięty(-a) z grupy." + "value" : "Usunięto Cię z grupy {group_name}." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{name} له ګروپ څخه لیرې شو." + "value" : "تاسو له {group_name} څخه لرې کړل شوی." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} foi removido do grupo." + "value" : "Você foi removido do {group_name}." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "{name} foi removido(a) do grupo." + "value" : "Foi removido de {group_name}." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a fost eliminat din grup." + "value" : "Ai fost eliminat din {group_name}." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "{name} был(а) удален(а) из группы." + "value" : "Вас исключили из {group_name}." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} je uklonjen iz grupe." + "value" : "Uklonjen si iz {group_name}." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} කණ්ඩායමෙන් ඉවත් කරන ලදී." + "value" : "ඔබ {group_name} වෙතින් ඉවත් කරන ලදි." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} bol/a odstránený/á zo skupiny." + "value" : "Boli ste odstránení zo skupiny {group_name}." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} je bil_a odstranjen_a iz skupine." + "value" : "Bili ste odstranjeni iz {group_name}." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "{name} u largua nga grupi." + "value" : "Ju keni qenë larguar nga {group_name}." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} је уклоњен из групе." + "value" : "Уклоњени сте из {group_name}." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} je izbrisan iz grupe." + "value" : "Izbačeni ste iz {group_name}." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "{name} togs bort från gruppen." + "value" : "Du togs bort från {group_name}" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ameondolewa kwenye kundi." + "value" : "Umetolewa kutoka kwa {group_name}." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} குழுவிலிருந்து நீக்கப்பட்டார்." + "value" : "நீங்கள் {group_name} -இல் இருந்து நீக்கப்பட்டீர்கள்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} సమూహం నుండి తొలగించబడ్డారు." + "value" : "మీరు {group_name} నుండి తొలగించబడ్డారు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ถูกลบออกจากกลุ่ม" + "value" : "คุณได้ถูกลบออกจาก {group_name} แล้ว" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} gruptan çıkarıldı." + "value" : "{group_name} grubundan çıkarıldınız." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} було вилучено із групи." + "value" : "Ви були видалені з {group_name}." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} کو گروپ سے ہٹا دیا گیا۔" + "value" : "آپ کو {group_name} سے ہٹا دیا گیا ہے۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name} guruhdan chiqarib yuborildi." + "value" : "Siz {group_name} dan chiqarib yuborildingiz." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} đã bị xoá khỏi nhóm." + "value" : "Bạn đã bị xoá khỏi {group_name}." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ikhutshelwe ngaphandle kweqela." + "value" : "Ususwe kwi {group_name}." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}已被移出群组。" + "value" : "您已被{group_name}移除。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "{name} 已被移出群組。" + "value" : "您已從{group_name}中被移除。" } } } }, - "groupRemovedMultiple" : { + "groupRemovedYouGeneral" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You were removed from the group." + } + } + } + }, + "groupRemovedYouMultiple" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "{name} en {count} ander is uit die groep verwyder." + "value" : "Jy en {count} ander is uit die groep verwyder." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و {count} آخرين تم إزالتهم من المجموعة." + "value" : "أنت و{count} آخرين تم إزالتهم من المجموعة." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name}başqa {count} nəfər qrupdan çıxarıldı." + "value" : "Sizdigər {count} nəfər qrupdan çıxarıldınız." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {count} drīg gōra z group." + "value" : "Šumār a {count} drīg gōra z group." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "{name} і {count} іншых былі выдалены з групы." + "value" : "Вы і {count} іншых былі выдалены з групы." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {count} други бяха премахнати от групата." + "value" : "Вие и {count} други бяхте премахнати от групата." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} এবং {count} জন অন্যরা গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" + "value" : "আপনি এবং {count} জন অন্য সদস্য গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} altres han estat eliminats del grup." + "value" : "Tu i {count} altres heu estat eliminats del grup." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {count} dalších byli odebráni ze skupiny." + "value" : "Vy a {count} dalších bylo odebráno ze skupiny." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y a {count} eraill wedi cael eu symud o'r grŵp." + "value" : "Chi a {count} eraill wedi cael eu symud o'r grŵp." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {count} andre blev fjernet fra gruppen." + "value" : "Du og {count} andre blev fjernet fra gruppen." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "{name} und {count} andere wurden aus der Gruppe entfernt." + "value" : "Du und {count} andere wurden aus der Gruppe entfernt." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "{name} και {count} άλλα αφαιρέθηκαν από την ομάδα." + "value" : "Εσείς και {count} άλλοι αφαιρέθηκαν από την ομάδα." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "{name} and {count} others were removed from the group." + "value" : "You and {count} others were removed from the group." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "{name} kaj {count} aliaj estis forigitaj de la grupo." + "value" : "Vi kaj {count} aliaj estis forigitaj de la grupo." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y {count} más fueron expulsados del grupo." + "value" : " y {count} más fueron expulsados del grupo." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y {count} más fueron expulsados del grupo." + "value" : " y otros {count} habéis sido eliminados del grupo." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ja {count} teist eemaldati grupist." + "value" : "Sina ja {count} teist eemaldati grupist." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} eta {count} beste taldetik kendu ziren." + "value" : "Zuk eta {count} beste taldetik kendu zaituztete." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و {count} نفر دیگر از گروه حذف شدند." + "value" : "شماو{count}نفر دیگر از گروه حذف شدید." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ja {count} muuta poistettiin ryhmästä." + "value" : "Sinä ja {count} muuta poistettiin ryhmästä." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "{name} at {count} iba pa tinanggal sa grupo." + "value" : "Ikaw at {count} iba pa ay tinanggal sa grupo." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} et {count} autres ont été retirés du groupe." - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} e {count} máis foron eliminados do grupo." + "value" : "Vous et {count} autres ont été supprimé·e·s du groupe." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "{name} da{count} wasu an cire su daga ƙungiyar." + "value" : "Ku da {count} wasu an cire ku daga ƙungiyar." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‏ ו{count} אחרים‏ הוסרו מהקבוצה." + "value" : "את/ה ו{count} אחרים‏ הוסרתם מהקבוצה." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} और {count} अन्य समूह से हटा दिए गए।" + "value" : "आप और {count} अन्य को समूह से हटा दिया गया।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} drugi su uklonjeni iz grupe." + "value" : "Vi i {count} drugi ste uklonjeni iz grupe." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} és {count} mások el lettek távolítva a csoportból." + "value" : "Te és {count} másik személy el lettetek távolítva a csoportból." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "{name}֊ը և {count} ուրիշներ հեռացվել են խմբից:" + "value" : "Դուք և {count} ուրիշներ հեռացվել են խմբից:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dan {count} lainnya dikeluarkan dari grup." + "value" : "Anda dan {count} lainnya telah dikeluarkan dari grup." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Hanno rimosso {name} e altri {count} dal gruppo." + "value" : "Tu e altri {count} siete stati rimossi dal gruppo." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count}人 がグループから削除されました" + "value" : "あなた{count}名 がグループから削除されました。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ს და {count} სხვებს ჯგუფიდან წაიშალნენ." + "value" : "თქვენ და {count} სხვა წაიშალეთ ჯგუფიდან." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‍ និង {count} គេផ្សង ទៀត‍ ត្រូវណាដកចេញេញីក្រុមនេះ។" + "value" : "អ្នក និង {count} គេផ្សេងទៀត ត្រូវបានដកចេញពីក្រុមនេះ។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ಪ್ರ ಮತ್ತು {count} ಇತರೆರು ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲ್ಪಟ್ಟರು." + "value" : "ನೀವು ಮತ್ತು {count} ಇತರರನ್ನು ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}님{count}명이 그룹에서 제거되었습니다." + "value" : "당신{count} 명의 사람들이 그룹에서 제거되었습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و {count} کەس دیکە لە گروپەکە لابران." + "value" : "تۆ و {count} کەس دیکە لە گروپەکە لابران." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} û {count} yên din ji komê hatine derxistin." + "value" : "Te û {count} yên din hatin derxistin ji komê." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ne {count} abalala basasulwa okuva mu kibiina." - } - }, - "lo" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} ແລະ {count}" + "value" : "Ggwe ne {count} abalala musasulwa okuva mu kibiina." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ir {count} kiti buvo pašalinti iš grupės." - } - }, - "lv" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} un {count} citi tika noņemti no grupas." + "value" : "Jūs ir dar {count} buvo pašalinti iš grupės." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {count} други беа отстранети од групата." + "value" : "Вие и {count} други беа отстранети од групата." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} болон {count} бусад бүлгээс хасагдлаа." + "value" : "Та болон {count} бусад бүлгээс хасагдлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dan {count} lainnya dikeluarkan dari kumpulan." + "value" : "Anda dan {count} yang lain dikeluarkan dari kumpulan." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name} နှင့် {count} ဦး အဖွဲ့မှ ဖယ်ရှားခံရသည်။" + "value" : "သင် နှင့် {count} ဦး အဖွဲ့မှ ဖယ်ရှားခံရသည်။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {count} andre ble fjernet fra gruppen." + "value" : "Du og {count} andre ble fjernet fra gruppen." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {count} andre ble fjernet fra gruppen." + "value" : "Du og {count} andre ble fjernet fra gruppen." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count} अन्य समूहबाट हटाइएको थियो।" + "value" : "तपाईं{count} अन्यलाई समूहबाट हटाइयो।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} en {count} anderen zijn verwijderd uit de groep." + "value" : "Jij en {count} anderen werden uit de groep verwijderd." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {count} andre vart fjerna frå gruppa." + "value" : "Du og {count} andre vart fjerna frå gruppa." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ndi {count} ena achotsedwa mu gulu." + "value" : "Inu ndi {count} ena achotsedwa mu gulu." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ਅਤੇ{count}ਹੋਰਾਂਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।." + "value" : "ਤੁਸੀਂ ਅਤੇ {count} ਹੋਰ ਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} innych użytkowników zostali usunięci z grupy." + "value" : "Ty i {count} innych użytkowników zostaliście usunięci z grupy." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{name} او {count} نور له ګروپ څخه ایستل شوي." + "value" : "تاسو او {count} نور ډله څخه لرې کړل شوی." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e {count} outros foram removidos do grupo." + "value" : "Você e {count} outros foram removidos do grupo." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e {count} outros foram removidos do grupo." + "value" : "Você e {count} outros foram removidos do grupo." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "{name} și alți {count} au fost eliminați din grup." + "value" : "Tu și alți {count} ați fost eliminați din grup." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {count} других пользователей были удалены из группы." + "value" : "Вы и {count} других пользователей удалены из группы." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} drugih su uklonjeni iz grupe." + "value" : "Ti i {count} drugih ste uklonjeni iz grupe." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} සහ {count} වෙනත් අය කණ්ඩායමෙන් ඉවත් කරන ලදී." + "value" : "ඔබ සහ {count} වෙනත් අය කණ්ඩායමෙන් ඉවත් කරන ලදී." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "{name}a {count} ďalší boli odstránení zo skupiny." + "value" : "Vy a {count} ďalší boli odstránení zo skupiny." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} in {count} drugi so bili odstranjeni iz skupine." + "value" : "Vi in {count} drugi ste bili odstranjeni iz skupine." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dhe {count} të tjerë u larguan nga grupi." + "value" : "Ju dhe {count} të tjerë u larguan nga grupi." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {count} осталих су уклоњени из групе." + "value" : "Ви и {count} осталих су уклоњени из групе." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {count} drugih su uklonjeni iz grupe." + "value" : "Vi i {count} drugih ste uklonjeni iz grupe." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "{name} och {count} andra togs bort från gruppen." + "value" : "Du och {count} andra togs bort från gruppen." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "{name} na {count} wengine wameondolewa kutoka kwenye kundi." + "value" : "Wewe na {count} wengine mmeondolewa kutoka kwenye kundi." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} மற்றும் {count} பிறர் குழுவிலிருந்து நீக்கப்பட்டனர்." + "value" : "நீங்கள் மற்றும் {count} பிறர் குழுவிலிருந்து நீக்கப்பட்டுள்ளீர்கள்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} మరియు {count} ఇతరులు సమూహం నుండి తొలగించబడ్డారు." + "value" : "మీరు మరియు {count} ఇతరులు సమూహం నుండి తొలగించబడ్డారు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "{name} and {count} อื่นๆ ถูกลบออกจากกลุ่ม" + "value" : "คุณ และ {count} คนอื่นๆ ถูกลบออกจากกลุ่ม." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ve {count} diğer gruptan çıkarıldı." + "value" : "Siz ve {count} diğer gruptan çıkarıldı." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} та ще {count} інших були вилучені із групи." + "value" : "Ви та ще {count} інших були видалені із групи." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} اور {count} دیگر گروپ سے ہٹا دیے گئے۔" + "value" : "آپ اور {count} دیگر کو گروپ سے ہٹا دیا گیا۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name} va {count} boshqalar guruhdan chiqarib yuborildi." + "value" : "Siz va {count} boshqalar guruhdan chiqarib yuborildi." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} {count} người khác đã bị xoá khỏi nhóm." + "value" : "Bạn{count} người khác đã bị xoá khỏi nhóm." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} kunye {count} abanye abantu bakhutshelwe ngaphandle kweqela." + "value" : "Mna kunye {count} abanye abantu bakhutshelwe ngaphandle kweqela." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count}其他成员被移出了群组。" + "value" : "和其他{count}人被从群组中移除。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{count} 其他成員 被移出了群組。" + "value" : "{count} 位其他成員 被移出了群組。" } } } }, - "groupRemovedTwo" : { + "groupRemovedYouTwo" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "{name} en {other_name} is uit die groep verwyder." + "value" : "Jy en {other_name} is uit die groep verwyder." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و {other_name} تم إزالتهم من المجموعة." + "value" : "أنت و {other_name} تم إزالتهم من المجموعة." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} qrupdan çıxarıldı." + "value" : "Siz{other_name} qrupdan çıxarıldınız." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {other_name} gōra z group." + "value" : "Šumār a {other_name} gōra z group." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "{name} і {other_name} былі выдалены з групы." + "value" : "Вы і {other_name} былі выдалены з групы." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {other_name} бяха премахнати от групата." + "value" : "Вие и {other_name} бяхте премахнати от групата." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} এবং {other_name} গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" + "value" : "আপনি এবং {other_name} গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {other_name} han estat eliminats del grup." + "value" : "Tu i {other_name} heu estat eliminats del grup." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {other_name} byli odebráni ze skupiny." + "value" : "Vy a {other_name} byli odebráni ze skupiny." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y a {other_name} wedi cael eu symud o'r grŵp." + "value" : "Chi a {other_name} wedi cael eu symud o'r grŵp." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {other_name} blev fjernet fra gruppen." + "value" : "Du og {other_name} blev fjernet fra gruppen." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "{name} und {other_name} wurden aus der Gruppe entfernt." + "value" : "Du und {other_name} wurden aus der Gruppe entfernt." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "{name} και {other_name} αφαιρέθηκαν από την ομάδα." + "value" : "Εσείς και {other_name} αφαιρέθηκαν από την ομάδα." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "{name} and {other_name} were removed from the group." + "value" : "You and {other_name} were removed from the group." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "{name} kaj {other_name} estis forigitaj de la grupo." + "value" : "Vi kaj {other_name} estis forigitaj de la grupo." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y {other_name} fueron expulsados del grupo." + "value" : " y {other_name} fueron expulsados del grupo." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "{name} y {other_name} fueron expulsados del grupo." + "value" : " y {other_name} fueron expulsados del grupo." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ja {other_name} eemaldati grupist." + "value" : "Sina ja {other_name} eemaldati grupist." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} eta {other_name} taldetik kendu ziren." + "value" : "Zuk eta {other_name} taldetik kendu zaituztete." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و {other_name} از گروه حذف شدند." + "value" : "شما و {other_name} از گروه حذف شدید." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ja {other_name} poistettiin ryhmästä." + "value" : "Sinä ja {other_name} poistettiin ryhmästä." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "{name} at {other_name} tinanggal sa grupo." + "value" : "Ikaw at {other_name} ay tinanggal sa grupo." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} et {other_name} ont été retirés du groupe." - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} e {other_name} foron eliminados do grupo." + "value" : "Vous et {other_name} avez été retiré·e·s du groupe." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "{name} da {other_name} an cire su daga ƙungiyar." + "value" : "Ku da {other_name} an cire ku daga ƙungiyar." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‏ ו{other_name}‏ הוסרו מהקבוצה." + "value" : "את/ה ו{other_name}‏ הוסרתם מהקבוצה." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{name} और {other_name} समूह से हटा दिए गए।" + "value" : "आप और {other_name} को समूह से हटा दिया गया।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {other_name} su uklonjeni iz grupe." + "value" : "Vi i {other_name} uklonjeni ste iz grupe." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "{name} és {other_name} el lettek távolítva a csoportból." + "value" : "Te és {other_name} el lettetek távolítva a csoportból." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "{name}֊ը և {other_name}֊ը հեռացվել են խմբից:" + "value" : "Դուք և {other_name}֊ը հեռացվել են խմբից:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dan {other_name} dikeluarkan dari grup." + "value" : "Anda dan {other_name} telah dikeluarkan dari grup." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Hanno rimosso {name} e {other_name} dal gruppo." + "value" : "Tu e {other_name} siete stati rimossi dal gruppo." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} がグループから削除されました" + "value" : "あなた{other_name} がグループから削除されました。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ს და {other_name}ს ჯგუფიდან წაიშალნენ." + "value" : "თქვენ და {other_name} წაიშალეთ ჯგუფიდან." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "{name}‍ និង {other_name}‍ ត្រូវបានដកចេញពីក្រុមនេះ។" + "value" : "អ្នក និង {other_name} ត្រូវបានដកចេញពីក្រុមនេះ។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ಪ್ರ ಮತ್ತು {other_name} ಪ್ರ ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲ್ಪಟ್ಟರು." + "value" : "ನೀವು ಮತ್ತು {other_name} ಅವರನ್ನು ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{name}님{other_name}님이 그룹에서 제거되었습니다." + "value" : "당신{other_name}님이 그룹에서 제거되었습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "{name} و {other_name} لە گروپەکە لابران." + "value" : "تۆ و {other_name} لە گروپەکە لابران." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} û {other_name} ji komê hatine derxistin." + "value" : "Te û {other_name} hatin derxistin ji komê." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ne {other_name} basasulwa okuva mu kibiina." - } - }, - "lo" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}และ{other_name}ໄດ້ຖືກລຶບອອກຈາກກຸ່ມ." + "value" : "Ggwe ne {other_name} musasulwa okuva mu kibiina." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ir {other_name} buvo pašalinti iš grupės." - } - }, - "lv" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} un {other_name} tika noņemti no grupas." + "value" : "Jūs ir {other_name} buvo pašalinti iš grupės." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {other_name} беа отстранети од групата." + "value" : "Вие и {other_name} беа отстранети од групата." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} болон {other_name} бүлгээс хасагдлаа." + "value" : "Та болон {other_name} бүлгээс хасагдлаа." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dan {other_name} dikeluarkan dari kumpulan." + "value" : "Anda dan {other_name} dikeluarkan dari kumpulan." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{name} နှင့် {other_name} အဖွဲ့မှ ဖယ်ရှားခံရသည်။" + "value" : "သင် နှင့် {other_name} အဖွဲ့မှ ဖယ်ရှားခံရသည်။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {other_name} ble fjernet fra gruppen." + "value" : "Du og {other_name} ble fjernet fra gruppen." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {other_name} ble fjernet fra gruppen." + "value" : "Du og {other_name} ble fjernet fra gruppen." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} समूहबाट हटाइएको थियो।" + "value" : "तपाईं{other_name}लाई समूहबाट हटाइयो।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} en {other_name} zijn verwijderd uit de groep." + "value" : "U en {other_name} zijn verwijderd uit de groep." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "{name} og {other_name} vart fjerna frå gruppa." + "value" : "Du og {other_name} vart fjerna frå gruppa." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ndi {other_name} achotsedwa mu gulu." + "value" : "Inu ndi {other_name} achotsedwa mu gulu." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}ਅਤੇ{other_name}ਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" + "value" : "ਤੁਸੀਂ ਅਤੇ {other_name} ਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Użytkownicy {name} i {other_name} zostali usunięci z grupy." + "value" : "Ty oraz użytkownik {other_name} zostaliście usunięci z grupy." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{name} او {other_name} له ګروپ څخه ایستل شوي." + "value" : "تاسو او {other_name} ډله څخه لرې کړل شوی." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e {other_name} foram removidos do grupo." + "value" : "Você e {other_name} foram removidos do grupo." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "{name} e {other_name} foram removidos do grupo." + "value" : "Você e {other_name} foram removidos do grupo." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "{name} și {other_name} au fost eliminați din grup." + "value" : "Tu și {other_name} ați fost eliminați din grup." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {other_name} были удалены из группы." + "value" : "Вы и пользователь {other_name} удалены из группы." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {other_name} su uklonjeni iz grupe." + "value" : "Ti i {other_name} ste uklonjeni iz grupe." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{name} සහ {other_name} කණ්ඩායමෙන් ඉවත් කරන ලදී." + "value" : "ඔබ සහ {other_name} කණ්ඩායමෙන් ඉවත් කරන ලදී." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} a {other_name} boli odstránení zo skupiny." + "value" : "Vy a {other_name} boli odstránení zo skupiny." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "{name} in {other_name} sta bila odstranjena iz skupine." + "value" : "Vi in {other_name} sta bila odstranjena iz skupine." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "{name} dhe {other_name} u larguan nga grupi." + "value" : "Ju dhe {other_name} u larguan nga grupi." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} и {other_name} су уклоњени из групе." + "value" : "Ви и {other_name} су уклоњени из групе." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "{name} i {other_name} su uklonjeni iz grupe." + "value" : "Vi i {other_name} ste uklonjeni iz grupe." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "{name} och {other_name} togs bort från gruppen." + "value" : "Du och {other_name} togs bort från gruppen." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "{name} na {other_name} wameondolewa kutoka kwenye kundi" + "value" : "Wewe na {other_name} mmeondolewa kutoka kwenye kundi." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{name} மற்றும் {other_name} குழுவிலிருந்து நீக்கப்பட்டனர்." + "value" : "நீங்கள் மற்றும் {other_name} குழுவிலிருந்து நீக்கப்பட்டுள்ளீர்கள்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{name} మరియు {other_name} సమూహం నుండి తొలగించబడ్డారు." + "value" : "మీరు మరియు {other_name} సమూహం నుండి తొలగించబడ్డారు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "{name} และ {other_name} ถูกลบออกจากกลุ่ม" + "value" : "คุณ และ {other_name} ถูกลบออกจากกลุ่ม" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{name} ve {other_name} gruptan çıkarıldı." + "value" : "Sen ve {other_name} gruptan çıkarıldınız." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "{name} та {other_name} були вилучені із групи." + "value" : "Ви та {other_name} були видалені із групи." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{name} اور {other_name} کو گروپ سے ہٹا دیا گیا۔" + "value" : "آپ اور {other_name} کو گروپ سے ہٹا دیا گیا۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{name} va {other_name} guruhdan chiqarib yuborildi." + "value" : "Siz va {other_name} guruhdan chiqarib yuborildi." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} đã bị xoá khỏi nhóm." + "value" : "Bạn{other_name} đã bị xoá khỏi nhóm." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "{name} kunye {other_name} bakhutshelwe ngaphandle kweqela." + "value" : "Mna kunye {other_name} bakhutshelwe ngaphandle kweqela." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name}被移出了群组。" + "value" : "{other_name}被从该群组中移除。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "{name}{other_name} 被移出了群組。" + "value" : "{other_name} 被移出了群組。" } } } }, - "groupRemovedYou" : { + "groupRemoveMessages" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Jy is verwyder van {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwyder gebruiker en hul boodskappe" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwyder gebruikers en hul boodskappe" + } + } + } + } + } } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تمت إزالتك من {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين ورسائلهم" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين ورسائلهم" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدم ورسائله" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين ورسائلهم" + } + }, + "two" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين ورسائلهم" + } + }, + "zero" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين ورسائلهم" + } + } + } + } + } } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{group_name} qrupundan çıxarıldınız." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "İstifadəçini və mesajlarını sil" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "İstifadəçiləri və mesajlarını sil" + } + } + } + } + } } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "ما گپ درخواست قبول کردی {group_name}. تان ہٹا دئیے گئے ہیں." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "مستخدم اور انے سار پیغام برس ک" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "مستخدم اور انے سار پیغاما برس ک" + } + } + } + } + } } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Вас выдалілі з {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выдаліць карыстальнікаў і іх паведамленні" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выдаліць карыстальнікаў і іх паведамленні" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выдаліць карыстальніка і яго паведамленні" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выдаліць карыстальнікаў і іх паведамленні" + } + } + } + } + } } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Бяхте премахнат от {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Премахване на потребител и неговите съобщения" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Премахване на потребители и техните съобщения" + } + } + } + } + } } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "আপনাকে {group_name} থেকে সরানো হয়েছে।" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "দীর্ঘ বার্তা সহ ব্যবহারকারীকে সরান" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "দীর্ঘ বার্তা সহ ব্যবহারকারীদের সরান" + } + } + } + } + } } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Heu estat expulsat de {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suprimeix l'usuari i els seus missatges" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suprimeix els usuaris i els seus missatges" + } + } + } + } + } } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Byli jste odebráni z {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstranit uživatele a jejich zprávy" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstranit uživatele a jejich zprávy" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstranit uživatele a jeho zprávy" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstranit uživatele a jejich zprávy" + } + } + } + } + } } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Tynnwyd chi allan o {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr a'u negeseuon" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr a'u negeseuon" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddiwr a'u negeseuon" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr a'u negeseuon" + } + }, + "two" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr a'u negeseuon" + } + }, + "zero" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr a'u negeseuon" + } + } + } + } + } } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Du blev fjernet fra {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brugeren og deres beskeder" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brugerne og deres beskeder" + } + } + } + } + } } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Du wurdest aus der Gruppe {group_name} entfernt." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitglied und dessen Nachrichten entfernen" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitglieder und deren Nachrichten entfernen" + } + } + } + } + } } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Έχετε αφαιρεθεί από {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αφαίρεση χρήστη και των μηνυμάτων του" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αφαίρεση χρηστών και των μηνυμάτων τους" + } + } + } + } + } } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "You were removed from {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove user and their messages" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove users and their messages" + } + } + } + } + } } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Vi estis forigita el {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forigi uzanton kaj iliajn mesaĝojn" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forigi uzantojn kaj iliajn mesaĝojn" + } + } + } + } + } } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Has sido eliminado del grupo {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar usuario y sus mensajes" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar usuarios y sus mensajes" + } + } + } + } + } } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Has sido eliminado del grupo {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Borrar usuario y sus mensajes" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Borrar usuario y sus mensajes" + } + } + } + } + } } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Teid eemaldati grupist {group_name}." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eemalda kasutaja ja nende sõnumid" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eemalda kasutajad ja nende sõnumid" + } + } + } + } + } } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "{group_name}-tik kendu zaituzte." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erabiltzailea eta haien mezuak kendu" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erabiltzaileak eta haien mezuak kendu" + } + } + } + } + } } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "شما از {group_name} حذف شدید." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربر و پیام هایش را حذف کنید" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربران و پیام هایشان را حذف کنید" + } + } + } + } + } } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Sinut poistettiin ryhmästä {group_name}." - } - }, - "fil" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ikaw ay inalis mula sa {group_name}." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous avez été retiré de {group_name}." - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fuches eliminadx de {group_name}." - } - }, - "ha" : { - "stringUnit" : { - "state" : "translated", - "value" : "An cire ku daga {group_name}." - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "הוסרת מ{group_name}." - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "आपको {group_name} से हटा दिया गया है।" - } - }, - "hr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uklonjeni ste iz {group_name}." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "El lettél távolítva {group_name} csoportból." - } - }, - "hy-AM" : { - "stringUnit" : { - "state" : "translated", - "value" : "Դուք հեռացվել եք {group_name} խմբից։" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anda dikeluarkan dari {group_name}." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sei stato rimosso da {group_name}." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "{group_name}から削除されました。" - } - }, - "ka" : { - "stringUnit" : { - "state" : "translated", - "value" : "თქვენ ჯგუფიდან წაგერთვათ {group_name}." - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "អ្នកត្រូវបានយកចេញពី {group_name}។" - } - }, - "kn" : { - "stringUnit" : { - "state" : "translated", - "value" : "ನೀವು {group_name} ನಿಂದ ತೆಗೆದುಹಾಕಲ್ಪಟ್ಟಿದ್ದೀರಿ." - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "{group_name}에서 제거되었습니다." - } - }, - "ku" : { - "stringUnit" : { - "state" : "translated", - "value" : "تۆ لە {group_name} لە دەرکرایت." - } - }, - "ku-TR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Te ji {group_name}ê hate derxistin." - } - }, - "lg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wakugiddwa mu {group_name}." - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jūs buvote pašalinti iš {group_name}." - } - }, - "lv" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jūs esat noņemts no {group_name}." - } - }, - "mk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Бевте отстранети од {group_name}." - } - }, - "mn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Та {group_name} бүлгээс хасагдсан байна." - } - }, - "ms" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anda telah dikeluarkan dari {group_name}." - } - }, - "my" : { - "stringUnit" : { - "state" : "translated", - "value" : "သင်သည် {group_name} မှ ဖယ်ရှားခံလိုက်ရသည်။" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du ble fjernet fra {group_name}." - } - }, - "nb-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du ble fjernet fra {group_name}." - } - }, - "ne-NP" : { - "stringUnit" : { - "state" : "translated", - "value" : "तपाईंलाई {group_name} बाट हटाइयो।" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "U bent verwijderd uit {group_name}." - } - }, - "nn-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du blei fjerna frå {group_name}." - } - }, - "ny" : { - "stringUnit" : { - "state" : "translated", - "value" : "Munachotsedwa ku {group_name}." - } - }, - "pa-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਤੁਹਾਨੂੰ {group_name} ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਸੀ।" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usunięto Cię z grupy {group_name}." - } - }, - "ps" : { - "stringUnit" : { - "state" : "translated", - "value" : "تاسو له {group_name} څخه لرې کړل شوی." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Você foi removido do {group_name}." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Foi removido de {group_name}." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ai fost eliminat din {group_name}." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вас исключили из {group_name}." - } - }, - "sh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uklonjen si iz {group_name}." - } - }, - "si-LK" : { - "stringUnit" : { - "state" : "translated", - "value" : "ඔබ {group_name} වෙතින් ඉවත් කරන ලදි." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Boli ste odstránení zo skupiny {group_name}." - } - }, - "sl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bili ste odstranjeni iz {group_name}." - } - }, - "sq" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ju keni qenë larguar nga {group_name}." - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уклоњени сте из {group_name}." - } - }, - "sr-Latn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Izbačeni ste iz {group_name}." - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du togs bort från {group_name}" - } - }, - "sw" : { - "stringUnit" : { - "state" : "translated", - "value" : "Umetolewa kutoka kwa {group_name}." - } - }, - "ta" : { - "stringUnit" : { - "state" : "translated", - "value" : "நீங்கள் {group_name} -இல் இருந்து நீக்கப்பட்டீர்கள்." - } - }, - "te" : { - "stringUnit" : { - "state" : "translated", - "value" : "మీరు {group_name} నుండి తొలగించబడ్డారు." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คุณได้ถูกลบออกจาก {group_name} แล้ว" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "{group_name} grubundan çıkarıldınız." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ви були видалені з {group_name}." - } - }, - "ur-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "آپ کو {group_name} سے ہٹا دیا گیا ہے۔" - } - }, - "uz" : { - "stringUnit" : { - "state" : "translated", - "value" : "Siz {group_name} dan chiqarib yuborildingiz." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn đã bị xoá khỏi {group_name}." - } - }, - "xh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ususwe kwi {group_name}." - } - }, - "zh-CN" : { - "stringUnit" : { - "state" : "translated", - "value" : "您已被{group_name}移除。" - } - }, - "zh-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "您已從{group_name}中被移除。" - } - } - } - }, - "groupRemovedYouMultiple" : { - "extractionState" : "manual", - "localizations" : { - "af" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jy en {count} ander is uit die groep verwyder." - } - }, - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "أنت و{count} آخرين تم إزالتهم من المجموعة." - } - }, - "az" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sizdigər {count} nəfər qrupdan çıxarıldınız." - } - }, - "bal" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šumār a {count} drīg gōra z group." - } - }, - "be" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы і {count} іншых былі выдалены з групы." - } - }, - "bg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вие и {count} други бяхте премахнати от групата." - } - }, - "bn" : { - "stringUnit" : { - "state" : "translated", - "value" : "আপনি এবং {count} জন অন্য সদস্য গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tu i {count} altres heu estat eliminats del grup." - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vy a {count} dalších bylo odebráno ze skupiny." - } - }, - "cy" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chi a {count} eraill wedi cael eu symud o'r grŵp." - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du og {count} andre blev fjernet fra gruppen." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du und {count} andere wurden aus der Gruppe entfernt." - } - }, - "el" : { - "stringUnit" : { - "state" : "translated", - "value" : "Εσείς και {count} άλλοι αφαιρέθηκαν από την ομάδα." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You and {count} others were removed from the group." - } - }, - "eo" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vi kaj {count} aliaj estis forigitaj de la grupo." - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : " y {count} más fueron expulsados del grupo." - } - }, - "es-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : " y otros {count} habéis sido eliminados del grupo." - } - }, - "et" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sina ja {count} teist eemaldati grupist." - } - }, - "eu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zuk eta {count} beste taldetik kendu zaituztete." - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "شماو{count}نفر دیگر از گروه حذف شدید." - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sinä ja {count} muuta poistettiin ryhmästä." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista käyttäjä ja hänen viestinsä" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista käyttäjät ja heidän viestinsä" + } + } + } + } + } } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Ikaw at {count} iba pa ay tinanggal sa grupo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alisin ang user at ang kanilang mga mensahe" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alisin ang mga user at ang kanilang mga mensahe" + } + } + } + } + } } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Vous et {count} autres ont été supprimé·e·s du groupe." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer l'utilisateur et ses messages" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer les utilisateurs et leurs messages" + } + } + } + } + } } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Ku da {count} wasu an cire ku daga ƙungiyar." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cire mai amfani da saƙonnin su" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cire masu amfani da saƙonninsu" + } + } + } + } + } } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "את/ה ו{count} אחרים‏ הוסרתם מהקבוצה." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסר משתמשים והודעותיהם" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסר משתמש והודעותיו" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסר משתמשים והודעותיהם" + } + }, + "two" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסר משתמשים והודעותיהם" + } + } + } + } + } } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "आप और {count} अन्य को समूह से हटा दिया गया।" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोगकर्ता और उनके भेजे हुए संदेशो को हटाएं" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोगकर्ताओं और उनके भेजे हुए संदेशो को हटाएं" + } + } + } + } + } } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Vi i {count} drugi ste uklonjeni iz grupe." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike i njihove poruke" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnika i njegove poruke" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike i njihove poruke" + } + } + } + } + } } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Te és {count} másik személy el lettetek távolítva a csoportból." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Felhasználó és üzeneteik eltávolítása" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Felhasználók és üzeneteik eltávolítása" + } + } + } + } + } } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Դուք և {count} ուրիշներ հեռացվել են խմբից:" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Հեռացնել օգտատիրոջը և նրանց հաղորդագրությունները" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Հեռացնել օգտատերերին և նրանց հաղորդագրությունները" + } + } + } + } + } } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Anda dan {count} lainnya telah dikeluarkan dari grup." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hapus pengguna dan pesan mereka" + } + } + } + } + } } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Tu e altri {count} siete stati rimossi dal gruppo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rimuovi l'utente e i suoi messaggi" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rimuovi gli utenti e i loro messaggi" + } + } + } + } + } } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "あなた{count}名 がグループから削除されました。" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ユーザーとそのメッセージを削除" + } + } + } + } + } } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "თქვენ და {count} სხვა წაიშალეთ ჯგუფიდან." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "მომხმარებლის წაშლა და მათი შეტყობინებები" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "მომხმარებლების და მათი შეტყობინებების მოხსნა" + } + } + } + } + } } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "អ្នក និង {count} គេផ្សេងទៀត ត្រូវបានដកចេញពីក្រុមនេះ។" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ដកអ្នកប្រើនិងសាររបស់ពួកគេ" + } + } + } + } + } } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ನೀವು ಮತ್ತು {count} ಇತರರನ್ನು ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಬಳಕೆದಾರರನ್ನು ಮತ್ತು ಅವರ ಸಂದೇಶಗಳನ್ನು ತೆಗೆದುಹಾಕಿ" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಬಳಕೆದಾರರನ್ನು ಮತ್ತು ಅವರ ಸಂದೇಶಗಳನ್ನು ತೆಗೆದುಹಾಕಿ" + } + } + } + } + } } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "당신{count} 명의 사람들이 그룹에서 제거되었습니다." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용자 및 메시지 제거" + } + } + } + } + } } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "تۆ و {count} کەس دیکە لە گروپەکە لابران." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "لابردنی بەکارهێنەر و پەیامەکانیان" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "کارەکان و پیامەکانیشان لاببردن" + } + } + } + } + } } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Te û {count} yên din hatin derxistin ji komê." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bikarhêner û peyamekên wî rake" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bikarhêner û peyamekên wan rake" + } + } + } + } + } } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Ggwe ne {count} abalala musasulwa okuva mu kibiina." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ggyawo omukozesa nebamazima bibikwata" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ggyawo abakozesa nebamazima bibikwata" + } + } + } + } + } } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Jūs ir dar {count} buvo pašalinti iš grupės." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šalinti naudotojus ir jų žinutes" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šalinti naudotojus ir jų žinutes" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šalinti naudotoją ir jo žinutes" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šalinti naudotojus ir jų žinutes" + } + } + } + } + } } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Вие и {count} други беа отстранети од групата." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отстрани корисник и неговите пораки" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отстрани корисници и нивните пораки" + } + } + } + } + } } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Та болон {count} бусад бүлгээс хасагдлаа." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Хэрэглэгчийг болон тэдний мессежийг устгах" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Хэрэглэгчдийг болон тэдний мессежийг устгах" + } + } + } + } + } } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Anda dan {count} yang lain dikeluarkan dari kumpulan." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alih keluar pengguna dan mesej mereka" + } + } + } + } + } } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "သင် နှင့် {count} ဦး အဖွဲ့မှ ဖယ်ရှားခံရသည်။" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "အသုံးပြုသူများ နှင့် ၎င်းတို့၏မက်ဆေ့ချ်များကို ဖယ်ရှားမည်" + } + } + } + } + } } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Du og {count} andre ble fjernet fra gruppen." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brukeren og meldinga deres" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brukere og beskjedene deres" + } + } + } + } + } } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Du og {count} andre ble fjernet fra gruppen." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern bruker og deres meldinger" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brukere og deres meldinger" + } + } + } + } + } } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "तपाईं{count} अन्यलाई समूहबाट हटाइयो।" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोगकर्ता र उनीहरूको सन्देशहरू हटाउनुहोस्" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोगकर्ताहरू र उनीहरूको सन्देशहरू हटाउनुहोस्" + } + } + } + } + } } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Jij en {count} anderen werden uit de groep verwijderd." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijder gebruiker en hun berichten" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijder gebruikers en hun berichten" + } + } + } + } + } } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Du og {count} andre vart fjerna frå gruppa." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brukaren og meldingane deira" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brukarar og meldingane deira" + } + } + } + } + } } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Inu ndi {count} ena achotsedwa mu gulu." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chotsani wogwiritsa ntchito ndi mauthenga awo" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chotsani ogwiritsa ntchito ndi mauthenga awo" + } + } + } + } + } } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਤੁਸੀਂ ਅਤੇ {count} ਹੋਰ ਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ।" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਵਰਤੋਂਕਾਰ ਅਤੇ ਉਨ੍ਹਾਂ ਦੇ ਸਨੇਹੇ ਹਟਾਓ" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਵਰਤੋਂਕਾਰਾਂ ਅਤੇ ਉਹਨਾ ਦੇ ਸੰਕਰਟਹਕਰਾਂ ਨੂੰ ਹਟਾਓ" + } + } + } + } + } } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ty i {count} innych użytkowników zostaliście usunięci z grupy." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń użytkowników i ich wiadomości" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń użytkowników i ich wiadomości" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń użytkownika i jego wiadomości" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń użytkowników i ich wiadomości" + } + } + } + } + } } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "تاسو او {count} نور ډله څخه لرې کړل شوی." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "کارونکی او د هغه پیغامونه لرې کړئ" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاروونکي او د هغوی پیغامونه لرې کړئ" + } + } + } + } + } } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Você e {count} outros foram removidos do grupo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover usuário e suas mensagens" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover usuários e suas mensagens" + } + } + } + } + } } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Você e {count} outros foram removidos do grupo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover utilizador e as suas mensagens" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover utilizadores e as suas mensagens" + } + } + } + } + } } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Tu și alți {count} ați fost eliminați din grup." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimină utilizatorii și mesajele acestora" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimină utilizatorul și mesajele acestuia" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimină utilizatorii și mesajele acestora" + } + } + } + } + } } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Вы и {count} других пользователей удалены из группы." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить пользователей и их сообщения" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить пользователей и их сообщения" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить пользователя и его сообщения" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить пользователей и их сообщения" + } + } + } + } + } } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Ti i {count} drugih ste uklonjeni iz grupe." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike i njihove poruke" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike i njihove poruke" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnika i njihove poruke" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike i njihove poruke" + } + } + } + } + } } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ඔබ සහ {count} වෙනත් අය කණ්ඩායමෙන් ඉවත් කරන ලදී." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "පරිශීලක සහ ඔවුන්ගේ පණිවිඩ ඉවත් කරන්න" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "පරිශීලකයින් සහ ඔවුන්ගේ පණිවිඩ ඉවත් කරන්න" + } + } + } + } + } } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Vy a {count} ďalší boli odstránení zo skupiny." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť používateľov a ich správy" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť používateľov a ich správy" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť používateľa a jeho správy" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť používateľov a ich správy" + } + } + } + } + } } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Vi in {count} drugi ste bili odstranjeni iz skupine." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrani uporabnike in njihova sporočila" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrani uporabnika in njegova sporočila" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrani uporabnike in njihova sporočila" + } + }, + "two" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrani uporabnika in njuna sporočila" + } + } + } + } + } } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Ju dhe {count} të tjerë u larguan nga grupi." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiqi përdoruesin dhe mesazhet e tyre" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiqi përdoruesit dhe mesazhet e tyre" + } + } + } + } + } } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Ви и {count} осталих су уклоњени из групе." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уклони кориснике и њихове поруке" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уклони корисника и његове поруке" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уклони кориснике и њихове поруке" + } + } + } + } + } } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Vi i {count} drugih ste uklonjeni iz grupe." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike i njihove poruke" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnika i njihove poruke" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike i njihove poruke" + } + } + } + } + } } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Du och {count} andra togs bort från gruppen." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort användare och deras meddelanden" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort användare och deras meddelanden" + } + } + } + } + } } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Wewe na {count} wengine mmeondolewa kutoka kwenye kundi." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ondoa mtumiaji na jumbe zao" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ondoa watumiaji na jumbe zao" + } + } + } + } + } } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "நீங்கள் மற்றும் {count} பிறர் குழுவிலிருந்து நீக்கப்பட்டுள்ளீர்கள்." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "மீது அவர் தகவல்கள் ஒட்டுவதின் முகம்" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "கட்டும் முழுக் செய்திகள் இணைக்கும் வசம்" + } + } + } + } + } } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "మీరు మరియు {count} ఇతరులు సమూహం నుండి తొలగించబడ్డారు." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "వినియోగదారిని మరియు వారి సందేశాలను తొలగించు" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "వినియోగదారులను మరియు వారి సందేశాలను తొలగించు" + } + } + } + } + } } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "คุณ และ {count} คนอื่นๆ ถูกลบออกจากกลุ่ม." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลบผู้ใช้และข้อความของพวกเขา" + } + } + } + } + } } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Siz ve {count} diğer gruptan çıkarıldı." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kullanıcıyı ve mesajlarını sil" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kullanıcıları ve mesajlarını sil" + } + } + } + } + } } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Ви та ще {count} інших були видалені із групи." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити користувачів та їхні повідомлення" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити користувачів та їхні повідомлення" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити користувача та його повідомлення" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити користувачів та їхні повідомлення" + } + } + } + } + } } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "آپ اور {count} دیگر کو گروپ سے ہٹا دیا گیا۔" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "صارف کو اور ان کے پیغامات کو حذف کریں" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "صارفین کو اور ان کے پیغامات کو حذف کریں" + } + } + } + } + } } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Siz va {count} boshqalar guruhdan chiqarib yuborildi." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foydalanuvchi va ularning xabarlarini olib tashlash" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foydalanuvchilar va ularning xabarlarini olib tashlash" + } + } + } + } + } } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Bạn{count} người khác đã bị xoá khỏi nhóm." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa người dùng và tin nhắn của họ" + } + } + } + } + } } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Mna kunye {count} abanye abantu bakhutshelwe ngaphandle kweqela." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Susa umsebenzisi kunye nemiyalezo yabo" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Susa abasebenzisi kunye nemiyalezo yabo" + } + } + } + } + } } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "和其他{count}人被从群组中移除。" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除用户及其消息" + } + } + } + } + } } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "{count} 位其他成員 被移出了群組。" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除成員及其訊息" + } + } + } + } + } } } } }, - "groupRemovedYouTwo" : { + "groupRemoveUserOnly" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Jy en {other_name} is uit die groep verwyder." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwyder gebruiker" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwyder gebruikers" + } + } + } + } + } } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أنت و {other_name} تم إزالتهم من المجموعة." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدم" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين" + } + }, + "two" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين" + } + }, + "zero" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة المستخدمين" + } + } + } + } + } } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Siz{other_name} qrupdan çıxarıldınız." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "İstifadəçini sil" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "İstifadəçiləri sil" + } + } + } + } + } } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "Šumār a {other_name} gōra z group." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "صرف برجی مستخدم" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "صرف برجی مستخدماں" + } + } + } + } + } } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Вы і {other_name} былі выдалены з групы." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выдаліць карыстальнікаў" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выдаліць карыстальнікаў" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выдаліць карыстальніка" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выдаліць карыстальнікаў" + } + } + } + } + } } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Вие и {other_name} бяхте премахнати от групата." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Премахване на потребителя" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Премахване на потребители" + } + } + } + } + } } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "আপনি এবং {other_name} গ্রুপ থেকে সরিয়ে দেওয়া হয়েছে।" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "ব্যবহারকারীকে সরান" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ব্যবহারকারীদের সরান" + } + } + } + } + } } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Tu i {other_name} heu estat eliminats del grup." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suprimeix usuari" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suprimeix usuaris" + } + } + } + } + } } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Vy a {other_name} byli odebráni ze skupiny." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstranit uživatele" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstranit uživatele" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstranit uživatele" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstranit uživatele" + } + } + } + } + } } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Chi a {other_name} wedi cael eu symud o'r grŵp." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddiwr" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr" + } + }, + "two" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr" + } + }, + "zero" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tynnu defnyddwyr" + } + } + } + } + } } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Du og {other_name} blev fjernet fra gruppen." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brugeren" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brugerne" + } + } + } + } + } } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Du und {other_name} wurden aus der Gruppe entfernt." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitglied entfernen" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitglieder entfernen" + } + } + } + } + } } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Εσείς και {other_name} αφαιρέθηκαν από την ομάδα." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αφαίρεση Απλά Χρήστη" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αφαίρεση Χρηστών" + } + } + } + } + } } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "You and {other_name} were removed from the group." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove user" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove users" + } + } + } + } + } } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Vi kaj {other_name} estis forigitaj de la grupo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forigi uzanton" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forigi uzantojn" + } + } + } + } + } } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : " y {other_name} fueron expulsados del grupo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar usuario" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar usuarios" + } + } + } + } + } } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : " y {other_name} fueron expulsados del grupo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Borrar usuario" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Borrar usuarios" + } + } + } + } + } } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Sina ja {other_name} eemaldati grupist." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eemalda kasutaja" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eemalda kasutajad" + } + } + } + } + } } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Zuk eta {other_name} taldetik kendu zaituztete." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erabiltzailea kendu" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erabiltzaileak kendu" + } + } + } + } + } } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "شما و {other_name} از گروه حذف شدید." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربر را حذف کنید" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربران را حذف کنید" + } + } + } + } + } } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Sinä ja {other_name} poistettiin ryhmästä." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista käyttäjä" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista käyttäjät" + } + } + } + } + } } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Ikaw at {other_name} ay tinanggal sa grupo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alisin ang user" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alisin ang mga user" + } + } + } + } + } } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Vous et {other_name} avez été retiré·e·s du groupe." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer l'utilisateur" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer les utilisateurs" + } + } + } + } + } + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar usuario" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar usuarios" + } + } + } + } + } } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Ku da {other_name} an cire ku daga ƙungiyar." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cire mai amfani" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cire masu amfani" + } + } + } + } + } } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "את/ה ו{other_name}‏ הוסרתם מהקבוצה." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסר משתמשים" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסר משתמש" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסר משתמשים" + } + }, + "two" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסר משתמשים" + } + } + } + } + } } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "आप और {other_name} को समूह से हटा दिया गया।" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोगकर्ता को हटाएं" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोगकर्ताओं को हटाएं" + } + } + } + } + } } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Vi i {other_name} uklonjeni ste iz grupe." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnika" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike" + } + } + } + } + } } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Te és {other_name} el lettetek távolítva a csoportból." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Felhasználó eltávolítása" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Felhasználók eltávolítása" + } + } + } + } + } } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Դուք և {other_name}֊ը հեռացվել են խմբից:" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Հեռացնել օգտատիրոջը" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Հեռացնել օգտատերերին" + } + } + } + } + } } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Anda dan {other_name} telah dikeluarkan dari grup." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hapus pengguna" + } + } + } + } + } } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Tu e {other_name} siete stati rimossi dal gruppo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rimuovi l'utente" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rimuovi gli utenti" + } + } + } + } + } } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "あなた{other_name} がグループから削除されました。" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ユーザーを削除" + } + } + } + } + } } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "თქვენ და {other_name} წაიშალეთ ჯგუფიდან." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "მოხსნა მომხმარებელი" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "მომხმარებლების მოხსნა" + } + } + } + } + } } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "អ្នក និង {other_name} ត្រូវបានដកចេញពីក្រុមនេះ។" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ដកអ្នកប្រើ" + } + } + } + } + } } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ನೀವು ಮತ್ತು {other_name} ಅವರನ್ನು ಗುಂಪಿನಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ" + } + } + } + } + } } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "당신{other_name}님이 그룹에서 제거되었습니다." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용자 제거" + } + } + } + } + } } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "تۆ و {other_name} لە گروپەکە لابران." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "لابردنی بەکارهێنەر" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "کارەکان لاببردن" + } + } + } + } + } } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Te û {other_name} hatin derxistin ji komê." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bikarhênerê rake" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bikarhêneran rake" + } + } + } + } + } } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Ggwe ne {other_name} musasulwa okuva mu kibiina." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ggyawo omukozesa" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ggyawo abakozesa" + } + } + } + } + } } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Jūs ir {other_name} buvo pašalinti iš grupės." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šalinti naudotojus" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šalinti naudotojus" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šalinti naudotoją" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šalinti naudotojus" + } + } + } + } + } } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Вие и {other_name} беа отстранети од групата." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отстрани корисник" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отстрани корисници" + } + } + } + } + } } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Та болон {other_name} бүлгээс хасагдлаа." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Хэрэглэгчийг устгах" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Хэрэглэгч устгах" + } + } + } + } + } } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Anda dan {other_name} dikeluarkan dari kumpulan." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alih keluar pengguna" + } + } + } + } + } } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "သင် နှင့် {other_name} အဖွဲ့မှ ဖယ်ရှားခံရသည်။" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "အသုံးပြုသူများကို ဖယ်ရှားမည်" + } + } + } + } + } } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Du og {other_name} ble fjernet fra gruppen." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern bruker" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brukere" + } + } + } + } + } } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Du og {other_name} ble fjernet fra gruppen." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern bruker" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brukere" + } + } + } + } + } } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "तपाईं{other_name}लाई समूहबाट हटाइयो।" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोगकर्ता हटाउनुहोस्" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोगकर्ताहरूलाई हटाउनुहोस्" + } + } + } + } + } } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "U en {other_name} zijn verwijderd uit de groep." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijder gebruiker" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijder gebruikers" + } + } + } + } + } } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Du og {other_name} vart fjerna frå gruppa." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brukaren" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern brukarar" + } + } + } + } + } } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Inu ndi {other_name} achotsedwa mu gulu." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chotsani wogwiritsa ntchito" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chotsani ogwiritsa ntchito" + } + } + } + } + } } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਤੁਸੀਂ ਅਤੇ {other_name} ਨੂੰ ਗਰੁੱਪ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ।" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਵਰਤੋਂਕਾਰ ਹਟਾਓ" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਹਟਾਓ" + } + } + } + } + } } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ty oraz użytkownik {other_name} zostaliście usunięci z grupy." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pamiętaj użytkowników" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń użytkowników" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń użytkownika" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń użytkowników" + } + } + } + } + } } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "تاسو او {other_name} ډله څخه لرې کړل شوی." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "یو کاروونکی لرې کړئ" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاروونکو لرې کړئ" + } + } + } + } + } } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Você e {other_name} foram removidos do grupo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover usuário" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover usuários" + } + } + } + } + } } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Você e {other_name} foram removidos do grupo." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover Utilizador" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover utilizadores" + } + } + } + } + } } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Tu și {other_name} ați fost eliminați din grup." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimină utilizatorii" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimină utilizatorul" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimină utilizatorii" + } + } + } + } + } } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Вы и пользователь {other_name} удалены из группы." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить пользователей" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить пользователей" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить пользователя" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить пользователей" + } + } + } + } + } } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Ti i {other_name} ste uklonjeni iz grupe." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnika" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike" + } + } + } + } + } } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ඔබ සහ {other_name} කණ්ඩායමෙන් ඉවත් කරන ලදී." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "පරිශීලකයෙකු ඉවත් කරන්න" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "පරිශීලකයින් ඉවත් කරන්න" + } + } + } + } + } } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Vy a {other_name} boli odstránení zo skupiny." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť používateľov" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť používateľov" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť používateľa" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť používateľov" + } + } + } + } + } } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Vi in {other_name} sta bila odstranjena iz skupine." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrani uporabnike" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrani uporabnika" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrani uporabnike" + } + }, + "two" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrani uporabnika" + } + } + } + } + } } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Ju dhe {other_name} u larguan nga grupi." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiqe përdoruesin" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiqi përdoruesit" + } + } + } + } + } } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Ви и {other_name} су уклоњени из групе." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уклони кориснике" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уклони корисника" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уклони кориснике" + } + } + } + } + } } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Vi i {other_name} ste uklonjeni iz grupe." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnika" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni korisnike" + } + } + } + } + } } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Du och {other_name} togs bort från gruppen." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort användare" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort användare" + } + } + } + } + } } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Wewe na {other_name} mmeondolewa kutoka kwenye kundi." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ondoa mtumiaji" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ondoa watumiaji" + } + } + } + } + } } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "நீங்கள் மற்றும் {other_name} குழுவிலிருந்து நீக்கப்பட்டுள்ளீர்கள்." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "குழுவிலிருந்து அளவை மட்டுமே அகற்றவும்" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "பயனர்களை அகற்று" + } + } + } + } + } } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "మీరు మరియు {other_name} సమూహం నుండి తొలగించబడ్డారు." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "వినియోగదారీని తొలగించు" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "వినియోగదారులను తొలగించు" + } + } + } + } + } } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "คุณ และ {other_name} ถูกลบออกจากกลุ่ม" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลบผู้ใช้" + } + } + } + } + } } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Sen ve {other_name} gruptan çıkarıldınız." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kullanıcıyı sil" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kullanıcıları sil" + } + } + } + } + } } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Ви та {other_name} були видалені із групи." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "few" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити користувачів" + } + }, + "many" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити користувачів" + } + }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити користувача" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити користувачів" + } + } + } + } + } } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "آپ اور {other_name} کو گروپ سے ہٹا دیا گیا۔" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "صرف صارف کو حذف کریں" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "صرف صارفین کو حذف کریں" + } + } + } + } + } } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Siz va {other_name} guruhdan chiqarib yuborildi." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foydalanuvchini chiqarib yuborish" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foydalanuvchilarni chiqarib yuborish" + } + } + } + } + } } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Bạn{other_name} đã bị xoá khỏi nhóm." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa người dùng" + } + } + } + } + } } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Mna kunye {other_name} bakhutshelwe ngaphandle kweqela." + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Susa umsebenzisi" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Susa abasebenzisi" + } + } + } + } + } } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "{other_name}被从该群组中移除。" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除用户" + } + } + } + } + } } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "{other_name} 被移出了群組。" + "value" : "%#@arg1@" + }, + "substitutions" : { + "arg1" : { + "argNum" : 1, + "formatSpecifier" : "lld", + "variations" : { + "plural" : { + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除成員" + } + } + } + } + } } } } @@ -245641,37 +246154,37 @@ "ar" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld عضو" + "value" : "%lld عضوًا" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "%lld أعضاء" + "value" : "%lld عضو" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld من الأعضاء" + "value" : "%lld أعضاء" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "%lld عضوًا" + "value" : "%lld عضو" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "%lld عضو" + "value" : "%lld من الأعضاء" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "%lld عضو" @@ -245719,12 +246232,6 @@ "be" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld удзельнік" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -245737,6 +246244,12 @@ "value" : "%lld удзельнікаў" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld удзельнік" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -245803,12 +246316,6 @@ "cs" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld člen" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -245821,6 +246328,12 @@ "value" : "%lld členů" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld člen" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -245833,40 +246346,40 @@ "cy" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aelod" + "value" : "%lld aelodau" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "%lld aelodau" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "%lld aelodau" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aelodau" + "value" : "%lld aelod gweithgar" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "%lld aelodau" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aelod gweithgar" + "value" : "%lld aelod" } } } @@ -246145,25 +246658,25 @@ "he" : { "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "%lld חבר קבוצה" + "value" : "%lld חברי קבוצה" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld חברי קבוצה" + "value" : "%lld חבר קבוצה" } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "%lld חברי קבוצה" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "%lld חברי קבוצה" @@ -246193,16 +246706,16 @@ "hr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld član" + "value" : "%lld člana" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld člana" + "value" : "%lld član" } }, "other" : { @@ -246409,12 +246922,6 @@ "lt" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld narys" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -246427,6 +246934,12 @@ "value" : "%lld narių" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld narys" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -246439,19 +246952,19 @@ "lv" : { "variations" : { "plural" : { - "zero" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld biedri" + "value" : "%lld biedrs" } }, - "one" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "%lld biedrs" + "value" : "%lld biedri" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "%lld biedri" @@ -246649,22 +247162,22 @@ "pl" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld członek" + "value" : "%lld członków" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "%lld członków" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld członków" + "value" : "%lld członek" } }, "other" : { @@ -246733,16 +247246,16 @@ "ro" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld membru" + "value" : "%lld membri" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld membri" + "value" : "%lld membru" } }, "other" : { @@ -246757,12 +247270,6 @@ "ru" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld Участник" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -246775,6 +247282,12 @@ "value" : "%lld участников" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld Участник" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -246787,12 +247300,6 @@ "sh" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld član" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -246805,6 +247312,12 @@ "value" : "%lld članova" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld član" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -246835,12 +247348,6 @@ "sk" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld člen" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -246853,6 +247360,12 @@ "value" : "%lld členov" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld člen" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -246865,28 +247378,28 @@ "sl" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld član" + "value" : "%lld člani" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld člana" + "value" : "%lld član" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "%lld člani" + "value" : "%lld članov" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "%lld članov" + "value" : "%lld člana" } } } @@ -246913,16 +247426,16 @@ "sr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld члан" + "value" : "%lld члана" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld члана" + "value" : "%lld члан" } }, "other" : { @@ -246937,16 +247450,16 @@ "sr-Latn" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld korisnik" + "value" : "%lld korisnika" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld korisnika" + "value" : "%lld korisnik" } }, "other" : { @@ -247063,12 +247576,6 @@ "uk" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld учасник" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -247081,6 +247588,12 @@ "value" : "%lld учасників" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld учасник" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -247206,40 +247719,40 @@ "ar" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "%lld عضو" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "%lld عضو" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "%lld عضو" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "%lld عضو" + "value" : "%lld عضو نشط" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "%lld عضو" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", - "value" : "%lld عضو نشط" + "value" : "%lld عضو" } } } @@ -247284,12 +247797,6 @@ "be" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld актыўны ўдзельнік" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -247302,6 +247809,12 @@ "value" : "%lld актыўных удзельнікаў" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld актыўны ўдзельнік" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -247368,12 +247881,6 @@ "cs" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld aktivní člen" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -247386,6 +247893,12 @@ "value" : "%lld aktivních členů" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld aktivní člen" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -247398,37 +247911,37 @@ "cy" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "%lld aelodau gweithgar" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "%lld aelodau gweithgar" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "%lld aelodau gweithgar" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "%lld aelodau gweithgar" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "%lld aelodau gweithgar" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "%lld aelodau gweithgar" @@ -247710,25 +248223,25 @@ "he" : { "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "%lld חבר פעיל" + "value" : "%lld חברים פעילים" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld חברים פעילים" + "value" : "%lld חבר פעיל" } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "%lld חברים פעילים" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "%lld חברים פעילים" @@ -247758,16 +248271,16 @@ "hr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktivan član" + "value" : "%lld aktivna člana" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktivna člana" + "value" : "%lld aktivan član" } }, "other" : { @@ -247974,22 +248487,22 @@ "lt" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktyvus narys" + "value" : "%lld aktyvūs nariai" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "%lld aktyvūs nariai" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktyvūs nariai" + "value" : "%lld aktyvus narys" } }, "other" : { @@ -248004,19 +248517,19 @@ "lv" : { "variations" : { "plural" : { - "zero" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktīvi biedri" + "value" : "%lld aktīvs biedrs" } }, - "one" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktīvs biedrs" + "value" : "%lld aktīvi biedri" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "%lld aktīvi biedri" @@ -248214,22 +248727,22 @@ "pl" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktywny członek" + "value" : "%lld aktywnych członków" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "%lld aktywnych członków" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktywnych członków" + "value" : "%lld aktywny członek" } }, "other" : { @@ -248298,16 +248811,16 @@ "ro" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld membru activ" + "value" : "%lld membri activi" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld membri activi" + "value" : "%lld membru activ" } }, "other" : { @@ -248322,12 +248835,6 @@ "ru" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld активный участник" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -248340,6 +248847,12 @@ "value" : "%lld активных участников" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld активный участник" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -248352,12 +248865,6 @@ "sh" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld aktivni član" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -248370,6 +248877,12 @@ "value" : "%lld aktivnih članova" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld aktivni član" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -248400,12 +248913,6 @@ "sk" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld aktívny člen" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -248418,6 +248925,12 @@ "value" : "%lld aktívnych členov" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld aktívny člen" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -248430,28 +248943,28 @@ "sl" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktivni član" + "value" : "%lld aktivni člani" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktivna člana" + "value" : "%lld aktivni član" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktivni člani" + "value" : "%lld aktivnih članov" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktivnih članov" + "value" : "%lld aktivna člana" } } } @@ -248478,16 +248991,16 @@ "sr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld активан члан" + "value" : "%lld активна члана" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld активна члана" + "value" : "%lld активан члан" } }, "other" : { @@ -248502,16 +249015,16 @@ "sr-Latn" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktivan korisnik" + "value" : "%lld aktivna korisnika" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "%lld aktivna korisnika" + "value" : "%lld aktivan korisnik" } }, "other" : { @@ -248628,12 +249141,6 @@ "uk" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld активний учасник" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -248646,6 +249153,12 @@ "value" : "%lld активних учасників" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld активний учасник" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -249753,37 +250266,37 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "إرسال دعوات" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "إرسال دعوة" + "value" : "إرسال دعوات" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "إرسال دعوات" + "value" : "إرسال دعوة" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "إرسال دعوات" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "إرسال دعوات" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "إرسال دعوات" @@ -249861,22 +250374,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Адправіць запрашэнне" + "value" : "Адправіць запрашэнні" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Адправіць запрашэнні" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Адправіць запрашэнні" + "value" : "Адправіць запрашэнне" } }, "other" : { @@ -249985,22 +250498,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Odeslat pozvánku" + "value" : "Odeslat pozvánky" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Odeslat pozvánky" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Odeslat pozvánky" + "value" : "Odeslat pozvánku" } }, "other" : { @@ -250025,37 +250538,37 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Anfon Gwahoddiadau" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "Anfon Gwahoddiad" + "value" : "Anfon Gwahoddiadau" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Anfon Gwahoddiadau" + "value" : "Anfon Gwahoddiad" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Anfon Gwahoddiadau" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "Anfon Gwahoddiadau" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Anfon Gwahoddiadau" @@ -250469,25 +250982,25 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "שלח הזמנה" + "value" : "שלח הזמנות" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "שלח הזמנות" + "value" : "שלח הזמנה" } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "שלח הזמנות" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "שלח הזמנות" @@ -250537,16 +251050,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Pošalji pozivnicu" + "value" : "Pošalji pozivnice" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Pošalji pozivnice" + "value" : "Pošalji pozivnicu" } }, "other" : { @@ -250883,22 +251396,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Siųsti pakvietimą" + "value" : "Siųsti pakvietimus" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Siųsti pakvietimus" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Siųsti pakvietimus" + "value" : "Siųsti pakvietimą" } }, "other" : { @@ -251219,22 +251732,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Wyślij zaproszenie" + "value" : "Wyślij zaproszenia" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Wyślij zaproszenia" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Wyślij zaproszenia" + "value" : "Wyślij zaproszenie" } }, "other" : { @@ -251343,16 +251856,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Trimite invitația" + "value" : "Trimite invitațiile" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Trimite invitațiile" + "value" : "Trimite invitația" } }, "other" : { @@ -251377,22 +251890,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Отправить приглашение" + "value" : "Отправить приглашения" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Отправить приглашения" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Отправить приглашения" + "value" : "Отправить приглашение" } }, "other" : { @@ -251417,22 +251930,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Pošalji pozivnicu" + "value" : "Pošalji pozivnice" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Pošalji pozivnice" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Pošalji pozivnice" + "value" : "Pošalji pozivnicu" } }, "other" : { @@ -251485,22 +251998,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Poslať pozvánku" + "value" : "Poslať pozvánky" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Poslať pozvánky" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Poslať pozvánky" + "value" : "Poslať pozvánku" } }, "other" : { @@ -251525,28 +252038,28 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Pošlji povabilo" + "value" : "Pošlji povabila" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Pošlji povabili" + "value" : "Pošlji povabilo" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Pošlji povabila" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "Pošlji povabila" + "value" : "Pošlji povabili" } } } @@ -251593,16 +252106,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Пошаљи позивницу" + "value" : "Пошаљи позивнице" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Пошаљи позивнице" + "value" : "Пошаљи позивницу" } }, "other" : { @@ -251627,16 +252140,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Pošalji pozivnicu" + "value" : "Pošalji pozivnice" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Pošalji pozivnice" + "value" : "Pošalji pozivnicu" } }, "other" : { @@ -251823,19 +252336,19 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Надіслати запрошення" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Надіслати запрошення" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Надіслати запрошення" @@ -259231,37 +259744,37 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "رسائل جديدة" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "رسالة جديدة" + "value" : "رسائل جديدة" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "رسائل جديدة" + "value" : "رسالة جديدة" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "رسائل جديدة" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "رسائل جديدة" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "رسائل جديدة" @@ -259339,22 +259852,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Новае паведамленне" + "value" : "Новыя паведамленні" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Новыя паведамленні" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Новыя паведамленні" + "value" : "Новае паведамленне" } }, "other" : { @@ -259463,22 +259976,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nová zpráva" + "value" : "Nové zprávy" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Nové zprávy" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Nové zprávy" + "value" : "Nová zpráva" } }, "other" : { @@ -259503,37 +260016,37 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Negeseuon Newydd" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "Neges Newydd" + "value" : "Negeseuon Newydd" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Negeseuon Newydd" + "value" : "Neges Newydd" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Negeseuon Newydd" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "Negeseuon Newydd" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Negeseuon Newydd" @@ -259947,25 +260460,25 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "הודעה חדשה" + "value" : "הודעות חדשות" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "הודעות חדשות" + "value" : "הודעה חדשה" } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "הודעות חדשות" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "הודעות חדשות" @@ -260015,16 +260528,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nova poruka" + "value" : "Nove poruke" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Nove poruke" + "value" : "Nova poruka" } }, "other" : { @@ -260361,22 +260874,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nauja žinutė" + "value" : "Naujos žinutės" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Naujos žinutės" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Naujos žinutės" + "value" : "Nauja žinutė" } }, "other" : { @@ -260401,19 +260914,19 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "zero" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Jauna ziņa" } }, - "one" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Jauna ziņa" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Jauna ziņa" @@ -260703,22 +261216,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nowa wiadomość" + "value" : "Nowe wiadomości" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Nowe wiadomości" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Nowe wiadomości" + "value" : "Nowa wiadomość" } }, "other" : { @@ -260827,16 +261340,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Mesaj nou" + "value" : "Mesaje noi" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Mesaje noi" + "value" : "Mesaj nou" } }, "other" : { @@ -260861,22 +261374,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Новое сообщение" + "value" : "Новые сообщения" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Новые сообщения" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Новые сообщения" + "value" : "Новое сообщение" } }, "other" : { @@ -260901,22 +261414,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nova poruka" + "value" : "Nove poruke" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Nove poruke" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Nove poruke" + "value" : "Nova poruka" } }, "other" : { @@ -260969,22 +261482,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nová správa" + "value" : "Nové správy" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Nové správy" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Nové správy" + "value" : "Nová správa" } }, "other" : { @@ -261009,28 +261522,28 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Novo sporočilo" + "value" : "Nova sporočila" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Novi sporočili" + "value" : "Novo sporočilo" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Nova sporočila" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "Nova sporočila" + "value" : "Novi sporočili" } } } @@ -261077,16 +261590,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Нова порука" + "value" : "Нове поруке" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Нове поруке" + "value" : "Нова порука" } }, "other" : { @@ -261111,16 +261624,16 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Nova poruka" + "value" : "Nove poruke" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Nove poruke" + "value" : "Nova poruka" } }, "other" : { @@ -261307,22 +261820,22 @@ "formatSpecifier" : "lld", "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Нове повідомлення" + "value" : "Нові повідомлення" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Нові повідомлення" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Нові повідомлення" + "value" : "Нове повідомлення" } }, "other" : { @@ -262470,37 +262983,37 @@ "ar" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "لديك %lld رسائل جديدة." } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "لديك رسالة جديدة." + "value" : "لديك %lld رسائل جديدة." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "لديك رسالتين %lld جدد." + "value" : "لديك رسالة جديدة." } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "لديك %lld رسائل جديدة." } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "لديك %lld رسائل جديدة." + "value" : "لديك رسالتين %lld جدد." } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "لديك %lld رسائل جديدة." @@ -262548,12 +263061,6 @@ "be" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы атрымалі новае паведамленне." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -262566,6 +263073,12 @@ "value" : "У вас %lld новых паведамленняў." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы атрымалі новае паведамленне." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -262632,12 +263145,6 @@ "cs" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Máte novou zprávu." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -262650,6 +263157,12 @@ "value" : "Máte %lld nových zpráv." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Máte novou zprávu." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -262662,37 +263175,37 @@ "cy" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "Mae gennych %lld negeseuon newydd." } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Mae gennych %lld negeseuon newydd." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Mae gennych %lld negeseuon newydd." } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Mae gennych %lld negeseuon newydd." } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "Mae gennych %lld negeseuon newydd." } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Mae gennych %lld negeseuon newydd." @@ -262974,25 +263487,25 @@ "he" : { "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "יש לך הודעה חדשה." + "value" : "יש לך %lld הודעות חדשות." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "יש לך %lld הודעות חדשות." + "value" : "יש לך הודעה חדשה." } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "יש לך %lld הודעות חדשות." } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "יש לך %lld הודעות חדשות." @@ -263022,16 +263535,16 @@ "hr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Imate novu poruku!" + "value" : "Imate %lld novih poruka!" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Imate %lld novih poruka!" + "value" : "Imate novu poruku!" } }, "other" : { @@ -263238,22 +263751,22 @@ "lt" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Gavote naują žinutę." + "value" : "Gavote %lld naujas žinutes." } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "Gavote %lld naujas žinutes." } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Gavote %lld naujas žinutes." + "value" : "Gavote naują žinutę." } }, "other" : { @@ -263268,19 +263781,19 @@ "lv" : { "variations" : { "plural" : { - "zero" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "Jums ir %lld jaunas ziņas." } }, - "one" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "Jums ir %lld jaunas ziņas." } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "Jums ir %lld jaunas ziņas." @@ -263478,12 +263991,6 @@ "pl" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Masz nową wiadomość." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -263496,6 +264003,12 @@ "value" : "Masz %lld nowych wiadomości." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masz nową wiadomość." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -263562,16 +264075,16 @@ "ro" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Ai primit un mesaj nou." + "value" : "Ai %lld mesaje noi." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Ai %lld mesaje noi." + "value" : "Ai primit un mesaj nou." } }, "other" : { @@ -263586,12 +264099,6 @@ "ru" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "У вас новое сообщение." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -263604,6 +264111,12 @@ "value" : "У вас %lld новых сообщений." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "У вас новое сообщение." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -263616,12 +264129,6 @@ "sh" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Imate novu poruku." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -263634,6 +264141,12 @@ "value" : "Imate %lld novih poruka." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imate novu poruku." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -263664,12 +264177,6 @@ "sk" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Máte novú správu." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -263682,6 +264189,12 @@ "value" : "Máte %lld nových správ." } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Máte novú správu." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -263694,28 +264207,28 @@ "sl" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Imate novo sporočilo." + "value" : "Imate %lld nova sporočila." } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Imate %lld novi sporočili." + "value" : "Imate novo sporočilo." } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "Imate %lld nova sporočila." + "value" : "Imate %lld novih sporočil." } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "Imate %lld novih sporočil." + "value" : "Imate %lld novi sporočili." } } } @@ -263742,16 +264255,16 @@ "sr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Имате нову поруку." + "value" : "Имате %lld нове поруке." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Имате %lld нове поруке." + "value" : "Имате нову поруку." } }, "other" : { @@ -263766,16 +264279,16 @@ "sr-Latn" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Imate novu poruku." + "value" : "Imate %lld nove poruke." } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Imate %lld nove poruke." + "value" : "Imate novu poruku." } }, "other" : { @@ -263892,12 +264405,6 @@ "uk" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ви отримали нове повідомлення." - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -263910,6 +264417,12 @@ "value" : "Ви отримали %lld нових повідомлень" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви отримали нове повідомлення." + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -266412,485 +266925,6 @@ } } }, - "messageRequestYouHaveAccepted" : { - "extractionState" : "manual", - "localizations" : { - "af" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jy het die boodskapaansoek aanvaar van {name}." - } - }, - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "لقد وافقتَ على طلب الرسالة من {name}." - } - }, - "az" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} göndərən mesaj tələbini qəbul etdiniz." - } - }, - "bal" : { - "stringUnit" : { - "state" : "translated", - "value" : "ما گپ درخواست قبول کردی {name} سے." - } - }, - "be" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы прынялі запыт на паведамленне ад {name}." - } - }, - "bg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Приели сте искането за съобщение от {name}." - } - }, - "bn" : { - "stringUnit" : { - "state" : "translated", - "value" : "আপনি {name} এর মেসেজ অনুরোধ গ্রহণ করেছেন।" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Heu acceptat la sol·licitud de missatge de {name}." - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Přijali jste žádost o komunikaci od {name}." - } - }, - "cy" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mewngofnodwyd cais neges gan {name}." - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du har accepteret besked-anmodningen fra {name}." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du hast die Nachrichtenanfrage von {name} angenommen." - } - }, - "el" : { - "stringUnit" : { - "state" : "translated", - "value" : "Αποδεχτήκατε το αίτημα μηνύματος από {name}." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You have accepted the message request from {name}." - } - }, - "eo" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vi akceptis la mesaĝan peton de {name}." - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ha aceptado la solicitud de mensaje de {name}." - } - }, - "es-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Has aceptado la solicitud de mensaje de {name}." - } - }, - "et" : { - "stringUnit" : { - "state" : "translated", - "value" : "Olete sõnumitaotluse {name} vastu võtnud." - } - }, - "eu" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}-(r)en mezua onartu duzu." - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "شما درخواست پیام را از {name} قبول کردید." - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hyväksyit viestipyynnön käyttäjältä {name}." - } - }, - "fil" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tinanggap mo ang kahilingan sa pagmemensahe mula kay {name}." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous avez accepté la demande de message de {name}." - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "A túa solicitude de mensaxe de {name} foi aceptada." - } - }, - "ha" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ka amince da tambayar saƙo daga {name}." - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "קיבלת את בקשת ההודעה מ{name}." - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "आपने {name} से संदेश अनुरोध स्वीकार कर लिया है।" - } - }, - "hr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prihvatili ste zahtjev za poruku od {name}." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elfogadtad {name} üzenetkérését." - } - }, - "hy-AM" : { - "stringUnit" : { - "state" : "translated", - "value" : "Դուք ընդունել եք հաղորդագրության հարցումը {name}֊ից։" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anda telah menerima permintaan pesan dari {name}." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hai accettato la richiesta di messaggio da {name}." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}さんのメッセージリクエストを承認しました" - } - }, - "ka" : { - "stringUnit" : { - "state" : "translated", - "value" : "თქვენ {name} მესიჯ ითხოვა დამტკიცეთ." - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "អ្នកបានទទួលយកការស្នើសុំសារពី {name} ។" - } - }, - "kn" : { - "stringUnit" : { - "state" : "translated", - "value" : "ನೀವು {name} ನಿಂದ ಸಂದೇಶ ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸಿದ್ದೀರಿ." - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}의 메시지 요청을 수락했습니다." - } - }, - "ku" : { - "stringUnit" : { - "state" : "translated", - "value" : "تۆ داواکاری نامەکانت لە {name} پەسند کرد." - } - }, - "ku-TR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Te daxwaza peyamê ji {name}ê qebûl kir." - } - }, - "lg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Okirizza okusaba okw'obubaka okuva {name}." - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sutikote žinučių užklausą iš {name}." - } - }, - "lv" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jūs esat pieņēmuši ziņojuma pieprasījumu no {name}." - } - }, - "mk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Го прифативте барањето за порака од {name}." - } - }, - "mn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Та {name} илгээсэн мессеж хүсэлт хүлээн зөвшөөрсөн байна." - } - }, - "ms" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anda telah menerima permintaan mesej daripada {name}." - } - }, - "my" : { - "stringUnit" : { - "state" : "translated", - "value" : "သင်သည် {name} ၏ စာတောင်းဆိုခြင်းကို လက်ခံလိုက်ပါပြီ။" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du har godtatt meldingsforespørselen fra {name}.." - } - }, - "nb-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du har godtatt meldingsforespørselen fra {name}." - } - }, - "ne-NP" : { - "stringUnit" : { - "state" : "translated", - "value" : "तपाईंले {name} बाट सन्देश अनुरोध स्वीकृत गर्नुभएको छ।" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "U heeft het berichtverzoek van {name} geaccepteerd." - } - }, - "nn-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du har godtatt meldingsforespørselen frå {name}." - } - }, - "ny" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mwavomereza pempho la uthenga kuchokera kwa {name}." - } - }, - "pa-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਤੁਸੀਂ {name} ਦਾ ਮੈਸਜ ਰਿਕਵੇਸਟ ਮਨਜ਼ੂਰ ਕਰ ਲਿਆ ਹੈ।" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zaakceptowano prośbę o wiadomość od: {name}." - } - }, - "ps" : { - "stringUnit" : { - "state" : "translated", - "value" : "تاسو د {name} څخه پیغام غوښتنه منلې ده." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Você aceitou o pedido de mensagem de {name}." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aceitou o pedido de mensagem de {name}." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ai acceptat cererea de mesaj de la {name}." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы приняли запрос на переписку от {name}." - } - }, - "sh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prihvatio si zahtjev za poruku od {name}." - } - }, - "si-LK" : { - "stringUnit" : { - "state" : "translated", - "value" : "ඔබ {name}ගේ පණිවිඩ ඉල්ලීම පිළිගෙන ඇත." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prijali ste žiadosť o správu od {name}." - } - }, - "sl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sprejeli ste zahtevo za sporočilo od {name}." - } - }, - "sq" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ju keni pranuar kërkesën për mesazh nga {name}." - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Прихватили сте захтев за поруку од {name}." - } - }, - "sr-Latn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prihvatili ste zahtev za poruku od {name}" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du har godkänt meddelandeförfrågan från {name}." - } - }, - "sw" : { - "stringUnit" : { - "state" : "translated", - "value" : "Umeidhinisha ombi la ujumbe kutoka kwa {name}." - } - }, - "ta" : { - "stringUnit" : { - "state" : "translated", - "value" : "நீங்கள் {name} -ன் செய்தித்தொகுப்பை ஏற்றுக்கொண்டீர்கள்." - } - }, - "te" : { - "stringUnit" : { - "state" : "translated", - "value" : "మీరు {name} నుండి మెసేజ్ అభ్యర్థనను అంగీకరించారు." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คุณได้ยอมรับคำขอข้อความจาก {name}​ แล้ว" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} kullanıcısının mesaj isteğini kabul ettiniz." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ви прийняли запит на повідомлення від {name}." - } - }, - "ur-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "آپ نے {name} کی پیغام درخواست کو قبول کیا ہے۔" - } - }, - "uz" : { - "stringUnit" : { - "state" : "translated", - "value" : "Siz {name} dan xabar so'rovini qabul qildingiz." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn đã chấp nhận yêu cầu tin nhắn từ {name}." - } - }, - "xh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uwamkele isicelo somyalezo esivela ku {name}." - } - }, - "zh-CN" : { - "stringUnit" : { - "state" : "translated", - "value" : "您已接受来自{name}的消息请求。" - } - }, - "zh-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "您已接受來自 {name} 的訊息請求。" - } - } - } - }, "messageRequestsAcceptDescription" : { "extractionState" : "manual", "localizations" : { @@ -271220,6 +271254,964 @@ } } }, + "messageRequestYouHaveAccepted" : { + "extractionState" : "manual", + "localizations" : { + "af" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jy het die boodskapaansoek aanvaar van {name}." + } + }, + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لقد وافقتَ على طلب الرسالة من {name}." + } + }, + "az" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} göndərən mesaj tələbini qəbul etdiniz." + } + }, + "bal" : { + "stringUnit" : { + "state" : "translated", + "value" : "ما گپ درخواست قبول کردی {name} سے." + } + }, + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы прынялі запыт на паведамленне ад {name}." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Приели сте искането за съобщение от {name}." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনি {name} এর মেসেজ অনুরোধ গ্রহণ করেছেন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heu acceptat la sol·licitud de missatge de {name}." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přijali jste žádost o komunikaci od {name}." + } + }, + "cy" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mewngofnodwyd cais neges gan {name}." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har accepteret besked-anmodningen fra {name}." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast die Nachrichtenanfrage von {name} angenommen." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποδεχτήκατε το αίτημα μηνύματος από {name}." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You have accepted the message request from {name}." + } + }, + "eo" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi akceptis la mesaĝan peton de {name}." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ha aceptado la solicitud de mensaje de {name}." + } + }, + "es-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Has aceptado la solicitud de mensaje de {name}." + } + }, + "et" : { + "stringUnit" : { + "state" : "translated", + "value" : "Olete sõnumitaotluse {name} vastu võtnud." + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}-(r)en mezua onartu duzu." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شما درخواست پیام را از {name} قبول کردید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hyväksyit viestipyynnön käyttäjältä {name}." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinanggap mo ang kahilingan sa pagmemensahe mula kay {name}." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez accepté la demande de message de {name}." + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "A túa solicitude de mensaxe de {name} foi aceptada." + } + }, + "ha" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ka amince da tambayar saƙo daga {name}." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "קיבלת את בקשת ההודעה מ{name}." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपने {name} से संदेश अनुरोध स्वीकार कर लिया है।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihvatili ste zahtjev za poruku od {name}." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elfogadtad {name} üzenetkérését." + } + }, + "hy-AM" : { + "stringUnit" : { + "state" : "translated", + "value" : "Դուք ընդունել եք հաղորդագրության հարցումը {name}֊ից։" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda telah menerima permintaan pesan dari {name}." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai accettato la richiesta di messaggio da {name}." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}さんのメッセージリクエストを承認しました" + } + }, + "ka" : { + "stringUnit" : { + "state" : "translated", + "value" : "თქვენ {name} მესიჯ ითხოვა დამტკიცეთ." + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "អ្នកបានទទួលយកការស្នើសុំសារពី {name} ។" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೀವು {name} ನಿಂದ ಸಂದೇಶ ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸಿದ್ದೀರಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name}의 메시지 요청을 수락했습니다." + } + }, + "ku" : { + "stringUnit" : { + "state" : "translated", + "value" : "تۆ داواکاری نامەکانت لە {name} پەسند کرد." + } + }, + "ku-TR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Te daxwaza peyamê ji {name}ê qebûl kir." + } + }, + "lg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okirizza okusaba okw'obubaka okuva {name}." + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sutikote žinučių užklausą iš {name}." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jūs esat pieņēmuši ziņojuma pieprasījumu no {name}." + } + }, + "mk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Го прифативте барањето за порака од {name}." + } + }, + "mn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Та {name} илгээсэн мессеж хүсэлт хүлээн зөвшөөрсөн байна." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda telah menerima permintaan mesej daripada {name}." + } + }, + "my" : { + "stringUnit" : { + "state" : "translated", + "value" : "သင်သည် {name} ၏ စာတောင်းဆိုခြင်းကို လက်ခံလိုက်ပါပြီ။" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har godtatt meldingsforespørselen fra {name}.." + } + }, + "nb-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har godtatt meldingsforespørselen fra {name}." + } + }, + "ne-NP" : { + "stringUnit" : { + "state" : "translated", + "value" : "तपाईंले {name} बाट सन्देश अनुरोध स्वीकृत गर्नुभएको छ।" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "U heeft het berichtverzoek van {name} geaccepteerd." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har godtatt meldingsforespørselen frå {name}." + } + }, + "ny" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mwavomereza pempho la uthenga kuchokera kwa {name}." + } + }, + "pa-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਤੁਸੀਂ {name} ਦਾ ਮੈਸਜ ਰਿਕਵੇਸਟ ਮਨਜ਼ੂਰ ਕਰ ਲਿਆ ਹੈ।" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaakceptowano prośbę o wiadomość od: {name}." + } + }, + "ps" : { + "stringUnit" : { + "state" : "translated", + "value" : "تاسو د {name} څخه پیغام غوښتنه منلې ده." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você aceitou o pedido de mensagem de {name}." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aceitou o pedido de mensagem de {name}." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ai acceptat cererea de mesaj de la {name}." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы приняли запрос на переписку от {name}." + } + }, + "sh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihvatio si zahtjev za poruku od {name}." + } + }, + "si-LK" : { + "stringUnit" : { + "state" : "translated", + "value" : "ඔබ {name}ගේ පණිවිඩ ඉල්ලීම පිළිගෙන ඇත." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijali ste žiadosť o správu od {name}." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprejeli ste zahtevo za sporočilo od {name}." + } + }, + "sq" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ju keni pranuar kërkesën për mesazh nga {name}." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прихватили сте захтев за поруку од {name}." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihvatili ste zahtev za poruku od {name}" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har godkänt meddelandeförfrågan från {name}." + } + }, + "sw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Umeidhinisha ombi la ujumbe kutoka kwa {name}." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீங்கள் {name} -ன் செய்தித்தொகுப்பை ஏற்றுக்கொண்டீர்கள்." + } + }, + "te" : { + "stringUnit" : { + "state" : "translated", + "value" : "మీరు {name} నుండి మెసేజ్ అభ్యర్థనను అంగీకరించారు." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณได้ยอมรับคำขอข้อความจาก {name}​ แล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "{name} kullanıcısının mesaj isteğini kabul ettiniz." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви прийняли запит на повідомлення від {name}." + } + }, + "ur-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ نے {name} کی پیغام درخواست کو قبول کیا ہے۔" + } + }, + "uz" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siz {name} dan xabar so'rovini qabul qildingiz." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn đã chấp nhận yêu cầu tin nhắn từ {name}." + } + }, + "xh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uwamkele isicelo somyalezo esivela ku {name}." + } + }, + "zh-CN" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已接受来自{name}的消息请求。" + } + }, + "zh-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已接受來自 {name} 的訊息請求。" + } + } + } + }, + "messages" : { + "extractionState" : "manual", + "localizations" : { + "af" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boodskappe" + } + }, + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الرسائل" + } + }, + "az" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mesajlar" + } + }, + "bal" : { + "stringUnit" : { + "state" : "translated", + "value" : "Messages" + } + }, + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Паведамленні" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Съобщения" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "মেসেজ" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Missatges" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zprávy" + } + }, + "cy" : { + "stringUnit" : { + "state" : "translated", + "value" : "Negeseuon" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beskeder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nachrichten" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Μηνύματα" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Messages" + } + }, + "eo" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mesaĝoj" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mensajes" + } + }, + "es-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mensajes" + } + }, + "et" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sõnumid" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mezuak" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "پیام‌ها" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viestit" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mga Mensahe" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Messages" + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mensaxes" + } + }, + "ha" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saƙonni" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הודעות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "संदेश" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poruke" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üzenetek" + } + }, + "hy-AM" : { + "stringUnit" : { + "state" : "translated", + "value" : "Հաղորդագրություններ" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pesan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Messaggi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メッセージ" + } + }, + "ka" : { + "stringUnit" : { + "state" : "translated", + "value" : "შეტყობინებები" + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "សារ" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸಂದೇಶಗಳು" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메시지" + } + }, + "ku" : { + "stringUnit" : { + "state" : "translated", + "value" : "نامەکان" + } + }, + "ku-TR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Peyam" + } + }, + "lg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obubaka" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Žinutės" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ziņojumi" + } + }, + "mk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пораки" + } + }, + "mn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Мессежүүд" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mesej" + } + }, + "my" : { + "stringUnit" : { + "state" : "translated", + "value" : "မက်ဆေ့ချ်များ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meldinger" + } + }, + "nb-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meldinger" + } + }, + "ne-NP" : { + "stringUnit" : { + "state" : "translated", + "value" : "सन्देशहरू" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Berichten" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meldingar" + } + }, + "ny" : { + "stringUnit" : { + "state" : "translated", + "value" : "Umauthenga" + } + }, + "pa-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਸੁਨੇਹੇ" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wiadomości" + } + }, + "ps" : { + "stringUnit" : { + "state" : "translated", + "value" : "پیغامونه" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mensagens" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mensagens" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mesaje" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сообщения" + } + }, + "sh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poruke" + } + }, + "si-LK" : { + "stringUnit" : { + "state" : "translated", + "value" : "පණිවිඩ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Správy" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sporočila" + } + }, + "sq" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mesazhe" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Поруке" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poruke" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meddelanden" + } + }, + "sw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jumbe" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "செய்திகள்" + } + }, + "te" : { + "stringUnit" : { + "state" : "translated", + "value" : "సందేశాలు" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ข้อความ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İletiler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повідомлення" + } + }, + "ur-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "پیغامات" + } + }, + "uz" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xabarlar" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tin nhắn" + } + }, + "xh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imiyalezo" + } + }, + "zh-CN" : { + "stringUnit" : { + "state" : "translated", + "value" : "消息" + } + }, + "zh-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "訊息" + } + } + } + }, "messageSelect" : { "extractionState" : "manual", "localizations" : { @@ -276453,485 +277445,6 @@ } } }, - "messages" : { - "extractionState" : "manual", - "localizations" : { - "af" : { - "stringUnit" : { - "state" : "translated", - "value" : "Boodskappe" - } - }, - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الرسائل" - } - }, - "az" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mesajlar" - } - }, - "bal" : { - "stringUnit" : { - "state" : "translated", - "value" : "Messages" - } - }, - "be" : { - "stringUnit" : { - "state" : "translated", - "value" : "Паведамленні" - } - }, - "bg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Съобщения" - } - }, - "bn" : { - "stringUnit" : { - "state" : "translated", - "value" : "মেসেজ" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Missatges" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zprávy" - } - }, - "cy" : { - "stringUnit" : { - "state" : "translated", - "value" : "Negeseuon" - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Beskeder" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nachrichten" - } - }, - "el" : { - "stringUnit" : { - "state" : "translated", - "value" : "Μηνύματα" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Messages" - } - }, - "eo" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mesaĝoj" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mensajes" - } - }, - "es-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mensajes" - } - }, - "et" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sõnumid" - } - }, - "eu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mezuak" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "پیام‌ها" - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Viestit" - } - }, - "fil" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mga Mensahe" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Messages" - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mensaxes" - } - }, - "ha" : { - "stringUnit" : { - "state" : "translated", - "value" : "Saƙonni" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "הודעות" - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "संदेश" - } - }, - "hr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poruke" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Üzenetek" - } - }, - "hy-AM" : { - "stringUnit" : { - "state" : "translated", - "value" : "Հաղորդագրություններ" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pesan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Messaggi" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "メッセージ" - } - }, - "ka" : { - "stringUnit" : { - "state" : "translated", - "value" : "შეტყობინებები" - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "សារ" - } - }, - "kn" : { - "stringUnit" : { - "state" : "translated", - "value" : "ಸಂದೇಶಗಳು" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "메시지" - } - }, - "ku" : { - "stringUnit" : { - "state" : "translated", - "value" : "نامەکان" - } - }, - "ku-TR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Peyam" - } - }, - "lg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obubaka" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Žinutės" - } - }, - "lv" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ziņojumi" - } - }, - "mk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Пораки" - } - }, - "mn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Мессежүүд" - } - }, - "ms" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mesej" - } - }, - "my" : { - "stringUnit" : { - "state" : "translated", - "value" : "မက်ဆေ့ချ်များ" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Meldinger" - } - }, - "nb-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Meldinger" - } - }, - "ne-NP" : { - "stringUnit" : { - "state" : "translated", - "value" : "सन्देशहरू" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Berichten" - } - }, - "nn-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Meldingar" - } - }, - "ny" : { - "stringUnit" : { - "state" : "translated", - "value" : "Umauthenga" - } - }, - "pa-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਸੁਨੇਹੇ" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wiadomości" - } - }, - "ps" : { - "stringUnit" : { - "state" : "translated", - "value" : "پیغامونه" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mensagens" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mensagens" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mesaje" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Сообщения" - } - }, - "sh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poruke" - } - }, - "si-LK" : { - "stringUnit" : { - "state" : "translated", - "value" : "පණිවිඩ" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Správy" - } - }, - "sl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sporočila" - } - }, - "sq" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mesazhe" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Поруке" - } - }, - "sr-Latn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poruke" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Meddelanden" - } - }, - "sw" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jumbe" - } - }, - "ta" : { - "stringUnit" : { - "state" : "translated", - "value" : "செய்திகள்" - } - }, - "te" : { - "stringUnit" : { - "state" : "translated", - "value" : "సందేశాలు" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ข้อความ" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "İletiler" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Повідомлення" - } - }, - "ur-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "پیغامات" - } - }, - "uz" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xabarlar" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tin nhắn" - } - }, - "xh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Imiyalezo" - } - }, - "zh-CN" : { - "stringUnit" : { - "state" : "translated", - "value" : "消息" - } - }, - "zh-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "訊息" - } - } - } - }, "minimize" : { "extractionState" : "manual", "localizations" : { @@ -278848,6 +279361,17 @@ } } }, + "nicknameErrorShorter" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please enter a shorter nickname" + } + } + } + }, "nicknameRemove" : { "extractionState" : "manual", "localizations" : { @@ -280285,485 +280809,6 @@ } } }, - "noSuggestions" : { - "extractionState" : "manual", - "localizations" : { - "af" : { - "stringUnit" : { - "state" : "translated", - "value" : "Geen Voorstelle" - } - }, - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "لا اقتراحات" - } - }, - "az" : { - "stringUnit" : { - "state" : "translated", - "value" : "Təklif yoxdur" - } - }, - "bal" : { - "stringUnit" : { - "state" : "translated", - "value" : "هیچں کہاون نا یافت" - } - }, - "be" : { - "stringUnit" : { - "state" : "translated", - "value" : "Няма прапаноў" - } - }, - "bg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Няма предложения" - } - }, - "bn" : { - "stringUnit" : { - "state" : "translated", - "value" : "কোনো প্রস্তাব নেই" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sense suggeriments" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Žádné návrhy" - } - }, - "cy" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dim Awgrymiadau" - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ingen forslag" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Keine Vorschläge" - } - }, - "el" : { - "stringUnit" : { - "state" : "translated", - "value" : "Χωρίς Προτάσεις" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "No Suggestions" - } - }, - "eo" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neniaj proponoj" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sin sugerencias" - } - }, - "es-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sin sugerencias" - } - }, - "et" : { - "stringUnit" : { - "state" : "translated", - "value" : "Soovitusi pole" - } - }, - "eu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ez dago iradokizunik" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "بدون پیشنهاد" - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ei ehdotuksia" - } - }, - "fil" : { - "stringUnit" : { - "state" : "translated", - "value" : "Walang mga mungkahi" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pas de suggestions" - } - }, - "gl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sen suxestións" - } - }, - "ha" : { - "stringUnit" : { - "state" : "translated", - "value" : "Babu Shawarwari" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "אין הצעות" - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "कोई सुझाव नहीं हैं" - } - }, - "hr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nema prijedloga" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nincsenek javaslatok" - } - }, - "hy-AM" : { - "stringUnit" : { - "state" : "translated", - "value" : "Առաջարկներ չկան" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tidak ada sugesti" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nessun suggerimento" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "候補はありません" - } - }, - "ka" : { - "stringUnit" : { - "state" : "translated", - "value" : "შემოთავაზებები არაა" - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "មិនមានយោបល់កែប្រែទេ" - } - }, - "kn" : { - "stringUnit" : { - "state" : "translated", - "value" : "ಯಾವುದೇ ಸಲಹೆಗಳು ಇಲ್ಲ" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "제안 사항 없음" - } - }, - "ku" : { - "stringUnit" : { - "state" : "translated", - "value" : "هیچ پێشنیاری نییە" - } - }, - "ku-TR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ti pêşniyarek nîne" - } - }, - "lg" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tewali bisuubizo" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "No Suggestions" - } - }, - "lv" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nav ieteikumu" - } - }, - "mk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нема предлози" - } - }, - "mn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Санал байхгүй" - } - }, - "ms" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tiada Cadangan" - } - }, - "my" : { - "stringUnit" : { - "state" : "translated", - "value" : "အကြံဉာ၊ မရှိဘူး" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ingen forslag" - } - }, - "nb-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ingen forslag" - } - }, - "ne-NP" : { - "stringUnit" : { - "state" : "translated", - "value" : "कुनै सुझाव छैन" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Geen suggesties" - } - }, - "nn-NO" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ingen forslag" - } - }, - "ny" : { - "stringUnit" : { - "state" : "translated", - "value" : "Palibe Zotsiriza" - } - }, - "pa-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਕੋਈ ਸੁਝਾਅ ਨਹੀਂ" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Brak sugestii" - } - }, - "ps" : { - "stringUnit" : { - "state" : "translated", - "value" : "هیڅ وړاندیزونه نشته" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sem Sugestões" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sem Sugestões" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fără sugestii" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нет предложений" - } - }, - "sh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nema prijedloga" - } - }, - "si-LK" : { - "stringUnit" : { - "state" : "translated", - "value" : "යෝජනා නැත" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Žiadne návrhy" - } - }, - "sl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ni predlogov" - } - }, - "sq" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nuk ka sugjerime" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нема предлога" - } - }, - "sr-Latn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nema predloga" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inga förslag" - } - }, - "sw" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hakuna Mapendekezo" - } - }, - "ta" : { - "stringUnit" : { - "state" : "translated", - "value" : "பரிந்துரைகள் இல்லை" - } - }, - "te" : { - "stringUnit" : { - "state" : "translated", - "value" : "సూచనలు ఏమి వద్దు" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ไม่มีคำแนะนำ" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Öneri Yok" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Немає припущень" - } - }, - "ur-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "کوئی تجاویز نہیں" - } - }, - "uz" : { - "stringUnit" : { - "state" : "translated", - "value" : "Takliflar yo'q" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có đề xuất" - } - }, - "xh" : { - "stringUnit" : { - "state" : "translated", - "value" : "Akukho zithaziso" - } - }, - "zh-CN" : { - "stringUnit" : { - "state" : "translated", - "value" : "没有拼写建议" - } - }, - "zh-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "沒有建議" - } - } - } - }, "none" : { "extractionState" : "manual", "localizations" : { @@ -281243,481 +281288,481 @@ } } }, - "notNow" : { + "noSuggestions" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Nie nou nie" + "value" : "Geen Voorstelle" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "ليس الآن" + "value" : "لا اقتراحات" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "İndi yox" + "value" : "Təklif yoxdur" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "ھِن نا" + "value" : "هیچں کہاون نا یافت" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Не зараз" + "value" : "Няма прапаноў" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Не сега" + "value" : "Няма предложения" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "এখন নয়" + "value" : "কোনো প্রস্তাব নেই" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Ara no" + "value" : "Sense suggeriments" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Teď ne" + "value" : "Žádné návrhy" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Nid nawr" + "value" : "Dim Awgrymiadau" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Ikke nu" + "value" : "Ingen forslag" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Nicht jetzt" + "value" : "Keine Vorschläge" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Όχι τώρα" + "value" : "Χωρίς Προτάσεις" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Not now" + "value" : "No Suggestions" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Ne nun" + "value" : "Neniaj proponoj" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ahora no" + "value" : "Sin sugerencias" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Ahora no" + "value" : "Sin sugerencias" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Mitte praegu" + "value" : "Soovitusi pole" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Ez orain" + "value" : "Ez dago iradokizunik" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "حالا نه" + "value" : "بدون پیشنهاد" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Ei nyt" + "value" : "Ei ehdotuksia" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Hindi Ngayon" + "value" : "Walang mga mungkahi" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Pas maintenant" + "value" : "Pas de suggestions" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Agora non" + "value" : "Sen suxestións" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Ba Yanzu Ba" + "value" : "Babu Shawarwari" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "לא עכשיו" + "value" : "אין הצעות" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "अभी नहीं" + "value" : "कोई सुझाव नहीं हैं" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Ne sada" + "value" : "Nema prijedloga" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Most nem" + "value" : "Nincsenek javaslatok" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ոչ հիմա" + "value" : "Առաջարկներ չկան" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Lain kali" + "value" : "Tidak ada sugesti" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Non ora" + "value" : "Nessun suggerimento" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "後で" + "value" : "候補はありません" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ახლა არა" + "value" : "შემოთავაზებები არაა" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ពេលក្រោយ" + "value" : "មិនមានយោបល់កែប្រែទេ" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಈಗಲ್ಲ" + "value" : "ಯಾವುದೇ ಸಲಹೆಗಳು ಇಲ್ಲ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "나중에" + "value" : "제안 사항 없음" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "رێ پێنەدان" + "value" : "هیچ پێشنیاری نییە" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Rê pênedan" + "value" : "Ti pêşniyarek nîne" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Kaakati nedda" + "value" : "Tewali bisuubizo" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Ne dabar" + "value" : "No Suggestions" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Ne tagad" + "value" : "Nav ieteikumu" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Не сега" + "value" : "Нема предлози" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Одоохондоо үгүй" + "value" : "Санал байхгүй" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Bukan sekarang" + "value" : "Tiada Cadangan" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "အခု မဟုတ်ပါ" + "value" : "အကြံဉာ၊ မရှိဘူး" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ikke nå" + "value" : "Ingen forslag" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Ikke nå" + "value" : "Ingen forslag" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "अहिले होईन" + "value" : "कुनै सुझाव छैन" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nu niet" + "value" : "Geen suggesties" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Ikkje no" + "value" : "Ingen forslag" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Kunanka mana" + "value" : "Palibe Zotsiriza" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਹੁਣ ਨਹੀਂ" + "value" : "ਕੋਈ ਸੁਝਾਅ ਨਹੀਂ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nie teraz" + "value" : "Brak sugestii" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "اوس نه" + "value" : "هیڅ وړاندیزونه نشته" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Agora não" + "value" : "Sem Sugestões" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Agora não" + "value" : "Sem Sugestões" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Nu acum" + "value" : "Fără sugestii" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Не сейчас" + "value" : "Нет предложений" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Ne sada" + "value" : "Nema prijedloga" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "දැන් නොවේ" + "value" : "යෝජනා නැත" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Teraz nie" + "value" : "Žiadne návrhy" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Prekliči" + "value" : "Ni predlogov" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Jo tani" + "value" : "Nuk ka sugjerime" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Не сада" + "value" : "Нема предлога" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Ne sada" + "value" : "Nema predloga" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Inte nu" + "value" : "Inga förslag" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Sio sasa" + "value" : "Hakuna Mapendekezo" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "இப்பொழுது இல்லை" + "value" : "பரிந்துரைகள் இல்லை" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "ఇప్పుడు కాదు" + "value" : "సూచనలు ఏమి వద్దు" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ไม่ใช่ตอนนี้" + "value" : "ไม่มีคำแนะนำ" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Şimdi değil" + "value" : "Öneri Yok" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Не зараз" + "value" : "Немає припущень" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ابھی نہیں" + "value" : "کوئی تجاویز نہیں" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Hozir emas" + "value" : "Takliflar yo'q" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Không phải bây giờ" + "value" : "Không có đề xuất" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Hayi ngoku" + "value" : "Akukho zithaziso" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "下次再说" + "value" : "没有拼写建议" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "暫不" + "value" : "沒有建議" } } } @@ -293200,1439 +293245,1439 @@ } } }, - "notificationsMuteFor" : { + "notificationsMuted" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Stil vir {time_large}" + "value" : "Geskuif" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "صامت لمدة {time_large}" + "value" : "كتم" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} ərzində səsi kəs" + "value" : "Səssizdə" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} لئی خاموش" + "value" : "خاموش شتگ" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Выключыць гук на {time_large}" + "value" : "Заглушана" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Заглуши за {time_large}" + "value" : "Заглушено" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} এর জন্য নিঃশব্দ করুন" + "value" : "মিউট করে হয়েছে" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Silencia per {time_large}" + "value" : "Silenciat" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Ztlumit na {time_large}" + "value" : "Ztlumeno" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Tewi am {time_large}" + "value" : "Wedi tewi" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Udsæt for {time_large}" + "value" : "Lyden slået fra" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Stummschalten für {time_large}" + "value" : "Stumm gestellt" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Σίγαση για {time_large}" + "value" : "Σε Σίγαση" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Mute for {time_large}" + "value" : "Muted" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Silentigi por {time_large}" + "value" : "Silentigite" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciar por {time_large}" + "value" : "Silenciado" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciar por {time_large}" + "value" : "Silenciado" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Vaigista {time_large} ajaks" + "value" : "Vaigistatud" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Isildu {time_large} denborarako" + "value" : "Isilik" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "ساکت کردن برای {time_large}" + "value" : "بی‌صدا شده" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Mykistä ajaksi {time_large}" + "value" : "Mykistetty" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "I-mute para sa {time_large}" + "value" : "Muted" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Sourdine pour {time_large}" + "value" : "En sourdine" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciar por {time_large}" + "value" : "Silenciado" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Jigilewar muryar na tsawon lokaci {time_large}" + "value" : "An Jigilar" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "השתק עבור {time_large}" + "value" : "מושתק" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} के लिए म्यूट करें" + "value" : "म्यूट हो गए" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Utišaj na {time_large}" + "value" : "Utišano" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Némítás: {time_large}" + "value" : "Némítva" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Խլացնել {time_large}" + "value" : "Լուռ է" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Senyapkan selama {time_large}" + "value" : "Disenyapkan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Silenzia per {time_large}" + "value" : "Silenziato" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large}間ミュート" + "value" : "ミュート中" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ხმამაღლა {time_large}" + "value" : "ხმამაღლა" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បិទសំឡេង {time_large}" + "value" : "បានបិទ" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} ಗೆ ಸದ್ದಡಗಿಸಿ" + "value" : "ಸದ್ದಡಗಿಸಿದ್ದು" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} 동안 음소거" + "value" : "알림 꺼짐" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "کپکردن بۆ {time_large}" + "value" : "کپ کراوە" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Berdan çimase {time_large}" + "value" : "Berdayî" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Zikweka ekiseera kya {time_large}" + "value" : "Zikwezezza" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Nutildyti {time_large}" + "value" : "Užtildytas" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Izslēgt skaņu uz {time_large}" + "value" : "Apklusināts" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Тишина за {time_large}" + "value" : "Тишина" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} дуугүй болго" + "value" : "Дуугүй болсон" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Senyapkan untuk {time_large}" + "value" : "Disenyapkan" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} အထိအသိပေးချက်များကို အဝင်ငွေဆုံးရံခြင်း" + "value" : "အသံပိတ်ထားသည်" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Demp for {time_large}" + "value" : "Dempet" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Demp for {time_large}" + "value" : "Dempet" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} का लागि म्यूट गर्नुहोस्" + "value" : "म्यूट भएको" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Dempen voor {time_large}" + "value" : "Gedempt" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Demp for {time_large}" + "value" : "Dempet" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Upallayachina kwa {time_large}" + "value" : "Upallayachina" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} ਲਈ ਮਿਉਟ ਕਰੋ" + "value" : "ਮਿਉਟ ਕੀਤਾ ਗਿਆ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wycisz na {time_large}" + "value" : "Wyciszono" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} لپاره چپ کول" + "value" : "چپ شوی" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Mutar por {time_large}" + "value" : "Silenciado" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciar por {time_large}" + "value" : "Silenciado" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Silențios pentru {time_large}" + "value" : "Notificări fără sunet" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Без звука {time_large}" + "value" : "Без звука" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Utišaj na {time_large}" + "value" : "Utišano" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} න් නිහඬ කරන්න" + "value" : "නිහඬ කළා" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Stlmiť na {time_large}" + "value" : "Stíšené" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Utišaj za {time_large}" + "value" : "Utišano" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Heshtoje për {time_large}" + "value" : "Heshtur" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Без звука за {time_large}" + "value" : "Мутиран заувек" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Isključi na {time_large}" + "value" : "Isključeno" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Tysta i {time_large}" + "value" : "Tystad" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Zima kwa {time_large}" + "value" : "Limenyamazishwa" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} செண்டற்க்கு முடியவும்" + "value" : "முடக்கப்பட்டது" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "నిశబ్ధంగా ఉంచు {time_large}" + "value" : "నిశబ్ధం చేయబడింది" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ปิดแจ้งเตือนเป็นเวลา {time_large}" + "value" : "ปิดแจ้งเตือนแล้ว" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} boyunca sessize al" + "value" : "Sessize alındı" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Вимкнути звук на {time_large}" + "value" : "Беззвучний" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} کے لئے خاموش" + "value" : "خاموش" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{time_large} davomida ovozini o'chirish" + "value" : "O'chirilgan" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Im lặng trong {time_large}" + "value" : "Đã ngắt tiếng" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Thulisa imizuzu eyi-{time_large}" + "value" : "Zithule" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "免打扰{time_large}" + "value" : "免打扰" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "關閉通知 {time_large}" + "value" : "已靜音" } } } }, - "notificationsMuteUnmute" : { + "notificationsMuteFor" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Aktiveer Kennisgewings" + "value" : "Stil vir {time_large}" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إلغاء الكتم" + "value" : "صامت لمدة {time_large}" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Səsi aç" + "value" : "{time_large} ərzində səsi kəs" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "غیر خاموش" + "value" : "{time_large} لئی خاموش" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Уключыць гук" + "value" : "Выключыць гук на {time_large}" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Включи звук" + "value" : "Заглуши за {time_large}" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "আনমিউট করুন" + "value" : "{time_large} এর জন্য নিঃশব্দ করুন" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Treure el silenci" + "value" : "Silencia per {time_large}" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Zrušit ztlumení" + "value" : "Ztlumit na {time_large}" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Dad-dewi" + "value" : "Tewi am {time_large}" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Fjern udsættelse" + "value" : "Udsæt for {time_large}" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Stummschaltung aufheben" + "value" : "Stummschalten für {time_large}" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Αναίρεση Σίγασης" + "value" : "Σίγαση για {time_large}" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Unmute" + "value" : "Mute for {time_large}" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Malsilentigi" + "value" : "Silentigi por {time_large}" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "No silenciar" + "value" : "Silenciar por {time_large}" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "No silenciar" + "value" : "Silenciar por {time_large}" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Keela vaigistus" + "value" : "Vaigista {time_large} ajaks" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Aktibatu" + "value" : "Isildu {time_large} denborarako" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "فعال کردن صدا" + "value" : "ساکت کردن برای {time_large}" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Poista mykistys" + "value" : "Mykistä ajaksi {time_large}" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "I-unmute" + "value" : "I-mute para sa {time_large}" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Rétablir les notifications" + "value" : "Sourdine pour {time_large}" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Activar o son" + "value" : "Silenciar por {time_large}" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Cire sauti" + "value" : "Jigilewar muryar na tsawon lokaci {time_large}" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "בטל השתקה" + "value" : "השתק עבור {time_large}" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "अनम्यूट" + "value" : "{time_large} के लिए म्यूट करें" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Uključi zvuk" + "value" : "Utišaj na {time_large}" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Némítás feloldása" + "value" : "Némítás: {time_large}" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ապախլացնել" + "value" : "Խլացնել {time_large}" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Batalkan senyap" + "value" : "Senyapkan selama {time_large}" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Riattiva" + "value" : "Silenzia per {time_large}" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ミュート解除" + "value" : "{time_large}間ミュート" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ხმაურის გამორთვა" + "value" : "ხმამაღლა {time_large}" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បើកសំឡេង" + "value" : "បិទសំឡេង {time_large}" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಅನ್ಮ್ಯೂಟ್" + "value" : "{time_large} ಗೆ ಸದ್ದಡಗಿಸಿ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "알림 켜기" + "value" : "{time_large} 동안 음소거" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "لادانی کپکردن" + "value" : "کپکردن بۆ {time_large}" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Ladaniyê bi ser ke" + "value" : "Berdan çimase {time_large}" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Sazaamu obubaka bwekaapuulwa" + "value" : "Zikweka ekiseera kya {time_large}" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Įjungti pranešimus" + "value" : "Nutildyti {time_large}" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Ieslēgt skaņu" + "value" : "Izslēgt skaņu uz {time_large}" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Вклучи" + "value" : "Тишина за {time_large}" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Дууг асаах" + "value" : "{time_large} дуугүй болго" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Nyah bisu" + "value" : "Senyapkan untuk {time_large}" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "အသံဖွင့်မည်" + "value" : "{time_large} အထိအသိပေးချက်များကို အဝင်ငွေဆုံးရံခြင်း" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opphev demp" + "value" : "Demp for {time_large}" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Opphev demp" + "value" : "Demp for {time_large}" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "अनम्यूट गर्नुहोस्" + "value" : "{time_large} का लागि म्यूट गर्नुहोस्" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Niet langer dempen" + "value" : "Dempen voor {time_large}" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Opphev demp" + "value" : "Demp for {time_large}" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Ambukirana" + "value" : "Upallayachina kwa {time_large}" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਅਨਮਿਊਟ ਕਰੋ" + "value" : "{time_large} ਲਈ ਮਿਉਟ ਕਰੋ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wyłącz wyciszenie" + "value" : "Wycisz na {time_large}" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "غیرخاموش کړئ" + "value" : "{time_large} لپاره چپ کول" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Desmutar" + "value" : "Mutar por {time_large}" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Não silenciar" + "value" : "Silenciar por {time_large}" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Activare sunet notificări" + "value" : "Silențios pentru {time_large}" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Вкл. звук" + "value" : "Без звука {time_large}" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Ukloni utišanje" + "value" : "Utišaj na {time_large}" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "නිහඬ නොකරන්න" + "value" : "{time_large} න් නිහඬ කරන්න" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Zrušiť stíšenie" + "value" : "Stlmiť na {time_large}" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Izklopi utišanje" + "value" : "Utišaj za {time_large}" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Çheshtoji" + "value" : "Heshtoje për {time_large}" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Укључи обавештења" + "value" : "Без звука за {time_large}" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Unmute" + "value" : "Isključi na {time_large}" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ljud på" + "value" : "Tysta i {time_large}" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Usifute" + "value" : "Zima kwa {time_large}" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "அமை" + "value" : "{time_large} செண்டற்க்கு முடியவும்" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "మ్యూట్ తీసివేయి" + "value" : "నిశబ్ధంగా ఉంచు {time_large}" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "เลิกปิดเสียง." + "value" : "ปิดแจ้งเตือนเป็นเวลา {time_large}" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Sesi aç" + "value" : "{time_large} boyunca sessize al" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Увімкнути звук" + "value" : "Вимкнути звук на {time_large}" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "خاموشی ختم کریں" + "value" : "{time_large} کے لئے خاموش" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Surnatni ochish" + "value" : "{time_large} davomida ovozini o'chirish" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tắt tạm im" + "value" : "Im lặng trong {time_large}" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Susa ukuthula" + "value" : "Thulisa imizuzu eyi-{time_large}" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "关闭免打扰" + "value" : "免打扰{time_large}" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "取消靜音" + "value" : "關閉通知 {time_large}" } } } }, - "notificationsMuted" : { + "notificationsMuteUnmute" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Geskuif" + "value" : "Aktiveer Kennisgewings" } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "كتم" + "value" : "إلغاء الكتم" } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Səssizdə" + "value" : "Səsi aç" } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "خاموش شتگ" + "value" : "غیر خاموش" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Заглушана" + "value" : "Уключыць гук" } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Заглушено" + "value" : "Включи звук" } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "মিউট করে হয়েছে" + "value" : "আনমিউট করুন" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciat" + "value" : "Treure el silenci" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Ztlumeno" + "value" : "Zrušit ztlumení" } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Wedi tewi" + "value" : "Dad-dewi" } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Lyden slået fra" + "value" : "Fjern udsættelse" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Stumm gestellt" + "value" : "Stummschaltung aufheben" } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Σε Σίγαση" + "value" : "Αναίρεση Σίγασης" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Muted" + "value" : "Unmute" } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Silentigite" + "value" : "Malsilentigi" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciado" + "value" : "No silenciar" } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciado" + "value" : "No silenciar" } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Vaigistatud" + "value" : "Keela vaigistus" } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Isilik" + "value" : "Aktibatu" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "بی‌صدا شده" + "value" : "فعال کردن صدا" } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Mykistetty" + "value" : "Poista mykistys" } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Muted" + "value" : "I-unmute" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "En sourdine" + "value" : "Rétablir les notifications" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciado" + "value" : "Activar o son" } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "An Jigilar" + "value" : "Cire sauti" } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "מושתק" + "value" : "בטל השתקה" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "म्यूट हो गए" + "value" : "अनम्यूट" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Utišano" + "value" : "Uključi zvuk" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Némítva" + "value" : "Némítás feloldása" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Լուռ է" + "value" : "Ապախլացնել" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Disenyapkan" + "value" : "Batalkan senyap" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Silenziato" + "value" : "Riattiva" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ミュート中" + "value" : "ミュート解除" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "ხმამაღლა" + "value" : "ხმაურის გამორთვა" } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "បានបិទ" + "value" : "បើកសំឡេង" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ಸದ್ದಡಗಿಸಿದ್ದು" + "value" : "ಅನ್ಮ್ಯೂಟ್" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "알림 꺼짐" + "value" : "알림 켜기" } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "کپ کراوە" + "value" : "لادانی کپکردن" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Berdayî" + "value" : "Ladaniyê bi ser ke" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Zikwezezza" + "value" : "Sazaamu obubaka bwekaapuulwa" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Užtildytas" + "value" : "Įjungti pranešimus" } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Apklusināts" + "value" : "Ieslēgt skaņu" } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Тишина" + "value" : "Вклучи" } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Дуугүй болсон" + "value" : "Дууг асаах" } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Disenyapkan" + "value" : "Nyah bisu" } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "အသံပိတ်ထားသည်" + "value" : "အသံဖွင့်မည်" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Dempet" + "value" : "Opphev demp" } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Dempet" + "value" : "Opphev demp" } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "म्यूट भएको" + "value" : "अनम्यूट गर्नुहोस्" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gedempt" + "value" : "Niet langer dempen" } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Dempet" + "value" : "Opphev demp" } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Upallayachina" + "value" : "Ambukirana" } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਮਿਉਟ ਕੀਤਾ ਗਿਆ" + "value" : "ਅਨਮਿਊਟ ਕਰੋ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wyciszono" + "value" : "Wyłącz wyciszenie" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "چپ شوی" + "value" : "غیرخاموش کړئ" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciado" + "value" : "Desmutar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Silenciado" + "value" : "Não silenciar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Notificări fără sunet" + "value" : "Activare sunet notificări" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Без звука" + "value" : "Вкл. звук" } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Utišano" + "value" : "Ukloni utišanje" } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "නිහඬ කළා" + "value" : "නිහඬ නොකරන්න" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Stíšené" + "value" : "Zrušiť stíšenie" } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Utišano" + "value" : "Izklopi utišanje" } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Heshtur" + "value" : "Çheshtoji" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Мутиран заувек" + "value" : "Укључи обавештења" } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Isključeno" + "value" : "Unmute" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Tystad" + "value" : "Ljud på" } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Limenyamazishwa" + "value" : "Usifute" } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "முடக்கப்பட்டது" + "value" : "அமை" } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "నిశబ్ధం చేయబడింది" + "value" : "మ్యూట్ తీసివేయి" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ปิดแจ้งเตือนแล้ว" + "value" : "เลิกปิดเสียง." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Sessize alındı" + "value" : "Sesi aç" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Беззвучний" + "value" : "Увімкнути звук" } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "خاموش" + "value" : "خاموشی ختم کریں" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "O'chirilgan" + "value" : "Surnatni ochish" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Đã ngắt tiếng" + "value" : "Tắt tạm im" } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Zithule" + "value" : "Susa ukuthula" } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "免打扰" + "value" : "关闭免打扰" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "已靜音" + "value" : "取消靜音" } } } @@ -298966,6 +299011,485 @@ } } }, + "notNow" : { + "extractionState" : "manual", + "localizations" : { + "af" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie nou nie" + } + }, + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ليس الآن" + } + }, + "az" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndi yox" + } + }, + "bal" : { + "stringUnit" : { + "state" : "translated", + "value" : "ھِن نا" + } + }, + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не зараз" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не сега" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এখন নয়" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ara no" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Teď ne" + } + }, + "cy" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nid nawr" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikke nu" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nicht jetzt" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Όχι τώρα" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not now" + } + }, + "eo" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne nun" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ahora no" + } + }, + "es-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ahora no" + } + }, + "et" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitte praegu" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez orain" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حالا نه" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei nyt" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hindi Ngayon" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pas maintenant" + } + }, + "gl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agora non" + } + }, + "ha" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ba Yanzu Ba" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא עכשיו" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अभी नहीं" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne sada" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Most nem" + } + }, + "hy-AM" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ոչ հիմա" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lain kali" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non ora" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "後で" + } + }, + "ka" : { + "stringUnit" : { + "state" : "translated", + "value" : "ახლა არა" + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "ពេលក្រោយ" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಈಗಲ್ಲ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "나중에" + } + }, + "ku" : { + "stringUnit" : { + "state" : "translated", + "value" : "رێ پێنەدان" + } + }, + "ku-TR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rê pênedan" + } + }, + "lg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaakati nedda" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne dabar" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne tagad" + } + }, + "mk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не сега" + } + }, + "mn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Одоохондоо үгүй" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bukan sekarang" + } + }, + "my" : { + "stringUnit" : { + "state" : "translated", + "value" : "အခု မဟုတ်ပါ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikke nå" + } + }, + "nb-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikke nå" + } + }, + "ne-NP" : { + "stringUnit" : { + "state" : "translated", + "value" : "अहिले होईन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu niet" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikkje no" + } + }, + "ny" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunanka mana" + } + }, + "pa-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਹੁਣ ਨਹੀਂ" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie teraz" + } + }, + "ps" : { + "stringUnit" : { + "state" : "translated", + "value" : "اوس نه" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agora não" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agora não" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu acum" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не сейчас" + } + }, + "sh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne sada" + } + }, + "si-LK" : { + "stringUnit" : { + "state" : "translated", + "value" : "දැන් නොවේ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Teraz nie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prekliči" + } + }, + "sq" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jo tani" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не сада" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne sada" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inte nu" + } + }, + "sw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sio sasa" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இப்பொழுது இல்லை" + } + }, + "te" : { + "stringUnit" : { + "state" : "translated", + "value" : "ఇప్పుడు కాదు" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่ใช่ตอนนี้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şimdi değil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не зараз" + } + }, + "ur-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "ابھی نہیں" + } + }, + "uz" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hozir emas" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không phải bây giờ" + } + }, + "xh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hayi ngoku" + } + }, + "zh-CN" : { + "stringUnit" : { + "state" : "translated", + "value" : "下次再说" + } + }, + "zh-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "暫不" + } + } + } + }, "off" : { "extractionState" : "manual", "localizations" : { @@ -312869,966 +313393,966 @@ } } }, - "passwordChangeDescription" : { + "passwordChangedDescription" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Verander die wagwoord wat benodig word om {app_name} te ontsluit." + "value" : "Jou wagwoord is verander. Hou dit asseblief veilig." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تغيير كلمة السر المطلوبة لفتح {app_name}." + "value" : "تم تغيير كلمة المرور الخاصة بك. احفظها في مامن." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} kilidini açmaq üçün tələb olunan parolu dəyişdir." + "value" : "Parolunuz dəyişdirildi. Lütfən, onu güvəndə saxlayın." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} کو ان لاک کرنے کے لئے درکار پاس ورڈ تبدیل کریں۔" + "value" : "ما گپ درخواست قبول کردی بیک اپلیکیشن پاسکوڈ ناقض کردی. براہپس محفوظے کہ." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Змяніць пароль для разблакоўкі {app_name}." + "value" : "Ваш пароль быў зменены. Захавайце яго ў бяспецы." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Сменете паролата, изисквана за отключване на {app_name}." + "value" : "Вашата парола беше променена. Моля, пазете я безопасно." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} আনলক করতে প্রয়োজনীয় পাসওয়ার্ড পরিবর্তন করুন।" + "value" : "আপনার পাসওয়ার্ড পরিবর্তন করা হয়েছে। দয়া করে এটি নিরাপদ রাখুন।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Canvia la contrasenya requerida per desblocar {app_name}." + "value" : "La vostra contrasenya s'ha definit. Mantingueu-la segura." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Změňte heslo pro odemykání {app_name}." + "value" : "Tvé heslo bylo změněno. Pečlivě si ho odlož." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Newid y cyfrinair sy'n angenrheidiol i ddatgloi {app_name}." + "value" : "Mae eich cyfrinair wedi'i newid. Cadwch ef yn ddiogel." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Skift adgangskoden, der kræves for at låse {app_name} op." + "value" : "Din adgangskode er blevet ændret. Venligst hold den sikker." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Das Passwort zum Entsperren von {app_name} ändern." + "value" : "Dein Passwort wurde geändert. Bitte bewahre es sicher auf." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Αλλαγή του κωδικού πρόσβασης που απαιτείται για το ξεκλείδωμα του {app_name}." + "value" : "Ο κωδικός πρόσβασής σας έχει αλλάξει. Παρακαλώ κρατήστε τον ασφαλή." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Change the password required to unlock {app_name}." + "value" : "Your password has been changed. Please keep it safe." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Ŝanĝi la pasvorton, kiu necesas por malŝlosi {app_name}." + "value" : "Via pasvorto estas ŝanĝita. Bonvolu konservi ĝin sekura." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Cambiar la contraseña necesaria para desbloquear {app_name}." + "value" : "Tu contraseña ha sido cambiada. Por favor, manténla segura." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Cambiar la contraseña requerida para desbloquear {app_name}." + "value" : "Tu contraseña ha sido cambiada. Por favor, manténla segura." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Muuda parooli, mida on vaja {app_name} avamiseks." + "value" : "Teie parool on muudetud. Hoidke seda turvaliselt." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Change the password required to unlock {app_name}." + "value" : "Zure pasahitza aldatu da. Gorde seguru batean." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "رمز عبور مورد نیاز برای باز کردن {app_name} را تغییر بده." + "value" : "رمز عبور شما تغییر کرد. لطفا آن را در جای امنی نگهداری کنید." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Vaihda {app_name} in avaukseen käytettävä salasana." + "value" : "Salasanasi on vaihdettu. Pidä se turvassa." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Palitan ang password na kinakailangan para i-unlock ang {app_name}." + "value" : "Nabago na ang iyong password. Pakisuyong itago ito." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Modifier le mot de passe requis pour déverrouiller {app_name}" + "value" : "Votre mot de passe a été changé. Veuillez le conserver en sécurité." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Cambia o contrasinal necesario para desbloquear {app_name}." + "value" : "O teu contrasinal foi cambiado. Por favor, mantéñeo seguro." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Canza kalmar sirrin da ake bukata don buɗe {app_name}." + "value" : "An canza kalmar sirrinku. Da fatan za a kiyaye shi lafiya." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "שנה את הסיסמה הנדרשת לפתיחת {app_name}." + "value" : "הסיסמה שלך השתנתה. שמור עליה בבטחה." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} को अनलॉक करने के लिए आवश्यक पासवर्ड बदलें।" + "value" : "आपका पासवर्ड बदल दिया गया है। कृपया इसे सुरक्षित रखें।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Promijenite lozinku potrebnu za otključavanje {app_name}." + "value" : "Vaša lozinka je promijenjena. Molimo, čuvajte je na sigurnom." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} alkalmazás jelszavának megváltoztatása." + "value" : "A jelszó megváltozott. Tartsd biztonságos helyen!" } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Փոխեք {app_name}-ն ապակողպելու համար պահանջվող գաղտնաբառը:" + "value" : "Ձեր գաղտնաբառը փոխվել է։ Խնդրում ենք անվտանգ պահել։" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ubah kata sandi yang diperlukan untuk membuka kunci {app_name}." + "value" : "Kata sandi anda telah diubah. Harap untuk menjaganya." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Cambia la password richiesta per sbloccare {app_name}." + "value" : "La tua password è stata modificata. Per favore tienila al sicuro." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name}のロック解除に必要なパスワードを変更します" + "value" : "パスワードが変更されました。安全に保管してください。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "პაროლის შეცვლა აუცილებელია {app_name}-ის გახსნისთვის." + "value" : "თქვენი პაროლი შეცვლილია. გთხოვთ, შეინახეთ იგი უსაფრთხოდ." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ប្ដូរពាក្យសម្ងាត់ដែលបានតម្រូវឲ្យមានដើម្បីឈប់ទប់ស្កាត់ {app_name}។" + "value" : "ពាក្យសម្ងាត់ របស់អ្នកត្រូវ​បាន​ប្តូរ។ សូមរក្សា​វា​ឲ្យ​មាន​សុវត្ថិភាព។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} ತೆಗೆಯಲು ಬೇಕಾದ ಪಾಸ್ವರ್ಡ್ ಬದಲಾಯಿಸಿ." + "value" : "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ. ಅದು ಸುರಕ್ಷಿತವಾಗಿರಿಸಿ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} 잠금 해제 시 사용되는 비밀번호를 변경합니다." + "value" : "비밀번호 변경이 완료되었습니다. 안전히 관리하시기 바랍니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} وشە نهێنی بگۆڕە بۆ کردنەوەی" + "value" : "وشەی پەرەسەدت گۆڕدرا. تکایە ئەوە بەندەن پارێزەر بێت." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "şîfreyê ku ji bo vekirina {app_name} lazim e biguherîne." + "value" : "Te jîrêbandeya we yê danîn Muhafize mane sihîn bike." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Change the password required to unlock {app_name}." - } - }, - "lo" : { - "stringUnit" : { - "state" : "translated", - "value" : "ປ່ຽນລະຫັດຕົກທາງທີ່ຈະເຜີດ {app_name}." + "value" : "Password yo ekabatiddwa. Kaakasa nti bagutemye mu kifo ekitalemerera." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pakeisti slaptažodį, reikalingą atrakinti {app_name}." + "value" : "Jūsų slaptažodis buvo pakeistas. Prašome saugoti jį saugiai." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Mainīt paroli, kas nepieciešama {app_name} atbloķēšanai." + "value" : "Jūsu parole tika nomainīta. Lūdzu, saglabājiet to drošībā." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Смени ја лозинката што е потребна за отклучување {app_name}." + "value" : "Вашата лозинка е променета. Ве молиме чувајте ја безбедно." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} -г нээхийн тулд шаардлагатай нууц үгийг өөрчлөх." + "value" : "Таны нууц үг солигдож байна. Нууц үгээ хамгаалж байгаарай." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Tukar kata laluan yang diperlukan untuk membuka kunci {app_name}." + "value" : "Kata laluan anda telah ditukar. Sila simpan dengan selamat." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} ဖြင့် လော့ခ်ဖွင့်ရန် လျှို့ဝှက် စကားဝှက် ပြောင်းပါ" + "value" : "သင်၏ စကားဝှက် ပြောင်းလဲ ပြီးပါပြီ။ ထိန်းသိမ်းပါ။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Endre passordet som kreves for å låse opp {app_name}." + "value" : "Passordet ditt er endret. Vennligst oppbevar det trygt." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Endre passordet som kreves for å låse opp {app_name}." + "value" : "Passordet ditt er endret. Vennligst oppbevar det trygt." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} अनलक गर्न आवश्यक पासवर्ड परिवर्तन गर्नुहोस्।" + "value" : "तपाईँको पासवर्ड परिवर्तन भयो। कृपया यसलाई सुरक्षित राख्नुहोस्।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Wijzig het wachtwoord dat nodig is om {app_name} te ontgrendelen." + "value" : "Uw wachtwoord is gewijzigd. Hou het veilig." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Endre passordet som krevst for å låsa opp {app_name}." + "value" : "Passordet ditt er blitt endra. Vennligst oppbevar det trygt." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Change the password required to unlock {app_name}." + "value" : "Password yanu yasinthidwa. Chonde sungani mosamala." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਲਈ ਲੋੜੀਂਦੇ ਪਾਸਵਰਡ ਨੂੰ ਬਦਲੋ।" + "value" : "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਬਦਲਿਆ ਗਿਆ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਇਸਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zmień hasło wymagane do odblokowania aplikacji {app_name}." + "value" : "Zmieniono hasło. Zachowaj je w bezpiecznym miejscu." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "د {app_name} خلاصولو لپاره اړین پاسورډ بدل کړئ." + "value" : "ستاسو پاسورډ بدل شوی. مهرباني وکړۍ، دا خوندي وساتئ." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Altere a senha necessária para desbloquear {app_name}." + "value" : "Sua senha foi alterada. Por favor, mantenha-a segura." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Altere a palavra-passe, necessária para desbloquear {app_name}." + "value" : "A sua palavra-passe foi alterada. Por favor, mantenha-a segura." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Schimbați parola necesară pentru a debloca {app_name}." + "value" : "Parola ta a fost schimbată. Te rugăm să o păstrezi în siguranță." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Измените пароль, необходимый для разблокировки {app_name}." + "value" : "Ваш пароль был изменен. Пожалуйста, храните его в безопасном месте." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Promeni lozinku potrebnu za otključavanje {app_name}." + "value" : "Tvoja šifra je promijenjena. Molimo, čuvaj je na sigurnom." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} අගුළු විවෘත කිරීමට අවශ්‍ය මුරපදය වෙනස් කරන්න." + "value" : "ඔබගේ මුරපදය වෙනස් කර ඇත. කරුණාකර එය ආරක්ෂිතව තබා ගන්න." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Zmeňte heslo potrebné na odomknutie {app_name}." + "value" : "Vaše heslo bolo zmenené. Uchovajte ho prosím v bezpečí." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Spremeni geslo potrebno za odklepanje {app_name}." + "value" : "Vaše geslo je bilo spremenjeno. Prosim, hranite ga na varnem mestu." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Ndryshoni fjalëkalimin e kërkuar për të zhbllokuar {app_name}." + "value" : "Fjalëkalimi juaj është ndryshuar. Ju lutemi ta mbani të sigurt." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Измените лозинку потребну за откључавање {app_name}." + "value" : "Ваша лозинка је промењена. Молимо вас да је сачувате." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Promenite lozinku koja je potrebna za otključavanje {app_name}." + "value" : "Vaša lozinka je promenjena. Čuvajte je na sigurnom mestu." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ändra lösenordet som krävs för att låsa upp {app_name}." + "value" : "Ditt lösenord har ändrats. Håll det säkert." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Badilisha nywila inayohitajika kufungua {app_name}." + "value" : "Nenosiri lako limebadilishwa. Tafadhali lihifadhi salama." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} ேத்தUnlock ச்சபட செய்ய வேண்டிய கடவுச்சொல்லை மாற்றவும்." + "value" : "உங்களின் கடவுச்சொல் மாற்றப்பட்டுள்ளது. தயவுசெய்து அதை பாதுகாப்பாக வைத்திருங்கள்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} ని అన్‌లాక్ చేయడానికి అవసరమైన పాస్‌వర్డ్ మార్చండి." + "value" : "మీ పాస్‌వర్డ్ మార్పు జరిగింది. దయచేసి దాన్ని సురక్షితంగా ఉంచండి." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "เปลี่ยนรหัสผ่านที่ใช้ปลดล็อก {app_name}" + "value" : "รหัสผ่านของคุณได้รับการเปลี่ยนแปลงแล้ว กรุณารักษาเอาไว้ให้ปลอดภัย" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} kilidini açmak için gereken parolayı değiştirin." + "value" : "Şifreniz değiştirildi. Lütfen güvende tutunuz." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Змінити пароль, необхідний для розблокування {app_name}." + "value" : "Ваш пароль змінено. Будь ласка, збережіть його в безпеці." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} کو ان لاک کرنے کے لیے مطلوبہ پاس ورڈ تبدیل کریں۔" + "value" : "آپ کا پاس ورڈ تبدیل ہو گیا ہے۔ براہ کرم اسے محفوظ رکھیں۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "O'zingizga {app_name}ni ochish uchun zarur parolni o'zgartiring." + "value" : "Xabar so'rovingiz hozirda kutilmoqda." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Đổi mật khẩu cần thiết để mở khóa {app_name}." + "value" : "Mật khẩu của bạn đã được đổi. Hãy giữ nó cẩn thận." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Tshintsha i-password efunekayo ukusikhulula {app_name}." + "value" : "Iphasiwedi yakho itshintshiwe. Nceda uyigcine ikhuselekile." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "更改{app_name}的解锁密码" + "value" : "您的密码已经设定。请妥善保管。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "更改解鎖 {app_name} 所需的密碼。" + "value" : "您的密碼變更完成。請注意保管。" } } } }, - "passwordChangedDescription" : { + "passwordChangeDescription" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Jou wagwoord is verander. Hou dit asseblief veilig." + "value" : "Verander die wagwoord wat benodig word om {app_name} te ontsluit." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تم تغيير كلمة المرور الخاصة بك. احفظها في مامن." + "value" : "تغيير كلمة السر المطلوبة لفتح {app_name}." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Parolunuz dəyişdirildi. Lütfən, onu güvəndə saxlayın." + "value" : "{app_name} kilidini açmaq üçün tələb olunan parolu dəyişdir." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "ما گپ درخواست قبول کردی بیک اپلیکیشن پاسکوڈ ناقض کردی. براہپس محفوظے کہ." + "value" : "{app_name} کو ان لاک کرنے کے لئے درکار پاس ورڈ تبدیل کریں۔" } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Ваш пароль быў зменены. Захавайце яго ў бяспецы." + "value" : "Змяніць пароль для разблакоўкі {app_name}." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Вашата парола беше променена. Моля, пазете я безопасно." + "value" : "Сменете паролата, изисквана за отключване на {app_name}." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "আপনার পাসওয়ার্ড পরিবর্তন করা হয়েছে। দয়া করে এটি নিরাপদ রাখুন।" + "value" : "{app_name} আনলক করতে প্রয়োজনীয় পাসওয়ার্ড পরিবর্তন করুন।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "La vostra contrasenya s'ha definit. Mantingueu-la segura." + "value" : "Canvia la contrasenya requerida per desblocar {app_name}." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Tvé heslo bylo změněno. Pečlivě si ho odlož." + "value" : "Změňte heslo pro odemykání {app_name}." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Mae eich cyfrinair wedi'i newid. Cadwch ef yn ddiogel." + "value" : "Newid y cyfrinair sy'n angenrheidiol i ddatgloi {app_name}." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Din adgangskode er blevet ændret. Venligst hold den sikker." + "value" : "Skift adgangskoden, der kræves for at låse {app_name} op." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Dein Passwort wurde geändert. Bitte bewahre es sicher auf." + "value" : "Das Passwort zum Entsperren von {app_name} ändern." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Ο κωδικός πρόσβασής σας έχει αλλάξει. Παρακαλώ κρατήστε τον ασφαλή." + "value" : "Αλλαγή του κωδικού πρόσβασης που απαιτείται για το ξεκλείδωμα του {app_name}." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Your password has been changed. Please keep it safe." + "value" : "Change the password required to unlock {app_name}." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Via pasvorto estas ŝanĝita. Bonvolu konservi ĝin sekura." + "value" : "Ŝanĝi la pasvorton, kiu necesas por malŝlosi {app_name}." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tu contraseña ha sido cambiada. Por favor, manténla segura." + "value" : "Cambiar la contraseña necesaria para desbloquear {app_name}." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Tu contraseña ha sido cambiada. Por favor, manténla segura." + "value" : "Cambiar la contraseña requerida para desbloquear {app_name}." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Teie parool on muudetud. Hoidke seda turvaliselt." + "value" : "Muuda parooli, mida on vaja {app_name} avamiseks." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Zure pasahitza aldatu da. Gorde seguru batean." + "value" : "Change the password required to unlock {app_name}." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "رمز عبور شما تغییر کرد. لطفا آن را در جای امنی نگهداری کنید." + "value" : "رمز عبور مورد نیاز برای باز کردن {app_name} را تغییر بده." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Salasanasi on vaihdettu. Pidä se turvassa." + "value" : "Vaihda {app_name} in avaukseen käytettävä salasana." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Nabago na ang iyong password. Pakisuyong itago ito." + "value" : "Palitan ang password na kinakailangan para i-unlock ang {app_name}." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Votre mot de passe a été changé. Veuillez le conserver en sécurité." + "value" : "Modifier le mot de passe requis pour déverrouiller {app_name}" } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "O teu contrasinal foi cambiado. Por favor, mantéñeo seguro." + "value" : "Cambia o contrasinal necesario para desbloquear {app_name}." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "An canza kalmar sirrinku. Da fatan za a kiyaye shi lafiya." + "value" : "Canza kalmar sirrin da ake bukata don buɗe {app_name}." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "הסיסמה שלך השתנתה. שמור עליה בבטחה." + "value" : "שנה את הסיסמה הנדרשת לפתיחת {app_name}." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "आपका पासवर्ड बदल दिया गया है। कृपया इसे सुरक्षित रखें।" + "value" : "{app_name} को अनलॉक करने के लिए आवश्यक पासवर्ड बदलें।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Vaša lozinka je promijenjena. Molimo, čuvajte je na sigurnom." + "value" : "Promijenite lozinku potrebnu za otključavanje {app_name}." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "A jelszó megváltozott. Tartsd biztonságos helyen!" + "value" : "{app_name} alkalmazás jelszavának megváltoztatása." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ձեր գաղտնաբառը փոխվել է։ Խնդրում ենք անվտանգ պահել։" + "value" : "Փոխեք {app_name}-ն ապակողպելու համար պահանջվող գաղտնաբառը:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kata sandi anda telah diubah. Harap untuk menjaganya." + "value" : "Ubah kata sandi yang diperlukan untuk membuka kunci {app_name}." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "La tua password è stata modificata. Per favore tienila al sicuro." + "value" : "Cambia la password richiesta per sbloccare {app_name}." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "パスワードが変更されました。安全に保管してください。" + "value" : "{app_name}のロック解除に必要なパスワードを変更します" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "თქვენი პაროლი შეცვლილია. გთხოვთ, შეინახეთ იგი უსაფრთხოდ." + "value" : "პაროლის შეცვლა აუცილებელია {app_name}-ის გახსნისთვის." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ពាក្យសម្ងាត់ របស់អ្នកត្រូវ​បាន​ប្តូរ។ សូមរក្សា​វា​ឲ្យ​មាន​សុវត្ថិភាព។" + "value" : "ប្ដូរពាក្យសម្ងាត់ដែលបានតម្រូវឲ្យមានដើម្បីឈប់ទប់ស្កាត់ {app_name}។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ. ಅದು ಸುರಕ್ಷಿತವಾಗಿರಿಸಿ." + "value" : "{app_name} ತೆಗೆಯಲು ಬೇಕಾದ ಪಾಸ್ವರ್ಡ್ ಬದಲಾಯಿಸಿ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "비밀번호 변경이 완료되었습니다. 안전히 관리하시기 바랍니다." + "value" : "{app_name} 잠금 해제 시 사용되는 비밀번호를 변경합니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "وشەی پەرەسەدت گۆڕدرا. تکایە ئەوە بەندەن پارێزەر بێت." + "value" : "{app_name} وشە نهێنی بگۆڕە بۆ کردنەوەی" } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Te jîrêbandeya we yê danîn Muhafize mane sihîn bike." + "value" : "şîfreyê ku ji bo vekirina {app_name} lazim e biguherîne." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Password yo ekabatiddwa. Kaakasa nti bagutemye mu kifo ekitalemerera." + "value" : "Change the password required to unlock {app_name}." + } + }, + "lo" : { + "stringUnit" : { + "state" : "translated", + "value" : "ປ່ຽນລະຫັດຕົກທາງທີ່ຈະເຜີດ {app_name}." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Jūsų slaptažodis buvo pakeistas. Prašome saugoti jį saugiai." + "value" : "Pakeisti slaptažodį, reikalingą atrakinti {app_name}." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Jūsu parole tika nomainīta. Lūdzu, saglabājiet to drošībā." + "value" : "Mainīt paroli, kas nepieciešama {app_name} atbloķēšanai." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Вашата лозинка е променета. Ве молиме чувајте ја безбедно." + "value" : "Смени ја лозинката што е потребна за отклучување {app_name}." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Таны нууц үг солигдож байна. Нууц үгээ хамгаалж байгаарай." + "value" : "{app_name} -г нээхийн тулд шаардлагатай нууц үгийг өөрчлөх." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Kata laluan anda telah ditukar. Sila simpan dengan selamat." + "value" : "Tukar kata laluan yang diperlukan untuk membuka kunci {app_name}." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "သင်၏ စကားဝှက် ပြောင်းလဲ ပြီးပါပြီ။ ထိန်းသိမ်းပါ။" + "value" : "{app_name} ဖြင့် လော့ခ်ဖွင့်ရန် လျှို့ဝှက် စကားဝှက် ပြောင်းပါ" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Passordet ditt er endret. Vennligst oppbevar det trygt." + "value" : "Endre passordet som kreves for å låse opp {app_name}." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Passordet ditt er endret. Vennligst oppbevar det trygt." + "value" : "Endre passordet som kreves for å låse opp {app_name}." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "तपाईँको पासवर्ड परिवर्तन भयो। कृपया यसलाई सुरक्षित राख्नुहोस्।" + "value" : "{app_name} अनलक गर्न आवश्यक पासवर्ड परिवर्तन गर्नुहोस्।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Uw wachtwoord is gewijzigd. Hou het veilig." + "value" : "Wijzig het wachtwoord dat nodig is om {app_name} te ontgrendelen." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Passordet ditt er blitt endra. Vennligst oppbevar det trygt." + "value" : "Endre passordet som krevst for å låsa opp {app_name}." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Password yanu yasinthidwa. Chonde sungani mosamala." + "value" : "Change the password required to unlock {app_name}." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਬਦਲਿਆ ਗਿਆ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਇਸਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖੋ।" + "value" : "{app_name} ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਲਈ ਲੋੜੀਂਦੇ ਪਾਸਵਰਡ ਨੂੰ ਬਦਲੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zmieniono hasło. Zachowaj je w bezpiecznym miejscu." + "value" : "Zmień hasło wymagane do odblokowania aplikacji {app_name}." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "ستاسو پاسورډ بدل شوی. مهرباني وکړۍ، دا خوندي وساتئ." + "value" : "د {app_name} خلاصولو لپاره اړین پاسورډ بدل کړئ." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Sua senha foi alterada. Por favor, mantenha-a segura." + "value" : "Altere a senha necessária para desbloquear {app_name}." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "A sua palavra-passe foi alterada. Por favor, mantenha-a segura." + "value" : "Altere a palavra-passe, necessária para desbloquear {app_name}." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Parola ta a fost schimbată. Te rugăm să o păstrezi în siguranță." + "value" : "Schimbați parola necesară pentru a debloca {app_name}." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Ваш пароль был изменен. Пожалуйста, храните его в безопасном месте." + "value" : "Измените пароль, необходимый для разблокировки {app_name}." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Tvoja šifra je promijenjena. Molimo, čuvaj je na sigurnom." + "value" : "Promeni lozinku potrebnu za otključavanje {app_name}." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ඔබගේ මුරපදය වෙනස් කර ඇත. කරුණාකර එය ආරක්ෂිතව තබා ගන්න." + "value" : "{app_name} අගුළු විවෘත කිරීමට අවශ්‍ය මුරපදය වෙනස් කරන්න." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Vaše heslo bolo zmenené. Uchovajte ho prosím v bezpečí." + "value" : "Zmeňte heslo potrebné na odomknutie {app_name}." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Vaše geslo je bilo spremenjeno. Prosim, hranite ga na varnem mestu." + "value" : "Spremeni geslo potrebno za odklepanje {app_name}." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Fjalëkalimi juaj është ndryshuar. Ju lutemi ta mbani të sigurt." + "value" : "Ndryshoni fjalëkalimin e kërkuar për të zhbllokuar {app_name}." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Ваша лозинка је промењена. Молимо вас да је сачувате." + "value" : "Измените лозинку потребну за откључавање {app_name}." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Vaša lozinka je promenjena. Čuvajte je na sigurnom mestu." + "value" : "Promenite lozinku koja je potrebna za otključavanje {app_name}." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ditt lösenord har ändrats. Håll det säkert." + "value" : "Ändra lösenordet som krävs för att låsa upp {app_name}." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Nenosiri lako limebadilishwa. Tafadhali lihifadhi salama." + "value" : "Badilisha nywila inayohitajika kufungua {app_name}." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "உங்களின் கடவுச்சொல் மாற்றப்பட்டுள்ளது. தயவுசெய்து அதை பாதுகாப்பாக வைத்திருங்கள்." + "value" : "{app_name} ேத்தUnlock ச்சபட செய்ய வேண்டிய கடவுச்சொல்லை மாற்றவும்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "మీ పాస్‌వర్డ్ మార్పు జరిగింది. దయచేసి దాన్ని సురక్షితంగా ఉంచండి." + "value" : "{app_name} ని అన్‌లాక్ చేయడానికి అవసరమైన పాస్‌వర్డ్ మార్చండి." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "รหัสผ่านของคุณได้รับการเปลี่ยนแปลงแล้ว กรุณารักษาเอาไว้ให้ปลอดภัย" + "value" : "เปลี่ยนรหัสผ่านที่ใช้ปลดล็อก {app_name}" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Şifreniz değiştirildi. Lütfen güvende tutunuz." + "value" : "{app_name} kilidini açmak için gereken parolayı değiştirin." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Ваш пароль змінено. Будь ласка, збережіть його в безпеці." + "value" : "Змінити пароль, необхідний для розблокування {app_name}." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "آپ کا پاس ورڈ تبدیل ہو گیا ہے۔ براہ کرم اسے محفوظ رکھیں۔" + "value" : "{app_name} کو ان لاک کرنے کے لیے مطلوبہ پاس ورڈ تبدیل کریں۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Xabar so'rovingiz hozirda kutilmoqda." + "value" : "O'zingizga {app_name}ni ochish uchun zarur parolni o'zgartiring." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Mật khẩu của bạn đã được đổi. Hãy giữ nó cẩn thận." + "value" : "Đổi mật khẩu cần thiết để mở khóa {app_name}." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Iphasiwedi yakho itshintshiwe. Nceda uyigcine ikhuselekile." + "value" : "Tshintsha i-password efunekayo ukusikhulula {app_name}." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "您的密码已经设定。请妥善保管。" + "value" : "更改{app_name}的解锁密码" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "您的密碼變更完成。請注意保管。" + "value" : "更改解鎖 {app_name} 所需的密碼。" } } } @@ -320072,960 +320596,960 @@ } } }, - "passwordRemoveDescription" : { + "passwordRemovedDescription" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Verwyder die wagwoord wat nodig is om {app_name} oop te maak." + "value" : "Jou wagwoord is verwyder." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إزالة كلمة السر المطلوبة لفتح {app_name}." + "value" : "تمت إزالة كلمة السر الخاصة بك." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} kilidini açmaq üçün tələb olunan parolu sil." + "value" : "Parolunuz silindi." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "پاسورڈ برس ک و بندروی {app_name} لایا وانتگ." + "value" : "ما گپ درخواست قبول کردی بیک پاسکوڈ ہٹاٹی." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Выдаліце пароль, неабходны для разблакіроўкі {app_name}." + "value" : "Ваш пароль быў выдалены." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Премахнете паролата, необходима за отключване на {app_name}." + "value" : "Вашата парола беше премахната." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} আনলক করতে প্রয়োজনীয় পাসওয়ার্ড সরান।" + "value" : "আপনার পাসওয়ার্ড সরানো হয়েছে।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Elimina la contrasenya necessària per desbloquejar {app_name}." + "value" : "La vostra contrasenya s'ha eliminat." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Odebrat heslo pro odemykání {app_name}." + "value" : "Vaše heslo bylo odstraněno." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Tynnu'r cyfrinair sydd ei angen i ddatgloi {app_name}." + "value" : "Mae eich cyfrinair wedi'i dynnu." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Fjern adgangskoden, der kræves for at låse {app_name} op." + "value" : "Din adgangskode er blevet fjernet." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Das Passwort zum Entsperren von {app_name} entfernen." + "value" : "Dein Passwort wurde entfernt." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Αφαίρεση του κωδικού πρόσβασης που απαιτείται για το ξεκλείδωμα του {app_name}." + "value" : "Ο κωδικός πρόσβασής σας έχει αφαιρεθεί." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Remove the password required to unlock {app_name}." + "value" : "Your password has been removed." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Forigi la pasvorton necesan por malŝlosi {app_name}." + "value" : "Via pasvorto estas forigita." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Eliminar la contraseña necesaria para desbloquear {app_name}." + "value" : "Tu contraseña ha sido eliminada." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Eliminar la contraseña requerida para desbloquear {app_name}." + "value" : "Has eliminado tu contraseña." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Eemalda parool, mis on vajalik {app_name} avamiseks." + "value" : "Teie parool on eemaldatud." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Pasahitza kendu {app_name} desblokeatzeko beharrezkoa dena." + "value" : "Zure pasahitza kendu da." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "رمز عبور مورد نیاز برای باز کردن {app_name} را حذف کن." + "value" : "گذرواژه شما حذف شده است." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Poista {app_name} avaukseen tarvittava salasana." + "value" : "Salasanasi on on poistettu." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Alisin ang password na kinakailangan para i-unlock ang {app_name}." + "value" : "Ang iyong password ay naalis na." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Retirer le mot de passe requis pour déverrouiller {app_name}." + "value" : "Votre mot de passe a été supprimé." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "Elimina o contrasinal necesario para desbloquear {app_name}." + "value" : "O teu contrasinal foi eliminado." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "Cire kalmar sirrin da ake buƙata don buɗe {app_name}." + "value" : "An cire kalmar sirrinku." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "הסר את הסיסמה הנדרשת לביטול נעילת {app_name}." + "value" : "הסיסמה שלך הוסרה." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "पासवर्ड हटाएं जो {app_name} को अनलॉक करने के लिए आवश्यक है।" + "value" : "आपका पासवर्ड हटा दिया गया है।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Uklonite lozinku potrebnu za otključavanje {app_name}." + "value" : "Vaša lozinka je uklonjena." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Távolítsd el a {app_name} alkalmazás jelszavát." + "value" : "A jelszavadat eltávolítottuk." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Փոխեք {app_name}-ն ապակողպելու համար պահանջվող գաղտնաբառը:" + "value" : "Ձեր գաղտնաբառը հեռացվել է։" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Hapus kata sandi yang diperlukan untuk membuka kunci {app_name}." + "value" : "Kata sandi Anda telah dihapus." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Rimuovi la password richiesta per sbloccare {app_name}." + "value" : "La tua password è stata rimossa." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} のロックを解除するために必要なパスワードを削除します" + "value" : "パスワードを削除しました。" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "პაროლის მოხსნა {app_name}'ის განბლოკვისათვის." + "value" : "თქვენი პაროლი წაშლილია." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ប្ដូរពាក្យសម្ងាត់ដែលបានតម្រូវឲ្យមានដើម្បីឈប់ទប់ស្កាត់ {app_name}។" + "value" : "ពាក្យសម្ងាត់ របស់អ្នកត្រូវបានលុបចេញ។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಅಗತ್ಯವಿರುವ ಪಾಸ್ವರ್ಡ್ ತೆಗೆದುಹಾಕಿ." + "value" : "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} 잠금 해제 시 필요한 비밀번호를 제거합니다." + "value" : "당신의 비밀번호가 제거되었습니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "لابردنی تێپەڕەوشەی پێویست بۆ کردنەوەی {app_name}." + "value" : "وشەی پەرەسەدت وەکبێژاند." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Şîfreya ku ji bo vekirina qefila {app_name} lazim e rake." + "value" : "Zoom" } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Ggyawo akatambi okwetengerera {app_name}." + "value" : "Password yo ekatutuzzibwa." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pašalinti slaptažodį, reikalingą {app_name} atrakinti." + "value" : "Jūsų slaptažodis buvo pašalintas." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Noņemt paroli, lai atbloķētu {app_name}." + "value" : "Jūsu parole tika noņemta." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Отстранете ја лозинката потребна за отклучување на {app_name}." + "value" : "Вашата лозинка е отстранета." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name}-ийг нээхэд шаардлагатай нууц үгийг устгах." + "value" : "Таны нууц үг устгагдсан." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Alih Keluar kata laluan yang diperlukan untuk membuka kunci {app_name}." + "value" : "Kata laluan anda telah dibuang." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} ကိုလော့ခ်ဖွင့်ရန် လိုအပ်သော စကားဝှက်ကို ဖယ်ရှားပါ။" + "value" : "သင်၏ စကားဝှက် ဖယ်ရှားပြီးပါပြီ။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Fjern passordet som kreves for å låse opp {app_name}." + "value" : "Passordet ditt er fjernet." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Fjern passordet som kreves for å låse opp {app_name}." + "value" : "Passordet ditt har blitt fjernet." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} अनलक गर्न आवश्यक पासवर्ड हटाउनुहोस्।" + "value" : "तपाईँको पासवर्ड हटाइएको छ।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Verwijder het wachtwoord dat nodig is om {app_name} te ontgrendelen." + "value" : "Uw wachtwoord is verwijderd." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Fjern passordet nødvendig for å låsa opp {app_name}." + "value" : "Passordet ditt er blitt fjerna." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Chotsani achinsinsi omwe amafunika kutsegula {app_name}." + "value" : "Password yanu yachotsedwa." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਲਈ ਲੋੜੀਂ ਦਾ ਪਾਸਵਰਡ ਹਟਾਓ।" + "value" : "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Usuń hasło wymagane do odblokowania aplikacji {app_name}." + "value" : "Usunięto hasło" } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "هغه پاسورډ لرې کړئ چې د {app_name} خلاصولو لپاره اړین دی." + "value" : "ستاسو پاسورډ لرې شوی دی." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Remova a senha requerida para desbloquear {app_name}." + "value" : "Sua senha foi removida." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Remova a palavra-passe necessária para desbloquear {app_name}." + "value" : "A sua palavra-passe foi removida." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Elimină parola necesară pentru a debloca {app_name}." + "value" : "Parola ta a fost eliminată." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Удалить пароль, необходимый для разблокировки {app_name}." + "value" : "Ваш пароль удален." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Ukloni lozinku potrebnu za otključavanje {app_name}." + "value" : "Tvoja šifra je uklonjena." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} අගුළු විවෘත කිරීමට අවශ්‍ය මුරපදය ඉවත් කරන්න." + "value" : "ඔබගේ මුරපදය ඉවත් කර ඇත." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Odstrániť heslo potrebné na odomknutie {app_name}." + "value" : "Vaše heslo bolo odstránené." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Odstrani geslo, potrebno za odklepanje {app_name}." + "value" : "Vaše geslo je bilo odstranjeno." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Hiqe fjalëkalimin e nevojshëm për të zhbllokuar {app_name}-in." + "value" : "Fjalëkalimi juaj është hequr." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Уклони лозинку потребну за откључавање {app_name}." + "value" : "Ваша лозинка је уклоњена." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Ukloni lozinku potrebnu za otključavanje {app_name}." + "value" : "Vaša lozinka je uklonjena." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ta bort lösenordet som krävs för att låsa upp {app_name}." + "value" : "Ditt lösenord har tagits bort." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Ondoa nywila inayotakiwa kufungua {app_name}." + "value" : "Nenosiri lako limeondolewa." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} இற்கு அணுக அடியாக கடவுச்சொல்லை நீக்கவும்." + "value" : "உங்களின் கடவுச்சொல் நீக்கப்பட்டது." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name}ని అన్లాక్ చేయడానికి అవసరమైన పాస్వర్డ్ తొలగించు." + "value" : "మీ పాస్‌వర్డ్ తొలగించబడింది." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ลบรหัสผ่านที่ต้องใช้เพื่อปลดล็อก {app_name}" + "value" : "รหัสผ่านของคุณถูกลบแล้ว" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} uygulamasının kilidini açmak için gereken şifreyi kaldırın." + "value" : "Parolanız kaldırıldı." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Видалити пароль, який потрібен для розблокування {app_name}." + "value" : "Ваш пароль був видалений." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} کو ان لاک کرنے کے لئے درکار پاس ورڈ کو ہٹا دیں۔" + "value" : "آپ کا پاس ورڈ ہٹا دیا گیا ہے۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "{app_name} ni ochish uchun talab qilinadigan parolni olib tashlash." + "value" : "Parolingiz saqlandi. Iltimos, uni xavfsiz joyda saqlang." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Xóa mật khẩu cần thiết để mở khóa {app_name}." + "value" : "Mật khẩu của bạn đã được gỡ bỏ." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Susa iphasiwedi efunekayo ukuze uvule {app_name}." + "value" : "Iphasiwedi yakho isusiwe." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "删除{app_name}的解锁密码。" + "value" : "您的密码已被移除。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "去除解鎖 {app_name} 的密碼。" + "value" : "已移除密碼。" } } } }, - "passwordRemovedDescription" : { + "passwordRemoveDescription" : { "extractionState" : "manual", "localizations" : { "af" : { "stringUnit" : { "state" : "translated", - "value" : "Jou wagwoord is verwyder." + "value" : "Verwyder die wagwoord wat nodig is om {app_name} oop te maak." } }, "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تمت إزالة كلمة السر الخاصة بك." + "value" : "إزالة كلمة السر المطلوبة لفتح {app_name}." } }, "az" : { "stringUnit" : { "state" : "translated", - "value" : "Parolunuz silindi." + "value" : "{app_name} kilidini açmaq üçün tələb olunan parolu sil." } }, "bal" : { "stringUnit" : { "state" : "translated", - "value" : "ما گپ درخواست قبول کردی بیک پاسکوڈ ہٹاٹی." + "value" : "پاسورڈ برس ک و بندروی {app_name} لایا وانتگ." } }, "be" : { "stringUnit" : { "state" : "translated", - "value" : "Ваш пароль быў выдалены." + "value" : "Выдаліце пароль, неабходны для разблакіроўкі {app_name}." } }, "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Вашата парола беше премахната." + "value" : "Премахнете паролата, необходима за отключване на {app_name}." } }, "bn" : { "stringUnit" : { "state" : "translated", - "value" : "আপনার পাসওয়ার্ড সরানো হয়েছে।" + "value" : "{app_name} আনলক করতে প্রয়োজনীয় পাসওয়ার্ড সরান।" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "La vostra contrasenya s'ha eliminat." + "value" : "Elimina la contrasenya necessària per desbloquejar {app_name}." } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Vaše heslo bylo odstraněno." + "value" : "Odebrat heslo pro odemykání {app_name}." } }, "cy" : { "stringUnit" : { "state" : "translated", - "value" : "Mae eich cyfrinair wedi'i dynnu." + "value" : "Tynnu'r cyfrinair sydd ei angen i ddatgloi {app_name}." } }, "da" : { "stringUnit" : { "state" : "translated", - "value" : "Din adgangskode er blevet fjernet." + "value" : "Fjern adgangskoden, der kræves for at låse {app_name} op." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Dein Passwort wurde entfernt." + "value" : "Das Passwort zum Entsperren von {app_name} entfernen." } }, "el" : { "stringUnit" : { "state" : "translated", - "value" : "Ο κωδικός πρόσβασής σας έχει αφαιρεθεί." + "value" : "Αφαίρεση του κωδικού πρόσβασης που απαιτείται για το ξεκλείδωμα του {app_name}." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Your password has been removed." + "value" : "Remove the password required to unlock {app_name}." } }, "eo" : { "stringUnit" : { "state" : "translated", - "value" : "Via pasvorto estas forigita." + "value" : "Forigi la pasvorton necesan por malŝlosi {app_name}." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tu contraseña ha sido eliminada." + "value" : "Eliminar la contraseña necesaria para desbloquear {app_name}." } }, "es-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Has eliminado tu contraseña." + "value" : "Eliminar la contraseña requerida para desbloquear {app_name}." } }, "et" : { "stringUnit" : { "state" : "translated", - "value" : "Teie parool on eemaldatud." + "value" : "Eemalda parool, mis on vajalik {app_name} avamiseks." } }, "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Zure pasahitza kendu da." + "value" : "Pasahitza kendu {app_name} desblokeatzeko beharrezkoa dena." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "گذرواژه شما حذف شده است." + "value" : "رمز عبور مورد نیاز برای باز کردن {app_name} را حذف کن." } }, "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Salasanasi on on poistettu." + "value" : "Poista {app_name} avaukseen tarvittava salasana." } }, "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Ang iyong password ay naalis na." + "value" : "Alisin ang password na kinakailangan para i-unlock ang {app_name}." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Votre mot de passe a été supprimé." + "value" : "Retirer le mot de passe requis pour déverrouiller {app_name}." } }, "gl" : { "stringUnit" : { "state" : "translated", - "value" : "O teu contrasinal foi eliminado." + "value" : "Elimina o contrasinal necesario para desbloquear {app_name}." } }, "ha" : { "stringUnit" : { "state" : "translated", - "value" : "An cire kalmar sirrinku." + "value" : "Cire kalmar sirrin da ake buƙata don buɗe {app_name}." } }, "he" : { "stringUnit" : { "state" : "translated", - "value" : "הסיסמה שלך הוסרה." + "value" : "הסר את הסיסמה הנדרשת לביטול נעילת {app_name}." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "आपका पासवर्ड हटा दिया गया है।" + "value" : "पासवर्ड हटाएं जो {app_name} को अनलॉक करने के लिए आवश्यक है।" } }, "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Vaša lozinka je uklonjena." + "value" : "Uklonite lozinku potrebnu za otključavanje {app_name}." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "A jelszavadat eltávolítottuk." + "value" : "Távolítsd el a {app_name} alkalmazás jelszavát." } }, "hy-AM" : { "stringUnit" : { "state" : "translated", - "value" : "Ձեր գաղտնաբառը հեռացվել է։" + "value" : "Փոխեք {app_name}-ն ապակողպելու համար պահանջվող գաղտնաբառը:" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kata sandi Anda telah dihapus." + "value" : "Hapus kata sandi yang diperlukan untuk membuka kunci {app_name}." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "La tua password è stata rimossa." + "value" : "Rimuovi la password richiesta per sbloccare {app_name}." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "パスワードを削除しました。" + "value" : "{app_name} のロックを解除するために必要なパスワードを削除します" } }, "ka" : { "stringUnit" : { "state" : "translated", - "value" : "თქვენი პაროლი წაშლილია." + "value" : "პაროლის მოხსნა {app_name}'ის განბლოკვისათვის." } }, "km" : { "stringUnit" : { "state" : "translated", - "value" : "ពាក្យសម្ងាត់ របស់អ្នកត្រូវបានលុបចេញ។" + "value" : "ប្ដូរពាក្យសម្ងាត់ដែលបានតម្រូវឲ្យមានដើម្បីឈប់ទប់ស្កាត់ {app_name}។" } }, "kn" : { "stringUnit" : { "state" : "translated", - "value" : "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ." + "value" : "{app_name} ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಅಗತ್ಯವಿರುವ ಪಾಸ್ವರ್ಡ್ ತೆಗೆದುಹಾಕಿ." } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "당신의 비밀번호가 제거되었습니다." + "value" : "{app_name} 잠금 해제 시 필요한 비밀번호를 제거합니다." } }, "ku" : { "stringUnit" : { "state" : "translated", - "value" : "وشەی پەرەسەدت وەکبێژاند." + "value" : "لابردنی تێپەڕەوشەی پێویست بۆ کردنەوەی {app_name}." } }, "ku-TR" : { "stringUnit" : { "state" : "translated", - "value" : "Zoom" + "value" : "Şîfreya ku ji bo vekirina qefila {app_name} lazim e rake." } }, "lg" : { "stringUnit" : { "state" : "translated", - "value" : "Password yo ekatutuzzibwa." + "value" : "Ggyawo akatambi okwetengerera {app_name}." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Jūsų slaptažodis buvo pašalintas." + "value" : "Pašalinti slaptažodį, reikalingą {app_name} atrakinti." } }, "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Jūsu parole tika noņemta." + "value" : "Noņemt paroli, lai atbloķētu {app_name}." } }, "mk" : { "stringUnit" : { "state" : "translated", - "value" : "Вашата лозинка е отстранета." + "value" : "Отстранете ја лозинката потребна за отклучување на {app_name}." } }, "mn" : { "stringUnit" : { "state" : "translated", - "value" : "Таны нууц үг устгагдсан." + "value" : "{app_name}-ийг нээхэд шаардлагатай нууц үгийг устгах." } }, "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Kata laluan anda telah dibuang." + "value" : "Alih Keluar kata laluan yang diperlukan untuk membuka kunci {app_name}." } }, "my" : { "stringUnit" : { "state" : "translated", - "value" : "သင်၏ စကားဝှက် ဖယ်ရှားပြီးပါပြီ။" + "value" : "{app_name} ကိုလော့ခ်ဖွင့်ရန် လိုအပ်သော စကားဝှက်ကို ဖယ်ရှားပါ။" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Passordet ditt er fjernet." + "value" : "Fjern passordet som kreves for å låse opp {app_name}." } }, "nb-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Passordet ditt har blitt fjernet." + "value" : "Fjern passordet som kreves for å låse opp {app_name}." } }, "ne-NP" : { "stringUnit" : { "state" : "translated", - "value" : "तपाईँको पासवर्ड हटाइएको छ।" + "value" : "{app_name} अनलक गर्न आवश्यक पासवर्ड हटाउनुहोस्।" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Uw wachtwoord is verwijderd." + "value" : "Verwijder het wachtwoord dat nodig is om {app_name} te ontgrendelen." } }, "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "Passordet ditt er blitt fjerna." + "value" : "Fjern passordet nødvendig for å låsa opp {app_name}." } }, "ny" : { "stringUnit" : { "state" : "translated", - "value" : "Password yanu yachotsedwa." + "value" : "Chotsani achinsinsi omwe amafunika kutsegula {app_name}." } }, "pa-IN" : { "stringUnit" : { "state" : "translated", - "value" : "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।" + "value" : "{app_name} ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਲਈ ਲੋੜੀਂ ਦਾ ਪਾਸਵਰਡ ਹਟਾਓ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Usunięto hasło" + "value" : "Usuń hasło wymagane do odblokowania aplikacji {app_name}." } }, "ps" : { "stringUnit" : { "state" : "translated", - "value" : "ستاسو پاسورډ لرې شوی دی." + "value" : "هغه پاسورډ لرې کړئ چې د {app_name} خلاصولو لپاره اړین دی." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Sua senha foi removida." + "value" : "Remova a senha requerida para desbloquear {app_name}." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "A sua palavra-passe foi removida." + "value" : "Remova a palavra-passe necessária para desbloquear {app_name}." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Parola ta a fost eliminată." + "value" : "Elimină parola necesară pentru a debloca {app_name}." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Ваш пароль удален." + "value" : "Удалить пароль, необходимый для разблокировки {app_name}." } }, "sh" : { "stringUnit" : { "state" : "translated", - "value" : "Tvoja šifra je uklonjena." + "value" : "Ukloni lozinku potrebnu za otključavanje {app_name}." } }, "si-LK" : { "stringUnit" : { "state" : "translated", - "value" : "ඔබගේ මුරපදය ඉවත් කර ඇත." + "value" : "{app_name} අගුළු විවෘත කිරීමට අවශ්‍ය මුරපදය ඉවත් කරන්න." } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Vaše heslo bolo odstránené." + "value" : "Odstrániť heslo potrebné na odomknutie {app_name}." } }, "sl" : { "stringUnit" : { "state" : "translated", - "value" : "Vaše geslo je bilo odstranjeno." + "value" : "Odstrani geslo, potrebno za odklepanje {app_name}." } }, "sq" : { "stringUnit" : { "state" : "translated", - "value" : "Fjalëkalimi juaj është hequr." + "value" : "Hiqe fjalëkalimin e nevojshëm për të zhbllokuar {app_name}-in." } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Ваша лозинка је уклоњена." + "value" : "Уклони лозинку потребну за откључавање {app_name}." } }, "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Vaša lozinka je uklonjena." + "value" : "Ukloni lozinku potrebnu za otključavanje {app_name}." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ditt lösenord har tagits bort." + "value" : "Ta bort lösenordet som krävs för att låsa upp {app_name}." } }, "sw" : { "stringUnit" : { "state" : "translated", - "value" : "Nenosiri lako limeondolewa." + "value" : "Ondoa nywila inayotakiwa kufungua {app_name}." } }, "ta" : { "stringUnit" : { "state" : "translated", - "value" : "உங்களின் கடவுச்சொல் நீக்கப்பட்டது." + "value" : "{app_name} இற்கு அணுக அடியாக கடவுச்சொல்லை நீக்கவும்." } }, "te" : { "stringUnit" : { "state" : "translated", - "value" : "మీ పాస్‌వర్డ్ తొలగించబడింది." + "value" : "{app_name}ని అన్లాక్ చేయడానికి అవసరమైన పాస్వర్డ్ తొలగించు." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "รหัสผ่านของคุณถูกลบแล้ว" + "value" : "ลบรหัสผ่านที่ต้องใช้เพื่อปลดล็อก {app_name}" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Parolanız kaldırıldı." + "value" : "{app_name} uygulamasının kilidini açmak için gereken şifreyi kaldırın." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Ваш пароль був видалений." + "value" : "Видалити пароль, який потрібен для розблокування {app_name}." } }, "ur-IN" : { "stringUnit" : { "state" : "translated", - "value" : "آپ کا پاس ورڈ ہٹا دیا گیا ہے۔" + "value" : "{app_name} کو ان لاک کرنے کے لئے درکار پاس ورڈ کو ہٹا دیں۔" } }, "uz" : { "stringUnit" : { "state" : "translated", - "value" : "Parolingiz saqlandi. Iltimos, uni xavfsiz joyda saqlang." + "value" : "{app_name} ni ochish uchun talab qilinadigan parolni olib tashlash." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Mật khẩu của bạn đã được gỡ bỏ." + "value" : "Xóa mật khẩu cần thiết để mở khóa {app_name}." } }, "xh" : { "stringUnit" : { "state" : "translated", - "value" : "Iphasiwedi yakho isusiwe." + "value" : "Susa iphasiwedi efunekayo ukuze uvule {app_name}." } }, "zh-CN" : { "stringUnit" : { "state" : "translated", - "value" : "您的密码已被移除。" + "value" : "删除{app_name}的解锁密码。" } }, "zh-TW" : { "stringUnit" : { "state" : "translated", - "value" : "已移除密碼。" + "value" : "去除解鎖 {app_name} 的密碼。" } } } @@ -363673,40 +364197,40 @@ "ar" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} من %lld مطابقة" + "value" : "{found_count} من %lld مطابقات" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} من %lld إجابة" + "value" : "{found_count} من %lld مطابقات" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} من %lld مطابقات" + "value" : "{found_count} من %lld إجابة" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} من %lld مطابقات" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} من %lld مطابقات" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} من %lld مطابقات" + "value" : "{found_count} من %lld مطابقة" } } } @@ -363751,22 +364275,22 @@ "be" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} з %lld супадзенне" + "value" : "{found_count} з %lld супадзенняў" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} з %lld супадзенняў" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} з %lld супадзенняў" + "value" : "{found_count} з %lld супадзенне" } }, "other" : { @@ -363835,19 +364359,19 @@ "cs" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} z %lld odpovídá" + "value" : "{found_count} z %lld odpovídají" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} z %lld odpovídají" + "value" : "{found_count} z %lld odpovídá" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} z %lld odpovídá" @@ -363865,37 +364389,37 @@ "cy" : { "variations" : { "plural" : { - "zero" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} o %lld gemau" } }, - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} o %lld gêm" + "value" : "{found_count} o %lld gemau" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} o %lld gemau" + "value" : "{found_count} o %lld gêm" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} o %lld gemau" } }, - "many" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} o %lld gemau" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} o %lld gemau" @@ -364159,25 +364683,25 @@ "he" : { "variations" : { "plural" : { - "one" : { + "many" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} מתוך %lld תוצאה" + "value" : "{found_count} מתוך %lld תוצאות" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} מתוך %lld תוצאות" + "value" : "{found_count} מתוך %lld תוצאה" } }, - "many" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} מתוך %lld תוצאות" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} מתוך %lld תוצאות" @@ -364207,13 +364731,13 @@ "hr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} od %lld podudaranja" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} od %lld podudaranja" @@ -364423,22 +364947,22 @@ "lt" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} iš %lld atitikmuo" + "value" : "{found_count} iš %lld atitikmenų" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} iš %lld atitikmenų" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} iš %lld atitikmenų" + "value" : "{found_count} iš %lld atitikmuo" } }, "other" : { @@ -364453,19 +364977,19 @@ "lv" : { "variations" : { "plural" : { - "zero" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} no %lld sakritības" + "value" : "{found_count} no %lld sakritība" } }, - "one" : { + "other" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} no %lld sakritība" + "value" : "{found_count} no %lld sakritības" } }, - "other" : { + "zero" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} no %lld sakritības" @@ -364663,22 +365187,22 @@ "pl" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} z %lld wyniku" + "value" : "{found_count} z %lld wyników" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} z %lld wyników" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} z %lld wyników" + "value" : "{found_count} z %lld wyniku" } }, "other" : { @@ -364747,16 +365271,16 @@ "ro" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "Potrivire {found_count} din %lld" + "value" : "Potriviri {found_count} din %lld" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "Potriviri {found_count} din %lld" + "value" : "Potrivire {found_count} din %lld" } }, "other" : { @@ -364771,19 +365295,19 @@ "ru" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} из %lld совпадений" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} из %lld совпадений" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} из %lld совпадений" @@ -364801,19 +365325,19 @@ "sh" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} od %lld rezultata" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} od %lld rezultata" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} od %lld rezultata" @@ -364849,22 +365373,22 @@ "sk" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} z %lld zhoda" + "value" : "{found_count} z %lld zhôd" } }, - "few" : { + "many" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} z %lld zhôd" } }, - "many" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} z %lld zhôd" + "value" : "{found_count} z %lld zhoda" } }, "other" : { @@ -364879,28 +365403,28 @@ "sl" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} od %lld natančen zadetek" + "value" : "{found_count} od %lld se ujemajo" } }, - "two" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} od %lld se ujemata" + "value" : "{found_count} od %lld natančen zadetek" } }, - "few" : { + "other" : { "stringUnit" : { "state" : "translated", "value" : "{found_count} od %lld se ujemajo" } }, - "other" : { + "two" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} od %lld se ujemajo" + "value" : "{found_count} od %lld se ujemata" } } } @@ -364927,16 +365451,16 @@ "sr" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} од %lld резултат" + "value" : "{found_count} од %lld резултата" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} од %lld резултата" + "value" : "{found_count} од %lld резултат" } }, "other" : { @@ -364951,16 +365475,16 @@ "sr-Latn" : { "variations" : { "plural" : { - "one" : { + "few" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} od %lld rezultat" + "value" : "{found_count} od %lld rezultata" } }, - "few" : { + "one" : { "stringUnit" : { "state" : "translated", - "value" : "{found_count} od %lld rezultata" + "value" : "{found_count} od %lld rezultat" } }, "other" : { @@ -365077,12 +365601,6 @@ "uk" : { "variations" : { "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "{found_count} з %lld збіг" - } - }, "few" : { "stringUnit" : { "state" : "translated", @@ -365095,6 +365613,12 @@ "value" : "{found_count} з %lld збігів" } }, + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "{found_count} з %lld збіг" + } + }, "other" : { "stringUnit" : { "state" : "translated", @@ -396851,514 +397375,6 @@ } } } - }, - "callsMicrophonePermissionsRequired" : { - "extractionState" : "manual", - "localizations" : { - "az" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mikrofon müraciətinə icazə vermədiyiniz üçün {name} edən zəngi buraxdınız." - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zmeškali jste hovor od {name}, protože jste neudělili přístup k mikrofonu." - } - }, - "cy" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buoch yn methu alwad gan {name} oherwydd nad ydych wedi rhoi mynediad meicroffon." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du hast einen Anruf von {name} verpasst, weil Du keinen Mikrofonzugriff gewährt hast." - } - }, - "el" : { - "stringUnit" : { - "state" : "translated", - "value" : "Χάσατε μια κλήση από {name} επειδή δεν έχετε παραχωρήσει πρόσβαση στο μικρόφωνο." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You missed a call from {name} because you haven't granted microphone access." - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Perdiste una llamada de {name} porque no has otorgado acceso al micrófono." - } - }, - "es-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Perdiste una llamada de {name} porque no has otorgado acceso al micrófono." - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "شما یک تماس از {name} از دست دادید چون هنوز مجوز دسترسی به میکروفون را صادر نکرده اید." - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Missasit puhelun käyttäjältä {name}, koska et ole myöntänyt mikrofonin käyttöoikeutta." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous avez manqué un appel de {name} car vous n'avez pas accordé l'accès au microphone." - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "आपको {name} से कॉल छूट गया क्योंकि आपने माइक्रोफोन एक्सेस की अनुमति नहीं दी है।" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elmulasztottad {name} hívását, mert a mikrofon-hozzáférés nem lett megadva." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hai perso una chiamata da {name} perché non hai concesso l'accesso al microfono." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}からの通話を逃した理由は、マイクへのアクセスを許可していないためです。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name}님으로부터 받은 전화를 놓쳤습니다. 마이크 접근 권한을 허용하지 않았기 때문입니다." - } - }, - "ku-TR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Te ji telefona ji {name} hatî ma, ji ber ku te destûra gihîna mîkrofonê nedaye." - } - }, - "mn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Та {name}-аас дуудлага авч чадсангүй, учир нь та микрофон ашиглах зөвшөөрөлгүй байна." - } - }, - "ms" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anda terlepas panggilan daripada {name} kerana anda belum memberikan akses mikrofon." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Je hebt een gemiste oproep van {name} omdat je geen microfoontoegang hebt verleend." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Você perdeu uma chamada de {name} porque você não concedeu acesso ao microfone." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Você perdeu uma chamada de {name} porque você não concedeu acesso ao microfone." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ai ratat un apel de la {name} deoarece nu ai acordat acces la microfon." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы пропустили звонок от {name} потому что не предоставили доступ к микрофону." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zmeškali ste hovor od {name}, pretože ste neudelili prístup k mikrofónu." - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du missade ett samtal från {name} eftersom du inte har beviljat mikrofonåtkomst." - } - }, - "sw" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ulikosa simu kutoka {name} kwa sababu hujatoa ruhusa ya matumizi ya kipaza sauti." - } - }, - "ta" : { - "stringUnit" : { - "state" : "translated", - "value" : "நீங்கள் {name} -ன் அழைப்பை தவறவிட்டீர்கள் ஏனெனில் நீங்கள் மைக்ரோஃபோன் அணுகலை வழங்கவில்லை." - } - }, - "te" : { - "stringUnit" : { - "state" : "translated", - "value" : "మీరు {name} నుండి కాల్ మిస్ చేశారు కారణం మీరు మైక్రోఫోన్ యాక్సెస్ను ఇవ్వలేదు." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คุณพลาดสายจาก {name} เพราะคุณไม่ได้อนุญาต การเข้าถึงไมโครโฟน" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} kişisinden gelen bir çağrıyı, mikrofon erişimini vermediğiniz için kaçırdınız." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ви пропустили дзвінок від {name} через те, що не надали доступ до мікрофону." - } - }, - "ur-IN" : { - "stringUnit" : { - "state" : "translated", - "value" : "آپ نے {name} کی کال مس کر دی کیونکہ آپ نے مائیکروفون تک رسائی اجازت نہیں دی ہے۔" - } - }, - "uz" : { - "stringUnit" : { - "state" : "translated", - "value" : "Siz {name}dan qo'ng'iroqni o'tkazib yubordingiz, chunki siz mikrofon kirishiga ruxsat bermagansiz." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn đã bỏ lỡ cuộc gọi từ {name} vì bạn chưa cấp quyền truy cập micro." - } - }, - "xh" : { - "stringUnit" : { - "state" : "translated", - "value" : "You missed a call from {name} because you haven't granted microphone access." - } - }, - "zh-CN" : { - "stringUnit" : { - "state" : "translated", - "value" : "您错过了来自{name}的通话,因为您没有授予麦克风访问权限。" - } - }, - "zh-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "您錯過了{name}的來電,因為您還未授權麥克風存取權限。" - } - } - } - }, - "adminSendingPromotion" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sending admin promotion" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sending admin promotions" - } - } - } - } - } - } - } - } - }, - "deleteMessageConfirm" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Are you sure you want to delete this message?" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Are you sure you want to delete these messages?" - } - } - } - } - } - } - } - } - }, - "deleteMessageDescriptionDevice" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Are you sure you want to delete this message from this device only?" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Are you sure you want to delete these messages from this device only?" - } - } - } - } - } - } - } - } - }, - "deleteMessageNoteToSelfWarning" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "This message cannot be deleted from all your devices" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Some of the messages you have selected cannot be deleted from all your devices" - } - } - } - } - } - } - } - } - }, - "deleteMessageWarning" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "This message cannot be deleted for everyone" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Some of the messages you have selected cannot be deleted for everyone" - } - } - } - } - } - } - } - } - }, - "displayNameVisible" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Your Display Name is visible to users, groups and communities you interact with." - } - } - } - }, - "groupInviteReinvite" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "{name} invited you to rejoin {group_name}, where you are an Admin." - } - } - } - }, - "groupInviteReinviteYou" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You were invited to rejoin {group_name}, where you are an Admin." - } - } - } - }, - "groupInviteSending" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sending invite" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sending invites" - } - } - } - } - } - } - } - } - }, - "groupInviteYouHistory" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You were invited to join the group. Chat history was shared." - } - } - } - }, - "groupNameVisible" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Group name is visible to all group members." - } - } - } - }, - "groupRemovedYouGeneral" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You were removed from the group." - } - } - } - }, - "nicknameErrorShorter" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Please enter a shorter nickname" - } - } - } } }, "version" : "1.0" From 678a79a5828e33c0b001e43dfa56077fcb5b540b Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Fri, 18 Oct 2024 16:26:49 +1100 Subject: [PATCH 15/16] WIP: fix details on conversation list --- .../Home/HomeScreen+ConversationList.swift | 276 +++++++++--------- Session/Home/HomeScreen+ViewModel.swift | 23 +- Session/Home/HomeScreen.swift | 15 +- Session/Meta/AppDelegate.swift | 17 +- .../Themes/Theme+ClassicDark.swift | 8 +- .../Style Guide/Themes/Theme+OceanDark.swift | 4 +- 6 files changed, 169 insertions(+), 174 deletions(-) diff --git a/Session/Home/HomeScreen+ConversationList.swift b/Session/Home/HomeScreen+ConversationList.swift index 4f3a29c9f6..02baf32dd6 100644 --- a/Session/Home/HomeScreen+ConversationList.swift +++ b/Session/Home/HomeScreen+ConversationList.swift @@ -29,6 +29,7 @@ extension HomeScreen { ForEach(sectionModel.elements) { threadViewModel in MessageRequestItemRow(threadViewModel: threadViewModel) .listRowSeparator(.hidden) + .listRowInsets(EdgeInsets()) .swipeActions(edge: .trailing) { Button { @@ -50,6 +51,7 @@ extension HomeScreen { ForEach(sectionModel.elements) { threadViewModel in ConversationItemRow(threadViewModel: threadViewModel) .listRowSeparator(.hidden) + .listRowInsets(EdgeInsets()) .swipeActions(edge: .leading) { Button { @@ -63,6 +65,7 @@ extension HomeScreen { } } } + .listStyle(.plain) .transparentListBackground() } } @@ -268,144 +271,153 @@ extension HomeScreen { } var body: some View { - HStack( - alignment: .center, - content: { - if info.isBlocked { - Rectangle() - .fill(themeColor: .danger) - .frame( - width: Values.accentLineThickness, - height: .infinity - ) - } else if info.unreadCount > 0 { - Rectangle() - .fill(themeColor: .conversationButton_unreadStripBackground) - .frame( - width: Values.accentLineThickness, - height: .infinity - ) - } - - ProfilePictureSwiftUI( - size: .list, - publicKey: threadViewModel.threadId, - threadVariant: threadViewModel.threadVariant, - customImageData: threadViewModel.openGroupProfilePictureData, - profile: threadViewModel.profile, - additionalProfile: threadViewModel.additionalProfile - ) - - VStack( - alignment: .leading, - spacing: Values.verySmallSpacing, - content: { - HStack( - spacing: Values.verySmallSpacing, - content: { - // Display name - Text(info.displayName) - .bold() - .font(.system(size: Values.mediumFontSize)) - .foregroundColor(themeColor: .textPrimary) - - if info.isPinned { - Image("Pin") - .resizable() - .renderingMode(.template) - .foregroundColor(themeColor: .textSecondary) - .scaledToFit() - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) - } - - // Unread count - if info.shouldShowUnreadCount { - Text(info.unreadCountString) - .bold() - .font(.system(size: info.unreadCountFontSize)) - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Capsule() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame(minWidth: ConversationList.unreadCountViewSize) - .frame(height: ConversationList.unreadCountViewSize) - ) - } - - // Unread icon - if info.shouldShowUnreadIcon { - ZStack( - alignment: .topTrailing, - content: { - Image(systemName: "envelope") - .font(.system(size: Values.verySmallFontSize)) - .foregroundColor(themeColor: .textPrimary) - .padding(.top, 2) - - Circle() - .fill(themeColor: .conversationButton_unreadBackground) - .frame( - width: 6, - height: 6 - ) - .padding(.top, 1) - .padding(.trailing, 1) - } - ) - } - - // Mention icon - if info.shouldShowMentionIcon { - Text("@") // stringlint:disable + ZStack(alignment: .leading) { + if info.isBlocked { + Rectangle() + .fill(themeColor: .danger) + .frame( + width: Values.accentLineThickness, + height: .infinity + ) + } else if info.unreadCount > 0 { + Rectangle() + .fill(themeColor: .conversationButton_unreadStripBackground) + .frame(width: Values.accentLineThickness) + .frame(maxHeight: .infinity) + } + + HStack( + alignment: .center, + content: { + ProfilePictureSwiftUI( + size: .list, + publicKey: threadViewModel.threadId, + threadVariant: threadViewModel.threadVariant, + customImageData: threadViewModel.openGroupProfilePictureData, + profile: threadViewModel.profile, + additionalProfile: threadViewModel.additionalProfile + ) + .frame( + width: ProfilePictureView.Size.list.viewSize, + height: ProfilePictureView.Size.list.viewSize + ) + .padding(.leading, Values.mediumSpacing) + .padding(.trailing, Values.smallSpacing) + + VStack( + alignment: .leading, + spacing: Values.verySmallSpacing, + content: { + HStack( + spacing: Values.verySmallSpacing, + content: { + // Display name + Text(info.displayName) .bold() - .font(.system(size: Values.verySmallFontSize)) - .foregroundColor(themeColor: .conversationButton_unreadBubbleText) - .background( - Circle() - .fill(themeColor: .conversationButton_unreadBubbleBackground) - .frame( - width: ConversationList.unreadCountViewSize, - height: ConversationList.unreadCountViewSize - ) + .font(.system(size: Values.mediumFontSize)) + .foregroundColor(themeColor: .textPrimary) + .fixedSize() + + if info.isPinned { + Image("Pin") + .resizable() + .renderingMode(.template) + .foregroundColor(themeColor: .textSecondary) + .scaledToFit() + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + } + + // Unread count + if info.shouldShowUnreadCount { + Text(info.unreadCountString) + .bold() + .font(.system(size: info.unreadCountFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Capsule() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame(minWidth: ConversationList.unreadCountViewSize) + .frame(height: ConversationList.unreadCountViewSize) + ) + .padding(.horizontal, Values.smallSpacing) + } + + // Unread icon + if info.shouldShowUnreadIcon { + ZStack( + alignment: .topTrailing, + content: { + Image(systemName: "envelope") + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.top, 2) + + Circle() + .fill(themeColor: .conversationButton_unreadBackground) + .frame( + width: 6, + height: 6 + ) + .padding(.top, 1) + .padding(.trailing, 1) + } ) + } + + // Mention icon + if info.shouldShowMentionIcon { + Text("@") // stringlint:disable + .bold() + .font(.system(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .conversationButton_unreadBubbleText) + .background( + Circle() + .fill(themeColor: .conversationButton_unreadBubbleBackground) + .frame( + width: ConversationList.unreadCountViewSize, + height: ConversationList.unreadCountViewSize + ) + ) + } + + Spacer(minLength: 0) + + // Interaction time + Text(info.timeString) + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .textSecondary) + .opacity(Values.lowOpacity) + .padding(.horizontal, Values.mediumSpacing) + .fixedSize() } - - Spacer() - - // Interaction time - Text(info.timeString) - .font(.system(size: Values.smallFontSize)) - .foregroundColor(themeColor: .textSecondary) - .opacity(Values.lowOpacity) - } - ) - - HStack( - spacing: Values.verySmallSpacing, - content: { - if info.shouldShowTypingIndicator { + ) + + HStack( + spacing: Values.verySmallSpacing, + content: { + if info.shouldShowTypingIndicator { + + } else { + AttributedText(info.snippet) + .font(.system(size: Values.smallFontSize)) + } + + Spacer() + - } else { - AttributedText(info.snippet) } - - Spacer() - - - } - ) - } - ) - } - ) + ) + } + ) + } + ) + } + .frame(maxWidth: .infinity) + .frame(height: 68, alignment: .center) .backgroundColor(themeColor: info.themeBackgroundColor) - .frame( - width: .infinity, - height: 68 - ) } } } diff --git a/Session/Home/HomeScreen+ViewModel.swift b/Session/Home/HomeScreen+ViewModel.swift index 58be8a4735..4647b992ae 100644 --- a/Session/Home/HomeScreen+ViewModel.swift +++ b/Session/Home/HomeScreen+ViewModel.swift @@ -9,15 +9,12 @@ import SessionMessagingKit import SessionUtilitiesKit extension HomeScreen { + public protocol ViewModelDelegate: AnyObject { + func ensureRootViewController() + } public class ViewModel: ObservableObject { public let dependencies: Dependencies - - public var onReceivedInitialChange: (() -> ())? { - didSet { - self.startObservingChanges(onReceivedInitialChange: onReceivedInitialChange) - } - } - + public var onReceivedInitialChange: (() -> ())? = nil private var dataChangeObservable: DatabaseCancellable? { didSet { oldValue?.cancel() } // Cancel the old observable if there was one } @@ -30,14 +27,14 @@ extension HomeScreen { // MARK: - Initialization - init(using dependencies: Dependencies) { + init(using dependencies: Dependencies, onReceivedInitialChange: (() -> ())? = nil) { typealias InitialData = ( showViewedSeedBanner: Bool, hasHiddenMessageRequests: Bool, profile: Profile ) - let initialData: InitialData? = Storage.shared.read { db -> InitialData in + let initialData: InitialData? = dependencies.storage.read { db -> InitialData in ( !db[.hasViewedSeed], db[.hasHiddenMessageRequests], @@ -46,6 +43,7 @@ extension HomeScreen { } self.dependencies = dependencies + self.onReceivedInitialChange = onReceivedInitialChange self.state = DataModel.State( showViewedSeedBanner: (initialData?.showViewedSeedBanner ?? true), @@ -218,12 +216,13 @@ extension HomeScreen { } ) - Storage.shared.addObserver(self.pagedDataObserver) + dependencies.storage.addObserver(self.pagedDataObserver) self.registerForNotifications() // Run the initial query on a background thread so we don't block the main thread DispatchQueue.global(qos: .userInitiated).async { [weak self] in + self?.startObservingChanges(onReceivedInitialChange: self?.onReceivedInitialChange) // The `.pageBefore` will query from a `0` offset loading the first page self?.pagedDataObserver?.load(.pageBefore) } @@ -382,9 +381,9 @@ extension HomeScreen { runAndClearInitialChangeCallback = nil } - dataChangeObservable = Storage.shared.start( + dataChangeObservable = dependencies.storage.start( self.observableState, - onError: { _ in }, + onError: { _ in print("Error observing data") }, onChange: { [weak self] state in // The default scheduler emits changes on the main thread self?.handleStateUpdates(state) diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index 11bf4cdea3..fe41cf3070 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -13,15 +13,10 @@ struct HomeScreen: View { @EnvironmentObject var host: HostWrapper @StateObject private var viewModel: ViewModel private var flow: Onboarding.Flow? - public var onReceivedInitialChange: (() -> ())? { - didSet { - viewModel.onReceivedInitialChange = onReceivedInitialChange - } - } - init(flow: Onboarding.Flow? = nil, using dependencies: Dependencies) { - _viewModel = StateObject(wrappedValue: ViewModel(using: dependencies)) + init(flow: Onboarding.Flow? = nil, using dependencies: Dependencies, rootViewControllerSetupComplete: (() -> ())? = nil) { self.flow = flow + _viewModel = StateObject(wrappedValue: ViewModel(using: dependencies, onReceivedInitialChange: rootViewControllerSetupComplete)) self.initialize() } @@ -43,11 +38,7 @@ struct HomeScreen: View { // Onion request path countries cache IP2Country.populateCacheIfNeededAsync() } - - public mutating func startObservingChanges(onReceivedInitialChange: (() -> ())? = nil) { - self.onReceivedInitialChange = onReceivedInitialChange - } - + var body: some View { ZStack( alignment: .top, diff --git a/Session/Meta/AppDelegate.swift b/Session/Meta/AppDelegate.swift index 7c4713270e..f4b21a2822 100644 --- a/Session/Meta/AppDelegate.swift +++ b/Session/Meta/AppDelegate.swift @@ -667,20 +667,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD case .completed: DispatchQueue.main.async { [dependencies] in - var homeScreen: HomeScreen = HomeScreen(using: dependencies) - let viewController = SessionHostingViewController(rootView: homeScreen) - viewController.setUpNavBarSessionHeading() - /// We want to start observing the changes for the 'HomeVC' and want to wait until we actually get data back before we - /// continue as we don't want to show a blank home screen - DispatchQueue.global(qos: .userInitiated).async { - homeScreen.startObservingChanges() { + let viewController = SessionHostingViewController( + rootView: HomeScreen(using: dependencies) { populateHomeScreenTimer?.cancel() - - DispatchQueue.main.async { - rootViewControllerSetupComplete(viewController) - } } - } + ) + viewController.setUpNavBarSessionHeading() + rootViewControllerSetupComplete(viewController) } } } diff --git a/SessionUIKit/Style Guide/Themes/Theme+ClassicDark.swift b/SessionUIKit/Style Guide/Themes/Theme+ClassicDark.swift index b5e7ee9fe6..de52638d7b 100644 --- a/SessionUIKit/Style Guide/Themes/Theme+ClassicDark.swift +++ b/SessionUIKit/Style Guide/Themes/Theme+ClassicDark.swift @@ -207,11 +207,11 @@ internal enum Theme_ClassicDark: ThemeColors { .toast_background: .classicDark2, // ConversationButton - .conversationButton_background: .classicDark1, - .conversationButton_unreadBackground: .classicDark2, + .conversationButton_background: .classicDark0, + .conversationButton_unreadBackground: .classicDark1, .conversationButton_unreadStripBackground: .primary, - .conversationButton_unreadBubbleBackground: .classicDark3, - .conversationButton_unreadBubbleText: .classicDark6, + .conversationButton_unreadBubbleBackground: .primary, + .conversationButton_unreadBubbleText: .classicDark0, .conversationButton_swipeDestructive: .dangerDark, .conversationButton_swipeSecondary: .classicDark2, .conversationButton_swipeTertiary: Theme.PrimaryColor.orange.colorSwiftUI, diff --git a/SessionUIKit/Style Guide/Themes/Theme+OceanDark.swift b/SessionUIKit/Style Guide/Themes/Theme+OceanDark.swift index 1e76a60e3b..f6c7f00d47 100644 --- a/SessionUIKit/Style Guide/Themes/Theme+OceanDark.swift +++ b/SessionUIKit/Style Guide/Themes/Theme+OceanDark.swift @@ -207,8 +207,8 @@ internal enum Theme_OceanDark: ThemeColors { .toast_background: .oceanDark4, // ConversationButton - .conversationButton_background: .oceanDark3, - .conversationButton_unreadBackground: .oceanDark4, + .conversationButton_background: .oceanDark2, + .conversationButton_unreadBackground: .oceanDark3, .conversationButton_unreadStripBackground: .primary, .conversationButton_unreadBubbleBackground: .primary, .conversationButton_unreadBubbleText: .oceanDark0, From 6b20ad2ca68320917e73ac153d64b5b2be173383 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <> Date: Fri, 18 Oct 2024 16:40:53 +1100 Subject: [PATCH 16/16] minor fix --- Session/Home/HomeScreen+ConversationList.swift | 2 +- Session/Home/HomeScreen.swift | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Session/Home/HomeScreen+ConversationList.swift b/Session/Home/HomeScreen+ConversationList.swift index 02baf32dd6..27c0d9ec9d 100644 --- a/Session/Home/HomeScreen+ConversationList.swift +++ b/Session/Home/HomeScreen+ConversationList.swift @@ -342,7 +342,7 @@ extension HomeScreen { .frame(minWidth: ConversationList.unreadCountViewSize) .frame(height: ConversationList.unreadCountViewSize) ) - .padding(.horizontal, Values.smallSpacing) + .padding(.horizontal, Values.verySmallSpacing) } // Unread icon diff --git a/Session/Home/HomeScreen.swift b/Session/Home/HomeScreen.swift index fe41cf3070..b372115698 100644 --- a/Session/Home/HomeScreen.swift +++ b/Session/Home/HomeScreen.swift @@ -43,10 +43,6 @@ struct HomeScreen: View { ZStack( alignment: .top, content: { - if viewModel.state.showViewedSeedBanner { - SeedBanner(action: handleContinueButtonTapped) - } - if viewModel.threadData.isEmpty { ZStack { EmptyStateView(flow: self.flow) @@ -58,8 +54,14 @@ struct HomeScreen: View { ) } - ConversationList(threadData: viewModel.threadData) - + VStack(spacing: 0) { + if viewModel.state.showViewedSeedBanner { + SeedBanner(action: handleContinueButtonTapped) + } + + ConversationList(threadData: viewModel.threadData) + } + NewConversationButton(action: createNewConversation) } )