From 481058734c22e73e34cabb8f7b7516694ba3aa80 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Tue, 3 Oct 2023 14:58:14 +0300 Subject: [PATCH 01/78] Added empty PlanStep into the Site Creation flow --- .../Site Creation/Plan/PlanStep.swift | 13 ++++++++++++ .../Plan/PlanWizardContent.swift | 14 +++++++++++++ .../Wizard/SiteCreationStep.swift | 1 + .../Wizard/SiteCreationWizardLauncher.swift | 3 +++ WordPress/WordPress.xcodeproj/project.pbxproj | 20 +++++++++++++++++++ 5 files changed, 51 insertions(+) create mode 100644 WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift create mode 100644 WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift new file mode 100644 index 000000000000..0c8b52d51143 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift @@ -0,0 +1,13 @@ +final class PlanStep: WizardStep { + weak var delegate: WizardDelegate? + + private let creator: SiteCreator + + private(set) lazy var content: UIViewController = { + return PlanWizardContent() + }() + + init(creator: SiteCreator) { + self.creator = creator + } +} diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift new file mode 100644 index 000000000000..86661ca9c34e --- /dev/null +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift @@ -0,0 +1,14 @@ +import UIKit + +final class PlanWizardContent: WebKitViewController { + init() { + let configuration = WebViewControllerConfiguration(url: nil) + super.init(configuration: configuration) + } + + // MARK: - Required Init + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationStep.swift b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationStep.swift index 557b7a2963d4..f5b569bf7aaa 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationStep.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationStep.swift @@ -6,4 +6,5 @@ enum SiteCreationStep { case intent case segments case siteAssembly + case plan } diff --git a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift index e123db5848a2..33796e2f031c 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift @@ -10,6 +10,7 @@ final class SiteCreationWizardLauncher { .intent, .design, .address, + .plan, .siteAssembly ] @@ -43,6 +44,8 @@ final class SiteCreationWizardLauncher { case .address: let addressService = DomainsServiceAdapter(coreDataStack: ContextManager.shared) return WebAddressStep(creator: self.creator, service: addressService) + case .plan: + return PlanStep(creator: self.creator) case .design: // we call dropLast to remove .siteAssembly let isLastStep = steps.dropLast().last == .design diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index cbef58c205a5..789d688eedd2 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -210,6 +210,10 @@ 01D2FF6B2AA782720038E040 /* LockScreenAllTimePostsBestViewsStatWidgetConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D2FF692AA782720038E040 /* LockScreenAllTimePostsBestViewsStatWidgetConfig.swift */; }; 01DBFD8729BDCBF200F3720F /* JetpackNativeConnectionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DBFD8629BDCBF200F3720F /* JetpackNativeConnectionService.swift */; }; 01DBFD8829BDCBF200F3720F /* JetpackNativeConnectionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DBFD8629BDCBF200F3720F /* JetpackNativeConnectionService.swift */; }; + 01E258022ACC36FA00F09666 /* PlanStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E258012ACC36FA00F09666 /* PlanStep.swift */; }; + 01E258032ACC36FA00F09666 /* PlanStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E258012ACC36FA00F09666 /* PlanStep.swift */; }; + 01E258052ACC373800F09666 /* PlanWizardContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E258042ACC373800F09666 /* PlanWizardContent.swift */; }; + 01E258062ACC373800F09666 /* PlanWizardContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E258042ACC373800F09666 /* PlanWizardContent.swift */; }; 01E78D1D296EA54F00FB6863 /* StatsPeriodHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E78D1C296EA54F00FB6863 /* StatsPeriodHelperTests.swift */; }; 02761EC02270072F009BAF0F /* BlogDetailsViewController+SectionHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02761EBF2270072F009BAF0F /* BlogDetailsViewController+SectionHelpers.swift */; }; 02761EC222700A9C009BAF0F /* BlogDetailsSubsectionToSectionCategoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02761EC122700A9C009BAF0F /* BlogDetailsSubsectionToSectionCategoryTests.swift */; }; @@ -5843,6 +5847,8 @@ 01D2FF662AA780DC0038E040 /* LockScreenAllTimeViewsVisitorsStatWidgetConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenAllTimeViewsVisitorsStatWidgetConfig.swift; sourceTree = ""; }; 01D2FF692AA782720038E040 /* LockScreenAllTimePostsBestViewsStatWidgetConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenAllTimePostsBestViewsStatWidgetConfig.swift; sourceTree = ""; }; 01DBFD8629BDCBF200F3720F /* JetpackNativeConnectionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackNativeConnectionService.swift; sourceTree = ""; }; + 01E258012ACC36FA00F09666 /* PlanStep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanStep.swift; sourceTree = ""; }; + 01E258042ACC373800F09666 /* PlanWizardContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanWizardContent.swift; sourceTree = ""; }; 01E78D1C296EA54F00FB6863 /* StatsPeriodHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsPeriodHelperTests.swift; sourceTree = ""; }; 02761EBF2270072F009BAF0F /* BlogDetailsViewController+SectionHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlogDetailsViewController+SectionHelpers.swift"; sourceTree = ""; }; 02761EC122700A9C009BAF0F /* BlogDetailsSubsectionToSectionCategoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogDetailsSubsectionToSectionCategoryTests.swift; sourceTree = ""; }; @@ -9815,6 +9821,15 @@ name = Coordinators; sourceTree = ""; }; + 01E258002ACC36DC00F09666 /* Plan */ = { + isa = PBXGroup; + children = ( + 01E258012ACC36FA00F09666 /* PlanStep.swift */, + 01E258042ACC373800F09666 /* PlanWizardContent.swift */, + ); + path = Plan; + sourceTree = ""; + }; 027AC51F2278982D0033E56E /* DomainCredit */ = { isa = PBXGroup; children = ( @@ -16287,6 +16302,7 @@ B0960C8527D14B9200BC9717 /* Site Intent */, D8C31CBF2188442200A33B35 /* Site Segments */, D8380CA72194287B00250609 /* Web Address */, + 01E258002ACC36DC00F09666 /* Plan */, 738B9A3F21B85CF20005062B /* Wizard */, ); path = "Site Creation"; @@ -21549,6 +21565,7 @@ 5D6C4B131B604190005E3C43 /* UITextView+RichTextView.swift in Sources */, E15644E91CE0E47C00D96E64 /* RoundedButton.swift in Sources */, 08A250FC28D9F0E200F50420 /* CommentDetailInfoViewModel.swift in Sources */, + 01E258052ACC373800F09666 /* PlanWizardContent.swift in Sources */, 08CC67801C49B65A00153AD7 /* MenuLocation.m in Sources */, 0CED95602A460F4B0020F420 /* DebugFeatureFlagsView.swift in Sources */, FA73D7D6278D9E5D00DF24B3 /* BlogDashboardViewController.swift in Sources */, @@ -21939,6 +21956,7 @@ 80EF672527F3D63B0063B138 /* DashboardStatsStackView.swift in Sources */, E1D0D81616D3B86800E33F4C /* SafariActivity.m in Sources */, E603C7701BC94AED00AD49D7 /* WordPress-37-38.xcmappingmodel in Sources */, + 01E258022ACC36FA00F09666 /* PlanStep.swift in Sources */, 741E22461FC0CC55007967AB /* UploadOperation.swift in Sources */, 46C984682527863E00988BB9 /* LayoutPickerAnalyticsEvent.swift in Sources */, 7E442FCD20F6AB9C00DEACA5 /* ActivityRange.swift in Sources */, @@ -23713,6 +23731,7 @@ 835771362A7C2755006B2A3E /* JetpackSocialNoSharesView.swift in Sources */, FABB21152602FC2C00C8785C /* WPStyleGuide+Reply.swift in Sources */, 836498CF281735CC00A2C170 /* BloggingPromptsHeaderView.swift in Sources */, + 01E258032ACC36FA00F09666 /* PlanStep.swift in Sources */, FABB21162602FC2C00C8785C /* WPBlogTableViewCell.m in Sources */, FABB21172602FC2C00C8785C /* JetpackBackupOptionsViewController.swift in Sources */, F4D829682931059000038726 /* MigrationSuccessActionHandler.swift in Sources */, @@ -24924,6 +24943,7 @@ 803DE81428FFAE36007D4E9C /* RemoteConfigStore.swift in Sources */, 086C117D2A2F6451004A3821 /* CompliancePopover.swift in Sources */, FA98A2512833F1DC003B9233 /* QuickStartChecklistConfigurable.swift in Sources */, + 01E258062ACC373800F09666 /* PlanWizardContent.swift in Sources */, 931F312D2714302A0075433B /* PublicizeServicesState.swift in Sources */, FABB24902602FC2C00C8785C /* StatsPeriodAsyncOperation.swift in Sources */, FABB24912602FC2C00C8785C /* NotificationsViewController.swift in Sources */, From 20ac08a11e0b3969e85d633b38cb648bd7c935e3 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Tue, 3 Oct 2023 14:46:08 +0300 Subject: [PATCH 02/78] Update button title to Select domain after selecting domain --- .../Web Address/WebAddressWizardContent.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift index d3e7637aa0a3..b8ec15f2fc48 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift @@ -128,7 +128,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { super.init(scrollableView: table, mainTitle: Strings.mainTitle, prompt: Strings.prompt, - primaryActionTitle: Strings.createSite, + primaryActionTitle: Strings.selectDomain, accessoryView: searchHeader) } @@ -504,8 +504,9 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { comment: "Select domain name. Title") static let prompt: String = NSLocalizedString("Search for a short and memorable keyword to help people find and visit your website.", comment: "Select domain name. Subtitle") - static let createSite: String = NSLocalizedString("Create Site", - comment: "Button to progress to the next step") + static let selectDomain: String = NSLocalizedString("siteCreation.domains.buttons.selectDomain", + value: "Select domain", + comment: "Button to progress to the next step after selecting domain in Site Creation") static let searchPlaceholder: String = NSLocalizedString("Type a name for your site", comment: "Site creation. Seelect a domain, search field placeholder") static let searchAccessibility: String = NSLocalizedString("Searches for available domains to use for your site.", From a1dfbdb36b6d1755165ee1be0820807046e8fbf4 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 4 Oct 2023 10:53:49 -0400 Subject: [PATCH 03/78] Bump version number --- config/Version.internal.xcconfig | 4 ++-- config/Version.public.xcconfig | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/Version.internal.xcconfig b/config/Version.internal.xcconfig index 5374b502ee50..e4dbd80084c6 100644 --- a/config/Version.internal.xcconfig +++ b/config/Version.internal.xcconfig @@ -1,4 +1,4 @@ -VERSION_SHORT=23.3 +VERSION_SHORT=23.3.1 // Internal long version example: VERSION_LONG=9.9.0.20180423 -VERSION_LONG=23.3.0.20230929 +VERSION_LONG=23.3.1.20231004 diff --git a/config/Version.public.xcconfig b/config/Version.public.xcconfig index 81905bdf276f..e364e2212ab5 100644 --- a/config/Version.public.xcconfig +++ b/config/Version.public.xcconfig @@ -1,4 +1,4 @@ -VERSION_SHORT=23.3 +VERSION_SHORT=23.3.1 // Public long version example: VERSION_LONG=9.9.0.0 -VERSION_LONG=23.3.0.2 +VERSION_LONG=23.3.1.0 From b6c74fc55db4b71a7e811d28858dc3e620ddbb2d Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Wed, 4 Oct 2023 19:20:47 +0300 Subject: [PATCH 04/78] Configure Plan Step in Site Creation - Load a special jetpack-app-plans page on Calypso - Extract selected plan id when the plan is selected --- .../Site Creation/Plan/PlanStep.swift | 6 ++- .../Plan/PlanWizardContent.swift | 38 +++++++++++++++- .../Plan/PlanWizardContentViewModel.swift | 45 +++++++++++++++++++ WordPress/WordPress.xcodeproj/project.pbxproj | 6 +++ 4 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift index 0c8b52d51143..c7c4a1a736c6 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift @@ -4,7 +4,11 @@ final class PlanStep: WizardStep { private let creator: SiteCreator private(set) lazy var content: UIViewController = { - return PlanWizardContent() + let viewModel = PlanWizardContentViewModel(siteCreator: creator) + return PlanWizardContent(viewModel: viewModel) { [weak self] planId in + self?.creator.planId = planId + self?.delegate?.nextStep() + } }() init(creator: SiteCreator) { diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift index 86661ca9c34e..25ff0eacee94 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift @@ -1,11 +1,47 @@ import UIKit final class PlanWizardContent: WebKitViewController { - init() { + typealias PlanSelectionCallback = (Int?) -> Void + + private let viewModel: PlanWizardContentViewModel + private let completion: PlanSelectionCallback + + init(viewModel: PlanWizardContentViewModel, completion: @escaping PlanSelectionCallback) { + self.viewModel = viewModel + self.completion = completion let configuration = WebViewControllerConfiguration(url: nil) super.init(configuration: configuration) } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + load(request: URLRequest(url: viewModel.url)) + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + + /// Reload web view when View Controller is closed + /// Ensures outdated web view is not shown when navigating back and forth + webView.load(URLRequest(url: URL(string: "about:blank")!)) + } + + override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + guard let url = navigationAction.request.url else { + decisionHandler(.allow) + return + } + + if viewModel.isPlanSelected(url) { + completion(viewModel.selectedPlanId(from: url)) + decisionHandler(.cancel) + return + } + + decisionHandler(.allow) + } + // MARK: - Required Init required init?(coder aDecoder: NSCoder) { diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift new file mode 100644 index 000000000000..51e03573a625 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift @@ -0,0 +1,45 @@ +import Foundation + +struct PlanWizardContentViewModel { + private let siteCreator: SiteCreator + + var url: URL { + var components = URLComponents(string: Constants.plansWebAddress)! + var queryItems: [URLQueryItem] = [] + + if let domainSuggestion = siteCreator.address, !domainSuggestion.isFree { + queryItems.append(.init(name: Constants.paidDomainNameParameter, value: domainSuggestion.domainName)) + } + + queryItems.append(.init(name: Constants.redirectParameter, value: Constants.redirectScheme + "://")) + components.queryItems = queryItems + return components.url! + } + + + init(siteCreator: SiteCreator) { + self.siteCreator = siteCreator + } + + func isPlanSelected(_ redirectionURL: URL) -> Bool { + return redirectionURL.scheme == Constants.redirectScheme + } + + func selectedPlanId(from url: URL) -> Int? { + guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true), + let queryItem = components.queryItems?.first(where: { $0.name == Constants.planIdParameter })?.value, + let planId = Int(queryItem) else { + return nil + } + + return planId + } + + enum Constants { + static let plansWebAddress = "https://container-exciting-jennings.calypso.live/jetpack-app-plans" // TODO: Set to WP.COM address + static let redirectParameter = "redirect_to" + static let redirectScheme = "jetpackappplans" + static let planIdParameter = "plan_id" + static let paidDomainNameParameter = "paid_domain_name" + } +} diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 789d688eedd2..c8f9c699d6a7 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -214,6 +214,8 @@ 01E258032ACC36FA00F09666 /* PlanStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E258012ACC36FA00F09666 /* PlanStep.swift */; }; 01E258052ACC373800F09666 /* PlanWizardContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E258042ACC373800F09666 /* PlanWizardContent.swift */; }; 01E258062ACC373800F09666 /* PlanWizardContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E258042ACC373800F09666 /* PlanWizardContent.swift */; }; + 01E2580B2ACDC72C00F09666 /* PlanWizardContentViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E2580A2ACDC72C00F09666 /* PlanWizardContentViewModel.swift */; }; + 01E2580C2ACDC72C00F09666 /* PlanWizardContentViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E2580A2ACDC72C00F09666 /* PlanWizardContentViewModel.swift */; }; 01E78D1D296EA54F00FB6863 /* StatsPeriodHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E78D1C296EA54F00FB6863 /* StatsPeriodHelperTests.swift */; }; 02761EC02270072F009BAF0F /* BlogDetailsViewController+SectionHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02761EBF2270072F009BAF0F /* BlogDetailsViewController+SectionHelpers.swift */; }; 02761EC222700A9C009BAF0F /* BlogDetailsSubsectionToSectionCategoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02761EC122700A9C009BAF0F /* BlogDetailsSubsectionToSectionCategoryTests.swift */; }; @@ -5849,6 +5851,7 @@ 01DBFD8629BDCBF200F3720F /* JetpackNativeConnectionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackNativeConnectionService.swift; sourceTree = ""; }; 01E258012ACC36FA00F09666 /* PlanStep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanStep.swift; sourceTree = ""; }; 01E258042ACC373800F09666 /* PlanWizardContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanWizardContent.swift; sourceTree = ""; }; + 01E2580A2ACDC72C00F09666 /* PlanWizardContentViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanWizardContentViewModel.swift; sourceTree = ""; }; 01E78D1C296EA54F00FB6863 /* StatsPeriodHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsPeriodHelperTests.swift; sourceTree = ""; }; 02761EBF2270072F009BAF0F /* BlogDetailsViewController+SectionHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlogDetailsViewController+SectionHelpers.swift"; sourceTree = ""; }; 02761EC122700A9C009BAF0F /* BlogDetailsSubsectionToSectionCategoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogDetailsSubsectionToSectionCategoryTests.swift; sourceTree = ""; }; @@ -9826,6 +9829,7 @@ children = ( 01E258012ACC36FA00F09666 /* PlanStep.swift */, 01E258042ACC373800F09666 /* PlanWizardContent.swift */, + 01E2580A2ACDC72C00F09666 /* PlanWizardContentViewModel.swift */, ); path = Plan; sourceTree = ""; @@ -21120,6 +21124,7 @@ C856748F243EF177001A995E /* GutenbergTenorMediaPicker.swift in Sources */, 83C972E0281C45AB0049E1FE /* Post+BloggingPrompts.swift in Sources */, B50C0C5F1EF42A4A00372C65 /* AztecPostViewController.swift in Sources */, + 01E2580B2ACDC72C00F09666 /* PlanWizardContentViewModel.swift in Sources */, 086E1FE01BBB35D2002D86CA /* MenusViewController.m in Sources */, FAFC064B27D22E4C002F0483 /* QuickStartTourStateView.swift in Sources */, 9F3EFCA3208E308A00268758 /* UIViewController+Notice.swift in Sources */, @@ -23710,6 +23715,7 @@ 8B55FA122614D989007D618E /* UnifiedPrologueReaderContentView.swift in Sources */, C34E94BC28EDF80700D27A16 /* InfiniteScrollerViewDelegate.swift in Sources */, FABB21072602FC2C00C8785C /* ReaderTableContent.swift in Sources */, + 01E2580C2ACDC72C00F09666 /* PlanWizardContentViewModel.swift in Sources */, FABB21082602FC2C00C8785C /* SiteCreationHeaderData.swift in Sources */, FABB21092602FC2C00C8785C /* WPAuthTokenIssueSolver.m in Sources */, FABB210A2602FC2C00C8785C /* PageAutoUploadMessageProvider.swift in Sources */, From 9a2300db806546df653e60c1d11432b7ae019b23 Mon Sep 17 00:00:00 2001 From: Salim Braksa Date: Tue, 19 Sep 2023 18:41:28 +0100 Subject: [PATCH 05/78] Remove Scroll Viewl logic from CompliancePopover --- .../EEUUSCompliance/CompliancePopover.swift | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopover.swift b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopover.swift index 6c1a2380e457..6d844def9c83 100644 --- a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopover.swift +++ b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopover.swift @@ -7,28 +7,11 @@ struct CompliancePopover: View { var goToSettingsAction: (() -> ())? var saveAction: (() -> ())? - var shouldScroll: Bool = false - var screenHeight: CGFloat = 0 @StateObject var viewModel: CompliancePopoverViewModel var body: some View { - if shouldScroll { - GeometryReader { reader in - ScrollView(showsIndicators: false) { - contentVStack - // Fixes the issue of scroll view content size not sizing properly. - // Without this, on large dynamic fonts, the view is not properly scrollable. - Spacer().frame(height: reader.size.height - screenHeight + Constants.verticalScrollBuffer) - } - } - } else { - contentVStack - } - } - - private var contentVStack: some View { VStack(alignment: .leading, spacing: Length.Padding.double) { titleText subtitleText From 87c39d0d0fec059b5c46c0a2f4cf6b8dae22883d Mon Sep 17 00:00:00 2001 From: Salim Braksa Date: Tue, 19 Sep 2023 18:45:02 +0100 Subject: [PATCH 06/78] Implement scroll logic in CompliancePopoverViewController --- .../CompliancePopoverViewController.swift | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift index c59d72482274..2df40c785975 100644 --- a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift +++ b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift @@ -9,14 +9,20 @@ final class CompliancePopoverViewController: UIViewController { private let viewModel: CompliancePopoverViewModel // MARK: - Views + + private let scrollView: UIScrollView = { + let view = UIScrollView() + view.showsVerticalScrollIndicator = false + view.translatesAutoresizingMaskIntoConstraints = false + return view + }() + private let hostingController: UIHostingController private var contentView: UIView { return hostingController.view } - private var bannerIntrinsicHeight: CGFloat = 0 - init(viewModel: CompliancePopoverViewModel) { self.viewModel = viewModel hostingController = UIHostingController(rootView: CompliancePopover(viewModel: self.viewModel)) @@ -43,19 +49,25 @@ final class CompliancePopoverViewController: UIViewController { override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() + // let targetSize = CGSize(width: view.bounds.width, height: 0) let contentViewSize = contentView.systemLayoutSizeFitting(targetSize) self.contentView.frame = .init(origin: .zero, size: contentViewSize) - self.preferredContentSize = contentView.bounds.size - self.hostingController.rootView.screenHeight = self.view.frame.height - self.hostingController.rootView.shouldScroll = (contentViewSize.height + 100) > self.view.frame.height + // + self.scrollView.contentSize = contentViewSize + + // + self.preferredContentSize = .init(width: contentViewSize.width, height: contentViewSize.height) } private func addContentView() { + self.view.addSubview(scrollView) + self.view.pinSubviewToAllEdges(scrollView) self.hostingController.willMove(toParent: self) self.addChild(hostingController) - self.view.addSubview(contentView) + self.contentView.translatesAutoresizingMaskIntoConstraints = true + self.scrollView.addSubview(contentView) self.hostingController.didMove(toParent: self) } } From b3128dc3ff1a356a99ca49179e72e731242c43e5 Mon Sep 17 00:00:00 2001 From: Salim Braksa Date: Tue, 19 Sep 2023 18:54:06 +0100 Subject: [PATCH 07/78] Add comments explaining the implementation logic --- .../CompliancePopoverViewController.swift | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift index 2df40c785975..6b71e696ef48 100644 --- a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift +++ b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift @@ -49,16 +49,21 @@ final class CompliancePopoverViewController: UIViewController { override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() - // + // Calculate the size needed for the view to fit its content let targetSize = CGSize(width: view.bounds.width, height: 0) let contentViewSize = contentView.systemLayoutSizeFitting(targetSize) self.contentView.frame = .init(origin: .zero, size: contentViewSize) + // Set the scrollView's content size to match the contentView's size // + // Scroll is enabled / disabled automatically depending on whether the `contentSize` is bigger than the its size. self.scrollView.contentSize = contentViewSize + // Set the preferred content size for the view controller to match the contentView's size // - self.preferredContentSize = .init(width: contentViewSize.width, height: contentViewSize.height) + // This property should be updated when `DrawerPresentable.collapsedHeight` is `intrinsicHeight`. + // Because under the hood the `BottomSheetViewController` reads this property to layout its subviews. + self.preferredContentSize = contentViewSize } private func addContentView() { From b7b946157ca45548a9ea4f1cddcf276cb496b9cb Mon Sep 17 00:00:00 2001 From: Salim Braksa Date: Wed, 20 Sep 2023 22:59:00 +0100 Subject: [PATCH 08/78] Resolve a minor issue where systemLayoutSizeFitting was returning inconsistent results --- .../EEUUSCompliance/CompliancePopoverViewController.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift index 6b71e696ef48..920535bf6a24 100644 --- a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift +++ b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift @@ -51,8 +51,9 @@ final class CompliancePopoverViewController: UIViewController { super.viewDidLayoutSubviews() // Calculate the size needed for the view to fit its content let targetSize = CGSize(width: view.bounds.width, height: 0) + self.contentView.frame = CGRect(origin: .zero, size: targetSize) let contentViewSize = contentView.systemLayoutSizeFitting(targetSize) - self.contentView.frame = .init(origin: .zero, size: contentViewSize) + self.contentView.frame.size = contentViewSize // Set the scrollView's content size to match the contentView's size // From 1590c8a4ebbd36c906e2279e74e2ca3048a99a9e Mon Sep 17 00:00:00 2001 From: Salim Braksa Date: Wed, 20 Sep 2023 23:31:39 +0100 Subject: [PATCH 09/78] Update RELEASE-NOTES --- RELEASE-NOTES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 43385ebec63a..2b1434bd1294 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,6 +1,6 @@ 23.4 ----- - +* [*] Resolve the unresponsiveness of the compliance popover on iPhone SE devices when large fonts are enabled. [#21609] 23.3 ----- From d05b0dce8aa471fe990e06a685bdbcf02529844c Mon Sep 17 00:00:00 2001 From: Salim Braksa Date: Wed, 20 Sep 2023 23:43:29 +0100 Subject: [PATCH 10/78] Remove action handlers from CompliancePopover and other minor changes --- .../EEUUSCompliance/CompliancePopover.swift | 7 ++----- .../CompliancePopoverViewController.swift | 14 +++++--------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopover.swift b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopover.swift index 6d844def9c83..4513a4cb0469 100644 --- a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopover.swift +++ b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopover.swift @@ -5,9 +5,6 @@ struct CompliancePopover: View { static let verticalScrollBuffer = Length.Padding.large } - var goToSettingsAction: (() -> ())? - var saveAction: (() -> ())? - @StateObject var viewModel: CompliancePopoverViewModel @@ -56,7 +53,7 @@ struct CompliancePopover: View { private var settingsButton: some View { Button(action: { - goToSettingsAction?() + self.viewModel.didTapSettings() }) { ZStack { RoundedRectangle(cornerRadius: Length.Padding.single) @@ -71,7 +68,7 @@ struct CompliancePopover: View { private var saveButton: some View { Button(action: { - saveAction?() + self.viewModel.didTapSave() }) { ZStack { RoundedRectangle(cornerRadius: Length.Radius.minHeightButton) diff --git a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift index 920535bf6a24..f584dcf5d823 100644 --- a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift +++ b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift @@ -25,7 +25,8 @@ final class CompliancePopoverViewController: UIViewController { init(viewModel: CompliancePopoverViewModel) { self.viewModel = viewModel - hostingController = UIHostingController(rootView: CompliancePopover(viewModel: self.viewModel)) + let content = CompliancePopover(viewModel: viewModel) + self.hostingController = UIHostingController(rootView: content) super.init(nibName: nil, bundle: nil) } @@ -34,17 +35,11 @@ final class CompliancePopoverViewController: UIViewController { } // MARK: - View Lifecycle + override func viewDidLoad() { super.viewDidLoad() self.addContentView() - hostingController.view.translatesAutoresizingMaskIntoConstraints = true - hostingController.rootView.goToSettingsAction = { - self.viewModel.didTapSettings() - } - hostingController.rootView.saveAction = { - self.viewModel.didTapSave() - } - viewModel.didDisplayPopover() + self.viewModel.didDisplayPopover() } override func viewDidLayoutSubviews() { @@ -79,6 +74,7 @@ final class CompliancePopoverViewController: UIViewController { } // MARK: - DrawerPresentable + extension CompliancePopoverViewController: DrawerPresentable { var collapsedHeight: DrawerHeight { if traitCollection.verticalSizeClass == .compact { From 07a170b3982c5450c82ee1e1b75f3a06fca1ad4a Mon Sep 17 00:00:00 2001 From: Salim Braksa Date: Wed, 20 Sep 2023 23:47:19 +0100 Subject: [PATCH 11/78] Minor code formatting changes --- .../EEUUSCompliance/CompliancePopoverViewController.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift index f584dcf5d823..eaf6676ecc6f 100644 --- a/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift +++ b/WordPress/Classes/ViewRelated/EEUUSCompliance/CompliancePopoverViewController.swift @@ -23,6 +23,8 @@ final class CompliancePopoverViewController: UIViewController { return hostingController.view } + // MARK: - Init + init(viewModel: CompliancePopoverViewModel) { self.viewModel = viewModel let content = CompliancePopover(viewModel: viewModel) From 5c3892c9030d910d6c2a4327d29a1e7e9dafdeed Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Wed, 4 Oct 2023 22:25:49 +0300 Subject: [PATCH 12/78] Added PlanWizardContentViewModelTests --- WordPress/WordPress.xcodeproj/project.pbxproj | 4 + .../PlanWizardContentViewModelTests.swift | 80 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index c8f9c699d6a7..627bcad62179 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -216,6 +216,7 @@ 01E258062ACC373800F09666 /* PlanWizardContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E258042ACC373800F09666 /* PlanWizardContent.swift */; }; 01E2580B2ACDC72C00F09666 /* PlanWizardContentViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E2580A2ACDC72C00F09666 /* PlanWizardContentViewModel.swift */; }; 01E2580C2ACDC72C00F09666 /* PlanWizardContentViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E2580A2ACDC72C00F09666 /* PlanWizardContentViewModel.swift */; }; + 01E2580E2ACDC88100F09666 /* PlanWizardContentViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E2580D2ACDC88100F09666 /* PlanWizardContentViewModelTests.swift */; }; 01E78D1D296EA54F00FB6863 /* StatsPeriodHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E78D1C296EA54F00FB6863 /* StatsPeriodHelperTests.swift */; }; 02761EC02270072F009BAF0F /* BlogDetailsViewController+SectionHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02761EBF2270072F009BAF0F /* BlogDetailsViewController+SectionHelpers.swift */; }; 02761EC222700A9C009BAF0F /* BlogDetailsSubsectionToSectionCategoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02761EC122700A9C009BAF0F /* BlogDetailsSubsectionToSectionCategoryTests.swift */; }; @@ -5852,6 +5853,7 @@ 01E258012ACC36FA00F09666 /* PlanStep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanStep.swift; sourceTree = ""; }; 01E258042ACC373800F09666 /* PlanWizardContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanWizardContent.swift; sourceTree = ""; }; 01E2580A2ACDC72C00F09666 /* PlanWizardContentViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanWizardContentViewModel.swift; sourceTree = ""; }; + 01E2580D2ACDC88100F09666 /* PlanWizardContentViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanWizardContentViewModelTests.swift; sourceTree = ""; }; 01E78D1C296EA54F00FB6863 /* StatsPeriodHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsPeriodHelperTests.swift; sourceTree = ""; }; 02761EBF2270072F009BAF0F /* BlogDetailsViewController+SectionHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlogDetailsViewController+SectionHelpers.swift"; sourceTree = ""; }; 02761EC122700A9C009BAF0F /* BlogDetailsSubsectionToSectionCategoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogDetailsSubsectionToSectionCategoryTests.swift; sourceTree = ""; }; @@ -12536,6 +12538,7 @@ 32C6CDDA23A1FF0D002556FF /* SiteCreationRotatingMessageViewTests.swift */, C373D6E9280452F6008F8C26 /* SiteIntentDataTests.swift */, B030FE0927EBF0BC000F6F5E /* SiteCreationIntentTracksEventTests.swift */, + 01E2580D2ACDC88100F09666 /* PlanWizardContentViewModelTests.swift */, ); path = SiteCreation; sourceTree = ""; @@ -23392,6 +23395,7 @@ B566EC751B83867800278395 /* NSMutableAttributedStringTests.swift in Sources */, DC772B0328200A3700664C02 /* SiteStatsInsightViewModelTests.swift in Sources */, E6B9B8AF1B94FA1C0001B92F /* ReaderStreamViewControllerTests.swift in Sources */, + 01E2580E2ACDC88100F09666 /* PlanWizardContentViewModelTests.swift in Sources */, 4629E4232440C8160002E15C /* GutenbergCoverUploadProcessorTests.swift in Sources */, 8BE69512243E674300FF492F /* PrepublishingHeaderViewTests.swift in Sources */, FAF0FAAC2AA094C0004C3228 /* NoSiteViewModelTests.swift in Sources */, diff --git a/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift b/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift new file mode 100644 index 000000000000..101b7dbeaf03 --- /dev/null +++ b/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift @@ -0,0 +1,80 @@ +import XCTest +@testable import WordPress + +final class PlanWizardContentViewModelTests: XCTestCase { + private var sut: PlanWizardContentViewModel! + private var siteCreator: SiteCreator! + + override func setUpWithError() throws { + siteCreator = SiteCreator() + sut = PlanWizardContentViewModel(siteCreator: siteCreator) + } + + override func tearDownWithError() throws { + siteCreator = nil + sut = nil + } + + // MARK: - isPlanSelected + + func testIsPlanSelectedWithRedirectScheme() { + let url = URL(string: PlanWizardContentViewModel.Constants.redirectScheme + "://")! + + XCTAssertTrue(sut.isPlanSelected(url)) + } + + func testIsPlanSelectedWithRedirectSchemeAndParameters() { + var components = URLComponents(string: PlanWizardContentViewModel.Constants.redirectScheme + "://")! + components.queryItems = [.init(name: "parameter", value: "5")] + + XCTAssertTrue(sut.isPlanSelected(components.url!)) + } + + func testPlanNotSelectedWithoutRedirectScheme() { + let url = URL(string: "https://www.wordpress.com/plans/")! + + XCTAssertFalse(sut.isPlanSelected(url)) + } + + // MARK: - selectedPlanId + + func testSelectedPlanId() { + var components = URLComponents(string: PlanWizardContentViewModel.Constants.redirectScheme + "://")! + components.queryItems = [.init(name: PlanWizardContentViewModel.Constants.planIdParameter, value: "125")] + + XCTAssertEqual(sut.selectedPlanId(from: components.url!), 125) + } + + func testSelectedPlanIdWithMoreParameters() { + var components = URLComponents(string: PlanWizardContentViewModel.Constants.redirectScheme + "://")! + components.queryItems = [ + .init(name: "parameter", value: "5"), + .init(name: PlanWizardContentViewModel.Constants.planIdParameter, value: "125"), + .init(name: "parameter2", value: "abc") + ] + + XCTAssertEqual(sut.selectedPlanId(from: components.url!), 125) + } + + // MARK: - URL + + func testURLWithPaidDomain() { + let domainName = "domain.com" + siteCreator.address = DomainSuggestion(domainName: domainName, productID: 101, supportsPrivacy: false, costString: "$20", isFree: false) + + let url = URLComponents(url: sut.url, resolvingAgainstBaseURL: true) + + let parameter = url?.queryItems?.first(where: { $0.name == PlanWizardContentViewModel.Constants.paidDomainNameParameter }) + XCTAssertEqual(parameter?.value, domainName) + } + + func testURLWithFreeDomain() { + let domainName = "domain.wordpress.com" + siteCreator.address = DomainSuggestion(domainName: domainName, productID: 101, supportsPrivacy: false, costString: "$0", isFree: true) + + let url = URLComponents(url: sut.url, resolvingAgainstBaseURL: true) + + let parameter = url?.queryItems?.first(where: { $0.name == PlanWizardContentViewModel.Constants.paidDomainNameParameter }) + XCTAssertEqual(parameter, nil) + } +} From fdbe1905e8a9d8195f0c2eaac3a47989f4eff918 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Wed, 4 Oct 2023 22:39:04 +0300 Subject: [PATCH 13/78] Linting fixes --- .../SiteCreation/PlanWizardContentViewModelTests.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift b/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift index 101b7dbeaf03..ee735ae59ef9 100644 --- a/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift +++ b/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift @@ -6,11 +6,13 @@ final class PlanWizardContentViewModelTests: XCTestCase { private var siteCreator: SiteCreator! override func setUpWithError() throws { + try super.setUpWithError() siteCreator = SiteCreator() sut = PlanWizardContentViewModel(siteCreator: siteCreator) } override func tearDownWithError() throws { + try super.tearDownWithError() siteCreator = nil sut = nil } From 187801b263f1603c863ff85eabc5c6305fe283d9 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 5 Oct 2023 11:16:56 +0300 Subject: [PATCH 14/78] Show plans only if feature flag is enabled --- .../Web Address/WebAddressWizardContent.swift | 4 +++- .../Wizard/SiteCreationWizardLauncher.swift | 23 +++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift index b8ec15f2fc48..adb96319e1e8 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift @@ -128,7 +128,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { super.init(scrollableView: table, mainTitle: Strings.mainTitle, prompt: Strings.prompt, - primaryActionTitle: Strings.selectDomain, + primaryActionTitle: creator.domainPurchasingEnabled ? Strings.selectDomain : Strings.createSite, accessoryView: searchHeader) } @@ -504,6 +504,8 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { comment: "Select domain name. Title") static let prompt: String = NSLocalizedString("Search for a short and memorable keyword to help people find and visit your website.", comment: "Select domain name. Subtitle") + static let createSite: String = NSLocalizedString("Create Site", + comment: "Button to progress to the next step") static let selectDomain: String = NSLocalizedString("siteCreation.domains.buttons.selectDomain", value: "Select domain", comment: "Button to progress to the next step after selecting domain in Site Creation") diff --git a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift index 33796e2f031c..3bc961c84fad 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift @@ -6,13 +6,22 @@ final class SiteCreationWizardLauncher { return SiteCreator() }() - let steps: [SiteCreationStep] = [ - .intent, - .design, - .address, - .plan, - .siteAssembly - ] + let steps: [SiteCreationStep] = { + if RemoteFeatureFlag.plansInSiteCreation.enabled() { + [.intent, + .design, + .address, + .plan, + .siteAssembly + ] + } else { + [.intent, + .design, + .address, + .siteAssembly + ] + } + }() private lazy var wizard: SiteCreationWizard = { return SiteCreationWizard(steps: steps.map { initStep($0) }) From a1e5200331a810c09e6235d7e2e22a9cfb985081 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 5 Oct 2023 11:55:04 +0300 Subject: [PATCH 15/78] Set secure interaction --- .../ViewRelated/Site Creation/Plan/PlanWizardContent.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift index 25ff0eacee94..53409b95a488 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift @@ -10,6 +10,7 @@ final class PlanWizardContent: WebKitViewController { self.viewModel = viewModel self.completion = completion let configuration = WebViewControllerConfiguration(url: nil) + configuration.secureInteraction = true super.init(configuration: configuration) } From 86325fdeed38cb8242740c0cf1adc1a1e9ba7ef6 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 5 Oct 2023 12:54:34 +0300 Subject: [PATCH 16/78] Set back button title from Plans to Domains to "Domains" --- .../Site Creation/Web Address/WebAddressWizardContent.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift index adb96319e1e8..ea9e966e3409 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift @@ -145,6 +145,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { loadHeaderView() addAddressHintView() configureUIIfNeeded() + navigationItem.backButtonTitle = Strings.backButtonTitle } private func configureUIIfNeeded() { @@ -517,6 +518,10 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { comment: "Suggested domains") static let noMatch: String = NSLocalizedString("This domain is unavailable", comment: "Notifies the user that the a domain matching the search term wasn't returned in the results") + static let backButtonTitle = NSLocalizedString("siteCreation.domain.backButton.title", + value: "Domains", + comment: "Back button title shown in Site Creation flow to come back from Plan selection to Domain selection" + ) } } From 9ed7eb1227a39d056c41ce3fcd7c5f0964af06c7 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 5 Oct 2023 12:55:31 +0300 Subject: [PATCH 17/78] Hide title in PlanWizardContent view controller Web view is already showing the title --- .../ViewRelated/Site Creation/Plan/PlanWizardContent.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift index 53409b95a488..d583ee4ec8ca 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift @@ -14,6 +14,12 @@ final class PlanWizardContent: WebKitViewController { super.init(configuration: configuration) } + override func viewDidLoad() { + super.viewDidLoad() + + titleView.isHidden = true + } + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) From e8388cd0cd9a1c7d20f51a62510109202121dc07 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 5 Oct 2023 12:58:05 +0300 Subject: [PATCH 18/78] Authenticate web view --- .../ViewRelated/Site Creation/Plan/PlanWizardContent.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift index d583ee4ec8ca..6aec5204c703 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift @@ -10,6 +10,7 @@ final class PlanWizardContent: WebKitViewController { self.viewModel = viewModel self.completion = completion let configuration = WebViewControllerConfiguration(url: nil) + configuration.authenticateWithDefaultAccount() configuration.secureInteraction = true super.init(configuration: configuration) } From 8b5e69a13c725aff26cef82ddcc2e43724136c66 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 5 Oct 2023 14:33:24 +0300 Subject: [PATCH 19/78] Fix CI build not inferring the type --- .../Wizard/SiteCreationWizardLauncher.swift | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift index 3bc961c84fad..2b484d7c2d28 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreationWizardLauncher.swift @@ -8,17 +8,19 @@ final class SiteCreationWizardLauncher { let steps: [SiteCreationStep] = { if RemoteFeatureFlag.plansInSiteCreation.enabled() { - [.intent, - .design, - .address, - .plan, - .siteAssembly + return [ + .intent, + .design, + .address, + .plan, + .siteAssembly ] } else { - [.intent, - .design, - .address, - .siteAssembly + return [ + .intent, + .design, + .address, + .siteAssembly ] } }() From 10ae2655c485615125f1ad671a85dbbeee9ad7aa Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 5 Oct 2023 14:48:48 +0300 Subject: [PATCH 20/78] Build a new PlanWizardContent when navigating back and forth --- .../ViewRelated/Site Creation/Plan/PlanStep.swift | 4 ++-- .../Site Creation/Plan/PlanWizardContent.swift | 9 +-------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift index c7c4a1a736c6..c741eb555734 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanStep.swift @@ -3,13 +3,13 @@ final class PlanStep: WizardStep { private let creator: SiteCreator - private(set) lazy var content: UIViewController = { + internal var content: UIViewController { let viewModel = PlanWizardContentViewModel(siteCreator: creator) return PlanWizardContent(viewModel: viewModel) { [weak self] planId in self?.creator.planId = planId self?.delegate?.nextStep() } - }() + } init(creator: SiteCreator) { self.creator = creator diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift index 6aec5204c703..a913ef7fb515 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift @@ -19,6 +19,7 @@ final class PlanWizardContent: WebKitViewController { super.viewDidLoad() titleView.isHidden = true + view.backgroundColor = .basicBackground } override func viewWillAppear(_ animated: Bool) { @@ -27,14 +28,6 @@ final class PlanWizardContent: WebKitViewController { load(request: URLRequest(url: viewModel.url)) } - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - - /// Reload web view when View Controller is closed - /// Ensures outdated web view is not shown when navigating back and forth - webView.load(URLRequest(url: URL(string: "about:blank")!)) - } - override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { guard let url = navigationAction.request.url else { decisionHandler(.allow) From 9926b5df4627ff42347a2ab5a11aa2db6cb249fc Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 5 Oct 2023 16:37:47 +0300 Subject: [PATCH 21/78] Hide title and loading changing in the view --- .../Classes/Utility/WebKitViewController.swift | 16 +++++++++++++++- .../Utility/WebViewControllerConfiguration.swift | 1 + .../Site Creation/Plan/PlanWizardContent.swift | 10 ++-------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/WordPress/Classes/Utility/WebKitViewController.swift b/WordPress/Classes/Utility/WebKitViewController.swift index 8af46d1df8fa..f08b8e343ee3 100644 --- a/WordPress/Classes/Utility/WebKitViewController.swift +++ b/WordPress/Classes/Utility/WebKitViewController.swift @@ -30,7 +30,11 @@ extension WebKitAuthenticatable { class WebKitViewController: UIViewController, WebKitAuthenticatable { @objc let webView: WKWebView - @objc let progressView = WebProgressView() + @objc let progressView: WebProgressView = { + let progressView = WebProgressView() + progressView.isHidden = true + return progressView + }() @objc let titleView = NavigationTitleView() let analyticsSource: String? @@ -86,6 +90,7 @@ class WebKitViewController: UIViewController, WebKitAuthenticatable { @objc var secureInteraction = false @objc var addsWPComReferrer = false @objc var customTitle: String? + @objc var displayStatusInNavigationBar = true private let opensNewInSafari: Bool let linkBehavior: LinkBehavior @@ -128,6 +133,7 @@ class WebKitViewController: UIViewController, WebKitAuthenticatable { opensNewInSafari = configuration.opensNewInSafari onClose = configuration.onClose analyticsSource = configuration.analyticsSource + displayStatusInNavigationBar = configuration.displayStatusInNavigationBar super.init(nibName: nil, bundle: nil) hidesBottomBarWhenPushed = true @@ -253,6 +259,10 @@ class WebKitViewController: UIViewController, WebKitAuthenticatable { // MARK: Navigation bar setup @objc func configureNavigation() { + guard displayStatusInNavigationBar else { + return + } + setupNavBarTitleView() setupRefreshButton() @@ -470,6 +480,10 @@ class WebKitViewController: UIViewController, WebKitAuthenticatable { } override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) { + guard displayStatusInNavigationBar else { + return + } + guard let object = object as? WKWebView, object == webView, let keyPath = keyPath else { diff --git a/WordPress/Classes/Utility/WebViewControllerConfiguration.swift b/WordPress/Classes/Utility/WebViewControllerConfiguration.swift index e330ffe7c2bc..b94b0ee63c4a 100644 --- a/WordPress/Classes/Utility/WebViewControllerConfiguration.swift +++ b/WordPress/Classes/Utility/WebViewControllerConfiguration.swift @@ -6,6 +6,7 @@ class WebViewControllerConfiguration: NSObject { @objc var optionsButton: UIBarButtonItem? @objc var secureInteraction = false @objc var addsWPComReferrer = false + @objc var displayStatusInNavigationBar = true @objc var analyticsSource: String? /// Opens any new pages in Safari. Otherwise, a new web view will be opened diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift index a913ef7fb515..7002e632116a 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContent.swift @@ -9,25 +9,19 @@ final class PlanWizardContent: WebKitViewController { init(viewModel: PlanWizardContentViewModel, completion: @escaping PlanSelectionCallback) { self.viewModel = viewModel self.completion = completion - let configuration = WebViewControllerConfiguration(url: nil) + let configuration = WebViewControllerConfiguration(url: viewModel.url) configuration.authenticateWithDefaultAccount() configuration.secureInteraction = true + configuration.displayStatusInNavigationBar = false super.init(configuration: configuration) } override func viewDidLoad() { super.viewDidLoad() - titleView.isHidden = true view.backgroundColor = .basicBackground } - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - load(request: URLRequest(url: viewModel.url)) - } - override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { guard let url = navigationAction.request.url else { decisionHandler(.allow) From 4a5dfd6c1aa0eb424e51d8825ff1d25f057cf8c2 Mon Sep 17 00:00:00 2001 From: Momo Ozawa Date: Thu, 5 Oct 2023 16:52:13 +0100 Subject: [PATCH 22/78] fix no sites me vc navigation --- .../ViewRelated/Blog/My Site/MySiteViewController.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift index 2c431fcc9c82..917d0c1c5666 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift @@ -563,7 +563,11 @@ final class MySiteViewController: UIViewController, UIScrollViewDelegate, NoSite func didTapAccountAndSettingsButton() { let meViewController = MeViewController() - showDetailViewController(meViewController, sender: self) + if MySitesCoordinator.isSplitViewEnabled { + showDetailViewController(meViewController, sender: self) + } else { + navigationController?.pushViewController(meViewController, animated: true) + } } @objc From af068f429d14c028cb3508b14214ba5d50687fd1 Mon Sep 17 00:00:00 2001 From: Momo Ozawa Date: Tue, 10 Oct 2023 16:30:19 +0100 Subject: [PATCH 23/78] enable filter by author for pages --- .../Pages/PageListViewController.swift | 4 -- .../Post/AbstractPostListViewController.swift | 45 +++++++++++++++++- .../Post/PostListFilterSettings.swift | 5 +- .../Post/PostListViewController.swift | 47 ------------------- 4 files changed, 44 insertions(+), 57 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Pages/PageListViewController.swift b/WordPress/Classes/ViewRelated/Pages/PageListViewController.swift index 28bafc1cca01..6edb581a5c1f 100644 --- a/WordPress/Classes/ViewRelated/Pages/PageListViewController.swift +++ b/WordPress/Classes/ViewRelated/Pages/PageListViewController.swift @@ -220,10 +220,6 @@ class PageListViewController: AbstractPostListViewController, UIViewControllerRe tableView.verticalScrollIndicatorInsets.top = searchController.searchBar.bounds.height } - override func configureAuthorFilter() { - // Noop - } - override func configureFooterView() { super.configureFooterView() tableView.tableFooterView = UIView(frame: .zero) diff --git a/WordPress/Classes/ViewRelated/Post/AbstractPostListViewController.swift b/WordPress/Classes/ViewRelated/Post/AbstractPostListViewController.swift index d1eb6df8f35d..c1892e233ff9 100644 --- a/WordPress/Classes/ViewRelated/Post/AbstractPostListViewController.swift +++ b/WordPress/Classes/ViewRelated/Post/AbstractPostListViewController.swift @@ -288,8 +288,16 @@ class AbstractPostListViewController: UIViewController, } } - func configureAuthorFilter() { - fatalError("You should implement this method in the subclass") + private func configureAuthorFilter() { + guard filterSettings.canFilterByAuthor() else { + return + } + + let authorFilter = AuthorFilterButton() + authorFilter.addTarget(self, action: #selector(showAuthorSelectionPopover(_:)), for: .touchUpInside) + filterTabBar.accessoryView = authorFilter + + updateAuthorFilter() } /// Subclasses should override this method (and call super) to insert the @@ -568,6 +576,39 @@ class AbstractPostListViewController: UIViewController, WPAnalytics.track(.postListPullToRefresh, withProperties: propertiesForAnalytics()) } + @objc + private func showAuthorSelectionPopover(_ sender: UIView) { + let filterController = AuthorFilterViewController(initialSelection: filterSettings.currentPostAuthorFilter(), + gravatarEmail: blog.account?.email) { [weak self] filter in + if filter != self?.filterSettings.currentPostAuthorFilter() { + UIAccessibility.post(notification: UIAccessibility.Notification.screenChanged, argument: sender) + } + + self?.filterSettings.setCurrentPostAuthorFilter(filter) + self?.updateAuthorFilter() + self?.refreshAndReload() + self?.syncItemsWithUserInteraction(false) + self?.dismiss(animated: true) + } + + ForcePopoverPresenter.configurePresentationControllerForViewController(filterController, presentingFromView: sender) + filterController.popoverPresentationController?.permittedArrowDirections = .up + + present(filterController, animated: true) + } + + private func updateAuthorFilter() { + guard let accessoryView = filterTabBar.accessoryView as? AuthorFilterButton else { + return + } + + if filterSettings.currentPostAuthorFilter() == .everyone { + accessoryView.filterType = .everyone + } else { + accessoryView.filterType = .user(gravatarEmail: blog.account?.email) + } + } + // MARK: - Synching @objc func automaticallySyncIfAppropriate() { diff --git a/WordPress/Classes/ViewRelated/Post/PostListFilterSettings.swift b/WordPress/Classes/ViewRelated/Post/PostListFilterSettings.swift index 844fb5324d0c..319305c3f6ed 100644 --- a/WordPress/Classes/ViewRelated/Post/PostListFilterSettings.swift +++ b/WordPress/Classes/ViewRelated/Post/PostListFilterSettings.swift @@ -129,10 +129,7 @@ class PostListFilterSettings: NSObject { // MARK: - Author-related methods @objc func canFilterByAuthor() -> Bool { - if postType == .post { - return blog.isMultiAuthor && blog.userID != nil - } - return false + return blog.isMultiAuthor && blog.userID != nil } @objc func authorIDFilter() -> NSNumber? { diff --git a/WordPress/Classes/ViewRelated/Post/PostListViewController.swift b/WordPress/Classes/ViewRelated/Post/PostListViewController.swift index ae8534708a0a..e66e91b6f2a4 100644 --- a/WordPress/Classes/ViewRelated/Post/PostListViewController.swift +++ b/WordPress/Classes/ViewRelated/Post/PostListViewController.swift @@ -307,18 +307,6 @@ class PostListViewController: AbstractPostListViewController, UIViewControllerRe ghostableTableView.register(postCompactCellNib, forCellReuseIdentifier: postCompactCellIdentifier) } - override func configureAuthorFilter() { - guard filterSettings.canFilterByAuthor() else { - return - } - - let authorFilter = AuthorFilterButton() - authorFilter.addTarget(self, action: #selector(showAuthorSelectionPopover(_:)), for: .touchUpInside) - filterTabBar.accessoryView = authorFilter - - updateAuthorFilter() - } - override func configureSearchController() { super.configureSearchController() @@ -393,41 +381,6 @@ class PostListViewController: AbstractPostListViewController, UIViewControllerRe return blog?.lastPostsSync } - // MARK: - Actions - - @objc - private func showAuthorSelectionPopover(_ sender: UIView) { - let filterController = AuthorFilterViewController(initialSelection: filterSettings.currentPostAuthorFilter(), - gravatarEmail: blog.account?.email) { [weak self] filter in - if filter != self?.filterSettings.currentPostAuthorFilter() { - UIAccessibility.post(notification: UIAccessibility.Notification.screenChanged, argument: sender) - } - - self?.filterSettings.setCurrentPostAuthorFilter(filter) - self?.updateAuthorFilter() - self?.refreshAndReload() - self?.syncItemsWithUserInteraction(false) - self?.dismiss(animated: true) - } - - ForcePopoverPresenter.configurePresentationControllerForViewController(filterController, presentingFromView: sender) - filterController.popoverPresentationController?.permittedArrowDirections = .up - - present(filterController, animated: true) - } - - private func updateAuthorFilter() { - guard let accessoryView = filterTabBar.accessoryView as? AuthorFilterButton else { - return - } - - if filterSettings.currentPostAuthorFilter() == .everyone { - accessoryView.filterType = .everyone - } else { - accessoryView.filterType = .user(gravatarEmail: blog.account?.email) - } - } - // MARK: - Data Model Interaction /// Retrieves the post object at the specified index path. From 90e5b5ba7b9d43131348fc19e7fc3834957700e8 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Wed, 11 Oct 2023 14:11:22 +0300 Subject: [PATCH 24/78] Unify text alignment and background colors between site creation flow views --- .../SiteDesignContentCollectionViewController.swift | 2 +- .../Site Creation/Web Address/WebAddressWizardContent.swift | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Design Selection/SiteDesignContentCollectionViewController.swift b/WordPress/Classes/ViewRelated/Site Creation/Design Selection/SiteDesignContentCollectionViewController.swift index 221bd5325b56..fe5eb00ec2be 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Design Selection/SiteDesignContentCollectionViewController.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Design Selection/SiteDesignContentCollectionViewController.swift @@ -209,7 +209,7 @@ class SiteDesignContentCollectionViewController: CollapsableHeaderViewController } private func configureHeaderStyling() { - headerView.backgroundColor = .systemBackground + headerView.backgroundColor = .basicBackground hideHeaderVisualEffects() } diff --git a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift index ea9e966e3409..aa973f4663fa 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift @@ -156,8 +156,8 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { NSLayoutConstraint.activate([ largeTitleView.widthAnchor.constraint(equalTo: headerStackView.widthAnchor) ]) - largeTitleView.textAlignment = .natural - promptView.textAlignment = .natural + largeTitleView.textAlignment = .center + promptView.textAlignment = .center promptView.font = .systemFont(ofSize: 17) } @@ -170,6 +170,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { searchBar.layer.borderWidth = 0 searchHeader.addSubview(searchBar) searchBar.delegate = self + headerView.backgroundColor = .basicBackground NSLayoutConstraint.activate([ searchBar.leadingAnchor.constraint(equalTo: searchHeader.leadingAnchor, constant: 8), From e4e7914a7e86cb183d2320eb0b9adf534bff61f2 Mon Sep 17 00:00:00 2001 From: David Christiandy <1299411+dvdchr@users.noreply.github.com> Date: Thu, 12 Oct 2023 03:06:26 +0700 Subject: [PATCH 25/78] Update tags list style --- .../Views/ReaderDetailNewHeaderView.swift | 1 + .../ReaderInterestsStyleGuide.swift | 34 ++++++++++++++++++- ...ReaderTopicCollectionViewCoordinator.swift | 22 ++++++++---- 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailNewHeaderView.swift b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailNewHeaderView.swift index d0c04c783b83..440103054b7c 100644 --- a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailNewHeaderView.swift +++ b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailNewHeaderView.swift @@ -461,6 +461,7 @@ fileprivate struct ReaderDetailTagsWrapperView: UIViewRepresentable { // ensure that the collection view hugs its content. view.setContentHuggingPriority(.defaultHigh, for: .vertical) + view.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) return view } diff --git a/WordPress/Classes/ViewRelated/Reader/Select Interests/ReaderInterestsStyleGuide.swift b/WordPress/Classes/ViewRelated/Reader/Select Interests/ReaderInterestsStyleGuide.swift index 1382017aa3a8..07fa63660b7f 100644 --- a/WordPress/Classes/ViewRelated/Reader/Select Interests/ReaderInterestsStyleGuide.swift +++ b/WordPress/Classes/ViewRelated/Reader/Select Interests/ReaderInterestsStyleGuide.swift @@ -2,6 +2,38 @@ import Foundation import WordPressShared class ReaderInterestsStyleGuide { + + struct Metrics { + let interestsLabelMargin: CGFloat + let cellCornerRadius: CGFloat + let cellSpacing: CGFloat + let cellHeight: CGFloat + let maxCellWidthMultiplier: CGFloat + let borderWidth: CGFloat + let borderColor: UIColor + + /// The legacy metrics for the cell style before `readerImprovements` feature + static let legacy = Metrics( + interestsLabelMargin: 8.0, + cellCornerRadius: 4.0, + cellSpacing: 6.0, + cellHeight: 26.0, + maxCellWidthMultiplier: 0.8, + borderWidth: 0, + borderColor: .clear + ) + + static let latest = Metrics( + interestsLabelMargin: 16.0, + cellCornerRadius: 5.0, + cellSpacing: 8.0, + cellHeight: 34.0, + maxCellWidthMultiplier: 0.8, + borderWidth: 1.0, + borderColor: .separator + ) + } + // MARK: - View Styles public class func applyTitleLabelStyles(label: UILabel) { label.font = WPStyleGuide.serifFontForTextStyle(.largeTitle, fontWeight: .medium) @@ -32,7 +64,7 @@ class ReaderInterestsStyleGuide { public class func applyCompactCellLabelStyle(label: UILabel) { label.font = Self.compactCellLabelTitleFont label.textColor = .text - label.backgroundColor = .quaternaryBackground + label.backgroundColor = FeatureFlag.readerImprovements.enabled ? .clear : .quaternaryBackground } // MARK: - Next Button diff --git a/WordPress/Classes/ViewRelated/Reader/Tags View/ReaderTopicCollectionViewCoordinator.swift b/WordPress/Classes/ViewRelated/Reader/Tags View/ReaderTopicCollectionViewCoordinator.swift index f07b1623081d..f2a93401f9ea 100644 --- a/WordPress/Classes/ViewRelated/Reader/Tags View/ReaderTopicCollectionViewCoordinator.swift +++ b/WordPress/Classes/ViewRelated/Reader/Tags View/ReaderTopicCollectionViewCoordinator.swift @@ -20,6 +20,10 @@ class ReaderTopicCollectionViewCoordinator: NSObject { static let reuseIdentifier = ReaderInterestsCollectionViewCell.classNameWithoutNamespaces() static let overflowReuseIdentifier = "OverflowItem" + static let metrics: ReaderInterestsStyleGuide.Metrics = { + return FeatureFlag.readerImprovements.enabled ? .latest : .legacy + }() + static let interestsLabelMargin: CGFloat = 8 static let cellCornerRadius: CGFloat = 4 @@ -101,17 +105,16 @@ class ReaderTopicCollectionViewCoordinator: NSObject { layout.delegate = self layout.maxNumberOfDisplayedLines = 1 - layout.itemSpacing = Constants.cellSpacing - layout.cellHeight = Constants.cellHeight + layout.itemSpacing = Constants.metrics.cellSpacing + layout.cellHeight = Constants.metrics.cellHeight layout.allowsCentering = false } - private func sizeForCell(title: String, of collectionView: UICollectionView)-> CGSize { + private func sizeForCell(title: String, of collectionView: UICollectionView) -> CGSize { let attributes: [NSAttributedString.Key: Any] = [ .font: ReaderInterestsStyleGuide.compactCellLabelTitleFont ] - let title: NSString = title as NSString var size = title.size(withAttributes: attributes) @@ -119,7 +122,7 @@ class ReaderTopicCollectionViewCoordinator: NSObject { // Prevent 1 token from being too long let maxWidth = collectionView.bounds.width * Constants.maxCellWidthMultiplier let width = min(size.width, maxWidth) - size.width = width + (Constants.interestsLabelMargin * 2) + size.width = width + (Constants.metrics.interestsLabelMargin * 2) return size } @@ -127,7 +130,12 @@ class ReaderTopicCollectionViewCoordinator: NSObject { private func configure(cell: ReaderInterestsCollectionViewCell, with title: String) { ReaderInterestsStyleGuide.applyCompactCellLabelStyle(label: cell.label) - cell.layer.cornerRadius = Constants.cellCornerRadius + if Constants.metrics.borderWidth > 0 { + cell.layer.borderColor = Constants.metrics.borderColor.cgColor + cell.layer.borderWidth = Constants.metrics.borderWidth + } + + cell.layer.cornerRadius = Constants.metrics.cellCornerRadius cell.label.text = title cell.label.accessibilityHint = Strings.accessbilityHint cell.label.accessibilityTraits = .button @@ -181,7 +189,7 @@ extension ReaderTopicCollectionViewCoordinator: UICollectionViewDelegateFlowLayo configure(cell: cell, with: title) - if layout.isExpanded { + if layout.isExpanded || FeatureFlag.readerImprovements.enabled { cell.label.backgroundColor = .clear } From beaf75910ef7a6ebd3a6ea179d2abbe3c5b75f8b Mon Sep 17 00:00:00 2001 From: Tony Li Date: Thu, 12 Oct 2023 20:00:04 +1300 Subject: [PATCH 26/78] Remove a couple of unused functions in MediaService --- WordPress/Classes/Services/MediaService.m | 58 ----------------------- 1 file changed, 58 deletions(-) diff --git a/WordPress/Classes/Services/MediaService.m b/WordPress/Classes/Services/MediaService.m index cd51d9b276fc..e39474454f4f 100644 --- a/WordPress/Classes/Services/MediaService.m +++ b/WordPress/Classes/Services/MediaService.m @@ -416,64 +416,6 @@ - (void)deleteMedia:(nonnull NSArray *)mediaObjects }); } -#pragma mark - Getting media - -- (void) getMediaWithID:(NSNumber *) mediaID inBlog:(Blog *) blog - success:(void (^)(Media *media))success - failure:(void (^)(NSError *error))failure -{ - id remote = [self remoteForBlog:blog]; - NSManagedObjectID *blogID = blog.objectID; - - [remote getMediaWithID:mediaID success:^(RemoteMedia *remoteMedia) { - [self.managedObjectContext performBlock:^{ - Blog *blog = (Blog *)[self.managedObjectContext existingObjectWithID:blogID error:nil]; - if (!blog) { - return; - } - Media *media = [Media existingMediaWithMediaID:remoteMedia.mediaID inBlog:blog]; - if (!media) { - media = [Media makeMediaWithBlog:blog]; - } - [MediaHelper updateMedia:media withRemoteMedia:remoteMedia]; - - [[ContextManager sharedInstance] saveContextAndWait:self.managedObjectContext]; - - if (success){ - success(media); - - if ([media hasChanges]) { - NSCAssert(NO, @"The success callback should not modify the Media instance"); - [[ContextManager sharedInstance] saveContext:self.managedObjectContext]; - } - } - }]; - } failure:^(NSError *error) { - if (failure) { - [self.managedObjectContext performBlock:^{ - failure(error); - }]; - } - }]; -} - -- (void)getMetadataFromVideoPressID:(NSString *)videoPressID - inBlog:(Blog *)blog - success:(void (^)(RemoteVideoPressVideo *metadata))success - failure:(void (^)(NSError *error))failure -{ - id remote = [self remoteForBlog:blog]; - [remote getMetadataFromVideoPressID:videoPressID isSitePrivate:blog.isPrivate success:^(RemoteVideoPressVideo *metadata) { - if (success) { - success(metadata); - } - } failure:^(NSError * error) { - if (failure) { - failure(error); - } - }]; -} - - (void)syncMediaLibraryForBlog:(Blog *)blog success:(void (^)(void))success failure:(void (^)(NSError *error))failure From ba00fe293c4b9aef8c4150828d53aa03c5ce2be1 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 12 Oct 2023 12:32:06 +0300 Subject: [PATCH 27/78] Conform to a new redirection scheme handling current url with plan_id and plan_slug parameters --- .../Plan/PlanWizardContentViewModel.swift | 29 +++++++++++++------ .../PlanWizardContentViewModelTests.swift | 24 ++++++++------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift index 51e03573a625..588ef41ba1f8 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift @@ -11,7 +11,6 @@ struct PlanWizardContentViewModel { queryItems.append(.init(name: Constants.paidDomainNameParameter, value: domainSuggestion.domainName)) } - queryItems.append(.init(name: Constants.redirectParameter, value: Constants.redirectScheme + "://")) components.queryItems = queryItems return components.url! } @@ -22,24 +21,36 @@ struct PlanWizardContentViewModel { } func isPlanSelected(_ redirectionURL: URL) -> Bool { - return redirectionURL.scheme == Constants.redirectScheme + return selectedPlanSlug(from: redirectionURL) != nil } func selectedPlanId(from url: URL) -> Int? { - guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true), - let queryItem = components.queryItems?.first(where: { $0.name == Constants.planIdParameter })?.value, - let planId = Int(queryItem) else { + guard let planId = parameterValue(from: url, key: Constants.planIdParameter) else { return nil } - return planId + return Int(planId) + } + + func selectedPlanSlug(from url: URL) -> String? { + return parameterValue(from: url, key: Constants.planSlugParameter) } enum Constants { - static let plansWebAddress = "https://container-exciting-jennings.calypso.live/jetpack-app-plans" // TODO: Set to WP.COM address - static let redirectParameter = "redirect_to" - static let redirectScheme = "jetpackappplans" + static let plansWebAddress = "http://calypso.localhost:3000/jetpack-app/plans" // TODO: Set to WP.COM address static let planIdParameter = "plan_id" + static let planSlugParameter = "plan_slug" static let paidDomainNameParameter = "paid_domain_name" } } + +private extension PlanWizardContentViewModel { + func parameterValue(from url: URL, key: String) -> String? { + guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true), + let planSlug = components.queryItems?.first(where: { $0.name == key })?.value else { + return nil + } + + return planSlug + } +} diff --git a/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift b/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift index ee735ae59ef9..73db109819b9 100644 --- a/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift +++ b/WordPress/WordPressTest/SiteCreation/PlanWizardContentViewModelTests.swift @@ -19,21 +19,25 @@ final class PlanWizardContentViewModelTests: XCTestCase { // MARK: - isPlanSelected - func testIsPlanSelectedWithRedirectScheme() { - let url = URL(string: PlanWizardContentViewModel.Constants.redirectScheme + "://")! + func testIsPlanSelectedWithPlanSlugParameters() { + var components = URLComponents(string: PlanWizardContentViewModel.Constants.plansWebAddress)! + components.queryItems = [.init(name: PlanWizardContentViewModel.Constants.planSlugParameter, value: "free_plan")] - XCTAssertTrue(sut.isPlanSelected(url)) + XCTAssertTrue(sut.isPlanSelected(components.url!)) } - func testIsPlanSelectedWithRedirectSchemeAndParameters() { - var components = URLComponents(string: PlanWizardContentViewModel.Constants.redirectScheme + "://")! - components.queryItems = [.init(name: "parameter", value: "5")] + func testIsPlanSelectedWithPlanSlugAndPlanIdParameters() { + var components = URLComponents(string: PlanWizardContentViewModel.Constants.plansWebAddress)! + components.queryItems = [ + .init(name: PlanWizardContentViewModel.Constants.planSlugParameter, value: "paid_plan"), + .init(name: PlanWizardContentViewModel.Constants.planIdParameter, value: "1009") + ] XCTAssertTrue(sut.isPlanSelected(components.url!)) } - func testPlanNotSelectedWithoutRedirectScheme() { - let url = URL(string: "https://www.wordpress.com/plans/")! + func testPlanNotSelectedWithoutPlanSlug() { + let url = URL(string: PlanWizardContentViewModel.Constants.plansWebAddress)! XCTAssertFalse(sut.isPlanSelected(url)) } @@ -41,14 +45,14 @@ final class PlanWizardContentViewModelTests: XCTestCase { // MARK: - selectedPlanId func testSelectedPlanId() { - var components = URLComponents(string: PlanWizardContentViewModel.Constants.redirectScheme + "://")! + var components = URLComponents(string: PlanWizardContentViewModel.Constants.plansWebAddress)! components.queryItems = [.init(name: PlanWizardContentViewModel.Constants.planIdParameter, value: "125")] XCTAssertEqual(sut.selectedPlanId(from: components.url!), 125) } func testSelectedPlanIdWithMoreParameters() { - var components = URLComponents(string: PlanWizardContentViewModel.Constants.redirectScheme + "://")! + var components = URLComponents(string: PlanWizardContentViewModel.Constants.plansWebAddress)! components.queryItems = [ .init(name: "parameter", value: "5"), .init(name: PlanWizardContentViewModel.Constants.planIdParameter, value: "125"), From c373eca2682d8d9a24c944d279ed30a606e77b30 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 12 Oct 2023 16:53:04 +0300 Subject: [PATCH 28/78] Update plans url --- .../Site Creation/Plan/PlanWizardContentViewModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift index 588ef41ba1f8..7db013c8e709 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Plan/PlanWizardContentViewModel.swift @@ -37,7 +37,7 @@ struct PlanWizardContentViewModel { } enum Constants { - static let plansWebAddress = "http://calypso.localhost:3000/jetpack-app/plans" // TODO: Set to WP.COM address + static let plansWebAddress = "https://wordpress.com/jetpack-app/plans" static let planIdParameter = "plan_id" static let planSlugParameter = "plan_slug" static let paidDomainNameParameter = "paid_domain_name" From 084669ae729f6cc78f7b632b75e3d24a64c20758 Mon Sep 17 00:00:00 2001 From: jhnstn Date: Thu, 12 Oct 2023 15:42:26 -0400 Subject: [PATCH 29/78] Release script: Update gutenberg-mobile ref --- Gutenberg/config.yml | 12 +----------- Podfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/Gutenberg/config.yml b/Gutenberg/config.yml index 650185369644..829e2a826172 100644 --- a/Gutenberg/config.yml +++ b/Gutenberg/config.yml @@ -1,14 +1,4 @@ ref: - # This should have either a commit or tag key. - # If both are set, tag will take precedence. - # - # We have automation that reads and updates this file. - # Leaving commented keys is discouraged, because as the automation would ignore them and the resulting updates would be noisy - # If you want to use a local version, please use the LOCAL_GUTENBERG environment variable when calling CocoaPods. - # - # Example: - # - # LOCAL_GUTENBERG=../my-gutenberg-fork bundle exec pod install - tag: v1.105.0 + commit: b559166c87fbd69190eb33f9a3b340754d1a7c4d github_org: wordpress-mobile repo_name: gutenberg-mobile diff --git a/Podfile.lock b/Podfile.lock index 1d0c5588ab92..c8353d9b9cbe 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -26,7 +26,7 @@ PODS: - FSInteractiveMap (0.1.0) - Gifu (3.3.1) - Gridicons (1.2.0) - - Gutenberg (1.105.0) + - Gutenberg (1.106.0) - JTAppleCalendar (8.0.5) - Kanvas (1.4.9): - CropViewController @@ -111,7 +111,7 @@ DEPENDENCIES: - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) - Gridicons (~> 1.2) - - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.105.0.podspec`) + - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-b559166c87fbd69190eb33f9a3b340754d1a7c4d.podspec`) - JTAppleCalendar (~> 8.0.5) - Kanvas (~> 1.4.4) - MediaEditor (>= 1.2.2, ~> 1.2) @@ -184,7 +184,7 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.105.0.podspec + :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-b559166c87fbd69190eb33f9a3b340754d1a7c4d.podspec CHECKOUT OPTIONS: FSInteractiveMap: @@ -207,7 +207,7 @@ SPEC CHECKSUMS: FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d - Gutenberg: 8c216a2ee60fcfacffd470d05ffbd7fbf01886eb + Gutenberg: 3b1386da1a29d60c3c84c4d7c1e04d0b482f3244 JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 Kanvas: cc027f8058de881a4ae2b5aa5f05037b6d054d08 MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae From c6985efd3ed84d5d61799af47e53804629fd03e7 Mon Sep 17 00:00:00 2001 From: jhnstn Date: Thu, 12 Oct 2023 15:54:14 -0400 Subject: [PATCH 30/78] Update release notes --- RELEASE-NOTES.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 7bc464d94cef..aeef9fa53a2b 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,7 +1,8 @@ 23.5 ----- * [*] Fix a crash when the blog's blogging prompt settings contain invalid JSON [#21677] - +* [*] Block Editor: Split formatted text on triple Enter [https://github.com/WordPress/gutenberg/pull/53354] +* [*] Block Editor: Quote block: Ensure border is visible with block-based themes in dark [https://github.com/WordPress/gutenberg/pull/54964] 23.4 ----- From ed782ffcc7acada431b252059e2c7717f7de8ed9 Mon Sep 17 00:00:00 2001 From: jhnstn Date: Thu, 12 Oct 2023 19:07:19 -0400 Subject: [PATCH 31/78] Update Gutenberg to v1.106.0 --- Gutenberg/config.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Gutenberg/config.yml b/Gutenberg/config.yml index 829e2a826172..f30457620410 100644 --- a/Gutenberg/config.yml +++ b/Gutenberg/config.yml @@ -1,4 +1,14 @@ ref: - commit: b559166c87fbd69190eb33f9a3b340754d1a7c4d + # This should have either a commit or tag key. + # If both are set, tag will take precedence. + # + # We have automation that reads and updates this file. + # Leaving commented keys is discouraged, because as the automation would ignore them and the resulting updates would be noisy + # If you want to use a local version, please use the LOCAL_GUTENBERG environment variable when calling CocoaPods. + # + # Example: + # + # LOCAL_GUTENBERG=../my-gutenberg-fork bundle exec pod install + tag: v1.106.0 github_org: wordpress-mobile repo_name: gutenberg-mobile From efb31ce6c72198382a31628cfd6952fb90194654 Mon Sep 17 00:00:00 2001 From: jhnstn Date: Thu, 12 Oct 2023 20:26:56 -0400 Subject: [PATCH 32/78] Trigger CI From fef32778e1d891c8c7acdffe2a5f5b7eb16d7b9d Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Fri, 13 Oct 2023 11:38:46 +1100 Subject: [PATCH 33/78] =?UTF-8?q?Update=20app=20translations=20=E2=80=93?= =?UTF-8?q?=20`Localizable.strings`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Resources/ar.lproj/Localizable.strings | 101 ++++++++++++---- .../Resources/bg.lproj/Localizable.strings | 3 +- .../Resources/cs.lproj/Localizable.strings | 11 +- .../Resources/cy.lproj/Localizable.strings | 3 +- .../Resources/da.lproj/Localizable.strings | 3 +- .../Resources/de.lproj/Localizable.strings | 104 +++++++++++++---- .../Resources/en-AU.lproj/Localizable.strings | 6 +- .../Resources/en-CA.lproj/Localizable.strings | 6 +- .../Resources/en-GB.lproj/Localizable.strings | 12 +- .../Resources/es.lproj/Localizable.strings | 104 +++++++++++++---- .../Resources/fr.lproj/Localizable.strings | 104 +++++++++++++---- .../Resources/he.lproj/Localizable.strings | 101 ++++++++++++---- .../Resources/hr.lproj/Localizable.strings | 3 +- .../Resources/hu.lproj/Localizable.strings | 3 +- .../Resources/id.lproj/Localizable.strings | 104 +++++++++++++---- .../Resources/is.lproj/Localizable.strings | 3 +- .../Resources/it.lproj/Localizable.strings | 95 +++++++++++---- .../Resources/ja.lproj/Localizable.strings | 101 ++++++++++++---- .../Resources/ko.lproj/Localizable.strings | 101 ++++++++++++---- .../Resources/nb.lproj/Localizable.strings | 6 +- .../Resources/nl.lproj/Localizable.strings | 56 ++++++--- .../Resources/pl.lproj/Localizable.strings | 3 +- .../Resources/pt-BR.lproj/Localizable.strings | 9 +- .../Resources/pt.lproj/Localizable.strings | 3 +- .../Resources/ro.lproj/Localizable.strings | 108 ++++++++++++++---- .../Resources/ru.lproj/Localizable.strings | 104 +++++++++++++---- .../Resources/sk.lproj/Localizable.strings | 3 +- .../Resources/sq.lproj/Localizable.strings | 21 +--- .../Resources/sv.lproj/Localizable.strings | 104 +++++++++++++---- .../Resources/th.lproj/Localizable.strings | 3 +- .../Resources/tr.lproj/Localizable.strings | 101 ++++++++++++---- .../zh-Hans.lproj/Localizable.strings | 104 +++++++++++++---- .../zh-Hant.lproj/Localizable.strings | 101 ++++++++++++---- 33 files changed, 1279 insertions(+), 415 deletions(-) diff --git a/WordPress/Resources/ar.lproj/Localizable.strings b/WordPress/Resources/ar.lproj/Localizable.strings index f0d9e58138f0..b9b7e3532cee 100644 --- a/WordPress/Resources/ar.lproj/Localizable.strings +++ b/WordPress/Resources/ar.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-18 15:54:31+0000 */ +/* Translation-Revision-Date: 2023-10-04 13:54:07+0000 */ /* Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5)))); */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: ar */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "حظر الاقتباس"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "يتعذر عرض المكوّن نظرًا إلى تداخله بشكل عميق. اضغط هنا للحصول على مزيد من التفاصيل."; + /* translators: displayed right after the block is copied. */ "Block copied" = "المكوِّن الذي تم نسخه"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "قائمة المكوّنات"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "قد لا تظهر المكوّنات المتداخلة بشكل أكثر عمقًا من %d من المستويات بشكل صحيح في محرر الهاتف المحمول. لهذا السبب، نوصي بتهيئة المحتوى عن طريق إلغاء تجميع المكوّن أو تحرير المكوّن باستخدام محرر الويب."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "قد لا تظهر المكوّنات المتداخلة بشكل أكثر عمقًا من %d من المستويات بشكل صحيح في محرر الهاتف المحمول. لهذا السبب، نوصي بتهيئة المحتوى عن طريق إلغاء تجميع المكوّن أو تحرير المكوّن باستخدام متصفح الويب لديك."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "مدونة"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "17 ديسمبر، 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "مكوّن متداخل بشكل عميق"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "الافتراضي"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "إزالة"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "التبديل إلى حجم الخط الافتراضي"; +/* No comment provided by engineer. */ +"Synced patterns" = "الأنماط التي تمت مزامنتها"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "النظام الافتراضي"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "التقاط صورة"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "التقاط صورة أو تسجيل فيديو"; - /* No comment provided by engineer. */ "Take a Video" = "تسجيل مقطع فيديو"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "أنقر هنا لإظهار المساعدة"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "اضغط هنا لعرض مزيد من التفاصيل."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "اضغط لإضافة بطاقات الإحصاءات الجديدة."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "إلغاء متابعة المدونة."; +/* No comment provided by engineer. */ +"Ungroup block" = "مكوّن الترقية"; + /* Unhides a site from the site picker list */ "Unhide" = "إظهار"; @@ -9850,15 +9867,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "إزالة الجولة الحالية"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "شارك مطالبتك في زاوية الويب لديك مع عنوان الموقع الذي يسهل العثور عليه ومشاركته ومتابعته."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "إخفاء هذا"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "العثور على نطاق مخصص"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "قد يستغرق الأمر ما يصل إلى 30 دقيقة لكي يبدأ نطاقك المخصص بالعمل."; @@ -10317,9 +10328,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "تتعذر مزامنة الوسائط"; -/* Media screen navigation title */ -"media.title" = "الوسائط"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "تتعذر إضافة العنصر إلى مكتبة الوسائط"; @@ -10332,6 +10340,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "تجاهُل"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "إضافة وسائط جديدة"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "إضافة"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "تحديد"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "إلغاء"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "حذف"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "هل تريد بالتأكيد حذف هذه العناصر نهائيًّا؟"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "هل تريد بالتأكيد حذف هذا العنصر نهائيًا؟"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "يتعذر حذف كل عناصر الوسائط."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "جارٍ الحذف..."; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "محذوف!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "حذف"; @@ -10341,6 +10379,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "إعادة محاولة الرفع"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "لا توجد وسائط مطابقة لبحثك"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "الوسائط"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "تم تحديد %d من الصور"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "تم تحديد صورة واحدة"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "تم تحديد %d من العناصر"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "تم تحديد عنصر واحد"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "تحديد العناصر"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "تجاهُل"; @@ -10572,12 +10631,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "إعداد مسودة للتدوينات"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "التعرُّف على التطبيق"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "الخطوات التالية"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "الصفحات"; @@ -10715,6 +10768,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "الإبلاغ عن هذا المستخدم"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ من التدوينات • %2$@ من المتابعين"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "رجوع"; @@ -10823,6 +10879,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "YourSiteName.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "الوسائط"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "الخصوصية"; diff --git a/WordPress/Resources/bg.lproj/Localizable.strings b/WordPress/Resources/bg.lproj/Localizable.strings index 618071e3fbd7..12f3746c719e 100644 --- a/WordPress/Resources/bg.lproj/Localizable.strings +++ b/WordPress/Resources/bg.lproj/Localizable.strings @@ -2028,8 +2028,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Премахване"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ diff --git a/WordPress/Resources/cs.lproj/Localizable.strings b/WordPress/Resources/cs.lproj/Localizable.strings index 0caf8d785425..303fac1f3cce 100644 --- a/WordPress/Resources/cs.lproj/Localizable.strings +++ b/WordPress/Resources/cs.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-21 08:16:02+0000 */ +/* Translation-Revision-Date: 2023-10-05 08:23:32+0000 */ /* Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2); */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: cs_CZ */ @@ -5973,8 +5973,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Odstranit"; /* Remove Person Alert Title @@ -7236,9 +7235,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Udělat fotku"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Pořiďte fotografii nebo video"; - /* No comment provided by engineer. */ "Take a Video" = "Pořiďte video"; @@ -8615,6 +8611,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ Title for Jetpack Restore Warning screen */ "Warning" = "Varování"; +/* No comment provided by engineer. */ +"Warning message" = "Varovná zpráva"; + /* Caption displayed in promotional screens shown during the login flow. */ "Watch your audience grow with in-depth analytics." = "Sledujte, jak vaše publikum roste pomocí hloubkové analýzy."; diff --git a/WordPress/Resources/cy.lproj/Localizable.strings b/WordPress/Resources/cy.lproj/Localizable.strings index ab6ee314a828..4c2b25ebb227 100644 --- a/WordPress/Resources/cy.lproj/Localizable.strings +++ b/WordPress/Resources/cy.lproj/Localizable.strings @@ -1802,8 +1802,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Tynnu"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ diff --git a/WordPress/Resources/da.lproj/Localizable.strings b/WordPress/Resources/da.lproj/Localizable.strings index aa66925688cf..d33ed902beb1 100644 --- a/WordPress/Resources/da.lproj/Localizable.strings +++ b/WordPress/Resources/da.lproj/Localizable.strings @@ -1114,8 +1114,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Fjern"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ diff --git a/WordPress/Resources/de.lproj/Localizable.strings b/WordPress/Resources/de.lproj/Localizable.strings index 86ac0e4f50e1..b4789d1d0039 100644 --- a/WordPress/Resources/de.lproj/Localizable.strings +++ b/WordPress/Resources/de.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-18 15:54:32+0000 */ +/* Translation-Revision-Date: 2023-10-02 19:57:34+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: de */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "Block-Zitat"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "Der Block kann nicht gerendert werden, weil er tief verschachtelt ist. Tippe hier für weitere Details."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Block wurde kopiert"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Block-Menü"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "Blöcke, die tiefer als %d Ebenen verschachtelt sind, werden im mobilen Editor möglicherweise nicht richtig dargestellt. Aus diesem Grund empfehlen wir, die Tiefe des Inhalts zu reduzieren, indem du die Gruppierung des Blocks aufhebst oder den Block mit dem Webeditor bearbeitest."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "Blöcke, die tiefer als %d Ebenen verschachtelt sind, werden im mobilen Editor möglicherweise nicht richtig dargestellt. Aus diesem Grund empfehlen wir, die Tiefe des Inhalts zu reduzieren, indem du die Gruppierung des Blocks aufhebst oder den Block mit deinem Webbrowser bearbeitest."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Blog"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "17. Dezember 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Tief verschachtelter Block"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "Standard"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Entfernen"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "Wechselt zur Standard-Schriftgröße"; +/* No comment provided by engineer. */ +"Synced patterns" = "Synchronisierte Vorlagen"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "Systemstandard"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Nimm ein Foto auf"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Ein Foto oder Video aufnehmen"; - /* No comment provided by engineer. */ "Take a Video" = "Video aufnehmen"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Zum Anzeigen der Hilfe hier tippen"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Hier tippen, um mehr Details anzuzeigen."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Tippen, um neue Statistikkarten hinzuzufügen."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Hiermit folgst du dem Blog nicht mehr."; +/* No comment provided by engineer. */ +"Ungroup block" = "Block entgruppieren"; + /* Unhides a site from the site picker list */ "Unhide" = "Sichtbar machen"; @@ -8714,6 +8731,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ Title for Jetpack Restore Warning screen */ "Warning" = "Warnung"; +/* No comment provided by engineer. */ +"Warning message" = "Warnmeldung"; + /* Caption displayed in promotional screens shown during the login flow. */ "Watch your audience grow with in-depth analytics." = "Sieh mithilfe von umfassenden Analysen dabei zu, wie deine Zielgruppe wächst."; @@ -9856,15 +9876,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "Aktuelle Tour entfernen"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Erobere dir dein eigenes Stück vom Internet mit einer Website-Adresse, die man leicht finden, teilen und abonnieren kann."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Ausblenden"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Individuelle Domain finden"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Es kann bis zu 30 Minuten dauern, bis deine individuelle Domain funktioniert."; @@ -10323,9 +10337,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "Medien konnten nicht synchronisiert werden"; -/* Media screen navigation title */ -"media.title" = "Medien"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "Die Datei konnte nicht zur Mediathek hinzugefügt werden"; @@ -10338,6 +10349,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Verwerfen"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "Neue Medien hinzufügen"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Hinzufügen"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Auswählen"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "Abbrechen"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "Löschen"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "Bist du sicher, dass du diese Elemente endgültig löschen möchtest?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "Bist du sicher, dass du dieses Element endgültig löschen möchtest?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "Es können nicht alle Medienelemente gelöscht werden."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Löschen …"; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "Gelöscht!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "Löschen"; @@ -10347,6 +10388,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Upload erneut starten"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Keine Medien entsprechen deiner Suche"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "Medien"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "%d Bilder ausgewählt"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "1 Bild ausgewählt"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "%d Elemente ausgewählt"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "1 Element ausgewählt"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "Elemente auswählen"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Verwerfen"; @@ -10578,12 +10640,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Beitragsentwürfe"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Lerne die App kennen"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Nächste Schritte"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Seiten"; @@ -10730,6 +10786,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "Diesen Benutzer melden"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ Beiträge • %2$@ Follower"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "Zurück"; @@ -10838,6 +10897,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "DeineWebsite.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "Medien"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "Datenschutz"; diff --git a/WordPress/Resources/en-AU.lproj/Localizable.strings b/WordPress/Resources/en-AU.lproj/Localizable.strings index c67d85a2d5e1..59cd013a4273 100644 --- a/WordPress/Resources/en-AU.lproj/Localizable.strings +++ b/WordPress/Resources/en-AU.lproj/Localizable.strings @@ -5852,8 +5852,7 @@ translators: Block name. %s: The localized block name */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Remove"; /* Remove Person Alert Title @@ -7093,9 +7092,6 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Take a Photo" = "Take a Photo"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Take a Photo or Video"; - /* No comment provided by engineer. */ "Take a Video" = "Take a Video"; diff --git a/WordPress/Resources/en-CA.lproj/Localizable.strings b/WordPress/Resources/en-CA.lproj/Localizable.strings index 8371c7012c67..3b367104dfaa 100644 --- a/WordPress/Resources/en-CA.lproj/Localizable.strings +++ b/WordPress/Resources/en-CA.lproj/Localizable.strings @@ -5958,8 +5958,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Remove"; /* Remove Person Alert Title @@ -7221,9 +7220,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Take a Photo"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Take a Photo or Video"; - /* No comment provided by engineer. */ "Take a Video" = "Take a Video"; diff --git a/WordPress/Resources/en-GB.lproj/Localizable.strings b/WordPress/Resources/en-GB.lproj/Localizable.strings index 595932c4010a..4f46a0994230 100644 --- a/WordPress/Resources/en-GB.lproj/Localizable.strings +++ b/WordPress/Resources/en-GB.lproj/Localizable.strings @@ -6009,8 +6009,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Remove"; /* Remove Person Alert Title @@ -7278,9 +7277,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Take A Photo"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Take a Photo or Video"; - /* No comment provided by engineer. */ "Take a Video" = "Take a Video"; @@ -9643,15 +9639,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Remote Config debug menu title */ "debugMenu.remoteConfig.title" = "Remote Config"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Stake your claim on your corner of the web with a site address that’s easy to find, share and follow."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Hide this"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Find a custom domain"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "It may take up to 30 minutes for your custom domain to start working."; diff --git a/WordPress/Resources/es.lproj/Localizable.strings b/WordPress/Resources/es.lproj/Localizable.strings index efde090f0646..82c3083c1ad9 100644 --- a/WordPress/Resources/es.lproj/Localizable.strings +++ b/WordPress/Resources/es.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-20 18:33:55+0000 */ +/* Translation-Revision-Date: 2023-10-04 11:03:45+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: es */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "Bloquear cita"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "El bloque no se puede procesar debido a que está profundamente anidado. Toca aquí para más detalles."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Bloque copiado"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Menú de bloques"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "Los bloques anidados a más profundidad de %d niveles puede que no se procesen correctamente en el editor móvil. Por este motivo, recomendamos allanar el contenido desagrupando el bloque o editando el bloque usando el editor web."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "Los bloques anidados a más profundidad de %d niveles puede que no se procesen correctamente en el editor móvil. Por este motivo, recomendamos allanar el contenido desagrupando el bloque o editando el bloque usando tu navegador web."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Blog"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "17 de diciembre de 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Bloque profundamente anidado"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "Por defecto"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Eliminar"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "Cambia al tamaño de fuente por defecto"; +/* No comment provided by engineer. */ +"Synced patterns" = "Patrones sincronizados"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "Valores por defecto del sistema"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Haz una foto"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Haz una foto o un vídeo"; - /* No comment provided by engineer. */ "Take a Video" = "Haz un vídeo"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Toca aquí para mostrar la ayuda"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Toca aquí para mostrar más detalles."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Toca para añadir nuevas tarjetas de estadísticas."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Deja de seguir el blog."; +/* No comment provided by engineer. */ +"Ungroup block" = "Desagrupar bloque"; + /* Unhides a site from the site picker list */ "Unhide" = "Dejar de ocultar"; @@ -8714,6 +8731,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ Title for Jetpack Restore Warning screen */ "Warning" = "Advertencia"; +/* No comment provided by engineer. */ +"Warning message" = "Mensaje de advertencia"; + /* Caption displayed in promotional screens shown during the login flow. */ "Watch your audience grow with in-depth analytics." = "Observa cómo crece tu audiencia con analíticas avanzadas."; @@ -9856,15 +9876,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "Eliminar recorrido actual"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Hazte con tu rincón en Internet con una dirección web fácil de encontrar, de compartir y de seguir."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Ocultar esto"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Encuentra un dominio personalizado"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Puede tardar hasta 30 minutos en que tu dominio personalizado empiece a funcionar."; @@ -10323,9 +10337,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "No se pueden sincronizar los medios"; -/* Media screen navigation title */ -"media.title" = "Medios"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "El elemento no se pudo añadir a la biblioteca de medios"; @@ -10338,6 +10349,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Descartar"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "Añadir nuevo medio"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Añadir"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Seleccionar"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "Cancelar"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "Borrar"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "¿Seguro que quieres borrar permanentemente estos elementos?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "¿Seguro que quieres borrar permanentemente este elemento?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "No ha sido posible eliminar todos los elementos multimedia."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Borrando..."; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "¡Borrado!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "Borrar"; @@ -10347,6 +10388,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Reintentar la subida"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Ningún medio coincide con tu búsqueda"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "Medios"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "%d Imágenes seleccionadas"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "1 imagen seleccionada"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "%d elementos seleccionados"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "1 elemento seleccionado"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "Seleccionar elementos"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Descartar"; @@ -10578,12 +10640,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Entradas borrador"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Anímate a conocer la aplicación"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Siguientes pasos"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Páginas"; @@ -10730,6 +10786,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "Denunciar a este usuario"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ entradas - %2$@ seguidores"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "Volver"; @@ -10838,6 +10897,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "YourSiteName.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "Medios"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "Privacidad"; diff --git a/WordPress/Resources/fr.lproj/Localizable.strings b/WordPress/Resources/fr.lproj/Localizable.strings index 885c2dc1c63e..35af0f0a2436 100644 --- a/WordPress/Resources/fr.lproj/Localizable.strings +++ b/WordPress/Resources/fr.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-19 15:54:08+0000 */ +/* Translation-Revision-Date: 2023-10-10 09:54:07+0000 */ /* Plural-Forms: nplurals=2; plural=n > 1; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: fr */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "Bloquer les citations"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "Le bloc ne peut pas être affiché car il est profondément imbriqué. Appuyez ici pour plus de détails."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Bloc copié"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Menu Blocs"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "Les blocs imbriqués à un niveau supérieur à %d peuvent ne pas s’afficher correctement dans l’éditeur mobile. Pour cette raison, nous vous recommandons d’aplatir le contenu en dégroupant le bloc ou en le modifiant à l’aide de l’éditeur web."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "Les blocs imbriqués à un niveau supérieur à %d peuvent ne pas s’afficher correctement dans l’éditeur mobile. Pour cette raison, nous vous recommandons d’aplatir le contenu en dégroupant le bloc ou en le modifiant à l’aide de votre navigateur web."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Blog"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "17 décembre 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Bloc profondément imbriqué"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "Par défaut"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Retirer"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "Basculez sur la taille de police par défaut"; +/* No comment provided by engineer. */ +"Synced patterns" = "Compositions synchronisées"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "Réglage système"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Prendre une photo"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Prendre une photo ou une vidéo"; - /* No comment provided by engineer. */ "Take a Video" = "Prendre une vidéo"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Toucher ici pour voir l’aide"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Appuyez ici pour afficher plus de détails."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Appuyez pour ajouter de nouvelles cartes de statistiques."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Arrêter de suivre ce blog."; +/* No comment provided by engineer. */ +"Ungroup block" = "Dégrouper le bloc"; + /* Unhides a site from the site picker list */ "Unhide" = "Afficher"; @@ -9658,6 +9675,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Short status description */ "blazeCampaign.status.rejected" = "Refusé"; +/* Short status description */ +"blazeCampaign.status.scheduled" = "Planifiée"; + /* Title for budget stats view */ "blazeCampaigns.budget" = "Budget"; @@ -9850,15 +9870,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "Supprimer la visite guidée actuelle"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Affirmez votre présence sur la toile avec une adresse Web facile à trouver, à partager et à suivre."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Masquer ceci"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Trouver un domaine personnalisé"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Un délai de 30 minutes peut être nécessaire pour que votre domaine personnalisé soit opérationnel."; @@ -10317,9 +10331,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "Impossible de synchroniser les médias"; -/* Media screen navigation title */ -"media.title" = "Médias"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "L’élément ne peut pas être ajouté à la médiathèque."; @@ -10332,12 +10343,63 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Ignorer"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "Ajouter un nouveau média"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Ajouter"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Sélectionner"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "Annuler"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "Supprimer"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "Voulez-vous vraiment supprimer définitivement ces éléments ?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "Voulez-vous vraiment supprimer définitivement cet élément ?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "Impossible de supprimer tous les éléments multimédia."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Suppression…"; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "Supprimé !"; + /* Verb. Button title. Tapping dismisses a prompt. */ "mediaLibrary.retryOptionsAlert.dismissButton" = "Ignorer"; /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Téléverser à nouveau"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Aucun média ne correspond à votre recherche"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "Médias"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "%d images sélectionnées"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "1 image sélectionnée"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "%d éléments sélectionnés"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "1 élément sélectionné"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "Sélectionner des éléments"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Ignorer"; @@ -10569,12 +10631,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Brouillons d’articles"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Découvrir l’application"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Étapes suivantes"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Pages"; @@ -10721,6 +10777,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "Signaler cet utilisateur"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ articles • %2$@ abonnés"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "Retour"; @@ -10829,6 +10888,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "NomDeVotreSite.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "Médias"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "Confidentialité"; diff --git a/WordPress/Resources/he.lproj/Localizable.strings b/WordPress/Resources/he.lproj/Localizable.strings index fe94fe70484e..b1076ef00215 100644 --- a/WordPress/Resources/he.lproj/Localizable.strings +++ b/WordPress/Resources/he.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-19 15:54:08+0000 */ +/* Translation-Revision-Date: 2023-10-04 13:54:07+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: he_IL */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "ציטוט"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "לא ניתן לעבד את הבלוק בגלל קינון עמוק. לקבלת פרטים נוספים יש להקיש כאן."; + /* translators: displayed right after the block is copied. */ "Block copied" = "הבלוק הועתק"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "תפריט בלוקים"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "בעורך לנייד ייתכן עיבוד לא תקין של בלוקים בקינון עמוק מ-%d רמות. מסיבה זו מומלץ 'לשטח' את התוכן על ידי ביטול הקבצת הבלוק או לערוך את הבלוק בעזרת עורך האינטרנט."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "בעורך לנייד ייתכן עיבוד לא תקין של בלוקים בקינון עמוק מ-%d רמות. מסיבה זו מומלץ 'לשטח' את התוכן על ידי ביטול הקבצת הבלוק או לערוך את הבלוק בעזרת דפדפן האינטרנט."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "אתר"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "17 בדצמבר, 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "בלוק בקינון עמוק"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "ברירת מחדל"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "מחק"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "מבצע החלפה לגודל גופן שבברירת מחדל בכותרת"; +/* No comment provided by engineer. */ +"Synced patterns" = "מקבצים מסונכרנים"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "ברירת המחדל לפי המערכת"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "לצלם תמונה"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "לצלם תמונה או וידאו"; - /* No comment provided by engineer. */ "Take a Video" = "לצלם וידאו"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "יש להקיש כאן כי להציג את העזרה"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "להצגת פרטים נוספים יש להקיש כאן."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Tap to add new stats cards."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "ביטול המעקב אחרי הבלוג."; +/* No comment provided by engineer. */ +"Ungroup block" = "לבטל הקבצה של בלוק"; + /* Unhides a site from the site picker list */ "Unhide" = "ביטול הסתרה"; @@ -9853,15 +9870,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "להסיר את הסיור הנוכחי שלי"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "לבנות את הפינה האישית שלך באינטרנט בעזרת כתובת אתר שיהיה קל למצוא, לשתף ולעקוב אחריה."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "להסתיר את המידע"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "למצוא דומיין אישי"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "יידרשו עד 30 דקות להתחלת הפעילות של הדומיין האישי."; @@ -10320,9 +10331,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "לא ניתן לסנכרן את פריטי המדיה"; -/* Media screen navigation title */ -"media.title" = "מדיה"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "לא ניתן להוסיף את הפריט לספריית המדיה"; @@ -10335,6 +10343,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "ביטול"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "להוסיף פריט מדיה חדש"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "להוסיף"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "לבחור"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "ביטול"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "למחוק"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "האם אכן ברצונך למחוק פריטים אלה לצמיתות?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "האם בטוח שברצונך למחוק פריט זה לצמיתות?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "לא ניתן למחוק את כל פריטי המדיה."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "מוחק..."; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "הפריט נמחק!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "למחוק"; @@ -10344,6 +10382,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "לנסות להעלות שוב"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "לא נמצאו פרטי מדיה שמתאימים לחיפוש שלך"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "מדיה"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "נבחרו %d תמונות"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "נבחרה תמונה אחת"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "נבחרו %d פריטים"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "נבחר פריט אחד"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "לבחור פריטים"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "ביטול"; @@ -10572,12 +10631,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "טיוטות פוסטים"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "היכרות עם האפליקציה"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "לשלבים הבאים"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "עמודים"; @@ -10724,6 +10777,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "לדווח על המשתמש הזה"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ פוסטים • %2$@ עוקבים"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "חזרה"; @@ -10832,6 +10888,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "YourSiteName.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "מדיה"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "פרטיות"; diff --git a/WordPress/Resources/hr.lproj/Localizable.strings b/WordPress/Resources/hr.lproj/Localizable.strings index 1d1c665dd249..d8343c31f554 100644 --- a/WordPress/Resources/hr.lproj/Localizable.strings +++ b/WordPress/Resources/hr.lproj/Localizable.strings @@ -696,8 +696,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Ukloni"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ diff --git a/WordPress/Resources/hu.lproj/Localizable.strings b/WordPress/Resources/hu.lproj/Localizable.strings index ae30b0707746..6dacabf595f9 100644 --- a/WordPress/Resources/hu.lproj/Localizable.strings +++ b/WordPress/Resources/hu.lproj/Localizable.strings @@ -659,8 +659,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Eltávolítás"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ diff --git a/WordPress/Resources/id.lproj/Localizable.strings b/WordPress/Resources/id.lproj/Localizable.strings index 5711f787907e..ca54258e6a78 100644 --- a/WordPress/Resources/id.lproj/Localizable.strings +++ b/WordPress/Resources/id.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-19 09:54:08+0000 */ +/* Translation-Revision-Date: 2023-10-04 11:54:07+0000 */ /* Plural-Forms: nplurals=2; plural=n > 1; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: id */ @@ -1116,6 +1116,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "Blokir Kutipan"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "Blok tidak dapat ditampilkan karena bertingkat terlalu dalam. Ketuk di sini untuk detail selengkapnya."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Blok disalin"; @@ -1168,6 +1171,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Menu blok"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "Blok bertingkat yang kedalamannya melebihi %d level mungkin tidak dapat ditampilkan dengan benar di editor seluler. Karenanya, kami menyarankan Anda untuk meratakan konten dengan membatalkan pengelompokan blok atau mengedit blok melalui editor web."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "Blok bertingkat yang kedalamannya melebihi %d level mungkin tidak dapat ditampilkan dengan benar di editor seluler. Karenanya, kami menyarankan Anda untuk meratakan konten dengan membatalkan pengelompokan blok atau mengedit blok melalui browser web."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Blog"; @@ -2277,6 +2286,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "17 Desember 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Blok bertingkat terlalu dalam"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "Default"; @@ -6054,8 +6066,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Singkirkan"; /* Remove Person Alert Title @@ -7277,6 +7288,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "Beralih ke Ukuran Font asal"; +/* No comment provided by engineer. */ +"Synced patterns" = "Pola tersinkron"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "Default sistem"; @@ -7323,9 +7337,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Ambil Foto"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Ambil Foto atau Video"; - /* No comment provided by engineer. */ "Take a Video" = "Ambil Video"; @@ -7341,6 +7352,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Ketuk di sini untuk menampilkan bantuan"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Ketuk di sini untuk menampilkan detail selengkapnya."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Ketuk untuk menambahkan kartu statistik baru."; @@ -8321,6 +8335,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Berhenti mengikuti blog."; +/* No comment provided by engineer. */ +"Ungroup block" = "Batalkan pengelompokan blok"; + /* Unhides a site from the site picker list */ "Unhide" = "Tampilkan"; @@ -8708,6 +8725,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ Title for Jetpack Restore Warning screen */ "Warning" = "Peringatan"; +/* No comment provided by engineer. */ +"Warning message" = "Pesan peringatan"; + /* Caption displayed in promotional screens shown during the login flow. */ "Watch your audience grow with in-depth analytics." = "Perhatikan audiens Anda tumbuh dengan analisis mendalam."; @@ -9847,15 +9867,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "Hapus Tur Saat Ini"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Ajukan klaim domain Anda dengan alamat situs yang mudah ditemukan, dibagikan, dan diikuti."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Tutup"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Cari domain khusus"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Diperlukan 30 menit agar domain khusus Anda dapat berfungsi."; @@ -10314,9 +10328,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "Tidak dapat menyinkronkan media"; -/* Media screen navigation title */ -"media.title" = "Media"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "Item tidak bisa ditambahkan ke Pustaka Media."; @@ -10329,6 +10340,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Tutup"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "Tambah media baru"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Tambah"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Pilih"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "Batal"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "Hapus"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "Anda yakin ingin menghapus item ini secara permanen?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "Anda yakin ingin menghapus item ini secara permanen?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "Tidak dapat menghapus semua item media."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Menghapus..."; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "Dihapus!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "Hapus"; @@ -10338,6 +10379,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Coba Unggah Lagi"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Tidak ada media yang cocok dengan pencarian Anda"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "Media"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "%d Gambar Dipilih"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "1 Gambar Dipilih"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "%d Item Dipilih"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "1 Item Dipilih"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "Pilih Item"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Tutup"; @@ -10569,12 +10631,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Pos draf"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Kenali aplikasinya"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Langkah berikutnya"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Halaman"; @@ -10721,6 +10777,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "Laporkan pengguna ini"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ pos • %2$@ pengikut"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "Kembali"; @@ -10826,6 +10885,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "NamaSitusAnda.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "Media"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "Privasi"; diff --git a/WordPress/Resources/is.lproj/Localizable.strings b/WordPress/Resources/is.lproj/Localizable.strings index e6bc9a4e866d..68eea426ac91 100644 --- a/WordPress/Resources/is.lproj/Localizable.strings +++ b/WordPress/Resources/is.lproj/Localizable.strings @@ -1956,8 +1956,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Fjarlægja"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ diff --git a/WordPress/Resources/it.lproj/Localizable.strings b/WordPress/Resources/it.lproj/Localizable.strings index a9ca7401538e..0c30934c9a68 100644 --- a/WordPress/Resources/it.lproj/Localizable.strings +++ b/WordPress/Resources/it.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-20 16:41:32+0000 */ +/* Translation-Revision-Date: 2023-10-04 13:54:07+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: it */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "Blocco di citazione"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "Il blocco non può essere visualizzato perché ha troppi livelli di nidificazione. Tocca qui per ulteriori dettagli."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Blocco copiato"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Menu Blocchi"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "I blocchi con più di %d livelli di nidificazione potrebbero non essere visualizzati correttamente nell'editor per dispositivi mobili. Per questo motivo, consigliamo di uniformare i contenuti separando il blocco o modificandolo tramite l'editor web."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "I blocchi con più di %d livelli di nidificazione potrebbero non essere visualizzati correttamente nell'editor per dispositivi mobili. Per questo motivo consigliamo di uniformare i contenuti separando il blocco o modificandolo tramite il browser web."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Blog"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "17 dicembre 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Blocco con molti livelli di nidificazione"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "Predefinito"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Rimuovi"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "Switches to the default Font Size"; +/* No comment provided by engineer. */ +"Synced patterns" = "Pattern sincronizzati"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "Sistema predefinito"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Scatta una foto"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Scatta una foto o fai un video"; - /* No comment provided by engineer. */ "Take a Video" = "Fai un video"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Tocca qui per mostrare la guida in linea"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Tocca per visualizzare ulteriori dettagli."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Tocca per aggiungere nuove schede delle statistiche."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Non segue il blog."; +/* No comment provided by engineer. */ +"Ungroup block" = "Separa blocco"; + /* Unhides a site from the site picker list */ "Unhide" = "Mostra"; @@ -9856,15 +9873,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "Rimuovi il tour attuale"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Rivendica il tuo angolo di web con un indirizzo del sito facile da trovare, condividere e seguire."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Nascondi"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Trova un dominio personalizzato"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Potrebbero essere necessari fino a 30 minuti prima che il tuo dominio personalizzato inizi a funzionare."; @@ -10323,9 +10334,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "Impossibile sincronizzare gli elementi multimediali"; -/* Media screen navigation title */ -"media.title" = "Elementi multimediali"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "L'elemento non può essere aggiunto alla Libreria multimediale"; @@ -10338,6 +10346,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Ignora"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "Aggiungi nuovo elemento multimediale"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Aggiungi"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Seleziona"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "Annulla"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "Elimina"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "Desideri eliminare in modo permanente questi elementi?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "Desideri eliminare in modo permanente questo elemento?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "Non è possibile eliminare tutti gli elementi multimediali."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Eliminazione in corso…"; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "Elemento eliminato."; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "Elimina"; @@ -10347,6 +10385,24 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Riprova il caricamento"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Nessun elemento multimediale corrispondente alla ricerca"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "%d immagini selezionate"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "1 immagine selezionata"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "%d elementi selezionati"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "1 elemento selezionato"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "Seleziona elementi"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Ignora"; @@ -10578,12 +10634,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Articoli bozza"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Conosci l'app"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Passi successivi"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Pagine"; @@ -10730,6 +10780,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "Segnala questo utente"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ articoli • %2$@ follower"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "Indietro"; diff --git a/WordPress/Resources/ja.lproj/Localizable.strings b/WordPress/Resources/ja.lproj/Localizable.strings index 31340fb36483..e87e140e72c7 100644 --- a/WordPress/Resources/ja.lproj/Localizable.strings +++ b/WordPress/Resources/ja.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-19 11:54:10+0000 */ +/* Translation-Revision-Date: 2023-10-04 11:54:07+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: ja_JP */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "ブロッククオート"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "ブロックは深くネストされているためレンダリングできません。 こちらをタップして詳細を表示。"; + /* translators: displayed right after the block is copied. */ "Block copied" = "ブロックをコピーしました"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "ブロックのメニュー"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "%dレベルよりも深くネストされたブロックは、モバイルエディターで適切にレンダリングされない場合があります。 このため、ブロックのグループを解除するか Web エディターでブロックを編集して、コンテンツをフラット化することをお勧めします。"; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "%dレベルよりも深くネストされたブロックは、モバイルエディターで適切にレンダリングされない場合があります。 このため、ブロックのグループを解除するか Web ブラウザーでブロックを編集して、コンテンツをフラット化することをお勧めします。"; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "ブログ"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "2017年12月17日"; +/* No comment provided by engineer. */ +"Deeply nested block" = "深くネストされたブロック"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "デフォルト"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "削除"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "デフォルトのフォントサイズに変更する"; +/* No comment provided by engineer. */ +"Synced patterns" = "同期済みパターン"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "システムの初期設定"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "写真を撮影する"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "写真または動画を撮影"; - /* No comment provided by engineer. */ "Take a Video" = "動画を撮る"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "タップしてヘルプを表示"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "こちらをタップすると詳細が表示されます。"; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "タップして新しい統計カードを追加します。"; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "ブログをフォロー解除します。"; +/* No comment provided by engineer. */ +"Ungroup block" = "グループ解除ブロック"; + /* Unhides a site from the site picker list */ "Unhide" = "表示"; @@ -9853,15 +9870,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "現在のツアーを削除"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "見つけやすく、共有やフォローがしやすいサイトアドレスを使って自分のサイトであることを示しましょう。"; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "非表示"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "カスタムドメインを探す"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "カスタムドメインが使用可能になるまでに最大で30分かかる場合があります。"; @@ -10320,9 +10331,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "メディアを同期できません"; -/* Media screen navigation title */ -"media.title" = "メディア"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "項目をメディアライブラリに追加できませんでした。"; @@ -10335,6 +10343,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "削除"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "新しいメディアを追加"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "追加"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "選択"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "キャンセル"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "削除"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "本当にこれらの項目を永久に削除しますか ?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "この項目を完全に削除してもよいですか ?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "すべてのメディアファイルを削除できません。"; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "削除しています…"; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "削除しました。"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "削除"; @@ -10344,6 +10382,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "再アップロード"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "検索と一致するメディアがありません"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "メディア"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "%d枚の画像を選択済み"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "1枚の画像を選択済み"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "%d個のアイテムを選択済み"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "1個のアイテムを選択済み"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "アイテムを選択する"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "削除"; @@ -10575,12 +10634,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "下書きの投稿"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "アプリについて知る"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "次のステップ"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "ページ"; @@ -10727,6 +10780,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "このユーザーを報告"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@件の投稿 • %2$@人のフォロワー"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "戻る"; @@ -10832,6 +10888,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "YourSiteName.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "メディア"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "プライバシー"; diff --git a/WordPress/Resources/ko.lproj/Localizable.strings b/WordPress/Resources/ko.lproj/Localizable.strings index 8b82b28d3f30..996f47b54be2 100644 --- a/WordPress/Resources/ko.lproj/Localizable.strings +++ b/WordPress/Resources/ko.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-19 09:54:08+0000 */ +/* Translation-Revision-Date: 2023-10-05 08:54:08+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: ko_KR */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "인용 차단"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "깊숙이 중첩되어서 블록을 렌더링할 수 없습니다. 자세히 알아보려면 여기를 누르세요."; + /* translators: displayed right after the block is copied. */ "Block copied" = "블록을 복사하였습니다"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "블록 메뉴"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "%d 레벨보다 깊숙이 중첩된 블록은 모바일 편집기에서 올바르게 렌더링되지 않을 수 있습니다. 따라서 블록 그룹 해제를 통해 콘텐츠를 평평하게 하거나 웹 편집기를 사용하여 블록을 편집하는 것이 좋습니다."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "%d 레벨보다 깊숙이 중첩된 블록은 모바일 편집기에서 올바르게 렌더링되지 않을 수 있습니다. 따라서 블록 그룹 해제를 통해 콘텐츠를 평평하게 하거나 웹 브라우저를 사용하여 블록을 편집하는 것이 좋습니다."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "블로그"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "2017년 12월 17일"; +/* No comment provided by engineer. */ +"Deeply nested block" = "깊숙이 중첩된 블록"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "기본"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "제거"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "기본 글꼴 크기로 전환"; +/* No comment provided by engineer. */ +"Synced patterns" = "동기화된 패턴"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "시스템 기본값"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "사진 촬영"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "사진 찍기 또는 비디오 촬영"; - /* No comment provided by engineer. */ "Take a Video" = "비디오 촬영"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "도움말을 보려면 여기를 탭"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "자세히 알아보려면 여기를 누르세요."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "새 통계 카드를 추가하려면 누르세요."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "블로그 팔로우를 취소합니다."; +/* No comment provided by engineer. */ +"Ungroup block" = "블록 그룹 해제"; + /* Unhides a site from the site picker list */ "Unhide" = "숨기기 취소"; @@ -9856,15 +9873,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "현재 둘러보기 제거"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "찾고 공유하고 팔로우하기 쉬운 사이트 주소로 자신에게 유리하게 웹에 대한 권리를 주장하세요."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "숨기기"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "사용자 정의 도메인 찾기"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "사용자 정의 도메인이 작동하기 시작하려면 30분 정도 걸릴 수 있습니다."; @@ -10323,9 +10334,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "미디어 동기화 불가"; -/* Media screen navigation title */ -"media.title" = "미디어"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "아이템을 미디어 라이브러리에 추가할 수 없습니다"; @@ -10338,6 +10346,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "무시"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "새 미디어 추가"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "추가"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "선택"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "취소"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "삭제"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "이러한 항목을 영구적으로 삭제하시겠습니까?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "이 항목을 영구적으로 삭제하시겠습니까?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "모든 미디어 항목을 삭제할 수 없습니다."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "삭제 중..."; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "삭제되었습니다."; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "삭제"; @@ -10347,6 +10385,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "업로드 재시도"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "검색과 일치하는 미디어 없음"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "미디어"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "%d개 이미지 선택됨"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "1개 이미지 선택됨"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "%d개 항목 선택됨"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "1개 항목 선택됨"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "항목 선택"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "무시"; @@ -10578,12 +10637,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "임시글"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "앱 알아보기"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "다음 단계"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "페이지"; @@ -10730,6 +10783,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "이 사용자 신고"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@개 글 • %2$@명 팔로워"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "뒤로"; @@ -10838,6 +10894,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "YourSiteName.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "미디어"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "개인정보"; diff --git a/WordPress/Resources/nb.lproj/Localizable.strings b/WordPress/Resources/nb.lproj/Localizable.strings index 3f6cdcf837e2..fc2b6f1dba2d 100644 --- a/WordPress/Resources/nb.lproj/Localizable.strings +++ b/WordPress/Resources/nb.lproj/Localizable.strings @@ -4225,8 +4225,7 @@ translators: Block name. %s: The localized block name */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Slett"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ @@ -5172,9 +5171,6 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Take a Photo" = "Ta et bilde"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Ta et bilde eller en video"; - /* No comment provided by engineer. */ "Take a Video" = "Ta en video"; diff --git a/WordPress/Resources/nl.lproj/Localizable.strings b/WordPress/Resources/nl.lproj/Localizable.strings index aed186a67855..af2f8e6325a3 100644 --- a/WordPress/Resources/nl.lproj/Localizable.strings +++ b/WordPress/Resources/nl.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-19 13:54:08+0000 */ +/* Translation-Revision-Date: 2023-10-04 15:54:07+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: nl */ @@ -1119,6 +1119,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "Citaat"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "Blok kan niet worden gerenderd omdat het diep is genesteld. Tik hier voor meer informatie."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Blok gekopieerd"; @@ -1171,6 +1174,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Blokkenmenu"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "Blokken die dieper dan %d niveaus genesteld zijn worden mogelijk niet goed weergegeven in de mobiele editor. Hierom raden we aan de content platter te maken door het blok niet te groeperen of het blok te bewerken in je webbrowser."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "Blokken die dieper dan %d niveaus genesteld zijn worden mogelijk niet goed weergegeven in de mobiele editor. Hierom raden we aan de content platter te maken door het blok niet te groeperen of het blok te bewerken in je webbrowser."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Blog"; @@ -2280,6 +2289,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "December 17, 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Diep genesteld blok"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "Standaard"; @@ -6057,8 +6069,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Verwijderen"; /* Remove Person Alert Title @@ -7326,9 +7337,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Neem een foto"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Neem een foto of video"; - /* No comment provided by engineer. */ "Take a Video" = "Maak een video"; @@ -7344,6 +7352,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Tik hier om help te tonen"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Tik hier voor meer informatie."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Tik hier om nieuwe statistiekenkaarten toe te voegen."; @@ -8324,6 +8335,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Wordt gebruikt om te stoppen met het volgen van een blog."; +/* No comment provided by engineer. */ +"Ungroup block" = "Groeperen blok ongedaan maken"; + /* Unhides a site from the site picker list */ "Unhide" = "Verbergen uitschakelen"; @@ -9829,15 +9843,9 @@ Example: Reply to Pamela Nguyen */ /* Remote Config debug menu title */ "debugMenu.remoteConfig.title" = "Externe configuratie"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Eis je eigen hoekje van het internet op met een site adres dat eenvoudig te vinden, te delen en te volgen is."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Dit verbergen"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Een aangepast domein zoeken"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Het kan tot 30 minuten duren voor je aangepaste domein werkt."; @@ -10302,6 +10310,21 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Negeren"; +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Voeg toe"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Selecteer"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "Weet je zeker dat je deze items definitief wilt verwijderen?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "Weet je zeker dat je dit item permanent wilt verwijderen?"; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Verwijderen..."; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "Verwijderen"; @@ -10311,6 +10334,9 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Upload opnieuw proberen"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Er komt geen media overeen met je zoekopdracht"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Negeren"; @@ -10512,12 +10538,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Conceptberichten"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Verken de app"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Volgende stappen"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Pagina's"; diff --git a/WordPress/Resources/pl.lproj/Localizable.strings b/WordPress/Resources/pl.lproj/Localizable.strings index ff9fe902b8c9..4e19c1eea02e 100644 --- a/WordPress/Resources/pl.lproj/Localizable.strings +++ b/WordPress/Resources/pl.lproj/Localizable.strings @@ -2375,8 +2375,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Usuń"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ diff --git a/WordPress/Resources/pt-BR.lproj/Localizable.strings b/WordPress/Resources/pt-BR.lproj/Localizable.strings index 9b3ccf7d005a..a66dce1856f0 100644 --- a/WordPress/Resources/pt-BR.lproj/Localizable.strings +++ b/WordPress/Resources/pt-BR.lproj/Localizable.strings @@ -5997,8 +5997,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Remover"; /* Remove Person Alert Title @@ -7266,9 +7265,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Tirar uma foto"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Fotografar ou filmar"; - /* No comment provided by engineer. */ "Take a Video" = "Gravar um vídeo"; @@ -9616,9 +9612,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Remote Config debug menu title */ "debugMenu.remoteConfig.title" = "Configurações remotas"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Marque sua presença na Web com um endereço de site fácil de encontrar, compartilhar e seguir."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Ocultar isso"; diff --git a/WordPress/Resources/pt.lproj/Localizable.strings b/WordPress/Resources/pt.lproj/Localizable.strings index 0dd3a5a65a22..7cf18cf6d9b3 100644 --- a/WordPress/Resources/pt.lproj/Localizable.strings +++ b/WordPress/Resources/pt.lproj/Localizable.strings @@ -2237,8 +2237,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Remover"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ diff --git a/WordPress/Resources/ro.lproj/Localizable.strings b/WordPress/Resources/ro.lproj/Localizable.strings index 4ac6c0fb2cf8..6bd4d80c6157 100644 --- a/WordPress/Resources/ro.lproj/Localizable.strings +++ b/WordPress/Resources/ro.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-18 15:03:09+0000 */ +/* Translation-Revision-Date: 2023-10-03 14:29:29+0000 */ /* Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n % 100 >= 2 && n % 100 <= 19) ? 1 : 2); */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: ro */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "bloc citat"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "Blocul nu poate fi randat deoarece este imbricat în adâncime. Atinge aici pentru mai multe detalii."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Bloc copiat"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Meniu blocuri"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "Blocurile imbricate în adâncime pe mai mult de %d niveluri pot să nu fie randate corect în editorul pentru dispozitive mobile. Din acest motiv, recomandăm aplatizarea conținutului prin anularea grupării blocului sau prin editarea blocului folosind editorul web."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "Blocurile imbricate în adâncime pe mai mult de %d niveluri pot să nu fie randate corect în editorul pentru dispozitive mobile. Din acest motiv, recomandăm aplatizarea conținutului prin anularea grupării blocului sau prin editarea blocului folosind navigatorul tău web."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Blog"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "17 decembrie 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Bloc imbricat în adâncime"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "Implicit"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Îndepărtează"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "Comută la dimensiune font implicită"; +/* No comment provided by engineer. */ +"Synced patterns" = "Modele sincronizate"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "Implicit de sistem"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Fă o poză"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Fă o fotografie sau un video"; - /* No comment provided by engineer. */ "Take a Video" = "Fă un video"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Atinge aici pentru a afișa ajutorul"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Atinge aici pentru a arăta mai multe detalii."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Atinge pentru a adăuga carduri noi cu statistici."; @@ -8153,7 +8167,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "Unable to create new invite links." = "Nu pot să creez legături noi la invitații."; /* Text displayed in HUD if there was an error attempting to delete a group of media items. */ -"Unable to delete all media items." = "Nu pot șterge toate elementele media."; +"Unable to delete all media items." = "Nu pot să șterg toate elementele media."; /* Text displayed in HUD if there was an error attempting to delete a media item. */ "Unable to delete media item." = "Nu pot șterge elementul media."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Anulează urmărirea blogului."; +/* No comment provided by engineer. */ +"Ungroup block" = "Anulează gruparea blocului"; + /* Unhides a site from the site picker list */ "Unhide" = "Anulează ascunderea"; @@ -8714,6 +8731,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ Title for Jetpack Restore Warning screen */ "Warning" = "Avertizare"; +/* No comment provided by engineer. */ +"Warning message" = "Mesaj de avertizare"; + /* Caption displayed in promotional screens shown during the login flow. */ "Watch your audience grow with in-depth analytics." = "Urmărești cum îți crește audiența cu analitice detaliate."; @@ -9856,15 +9876,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "Înlătură turul curent"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Rezervă-ți partea ta pe web cu o adresă de site ușor de găsit, partajat și urmărit."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Ascunde asta"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Găsește un domeniu personalizat"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Poate să dureze până la 30 de minute până când domeniul tău personalizat va începe să funcționeze."; @@ -10323,9 +10337,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "Nu pot să sincronizez elementele media"; -/* Media screen navigation title */ -"media.title" = "Media"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "Elementul nu a putut fi adăugat în biblioteca Media"; @@ -10338,6 +10349,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Refuză"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "Adaugă element media nou"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Adaugă"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Selectează"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "Anulează"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "Șterge"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "Sigur vrei să ștergi definitiv aceste elemente?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "Sigur vrei să ștergi definitiv acest element?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "Nu pot să șterg toate elementele media."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Șterg..."; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "Ștearsă!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "Șterge"; @@ -10347,6 +10388,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Reîncearcă încărcarea"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Nu s-a potrivit niciun element media cu căutarea ta"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "Media"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "Ai selectat %d imagini"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "Ai selectat o imagine"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "Ai selectat %d elemente"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "Ai selectat 1 element"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "Selectează elementele"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Refuză"; @@ -10578,12 +10640,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Redactează articole"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Vezi ce face aplicația"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Pașii următori"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Pagini"; @@ -10730,6 +10786,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "Raportează acest utilizator"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ articole • %2$@ urmăritori"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "Înapoi"; @@ -10838,6 +10897,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "numelesiteuluitau.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "Media"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "Confidențialitate"; @@ -10998,7 +11060,7 @@ Example: given a notice format "Following %@" and empty site name, this will be "stats.insights.totalLikes.guideText.plural" = "Ultimul tău articol %1$@ a avut %2$@ aprecieri."; /* A hint shown to the user in stats informing the user that one of their posts has received a like. The %1$@ placeholder will be replaced with the title of a post, and the %2$@ will be replaced by the numeral one. */ -"stats.insights.totalLikes.guideText.singular" = "Ultimul tău articol %1$@ a avut %2$@ aprecieri."; +"stats.insights.totalLikes.guideText.singular" = "Ultimul tău articol %1$@ a avut o apreciere."; /* Dismiss the AlertView */ "stockPhotos.strings.dismiss" = "Refuză"; diff --git a/WordPress/Resources/ru.lproj/Localizable.strings b/WordPress/Resources/ru.lproj/Localizable.strings index e09a03fc2d6c..13170c8c1a10 100644 --- a/WordPress/Resources/ru.lproj/Localizable.strings +++ b/WordPress/Resources/ru.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-18 06:48:01+0000 */ +/* Translation-Revision-Date: 2023-10-02 18:13:34+0000 */ /* Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2); */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: ru */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "Цитата"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "Блок невозможно отобразить, поскольку он глубоко вложен. Нажмите здесь, чтобы получить более подробную информацию."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Блок скопирован"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Меню \"Блоки\""; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "Блоки, вложенные глубже, чем %d уровней, могут отображаться неправильно в мобильном редакторе. По этой причине мы рекомендуем сгладить содержимое, разгруппировав блок или отредактировать блок с помощью веб-редактора."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "Блоки, вложенные глубже, чем %d уровней, могут отображаться неправильно в мобильном редакторе. По этой причине мы рекомендуем сгладить содержимое, разгруппировав блок или отредактировать его с помощью веб-браузера."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Блог"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "Декабрь 17, 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Глубоко вложенный блок"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "По умолчанию"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Удалить"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "Переход к размеру шрифта по умолчанию"; +/* No comment provided by engineer. */ +"Synced patterns" = "Синхронизированные паттерны"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "Системные параметры по умолчанию"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Сделайте фото"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Сделать фото или записать видео"; - /* No comment provided by engineer. */ "Take a Video" = "Записать видео"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Нажмите тут для показа справки"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Нажмите здесь, чтобы посмотреть подробную информацию."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Коснитесь, чтобы добавить новые карточки статистики."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Отписаться от блога."; +/* No comment provided by engineer. */ +"Ungroup block" = "Разгруппировать блок"; + /* Unhides a site from the site picker list */ "Unhide" = "Показать"; @@ -8714,6 +8731,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ Title for Jetpack Restore Warning screen */ "Warning" = "Предупреждение"; +/* No comment provided by engineer. */ +"Warning message" = "Предупреждающее сообщение"; + /* Caption displayed in promotional screens shown during the login flow. */ "Watch your audience grow with in-depth analytics." = "Следите за ростом вашей аудитории с глубокой аналитикой."; @@ -9856,15 +9876,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "Удалить текущий тур"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Займите себе место в Интернете: зарегистрируйте адрес сайта, который будет легко запомнить и порекомендовать друзьям."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Свернуть"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Найти особый домен"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Это может занять до 30 минут, после чего ваш особый домен начнёт работать."; @@ -10323,9 +10337,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "Невозможно синхронизировать медиа"; -/* Media screen navigation title */ -"media.title" = "Медиа"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "Невозможно добавить файл в библиотеку медиафайлов."; @@ -10338,6 +10349,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Закрыть"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "Добавить медиафайл"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Добавить"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Выбрать"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "Отменить"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "Удалить"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "Вы хотите навсегда удалить эти элементы?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "Вы хотите навсегда удалить этот элемент?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "Невозможно удалить все медиафайлы."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Удаление..."; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "Удалено!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "Удалить"; @@ -10347,6 +10388,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Повторить загрузку"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Нет медиафайлов по критериям поиска"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "Медиа"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "Выбраны изображения: %d"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "Выбрано одно изображение"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "Выбрано элементов: %d"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "Выбран один элемент"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "Выбрать элементы"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Закрыть"; @@ -10578,12 +10640,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Черновики записей"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Изучите приложение"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Следующие шаги"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Страницы"; @@ -10730,6 +10786,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "Пожаловаться на этого пользователя"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "Записей: %1$@ • Подписчиков: %2$@"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "Назад"; @@ -10838,6 +10897,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "YourSiteName.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "Медиа"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "Конфиденциальность"; diff --git a/WordPress/Resources/sk.lproj/Localizable.strings b/WordPress/Resources/sk.lproj/Localizable.strings index 2b0921fdc0b9..ff4db29b8c1b 100644 --- a/WordPress/Resources/sk.lproj/Localizable.strings +++ b/WordPress/Resources/sk.lproj/Localizable.strings @@ -3031,8 +3031,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Odstrániť"; /* Remove Person Alert Title diff --git a/WordPress/Resources/sq.lproj/Localizable.strings b/WordPress/Resources/sq.lproj/Localizable.strings index 06b1609f2bb8..eca4139ea067 100644 --- a/WordPress/Resources/sq.lproj/Localizable.strings +++ b/WordPress/Resources/sq.lproj/Localizable.strings @@ -6042,8 +6042,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Hiqe"; /* Remove Person Alert Title @@ -7308,9 +7307,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Bëni një Foto"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Bëni Foto ose Video"; - /* No comment provided by engineer. */ "Take a Video" = "Bëni një Video"; @@ -9805,15 +9801,9 @@ Example: Reply to Pamela Nguyen */ /* Remote Config debug menu title */ "debugMenu.remoteConfig.title" = "Formësim Së Largëti"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Afirmoni pretendimin tuaj për qoshen tuaj në internet, me një adresë sajti që është kollaj të gjendet, jepet dhe ndiqet."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Fshihe këtë"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Gjeni një përkatësi vetjake"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Mund të duhen deri në 30 minuta që përkatësia juaj vetjake të fillojë të funksionojë."; @@ -10266,9 +10256,6 @@ Example: Reply to Pamela Nguyen */ /* Indicating that referrer was marked as spam */ "marked as spam" = "iu vu shenjë si i padëshiruar"; -/* Media screen navigation title */ -"media.title" = "Media"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "Objekti s’u shtua dot te Mediateka"; @@ -10503,12 +10490,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Hartoni postime"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Njihuni me aplikacionin"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Hapat pasues"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Faqe"; diff --git a/WordPress/Resources/sv.lproj/Localizable.strings b/WordPress/Resources/sv.lproj/Localizable.strings index bd9a0154de9e..6880d2c29abb 100644 --- a/WordPress/Resources/sv.lproj/Localizable.strings +++ b/WordPress/Resources/sv.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-19 13:54:08+0000 */ +/* Translation-Revision-Date: 2023-10-04 11:54:07+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: sv_SE */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "Citatblock"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "Blocket kan inte renderas eftersom det är djupt inbäddat. Tryck här för mer information."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Blocket kopierat"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Block-meny"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "Block som är inbäddade djupare än %d kanske inte renderas korrekt i den mobila redigeraren. Av den här anledningen rekommenderar vi att du plattar ut innehållet genom att avgruppera blocket eller att du redigerar blocket med webbredigeraren."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "Block som är inbäddade djupare än %d kanske inte renderas korrekt i den mobila redigeraren. Av den här anledningen rekommenderar vi att du plattar ut innehållet genom att avgruppera blocket eller att du redigerar blocket i din webbläsare."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Blogg"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "December 17, 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Djupt inbäddat block"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "Standard"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Ta bort"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "Växlar till typsnitt med standardstorlek"; +/* No comment provided by engineer. */ +"Synced patterns" = "Synkroniserade mönster"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "Systemstandard"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Ta en bild"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Ta ett foto eller spela in video"; - /* No comment provided by engineer. */ "Take a Video" = "Spela in en video"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Tryck här för att visa hjälp"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Tryck här för att visa mer detaljer."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Tryck för att lägga till nya statistikkort."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Sluta följ bloggen."; +/* No comment provided by engineer. */ +"Ungroup block" = "Avgruppera block"; + /* Unhides a site from the site picker list */ "Unhide" = "Visa"; @@ -8714,6 +8731,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ Title for Jetpack Restore Warning screen */ "Warning" = "Varning"; +/* No comment provided by engineer. */ +"Warning message" = "Varningsmeddelande"; + /* Caption displayed in promotional screens shown during the login flow. */ "Watch your audience grow with in-depth analytics." = "Se hur din publik växer med hjälp av detaljerad statistik."; @@ -9856,15 +9876,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "Ta bort aktuell rundtur"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Gör ditt anspråk på ditt hörn av webben med en webbplatsadress som är lätt att hitta, dela och följa."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Dölj detta"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Hitta en anpassad domän"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Det kan ta upp till 30 minuter för din anpassade domän att börja fungera."; @@ -10323,9 +10337,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "Det gick inte att synkronisera media"; -/* Media screen navigation title */ -"media.title" = "Media"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "Objektet kunde inte läggas till i mediabiblioteket."; @@ -10338,6 +10349,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Avfärda"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "Lägg till ny media"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Lägg till"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Välj"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "Avbryt"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "Ta bort"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "Är du säker på att du vill ta bort dessa objekt permanent?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "Är du säker på att du vill ta bort detta objekt permanent?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "Kan inte ta bort alla medieobjekt."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Tar bort …"; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "Borttaget!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "Ta bort"; @@ -10347,6 +10388,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Försök ladda upp igen"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Ingen media matchar din sökning"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "Media"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "%d bilder valda"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "1 bild vald"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "%d objekt valda"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "1 objekt valt"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "Välj objekt"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Avfärda"; @@ -10578,12 +10640,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Utkastinlägg"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Lär känna appen"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Nästa steg"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Sidor"; @@ -10730,6 +10786,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "Rapportera denna användare"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ inlägg • %2$@ följare"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "Tillbaka"; @@ -10838,6 +10897,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "YourSiteName.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "Media"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "Integritet"; diff --git a/WordPress/Resources/th.lproj/Localizable.strings b/WordPress/Resources/th.lproj/Localizable.strings index 710151a8a2ed..e635301d354d 100644 --- a/WordPress/Resources/th.lproj/Localizable.strings +++ b/WordPress/Resources/th.lproj/Localizable.strings @@ -1310,8 +1310,7 @@ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "ลบ"; /* Accessibility Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. */ diff --git a/WordPress/Resources/tr.lproj/Localizable.strings b/WordPress/Resources/tr.lproj/Localizable.strings index 9cc93c3a813e..bb7336e08d4b 100644 --- a/WordPress/Resources/tr.lproj/Localizable.strings +++ b/WordPress/Resources/tr.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-19 16:54:08+0000 */ +/* Translation-Revision-Date: 2023-10-04 15:54:07+0000 */ /* Plural-Forms: nplurals=2; plural=n > 1; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: tr */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "Alıntı"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "Blok derin bir şekilde iç içe geçtiği için işlenemez. Daha fazla ayrıntı için buraya dokunun."; + /* translators: displayed right after the block is copied. */ "Block copied" = "Blok kopyalandı"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "Bloklar menüsü"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "%d seviyelerinden daha derin bir şekilde iç içe geçmiş bloklar, mobil düzenleyicide düzgün şekilde oluşmayabilir. Bu nedenle, bloku gruplamadan çıkararak veya web düzenleyicisini kullanarak bloku düzenleme yoluyla içeriği düzleştirmenizi öneririz."; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "%d seviyelerinden daha derin bir şekilde iç içe geçmiş bloklar, mobil düzenleyicide düzgün şekilde oluşmayabilir. Bu nedenle, bloku gruplamadan çıkararak veya web tarayıcınızı kullanarak bloku düzenleme yoluyla içeriği düzleştirmenizi öneririz."; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "Blog"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "Aralık 17, 2017"; +/* No comment provided by engineer. */ +"Deeply nested block" = "Derin şekilde iç içe geçmiş blok"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "Varsayılan"; @@ -6060,8 +6072,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "Kaldır"; /* Remove Person Alert Title @@ -7283,6 +7294,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "Varsayılan yazı tipi boyutuna geçer"; +/* No comment provided by engineer. */ +"Synced patterns" = "Senkronize edilmiş desenler"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "Sistem varsayılanı"; @@ -7329,9 +7343,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "Fotoğraf çek"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "Fotoğraf veya Video Çek"; - /* No comment provided by engineer. */ "Take a Video" = "Video Çek"; @@ -7347,6 +7358,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "Yardımı görüntülemek için buraya dokunun"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "Daha fazla ayrıntı görüntülemek için buraya dokunun."; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Yeni istatistik kartları eklemek için dokunun."; @@ -8327,6 +8341,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "Blogu takip etmeyi bırakır."; +/* No comment provided by engineer. */ +"Ungroup block" = "Bloku gruptan çıkar"; + /* Unhides a site from the site picker list */ "Unhide" = "Göster"; @@ -9856,15 +9873,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "Mevcut Turu Kaldır"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "Bulması, paylaşması ve takip etmesi kolay bir site adresiyle internet dünyasındaki yerinizi alın."; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "Bunu gizle"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "Özel bir alan adı bulun"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "Özel alan adınızın çalışmaya başlaması 30 dakika kadar sürebilir."; @@ -10323,9 +10334,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "Ortam senkronize edilemiyor"; -/* Media screen navigation title */ -"media.title" = "Ortam"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "Öğe Ortam kütüphanesine eklenemez"; @@ -10338,6 +10346,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "Kapat"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "Yeni ortam ekle"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "Ekle"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "Seç"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "İptal et"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "Sil"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "Seçili öğeleri kalıcı olarak silmek istediğinizden emin misiniz?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "Bu ögeyi kalıcı olarak silmek istediğinizden emin misiniz?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "Tüm ortam dosyaları silinemiyor."; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "Siliniyor..."; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "Silindi!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "Sil"; @@ -10347,6 +10385,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "Yüklemeyi Yeniden Dene"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "Aramanızla eşleşen ortam yok"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "Ortam"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "%d Görsel Seçildi"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "1 Görsel Seçildi"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "%d Öğe Seçildi"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "1 Öğe Seçildi"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "Öğeleri Seçin"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "Kapat"; @@ -10578,12 +10637,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "Taslak yazılar"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "Uygulamayı tanıyın"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "Sonraki adımlar"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "Sayfalar"; @@ -10730,6 +10783,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "Bu kullanıcıyı bildir"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ gönderi • %2$@ takipçi"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "Geri"; @@ -10838,6 +10894,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "SiteAdi.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "Ortam"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "Gizlilik"; diff --git a/WordPress/Resources/zh-Hans.lproj/Localizable.strings b/WordPress/Resources/zh-Hans.lproj/Localizable.strings index fcf809635a84..1030a9c29353 100644 --- a/WordPress/Resources/zh-Hans.lproj/Localizable.strings +++ b/WordPress/Resources/zh-Hans.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-19 11:54:08+0000 */ +/* Translation-Revision-Date: 2023-10-09 10:54:08+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: zh_CN */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "块引用"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "区块深度嵌套,因此无法渲染。 轻点此处以了解更多详细信息。"; + /* translators: displayed right after the block is copied. */ "Block copied" = "区块已拷贝"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "区块菜单"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "嵌套深度超过 %d 层级的区块在移动端编辑器中可能无法正常渲染。 因此,我们建议取消区块分组或使用 Web 编辑器编辑区块,以使内容扁平化。"; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "嵌套深度超过 %d 层级的区块在移动端编辑器中可能无法正常渲染。 因此,我们建议取消区块分组或使用 Web 浏览器编辑区块,以使内容扁平化。"; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "博客"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "2017 年 12 月 17 日"; +/* No comment provided by engineer. */ +"Deeply nested block" = "深度嵌套区块"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "默认"; @@ -6057,8 +6069,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "移除"; /* Remove Person Alert Title @@ -7280,6 +7291,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "切换为默认字体大小"; +/* No comment provided by engineer. */ +"Synced patterns" = "已同步的样板"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "系统默认"; @@ -7326,9 +7340,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "拍照"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "拍摄照片或视频"; - /* No comment provided by engineer. */ "Take a Video" = "拍摄视频"; @@ -7344,6 +7355,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "轻点此处以显示帮助"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "轻点此处以显示更多详细信息。"; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "轻点以添加新的统计信息卡片。"; @@ -8324,6 +8338,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "取消关注该博客。"; +/* No comment provided by engineer. */ +"Ungroup block" = "取消区块分组"; + /* Unhides a site from the site picker list */ "Unhide" = "取消隐藏"; @@ -8711,6 +8728,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ Title for Jetpack Restore Warning screen */ "Warning" = "警告"; +/* No comment provided by engineer. */ +"Warning message" = "警告消息"; + /* Caption displayed in promotional screens shown during the login flow. */ "Watch your audience grow with in-depth analytics." = "通过深入分析观察您的受众增长。"; @@ -9850,15 +9870,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "删除当前导览"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "通过易于查找、共享和关注的站点地址,在网络上创建自己的一席之地。"; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "隐藏此内容"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "查找自定义域名"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "您的自定义域名最多可能需要 30 分钟才能开始运行。"; @@ -10317,9 +10331,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "无法同步媒体"; -/* Media screen navigation title */ -"media.title" = "媒体"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "无法将此项目添加到媒体库"; @@ -10332,6 +10343,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "忽略"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "添加新媒体"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "添加"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "选择"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "取消"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "删除"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "是否确定要永久删除这些项目?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "是否确定要永久删除此项目?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "无法删除所有媒体项目。"; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "正在删除..."; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "已删除!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "删除"; @@ -10341,6 +10382,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "重试上传"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "没有与您的搜索匹配的媒体"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "媒体"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "已选择 %d 张图片"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "已选择 1 张图片"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "已选择 %d 个项目"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "已选择 1 个项目"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "选择项目"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "忽略"; @@ -10572,12 +10634,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "草稿文章"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "了解此应用程序"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "后续步骤"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "页面"; @@ -10724,6 +10780,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "举报此用户"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ 篇文章 • %2$@ 位粉丝"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "返回"; @@ -10832,6 +10891,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "YourSiteName.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "媒体"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "隐私"; diff --git a/WordPress/Resources/zh-Hant.lproj/Localizable.strings b/WordPress/Resources/zh-Hant.lproj/Localizable.strings index 1b5f3584eb30..df6a07298a28 100644 --- a/WordPress/Resources/zh-Hant.lproj/Localizable.strings +++ b/WordPress/Resources/zh-Hant.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-09-24 14:52:18+0000 */ +/* Translation-Revision-Date: 2023-10-05 08:54:07+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/4.0.0-alpha.9 */ /* Language: zh_TW */ @@ -1122,6 +1122,9 @@ translators: Block name. %s: The localized block name */ Discoverability title for block quote keyboard shortcut. */ "Block Quote" = "封鎖引文"; +/* No comment provided by engineer. */ +"Block cannot be rendered because it is deeply nested. Tap here for more details." = "由於區塊已向下內嵌,故無法轉譯。 點選以瞭解更多詳細資訊。"; + /* translators: displayed right after the block is copied. */ "Block copied" = "已複製區塊"; @@ -1174,6 +1177,12 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Blocks menu" = "區塊選單"; +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using the web editor." = "向下內嵌超過 %d 層的區塊,在行動編輯器中可能無法正常轉譯。 因此我們建議藉由取消區塊群組,或使用你的網頁編輯器編輯區塊來減少內容。"; + +/* translators: Warning related to having blocks deeply nested. %d: The deepest nesting level. */ +"Blocks nested deeper than %d levels may not render properly in the mobile editor. For this reason, we recommend flattening the content by ungrouping the block or editing the block using your web browser." = "向下內嵌超過 %d 層的區塊,在行動編輯器中可能無法正常轉譯。 因此我們建議藉由取消區塊群組,或使用你的網頁瀏覽器編輯區塊來減少內容。"; + /* Title of a button that displays the WordPress.com blog */ "Blog" = "網誌"; @@ -2283,6 +2292,9 @@ translators: Block name. %s: The localized block name */ /* Only December needs to be translated */ "December 17, 2017" = "2017 年 12 月 17 日"; +/* No comment provided by engineer. */ +"Deeply nested block" = "向下內嵌區塊"; + /* Description of the default paragraph formatting style in the editor. Placeholder text displayed in the share extension's summary view. It lets the user know the default category will be used on their post. */ "Default" = "預設"; @@ -6057,8 +6069,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ Label for the Remove Feature Image icon. Tapping will show a confirmation screen for removing the feature image from the post. Remove Action Remove an image/posts/etc - Removes a self hosted site from the app - Title for button that will confirm removing the next steps/quick start menus. */ + Removes a self hosted site from the app */ "Remove" = "移除"; /* Remove Person Alert Title @@ -7280,6 +7291,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Accessibility Identifier for the Default Font Aztec Style. */ "Switches to the default Font Size" = "切換至預設的文字大小"; +/* No comment provided by engineer. */ +"Synced patterns" = "同步的版面配置"; + /* Title for the app appearance setting (light / dark mode) that uses the system default value */ "System default" = "系統預設"; @@ -7326,9 +7340,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Take a Photo" = "拍攝照片"; -/* No comment provided by engineer. */ -"Take a Photo or Video" = "拍攝相片或視訊"; - /* No comment provided by engineer. */ "Take a Video" = "拍攝視訊"; @@ -7344,6 +7355,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* No comment provided by engineer. */ "Tap here to show help" = "點選此處顯示說明"; +/* No comment provided by engineer. */ +"Tap here to show more details." = "點選此處以顯示更多詳細資訊。"; + /* Accessibility hint for a button that opens a view that allows to add new stats cards. */ "Tap to add new stats cards." = "Tap to add new stats cards."; @@ -8324,6 +8338,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* VoiceOver accessibility hint, informing the user the button can be used to unfollow a blog. */ "Unfollows the blog." = "取消關注此網誌。"; +/* No comment provided by engineer. */ +"Ungroup block" = "取消區塊群組"; + /* Unhides a site from the site picker list */ "Unhide" = "取消隱藏"; @@ -9850,15 +9867,9 @@ Example: Reply to Pamela Nguyen */ /* Remove current quick start tour menu item */ "debugMenu.removeQuickStart" = "移除目前的導覽"; -/* Description for the Domains dashboard card. */ -"domain.dashboard.card.description" = "建立易於搜尋、分享和追蹤的網站位址,打造屬於自己的網路園地。"; - /* Title for a menu action in the context menu on the Jetpack install card. */ "domain.dashboard.card.menu.hide" = "隱藏此訊息"; -/* Title for the Domains dashboard card. */ -"domain.dashboard.card.shortTitle" = "尋找自訂網域"; - /* Domain Purchase Completion footer */ "domain.purchase.preview.footer" = "你的自訂網域最多可能需要 30 分鐘才能開始運作。"; @@ -10317,9 +10328,6 @@ Example: Reply to Pamela Nguyen */ /* Title of error prompt shown when a sync fails. */ "media.syncFailed" = "無法同步媒體"; -/* Media screen navigation title */ -"media.title" = "媒體"; - /* An error message the app shows if media import fails */ "mediaExporter.error.unknown" = "無法將該項目新增到媒體庫"; @@ -10332,6 +10340,36 @@ Example: Reply to Pamela Nguyen */ /* Verb. User action to dismiss error alert when failing to load media item. */ "mediaItemTable.errorAlert.dismissButton" = "關閉"; +/* Accessibility hint for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityHint" = "新增媒體"; + +/* Accessibility label for add button to add items to the user's media library */ +"mediaLibrary.addButtonAccessibilityLabel" = "新增"; + +/* Media screen navigation bar button Select title */ +"mediaLibrary.buttonSelect" = "選取"; + +/* Verb. Button title. Tapping cancels an action. */ +"mediaLibrary.deleteConfirmationCancel" = "取消"; + +/* Title for button that permanently deletes one or more media items (photos / videos) */ +"mediaLibrary.deleteConfirmationConfirm" = "刪除"; + +/* Message prompting the user to confirm that they want to permanently delete a group of media items. */ +"mediaLibrary.deleteConfirmationMessageMany" = "確定要永久刪除這些項目?"; + +/* Message prompting the user to confirm that they want to permanently delete a media item. Should match Calypso. */ +"mediaLibrary.deleteConfirmationMessageOne" = "確定要永久刪除這個項目?"; + +/* Text displayed in HUD if there was an error attempting to delete a group of media items. */ +"mediaLibrary.deletionFailureMessage" = "無法刪除所有媒體項目。"; + +/* Text displayed in HUD while a media item is being deleted. */ +"mediaLibrary.deletionProgressViewTitle" = "正在刪除…"; + +/* Text displayed in HUD after successfully deleting a media item */ +"mediaLibrary.deletionSuccessMessage" = "已刪除!"; + /* User action to delete un-uploaded media. */ "mediaLibrary.retryOptionsAlert.delete" = "刪除"; @@ -10341,6 +10379,27 @@ Example: Reply to Pamela Nguyen */ /* User action to retry media upload. */ "mediaLibrary.retryOptionsAlert.retry" = "重試上傳"; +/* Message displayed when no results are returned from a media library search. Should match Calypso. */ +"mediaLibrary.searchResultsEmptyTitle" = "沒有符合你搜尋條件的媒體"; + +/* Media screen navigation title */ +"mediaLibrary.title" = "媒體"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesMany" = "已選取 %d 張圖片"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectImagesOne" = "已選取 1 張圖片"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsMany" = "已選取 %d 個項目"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsOne" = "已選取 1 個項目"; + +/* Bottom toolbar title in the selection mode */ +"mediaLibrary.toolbarSelectItemsPrompt" = "選取商品"; + /* The title of the button to dismiss the alert shown when the picked media cannot be imported into stories. */ "mediaPicker.failedMediaExportAlert.dismissButton" = "關閉"; @@ -10572,12 +10631,6 @@ Example: Reply to Pamela Nguyen */ /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.draftPosts" = "草稿文章"; -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.getToKnowTheApp" = "開始瞭解應用程式"; - -/* Card title for the pesonalization menu */ -"personalizeHome.dashboardCard.nextSteps" = "後續步驟"; - /* Card title for the pesonalization menu */ "personalizeHome.dashboardCard.pages" = "頁面"; @@ -10718,6 +10771,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* The title of a button that triggers the reporting of a post's author. */ "reader.post.menu.report.user" = "檢舉此使用者"; +/* The formatted number of posts and followers for a site. '%1$@' is a placeholder for the site post count. '%2$@' is a placeholder for the site follower count. Example: `5,000 posts • 10M followers` */ +"reader.site.header.counts" = "%1$@ 篇文章 • %2$@ 關注者"; + /* Spoken accessibility label */ "readerDetail.backButton.accessibilityLabel" = "返回"; @@ -10826,6 +10882,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Site name that is placed in the tooltip view. */ "site.creation.domain.tooltip.site.name" = "YourSiteName.com"; +/* Media screen navigation title */ +"siteMediaPicker.title" = "媒體"; + /* Title for screen to select the privacy options for a blog */ "siteSettings.privacy.title" = "隱私權"; From cbe663dc05b37bbfb638e2b69db16d3a867ec216 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Fri, 13 Oct 2023 11:39:08 +1100 Subject: [PATCH 34/78] Update WordPress metadata translations --- fastlane/metadata/ar-SA/release_notes.txt | 8 ++++++-- fastlane/metadata/de-DE/release_notes.txt | 8 ++++++-- fastlane/metadata/default/release_notes.txt | 8 ++++++-- fastlane/metadata/es-ES/release_notes.txt | 8 ++++++-- fastlane/metadata/fr-FR/release_notes.txt | 8 ++++++-- fastlane/metadata/he/release_notes.txt | 8 ++++++-- fastlane/metadata/id/release_notes.txt | 8 ++++++-- fastlane/metadata/it/release_notes.txt | 8 ++++++-- fastlane/metadata/ja/release_notes.txt | 8 ++++++-- fastlane/metadata/ko/release_notes.txt | 8 ++++++-- fastlane/metadata/nl-NL/release_notes.txt | 8 ++++++-- fastlane/metadata/ru/release_notes.txt | 8 ++++++-- fastlane/metadata/sv/release_notes.txt | 8 ++++++-- fastlane/metadata/tr/release_notes.txt | 8 ++++++-- fastlane/metadata/zh-Hans/release_notes.txt | 8 ++++++-- fastlane/metadata/zh-Hant/release_notes.txt | 8 ++++++-- 16 files changed, 96 insertions(+), 32 deletions(-) diff --git a/fastlane/metadata/ar-SA/release_notes.txt b/fastlane/metadata/ar-SA/release_notes.txt index 1654b7070e6b..b8d12e699660 100644 --- a/fastlane/metadata/ar-SA/release_notes.txt +++ b/fastlane/metadata/ar-SA/release_notes.txt @@ -1,3 +1,7 @@ -لقد غيَّرنا طريقة ظهور الإنذارات عند إدراج الوسائط في مكوّنات من عنوان URL. لذا، سمحنا بحدوث ذلك، وهو أمر رائع. +تم القضاء على الأخطاء! (كان أنظف بكثير مما يبدو). -من السهل أيضًا معرفة الفرق بين نص العنصر النائب والمحتوى الفعلي في القوالب المستندة إلى المكوّنات. +- يمكنك الآن تضمين عناوين URL من X من دون الحصول على رابط معطل. رائع للغاية، إذا سألتنا. +- في حال التطرق إلى الروابط - عندما تستخدم عنوان URL للوسائط يكون غير صالح، ستظهر الآن رسالة خطأ في التطبيق بدلاً من التعطل. أفضل، أليس كذلك؟ +- سيرى المسهمون الآن النافذة المنبثقة الصحيحة عند إرسال التدوينات للمراجعة. يا للروعة. +- أصلحنا مشكلة قد يرى المستخدمون غير المسؤولين فيها قائمة الإضافات الخاصة بموقعهم. متواري عن الأنظار، خارج نطاق السيطرة. +- في محرر المكوّنات، لن يتعطل التطبيق بعد الآن عند تداخل مكوّنتا عديدة للغاية في المكوِّنات… في المكوّنات… تفهم الفكرة. اغتنم تلك البداية. diff --git a/fastlane/metadata/de-DE/release_notes.txt b/fastlane/metadata/de-DE/release_notes.txt index 3083afee28bc..d5fe48563f66 100644 --- a/fastlane/metadata/de-DE/release_notes.txt +++ b/fastlane/metadata/de-DE/release_notes.txt @@ -1,3 +1,7 @@ -Wir haben die Art und Weise geändert, wie Warnmeldungen angezeigt werden, wenn du Medien von einer URL in Blöcke einfügst. Das hätten wir schon einmal, das ist gut. +Wir haben Bugs zerquetscht! (Es war viel sauberer, als es klingt.) -Außerdem ist es jetzt einfacher, in blockbasierten Themes den Unterschied zwischen Platzhaltertext und tatsächlichem Inhalt zu erkennen. +- Du kannst jetzt URLs von X einbetten, ohne dass ein Link kaputt geht. Ziemlich X-zellent, wenn du uns fragst. +- Apropos Links – wenn du eine ungültige Medien-URL verwendest, zeigt die App jetzt eine Fehlermeldung an, anstatt abzustürzen. Besser, oder? +- Wenn du Beiträge zur Überprüfung einreichst, wird jetzt das richtige Pop-up angezeigt. Puh. +- Wir haben ein Problem behoben, bei dem Nicht-Administratoren das Plugin-Menü für ihre Website sehen konnten. Aus den Augen, aus dem Sinn. +- Im Block-Editor stürzt die App nicht mehr ab, wenn du zu viele Blöcke innerhalb von Blöcken verschachtelst ... innerhalb von Blöcken ... du verstehst schon. Nimm das, Inception. diff --git a/fastlane/metadata/default/release_notes.txt b/fastlane/metadata/default/release_notes.txt index 52f67c07624e..6629f9b61b6b 100644 --- a/fastlane/metadata/default/release_notes.txt +++ b/fastlane/metadata/default/release_notes.txt @@ -1,3 +1,7 @@ -We changed the way alerts appear when you’re inserting media into blocks from a URL. So we’ve got that going for us, which is nice. +We’ve been squashing bugs! (It was a lot cleaner than it sounds.) -It’s also easier to tell the difference between placeholder text and actual content in block-based themes. +- You can now embed URLs from X without getting a broken link. Pretty X-cellent, if you ask us. +- Speaking of links—when you use an invalid media URL, the app will now display an error message instead of crashing. Better, right? +- Contributors will now see the correct pop-up when submitting posts for review. Phew. +- We fixed a problem where non-admin users could see the plugin menu for their site. Out of sight, out of mind. +- In the block editor, the app will no longer crash when you nest too many blocks within blocks… within blocks… you get the idea. Take that, Inception. diff --git a/fastlane/metadata/es-ES/release_notes.txt b/fastlane/metadata/es-ES/release_notes.txt index 3c594dc7441c..e3a22e52afc8 100644 --- a/fastlane/metadata/es-ES/release_notes.txt +++ b/fastlane/metadata/es-ES/release_notes.txt @@ -1,3 +1,7 @@ -Hemos cambiado la forma en que aparecen las alertas al insertar medios en bloques desde una URL. Así que tenemos eso a nuestro favor. +Hemos estado eliminando errores (había muchos menos de lo que parece). -- También es más fácil distinguir entre el texto del marcador de posición y el contenido real en los temas basados en bloques. +- Ahora puedes incrustar URL desde X sin obtener un enlace roto. Esto nos parece eXcelente. +- Hablando de enlaces, cuando utilices una URL de medios no válida, la aplicación mostrará ahora un mensaje de error en lugar de bloquearse. Mejor, ¿verdad? +- Ahora a los colaboradores les aparecerá la ventana emergente correspondiente cuando envíen entradas para su revisión. ¡Menos mal! +- Hemos solucionado un problema que hacía que los usuarios no administradores pudieran ver el menú de plugins de su sitio. Ojos que no ven, corazón que no siente. +- En el editor de bloques, la aplicación ya no se bloqueará cuando anides demasiados bloques dentro de bloques... dentro de bloques... ya te haces una idea. Chúpate esa, Origen. diff --git a/fastlane/metadata/fr-FR/release_notes.txt b/fastlane/metadata/fr-FR/release_notes.txt index 0f72009bb0c1..0e9e087db200 100644 --- a/fastlane/metadata/fr-FR/release_notes.txt +++ b/fastlane/metadata/fr-FR/release_notes.txt @@ -1,3 +1,7 @@ -Nous avons modifié l’affichage des alertes lorsque vous insérez des médias dans des blocs à partir d’une URL. C’est une excellente chose. +Nous avons corrigé des bugs ! (C’était bien moins terrible que ça en a l’air.) -Il est également plus facile de différencier un texte indicatif d’un contenu réel dans les thèmes basés sur des blocs. +- Vous pouvez désormais intégrer des URL depuis X sans obtenir un lien mort. De l’X-cellent travail, si vous voulez notre avis. +- En parlant de liens : lorsque vous utilisez une URL non valide pour un média, l’application affiche désormais un message d’erreur au lieu de planter. C’est mieux, non ? +- Les contributeurs verront désormais la bonne pop-up lorsqu’ils soumettront leurs publications à examen. Ouf ! +- Nous avons résolu un problème qui faisait que des utilisateurs pouvaient voir le menu d’extension de leur site sans être administrateurs. Loin des yeux, loin du cœur… +- Dans l'éditeur de blocs, l'application ne plante plus lorsque vous imbriquez trop de blocs les uns dans les autres, puis dans les autres… vous avez compris l’idée. Et toc, prends ça Inception. diff --git a/fastlane/metadata/he/release_notes.txt b/fastlane/metadata/he/release_notes.txt index fa338f1c9545..3e98cedff320 100644 --- a/fastlane/metadata/he/release_notes.txt +++ b/fastlane/metadata/he/release_notes.txt @@ -1,3 +1,7 @@ -שינינו את אופן התצוגה של התראות כאשר מזינים מדיה לבלוקים מכתובת URL. שמחים שהצלחנו לטפל גם בזה. +אנחנו מאתרים באגים ומטפלים בהם! (כלומר פותרים בעיות.) -כעת גם קל יותר לראות את ההבדלים בין טקסט של מציין מיקום והתוכן שיוצג בפועל בערכות עיצוב שמבוססות על בלוקים. +– מעכשיו אפשר להטמיע כתובות URL מ-X בלי שיתקבל קישור שבור. ממש מַ-X-י-ם, אם שואלים אותנו. +– ואם כבר מדברים על קישורים, הזנת כתובת URL לא תקפה של מדיה כבר לא תגרום לקריסה, אלא רק להצגת הודעת שגיאה. עדיף ככה, לא? +– מעכשיו, משתפים שישלחו פוסטים לבדיקה יראו את החלון הקופץ הנכון. אפשר להמשיך בשלווה. +– טיפלנו בבעיה שגרמה לכך שמשתמשים שאינם מנהלים יכלו לראות את תפריט התוספים של האתר. זהו. רחוק מן העין. +– בעורך הבלוקים, האפליקציה כבר לא תקרוס בעקבות קינון של יותר מדי בלוקים בתוך בלוקים, בתוך בלוקים... בטח כבר הבנת. גם העניין הזה נפתר! diff --git a/fastlane/metadata/id/release_notes.txt b/fastlane/metadata/id/release_notes.txt index 0a50d8c6a560..c787c293a938 100644 --- a/fastlane/metadata/id/release_notes.txt +++ b/fastlane/metadata/id/release_notes.txt @@ -1,3 +1,7 @@ -Kami mengubah cara peringatan muncul ketika Anda menyisipkan media ke dalam blok dari URL. Kami menyukainya. +Kami terus melenyapkan bug! (Tidak seseram yang terdengar, kok.) -Teks placeholder dan konten aktual kini lebih mudah dibedakan dalam tema berbasis blok. +- Anda kini dapat menyematkan URL dari X tanpa khawatir akan mendapatkan tautan yang rusak. Perbaikan yang X-tra bermanfaat, menurut kami. +- Mengenai tautan—ketika Anda menggunakan URL media yang tidak valid, aplikasi kini akan menampilkan pesan error alih-alih mengalami crash. Lebih baik seperti ini, bukan? +- Kontributor kini akan melihat pop-up yang benar ketika mengirimkan pos untuk ditinjau. Fiuh, leganya! +- Kami berhasil mengatasi masalah ketika pengguna yang bukan admin dapat melihat menu plugin untuk situsnya. Hilang dari pandangan, hilang dari beban pikiran. +- Di editor blok, aplikasi tidak akan lagi mengalami crash jika Anda membenamkan terlalu banyak blok di dalam blok … di dalam blok … Anda paham maksudnya. Tidak beda jauh dengan film Inception! diff --git a/fastlane/metadata/it/release_notes.txt b/fastlane/metadata/it/release_notes.txt index d4a2047a5f9d..95a77539c442 100644 --- a/fastlane/metadata/it/release_notes.txt +++ b/fastlane/metadata/it/release_notes.txt @@ -1,3 +1,7 @@ -Abbiamo modificato il modo in cui vengono visualizzati gli avvisi quando inserisci elementi multimediali nei blocchi da un URL. Quindi ce l'abbiamo fatta, il che è un bene. +Abbiamo rimosso i bug. Erano meno di quello che sembrava. -È anche più semplice distinguere tra il testo del segnaposto e il contenuto effettivo presenti nei temi basati su blocchi. +- Ora puoi incorporare URL da X senza che il link risulti interrotto. Proprio excellent con la X. +- Parlando di link: quando utilizzi un URL a contenuto multimediale non valido, l'app mostra un messaggio di errore invece di arrestarsi. Meglio, vero? +- I collaboratori ora visualizzeranno il popup corretto quando invieranno gli articoli per la revisione. Meno male. +- Abbiamo risolto un problema per cui gli utenti non amministratori potevano vedere il menu dei plugin per il loro sito. Occhio non vede, cuore non duole. +- Nell'editor a blocchi, l'app non si arresterà più quando effettui la nidificazione di troppi blocchi all'interno dei blocchi e poi all'interno di altri blocchi e di altri blocchi ancora… Non succede neanche in Inception. diff --git a/fastlane/metadata/ja/release_notes.txt b/fastlane/metadata/ja/release_notes.txt index 00b14538e4c8..1834115566b7 100644 --- a/fastlane/metadata/ja/release_notes.txt +++ b/fastlane/metadata/ja/release_notes.txt @@ -1,3 +1,7 @@ -URL からブロックにメディアを挿入する際のアラートの表示方法が変わりました。 この変更はユーザーにプラスに働きます。 +バグを修正してきました (重大な問題はありませんでした)。 -また、ブロックベースのテーマでプレースホルダーのテキストと実際のコンテンツが区別しやすくなりました。 +- リンク切れを起こさず X から URL を埋め込むことができるようになりました。 素晴らしい出来です。 +- リンクに関しては、無効なメディア URL を使用するとアプリはクラッシュすることなくエラーメッセージが表示されるようになりました。 ご確認ください。 +- 投稿者がレビューの際に投稿を送信するときに、正しいポップアップが表示されるようになりました。 ご安心ください。 +- 管理者以外のユーザーにサイトのプラグインメニューが表示されることがある問題を修正しました。 今後問題になることはありません。 +- ブロックエディターで、ブロック内にブロックをネストしすぎてもアプリがクラッシュしなくなりました。 ご確認ください。 diff --git a/fastlane/metadata/ko/release_notes.txt b/fastlane/metadata/ko/release_notes.txt index 3798615db56f..51664d27d94a 100644 --- a/fastlane/metadata/ko/release_notes.txt +++ b/fastlane/metadata/ko/release_notes.txt @@ -1,3 +1,7 @@ -URL에서 블록에 미디어를 삽입할 때 알림이 표시되는 방식을 변경했습니다. 아주 유용한 변화입니다. +버그를 수정했습니다! (생각보다 훨씬 깔끔했습니다.) -블록 기반 테마에서 플레이스홀더 텍스트와 실제 콘텐츠 간의 차이도 더 쉽게 구분할 수 있습니다. +- 이제는 끊어진 링크를 이용하지 않고 X의 URL을 임베드할 수 있습니다. 굳이 말씀드리자면 정말로 멋집니다. +- 유효하지 않은 미디어 URL을 사용할 때 충돌하지 않고 앱에 오류 메시지가 표시됩니다. 좋아졌죠? +- 이제는 공동 작업자가 검토용 글을 제출할 때 올바른 팝업이 표시됩니다. 더 있습니다. +- 관리자가 아닌 사용자가 자신의 사이트에 대한 플러그인 메뉴를 볼 수 있었던 문제를 해결했습니다. 눈에서 멀어지면 마음에서도 멀어집니다. +- 블록 편집기에서 블록 내에 너무 많은 블록을 중첩할 때 더는 앱이 충돌하지 않습니다...블록 내에서 말입니다...이해되시나요? 맘껏 이용하세요. diff --git a/fastlane/metadata/nl-NL/release_notes.txt b/fastlane/metadata/nl-NL/release_notes.txt index 6bf6508b254d..df0423038630 100644 --- a/fastlane/metadata/nl-NL/release_notes.txt +++ b/fastlane/metadata/nl-NL/release_notes.txt @@ -1,3 +1,7 @@ -We hebben een aanpassing gedaan aan de manier waarop meldingen verschijnen als je media vanaf een URL invoegt in blokken. Dat hebben we goed voor elkaar. +We hebben wat bugs geplet! (Het ging wat netter dan dat klinkt.) -Het is ook eenvoudiger om het verschil te zien tussen placeholdertekst en daadwerkelijke content in thema's op blokbasis. +- Je kan nu URL's van X insluiten zonder dat de link breekt. X-cellent, al zeggen we het zelf. +- En nu we het toch over links hebben: wanneer je een ongeldige media-URL gebruikt, geeft de app nu een foutmelding weer in plaats van te crashen. Zoveel beter, toch? +- Bijdragers zien nu de juiste pop-up wanneer ze een bericht voor beoordeling indienen. Gelukkig! +- We hebben een probleem opgelost waarbij gebruikers die geen beheerder zijn het pluginmenu konden zien voor hun site. Uit het oog, uit het hart. +- In de blokeditor crasht de app niet meer wanneer je te veel blokken in blokken… in blokken… nest, je snapt het wel. Wat nou, Inception. diff --git a/fastlane/metadata/ru/release_notes.txt b/fastlane/metadata/ru/release_notes.txt index 0be203a4aa31..e9b5804cff12 100644 --- a/fastlane/metadata/ru/release_notes.txt +++ b/fastlane/metadata/ru/release_notes.txt @@ -1,3 +1,7 @@ -Мы изменили способ вывода на экран уведомлений при вставке медиафайлов из URL-адресов в блоки. Нам удалось сделать то, что мы хотели, и это здорово. +Мы беспощадно ликвидируем ошибки! (На самом деле всё гораздо спокойнее.) -Кроме того, в темах на основе блоков стало проще отличать текст-заполнитель от настоящего контента. +– Теперь можно вставлять URL-адреса из X без риска получить неработающую ссылку. ИКС-ключительно полезная функция! +– И кстати, о ссылках: при вставке недействительного URL-адреса медиафайла приложение теперь выдаёт сообщение об ошибке, вместо того чтобы аварийно завершать работу. Так гораздо лучше, правда? +– При отправке записи на модерацию участники отныне видят правильное всплывающее сообщение. Наконец-то. +– Мы исправили ошибку, из-за которой меню плагинов сайта могли увидеть пользователи без прав администратора. С глаз долой — из сердца вон. +– Если вы в редакторе блоков вкладываете одни блоки в другие, а другие — в третьи… И так много, много, много раз… В общем, вы поняли. Так вот, теперь приложение не станет аварийно завершать работу в этом случае. Как вам такое? diff --git a/fastlane/metadata/sv/release_notes.txt b/fastlane/metadata/sv/release_notes.txt index 20822d05ddea..a76b02a40e47 100644 --- a/fastlane/metadata/sv/release_notes.txt +++ b/fastlane/metadata/sv/release_notes.txt @@ -1,3 +1,7 @@ -Vi har ändrat hur aviseringar visas när du infogar media i block från en URL. Det känns bra att det är ordnat. +Vi har bekämpat buggar! (Det var mycket renare än det låter.) -Det är också enklare att se skillnaden mellan platshållartext och faktiskt innehåll i blockbaserade teman. +- Nu kan du bädda in URL:er från X utan att länken bryts. Ganska X-cellent, om du frågar oss. +- På tal om länkar – när du använder en ogiltig media-URL kommer appen nu att visa ett felmeddelande istället för att krascha. Bättre, eller hur? +- Bidragslämnare ser nu rätt popup-fönster när de skickar in inlägg för granskning. Skönt. +- Vi har åtgärdat ett problem där användare som inte är administratörer kunde se tilläggsmenyn för sin webbplats. Ur sikte, ur sinne. +- Appen kraschar inte längre i blockredigeraren när du placerar för många block inuti block... inuti block... ja, du fattar. Där fick du, Inception. diff --git a/fastlane/metadata/tr/release_notes.txt b/fastlane/metadata/tr/release_notes.txt index a7520ac74391..fc5017829f21 100644 --- a/fastlane/metadata/tr/release_notes.txt +++ b/fastlane/metadata/tr/release_notes.txt @@ -1,3 +1,7 @@ -Bir URL'den bloklara ortam eklerken uyarıların görünme şeklini değiştirdik. Bu bizim için iyi bir şey. +Hataları ezip geçiyoruz! (Göründüğünden daha merhametli davranıyoruz.) -Ayrıca, blok tabanlı temalarda yer tutucu metin ile gerçek içerik arasındaki farkı anlamak da artık daha kolay. +- Artık X'ten URL'leri gömerken bozuk bağlantı almayacaksınız. Bize sorarsanız, oldukça mükemmel. +- Bağlantılardan bahsetmişken, geçersiz bir ortam URL'si kullandığınızda, uygulama artık çökmeyecek ve bunun yerine bir hata mesajı görüntüleyecek. Daha iyi, değil mi? +- Katkıda bulunanlar artık gönderilerini incelemeye gönderirken doğru açılır pencereyi görecekler. Harika! +- Yönetici olmayan kullanıcıların kendi siteleri için eklenti menüsünü görebildiği bir sorunu çözdük. Gözden uzak olan gönülden de uzak olur. +- Blok düzenleyicide, blokların içine çok fazla blok yerleştirdiğinizde uygulama artık çökmeyecek. Inception'a benziyor. diff --git a/fastlane/metadata/zh-Hans/release_notes.txt b/fastlane/metadata/zh-Hans/release_notes.txt index 0ab987ad6582..82e0d92dab57 100644 --- a/fastlane/metadata/zh-Hans/release_notes.txt +++ b/fastlane/metadata/zh-Hans/release_notes.txt @@ -1,3 +1,7 @@ -我们更改了从 URL 中将媒体插入区块时相关提示的呈现方式。 这赋予了我们相应的优势,很不错。 +我们一直在修复错误! (实际情况比听起来更干净利落。) -也更容易区分基于区块的主题中的占位符文本和实际内容。 +- 您现在可以从 X 嵌入 URL,而不会出现链接中断的情况。 我的评价是,这太棒了。 +- 说到链接 — 若您使用的媒体 URL 无效,应用程序会显示一条错误消息,而不会崩溃。 更优化了,对吗? +- 现在,贡献者在提交文章供审核时将看到正确的弹窗。 真是太好了。 +- 我们修复了非管理员用户可以看到其站点插件菜单的问题。 眼不见,心不烦。 +- 当您通过区块编辑器在区块中层层嵌套了过多区块时,应用程序不会再崩溃…明白了吧。 接招吧。 diff --git a/fastlane/metadata/zh-Hant/release_notes.txt b/fastlane/metadata/zh-Hant/release_notes.txt index 137c5b28084c..837538cf77dc 100644 --- a/fastlane/metadata/zh-Hant/release_notes.txt +++ b/fastlane/metadata/zh-Hant/release_notes.txt @@ -1,3 +1,7 @@ -我們改變了你從 URL 將媒體插入區塊時,警示出現的方式。 因此我們在這方面獲得優勢,十分有幫助。 +我們殲滅了多項錯誤! (備註:這只是比喻,實際上沒這麼暴力。) -在區塊型佈景主題中,同樣也更容易分辨出預留位置文字與實際內容。 +- 現在起,你可以從 X 嵌入 URL,但無須擔心連結損壞。 如果想知道我們的意見,我們會說:真是 X 級的厲害。 +- 說到連結,從現在開始,如果你使用了無效的媒體 URL,應用程式會顯示錯誤訊息,不會再直接當機。 更好用了,對吧? +- 現在起,撰寫人員將文章提交送審時,可以看到正確的快顯視窗。 終於搞定了。 +- 我們修正了問題,不具管理員身分的使用者不會再看到網站的外掛程式選單了。 眼不見為淨。 +- 在區塊編輯器中,即使將大量區塊嵌入到區塊...和區塊...裡面 (不難懂吧),應用程式也不會再當機了。 沒問題了,那就全面啟動。 From 36c08a6267dbed723faed8fa9636633d78b9d09c Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Fri, 13 Oct 2023 11:39:15 +1100 Subject: [PATCH 35/78] Update Jetpack metadata translations --- fastlane/jetpack_metadata/ar-SA/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/de-DE/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/default/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/es-ES/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/fr-FR/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/he/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/id/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/it/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/ja/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/ko/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/nl-NL/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/pt-BR/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/ru/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/sv/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/tr/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/zh-Hans/release_notes.txt | 12 ++++++------ fastlane/jetpack_metadata/zh-Hant/release_notes.txt | 12 ++++++------ 17 files changed, 102 insertions(+), 102 deletions(-) diff --git a/fastlane/jetpack_metadata/ar-SA/release_notes.txt b/fastlane/jetpack_metadata/ar-SA/release_notes.txt index b3531352c07b..b8d12e699660 100644 --- a/fastlane/jetpack_metadata/ar-SA/release_notes.txt +++ b/fastlane/jetpack_metadata/ar-SA/release_notes.txt @@ -1,7 +1,7 @@ -تتوافر الآن المربعات الجانبية لشاشات القفل على Jetpack حتى يمكنك التحقق من إحصاءات موقعك من دون فتح هاتفك. ما عليك سوى تذكر أن القوة الكبيرة تؤدي إلى الكفاءة الرائعة. أو شيء من هذا القبيل. +تم القضاء على الأخطاء! (كان أنظف بكثير مما يبدو). -لقد غيَّرنا طريقة ظهور الإنذارات عند إدراج الوسائط في مكوّنات من عنوان URL. لذا، سمحنا بحدوث ذلك، وهو أمر رائع. - -من السهل أيضًا معرفة الفرق بين نص العنصر النائب والمحتوى الفعلي في القوالب المستندة إلى المكوّنات. - -أخيرًا، قمنا بتحديث التنقل في "موقعي" حتى يمكنك الوصول إلى الأقسام الشائعة في الموقع بشكل أسرع. (ألا تحب هذه الاختصارات؟ لا داعي للقلق، يمكنك تخصيصها حسب محتواك الذي ترغب فيه). +- يمكنك الآن تضمين عناوين URL من X من دون الحصول على رابط معطل. رائع للغاية، إذا سألتنا. +- في حال التطرق إلى الروابط - عندما تستخدم عنوان URL للوسائط يكون غير صالح، ستظهر الآن رسالة خطأ في التطبيق بدلاً من التعطل. أفضل، أليس كذلك؟ +- سيرى المسهمون الآن النافذة المنبثقة الصحيحة عند إرسال التدوينات للمراجعة. يا للروعة. +- أصلحنا مشكلة قد يرى المستخدمون غير المسؤولين فيها قائمة الإضافات الخاصة بموقعهم. متواري عن الأنظار، خارج نطاق السيطرة. +- في محرر المكوّنات، لن يتعطل التطبيق بعد الآن عند تداخل مكوّنتا عديدة للغاية في المكوِّنات… في المكوّنات… تفهم الفكرة. اغتنم تلك البداية. diff --git a/fastlane/jetpack_metadata/de-DE/release_notes.txt b/fastlane/jetpack_metadata/de-DE/release_notes.txt index f65293cde628..d3a6e66be2e7 100644 --- a/fastlane/jetpack_metadata/de-DE/release_notes.txt +++ b/fastlane/jetpack_metadata/de-DE/release_notes.txt @@ -1,7 +1,7 @@ -Sperrbildschirm-Widgets sind jetzt auf Jetpack verfügbar. Du kannst nun also deine Website-Statistiken überprüfen, ohne dein Smartphone zu entsperren. Aber denk dran: Aus großer Macht folgt große Effizienz. Oder so ähnlich. +Wir haben einige Fehler beseitigt! (Das war weniger aufwendig als gedacht.) -Benachrichtigungen werden nun anders angezeigt, wenn du über eine URL Medien in Blöcke einfügst. Ist das nicht fabelhaft? - -Außerdem können Platzhaltertext und tatsächlicher Inhalt in blockbasierten Themes nun leichter unterschieden werden. - -Zu guter Letzt haben wir die Navigation unter „Meine Website“ aktualisiert, wodurch du schneller zu beliebten Abschnitten der Website gelangen kannst. (Du magst diese Tastaturkürzel nicht? Keine Sorge, du kannst sie nach Herzenslust anpassen.) +- Du kannst jetzt URLs aus X einbetten, ohne fehlerhafte Links zu erhalten. Ziemlich gut, wenn du uns fragst. +- Hinsichtlich Links: Bei Verwendung einer ungültigen Medien-URL zeigt die App jetzt eine Fehlermeldung an und stürzt nicht mehr ab. Besser, oder? +- Mitarbeiter sehen jetzt das richtige Pop-up, wenn sie Beiträge zur Überprüfung einreichen. Was ein Glück. +- Wir haben ein Problem behoben, das dazu führte, dass Benutzer ohne Administratorrechte das Plugin-Menü für ihre Website sehen konnten. Aus den Augen, aus dem Sinn. +- Im Block-Editor stürzt die App nicht mehr ab, wenn du zu viele ineinanderverschachtelte Blöcke hast. Was sagst du dazu? diff --git a/fastlane/jetpack_metadata/default/release_notes.txt b/fastlane/jetpack_metadata/default/release_notes.txt index a2df96cf8636..6629f9b61b6b 100644 --- a/fastlane/jetpack_metadata/default/release_notes.txt +++ b/fastlane/jetpack_metadata/default/release_notes.txt @@ -1,7 +1,7 @@ -Lock screen widgets are now available on Jetpack so you can check your site stats without unlocking your phone. Just remember, with great power comes great efficiency. Or something like that. +We’ve been squashing bugs! (It was a lot cleaner than it sounds.) -We changed the way alerts appear when you’re inserting media into blocks from a URL. So we’ve got that going for us, which is nice. - -It’s also easier to tell the difference between placeholder text and actual content in block-based themes. - -Finally, we updated the navigation in My Site so you can reach popular sections of the site faster. (Don’t love these shortcuts? Don’t worry, you can personalize them to your heart’s content.) +- You can now embed URLs from X without getting a broken link. Pretty X-cellent, if you ask us. +- Speaking of links—when you use an invalid media URL, the app will now display an error message instead of crashing. Better, right? +- Contributors will now see the correct pop-up when submitting posts for review. Phew. +- We fixed a problem where non-admin users could see the plugin menu for their site. Out of sight, out of mind. +- In the block editor, the app will no longer crash when you nest too many blocks within blocks… within blocks… you get the idea. Take that, Inception. diff --git a/fastlane/jetpack_metadata/es-ES/release_notes.txt b/fastlane/jetpack_metadata/es-ES/release_notes.txt index e41006632744..e3a22e52afc8 100644 --- a/fastlane/jetpack_metadata/es-ES/release_notes.txt +++ b/fastlane/jetpack_metadata/es-ES/release_notes.txt @@ -1,7 +1,7 @@ -Los widgets de pantalla de bloqueo ya están disponibles en Jetpack para que puedas consultar las estadísticas de tu sitio sin desbloquear el teléfono. Recuerda que una gran potencia conlleva una gran eficiencia. O algo así. +Hemos estado eliminando errores (había muchos menos de lo que parece). -Hemos cambiado la forma en que aparecen las alertas al insertar medios en bloques desde una URL. Así que tenemos eso a nuestro favor. - -- También es más fácil distinguir entre el texto del marcador de posición y el contenido real en los temas basados en bloques. - -Por último, hemos actualizado la navegación en Mi sitio para que puedas llegar más rápidamente a las secciones más populares del sitio. (¿No te gustan estos atajos? No te preocupes, puedes personalizarlos a tu gusto). +- Ahora puedes incrustar URL desde X sin obtener un enlace roto. Esto nos parece eXcelente. +- Hablando de enlaces, cuando utilices una URL de medios no válida, la aplicación mostrará ahora un mensaje de error en lugar de bloquearse. Mejor, ¿verdad? +- Ahora a los colaboradores les aparecerá la ventana emergente correspondiente cuando envíen entradas para su revisión. ¡Menos mal! +- Hemos solucionado un problema que hacía que los usuarios no administradores pudieran ver el menú de plugins de su sitio. Ojos que no ven, corazón que no siente. +- En el editor de bloques, la aplicación ya no se bloqueará cuando anides demasiados bloques dentro de bloques... dentro de bloques... ya te haces una idea. Chúpate esa, Origen. diff --git a/fastlane/jetpack_metadata/fr-FR/release_notes.txt b/fastlane/jetpack_metadata/fr-FR/release_notes.txt index b3d0b8304ea3..7477e55d6460 100644 --- a/fastlane/jetpack_metadata/fr-FR/release_notes.txt +++ b/fastlane/jetpack_metadata/fr-FR/release_notes.txt @@ -1,7 +1,7 @@ -Les widgets d’écran de verrouillage sont désormais disponibles sur Jetpack. Vous pouvez donc vérifier les statistiques de votre site sans déverrouiller votre téléphone. N’oubliez pas qu’un grand pouvoir implique une grande efficacité. Ou quelque chose du genre. +Nous avons corrigé des bugs ! (C’était bien moins terrible que ça en a l’air.) -Nous avons modifié l’affichage des alertes lorsque vous insérez des médias dans des blocs à partir d’une URL. C’est une excellente chose. - -Il est également plus facile de différencier un texte indicatif d’un contenu réel dans les thèmes basés sur des blocs. - -Enfin, nous avons mis à jour la navigation dans Mon site pour offrir un accès plus rapide aux sections les plus populaires du site. (Vous n’aimez pas ces raccourcis ? Ne vous inquiétez pas, vous pouvez les personnaliser comme vous l’entendez.) +- Vous pouvez désormais intégrer des URL depuis X sans obtenir un lien mort. De l’X-cellent travail, si vous voulez notre avis. +- En parlant de liens : lorsque vous utilisez une URL non valide pour un média, l’application affiche désormais un message d’erreur au lieu de planter. C’est mieux, non ? +- Les contributeurs verront désormais la bonne pop-up lorsqu’ils soumettront leurs publications à examen. Ouf ! +- Nous avons résolu un problème qui faisait que des utilisateurs pouvaient voir le menu d’extension de leur site sans être administrateurs. Loin des yeux, loin du cœur… +- Dans l’éditeur de blocs, l’application ne plante plus lorsque vous imbriquez trop de blocs les uns dans les autres, puis dans les autres… vous avez compris l’idée. Et toc, prends ça Inception. diff --git a/fastlane/jetpack_metadata/he/release_notes.txt b/fastlane/jetpack_metadata/he/release_notes.txt index 9d35bf573668..3e98cedff320 100644 --- a/fastlane/jetpack_metadata/he/release_notes.txt +++ b/fastlane/jetpack_metadata/he/release_notes.txt @@ -1,7 +1,7 @@ -וידג’טים להצגה במסך נעול זמינים כעת ב-Jetpack ואפשר לבדוק את הנתונים של האתר בלי לבטל את הנעילה של הטלפון. כמו שאומרים, ככל המרבה, הרי זה יעיל. או משהו כזה. +אנחנו מאתרים באגים ומטפלים בהם! (כלומר פותרים בעיות.) -שינינו את אופן התצוגה של התראות כאשר מזינים מדיה לבלוקים מכתובת URL. שמחים שהצלחנו לטפל גם בזה. - -כעת גם קל יותר לראות את ההבדלים בין טקסט של מציין מיקום והתוכן שיוצג בפועל בערכות עיצוב שמבוססות על בלוקים. - -אחרון חביב, אנחנו מעדכנים את תפריט הניווט ב'אתר שלי' כדי לאפשר לך לגשת מהר יותר למקטעים פופולריים באתר. (הקיצורים האלה לא מוצאים חן בעיניך? אל דאגה, אפשר להתאים אותם כרצונך.) +– מעכשיו אפשר להטמיע כתובות URL מ-X בלי שיתקבל קישור שבור. ממש מַ-X-י-ם, אם שואלים אותנו. +– ואם כבר מדברים על קישורים, הזנת כתובת URL לא תקפה של מדיה כבר לא תגרום לקריסה, אלא רק להצגת הודעת שגיאה. עדיף ככה, לא? +– מעכשיו, משתפים שישלחו פוסטים לבדיקה יראו את החלון הקופץ הנכון. אפשר להמשיך בשלווה. +– טיפלנו בבעיה שגרמה לכך שמשתמשים שאינם מנהלים יכלו לראות את תפריט התוספים של האתר. זהו. רחוק מן העין. +– בעורך הבלוקים, האפליקציה כבר לא תקרוס בעקבות קינון של יותר מדי בלוקים בתוך בלוקים, בתוך בלוקים... בטח כבר הבנת. גם העניין הזה נפתר! diff --git a/fastlane/jetpack_metadata/id/release_notes.txt b/fastlane/jetpack_metadata/id/release_notes.txt index a968dcf5778c..c787c293a938 100644 --- a/fastlane/jetpack_metadata/id/release_notes.txt +++ b/fastlane/jetpack_metadata/id/release_notes.txt @@ -1,7 +1,7 @@ -Widget kunci layar kini tersedia di Jetpack agar Anda dapat memeriksa statistik situs Anda tanpa membuka ponsel. Ingatlah bahwa keleluasaan selalu menyertai efisiensi. Atau kurang lebih demikian. +Kami terus melenyapkan bug! (Tidak seseram yang terdengar, kok.) -Kami mengubah cara peringatan muncul ketika Anda menyisipkan media ke dalam blok dari URL. Kami menyukainya. - -Teks placeholder dan konten aktual kini lebih mudah dibedakan dalam tema berbasis blok. - -Akhirnya, kami memperbarui navigasi di Situs Saya agar Anda dapat menjangkau bagian populer pada situs dengan lebih cepat. (Tidak suka pintasan ini? Jangan khawatir, Anda dapat mempersonalisasikannya sesuka hati.) +- Anda kini dapat menyematkan URL dari X tanpa khawatir akan mendapatkan tautan yang rusak. Perbaikan yang X-tra bermanfaat, menurut kami. +- Mengenai tautan—ketika Anda menggunakan URL media yang tidak valid, aplikasi kini akan menampilkan pesan error alih-alih mengalami crash. Lebih baik seperti ini, bukan? +- Kontributor kini akan melihat pop-up yang benar ketika mengirimkan pos untuk ditinjau. Fiuh, leganya! +- Kami berhasil mengatasi masalah ketika pengguna yang bukan admin dapat melihat menu plugin untuk situsnya. Hilang dari pandangan, hilang dari beban pikiran. +- Di editor blok, aplikasi tidak akan lagi mengalami crash jika Anda membenamkan terlalu banyak blok di dalam blok … di dalam blok … Anda paham maksudnya. Tidak beda jauh dengan film Inception! diff --git a/fastlane/jetpack_metadata/it/release_notes.txt b/fastlane/jetpack_metadata/it/release_notes.txt index 1e7390cffa25..95a77539c442 100644 --- a/fastlane/jetpack_metadata/it/release_notes.txt +++ b/fastlane/jetpack_metadata/it/release_notes.txt @@ -1,7 +1,7 @@ -I widget della schermata di blocco sono ora disponibili su Jetpack così potrai verificare le statistiche del sito senza sbloccare il telefono. Ricorda solo che da una grande potenza deriva una grande efficienza. O qualcosa del genere. +Abbiamo rimosso i bug. Erano meno di quello che sembrava. -Abbiamo modificato il modo in cui vengono visualizzati gli avvisi quando inserisci elementi multimediali nei blocchi da un URL. Quindi ce l'abbiamo fatta, il che è un bene. - -È anche più semplice distinguere tra il testo del segnaposto e il contenuto effettivo presenti nei temi basati su blocchi. - -Infine, abbiamo aggiornato la navigazione in Il mio sito in modo tale da raggiungere più velocemente le sezioni più visitate del sito. Non ti piacciono queste scorciatoie? Non preoccuparti, puoi personalizzarle a tuo piacimento. +- Ora puoi incorporare URL da X senza che il link risulti interrotto. Proprio excellent con la X. +- Parlando di link: quando utilizzi un URL a contenuto multimediale non valido, l'app mostra un messaggio di errore invece di arrestarsi. Meglio, vero? +- I collaboratori ora visualizzeranno il popup corretto quando invieranno gli articoli per la revisione. Meno male. +- Abbiamo risolto un problema per cui gli utenti non amministratori potevano vedere il menu dei plugin per il loro sito. Occhio non vede, cuore non duole. +- Nell'editor a blocchi, l'app non si arresterà più quando effettui la nidificazione di troppi blocchi all'interno dei blocchi e poi all'interno di altri blocchi e di altri blocchi ancora… Non succede neanche in Inception. diff --git a/fastlane/jetpack_metadata/ja/release_notes.txt b/fastlane/jetpack_metadata/ja/release_notes.txt index 638de36ef03d..1834115566b7 100644 --- a/fastlane/jetpack_metadata/ja/release_notes.txt +++ b/fastlane/jetpack_metadata/ja/release_notes.txt @@ -1,7 +1,7 @@ -Jetpack でロック画面ウィジェットを使用して、スマートフォンのロックを解除せずにサイトの統計情報を確認できるようになりました。 テクノロジーの進歩は効率性を大幅に向上させるか、 少なくとも何かを高めます。 +バグを修正してきました (重大な問題はありませんでした)。 -URL からブロックにメディアを挿入する際のアラートの表示方法が変わりました。 この変更はユーザーにとって前向きな進歩です。 - -また、ブロックベースのテーマでプレースホルダーのテキストと実際のコンテンツが区別しやすくなりました。 - -参加サイトのナビゲーションを更新したため、サイトでよく使われるセクションに素早くアクセスできるようになっています (変更後のショートカットが気に入らない場合は、 自由にパーソナライズできます)。 +- リンク切れを起こさず X から URL を埋め込むことができるようになりました。 素晴らしい出来です。 +- リンクに関しては、無効なメディア URL を使用するとアプリはクラッシュすることなくエラーメッセージが表示されるようになりました。 ご確認ください。 +- 投稿者がレビューの際に投稿を送信するときに、正しいポップアップが表示されるようになりました。 ご安心ください。 +- 管理者以外のユーザーにサイトのプラグインメニューが表示されることがある問題を修正しました。 今後問題になることはありません。 +- ブロックエディターで、ブロック内にブロックをネストしすぎてもアプリがクラッシュしなくなりました。 ご確認ください。 diff --git a/fastlane/jetpack_metadata/ko/release_notes.txt b/fastlane/jetpack_metadata/ko/release_notes.txt index c2174baeaeb5..51664d27d94a 100644 --- a/fastlane/jetpack_metadata/ko/release_notes.txt +++ b/fastlane/jetpack_metadata/ko/release_notes.txt @@ -1,7 +1,7 @@ -이제 젯팩에서 잠금 화면 위젯을 사용할 수 있어서 스마트폰 잠금을 해제하지 않고도 사이트 통계를 확인할 수 있습니다. 기능이 좋을수록 능률도 좋아지는 법입니다. 당연한 이야기입니다. +버그를 수정했습니다! (생각보다 훨씬 깔끔했습니다.) -URL에서 블록에 미디어를 삽입할 때 알림이 표시되는 방식을 변경했습니다. 아주 유용한 변화입니다. - -블록 기반 테마에서 플레이스홀더 텍스트와 실제 콘텐츠 간의 차이도 더 쉽게 구분할 수 있습니다. - -마지막으로, 사이트의 인기 섹션에 더 빨리 도달할 수 있도록 내 사이트의 탐색 기능을 업데이트했습니다. (이러한 단축키가 마음에 들지 않나요? 걱정하지 마세요. 원하는 대로 개인 설정할 수 있습니다.) +- 이제는 끊어진 링크를 이용하지 않고 X의 URL을 임베드할 수 있습니다. 굳이 말씀드리자면 정말로 멋집니다. +- 유효하지 않은 미디어 URL을 사용할 때 충돌하지 않고 앱에 오류 메시지가 표시됩니다. 좋아졌죠? +- 이제는 공동 작업자가 검토용 글을 제출할 때 올바른 팝업이 표시됩니다. 더 있습니다. +- 관리자가 아닌 사용자가 자신의 사이트에 대한 플러그인 메뉴를 볼 수 있었던 문제를 해결했습니다. 눈에서 멀어지면 마음에서도 멀어집니다. +- 블록 편집기에서 블록 내에 너무 많은 블록을 중첩할 때 더는 앱이 충돌하지 않습니다...블록 내에서 말입니다...이해되시나요? 맘껏 이용하세요. diff --git a/fastlane/jetpack_metadata/nl-NL/release_notes.txt b/fastlane/jetpack_metadata/nl-NL/release_notes.txt index fd771f55577d..df0423038630 100644 --- a/fastlane/jetpack_metadata/nl-NL/release_notes.txt +++ b/fastlane/jetpack_metadata/nl-NL/release_notes.txt @@ -1,7 +1,7 @@ -Widgets voor schermvergrendeling zijn nu beschikbaar in Jetpack zodat je je site-statistieken kan controleren zonder je telefoon te hoeven ontgrendelen. En bedenk, bij veel kracht hoort veel efficiëntie. Of zoiets. +We hebben wat bugs geplet! (Het ging wat netter dan dat klinkt.) -We hebben een aanpassing gedaan aan de manier waarop meldingen verschijnen als je media vanaf een URL invoegt in blokken. Dat hebben we goed voor elkaar. - -Het is ook eenvoudiger om het verschil te zien tussen placeholdertekst en daadwerkelijke content in thema's op blokbasis. - -Ten slotte hebben we de navigatie in Mijn site bijgewerkt waardoor je sneller op populaire gedeelten van de site komt. (Vind je deze snellere routes niets? Geen zorgen, je kan ze naar hartenlust aanpassen.) +- Je kan nu URL's van X insluiten zonder dat de link breekt. X-cellent, al zeggen we het zelf. +- En nu we het toch over links hebben: wanneer je een ongeldige media-URL gebruikt, geeft de app nu een foutmelding weer in plaats van te crashen. Zoveel beter, toch? +- Bijdragers zien nu de juiste pop-up wanneer ze een bericht voor beoordeling indienen. Gelukkig! +- We hebben een probleem opgelost waarbij gebruikers die geen beheerder zijn het pluginmenu konden zien voor hun site. Uit het oog, uit het hart. +- In de blokeditor crasht de app niet meer wanneer je te veel blokken in blokken… in blokken… nest, je snapt het wel. Wat nou, Inception. diff --git a/fastlane/jetpack_metadata/pt-BR/release_notes.txt b/fastlane/jetpack_metadata/pt-BR/release_notes.txt index b3c960e281d5..1c5b0109b30e 100644 --- a/fastlane/jetpack_metadata/pt-BR/release_notes.txt +++ b/fastlane/jetpack_metadata/pt-BR/release_notes.txt @@ -1,7 +1,7 @@ -Os widgets na tela de bloqueio agora estão disponíveis no Jetpack. Assim, você verifica as estatísticas do seu site sem precisar desbloquear o celular. Lembre-se, com grandes poderes vem grande eficiência. Ou algo parecido. +Estamos eliminando os bugs! (Estava bem mais limpo do que parecia.) -Mudamos a forma como os alertas aparecem ao inserir mídia em blocos a partir de uma URL. Agora temos isso ao nosso favor, o que é bom. - -Também ficou mais fácil diferenciar o texto de espaço reservado do conteúdo nos temas com bloco. - -Por fim, atualizamos a navegação em Meu site para que você acesse seções populares do site mais rapidamente. (Não curte esses atalhos? Não se preocupe, você pode personalizá-los do seu jeito). +- Agora você pode incorporar URLs do X sem um link quebrado. Caso nos perguntem, é simplesmente X-traordinária. +- Falando em links: quando você usa uma URL de mídia inválida, agora o aplicativo vai exibir uma mensagem de erro em vez de travar. Melhor, não? +- Os colaboradores agora vão ver o pop-up certo quando enviarem posts para avaliação. Ufa! +- Corrigimos um problema em que usuários não administradores podiam ver o menu de plugins de seus sites. O que os olhos não veem, o coração não sente. +- No editor de blocos, o aplicativo não vai mais travar quando você aninhar muitos blocos dentro de blocos... dentro de blocos... a ideia é essa. Toma isso, Inception. diff --git a/fastlane/jetpack_metadata/ru/release_notes.txt b/fastlane/jetpack_metadata/ru/release_notes.txt index 7b30bec63609..e9b5804cff12 100644 --- a/fastlane/jetpack_metadata/ru/release_notes.txt +++ b/fastlane/jetpack_metadata/ru/release_notes.txt @@ -1,7 +1,7 @@ -Виджеты экрана блокировки теперь доступны в Jetpack, и вы можете проверять статистику вашего сайта без разблокировки смартфона. Просто учтите: чем выше мощность, тем выше эффективность. Или что-то в этом роде. +Мы беспощадно ликвидируем ошибки! (На самом деле всё гораздо спокойнее.) -Мы изменили способ вывода на экран уведомлений при вставке медиафайлов из URL-адресов в блоки. Нам удалось сделать то, что мы хотели, и это здорово. - -Кроме того, в темах на основе блоков стало проще отличать текст-заполнитель от настоящего контента. - -И наконец, мы обновили навигацию в разделе «Мой сайт», чтобы можно было быстрее переходить к популярным страницам сайта. (Вам не по душе эти комбинации клавиш? Не волнуйтесь, вы сможете отредактировать их по вашему вкусу.) +– Теперь можно вставлять URL-адреса из X без риска получить неработающую ссылку. ИКС-ключительно полезная функция! +– И кстати, о ссылках: при вставке недействительного URL-адреса медиафайла приложение теперь выдаёт сообщение об ошибке, вместо того чтобы аварийно завершать работу. Так гораздо лучше, правда? +– При отправке записи на модерацию участники отныне видят правильное всплывающее сообщение. Наконец-то. +– Мы исправили ошибку, из-за которой меню плагинов сайта могли увидеть пользователи без прав администратора. С глаз долой — из сердца вон. +– Если вы в редакторе блоков вкладываете одни блоки в другие, а другие — в третьи… И так много, много, много раз… В общем, вы поняли. Так вот, теперь приложение не станет аварийно завершать работу в этом случае. Как вам такое? diff --git a/fastlane/jetpack_metadata/sv/release_notes.txt b/fastlane/jetpack_metadata/sv/release_notes.txt index b5aaa06a5d30..a76b02a40e47 100644 --- a/fastlane/jetpack_metadata/sv/release_notes.txt +++ b/fastlane/jetpack_metadata/sv/release_notes.txt @@ -1,7 +1,7 @@ -Låsskärmswidgetar är nu tillgängliga för Jetpack, så att du kan kontrollera din webbplatsstatistik utan att låsa upp din telefon. Kom ihåg, god kraft medför god effektivitet. Eller något i den stilen. +Vi har bekämpat buggar! (Det var mycket renare än det låter.) -Vi har ändrat hur aviseringar visas när du infogar media i block från en URL. Det känns bra att det är ordnat. - -Det är också enklare att se skillnaden mellan platshållartext och faktiskt innehåll i blockbaserade teman. - -Slutligen har vi uppdaterat navigeringen för Min webbplats, så att du kan nå populära webbplatssektioner snabbare. (Gillar du inte dessa genvägar? Oroa dig inte, du kan anpassa dem efter eget tycke.) +- Nu kan du bädda in URL:er från X utan att länken bryts. Ganska X-cellent, om du frågar oss. +- På tal om länkar – när du använder en ogiltig media-URL kommer appen nu att visa ett felmeddelande istället för att krascha. Bättre, eller hur? +- Bidragslämnare ser nu rätt popup-fönster när de skickar in inlägg för granskning. Skönt. +- Vi har åtgärdat ett problem där användare som inte är administratörer kunde se tilläggsmenyn för sin webbplats. Ur sikte, ur sinne. +- Appen kraschar inte längre i blockredigeraren när du placerar för många block inuti block... inuti block... ja, du fattar. Där fick du, Inception. diff --git a/fastlane/jetpack_metadata/tr/release_notes.txt b/fastlane/jetpack_metadata/tr/release_notes.txt index 5b473d365ea6..fc5017829f21 100644 --- a/fastlane/jetpack_metadata/tr/release_notes.txt +++ b/fastlane/jetpack_metadata/tr/release_notes.txt @@ -1,7 +1,7 @@ -Kilit ekranı bileşenleri bundan sonra Jetpack'te kullanılabilir. Böylece telefonunuzun kilidini açmadan site istatistiklerinizi kontrol edebilirsiniz. Ama unutmayın, büyük güç büyük verimlilik getirir. Ya da benzer bir şeydi. +Hataları ezip geçiyoruz! (Göründüğünden daha merhametli davranıyoruz.) -Bir URL'den bloklara ortam eklerken uyarıların görünme şeklini değiştirdik. Bu bizim için iyi bir şey. - -Ayrıca, blok tabanlı temalarda yer tutucu metin ile gerçek içerik arasındaki farkı anlamak da artık daha kolay. - -Son olarak, sitenin popüler bölümlerine daha hızlı ulaşabilmeniz için Sitem'deki gezinme deneyimini güncelledik. (Bu kısayolları sevmiyor musunuz? Üzülmeyin, onları istediğiniz şekilde kişiselleştirebilirsiniz.) +- Artık X'ten URL'leri gömerken bozuk bağlantı almayacaksınız. Bize sorarsanız, oldukça mükemmel. +- Bağlantılardan bahsetmişken, geçersiz bir ortam URL'si kullandığınızda, uygulama artık çökmeyecek ve bunun yerine bir hata mesajı görüntüleyecek. Daha iyi, değil mi? +- Katkıda bulunanlar artık gönderilerini incelemeye gönderirken doğru açılır pencereyi görecekler. Harika! +- Yönetici olmayan kullanıcıların kendi siteleri için eklenti menüsünü görebildiği bir sorunu çözdük. Gözden uzak olan gönülden de uzak olur. +- Blok düzenleyicide, blokların içine çok fazla blok yerleştirdiğinizde uygulama artık çökmeyecek. Inception'a benziyor. diff --git a/fastlane/jetpack_metadata/zh-Hans/release_notes.txt b/fastlane/jetpack_metadata/zh-Hans/release_notes.txt index 936fa61649d8..82e0d92dab57 100644 --- a/fastlane/jetpack_metadata/zh-Hans/release_notes.txt +++ b/fastlane/jetpack_metadata/zh-Hans/release_notes.txt @@ -1,7 +1,7 @@ -Jetpack 现在支持使用锁屏小工具,这样您无需解锁手机即可查看站点统计信息。 请记住,更强大的功能将带来更高的效率。 或者类似的好处。 +我们一直在修复错误! (实际情况比听起来更干净利落。) -我们更改了从 URL 中将媒体插入区块时相关提示的呈现方式。 这赋予了我们相应的优势,很不错。 - -也更容易区分基于区块的主题中的占位符文本和实际内容。 - -最后,我们更新“我的站点”中的导航,这样您就可以更快到达网站的热门版块。 (不喜欢这些快捷键? 别担心,您可以尽情打造个性化的快捷键。) +- 您现在可以从 X 嵌入 URL,而不会出现链接中断的情况。 我的评价是,这太棒了。 +- 说到链接 — 若您使用的媒体 URL 无效,应用程序会显示一条错误消息,而不会崩溃。 更优化了,对吗? +- 现在,贡献者在提交文章供审核时将看到正确的弹窗。 真是太好了。 +- 我们修复了非管理员用户可以看到其站点插件菜单的问题。 眼不见,心不烦。 +- 当您通过区块编辑器在区块中层层嵌套了过多区块时,应用程序不会再崩溃…明白了吧。 接招吧。 diff --git a/fastlane/jetpack_metadata/zh-Hant/release_notes.txt b/fastlane/jetpack_metadata/zh-Hant/release_notes.txt index 6f95f2501cab..837538cf77dc 100644 --- a/fastlane/jetpack_metadata/zh-Hant/release_notes.txt +++ b/fastlane/jetpack_metadata/zh-Hant/release_notes.txt @@ -1,7 +1,7 @@ -鎖定螢幕小工具目前可在 Jetpack 上使用,因此你無須解鎖手機,即可查看網站統計資料。 切記,出色工能造就絕佳效率。 也可帶來其他好處。 +我們殲滅了多項錯誤! (備註:這只是比喻,實際上沒這麼暴力。) -我們改變了你從 URL 將媒體插入區塊時,警示出現的方式。 因此我們在這方面獲得優勢,十分有幫助。 - -在區塊型佈景主題中,同樣也更容易分辨出預留位置文字與實際內容。 - -最後,我們更新了「我的網站」中的「導覽」,因此你可以更快前往網站中的熱門區塊。 (不喜歡這些捷徑嗎? 別擔心,你可以盡情自訂這些內容。) +- 現在起,你可以從 X 嵌入 URL,但無須擔心連結損壞。 如果想知道我們的意見,我們會說:真是 X 級的厲害。 +- 說到連結,從現在開始,如果你使用了無效的媒體 URL,應用程式會顯示錯誤訊息,不會再直接當機。 更好用了,對吧? +- 現在起,撰寫人員將文章提交送審時,可以看到正確的快顯視窗。 終於搞定了。 +- 我們修正了問題,不具管理員身分的使用者不會再看到網站的外掛程式選單了。 眼不見為淨。 +- 在區塊編輯器中,即使將大量區塊嵌入到區塊...和區塊...裡面 (不難懂吧),應用程式也不會再當機了。 沒問題了,那就全面啟動。 From 5e87dd7bf88c29413cc94f59400bff74e71fc649 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 29 Aug 2023 12:48:06 +1000 Subject: [PATCH 36/78] Manually fix `ro` string that didn't pass linting This is a replay of 8b451114a3d364a34569285972b2d8301e9e19b2. Evidently, the entry in GlotPress has yet to be approved despite it being there for almost two weeks... Comment from 8b451114a3d364a34569285972b2d8301e9e19b2 below: I suggested a fix in GlotPress and tried to approve it using the admin account, but got an error. I'll follow up this internally, but in the meantime I fixed the translation manually to complete the beta deployment. https://translate.wordpress.org/projects/apps/ios/dev/ro/default/?filters%5Boriginal_id%5D=16177110&filters%5Bstatus%5D=either&filters%5Btranslation_id%5D=107327707 --- WordPress/Resources/ro.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Resources/ro.lproj/Localizable.strings b/WordPress/Resources/ro.lproj/Localizable.strings index 6bd4d80c6157..197b0290ecae 100644 --- a/WordPress/Resources/ro.lproj/Localizable.strings +++ b/WordPress/Resources/ro.lproj/Localizable.strings @@ -11060,7 +11060,7 @@ Example: given a notice format "Following %@" and empty site name, this will be "stats.insights.totalLikes.guideText.plural" = "Ultimul tău articol %1$@ a avut %2$@ aprecieri."; /* A hint shown to the user in stats informing the user that one of their posts has received a like. The %1$@ placeholder will be replaced with the title of a post, and the %2$@ will be replaced by the numeral one. */ -"stats.insights.totalLikes.guideText.singular" = "Ultimul tău articol %1$@ a avut o apreciere."; +"stats.insights.totalLikes.guideText.singular" = "Ultimul tău articol %1$@ a avut %2$@ aprecieri."; /* Dismiss the AlertView */ "stockPhotos.strings.dismiss" = "Refuză"; From 42eb444bade8e59c2c873ff93d33000f54930381 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Fri, 13 Oct 2023 11:40:18 +1100 Subject: [PATCH 37/78] Bump version number --- config/Version.internal.xcconfig | 2 +- config/Version.public.xcconfig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/Version.internal.xcconfig b/config/Version.internal.xcconfig index a260ae4e31e2..a07aab0d0e17 100644 --- a/config/Version.internal.xcconfig +++ b/config/Version.internal.xcconfig @@ -1,4 +1,4 @@ VERSION_SHORT=23.4 // Internal long version example: VERSION_LONG=9.9.0.20180423 -VERSION_LONG=23.4.0.20231002 +VERSION_LONG=23.4.0.20231013 diff --git a/config/Version.public.xcconfig b/config/Version.public.xcconfig index c356b0b1a570..ec073dca7b43 100644 --- a/config/Version.public.xcconfig +++ b/config/Version.public.xcconfig @@ -1,4 +1,4 @@ VERSION_SHORT=23.4 // Public long version example: VERSION_LONG=9.9.0.0 -VERSION_LONG=23.4.0.0 +VERSION_LONG=23.4.0.1 From 7a9677cb63573e53c387f96b5c79419a65bfed74 Mon Sep 17 00:00:00 2001 From: jhnstn Date: Thu, 12 Oct 2023 20:59:03 -0400 Subject: [PATCH 38/78] Update podfile lock --- Podfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index c8353d9b9cbe..b1cce1bbe63e 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -111,7 +111,7 @@ DEPENDENCIES: - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) - Gridicons (~> 1.2) - - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-b559166c87fbd69190eb33f9a3b340754d1a7c4d.podspec`) + - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.106.0.podspec`) - JTAppleCalendar (~> 8.0.5) - Kanvas (~> 1.4.4) - MediaEditor (>= 1.2.2, ~> 1.2) @@ -184,7 +184,7 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-b559166c87fbd69190eb33f9a3b340754d1a7c4d.podspec + :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.106.0.podspec CHECKOUT OPTIONS: FSInteractiveMap: @@ -207,7 +207,7 @@ SPEC CHECKSUMS: FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d - Gutenberg: 3b1386da1a29d60c3c84c4d7c1e04d0b482f3244 + Gutenberg: 46edef6239e4fa8c032aee57f67c9a258edf0cc1 JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 Kanvas: cc027f8058de881a4ae2b5aa5f05037b6d054d08 MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae From 3d6cd198fd93031ec09fea99462f1a2889a1ced6 Mon Sep 17 00:00:00 2001 From: Chris McGraw <2454408+wargcm@users.noreply.github.com> Date: Thu, 12 Oct 2023 21:23:53 -0400 Subject: [PATCH 39/78] Update reader button styles --- .../Views/ReaderDetailNewHeaderView.swift | 96 +------------------ .../Reader/ReaderFollowButton.swift | 37 +++++++ .../ReaderFollowedSitesViewController.swift | 24 ++++- .../ReaderRecommendedSiteCardCell.swift | 7 +- .../Reader/ReaderRecommendedSiteCardCell.xib | 8 +- .../Reader/ReaderSiteHeaderView.swift | 49 +--------- .../Reader/WPStyleGuide+Reader.swift | 26 ++++- WordPress/WordPress.xcodeproj/project.pbxproj | 22 +++-- 8 files changed, 111 insertions(+), 158 deletions(-) create mode 100644 WordPress/Classes/ViewRelated/Reader/ReaderFollowButton.swift diff --git a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailNewHeaderView.swift b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailNewHeaderView.swift index d0c04c783b83..f99edfbe3120 100644 --- a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailNewHeaderView.swift +++ b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailNewHeaderView.swift @@ -236,7 +236,10 @@ struct ReaderDetailNewHeaderView: View { HStack(spacing: 8.0) { authorStack Spacer() - followButton(isPhone: WPDeviceIdentification.isiPhone()) + ReaderFollowButton(isFollowing: viewModel.isFollowingSite, + isEnabled: viewModel.isFollowButtonInteractive) { + viewModel.didTapFollowButton() + } } } @@ -339,42 +342,6 @@ struct ReaderDetailNewHeaderView: View { .font(.footnote) .foregroundColor(Color(.secondaryLabel)) } - - /// TODO: Update when the Follow buttons are updated. - @ViewBuilder - private func followButton(isPhone: Bool = true) -> some View { - let style: LegacyFollowButtonStyle = viewModel.isFollowingSite ? .following : .follow - - Button { - viewModel.didTapFollowButton() - } label: { - if isPhone { - // only shows the icon as the button. - Image(uiImage: .gridicon(style.gridiconType, size: style.iconButtonSize)) - .tint(style.tintColor) - } else { - // shows both the icon and the label. - Label { - Text(style.buttonLabel) - .font(.callout) - .fontWeight(style.fontWeight) - } icon: { - Image(uiImage: .gridicon(style.gridiconType, size: style.labelIconSize).imageWithTintColor(style.labelIconTintColor)!) - } - .padding(style.buttonPadding) - .background(style.labelBackgroundColor) - .tint(style.labelTintColor) - .clipShape(RoundedRectangle(cornerRadius: style.cornerRadius)) - .overlay { - RoundedRectangle(cornerRadius: style.cornerRadius) - .stroke(style.borderColor, lineWidth: style.borderWidth) - } - } - } - .accessibilityLabel(style.buttonLabel) - .accessibilityHint(style.accessibilityHint) - .disabled(!viewModel.isFollowButtonInteractive) - } } // MARK: Private Helpers @@ -386,61 +353,6 @@ fileprivate extension ReaderDetailNewHeaderView { static let authorImageLength: CGFloat = 20.0 } - /// "Legacy" follow button styling. - /// Mostly taken from `WPStyleGuide+Reader`'s `applyReaderFollowButtonStyle` - /// - /// TODO: Remove this when the new Follow buttons are added. - struct LegacyFollowButtonStyle { - // Style for the Follow button - static let follow = LegacyFollowButtonStyle( - gridiconType: .readerFollow, - tintColor: Color(uiColor: .primary), - fontWeight: .semibold, - labelBackgroundColor: Color(uiColor: WPStyleGuide.FollowButton.Style.followBackgroundColor), - labelTintColor: Color(uiColor: WPStyleGuide.FollowButton.Style.followTextColor), - labelIconTintColor: WPStyleGuide.FollowButton.Style.followTextColor, - borderWidth: 0.0, - buttonLabel: WPStyleGuide.FollowButton.Text.followStringForDisplay, - accessibilityHint: WPStyleGuide.FollowButton.Text.accessibilityHint - ) - - // Style for the Following button - static let following = LegacyFollowButtonStyle( - gridiconType: .readerFollowing, - tintColor: Color(uiColor: .gray(.shade20)), - fontWeight: .regular, - labelBackgroundColor: Color(uiColor: WPStyleGuide.FollowButton.Style.followingBackgroundColor), - labelTintColor: Color(uiColor: WPStyleGuide.FollowButton.Style.followingIconColor), - labelIconTintColor: WPStyleGuide.FollowButton.Style.followingTextColor, - borderWidth: 1.0, - buttonLabel: WPStyleGuide.FollowButton.Text.followingStringForDisplay, - accessibilityHint: WPStyleGuide.FollowButton.Text.accessibilityHint - ) - - let gridiconType: GridiconType - - // iPhone-specific styling - let iconButtonSize = CGSize(width: 24, height: 24) - let tintColor: Color - let iconBackgroundColor: Color = .clear - - // iPad-specific styling - let font: Font = .callout - let fontWeight: Font.Weight - let buttonPadding = EdgeInsets(top: 6.0, leading: 12.0, bottom: 6.0, trailing: 12.0) - let labelBackgroundColor: Color - let labelTintColor: Color - let labelIconTintColor: UIColor - let cornerRadius = 4.0 - let borderColor = Color(uiColor: .primaryButtonBorder) - let borderWidth: CGFloat - let labelIconSize = CGSize(width: WPStyleGuide.fontSizeForTextStyle(.callout), - height: WPStyleGuide.fontSizeForTextStyle(.callout)) - - // localization-related - let buttonLabel: String - let accessibilityHint: String - } } // MARK: - TopicCollectionView UIViewRepresentable Wrapper diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderFollowButton.swift b/WordPress/Classes/ViewRelated/Reader/ReaderFollowButton.swift new file mode 100644 index 000000000000..5bae130c344e --- /dev/null +++ b/WordPress/Classes/ViewRelated/Reader/ReaderFollowButton.swift @@ -0,0 +1,37 @@ +import SwiftUI + +struct ReaderFollowButton: View { + + let isFollowing: Bool + let isEnabled: Bool + let action: () -> Void + + var body: some View { + if isFollowing { + button.overlay( + RoundedRectangle(cornerRadius: 5) + .stroke(Color(UIColor.separator), lineWidth: 1) + ) + } else { + button + } + } + + private var button: some View { + let text = isFollowing ? WPStyleGuide.FollowButton.Text.followingStringForDisplay : WPStyleGuide.FollowButton.Text.followStringForDisplay + let textColor: Color = isFollowing ? .secondary : Color(UIColor.invertedLabel) + let backgroundColor: Color = isFollowing ? .clear : Color(UIColor.label) + return Button { + action() + } label: { + Text(text) + .foregroundColor(textColor) + .font(.subheadline) + } + .disabled(!isEnabled) + .padding(.horizontal, 24.0) + .padding(.vertical, 8.0) + .background(backgroundColor) + .cornerRadius(5.0) + } +} diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderFollowedSitesViewController.swift b/WordPress/Classes/ViewRelated/Reader/ReaderFollowedSitesViewController.swift index 7bacde97f10e..7c5bcba0e552 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderFollowedSitesViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/ReaderFollowedSitesViewController.swift @@ -326,6 +326,24 @@ class ReaderFollowedSitesViewController: UIViewController, UIViewControllerResto private func post(_ notice: Notice) { ActionDispatcher.dispatch(NoticeAction.post(notice)) } + + private func followButton(title: String) -> UIButton { + if FeatureFlag.readerImprovements.enabled { + let button = UIButton() + button.isSelected = true + WPStyleGuide.applyReaderFollowButtonStyle(button) + button.tintColor = .clear + button.sizeToFit() + return button + } else { + let button = UIButton(frame: CGRect(x: 0, y: 0, width: 40, height: 40)) + button.setImage(UIImage.gridicon(.readerFollowing), for: .normal) + button.imageView?.tintColor = UIColor.success + let unfollowSiteString = NSLocalizedString("Unfollow %@", comment: "Accessibility label for unfollowing a site") + button.accessibilityLabel = String(format: unfollowSiteString, title) + return button + } + } } // MARK: - No Results Handling @@ -420,12 +438,8 @@ extension ReaderFollowedSitesViewController: WPTableViewHandlerDelegate { cell.imageView?.backgroundColor = UIColor.listForeground if showsAccessoryFollowButtons { - let button = UIButton(frame: CGRect(x: 0, y: 0, width: 40, height: 40)) - button.setImage(UIImage.gridicon(.readerFollowing), for: .normal) - button.imageView?.tintColor = UIColor.success + let button = followButton(title: site.title) button.addTarget(self, action: #selector(tappedAccessory(_:)), for: .touchUpInside) - let unfollowSiteString = NSLocalizedString("Unfollow %@", comment: "Accessibility label for unfollowing a site") - button.accessibilityLabel = String(format: unfollowSiteString, site.title) cell.accessoryView = button cell.accessibilityElements = [button] } else { diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderRecommendedSiteCardCell.swift b/WordPress/Classes/ViewRelated/Reader/ReaderRecommendedSiteCardCell.swift index 3c30c5a570fe..049f21a2aa44 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderRecommendedSiteCardCell.swift +++ b/WordPress/Classes/ViewRelated/Reader/ReaderRecommendedSiteCardCell.swift @@ -54,12 +54,13 @@ class ReaderRecommendedSiteCardCell: UITableViewCell { } let isCompact = traitCollection.horizontalSizeClass == .compact + let showLargeButton = !isCompact || FeatureFlag.readerImprovements.enabled - followButton.isHidden = !isCompact - iPadFollowButton.isHidden = isCompact + followButton.isHidden = showLargeButton + iPadFollowButton.isHidden = !showLargeButton // Update the info trailing constraint to prevent clipping - let button = isCompact ? followButton : iPadFollowButton + let button = showLargeButton ? iPadFollowButton : followButton let width = button?.frame.size.width ?? 0 infoTrailingConstraint.constant = width + Constants.buttonMargin } diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderRecommendedSiteCardCell.xib b/WordPress/Classes/ViewRelated/Reader/ReaderRecommendedSiteCardCell.xib index a50408da0c08..2a8a46188b1b 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderRecommendedSiteCardCell.xib +++ b/WordPress/Classes/ViewRelated/Reader/ReaderRecommendedSiteCardCell.xib @@ -1,9 +1,9 @@ - + - + @@ -71,9 +71,9 @@ -