diff --git a/.buildkite/commands/release-build.sh b/.buildkite/commands/release-build.sh index 8736f468b00..4c2ac2bf5e9 100755 --- a/.buildkite/commands/release-build.sh +++ b/.buildkite/commands/release-build.sh @@ -22,5 +22,6 @@ bundle exec fastlane run configure_apply echo "--- :hammer_and_wrench: Building" bundle exec fastlane build_and_upload_itc \ skip_confirm:true \ + skip_prechecks:true \ create_release:true \ beta_release:${1:-true} # use first call param, default to true for safety diff --git a/.buildkite/commands/run-ui-tests.sh b/.buildkite/commands/run-ui-tests.sh index e3f72603595..4f7876fb6aa 100755 --- a/.buildkite/commands/run-ui-tests.sh +++ b/.buildkite/commands/run-ui-tests.sh @@ -35,7 +35,18 @@ install_cocoapods echo "--- 🧪 Testing" xcrun simctl list >> /dev/null rake mocks & +set +e bundle exec fastlane test_without_building name:"$TEST_NAME" device:"$DEVICE" ios_version:"$IOS_VERSION" +TESTS_EXIT_STATUS=$? +set -e + +if [[ "$TESTS_EXIT_STATUS" -ne 0 ]]; then + # Keep the (otherwise collapsed) current "Testing" section open in Buildkite logs on error. See https://buildkite.com/docs/pipelines/managing-log-output#collapsing-output + echo "^^^ +++" + echo "UI Tests failed!" +fi echo "--- 📦 Zipping test results" cd fastlane/test_output/ && zip -rq WooCommerce.xcresult.zip WooCommerce.xcresult && cd - + +exit $TESTS_EXIT_STATUS diff --git a/.buildkite/commands/run-unit-tests.sh b/.buildkite/commands/run-unit-tests.sh index 2a76feb75e3..2331bb4383d 100755 --- a/.buildkite/commands/run-unit-tests.sh +++ b/.buildkite/commands/run-unit-tests.sh @@ -16,7 +16,18 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- 🧪 Testing" +set +e bundle exec fastlane test_without_building name:UnitTests +TESTS_EXIT_STATUS=$? +set -e + +if [[ "$TESTS_EXIT_STATUS" -ne 0 ]]; then + # Keep the (otherwise collapsed) current "Testing" section open in Buildkite logs on error. See https://buildkite.com/docs/pipelines/managing-log-output#collapsing-output + echo "^^^ +++" + echo "Unit Tests failed!" +fi echo "--- 📦 Zipping test results" cd fastlane/test_output/ && zip -rq WooCommerce.xcresult.zip WooCommerce.xcresult && cd - + +exit $TESTS_EXIT_STATUS diff --git a/CHANGELOG.md b/CHANGELOG.md index 6316b378e90..f4c8c94f3b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ Contains editorialized release notes. Raw release notes should go into `RELEASE-NOTES.txt`. --> +## 10.2 +Even though this release doesn’t have any new features, we still put a lot of love into it! You can now enable or disable the option to take card or cash payments on collection or delivery. We also added a new Help Center page that makes it easier for you to login to the app. + ## 10.1 This release has several fixes that makes it easier for you to take payments from the app. We’ve also added a new Help Center FAQ page that makes it easier for you to login to the app. Please continue to send us feedback – we are listening! diff --git a/Experiments/Experiments/DefaultFeatureFlagService.swift b/Experiments/Experiments/DefaultFeatureFlagService.swift index d069011a3bc..b055beff461 100644 --- a/Experiments/Experiments/DefaultFeatureFlagService.swift +++ b/Experiments/Experiments/DefaultFeatureFlagService.swift @@ -9,8 +9,6 @@ public struct DefaultFeatureFlagService: FeatureFlagService { return buildConfig == .localDeveloper || buildConfig == .alpha case .jetpackConnectionPackageSupport: return true - case .hubMenu: - return true case .couponView: return true case .productSKUInputScanner: @@ -49,6 +47,8 @@ public struct DefaultFeatureFlagService: FeatureFlagService { return true case .promptToEnableCodInIppOnboarding: return true + case .storeWidgets: + return buildConfig == .localDeveloper || buildConfig == .alpha default: return true } diff --git a/Experiments/Experiments/FeatureFlag.swift b/Experiments/Experiments/FeatureFlag.swift index a314c7475da..cf5cf04ab21 100644 --- a/Experiments/Experiments/FeatureFlag.swift +++ b/Experiments/Experiments/FeatureFlag.swift @@ -18,10 +18,6 @@ public enum FeatureFlag: Int { /// case jetpackConnectionPackageSupport - /// Display the new tab "Menu" in the tab bar. - /// - case hubMenu - /// Displays the option to view coupons /// case couponView @@ -101,4 +97,8 @@ public enum FeatureFlag: Int { /// Whether to include the Cash on Delivery enable step in In-Person Payment onboarding /// case promptToEnableCodInIppOnboarding + + /// Enables home screen store widgets. + /// + case storeWidgets } diff --git a/Gemfile.lock b/Gemfile.lock index c1bc8e911e7..a8790d2fe7e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -17,20 +17,20 @@ GEM ast (2.4.2) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.579.0) - aws-sdk-core (3.130.1) + aws-partitions (1.621.0) + aws-sdk-core (3.134.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.525.0) aws-sigv4 (~> 1.1) - jmespath (~> 1.0) - aws-sdk-kms (1.56.0) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.58.0) aws-sdk-core (~> 3, >= 3.127.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.113.0) + aws-sdk-s3 (1.114.0) aws-sdk-core (~> 3, >= 3.127.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.4) - aws-sigv4 (1.5.0) + aws-sigv4 (1.5.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) bigdecimal (1.4.4) @@ -89,13 +89,13 @@ GEM rake (>= 12.0.0, < 14.0.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.6) + dotenv (2.8.1) emoji_regex (3.2.3) escape (0.0.4) ethon (0.15.0) ffi (>= 1.15.0) - excon (0.92.2) - faraday (1.10.1) + excon (0.92.4) + faraday (1.10.2) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -124,7 +124,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.2.6) - fastlane (2.205.2) + fastlane (2.209.1) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -188,8 +188,8 @@ GEM git (1.12.0) addressable (~> 2.8) rchardet (~> 1.8) - google-apis-androidpublisher_v3 (0.19.0) - google-apis-core (>= 0.4, < 2.a) + google-apis-androidpublisher_v3 (0.25.0) + google-apis-core (>= 0.7, < 2.a) google-apis-core (0.7.0) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) @@ -201,8 +201,8 @@ GEM webrick google-apis-iamcredentials_v1 (0.13.0) google-apis-core (>= 0.7, < 2.a) - google-apis-playcustomapp_v1 (0.7.0) - google-apis-core (>= 0.4, < 2.a) + google-apis-playcustomapp_v1 (0.10.0) + google-apis-core (>= 0.7, < 2.a) google-apis-storage_v1 (0.17.0) google-apis-core (>= 0.7, < 2.a) google-cloud-core (1.6.0) @@ -227,13 +227,13 @@ GEM os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.4) + http-cookie (1.0.5) domain_name (~> 0.5) httpclient (2.8.3) i18n (1.12.0) concurrent-ruby (~> 1.0) jmespath (1.6.1) - json (2.6.1) + json (2.6.2) jsonlint (0.3.0) oj (~> 3) optimist (~> 3) @@ -330,14 +330,14 @@ GEM uber (0.1.0) unf (0.1.4) unf_ext - unf_ext (0.0.8.1) + unf_ext (0.0.8.2) unicode-display_width (2.1.0) webrick (1.7.0) word_wrap (1.0.0) xcode-install (2.8.0) claide (>= 0.9.1, < 1.1.0) fastlane (>= 2.1.0, < 3.0.0) - xcodeproj (1.21.0) + xcodeproj (1.22.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) @@ -371,4 +371,4 @@ DEPENDENCIES xcpretty-travis-formatter BUNDLED WITH - 2.3.8 + 2.3.20 diff --git a/Podfile b/Podfile index 134b2547fc3..8b8efb1ab3b 100644 --- a/Podfile +++ b/Podfile @@ -26,6 +26,13 @@ def aztec pod 'WordPress-Editor-iOS', '~> 1.11.0' end +def tracks + pod 'Automattic-Tracks-iOS', '~> 0.12.0' + # pod 'Automattic-Tracks-iOS', :git => 'https://github.com/Automattic/Automattic-Tracks-iOS.git', :branch => '' + # pod 'Automattic-Tracks-iOS', :git => 'https://github.com/Automattic/Automattic-Tracks-iOS.git', :commit => '' + # pod 'Automattic-Tracks-iOS', :path => '../Automattic-Tracks-iOS' +end + # Main Target! # ============ # @@ -36,10 +43,7 @@ target 'WooCommerce' do # ==================== # - pod 'Automattic-Tracks-iOS', '~> 0.12.0-beta.2' - # pod 'Automattic-Tracks-iOS', :git => 'https://github.com/Automattic/Automattic-Tracks-iOS.git', :branch => '' - # pod 'Automattic-Tracks-iOS', :git => 'https://github.com/Automattic/Automattic-Tracks-iOS.git', :commit => '' - # pod 'Automattic-Tracks-iOS', :path => '../Automattic-Tracks-iOS' + tracks pod 'Gridicons', '~> 1.2.0' @@ -79,6 +83,14 @@ target 'WooCommerce' do end end +# StoreWidget Target +# ========== +# +target 'StoreWidgetsExtension' do + project 'WooCommerce/WooCommerce.xcodeproj' + tracks +end + # Yosemite Layer: # =============== # @@ -229,10 +241,7 @@ end # ================== # def experiments_pods - pod 'Automattic-Tracks-iOS', '~> 0.12.0-beta.2' - # pod 'Automattic-Tracks-iOS', :git => 'https://github.com/Automattic/Automattic-Tracks-iOS.git', :branch => '' - # pod 'Automattic-Tracks-iOS', :git => 'https://github.com/Automattic/Automattic-Tracks-iOS.git', :commit => '7e11e93d6205f51c09aad5d59f4e0679a796a2ef' - # pod 'Automattic-Tracks-iOS', :path => '../Automattic-Tracks-iOS' + tracks pod 'CocoaLumberjack', '~> 3.7.4' pod 'CocoaLumberjack/Swift', '~> 3.7.4' end diff --git a/Podfile.lock b/Podfile.lock index 8d8544419a8..5a2ce26af2f 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -6,7 +6,7 @@ PODS: - AppAuth/Core (1.5.0) - AppAuth/ExternalUserAgent (1.5.0): - AppAuth/Core - - Automattic-Tracks-iOS (0.12.0-beta.2): + - Automattic-Tracks-iOS (0.12.0): - Sentry (~> 6) - Sodium (>= 0.9.1) - UIDeviceIdentifier (~> 2.0) @@ -83,7 +83,7 @@ PODS: DEPENDENCIES: - Alamofire (~> 4.8) - - Automattic-Tracks-iOS (~> 0.12.0-beta.2) + - Automattic-Tracks-iOS (~> 0.12.0) - CocoaLumberjack (~> 3.7.4) - CocoaLumberjack/Swift (~> 3.7.4) - Gridicons (~> 1.2.0) @@ -144,7 +144,7 @@ SPEC REPOS: SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 AppAuth: 80317d99ac7ff2801a2f18ff86b48cd315ed465d - Automattic-Tracks-iOS: f31213fbf0391968ffcff75e8c1bdad398589261 + Automattic-Tracks-iOS: dae8787ffc2c74493a3a908abc48aed527686131 CocoaLumberjack: 543c79c114dadc3b1aba95641d8738b06b05b646 FormatterKit: 184db51bf120b633693a73624a4cede89ec51a41 GoogleSignIn: fd381840dbe7c1137aa6dc30849a5c3e070c034a @@ -179,6 +179,6 @@ SPEC CHECKSUMS: ZendeskSupportProvidersSDK: 2bdf8544f7cd0fd4c002546f5704b813845beb2a ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba -PODFILE CHECKSUM: 9a75e7f419482622cc94acc2a73bd04ebbc4beaf +PODFILE CHECKSUM: 79417db449eae85f8a39f1707df162e137f11d43 COCOAPODS: 1.11.2 diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 98135c39db4..1add335b31f 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,9 +1,14 @@ *** PLEASE FOLLOW THIS FORMAT: [] [] +10.3 +----- + + 10.2 ----- - [*] Help center: Added help center web page with FAQs for "Enter Store Credentials", "Enter WordPress.com email " and "Jetpack required Error" screens. [https://github.com/woocommerce/woocommerce-ios/pull/7588, https://github.com/woocommerce/woocommerce-ios/pull/7590, https://github.com/woocommerce/woocommerce-ios/pull/7621] - [*] In-Person Payments: Fixed the Learn More link from the `Enable Pay in Person` onboarding screen for WCPay [https://github.com/woocommerce/woocommerce-ios/pull/7598] +- [**] In-Person Payments: Added a switch for the Pay in Person payment method on the Payments menu. This allows you to accept In-Person Payments for website orders [https://github.com/woocommerce/woocommerce-ios/pull/7613] 10.1 ----- diff --git a/WooCommerce/Classes/Analytics/WooAnalyticsEvent.swift b/WooCommerce/Classes/Analytics/WooAnalyticsEvent.swift index db57e96269f..6e2519de55d 100644 --- a/WooCommerce/Classes/Analytics/WooAnalyticsEvent.swift +++ b/WooCommerce/Classes/Analytics/WooAnalyticsEvent.swift @@ -772,6 +772,8 @@ extension WooAnalyticsEvent { static let errorDescription = "error_description" static let paymentMethodType = "payment_method_type" static let softwareUpdateType = "software_update_type" + static let source = "source" + static let enabled = "enabled" } static let unknownGatewayID = "unknown" @@ -1210,15 +1212,22 @@ extension WooAnalyticsEvent { ]) } + enum CashOnDeliverySource: String { + case onboarding + case paymentsHub = "payments_hub" + } + /// Tracked when the Cash on Delivery Payment Gateway is successfully enabled, e.g. from the IPP onboarding flow. /// /// - Parameters: /// - countryCode: the country code of the store. + /// - source: the screen which the enable attempt was made on /// - static func enableCashOnDeliverySuccess(countryCode: String) -> WooAnalyticsEvent { + static func enableCashOnDeliverySuccess(countryCode: String, source: CashOnDeliverySource) -> WooAnalyticsEvent { WooAnalyticsEvent(statName: .enableCashOnDeliverySuccess, properties: [ - Keys.countryCode: countryCode + Keys.countryCode: countryCode, + Keys.source: source.rawValue ]) } @@ -1226,16 +1235,64 @@ extension WooAnalyticsEvent { /// /// - Parameters: /// - countryCode: the country code of the store. + /// - source: the screen which the enable attempt was made on /// static func enableCashOnDeliveryFailed(countryCode: String, - error: Error?) -> WooAnalyticsEvent { + error: Error?, + source: CashOnDeliverySource) -> WooAnalyticsEvent { WooAnalyticsEvent(statName: .enableCashOnDeliveryFailed, properties: [ - Keys.countryCode: countryCode + Keys.countryCode: countryCode, + Keys.source: source.rawValue ], error: error) } + /// Tracked when the Cash on Delivery Payment Gateway is successfully disabled, e.g. from the toggle on the Payments hub menu. + /// + /// - Parameters: + /// - countryCode: the country code of the store. + /// - source: the screen which the disable attempt was made on + /// + static func disableCashOnDeliverySuccess(countryCode: String, source: CashOnDeliverySource) -> WooAnalyticsEvent { + WooAnalyticsEvent(statName: .disableCashOnDeliverySuccess, + properties: [ + Keys.countryCode: countryCode, + Keys.source: source.rawValue + ]) + } + + /// Tracked when the Cash on Delivery Payment Gateway disabling fails, e.g. from the toggle on the Payments hub menu. + /// + /// - Parameters: + /// - countryCode: the country code of the store. + /// - source: the screen which the disable attempt was made on + /// + static func disableCashOnDeliveryFailed(countryCode: String, + error: Error?, + source: CashOnDeliverySource) -> WooAnalyticsEvent { + WooAnalyticsEvent(statName: .disableCashOnDeliveryFailed, + properties: [ + Keys.countryCode: countryCode, + Keys.source: source.rawValue + ], + error: error) + } + + /// Tracked when the Cash on Delivery Payment Gateway toggle is changed from the toggle on the Payments hub menu. + /// + /// - Parameters: + /// - enabled: the reason why the onboarding step was shown (effectively the name of the step.) + /// - countryCode: the country code of the store. + /// + static func paymentsHubCashOnDeliveryToggled(enabled: Bool, countryCode: String) -> WooAnalyticsEvent { + WooAnalyticsEvent(statName: .paymentsHubCashOnDeliveryToggled, + properties: [ + Keys.countryCode: countryCode, + Keys.enabled: enabled + ]) + } + /// Tracked when the user taps on the "See Receipt" button to view a receipt. /// - Parameter countryCode: the country code of the store. /// diff --git a/WooCommerce/Classes/Analytics/WooAnalyticsStat.swift b/WooCommerce/Classes/Analytics/WooAnalyticsStat.swift index 0f33a10517d..aefd6b51e67 100644 --- a/WooCommerce/Classes/Analytics/WooAnalyticsStat.swift +++ b/WooCommerce/Classes/Analytics/WooAnalyticsStat.swift @@ -190,6 +190,10 @@ public enum WooAnalyticsStat: String { // MARK: Cash on Delivery Enable events case enableCashOnDeliverySuccess = "enable_cash_on_delivery_success" case enableCashOnDeliveryFailed = "enable_cash_on_delivery_failed" + case disableCashOnDeliverySuccess = "disable_cash_on_delivery_success" + case disableCashOnDeliveryFailed = "disable_cash_on_delivery_failed" + case paymentsHubCashOnDeliveryToggled = "payments_hub_cash_on_delivery_toggled" + case paymentsHubCashOnDeliveryToggleLearnMoreTapped = "payments_hub_cash_on_delivery_toggle_learn_more_tapped" // MARK: Payment Gateways selection case cardPresentPaymentGatewaySelected = "card_present_payment_gateway_selected" diff --git a/WooCommerce/Classes/Universal Links/Routes/PaymentsRoute.swift b/WooCommerce/Classes/Universal Links/Routes/PaymentsRoute.swift new file mode 100644 index 00000000000..aaae3f34e2b --- /dev/null +++ b/WooCommerce/Classes/Universal Links/Routes/PaymentsRoute.swift @@ -0,0 +1,13 @@ +import Foundation + +/// Links an URL with a /payments path to the Payments Hub Menu +/// +struct PaymentsRoute: Route { + let path = "/payments" + + func perform(with parameters: [String: String]) -> Bool { + MainTabBarController.presentPayments() + + return true + } +} diff --git a/WooCommerce/Classes/Universal Links/UniversalLinkRouter.swift b/WooCommerce/Classes/Universal Links/UniversalLinkRouter.swift index 8aed24e7ab3..9cc652a6112 100644 --- a/WooCommerce/Classes/Universal Links/UniversalLinkRouter.swift +++ b/WooCommerce/Classes/Universal Links/UniversalLinkRouter.swift @@ -25,7 +25,8 @@ struct UniversalLinkRouter { /// As we only perform one action to avoid conflicts, order matters (only the first matched route will be called to perform its action) /// private static let defaultRoutes: [Route] = [ - OrderDetailsRoute() + OrderDetailsRoute(), + PaymentsRoute() ] func handle(url: URL) { diff --git a/WooCommerce/Classes/ViewRelated/Dashboard/DashboardViewController.swift b/WooCommerce/Classes/ViewRelated/Dashboard/DashboardViewController.swift index 36038c02843..60936283dfb 100644 --- a/WooCommerce/Classes/ViewRelated/Dashboard/DashboardViewController.swift +++ b/WooCommerce/Classes/ViewRelated/Dashboard/DashboardViewController.swift @@ -148,7 +148,6 @@ private extension DashboardViewController { func configureNavigation() { configureTitle() configureHeaderStackView() - configureNavigationItem() } func configureTabBarItem() { @@ -196,23 +195,6 @@ private extension DashboardViewController { contentBottomToContainerConstraint = contentView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) } - private func configureNavigationItem() { - if !ServiceLocator.featureFlagService.isFeatureFlagEnabled(.hubMenu) { - let rightBarButton = UIBarButtonItem(image: .gearBarButtonItemImage, - style: .plain, - target: self, - action: #selector(settingsTapped)) - rightBarButton.accessibilityLabel = NSLocalizedString("Settings", comment: "Accessibility label for the Settings button.") - rightBarButton.accessibilityTraits = .button - rightBarButton.accessibilityHint = NSLocalizedString( - "Navigates to Settings.", - comment: "VoiceOver accessibility hint, informing the user the button can be used to navigate to the Settings screen." - ) - rightBarButton.accessibilityIdentifier = "dashboard-settings-button" - navigationItem.setRightBarButton(rightBarButton, animated: false) - } - } - func configureDashboardUIContainer() { hiddenScrollView.configureForLargeTitleWorkaround() // Adds the "hidden" scroll view to the root of the UIViewController for large titles. diff --git a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewController.swift b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewController.swift index e1926c7998f..5845409374a 100644 --- a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewController.swift +++ b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewController.swift @@ -65,6 +65,7 @@ final class InPersonPaymentsMenuViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + setupNavigationBar() configureSections() configureTableView() registerTableViewCells() @@ -162,6 +163,11 @@ private extension InPersonPaymentsMenuViewController { // MARK: - View configuration // private extension InPersonPaymentsMenuViewController { + func setupNavigationBar() { + navigationController?.setNavigationBarHidden(false, animated: true) + navigationItem.title = InPersonPaymentsView.Localization.title + } + func configureSections() { sections = [ actionsSection, @@ -469,12 +475,12 @@ private extension InPersonPaymentsMenuViewController { ) static let toggleEnableCashOnDelivery = NSLocalizedString( - "Enable Pay in Person", + "Pay in Person", comment: "Title for a switch on the In-Person Payments menu to enable Cash on Delivery" ) static let toggleEnableCashOnDeliveryLearnMoreFormat = NSLocalizedString( - "Pay in Person lets you accept card or cash payments on collection or delivery. %1$@", + "The Pay in Person checkout option lets you accept payments for website orders, on collection or delivery. %1$@", comment: "A label prompting users to learn more about adding Pay in Person to their checkout. " + "%1$@ is a placeholder that always replaced with \"Learn more\" string, " + "which should be translated separately and considered part of this sentence.") diff --git a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewModel.swift b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewModel.swift index a81be95dad5..4e19a47689f 100644 --- a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewModel.swift +++ b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewModel.swift @@ -1,18 +1,22 @@ import Foundation import Yosemite +import protocol Storage.StorageManagerType class InPersonPaymentsMenuViewModel: ObservableObject { // MARK: - Dependencies struct Dependencies { let stores: StoresManager + let storageManager: StorageManagerType let noticePresenter: NoticePresenter let analytics: Analytics init(stores: StoresManager = ServiceLocator.stores, + storageManager: StorageManagerType = ServiceLocator.storageManager, noticePresenter: NoticePresenter = ServiceLocator.noticePresenter, analytics: Analytics = ServiceLocator.analytics) { self.stores = stores + self.storageManager = storageManager self.noticePresenter = noticePresenter self.analytics = analytics } @@ -24,6 +28,10 @@ class InPersonPaymentsMenuViewModel: ObservableObject { dependencies.stores } + private var storageManager: StorageManagerType { + dependencies.storageManager + } + private var noticePresenter: NoticePresenter { dependencies.noticePresenter } @@ -40,14 +48,19 @@ class InPersonPaymentsMenuViewModel: ObservableObject { stores.sessionManager.defaultStoreID } + private let cardPresentPaymentsConfiguration: CardPresentPaymentsConfiguration + private let paymentGatewaysFetchedResultsController: ResultsController? var selectedPlugin: CardPresentPaymentsPlugin? - init(dependencies: Dependencies = Dependencies()) { + init(dependencies: Dependencies = Dependencies(), + configuration: CardPresentPaymentsConfiguration = CardPresentConfigurationLoader().configuration) { self.dependencies = dependencies + self.cardPresentPaymentsConfiguration = configuration paymentGatewaysFetchedResultsController = Self.createPaymentGatewaysResultsController( - siteID: dependencies.stores.sessionManager.defaultStoreID) + siteID: dependencies.stores.sessionManager.defaultStoreID, + storageManager: dependencies.storageManager) observePaymentGateways() } @@ -63,14 +76,15 @@ class InPersonPaymentsMenuViewModel: ObservableObject { } } - private static func createPaymentGatewaysResultsController(siteID: Int64?) -> ResultsController? { + private static func createPaymentGatewaysResultsController(siteID: Int64?, + storageManager: StorageManagerType) -> ResultsController? { guard let siteID = siteID else { return nil } let predicate = NSPredicate(format: "siteID == %lld", siteID) - return ResultsController(storageManager: ServiceLocator.storageManager, + return ResultsController(storageManager: storageManager, matching: predicate, sortedBy: []) } @@ -88,6 +102,7 @@ class InPersonPaymentsMenuViewModel: ObservableObject { // MARK: - Toggle Cash on Delivery Payment Gateway func updateCashOnDeliverySetting(enabled: Bool) { + trackCashOnDeliveryToggled(enabled: enabled) switch enabled { case true: enableCashOnDeliveryGateway() @@ -108,9 +123,11 @@ class InPersonPaymentsMenuViewModel: ObservableObject { // Resetting the toggle to the most recent stored value, or false because we failed to make it true. self.cashOnDeliveryEnabledState = self.cashOnDeliveryGateway?.enabled ?? false self.displayEnableCashOnDeliveryFailureNotice() + self.trackEnableCashOnDeliveryFailed(error: result.failure) return } + self.trackEnableCashOnDeliverySuccess() } stores.dispatch(action) } @@ -138,9 +155,11 @@ class InPersonPaymentsMenuViewModel: ObservableObject { // Resetting the toggle to the most recent stored value, or true because we failed to make it false. self.cashOnDeliveryEnabledState = self.cashOnDeliveryGateway?.enabled ?? true self.displayDisableCashOnDeliveryFailureNotice() + self.trackDisableCashOnDeliveryFailed(error: result.failure) return } + self.trackDisableCashOnDeliverySuccess() } stores.dispatch(action) } @@ -163,6 +182,44 @@ class InPersonPaymentsMenuViewModel: ObservableObject { func learnMoreTapped(from viewController: UIViewController) { WebviewHelper.launch(learnMoreURL, with: viewController) + analytics.track(.paymentsHubCashOnDeliveryToggleLearnMoreTapped) + } +} + +// MARK: - Analytics +extension InPersonPaymentsMenuViewModel { + private typealias Event = WooAnalyticsEvent.InPersonPayments + + private func trackCashOnDeliveryToggled(enabled: Bool) { + let event = Event.paymentsHubCashOnDeliveryToggled(enabled: enabled, + countryCode: cardPresentPaymentsConfiguration.countryCode) + analytics.track(event: event) + } + + private func trackEnableCashOnDeliverySuccess() { + let event = Event.enableCashOnDeliverySuccess(countryCode: cardPresentPaymentsConfiguration.countryCode, + source: .paymentsHub) + analytics.track(event: event) + } + + private func trackEnableCashOnDeliveryFailed(error: Error?) { + let event = Event.enableCashOnDeliveryFailed(countryCode: cardPresentPaymentsConfiguration.countryCode, + error: error, + source: .paymentsHub) + analytics.track(event: event) + } + + private func trackDisableCashOnDeliverySuccess() { + let event = Event.disableCashOnDeliverySuccess(countryCode: cardPresentPaymentsConfiguration.countryCode, + source: .paymentsHub) + analytics.track(event: event) + } + + private func trackDisableCashOnDeliveryFailed(error: Error?) { + let event = Event.disableCashOnDeliveryFailed(countryCode: cardPresentPaymentsConfiguration.countryCode, + error: error, + source: .paymentsHub) + analytics.track(event: event) } } diff --git a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift index 3e58fd75117..47eb842f326 100644 --- a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift +++ b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift @@ -131,13 +131,15 @@ extension InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel { } private func trackEnableCashOnDeliverySuccess() { - let event = Event.enableCashOnDeliverySuccess(countryCode: cardPresentPaymentsConfiguration.countryCode) + let event = Event.enableCashOnDeliverySuccess(countryCode: cardPresentPaymentsConfiguration.countryCode, + source: .onboarding) analytics.track(event: event) } private func trackEnableCashOnDeliveryFailed(error: Error?) { let event = Event.enableCashOnDeliveryFailed(countryCode: cardPresentPaymentsConfiguration.countryCode, - error: error) + error: error, + source: .onboarding) analytics.track(event: event) } } diff --git a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/Settings/SettingsViewModel.swift b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/Settings/SettingsViewModel.swift index d2b92f08668..c4424c5867f 100644 --- a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/Settings/SettingsViewModel.swift +++ b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/Settings/SettingsViewModel.swift @@ -195,20 +195,6 @@ private extension SettingsViewModel { } func configureSections() { - // Selected Store - let selectedStoreSection: Section? = { - if featureFlagService.isFeatureFlagEnabled(.hubMenu) { - return nil - } - else { - let storeRows: [Row] = sites.count > 1 ? - [.selectedStore, .switchStore] : [.selectedStore] - return Section(title: Localization.selectedStoreTitle, - rows: storeRows, - footerHeight: UITableView.automaticDimension) - } - }() - // Plugins let pluginsSection: Section? = { // Show the plugins section only if the user has an `admin` role for the default store site. @@ -301,7 +287,6 @@ private extension SettingsViewModel { footerHeight: CGFloat.leastNonzeroMagnitude) sections = [ - selectedStoreSection, pluginsSection, storeSettingsSection, helpAndFeedbackSection, @@ -371,12 +356,6 @@ private extension SettingsViewModel { // private extension SettingsViewModel { enum Localization { - static let selectedStoreTitle = NSLocalizedString( - "Selected Store", - comment: "My Store > Settings > Selected Store information section. " + - "This is the heading listed above the information row that displays the store website and their username." - ).uppercased() - static let pluginsTitle = NSLocalizedString( "Plugins", comment: "My Store > Settings > Plugins section title" diff --git a/WooCommerce/Classes/ViewRelated/Hub Menu/HubMenuViewController.swift b/WooCommerce/Classes/ViewRelated/Hub Menu/HubMenuViewController.swift index de3f929a603..4fb9ffbeefe 100644 --- a/WooCommerce/Classes/ViewRelated/Hub Menu/HubMenuViewController.swift +++ b/WooCommerce/Classes/ViewRelated/Hub Menu/HubMenuViewController.swift @@ -27,6 +27,10 @@ final class HubMenuViewController: UIHostingController { func pushReviewDetailsViewController(using parcel: ProductReviewFromNoteParcel) { viewModel.showReviewDetails(using: parcel) } + + func showPaymentsMenu() { + show(InPersonPaymentsMenuViewController(), sender: self) + } } private extension HubMenuViewController { diff --git a/WooCommerce/Classes/ViewRelated/MainTabBarController.swift b/WooCommerce/Classes/ViewRelated/MainTabBarController.swift index 0471e2431a8..4c60ca0d686 100644 --- a/WooCommerce/Classes/ViewRelated/MainTabBarController.swift +++ b/WooCommerce/Classes/ViewRelated/MainTabBarController.swift @@ -35,14 +35,14 @@ extension WooTab { /// /// - Parameters: /// - visibleIndex: the index of visible tabs on the tab bar - init(visibleIndex: Int, isHubMenuFeatureFlagOn: Bool) { - let tabs = WooTab.visibleTabs(isHubMenuFeatureFlagOn) + init(visibleIndex: Int) { + let tabs = WooTab.visibleTabs() self = tabs[visibleIndex] } /// Returns the visible tab index. - func visibleIndex(_ isHubMenuFeatureFlagOn: Bool) -> Int { - let tabs = WooTab.visibleTabs(isHubMenuFeatureFlagOn) + func visibleIndex() -> Int { + let tabs = WooTab.visibleTabs() guard let tabIndex = tabs.firstIndex(where: { $0 == self }) else { assertionFailure("Trying to get the visible tab index for tab \(self) while the visible tabs are: \(tabs)") return 0 @@ -51,17 +51,8 @@ extension WooTab { } // Note: currently only the Dashboard tab (My Store) view controller is set up in Main.storyboard. - private static func visibleTabs(_ isHubMenuFeatureFlagOn: Bool) -> [WooTab] { - var tabs: [WooTab] = [.myStore, .orders, .products] - - if isHubMenuFeatureFlagOn { - tabs.append(.hubMenu) - } - else { - tabs.append(.reviews) - } - - return tabs + private static func visibleTabs() -> [WooTab] { + [.myStore, .orders, .products, .hubMenu] } } @@ -114,8 +105,6 @@ final class MainTabBarController: UITabBarController { private var productImageUploadErrorsSubscription: AnyCancellable? - private lazy var isHubMenuFeatureFlagOn = featureFlagService.isFeatureFlagEnabled(.hubMenu) - private lazy var isOrdersSplitViewFeatureFlagOn = featureFlagService.isFeatureFlagEnabled(.splitViewInOrdersTab) init?(coder: NSCoder, @@ -174,11 +163,11 @@ final class MainTabBarController: UITabBarController { } override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { - let currentlySelectedTab = WooTab(visibleIndex: selectedIndex, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn) + let currentlySelectedTab = WooTab(visibleIndex: selectedIndex) guard let userSelectedIndex = tabBar.items?.firstIndex(of: item) else { return } - let userSelectedTab = WooTab(visibleIndex: userSelectedIndex, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn) + let userSelectedTab = WooTab(visibleIndex: userSelectedIndex) // Did we reselect the already-selected tab? if currentlySelectedTab == userSelectedTab { @@ -197,7 +186,7 @@ final class MainTabBarController: UITabBarController { if let presentedController = Self.childViewController()?.presentedViewController { presentedController.dismiss(animated: true) } - selectedIndex = tab.visibleIndex(isHubMenuFeatureFlagOn) + selectedIndex = tab.visibleIndex() if let navController = selectedViewController as? UINavigationController { navController.popToRootViewController(animated: animated) { completion?() @@ -420,6 +409,16 @@ extension MainTabBarController { (childViewController() as? OrdersRootViewController)?.presentDetails(for: orderID, siteID: siteID) } } + + static func presentPayments() { + switchToHubMenuTab() + + guard let hubMenuViewController: HubMenuViewController = childViewController() else { + return + } + + hubMenuViewController.showPaymentsMenu() + } } // MARK: - Site ID observation for updating tab view controllers @@ -429,22 +428,17 @@ private extension MainTabBarController { viewControllers = { var controllers = [UIViewController]() - let dashboardTabIndex = WooTab.myStore.visibleIndex(isHubMenuFeatureFlagOn) + let dashboardTabIndex = WooTab.myStore.visibleIndex() controllers.insert(dashboardNavigationController, at: dashboardTabIndex) - let ordersTabIndex = WooTab.orders.visibleIndex(isHubMenuFeatureFlagOn) + let ordersTabIndex = WooTab.orders.visibleIndex() controllers.insert(ordersNavigationController, at: ordersTabIndex) - let productsTabIndex = WooTab.products.visibleIndex(isHubMenuFeatureFlagOn) + let productsTabIndex = WooTab.products.visibleIndex() controllers.insert(productsNavigationController, at: productsTabIndex) - if isHubMenuFeatureFlagOn { - let hubMenuTabIndex = WooTab.hubMenu.visibleIndex(isHubMenuFeatureFlagOn) - controllers.insert(hubMenuNavigationController, at: hubMenuTabIndex) - } else { - let reviewsTabIndex = WooTab.reviews.visibleIndex(isHubMenuFeatureFlagOn) - controllers.insert(reviewsNavigationController, at: reviewsTabIndex) - } + let hubMenuTabIndex = WooTab.hubMenu.visibleIndex() + controllers.insert(hubMenuNavigationController, at: hubMenuTabIndex) return controllers }() @@ -477,26 +471,16 @@ private extension MainTabBarController { let productsViewController = createProductsViewController(siteID: siteID) productsNavigationController.viewControllers = [productsViewController] - // Configure hub menu tab coordinator or reviews tab coordinator once per logged in session potentially with multiple sites. - if isHubMenuFeatureFlagOn { - if hubMenuTabCoordinator == nil { - let hubTabCoordinator = createHubMenuTabCoordinator() - self.hubMenuTabCoordinator = hubTabCoordinator - hubTabCoordinator.start() - } - hubMenuTabCoordinator?.activate(siteID: siteID) - } - else { - if reviewsTabCoordinator == nil { - let reviewsTabCoordinator = createReviewsTabCoordinator() - self.reviewsTabCoordinator = reviewsTabCoordinator - reviewsTabCoordinator.start() - } - reviewsTabCoordinator?.activate(siteID: siteID) + // Configure hub menu tab coordinator once per logged in session potentially with multiple sites. + if hubMenuTabCoordinator == nil { + let hubTabCoordinator = createHubMenuTabCoordinator() + self.hubMenuTabCoordinator = hubTabCoordinator + hubTabCoordinator.start() } + hubMenuTabCoordinator?.activate(siteID: siteID) // Set dashboard to be the default tab. - selectedIndex = WooTab.myStore.visibleIndex(isHubMenuFeatureFlagOn) + selectedIndex = WooTab.myStore.visibleIndex() } func createDashboardViewController(siteID: Int64) -> UIViewController { @@ -551,8 +535,8 @@ private extension MainTabBarController { } func updateMenuTabBadge(with action: NotificationBadgeActionType) { - let tab = self.isHubMenuFeatureFlagOn ? WooTab.hubMenu : WooTab.reviews - let tabIndex = tab.visibleIndex(self.isHubMenuFeatureFlagOn) + let tab = WooTab.hubMenu + let tabIndex = tab.visibleIndex() let input = NotificationsBadgeInput(action: action, tab: tab, tabBar: self.tabBar, tabIndex: tabIndex) self.notificationsBadge.updateBadge(with: input) @@ -569,7 +553,7 @@ private extension MainTabBarController { } let tab = WooTab.orders - let tabIndex = tab.visibleIndex(self.isHubMenuFeatureFlagOn) + let tabIndex = tab.visibleIndex() guard let orderTab: UITabBarItem = self.tabBar.items?[tabIndex] else { return diff --git a/WooCommerce/Classes/ViewRelated/ReusableViews/LeftImageTitleSubtitleToggleTableViewCell.swift b/WooCommerce/Classes/ViewRelated/ReusableViews/LeftImageTitleSubtitleToggleTableViewCell.swift index 6fe6a5d0aaa..faa2b131e79 100644 --- a/WooCommerce/Classes/ViewRelated/ReusableViews/LeftImageTitleSubtitleToggleTableViewCell.swift +++ b/WooCommerce/Classes/ViewRelated/ReusableViews/LeftImageTitleSubtitleToggleTableViewCell.swift @@ -4,8 +4,6 @@ import UIKit /// Represents a regular UITableView Cell with subtitle: [Image | Text + Subtitle | Disclosure] /// class LeftImageTitleSubtitleToggleTableViewCell: UITableViewCell { - - @IBOutlet weak var leftImageView: UIImageView! @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var subtitleLabel: UILabel! @@ -15,10 +13,10 @@ class LeftImageTitleSubtitleToggleTableViewCell: UITableViewCell { /// var leftImage: UIImage? { get { - return leftImageView?.image + return leftImageView.image } set { - leftImageView?.image = newValue + leftImageView.image = newValue } } @@ -26,10 +24,10 @@ class LeftImageTitleSubtitleToggleTableViewCell: UITableViewCell { /// var labelText: String? { get { - return titleLabel?.text + return titleLabel.text } set { - titleLabel?.text = newValue + titleLabel.text = newValue } } @@ -37,10 +35,10 @@ class LeftImageTitleSubtitleToggleTableViewCell: UITableViewCell { /// var subtitleLabelText: String? { get { - return subtitleLabel?.text + return subtitleLabel.text } set { - subtitleLabel?.text = newValue + subtitleLabel.text = newValue } } @@ -59,10 +57,10 @@ class LeftImageTitleSubtitleToggleTableViewCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() configureBackground() - leftImageView?.tintColor = .primary - titleLabel?.applyBodyStyle() - subtitleLabel?.applyFootnoteStyle() - toggleSwitch?.onTintColor = .primary + leftImageView.tintColor = .primary + titleLabel.applyBodyStyle() + subtitleLabel.applyFootnoteStyle() + toggleSwitch.onTintColor = .primary subtitleLabel.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(subtitleTapped))) } @@ -110,9 +108,9 @@ extension LeftImageTitleSubtitleToggleTableViewCell { switchState: Bool, switchAction: @escaping (Bool) -> Void, subtitleTapAction: (() -> Void)? = nil) { - leftImageView?.image = image - titleLabel?.text = text - subtitleLabel?.text = subtitle + leftImageView.image = image + titleLabel.text = text + subtitleLabel.text = subtitle subtitleLabel.attributedText = attributedSubtitle toggleSwitch.isOn = switchState self.switchAction = switchAction diff --git a/WooCommerce/Classes/ViewRelated/Reviews/ReviewsViewController.swift b/WooCommerce/Classes/ViewRelated/Reviews/ReviewsViewController.swift index 1b42db03ad5..7e9957e1a15 100644 --- a/WooCommerce/Classes/ViewRelated/Reviews/ReviewsViewController.swift +++ b/WooCommerce/Classes/ViewRelated/Reviews/ReviewsViewController.swift @@ -235,11 +235,7 @@ private extension ReviewsViewController { } func refreshTitle() { - if ServiceLocator.featureFlagService.isFeatureFlagEnabled(.hubMenu) { - title = Localization.title - } else { - navigationItem.title = Localization.title - } + title = Localization.title } } diff --git a/WooCommerce/Resources/AppStoreStrings.pot b/WooCommerce/Resources/AppStoreStrings.pot index dc25018a422..48b3056c7a1 100644 --- a/WooCommerce/Resources/AppStoreStrings.pot +++ b/WooCommerce/Resources/AppStoreStrings.pot @@ -57,10 +57,9 @@ msgctxt "app_store_promo_text" msgid "Run your store from anywhere" msgstr "" -msgctxt "v10.1-whats-new" +msgctxt "v10.2-whats-new" msgid "" -"This release has several fixes that makes it easier for you to take payments from the app. We’ve also added a new Help Center FAQ page that makes it easier for you to login to the app.\n" -"Please continue to send us feedback – we are listening!\n" +"Even though this release doesn’t have any new features, we still put a lot of love into it! You can now enable or disable the option to take card or cash payments on collection or delivery. We also added a new Help Center page that makes it easier for you to login to the app.\n" msgstr "" #. translators: This is a promo message that will be attached on top of a screenshot in the App Store. diff --git a/WooCommerce/Resources/Info.plist b/WooCommerce/Resources/Info.plist index 45a00a6c5e2..44120a34f49 100644 --- a/WooCommerce/Resources/Info.plist +++ b/WooCommerce/Resources/Info.plist @@ -2,11 +2,6 @@ - NSAppTransportSecurity - - NSAllowsLocalNetworking - - CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName @@ -63,18 +58,25 @@ LSRequiresIPhoneOS - NSCameraUsageDescription - To take photos or videos to add to your Products, scan barcode for Product SKU, or support tickets. - NSPhotoLibraryUsageDescription - To save photos from camera for Product images, or to add photos or videos to your Products or support tickets. - NSLocationWhenInUseUsageDescription - Location access is required in order to accept payments. - NSBluetoothPeripheralUsageDescription - Bluetooth access is required in order to connect to supported card readers. + NSAppTransportSecurity + + NSAllowsLocalNetworking + + NSBluetoothAlwaysUsageDescription This app uses Bluetooth to connect to supported card readers. + NSBluetoothPeripheralUsageDescription + Bluetooth access is required in order to connect to supported card readers. + NSCameraUsageDescription + To take photos or videos to add to your Products, scan barcode for Product SKU, or support tickets. NSLocationDefaultAccuracyReduced + NSLocationWhenInUseUsageDescription + Location access is required in order to accept payments. + NSPhotoLibraryUsageDescription + To save photos from camera for Product images, or to add photos or videos to your Products or support tickets. + NSUserActivityTypes + UIAppFonts Noticons.ttf diff --git a/WooCommerce/Resources/ar.lproj/Localizable.strings b/WooCommerce/Resources/ar.lproj/Localizable.strings index f22ddc83bbb..a0d62765c9b 100644 --- a/WooCommerce/Resources/ar.lproj/Localizable.strings +++ b/WooCommerce/Resources/ar.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 09:54:03+0000 */ +/* Translation-Revision-Date: 2022-08-30 15:54:03+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/2.4.0-alpha */ /* Language: ar */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "تأكيد طريقة الدفع"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "تم اكتشاف إضافات دفع متعارضة"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "تهانينا، لقد قرأت كل شيء!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "المتابعة باستخدام Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "تحويل"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "فشل حذف القسيمة. يرجى المحاولة مجددًا."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "فشل تمكين الدفع بشكل شخصي. يرجى المحاولة مرة أخرى لاحقًا."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "فشل إحضار تفاصيل الدفع الخاصة بك. يرجى المحاولة مرة أخرى."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "مساعدة"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "لم يكتمل إعداد المدفوعات الشخصية."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "تتم معالجة المدفوعات الشخصية من خلال WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "يمكن معالجة المدفوعات الشخصية من خلال أي من مزوِّدي الدفع هؤلاء. ما المزوِّد الذي ترغب في استخدامه؟"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "المدفوعات الشخصية غير متاحة لهذا المخزن"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "لن تعمل المدفوعات الشخصية سوى مع تفعيل إحدى الإضافات الآتية. يرجى الاتصال بمسؤول الموقع لتعطيل إحدى هذه الإضافات للمتابعة:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "لن تعمل المدفوعات الشخصية سوى مع تفعيل إحدى الإضافات الآتية. يرجى تعطيل إحدى هذه الإضافات للمتابعة:"; - /* Application's Inactive State */ "Inactive" = "غير نشط"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "يبدو أنك أدخلت كلمة مرور غير صحيحة. هل ترغب في تجربته مرة أخرى؟"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "يبدو أن موقعك %@ عبارة عن موقع ووردبريس.كوم بسيط يتعذر عليه تثبيت إضافات. يرجى ترقية خطتك لاستخدام WooCommerce."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "مائل"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "تسجيل الدخول باستخدام حساب آخر"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "إدارة قسيمة"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "إدارة الإضافات"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "إدارة الطلبات وتحريرها في أثناء التنقل"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "قائمة مرتَّبة"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "الطلبات"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "اللصق من دون تنسيق"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "الدفع باستخدام بطاقة أو طريقة دفع أخرى مقبولة"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "الدفع بشكل شخصي"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "إعادة المحاولة"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "الرجوع إلى المرسل إذا تعذر توصيل الحزمة"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "الإيراد"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "لإغلاق هذا الحساب الآن، اتصل بفريق الدعم."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "لتحصيل المدفوعات، يرجى أن تطلب من أحد المسؤولين تعطيل WooCommerce Stripe Gateway."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "لتحصيل المدفوعات، يرجى تعطيل WooCommerce Stripe Gateway."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "للتأكيد، يرجى إعادة إدخال اسم المستخدم الخاص بك قبل الإغلاق.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "الرؤية"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "الزائرون"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/de.lproj/Localizable.strings b/WooCommerce/Resources/de.lproj/Localizable.strings index 5401d7b8732..80ababd97ea 100644 --- a/WooCommerce/Resources/de.lproj/Localizable.strings +++ b/WooCommerce/Resources/de.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 11:54:03+0000 */ +/* Translation-Revision-Date: 2022-08-31 11:54:04+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: de */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Zahlungsmethode bestätigen"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "In Konflikt stehende Zahlungsplugins entdeckt"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Glückwunsch, du hast alles gelesen!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Weiter mit Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Conversion"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Gutschein konnte nicht gelöscht werden. Versuche es bitte noch einmal."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "Persönliche Zahlung konnte nicht aktiviert werden. Versuch es später noch einmal."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Details zur Belastung konnten nicht abgerufen werden. Bitte versuche es erneut."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Hilfe"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "Einrichtung von „Persönliche Zahlungen“ abgeschlossen."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "Persönliche Zahlungen werden mit WooCommerce Payments verarbeitet."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "Persönliche Zahlungen können über einen dieser Zahlungsanbieter verarbeitet werden. Welchen Anbieter möchtest du verwenden?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "„Persönliche Zahlungen“ ist für diesen Store nicht verfügbar."; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "Persönliche Zahlungen funktionieren nur, wenn eines der folgenden Plugins aktiviert ist. Bitte setze dich mit einem Website-Administrator in Verbindung, um eines dieser Plugins zu deaktivieren und fortzufahren:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "Persönliche Zahlungen funktionieren nur, wenn eines der folgenden Plugins aktiviert ist. Deaktiviere eines der folgenden Plugins, um fortzufahren:"; - /* Application's Inactive State */ "Inactive" = "Inaktiv"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Scheinbar hast du ein falsches Passwort eingegeben. Möchtest du es noch einmal versuchen?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Bei deiner Website %@ handelt es sich offenbar um eine einfache WordPress.com-Website, für die keine Plugins installiert werden können. Bitte aktualisiere deinen Tarif, um WooCommerce zu nutzen."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "Kursiv"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Mit einem anderen Konto anmelden"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Gutschein verwalten"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Plugins verwalten"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Verwalte und bearbeite Bestellungen auch unterwegs"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Sortierte Liste"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Bestellungen"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Ohne Formatierung einfügen"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Kartenzahlung oder eine andere akzeptierte Zahlungsmethode"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Persönliche Zahlung"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Erneut versuchen"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "An Absender zurücksenden, wenn Paket nicht zugestellt werden kann"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Umsatz"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "Kontaktiere unser Support-Team, um dieses Konto jetzt zu schließen."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "Bitte einen Administrator, WooCommerce Stripe Gateway zu deaktivieren, um Zahlungen zu empfangen."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "Deaktiviere WooCommerce Stripe Gateway, um Zahlungen zu empfangen."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Bitte gib den Benutzernamen vor dem Schließen erneut an, um den Vorgang zu bestätigen.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Sichtbarkeit"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Besucher"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/en.lproj/Localizable.strings b/WooCommerce/Resources/en.lproj/Localizable.strings index 24d417eb091..de7dc4c08c4 100644 --- a/WooCommerce/Resources/en.lproj/Localizable.strings +++ b/WooCommerce/Resources/en.lproj/Localizable.strings @@ -40,6 +40,12 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. %1$@ is a placeholder that is always replaced with \"Learn more\" string, which should be translated separately and considered part of this sentence. */ "%1$@ about adding Pay in Person to your checkout" = "%1$@ about adding Pay in Person to your checkout"; +/* A label prompting users to learn more about In-Person Payments. +\u{2011} is a special character that acts as nonbreaking hyphen for "-" in the "In-Person" string. +%1$@ is a placeholder that always replaced with \"Learn more\" string, +which should be translated separately and considered part of this sentence. */ +"%1$@ about In\u{2011}Person Payments" = "%1$@ about In\u{2011}Person Payments"; + /* Accessibility description for a card payment method, used by assistive technologies such as screen reader. %1$@ is a placeholder for the card brand, %2$@ is a placeholder for the last 4 digits of the card number */ "%1$@ card ending %2$@" = "%1$@ card ending %2$@"; @@ -1095,9 +1101,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Confirm Payment Method"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Conflicting payment plugins detected"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Congrats, you’ve read everything!"; @@ -1206,7 +1209,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Continuing with Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Conversion"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2013,6 +2017,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Failed to delete coupon. Please try again."; +/* Error displayed when the attempt to disable a Pay in Person checkout payment option fails */ +"Failed to disable Pay in Person. Please try again later." = "Failed to disable Pay in Person. Please try again later."; + /* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ "Failed to enable Pay in Person. Please try again later." = "Failed to enable Pay in Person. Please try again later."; @@ -2261,6 +2268,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Help"; @@ -2341,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ Title for the In-Person Payments settings screen */ "In-Person Payments" = "In-Person Payments"; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "In-Person Payments are processed through WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?"; @@ -2358,12 +2363,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "In-Person Payments Setup is incomplete."; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:"; - /* Application's Inactive State */ "Inactive" = "Inactive"; @@ -2608,8 +2607,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2791,9 +2793,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Login onboarding survey option: manage my orders. */ "Manage my orders" = "Manage my orders"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Manage Plugins"; - /* Title of the cell in Product Inventory Settings > Manage stock */ "Manage stock" = "Manage stock"; @@ -3257,6 +3256,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Ordered List"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Orders"; @@ -3352,7 +3352,8 @@ This part is the link to the website, and forms part of a longer sentence which Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ "Pay by card or another accepted payment method" = "Pay by card or another accepted payment method"; -/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person */ +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ "Pay in Person" = "Pay in Person"; /* Payment section title @@ -4029,6 +4030,7 @@ This part is the link to the website, and forms part of a longer sentence which Retry Action Retry action for an error notice Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Retry"; @@ -4046,7 +4048,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Return to sender if package is unable to be delivered"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Revenue"; /* Review moderation success notice message. It reads: Review marked as {new status} */ @@ -4990,6 +4993,9 @@ This part is the link to the website, and forms part of a longer sentence which /* Fetching an Order Failed */ "The Order couldn't be loaded!" = "The Order couldn't be loaded!"; +/* A label prompting users to learn more about adding Pay in Person to their checkout. %1$@ is a placeholder that always replaced with \"Learn more\" string, which should be translated separately and considered part of this sentence. */ +"The Pay in Person checkout option lets you accept payments for website orders, on collection or delivery. %1$@" = "The Pay in Person checkout option lets you accept payments for website orders, on collection or delivery. %1$@"; + /* Message when the presented card does not allow the purchase amount. */ "The payment amount is not allowed for the card presented. Try another means of payment." = "The payment amount is not allowed for the card presented. Try another means of payment."; @@ -5251,12 +5257,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "To close this account now, contact our support team."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "To collect payments, please deactivate WooCommerce Stripe Gateway."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "To confirm, please re-enter your username before closing.\n\n%1$@"; @@ -5272,6 +5272,9 @@ This part is the link to the website, and forms part of a longer sentence which /* Settings > Privacy Settings > report crashes section. Explains what the 'report crashes' toggle does */ "To help us improve the app’s performance and fix the occasional bug, enable automatic crash reports." = "To help us improve the app’s performance and fix the occasional bug, enable automatic crash reports."; +/* Sign in instructions asking user to enter WordPress.com password to proceed with sign in using Apple process */ +"To proceed with this account, please first log in with your WordPress.com password. This will only be asked once." = "To proceed with this account, please first log in with your WordPress.com password. This will only be asked once."; + /* Instructional text shown when requesting the user's password for Apple login. */ "To proceed with this Apple ID, please first log in with your WordPress.com password. This will only be asked once." = "To proceed with this Apple ID, please first log in with your WordPress.com password. This will only be asked once."; @@ -5823,7 +5826,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Visibility"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Visitors"; /* Message shown on screen while waiting for Google to finish its signup process. */ diff --git a/WooCommerce/Resources/es.lproj/Localizable.strings b/WooCommerce/Resources/es.lproj/Localizable.strings index 3e52d1f11be..a64d9b18fc8 100644 --- a/WooCommerce/Resources/es.lproj/Localizable.strings +++ b/WooCommerce/Resources/es.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-26 11:54:03+0000 */ +/* Translation-Revision-Date: 2022-08-31 09:54:04+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: es */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Confirmar método de pago"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Se han detectado plugins de pago conflictivos."; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "¡Enhorabuena, has acabado de leer!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Seguir con Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Conversión"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "No se ha podido eliminar el cupón. Inténtalo de nuevo."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "No se ha podido activar Pagos en persona. Inténtalo de nuevo más tarde."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Se ha producido un error al recuperar los detalles del cargo. Inténtalo de nuevo más tarde."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Ayuda"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "La configuración de Pagos en persona no se ha completado."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "Los pagos en persona se procesan a través de WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "Los pagos en persona se pueden procesar a través de cualquiera de estos proveedores de pago. ¿Qué proveedor te gustaría utilizar?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "Pagos en Persona no está disponible para esta tienda"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "Los Pagos en Persona solo funcionarán si uno de los siguientes plugins está activado. Para continuar, ponte en contacto con un administrador del sitio y desactiva uno de estos plugins:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "Los Pagos en Persona solo funcionarán si uno de los siguientes plugins está activado. Para continuar, desactiva uno de estos plugins:"; - /* Application's Inactive State */ "Inactive" = "Inactivo"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Parece que has introducido una contraseña incorrecta ¿Quieres intentarlo de nuevo?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Parece que tu sitio %@ es un sitio sencillo de WordPress.com que no puede instalar plugins. Mejora tu plan para usar WooCommerce."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "Cursiva"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Acceder con otra cuenta"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Gestionar cupón"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Gestionar plugins"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Gestiona y edita pedidos sobre la marcha"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Lista ordenada"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Pedidos"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Pegar sin formato"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Paga con tarjeta u otro método de pago aceptado"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Pagos en persona"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Reintentar"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Devolver el paquete al remitente si no se puede entregar"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Ingresos"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "Para cerrar esta cuenta ahora, contacta con nuestro equipo de soporte."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "Para aceptar pagos, pide a un administrador que desactive WooCommerce Stripe Gateway."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "Para aceptar pagos, desactiva WooCommerce Stripe Gateway."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Para confirmar, por favor, vuelve a introducir tu nombre de usuario antes de cerrarlo.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Visibilidad"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Visitantes"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/fr.lproj/Localizable.strings b/WooCommerce/Resources/fr.lproj/Localizable.strings index d0e1552259c..1fc2af6091c 100644 --- a/WooCommerce/Resources/fr.lproj/Localizable.strings +++ b/WooCommerce/Resources/fr.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 15:54:03+0000 */ +/* Translation-Revision-Date: 2022-08-31 11:54:03+0000 */ /* Plural-Forms: nplurals=2; plural=n > 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: fr */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Confirmer le mode de paiement"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Nous avons détecté des extensions de paiement en conflit"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Féliciations, vous avez tout lu !"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Continuer avec Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Conversion"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Échec de la suppression du code promo. Veuillez réessayer."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "Échec de l’activation de la fonctionnalité Payer en personne. Veuillez réessayer ultérieurement."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Impossible d’extraire vos données de facturation. Veuillez réessayer."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Aide"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "La configuration des paiements en personne est incomplète."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "Les paiements en personne sont traités à l’aide de WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "Les paiements en personne peuvent être traités à partir de ces fournisseurs de paiement. Quel fournisseur souhaitez-vous utiliser ?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "Les paiements en personne ne sont pas disponibles pour cette boutique."; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "Les paiements en personne ne fonctionnent que si l’une des extensions suivantes est activée. Veuillez demander à un administrateur du site de désactiver l’une des extensions suivantes afin de pouvoir continuer :"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "Les paiements en personne ne fonctionnent que si l’une des extensions suivantes est activée. Veuillez désactiver l’une de ces extensions pour pouvoir continuer :"; - /* Application's Inactive State */ "Inactive" = "Inactif"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Il semblerait que vous avez saisi un mot de passe incorrect. Voulez-vous réessayer ?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Il semble que votre site %@ soit un site WordPress.com simple qui ne prend pas en charge les extensions. Veuillez choisir une option payante pour votre plan afin de pouvoir utiliser WooCommerce."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "Italique"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Se connecter avec un autre compte"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Gérer les codes promo"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Gérer les extensions"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Gérez et modifiez vos commandes à la volée"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Liste ordonnée"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Commandes"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Coller en texte brut"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Payer par carte ou à l’aide d’un autre moyen de paiement accepté"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Payer en personne"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Réessayer"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Retour à l’expéditeur si le colis ne peut être livré"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Revenu"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "Pour fermer ce compte maintenant, contactez notre équipe d’assistance."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "Pour accepter des paiements, demandez à un administrateur de désactiver WooCommerce Stripe Gateway."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "Pour accepter des paiements, désactivez WooCommerce Stripe Gateway."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Pour confirmer, saisissez à nouveau votre identifiant avant de fermer.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Visibilité"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Visiteurs"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/he.lproj/Localizable.strings b/WooCommerce/Resources/he.lproj/Localizable.strings index 852c3f3ab20..c136daa922c 100644 --- a/WooCommerce/Resources/he.lproj/Localizable.strings +++ b/WooCommerce/Resources/he.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 13:54:04+0000 */ +/* Translation-Revision-Date: 2022-08-31 14:54:03+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: he_IL */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "לאשר את אמצעי התשלום"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "תוספי תשלומים מתנגשים זוהו"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "ברכותינו, קראת הכול!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "להמשיך עם Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "המרה"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "מחיקת הקופון נכשלה. יש לנסות שוב."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "לא ניתן היה להפעיל 'תשלום באופן אישי'. יש לנסות שוב מאוחר יותר."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "לא ניתן היה להביא את פרטי החיוב. יש לנסות שוב."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "עזרה"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "הגדרה של 'תשלומים באופן אישי' לא הושלמה."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "תשלומים באופן אישי מעובדים דרך WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "אפשר לעבד תשלומים באופן אישי באמצעות אחד מספקי התשלום האלו. באיזה ספק ברצונך להשתמש?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "תשלומים באופן אישי אינם זמינים עבור חנות זו"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "אפשרות התשלומים באופן אישי תעבוד רק כשאחד מהתוספים הבאים מופעל. יש ליצור קשר עם מנהל האתר כדי לכבות את אחד מהתוספים האלו על מנת להמשיך:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "אפשרות התשלומים באופן אישי תעבוד רק כשאחד מהתוספים הבאים מופעל. יש לכבות את אחד מהתוספים האלו כדי להמשיך:"; - /* Application's Inactive State */ "Inactive" = "לא פעיל"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "כנראה שהזנת סיסמה שגויה. רוצה לנסות שוב?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "נראה שהאתר שלך, %@, הוא אתר WordPress.com פשוט שלא יכול להתקין תוספים. עליך לשדרג את התוכנית שלך כדי להשתמש ב-WooCommerce."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "נטוי"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "להתחבר עם חשבון אחר"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "ניהול קופון"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "ניהול תוספים"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "לנהל ולערוך הזמנות מכל מקום"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "רשימה ממוספרת"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "הזמנות"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "הדבקה בלי העיצוב"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "לשלם באמצעות כרטיס או עם אמצעי תשלום נתמך אחר"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "תשלום באופן אישי"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "נסה שנית"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "להחזיר לשולח אם לא ניתן לשלוח את החבילה"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "הכנסה"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "לסגירת חשבון זה כעת, עליך לפנות לצוות התמיכה שלנו."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "לגביית תשלומים, יש לפנות אל מנהל מערכת כדי להשבית את WooCommerce Stripe Gateway."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "לגביית תשלומים, יש להשבית את WooCommerce Stripe Gateway."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "לאישור, עליך להזין שוב את שם המשתמש שלך לפני הסגירה.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "נראות"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "מבקרים"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/id.lproj/Localizable.strings b/WooCommerce/Resources/id.lproj/Localizable.strings index 67089c07cb6..117ecc7accf 100644 --- a/WooCommerce/Resources/id.lproj/Localizable.strings +++ b/WooCommerce/Resources/id.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 11:54:04+0000 */ +/* Translation-Revision-Date: 2022-09-02 09:54:03+0000 */ /* Plural-Forms: nplurals=2; plural=n > 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: id */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Konfirmasi Metode Pembayaran"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Konflik plugin pembayaran terdeteksi"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Selamat, Anda telah membaca semuanya!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Melanjutkan dengan Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Konversi"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Gagal menghapus kupon. Mohon ulangi."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "Gagal mengaktifkan Pembayaran Langsung. Silakan coba lagi nanti."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Gagal mengambil detail tagihan Anda. Silakan coba lagi."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Bantuan"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "Pengaturan Pembayaran Langsung belum lengkap."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "Pembayaran Langsung diproses melalui WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "Pembayaran Langsung dapat diproses melalui penyedia pembayaran berikut. Penyedia mana yang ingin Anda gunakan?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "Pembayaran Langsung tidak tersedia untuk toko ini"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "Pembayaran Langsung hanya akan berfungsi jika salah satu plugin berikut diaktifkan. Hubungi administrator situs untuk menonaktifkan salah satu plugin berikut agar dapat melanjutkan:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "Pembayaran Langsung hanya akan berfungsi jika salah satu plugin berikut diaktifkan. Harap nonaktifkan salah satu plugin berikut untuk melanjutkan:"; - /* Application's Inactive State */ "Inactive" = "Nonaktif"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Sepertinya Anda memasukkan kata sandi yang salah. Ingin mencoba lagi?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Sepertinya situs %@ Anda adalah situs WordPress.com sederhana yang tidak dapat menginstal plugin. Upgrade paket Anda untuk dapat menggunakan WooCommerce."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "Miring"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Login Dengan Akun Lain"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Kelola Kupon"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Kelola Plugin"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Kelola dan sunting pesanan dari mana saja"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Daftar Berurutan"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Pesanan"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Tempel tanpa Format"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Bayar menggunakan kartu atau metode pembayaran lain yang diterima"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Pembayaran Langsung"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Coba Lagi"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Kembalikan ke pengirim jika paket tidak dapat dikirimkan"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Pendapatan"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "Untuk menutup akun ini sekarang juga, hubungi tim dukungan kami."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "Untuk menerima pembayaran, harap minta administrator untuk menonaktifkan WooCommerce Stripe Gateway."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "Untuk menerima pembayaran, harap nonaktifkan WooCommerce Stripe Gateway."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Untuk mengonfirmasi, silakan masukkan lagi nama pengguna Anda sebelum menutup.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Visibilitas"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Pengunjung"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/it.lproj/Localizable.strings b/WooCommerce/Resources/it.lproj/Localizable.strings index bcf1a634b8a..e1576d75e04 100644 --- a/WooCommerce/Resources/it.lproj/Localizable.strings +++ b/WooCommerce/Resources/it.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 15:54:03+0000 */ +/* Translation-Revision-Date: 2022-08-29 15:54:03+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: it */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Conferma metodo di pagamento"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Conflitto con i plugin di pagamento rilevato"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Congratulazioni, hai letto tutto."; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Continua con Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Conversione"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Impossibile eliminare il codice promozionale. Riprova."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "Impossibile attivare Paga di persona. Riprova più tardi."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Recupero dei dettagli dell'addebito non riuscito. Riprova."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Aiuto"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "La configurazione di Pagamenti di persona non è completa."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "I Pagamenti di persona vengono elaborati tramite WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "I pagamenti di persona possono essere elaborati tramite uno di questi fornitori di servizi di pagamento. Quale fornitore desideri utilizzare?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "Pagamenti di persona non è disponibile per questo negozio"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "I pagamenti di persona funzioneranno solo con uno dei seguenti plugin attivato. Per continuare, contatta un amministratore del sito per disattivare uno di questi plugin:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "I pagamenti di persona funzioneranno solo con uno dei seguenti plugin attivato. Per continuare disattiva uno di questi plugin:"; - /* Application's Inactive State */ "Inactive" = "Inattivo"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Sembra che tu abbia immesso una password errata. Vuoi riprovare?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Sembra che il tuo sito %@ sia un semplice sito WordPress.com che non può installare plugin. Aggiorna il tuo piano per utilizzare WooCommerce."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "Corsivo"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Accedi con un altro account"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Gestisci codice promozionale"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Gestisci i plugin"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Gestisci e modifica gli ordini in movimento"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Elenco ordinato"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Ordini"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Incolla senza formattazione"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Paga con carta o un altro metodo di pagamento accettato"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Paga di persona"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Riprova"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Restituisci al mittente se non è possibile consegnare il pacchetto"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Fatturato"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "Per chiudere questo account ora, contatta il team di supporto."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "Per ricevere pagamenti, chiedi a un amministratore di disattivare WooCommerce Stripe Gateway."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "Per ricevere pagamenti, disattiva WooCommerce Stripe Gateway."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Per confermare, inserisci nuovamente il nome utente prima di chiudere.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Visibilità"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Visitatori"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/ja.lproj/Localizable.strings b/WooCommerce/Resources/ja.lproj/Localizable.strings index a4577c3c7c5..9cb57465118 100644 --- a/WooCommerce/Resources/ja.lproj/Localizable.strings +++ b/WooCommerce/Resources/ja.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-25 09:54:03+0000 */ +/* Translation-Revision-Date: 2022-08-30 11:54:02+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: ja_JP */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "決済方法を確認"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "支払いプラグインが複数検出されました"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "すべて読み終えました !"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Apple 製品で続ける"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "コンバージョン"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "クーポンの削除に失敗しました。 再度お試しください。"; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "直接支払いを有効化できませんでした。 後でやり直してください。"; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "料金の詳細を取得できませんでした。 もう一度お試しください。"; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "ヘルプ"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "直接支払いのセットアップが完了していません。"; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "オフラインでの支払いは WooCommerce Payments で処理されます。"; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "オフラインでの支払いはこのいずれかの決済サービス業者が処理できます。 どの決済サービス業者をご利用になりますか ?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "このストアではオフラインでの支払いを使用できません"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "オフラインでの支払いは、次のプラグインのいずれかが有効化済みの場合にのみ機能します。 続行するには、サイト管理者に連絡して、次のプラグインのいずれかを無効化してください。"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "オフラインでの支払いは、次のプラグインのいずれかが有効化済みの場合にのみ機能します。 続行するには、次のプラグインのいずれかを無効化してください。"; - /* Application's Inactive State */ "Inactive" = "停止中"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "入力したパスワードが正しくないようです。もう一度試しますか ?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "ご利用のサイト %@ は、プラグインをインストールできない簡易版の WordPress.com サイトのようです。 WooCommerce を使用するには、プランをアップグレードしてください。"; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "斜体"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "別のアカウントでログイン"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "クーポンを管理"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "プラグインを管理"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "外出先でも注文を管理・編集"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "順序付きリスト"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "注文"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "書式を解除して貼り付け"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "カードまたはその他の承認された支払い方法で支払う"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "直接支払い"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "再度試す"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "荷物を配達できなかった場合、荷送人に差し戻す"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "収益"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "このアカウントをすぐにクローズする場合、弊社のサポートチームに連絡してください。"; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "支払いを受け取るには、管理者に連絡して WooCommerce Stripe Gateway を停止してください。"; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "支払いを受け取るには、WooCommerce Stripe Gateway を停止してください。"; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "確認するには、閉鎖する前のユーザーアカウントをもう一度入力してください。\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "公開状態"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "訪問者"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/ko.lproj/Localizable.strings b/WooCommerce/Resources/ko.lproj/Localizable.strings index 738c81915e5..a7d90f27b29 100644 --- a/WooCommerce/Resources/ko.lproj/Localizable.strings +++ b/WooCommerce/Resources/ko.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 13:54:04+0000 */ +/* Translation-Revision-Date: 2022-08-31 09:54:04+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: ko_KR */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "결제 수단 확인"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "충돌하는 결제 플러그인 감지됨"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "수고하셨습니다. 다 읽으셨습니다!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Apple로 계속하기"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "전환"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "쿠폰을 삭제하지 못했습니다. 다시 시도하세요."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "대면 결제 활성화 실패 나중에 다시 시도하세요."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "비용 청구 상세 정보를 가져오지 못했습니다. 다시 시도하세요."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "도움말"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "대면 결제 설정이 완료되지 않았습니다."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "대면 결제는 WooCommerce Payments를 통해 처리됩니다."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "이러한 결제 제공업체 중 하나를 통해 대면 결제를 처리할 수 있습니다. 어떤 제공업체를 사용하시겠어요?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "이 스토어에서 대면 결제 사용 불가능"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "활성화된 다음 플러그인 중 하나만 직접 결제와 연동합니다. 계속하려면 사이트 관리자에게 문의하여 다음과 같은 플러그인 중 하나를 비활성화하세요."; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "활성화된 다음 플러그인 중 하나만 직접 결제와 연동합니다. 계속하려면 다음과 같은 플러그인 중 하나를 비활성화하세요."; - /* Application's Inactive State */ "Inactive" = "비활성"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "잘못된 비밀번호를 입력하신 것 같습니다. 다시 시도해보시겠어요?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "%@ 사이트가 플러그인을 설치할 수 없는 간이 워드프레스닷컴 사이트인 것으로 보입니다. 요금제를 업그레이드하여 우커머스를 사용하세요."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "이탤릭체"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "다른 계정으로 로그인"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "쿠폰 관리"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "플러그인 관리"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "항상 주문 관리 및 편집"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "순서 있는 목록"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "주문"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "서식없이 붙여넣기"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "카드 또는 수락되는 다른 결제 수단으로 결제"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "대면 결제"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "재실행"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "패키지를 배송할 수 없는 경우 보낸 사람에게 반송"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "수익"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "이 계정을 지금 닫으려면, 지원 팀에 문의하세요."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "결제 정보를 수집하려면 관리자에게 문의하여 WooCommerce Stripe Gateway를 비활성화하세요."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "결제 정보를 수집하려면 WooCommerce Stripe Gateway를 비활성화하세요."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "확인하려면 종료하기 전에 사용자명을 다시 입력하세요.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "공개 설정"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "방문자"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/nl.lproj/Localizable.strings b/WooCommerce/Resources/nl.lproj/Localizable.strings index a1d06c489cc..4c89e316a49 100644 --- a/WooCommerce/Resources/nl.lproj/Localizable.strings +++ b/WooCommerce/Resources/nl.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-26 17:13:03+0000 */ +/* Translation-Revision-Date: 2022-08-31 16:54:05+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: nl */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Betaalmethode bevestigen"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Tegenstrijdige plugins voor betalingen gedetecteerd"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Gefeliciteerd, je hebt alles gelezen!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Doorgaan met Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Conversie"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Verwijderen van coupon mislukt. Probeer het nog eens."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "Inschakelen van fysieke betalingen mislukt. Probeer het later opnieuw."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Er is een fout opgetreden bij het ophalen van de gegevens van het bedrag. Probeer het nog eens."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Help"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "Instellen van fysieke betalingen is gereed."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "Fysieke betalingen worden verwerkt via WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "Fysieke betalingen kunnen worden verwerkt via een van deze betaalproviders. Welke provider wil je gebruiken?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "Fysieke betalingen zijn niet beschikbaar voor deze winkel"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "Fysieke betalingen werken alleen als een van de volgende plugins is geactiveerd. Om verder te gaan, neem contact op met een sitebeheerder om een van deze plugins te deactiveren:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "Fysieke betalingen werken alleen als een van de volgende plugins is geactiveerd. Deactiveer een van deze plugins om verder te gaan:"; - /* Application's Inactive State */ "Inactive" = "Inactief"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Het lijkt erop dat je een onjuist wachtwoord hebt ingevoerd. Wil je het nog eens proberen?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Het lijkt erop dat je site %@ een eenvoudige WordPress.com-site is die geen plugins kan installeren. Upgrade je abonnement om WooCommerce te kunnen gebruiken"; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "Cursief"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Log in met een ander account"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Coupon beheren"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Beheer plugins"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Beheer en bewerk bestellingen onderweg"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Geordende lijst"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Bestellingen"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Plakken zonder formatteren"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Met een kaart of andere geaccepteerde betaalmethode betalen"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Fysiek betalen"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Opnieuw"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Terugsturen naar afzender als het pakket niet kan worden geleverd"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Inkomsten"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "Om dit account direct te sluiten, kun je contact opnemen met ons ondersteuningsteam."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "Vraag een beheerder WooCommerce Stripe Gateway te deactiveren om betalingen aan te nemen."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "Deactiveer WooCommerce Stripe Gateway om betalingen aan te nemen."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Om te bevestigen, geef je je gebruikersnaam opnieuw in voor het sluiten.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Zichtbaarheid"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Bezoekers"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/pt-BR.lproj/Localizable.strings b/WooCommerce/Resources/pt-BR.lproj/Localizable.strings index c88957a1e45..e2e6527f333 100644 --- a/WooCommerce/Resources/pt-BR.lproj/Localizable.strings +++ b/WooCommerce/Resources/pt-BR.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-22 20:54:03+0000 */ +/* Translation-Revision-Date: 2022-08-31 19:54:03+0000 */ /* Plural-Forms: nplurals=2; plural=(n > 1); */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: pt_BR */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Confirmar forma de pagamento"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Conflito de plugins de pagamento detectado"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Parabéns, você leu tudo!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Continuar com Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Conversão"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Falha ao excluir cupom. Tente novamente."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "Falha ao ativar o Pagamento presencial. Tente novamente mais tarde."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Falha ao buscar detalhes da cobrança. Tente novamente."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Ajuda"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "A configuração de pagamentos presenciais está incompleta."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "Pagamentos presenciais são processados usando o WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "Pagamentos presenciais podem ser processados por qualquer um destes provedores. Qual deles você quer usar?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "O pagamento presencial não está disponível para esta loja"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "Os pagamentos presenciais só vão funcionar com um dos seguintes plugins ativados. Entre em contato com um administrador do site para desativar um destes plugins para continuar:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "Os pagamentos presenciais só vão funcionar com um dos seguintes plugins ativados. Desative um destes plugins para continuar:"; - /* Application's Inactive State */ "Inactive" = "Inativas"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Parece que você digitou com uma senha incorreta. Quer tentar novamente?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Parece que seu site %@ é um WordPress.com simples não compatível com plugins. Faça upgrade em seu plano para usar o WooCommerce."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "Itálico"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Faça login com outra conta"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Gerenciar cupom"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Gerenciar plugins"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Gerencie e edite seus pedidos de qualquer lugar"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Lista ordenada"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Pedidos"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Colar sem formatação"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Pague com cartão ou outra forma de pagamento aceita"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Pagamento presencial"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Tentar novamente"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Devolver o pacote ao remetente caso não possa ser enviado"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Receita"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "Para encerrar a conta agora, fale com nossa equipe de suporte."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "Para receber pagamentos, peça a um administrador para desativar o gateway WooCommerce Stripe."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "Para receber pagamentos, desative o gateway WooCommerce Stripe."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Para confirmar, digite novamente seu nome de usuário antes de encerrar.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Visibilidade"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Visitantes"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/release_notes.txt b/WooCommerce/Resources/release_notes.txt index b1b07a7dd64..37304938ab9 100644 --- a/WooCommerce/Resources/release_notes.txt +++ b/WooCommerce/Resources/release_notes.txt @@ -1,2 +1 @@ -This release has several fixes that makes it easier for you to take payments from the app. We’ve also added a new Help Center FAQ page that makes it easier for you to login to the app. -Please continue to send us feedback – we are listening! +Even though this release doesn’t have any new features, we still put a lot of love into it! You can now enable or disable the option to take card or cash payments on collection or delivery. We also added a new Help Center page that makes it easier for you to login to the app. diff --git a/WooCommerce/Resources/ru.lproj/Localizable.strings b/WooCommerce/Resources/ru.lproj/Localizable.strings index 5e38d47c7cb..b16f5cf697c 100644 --- a/WooCommerce/Resources/ru.lproj/Localizable.strings +++ b/WooCommerce/Resources/ru.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 11:54:04+0000 */ +/* Translation-Revision-Date: 2022-08-30 09:54:03+0000 */ /* Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: ru */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Подтвердить способ оплаты"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Обнаружены конфликтующие плагины оплаты"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Поздравляем, вы прочитали все примечания!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Вход с помощью данных Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Переход"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Не удалось удалить купон. Повторите попытку."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "Не удалось включить опцию «Очная оплата». Повторите попытку позже."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Не удалось получить сведения об оплате. Повторите попытку."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Помощь"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "Настройка очных платежей не завершена."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "Очные платежи обрабатываются через WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "Очные платежи можно обрабатывать через любую из этих платёжных систем. Какую платёжную систему вы хотите использовать?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "Очные платежи для этого магазина недоступны"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "Очные платежи будут работать только с одним из следующих активированных плагинов. Для продолжения обратитесь к администратору сайта, чтобы деактивировать один из следующих плагинов:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "Очные платежи будут работать только с одним из следующих активированных плагинов. Для продолжения деактивируйте один из следующих плагинов:"; - /* Application's Inactive State */ "Inactive" = "Неактивно"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Похоже, вы ввели неправильный пароль. Хотите попытаться ещё раз?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Похоже, ваш сайт %@ является простым сайтом WordPress.com, на котором нельзя устанавливать плагины. Обновите тарифный план для использования WooCommerce."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "Курсив"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Войдите с помощью другой учётной записи"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Управление купоном"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Управление плагинами"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Управляйте заказами и редактируйте их на ходу"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Упорядоченный список"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Заказы"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Вставить без форматирования"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Платите картой или используйте другой разрешённый способ оплаты"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Очная оплата"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Повторить"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Вернуть отправителю в случае невозможности доставки"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Доход"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "Чтобы закрыть эту учётную запись, обратитесь в службу поддержки."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "Чтобы собирать платежи, попросите администратора отключить WooCommerce Stripe Gateway."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "Чтобы собирать платежи, отключите WooCommerce Stripe Gateway."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Введите ваше имя пользователя для подтверждения закрытия.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Настройки видимости"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Посетители"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/sv.lproj/Localizable.strings b/WooCommerce/Resources/sv.lproj/Localizable.strings index d85bab63a8c..a6b88992bb9 100644 --- a/WooCommerce/Resources/sv.lproj/Localizable.strings +++ b/WooCommerce/Resources/sv.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 11:54:03+0000 */ +/* Translation-Revision-Date: 2022-09-04 09:08:21+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: sv_SE */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Bekräfta betalningsmetod"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Konflikt mellan betalningstillägg upptäckt"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Grattis, du har läst allt!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Fortsätter med Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Konvertering"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Misslyckades att ta bort rabattkod. Försök igen."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "Det gick inte att aktivera Betala personligen. Försök igen senare."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Det gick inte att hämta din debiteringsinformation. Försök igen."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Hjälp"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "Konfigurationen av Personliga betalningar har inte slutförts."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "Personliga betalningar behandlas via WooCommerce Payments."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "Personliga betalningar kan behandlas via båda dessa betalningsleverantörer. Vilken leverantör vill du använda?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "Personliga betalningar är inte tillgängliga för den här butiken"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "Personliga betalningar fungerar endast med ett av följande tillägg aktiverat. Kontakta en webbplatsadministratör för att inaktivera ett av dessa tillägg och fortsätta:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "Personliga betalningar fungerar endast med ett av följande tillägg aktiverat. Inaktivera ett av dessa tillägg för att fortsätta."; - /* Application's Inactive State */ "Inactive" = "Inaktiv"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Du verkar ha skrivit fel lösenord. Vill du försöka en gång till?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Det verkar som om din webbplats %@ är en enkel WordPress.com-webbplats som inte kan installera tillägg. Uppgradera ditt paket för att använda WooCommerce."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "Kursiv"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Logga in med ett annat konto"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Hantera rabattkod"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Hantera tillägg"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Hantera och redigera beställningar i farten "; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Sorterad lista"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Ordrar"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Klistra in utan formatering"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Betala med kort eller annan accepterad betalningsmetod"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Betala personligen"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Försök igen"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Returnera till avsändare om paketet inte kan levereras"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Inkomster"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "För att avsluta detta konto nu, kontakta vårt supportteam."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "För att ta emot betalningar, be en administratör att inaktivera WooCommerce Stripe Gateway."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "För att ta emot betalningar, inaktivera WooCommerce Stripe Gateway."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Bekräfta genom att skriva in ditt användarnamn innan kontot avslutas.\n\n%1$@"; @@ -5242,6 +5245,9 @@ This part is the link to the website, and forms part of a longer sentence which /* Instructional text shown when requesting the user's password for Google login. */ "To proceed with this Google account, please first log in with your WordPress.com password. This will only be asked once." = "För att fortsätta med detta Google-konto måste du först logga in med ditt lösenord för WordPress.com. Detta behövs bara en gång."; +/* Sign in instructions asking user to enter WordPress.com password to proceed with sign in using Apple process */ +"To proceed with this account, please first log in with your WordPress.com password. This will only be asked once." = "För att fortsätta med detta konto, logga först in med ditt WordPress.com-lösenord. Detta kommer bara att frågas en gång."; + /* Label within the modal dialog that appears when searching for a card reader */ "To turn on your card reader, briefly press its power button." = "För att starta din kortläsare, tryck kort på dess strömknapp."; @@ -5781,7 +5787,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Synlighet"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Besökare"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/tr.lproj/Localizable.strings b/WooCommerce/Resources/tr.lproj/Localizable.strings index 433651083c4..d247f6925f3 100644 --- a/WooCommerce/Resources/tr.lproj/Localizable.strings +++ b/WooCommerce/Resources/tr.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-24 12:54:03+0000 */ +/* Translation-Revision-Date: 2022-09-02 09:54:03+0000 */ /* Plural-Forms: nplurals=2; plural=(n > 1); */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: tr */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "Ödeme Yöntemini onaylayın"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "Çakışan ödeme eklentileri algılandı"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "Tebrikler, her şeyi okudunuz!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "Apple ile devam ediliyor"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "Dönüşüm"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "Kupon silinemedi. Lütfen tekrar deneyin."; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "Şahsen Ödeme etkinleştirilemedi Lütfen daha sonra tekrar deneyin."; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "Ödeme ayrıntılarınız getirilemedi. Lütfen tekrar deneyin."; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "Yardım"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "Şahsen Ödemeler Kurulumu tamamlanmadı."; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "Şahsen Ödemeler, WooCommerce Payments aracılığıyla işlenir."; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "Şahsen Ödemeler bu ödeme sağlayıcılarından herhangi biri aracılığıyla işlenebilir. Hangi sağlayıcıyı kullanmak istiyorsunuz?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "Bu mağazada Şahsen Ödemeler kullanılamıyor"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "Şahsen Ödemeler yalnızca aşağıdaki eklentilerden biri etkinleştirildiğinde çalışır. Devam etmek üzere bu eklentilerden birini devre dışı bırakması için lütfen bir site yöneticisiyle iletişime geçin:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "Şahsen Ödemeler yalnızca aşağıdaki eklentilerden biri etkinleştirildiğinde çalışır. Devam etmek için lütfen bu eklentilerden birini devre dışı bırakın:"; - /* Application's Inactive State */ "Inactive" = "Etkin değil"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "Yanış bir parola girmişsiniz gibi görünüyor. Yeniden denemek ister misiniz?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "Görünüşe göre %@ siteniz, eklenti yüklenemeyen basit bir Wordpress.com sitesi. WooCommerce kullanabilmek için lütfen paketinizi yükseltin."; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "İtalik"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "Başka Bir Hesapla Oturum Açın"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "Kuponu Yönet"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "Eklentileri Yönet"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "Hareket halindeyken siparişleri yönetin ve düzenleyin"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "Sıralanmış Liste"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "Siparişler"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "Biçimlendirmeden Yapıştır"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "Kartla veya kabul edilen başka bir ödeme yöntemiyle ödeyin"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "Şahsen Ödeyin"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "Tekrar"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "Paket teslim edilemezse gönderene iade et"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "Kazanç"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "Bu hesabı şimdi kapatmak için destek ekibimize başvurun."; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "Ödemeleri tahsil etmek için lütfen bir yöneticiden WooCommerce Stripe Ağ Geçidi'ni devre dışı bırakmasını isteyin."; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "Ödemeleri tahsil etmek için lütfen WooCommerce Stripe Ağ Geçidi'ni devre dışı bırakın."; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "Onaylamak için lütfen kapatmadan önce kullanıcı adınızı tekrar girin.\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "Görünürlük"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "Ziyaretçiler"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/zh-Hans.lproj/Localizable.strings b/WooCommerce/Resources/zh-Hans.lproj/Localizable.strings index be183064244..af7beb6cac5 100644 --- a/WooCommerce/Resources/zh-Hans.lproj/Localizable.strings +++ b/WooCommerce/Resources/zh-Hans.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 11:54:03+0000 */ +/* Translation-Revision-Date: 2022-08-30 09:54:03+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: zh_CN */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "确认付款方式"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "检测到存在冲突的付款插件"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "恭喜您,已全部阅读!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "继续使用 Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "转化"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "优惠券删除失败。 请重试。"; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "无法启用现场付款功能。 请稍后重试。"; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "获取扣费详细信息失败。 请重试。"; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "帮助"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "现场付款设置未完成。"; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "通过 WooCommerce Payments 处理现场付款。"; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "现场付款可以通过这些付款提供商中的任何一个进行处理。 您想使用哪个提供商?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "此商店不支持现场付款"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "必须启用下面其中一个插件,才能进行现场付款。 请联系站点管理员,禁用下面其中一个插件,然后再继续:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "必须启用下面其中一个插件,才能进行现场付款。 请禁用下面其中一个插件,然后再继续:"; - /* Application's Inactive State */ "Inactive" = "未激活"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "您可能输入了错误的密码。是否想重试?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "您的站点 %@ 似乎是简单的 WordPress.com 站点,无法安装插件。 请升级您的套餐来使用 WooCommerce。"; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "斜体"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "使用其他帐户登录"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "管理优惠券"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "管理插件"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "随时随地管理和编辑订单"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "有序列表"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "订单"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "不带格式粘贴"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "银行卡付款或其他可接受的付款方式"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "现场付款"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "重试"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "如果包裹无法送达,请退回给寄件人"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "收益"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "要立即关闭此帐户,请联系我们的支持团队。"; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "如需收款,需请求管理员禁用 WooCommerce Stripe Gateway。"; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "如需收款,请禁用 WooCommerce Stripe Gateway。"; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "如果您确认关闭账户,请在关闭之前重新输入您的用户名。\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "可见性"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "访客"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/Resources/zh-Hant.lproj/Localizable.strings b/WooCommerce/Resources/zh-Hant.lproj/Localizable.strings index d6125a7ba45..1599152286d 100644 --- a/WooCommerce/Resources/zh-Hant.lproj/Localizable.strings +++ b/WooCommerce/Resources/zh-Hant.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2022-08-23 09:54:03+0000 */ +/* Translation-Revision-Date: 2022-09-02 09:54:03+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: zh_TW */ @@ -1096,9 +1096,6 @@ which should be translated separately and considered part of this sentence. */ /* Button to confirm the preferred provider for In-Person Payments */ "Confirm Payment Method" = "確認付款方式"; -/* Title for the error screen when there is more than one plugin active that supports in-person payments. */ -"Conflicting payment plugins detected" = "已偵測到衝突的付款外掛程式"; - /* Title displayed if there are no inbox notes in the inbox screen. */ "Congrats, you’ve read everything!" = "恭喜,你已閱讀所有所有資訊!"; @@ -1207,7 +1204,8 @@ which should be translated separately and considered part of this sentence. */ /* Shown while logging in with Apple and the app waits for the site creation process to complete. */ "Continuing with Apple" = "繼續使用 Apple"; -/* Conversion stat label on dashboard. */ +/* Conversion stat label on dashboard. + Conversion title label for the store info widget */ "Conversion" = "轉換"; /* Copy address text button title — should be one word and as short as possible. */ @@ -2007,6 +2005,9 @@ which should be translated separately and considered part of this sentence. */ /* Error message on the Coupon Details screen when deleting coupon fails */ "Failed to delete coupon. Please try again." = "刪除優惠券失敗。 請再試一次。"; +/* Error displayed when the attempt to enable a Pay in Person checkout payment option fails */ +"Failed to enable Pay in Person. Please try again later." = "無法啟用親自收款功能。 請稍後再試一次。"; + /* Error message on the Issue Refund screen when fetching the charge details failed */ "Failed to fetch your charge details. Please try again." = "擷取您的收費詳細資訊時失敗。 請再試一次。"; @@ -2268,6 +2269,7 @@ which should be translated separately and considered part of this sentence. */ /* Help and Support navigation title Help button + Help button on Jetpack required error screen. Help button on store picker screen. */ "Help" = "幫助"; @@ -2347,9 +2349,6 @@ which should be translated separately and considered part of this sentence. */ /* Shows a notice pointing out that the user didn't finish the In-Person Payments setup, so some functionalities are disabled. */ "In-Person Payments Setup is incomplete." = "親自收款設定未完成。"; -/* Title for the error screen when there is more than one plugin active and the Stripe plugin should be deactivated */ -"In-Person Payments are processed through WooCommerce Payments." = "親自收款會透過 WooCommerce Payments 處理。"; - /* Main prompt for the screen to select the preferred provider for In-Person Payments */ "In-Person Payments can be processed through either of these payment providers. Which provider would you like to use?" = "親自收款業務可透過這些付款服務供應商處理。 你想使用哪個供應商?"; @@ -2361,12 +2360,6 @@ which should be translated separately and considered part of this sentence. */ /* Title for the error screen when the merchant's payment account has been rejected. */ "In-Person Payments isn't available for this store" = "此商店無法使用親自收款功能"; -/* Message prompting a shop manager to ask an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please contact a site administrator to deactivate one of these plugins to continue:" = "啟用下列其中一個外掛程式後,才可使用親自收款功能。 若要繼續,請聯絡網站管理員以停用其中一個外掛程式:"; - -/* Message prompting an administrator to deactivate one of two plugins */ -"In-Person Payments will only work with one of following plugins activated. Please deactivate one of these plugins to continue:" = "啟用下列其中一個外掛程式後,才可使用親自收款功能。 若要繼續,請停用其中一個外掛程式:"; - /* Application's Inactive State */ "Inactive" = "未啟用"; @@ -2525,6 +2518,9 @@ which should be translated separately and considered part of this sentence. */ /* An error message shown when a wpcom user provides the wrong password. */ "It seems like you've entered an incorrect password. Want to give it another try?" = "輸入的密碼似乎有誤。是否要再試一次?"; +/* An error message displayed when the user tries to log in to the app with a simple WP.com site. Reads like: It seems that your site google.com is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce. */ +"It seems that your site %@ is a simple WordPress.com site that cannot install plugins. Please upgrade your plan to use WooCommerce." = "你的網站 %@ 似乎是簡易的 WordPress.com 網站,因此無法安裝外掛程式。 若要使用 WooCommerce,請升級你的方案。"; + /* Accessibility label for italic button on formatting toolbar. */ "Italic" = "斜體"; @@ -2593,8 +2589,11 @@ which should be translated separately and considered part of this sentence. */ /* A label prompting users to learn more about card readers. This part is the link to the website, and forms part of a longer sentence which it should be considered a part of. + A label prompting users to learn more about In-Person Payments. +This is the link to the website, and forms part of a longer sentence which it should be considered a part of. Button title in the shipping label creation info screen Settings > Privacy Settings. A text link to the cookie policy. + The \"Learn more\" string replaces the placeholder in a label prompting users to learn more about adding Pay in Person to their checkout. Title of button shown in the Orders → All Orders tab if the list is empty. Title of button shown in the Reviews tab if the list is empty Title of button shown on the Product Reviews screen if the list is empty */ @@ -2694,7 +2693,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Action button that will restart the login flow.Presented when logging in with a site address that appears to be invalid. Action button that will restart the login flow.Presented when logging in with a site address that does not have a valid Jetpack installation - Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce */ + Action button that will restart the login flow.Presented when logging in with a site address that does not have WooCommerce + Action button that will restart the login flow.Presented when the user tries to log in to the app with a simple WP.com site. */ "Log In With Another Account" = "使用其他帳號登入"; /* Action button triggering a Log Out.Presented when logging in with a store address that does not match the account entered @@ -2766,9 +2766,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Title of the action sheet displayed from the Coupon Details screen */ "Manage Coupon" = "管理優惠券"; -/* Button to open browser to manage plugins */ -"Manage Plugins" = "管理外掛程式"; - /* Caption displayed in promotional screens shown during the login flow. */ "Manage and edit orders on the go" = "隨時隨地管理及編輯訂單"; @@ -3238,6 +3235,7 @@ This part is the link to the website, and forms part of a longer sentence which "Ordered List" = "已排序清單"; /* Orders stat label on dashboard - should be plural. + Orders title label for the store info widget The title of the Orders tab. */ "Orders" = "訂單"; @@ -3329,6 +3327,14 @@ This part is the link to the website, and forms part of a longer sentence which /* Paste without Formatting Menu Item */ "Paste without Formatting" = "貼上並且不設定格式"; +/* Customer-facing description showing more details about the Pay in Person option which is added to the store checkout when the merchant enables Pay in Person + Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person */ +"Pay by card or another accepted payment method" = "透過卡片或其他接受的付款方式付款"; + +/* Customer-facing title for the payment option added to the store checkout when the merchant enables Pay in Person + Title for a switch on the In-Person Payments menu to enable Cash on Delivery */ +"Pay in Person" = "親自收款"; + /* Payment section title Title text of the row that shows the payment headline when creating a simple payment Title text of the section that shows Payment details when creating a new order */ @@ -3993,6 +3999,8 @@ This part is the link to the website, and forms part of a longer sentence which Button to retry when there was a network error checking In-Person Payments requirements Retry Action Retry action for an error notice + Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails + Retry Action on error displayed when the attempt to toggle a Pay in Person checkout payment option fails Retry Action on the notice when loading product categories fails Retry the last action */ "Retry" = "重試"; @@ -4010,7 +4018,8 @@ This part is the link to the website, and forms part of a longer sentence which /* Title for the return policy in Customs screen of Shipping Label flow */ "Return to sender if package is unable to be delivered" = "包裹無法投遞時退還寄件者"; -/* Revenue stat label on dashboard. */ +/* Revenue stat label on dashboard. + Revenue title label for the store info widget */ "Revenue" = "收益"; /* Title of Review Order screen */ @@ -5215,12 +5224,6 @@ This part is the link to the website, and forms part of a longer sentence which /* Error message displayed when unable to close user account due to having active atomic site. */ "To close this account now, contact our support team." = "若要立即關閉此帳號,請與支援團隊聯絡。"; -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please ask an administrator to deactivate WooCommerce Stripe Gateway." = "若要收取款項,請要求管理員停用 WooCommerce Stripe Gateway。"; - -/* Message prompting an administrator to deactivate Stripe plugin */ -"To collect payments, please deactivate WooCommerce Stripe Gateway." = "若要收取款項,請停用 WooCommerce Stripe Gateway。"; - /* Close Account confirmation alert message. The %1$@ is the user's WordPress.com username. */ "To confirm, please re-enter your username before closing.\n\n%1$@" = "為進行確認,請在關閉前重新輸入你的使用者名稱。\n\n%1$@"; @@ -5781,7 +5784,8 @@ This part is the link to the website, and forms part of a longer sentence which Visibility label in Product Settings */ "Visibility" = "可見度"; -/* Visitors stat label on dashboard - should be plural. */ +/* Visitors stat label on dashboard - should be plural. + Visitors title label for the store info widget */ "Visitors" = "訪客"; /* Add a note screen - Write Note section title */ diff --git a/WooCommerce/StoreWidgets/Assets.xcassets/AccentColor.colorset/Contents.json b/WooCommerce/StoreWidgets/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000000..eb878970081 --- /dev/null +++ b/WooCommerce/StoreWidgets/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/WooCommerce/StoreWidgets/Assets.xcassets/AppIcon.appiconset/Contents.json b/WooCommerce/StoreWidgets/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..9221b9bb1a3 --- /dev/null +++ b/WooCommerce/StoreWidgets/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/WooCommerce/StoreWidgets/Assets.xcassets/Contents.json b/WooCommerce/StoreWidgets/Assets.xcassets/Contents.json new file mode 100644 index 00000000000..73c00596a7f --- /dev/null +++ b/WooCommerce/StoreWidgets/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/WooCommerce/StoreWidgets/Assets.xcassets/WidgetBackground.colorset/Contents.json b/WooCommerce/StoreWidgets/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 00000000000..eb878970081 --- /dev/null +++ b/WooCommerce/StoreWidgets/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/WooCommerce/StoreWidgets/Info.plist b/WooCommerce/StoreWidgets/Info.plist new file mode 100644 index 00000000000..0f118fb75e4 --- /dev/null +++ b/WooCommerce/StoreWidgets/Info.plist @@ -0,0 +1,11 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + + diff --git a/WooCommerce/StoreWidgets/StoreInfoProvider.swift b/WooCommerce/StoreWidgets/StoreInfoProvider.swift new file mode 100644 index 00000000000..f5ee1e0ab23 --- /dev/null +++ b/WooCommerce/StoreWidgets/StoreInfoProvider.swift @@ -0,0 +1,77 @@ +import WidgetKit + +/// Type that represents the Widget information +/// +struct StoreInfoEntry: TimelineEntry { + /// Date to request new info + /// + var date: Date + + /// Eg: Today, Weekly, Monthly, Yearly + /// + var range: String + + /// Store name + /// + var name: String + + /// Revenue at the range (eg: today) + /// + var revenue: String + + /// Visitors count at the range (eg: today) + /// + var visitors: String + + /// Order count at the range (eg: today) + /// + var orders: String + + /// Conversion at the range (eg: today) + /// + var conversion: String +} + +/// Type that provides data entries to the widget system. +/// +struct StoreInfoProvider: TimelineProvider { + /// Redacted entry with sample data. + /// + func placeholder(in context: Context) -> StoreInfoEntry { + StoreInfoEntry(date: Date(), + range: "Today", + name: "Ernest Shop", + revenue: "$132.234", + visitors: "67", + orders: "23", + conversion: "37%") + } + + /// Quick Snapshot. Required when previewing the widget. + /// TODO: Update with real data. + /// + func getSnapshot(in context: Context, completion: @escaping (StoreInfoEntry) -> Void) { + completion(StoreInfoEntry(date: Date(), + range: "Today", + name: "Ernest Shop", + revenue: "$132.234", + visitors: "67", + orders: "23", + conversion: "37%")) + } + + /// Real data widget. + /// TODO: Update with real data. + /// + func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + let entry = StoreInfoEntry(date: Date(), + range: "Today", + name: "Ernest Shop", + revenue: "$132.234", + visitors: "67", + orders: "23", + conversion: "37%") + let timeline = Timeline(entries: [entry], policy: .never) + completion(timeline) + } +} diff --git a/WooCommerce/StoreWidgets/StoreInfoViewModifiers.swift b/WooCommerce/StoreWidgets/StoreInfoViewModifiers.swift new file mode 100644 index 00000000000..c7348b8a3c9 --- /dev/null +++ b/WooCommerce/StoreWidgets/StoreInfoViewModifiers.swift @@ -0,0 +1,55 @@ +import Foundation +import SwiftUI + +// MARK: StoreInfo widget view modifiers. + +public struct StoreNameStyle: ViewModifier { + public func body(content: Content) -> some View { + content + .font(.footnote.weight(.bold)) + .foregroundColor(Color(.textInverted)) + } +} + +public struct StatRangeStyle: ViewModifier { + public func body(content: Content) -> some View { + content + .font(.caption) + .foregroundColor(Color(.lightText)) + } +} + +public struct StatTitleStyle: ViewModifier { + public func body(content: Content) -> some View { + content + .font(.caption.bold()) + .foregroundColor(Color(.lightText)) + } +} + +public struct StatValueStyle: ViewModifier { + public func body(content: Content) -> some View { + content + .font(.title2) + .foregroundColor(Color(.textInverted)) + } +} + +// MARK: View Extensions. +extension View { + func storeNameStyle() -> some View { + self.modifier(StoreNameStyle()) + } + + func statRangeStyle() -> some View { + self.modifier(StatRangeStyle()) + } + + func statTitleStyle() -> some View { + self.modifier(StatTitleStyle()) + } + + func statValueStyle() -> some View { + self.modifier(StatValueStyle()) + } +} diff --git a/WooCommerce/StoreWidgets/StoreInfoWidget.swift b/WooCommerce/StoreWidgets/StoreInfoWidget.swift new file mode 100644 index 00000000000..56fdb1d3df4 --- /dev/null +++ b/WooCommerce/StoreWidgets/StoreInfoWidget.swift @@ -0,0 +1,125 @@ +import WidgetKit +import SwiftUI +import WooFoundation +import Experiments + +/// Main StoreInfo Widget type. +/// +struct StoreInfoWidget: Widget { + + let enableWidgets = DefaultFeatureFlagService().isFeatureFlagEnabled(.storeWidgets) + + var body: some WidgetConfiguration { + StaticConfiguration(kind: "StoreInfoWidget", provider: StoreInfoProvider()) { entry in + StoreInfoView(entry: entry) + } + .configurationDisplayName("Store Info") + .supportedFamilies(enableWidgets ? [.systemMedium] : []) + } +} + +/// StoreInfo Widget View +/// +struct StoreInfoView: View { + + // Entry to render + let entry: StoreInfoEntry + + var body: some View { + ZStack { + // Background + Color(.brand) + + VStack(spacing: Layout.sectionSpacing) { + // Store Name + HStack { + Text(entry.name) + .storeNameStyle() + + Spacer() + + Text(entry.range) + .statRangeStyle() + } + + // Revenue & Visitors + HStack() { + VStack(alignment: .leading, spacing: Layout.cardSpacing) { + Text(Localization.revenue) + .statTitleStyle() + + Text(entry.revenue) + .statValueStyle() + + } + .frame(maxWidth: .infinity, alignment: .leading) + + VStack(alignment: .leading, spacing: Layout.cardSpacing) { + Text(Localization.visitors) + .statTitleStyle() + + Text(entry.visitors) + .statValueStyle() + } + .frame(maxWidth: .infinity, alignment: .leading) + } + + // Orders & Conversion + HStack { + VStack(alignment: .leading, spacing: Layout.cardSpacing) { + Text(Localization.orders) + .statTitleStyle() + + Text(entry.orders) + .statValueStyle() + } + .frame(maxWidth: .infinity, alignment: .leading) + + VStack(alignment: .leading, spacing: Layout.cardSpacing) { + Text(Localization.conversion) + .statTitleStyle() + + Text(entry.conversion) + .statValueStyle() + } + .frame(maxWidth: .infinity, alignment: .leading) + + } + } + .padding(.horizontal) + } + } +} + +/// Constants definition +/// +private extension StoreInfoView { + enum Localization { + static let revenue = NSLocalizedString("Revenue", comment: "Revenue title label for the store info widget") + static let visitors = NSLocalizedString("Visitors", comment: "Visitors title label for the store info widget") + static let orders = NSLocalizedString("Orders", comment: "Orders title label for the store info widget") + static let conversion = NSLocalizedString("Conversion", comment: "Conversion title label for the store info widget") + } + + enum Layout { + static let sectionSpacing = 8.0 + static let cardSpacing = 2.0 + } +} + +// MARK: Previews + +struct StoreWidgets_Previews: PreviewProvider { + static var previews: some View { + StoreInfoView( + entry: StoreInfoEntry(date: Date(), + range: "Today", + name: "Ernest Shop", + revenue: "$132.234", + visitors: "67", + orders: "23", + conversion: "37%") + ) + .previewContext(WidgetPreviewContext(family: .systemMedium)) + } +} diff --git a/WooCommerce/StoreWidgets/StoreWidgets.intentdefinition b/WooCommerce/StoreWidgets/StoreWidgets.intentdefinition new file mode 100644 index 00000000000..5aaeb8d2ba7 --- /dev/null +++ b/WooCommerce/StoreWidgets/StoreWidgets.intentdefinition @@ -0,0 +1,22 @@ + + + + + INEnums + + INIntentDefinitionModelVersion + 1.2 + INIntentDefinitionNamespace + 88xZPY + INIntentDefinitionSystemVersion + 21G83 + INIntentDefinitionToolsBuildVersion + 13F100 + INIntentDefinitionToolsVersion + 13.4.1 + INIntents + + INTypes + + + diff --git a/WooCommerce/StoreWidgets/StoreWidgets.swift b/WooCommerce/StoreWidgets/StoreWidgets.swift new file mode 100644 index 00000000000..95e9fce7962 --- /dev/null +++ b/WooCommerce/StoreWidgets/StoreWidgets.swift @@ -0,0 +1,12 @@ +import WidgetKit +import SwiftUI + +/// Entry point for the Widgets Extension +/// +@main +struct StoreWidgetsBundle: WidgetBundle { + var body: some Widget { + // Add here any widget you want to be available + StoreInfoWidget() + } +} diff --git a/WooCommerce/WooCommerce.xcodeproj/project.pbxproj b/WooCommerce/WooCommerce.xcodeproj/project.pbxproj index 596deac63d2..81975bcd80f 100644 --- a/WooCommerce/WooCommerce.xcodeproj/project.pbxproj +++ b/WooCommerce/WooCommerce.xcodeproj/project.pbxproj @@ -460,6 +460,7 @@ 03EF24FA28BF5D21006A033E /* InPersonPaymentsMenuViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03EF24F928BF5D21006A033E /* InPersonPaymentsMenuViewModel.swift */; }; 03EF24FC28BF996F006A033E /* InPersonPaymentsCashOnDeliveryPaymentGatewayHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03EF24FB28BF996F006A033E /* InPersonPaymentsCashOnDeliveryPaymentGatewayHelpers.swift */; }; 03EF24FE28C0B356006A033E /* CardPresentPaymentsPlugin+CashOnDelivery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03EF24FD28C0B356006A033E /* CardPresentPaymentsPlugin+CashOnDelivery.swift */; }; + 03EF250028C0E9EE006A033E /* InPersonPaymentsMenuViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03EF24FF28C0E9EE006A033E /* InPersonPaymentsMenuViewModelTests.swift */; }; 03FBDA9D263AD49200ACE257 /* CouponListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03FBDA9C263AD49100ACE257 /* CouponListViewController.swift */; }; 03FBDAA3263AED2F00ACE257 /* CouponListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 03FBDAA2263AED2F00ACE257 /* CouponListViewController.xib */; }; 03FBDAF2263EE47C00ACE257 /* CouponListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03FBDAF1263EE47C00ACE257 /* CouponListViewModel.swift */; }; @@ -528,6 +529,9 @@ 26578C4126277AFF00A15097 /* OrderAddOnsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26578C4026277AFF00A15097 /* OrderAddOnsListViewController.swift */; }; 265BCA0C2430E741004E53EE /* ProductCategoryTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265BCA0B2430E741004E53EE /* ProductCategoryTableViewCell.swift */; }; 265BCA0E2430E771004E53EE /* ProductCategoryTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 265BCA0D2430E771004E53EE /* ProductCategoryTableViewCell.xib */; }; + 265C99E228B9BCD0005E6117 /* StoreInfoWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265C99E028B9BA43005E6117 /* StoreInfoWidget.swift */; }; + 265C99E428B9C834005E6117 /* StoreInfoProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265C99E328B9C834005E6117 /* StoreInfoProvider.swift */; }; + 265C99E628B9CB8E005E6117 /* StoreInfoViewModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265C99E528B9CB8E005E6117 /* StoreInfoViewModifiers.swift */; }; 265D909D2446688C00D66F0F /* ProductCategoryViewModelBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 267CFE1824435A5500AF3A13 /* ProductCategoryViewModelBuilderTests.swift */; }; 2662D90626E1571900E25611 /* ListSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2662D90526E1571900E25611 /* ListSelector.swift */; }; 2662D90826E15D6E00E25611 /* CountrySelectorCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2662D90726E15D6E00E25611 /* CountrySelectorCommand.swift */; }; @@ -589,6 +593,8 @@ 26CCBE0B2523B3650073F94D /* RefundProductsTotalTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26CCBE0A2523B3650073F94D /* RefundProductsTotalTableViewCell.swift */; }; 26CCBE0D2523C2560073F94D /* RefundProductsTotalTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 26CCBE0C2523C2560073F94D /* RefundProductsTotalTableViewCell.xib */; }; 26CFDB2727357E8000AB940B /* SimplePaymentsSummary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26CFDB2627357E8000AB940B /* SimplePaymentsSummary.swift */; }; + 26D9E54428C107F80098DF26 /* WooFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26D9E54328C107F80098DF26 /* WooFoundation.framework */; }; + 26D9E54828C10A3B0098DF26 /* Experiments.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26D9E54728C10A3B0098DF26 /* Experiments.framework */; }; 26DB7E3528636D2200506173 /* NonEditableOrderBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26DB7E3428636D2200506173 /* NonEditableOrderBanner.swift */; }; 26E0ADF12631D94D00A5EB3B /* TopBannerWrapperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26E0ADF02631D94D00A5EB3B /* TopBannerWrapperView.swift */; }; 26E0AE13263359F900A5EB3B /* View+Conditionals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26E0AE12263359F900A5EB3B /* View+Conditionals.swift */; }; @@ -689,6 +695,13 @@ 3F0CF3142704494A00EF3D71 /* TabNavComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F997172F23DBCEB200592D8E /* TabNavComponent.swift */; }; 3F1CA81D26C3542600228BF2 /* XCUITestHelpers in Frameworks */ = {isa = PBXBuildFile; productRef = 3F1CA81C26C3542600228BF2 /* XCUITestHelpers */; }; 3F1CA81F26C3543C00228BF2 /* XCUITestHelpers in Frameworks */ = {isa = PBXBuildFile; productRef = 3F1CA81E26C3543C00228BF2 /* XCUITestHelpers */; }; + 3F1FA84228B60125009E246C /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F1FA84128B60125009E246C /* WidgetKit.framework */; }; + 3F1FA84328B60125009E246C /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5744BEB0248FE44C000A6FE2 /* SwiftUI.framework */; }; + 3F1FA84628B60125009E246C /* StoreWidgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F1FA84528B60125009E246C /* StoreWidgets.swift */; }; + 3F1FA84928B60126009E246C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3F1FA84828B60126009E246C /* Assets.xcassets */; }; + 3F1FA84B28B60126009E246C /* StoreWidgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 3F1FA84728B60125009E246C /* StoreWidgets.intentdefinition */; }; + 3F1FA84C28B60126009E246C /* StoreWidgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 3F1FA84728B60125009E246C /* StoreWidgets.intentdefinition */; }; + 3F1FA84F28B60126009E246C /* StoreWidgetsExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 3F1FA84028B60125009E246C /* StoreWidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 3F2C8A19285B038800B1A5BB /* BuildkiteTestCollector in Frameworks */ = {isa = PBXBuildFile; productRef = 3F2C8A18285B038800B1A5BB /* BuildkiteTestCollector */; }; 3F2C8A1B285B039900B1A5BB /* BuildkiteTestCollector in Frameworks */ = {isa = PBXBuildFile; productRef = 3F2C8A1A285B039900B1A5BB /* BuildkiteTestCollector */; }; 3F2C8A1D285B03A400B1A5BB /* BuildkiteTestCollector in Frameworks */ = {isa = PBXBuildFile; productRef = 3F2C8A1C285B03A400B1A5BB /* BuildkiteTestCollector */; }; @@ -1085,6 +1098,7 @@ 80C362732779A7EF005CEAD3 /* products_reviews_all.json in Resources */ = {isa = PBXBuildFile; fileRef = 80C362722779A7EF005CEAD3 /* products_reviews_all.json */; }; 80E6FC6D276312D50086CD67 /* products.json in Resources */ = {isa = PBXBuildFile; fileRef = CCFC00C923E9BD5500157A78 /* products.json */; }; 80E6FC79276C3FD60086CD67 /* MockDataReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E6FC742763579D0086CD67 /* MockDataReader.swift */; }; + 8194A48313C34FE1782D51BC /* Pods_StoreWidgetsExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2886DE5218EEA78ABAF0BE67 /* Pods_StoreWidgetsExtension.framework */; }; 86DBBB0BDEA3488E2BEBB314 /* Pods_WooCommerce.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BABE5E07DD787ECA6D2A76DE /* Pods_WooCommerce.framework */; }; 8CD41D4A21F8A7E300CF3C2B /* RELEASE-NOTES.txt in Resources */ = {isa = PBXBuildFile; fileRef = 8CD41D4921F8A7E300CF3C2B /* RELEASE-NOTES.txt */; }; 933A27372222354600C2143A /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 933A27362222354600C2143A /* Logging.swift */; }; @@ -1279,6 +1293,7 @@ B92FF9AE27FC7217005C34E3 /* OrderListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B92FF9AD27FC7217005C34E3 /* OrderListViewController.xib */; }; B92FF9B027FC7821005C34E3 /* ProductsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B92FF9AF27FC7821005C34E3 /* ProductsViewController.xib */; }; B94403C9289ABB4D00323FC2 /* SimplePaymentsAmountFlowOpener.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94403C8289ABB4D00323FC2 /* SimplePaymentsAmountFlowOpener.swift */; }; + B95112DA28BF79CA00D9578D /* PaymentsRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = B95112D928BF79CA00D9578D /* PaymentsRoute.swift */; }; B958A7C728B3D44A00823EEF /* UniversalLinkRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B958A7C628B3D44A00823EEF /* UniversalLinkRouter.swift */; }; B958A7C928B3D47B00823EEF /* Route.swift in Sources */ = {isa = PBXBuildFile; fileRef = B958A7C828B3D47B00823EEF /* Route.swift */; }; B958A7CB28B3D4A100823EEF /* RouteMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = B958A7CA28B3D4A100823EEF /* RouteMatcher.swift */; }; @@ -1792,6 +1807,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 3F1FA84D28B60126009E246C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B56DB3BE2049BFAA00D4AA8E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3F1FA83F28B60125009E246C; + remoteInfo = StoreWidgetsExtension; + }; 3FF314EB26FC76C60012E68E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = B56DB3BE2049BFAA00D4AA8E /* Project object */; @@ -1848,6 +1870,27 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + 26D9E54628C107F80098DF26 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 3F1FA85028B60126009E246C /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 3F1FA84F28B60126009E246C /* StoreWidgetsExtension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; B5650B1020A4CD7F009702D0 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -2310,6 +2353,7 @@ 03EF24F928BF5D21006A033E /* InPersonPaymentsMenuViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsMenuViewModel.swift; sourceTree = ""; }; 03EF24FB28BF996F006A033E /* InPersonPaymentsCashOnDeliveryPaymentGatewayHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsCashOnDeliveryPaymentGatewayHelpers.swift; sourceTree = ""; }; 03EF24FD28C0B356006A033E /* CardPresentPaymentsPlugin+CashOnDelivery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CardPresentPaymentsPlugin+CashOnDelivery.swift"; sourceTree = ""; }; + 03EF24FF28C0E9EE006A033E /* InPersonPaymentsMenuViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsMenuViewModelTests.swift; sourceTree = ""; }; 03FBDA9C263AD49100ACE257 /* CouponListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponListViewController.swift; sourceTree = ""; }; 03FBDAA2263AED2F00ACE257 /* CouponListViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CouponListViewController.xib; sourceTree = ""; }; 03FBDAF1263EE47C00ACE257 /* CouponListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponListViewModel.swift; sourceTree = ""; }; @@ -2373,6 +2417,9 @@ 26578C4026277AFF00A15097 /* OrderAddOnsListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderAddOnsListViewController.swift; sourceTree = ""; }; 265BCA0B2430E741004E53EE /* ProductCategoryTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductCategoryTableViewCell.swift; sourceTree = ""; }; 265BCA0D2430E771004E53EE /* ProductCategoryTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProductCategoryTableViewCell.xib; sourceTree = ""; }; + 265C99E028B9BA43005E6117 /* StoreInfoWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreInfoWidget.swift; sourceTree = ""; }; + 265C99E328B9C834005E6117 /* StoreInfoProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreInfoProvider.swift; sourceTree = ""; }; + 265C99E528B9CB8E005E6117 /* StoreInfoViewModifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreInfoViewModifiers.swift; sourceTree = ""; }; 2662D90526E1571900E25611 /* ListSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListSelector.swift; sourceTree = ""; }; 2662D90726E15D6E00E25611 /* CountrySelectorCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountrySelectorCommand.swift; sourceTree = ""; }; 2662D90926E16B3600E25611 /* FilterListSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterListSelector.swift; sourceTree = ""; }; @@ -2434,6 +2481,8 @@ 26CCBE0A2523B3650073F94D /* RefundProductsTotalTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefundProductsTotalTableViewCell.swift; sourceTree = ""; }; 26CCBE0C2523C2560073F94D /* RefundProductsTotalTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RefundProductsTotalTableViewCell.xib; sourceTree = ""; }; 26CFDB2627357E8000AB940B /* SimplePaymentsSummary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimplePaymentsSummary.swift; sourceTree = ""; }; + 26D9E54328C107F80098DF26 /* WooFoundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = WooFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 26D9E54728C10A3B0098DF26 /* Experiments.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Experiments.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 26DB7E3428636D2200506173 /* NonEditableOrderBanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NonEditableOrderBanner.swift; sourceTree = ""; }; 26E0ADF02631D94D00A5EB3B /* TopBannerWrapperView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopBannerWrapperView.swift; sourceTree = ""; }; 26E0AE12263359F900A5EB3B /* View+Conditionals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Conditionals.swift"; sourceTree = ""; }; @@ -2456,6 +2505,7 @@ 26FE09E324DCFE5200B9BDF5 /* InAppFeedbackCardViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InAppFeedbackCardViewControllerTests.swift; sourceTree = ""; }; 26FF455E24BE49EE00B3B2F4 /* DeprecatedStatsDashboardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeprecatedStatsDashboardViewController.swift; sourceTree = ""; }; 2719B6FD1E6FE78A76B6AC74 /* Pods-WooCommerceTests.release-alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WooCommerceTests.release-alpha.xcconfig"; path = "../Pods/Target Support Files/Pods-WooCommerceTests/Pods-WooCommerceTests.release-alpha.xcconfig"; sourceTree = ""; }; + 2886DE5218EEA78ABAF0BE67 /* Pods_StoreWidgetsExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_StoreWidgetsExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 310D1B472734919E001D55B4 /* InPersonPaymentsLiveSiteInTestModeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsLiveSiteInTestModeView.swift; sourceTree = ""; }; 311237ED2714DA240033C44E /* CardPresentModalDisplayMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPresentModalDisplayMessage.swift; sourceTree = ""; }; 311D21E7264AEDB900102316 /* CardPresentModalScanningForReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPresentModalScanningForReader.swift; sourceTree = ""; }; @@ -2511,6 +2561,12 @@ 31FE28C125E6D338003519F2 /* LearnMoreTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LearnMoreTableViewCell.swift; sourceTree = ""; }; 31FE28C725E6D384003519F2 /* LearnMoreTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LearnMoreTableViewCell.xib; sourceTree = ""; }; 33035144757869DE5E4DC88A /* Pods-WooCommerce.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WooCommerce.release.xcconfig"; path = "../Pods/Target Support Files/Pods-WooCommerce/Pods-WooCommerce.release.xcconfig"; sourceTree = ""; }; + 3F1FA84028B60125009E246C /* StoreWidgetsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = StoreWidgetsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 3F1FA84128B60125009E246C /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + 3F1FA84528B60125009E246C /* StoreWidgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreWidgets.swift; sourceTree = ""; }; + 3F1FA84728B60125009E246C /* StoreWidgets.intentdefinition */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; path = StoreWidgets.intentdefinition; sourceTree = ""; }; + 3F1FA84828B60126009E246C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 3F1FA84A28B60126009E246C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3F271A9728A2684400E656AE /* UITests.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = UITests.xctestplan; sourceTree = ""; }; 3F58701E281B947E004F7556 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 3F587020281B9494004F7556 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; @@ -2857,6 +2913,7 @@ 77E53EBE2510C153003D385F /* ProductDownloadListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductDownloadListViewModel.swift; sourceTree = ""; }; 77E53EC42510C193003D385F /* ProductDownloadListViewController+Droppable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProductDownloadListViewController+Droppable.swift"; sourceTree = ""; }; 77E53EC72510FE07003D385F /* ProductDownloadsEditableData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductDownloadsEditableData.swift; sourceTree = ""; }; + 7D4CEC625891A6F236907541 /* Pods-StoreWidgetsExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StoreWidgetsExtension.release.xcconfig"; path = "../Pods/Target Support Files/Pods-StoreWidgetsExtension/Pods-StoreWidgetsExtension.release.xcconfig"; sourceTree = ""; }; 7E6A01962725B811001668D5 /* FilterProductCategoryListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterProductCategoryListViewController.swift; sourceTree = ""; }; 7E6A019E2725CD76001668D5 /* FilterProductCategoryListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterProductCategoryListViewModel.swift; sourceTree = ""; }; 7E6A01A02725DEDE001668D5 /* FilterProductCategoryListViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterProductCategoryListViewModelTests.swift; sourceTree = ""; }; @@ -3132,6 +3189,7 @@ B92FF9AD27FC7217005C34E3 /* OrderListViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OrderListViewController.xib; sourceTree = ""; }; B92FF9AF27FC7821005C34E3 /* ProductsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ProductsViewController.xib; sourceTree = ""; }; B94403C8289ABB4D00323FC2 /* SimplePaymentsAmountFlowOpener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimplePaymentsAmountFlowOpener.swift; sourceTree = ""; }; + B95112D928BF79CA00D9578D /* PaymentsRoute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentsRoute.swift; sourceTree = ""; }; B958A7C628B3D44A00823EEF /* UniversalLinkRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UniversalLinkRouter.swift; sourceTree = ""; }; B958A7C828B3D47B00823EEF /* Route.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Route.swift; sourceTree = ""; }; B958A7CA28B3D4A100823EEF /* RouteMatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RouteMatcher.swift; sourceTree = ""; }; @@ -3165,6 +3223,7 @@ C044961228058FE8003B3081 /* AddProductScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddProductScreen.swift; sourceTree = ""; }; C0A37CB7282957EB00E0826D /* orders_3337_add_customer_details.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = orders_3337_add_customer_details.json; sourceTree = ""; }; C0CE1F83282AB1590019138E /* countries.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = countries.json; sourceTree = ""; }; + CB4839361AA061340BE98DA9 /* Pods-StoreWidgetsExtension.release-alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StoreWidgetsExtension.release-alpha.xcconfig"; path = "../Pods/Target Support Files/Pods-StoreWidgetsExtension/Pods-StoreWidgetsExtension.release-alpha.xcconfig"; sourceTree = ""; }; CC0324A2263AD9F40056C6B7 /* MockShippingLabelAccountSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockShippingLabelAccountSettings.swift; sourceTree = ""; }; CC078530266E706300BA9AC1 /* ErrorTopBannerFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorTopBannerFactory.swift; sourceTree = ""; }; CC07860426736B6500BA9AC1 /* ErrorTopBannerFactoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorTopBannerFactoryTests.swift; sourceTree = ""; }; @@ -3478,6 +3537,7 @@ D8F3A97E258865BD0085859B /* PasswordScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordScreen.swift; sourceTree = ""; }; D8F82AC422AF903700B67E4B /* IconsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = IconsTests.swift; path = WooCommerceTests/Extensions/IconsTests.swift; sourceTree = SOURCE_ROOT; }; D8FBFF1622D4CC2F006E3336 /* docs */ = {isa = PBXFileReference; lastKnownFileType = folder; name = docs; path = ../docs; sourceTree = ""; }; + DA1AE99A10B90748C7676E95 /* Pods-StoreWidgetsExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StoreWidgetsExtension.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-StoreWidgetsExtension/Pods-StoreWidgetsExtension.debug.xcconfig"; sourceTree = ""; }; DE001322279A793A00EB0350 /* CouponWooTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponWooTests.swift; sourceTree = ""; }; DE0A2EA9281BA083007A8015 /* ProductCategoryList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductCategoryList.swift; sourceTree = ""; }; DE0A2EAC281BA1FA007A8015 /* ProductCategorySelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductCategorySelector.swift; sourceTree = ""; }; @@ -3678,6 +3738,18 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 3F1FA83D28B60125009E246C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3F1FA84328B60125009E246C /* SwiftUI.framework in Frameworks */, + 26D9E54428C107F80098DF26 /* WooFoundation.framework in Frameworks */, + 3F1FA84228B60125009E246C /* WidgetKit.framework in Frameworks */, + 8194A48313C34FE1782D51BC /* Pods_StoreWidgetsExtension.framework in Frameworks */, + 26D9E54828C10A3B0098DF26 /* Experiments.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 3FF314DB26FC74450012E68E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -4752,6 +4824,7 @@ isa = PBXGroup; children = ( 03A6C18228B52ADB00AADF23 /* Onboarding Errors */, + 03EF24FF28C0E9EE006A033E /* InPersonPaymentsMenuViewModelTests.swift */, ); path = "In-Person Payments"; sourceTree = ""; @@ -5237,6 +5310,20 @@ path = CardReaderTableViewCells; sourceTree = ""; }; + 3F1FA84428B60125009E246C /* StoreWidgets */ = { + isa = PBXGroup; + children = ( + 3F1FA84528B60125009E246C /* StoreWidgets.swift */, + 265C99E028B9BA43005E6117 /* StoreInfoWidget.swift */, + 265C99E328B9C834005E6117 /* StoreInfoProvider.swift */, + 265C99E528B9CB8E005E6117 /* StoreInfoViewModifiers.swift */, + 3F1FA84728B60125009E246C /* StoreWidgets.intentdefinition */, + 3F1FA84828B60126009E246C /* Assets.xcassets */, + 3F1FA84A28B60126009E246C /* Info.plist */, + ); + path = StoreWidgets; + sourceTree = ""; + }; 3FF314DF26FC74450012E68E /* UITestsFoundation */ = { isa = PBXGroup; children = ( @@ -6258,6 +6345,8 @@ 88A44ABE866401E6DB03AC60 /* Frameworks */ = { isa = PBXGroup; children = ( + 26D9E54728C10A3B0098DF26 /* Experiments.framework */, + 26D9E54328C107F80098DF26 /* WooFoundation.framework */, B9151B3E2840EB330036180F /* WooFoundation.framework */, 80E6FC6E276325F60086CD67 /* Clibsodium.xcframework */, 02AB82EB27069D5D008D7334 /* Experiments.framework */, @@ -6272,6 +6361,8 @@ B5C3B5E220D189E60072CB9D /* Networking.framework */, BABE5E07DD787ECA6D2A76DE /* Pods_WooCommerce.framework */, 6DC4526F9A7357761197EBF0 /* Pods_WooCommerceTests.framework */, + 3F1FA84128B60125009E246C /* WidgetKit.framework */, + 2886DE5218EEA78ABAF0BE67 /* Pods_StoreWidgetsExtension.framework */, ); name = Frameworks; sourceTree = ""; @@ -6525,6 +6616,7 @@ F997170323DBB97500592D8E /* WooCommerceScreenshots */, CCDC49CB23FFFFF4003166BA /* WooCommerceUITests */, 3FF314DF26FC74450012E68E /* UITestsFoundation */, + 3F1FA84428B60125009E246C /* StoreWidgets */, 88A44ABE866401E6DB03AC60 /* Frameworks */, B56DB3C72049BFAA00D4AA8E /* Products */, 8CD41D4921F8A7E300CF3C2B /* RELEASE-NOTES.txt */, @@ -6543,6 +6635,7 @@ F997170223DBB97500592D8E /* WooCommerceScreenshots.xctest */, CCDC49CA23FFFFF4003166BA /* WooCommerceUITests.xctest */, 3FF314DE26FC74450012E68E /* UITestsFoundation.framework */, + 3F1FA84028B60125009E246C /* StoreWidgetsExtension.appex */, ); name = Products; sourceTree = ""; @@ -6936,6 +7029,7 @@ children = ( B958A7CC28B3DD9100823EEF /* OrderDetailsRoute.swift */, B958A7C828B3D47B00823EEF /* Route.swift */, + B95112D928BF79CA00D9578D /* PaymentsRoute.swift */, ); path = Routes; sourceTree = ""; @@ -8357,6 +8451,9 @@ 8A659E65308A3D9DD79A95F9 /* Pods-WooCommerceTests.release.xcconfig */, 25D00C97936D2C6589F8ECE9 /* Pods-WooCommerce.release-alpha.xcconfig */, 2719B6FD1E6FE78A76B6AC74 /* Pods-WooCommerceTests.release-alpha.xcconfig */, + DA1AE99A10B90748C7676E95 /* Pods-StoreWidgetsExtension.debug.xcconfig */, + 7D4CEC625891A6F236907541 /* Pods-StoreWidgetsExtension.release.xcconfig */, + CB4839361AA061340BE98DA9 /* Pods-StoreWidgetsExtension.release-alpha.xcconfig */, ); name = Pods; sourceTree = ""; @@ -8474,6 +8571,25 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 3F1FA83F28B60125009E246C /* StoreWidgetsExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3F1FA85428B60126009E246C /* Build configuration list for PBXNativeTarget "StoreWidgetsExtension" */; + buildPhases = ( + 5F0CE4E06C2CFA36FC2FD62B /* [CP] Check Pods Manifest.lock */, + 3F1FA83C28B60125009E246C /* Sources */, + 3F1FA83D28B60125009E246C /* Frameworks */, + 3F1FA83E28B60125009E246C /* Resources */, + 26D9E54628C107F80098DF26 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StoreWidgetsExtension; + productName = StoreWidgetsExtension; + productReference = 3F1FA84028B60125009E246C /* StoreWidgetsExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; 3FF314DD26FC74450012E68E /* UITestsFoundation */ = { isa = PBXNativeTarget; buildConfigurationList = 3FF314E526FC74450012E68E /* Build configuration list for PBXNativeTarget "UITestsFoundation" */; @@ -8508,11 +8624,13 @@ B5650B1020A4CD7F009702D0 /* Embed Frameworks */, B7A94351C1ADC31EA528B895 /* [CP] Embed Pods Frameworks */, 095040D72655531C001D08FA /* Check for nested frameworks */, + 3F1FA85028B60126009E246C /* Embed App Extensions */, ); buildRules = ( ); dependencies = ( B55D4C1520B6131400D7A50F /* PBXTargetDependency */, + 3F1FA84E28B60126009E246C /* PBXTargetDependency */, ); name = WooCommerce; packageProductDependencies = ( @@ -8606,10 +8724,13 @@ B56DB3BE2049BFAA00D4AA8E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1130; + LastSwiftUpdateCheck = 1340; LastUpgradeCheck = 1210; ORGANIZATIONNAME = Automattic; TargetAttributes = { + 3F1FA83F28B60125009E246C = { + CreatedOnToolsVersion = 13.4.1; + }; 3FF314DD26FC74450012E68E = { CreatedOnToolsVersion = 13.0; }; @@ -8699,11 +8820,20 @@ F997170123DBB97500592D8E /* WooCommerceScreenshots */, CCDC49C923FFFFF4003166BA /* WooCommerceUITests */, 3FF314DD26FC74450012E68E /* UITestsFoundation */, + 3F1FA83F28B60125009E246C /* StoreWidgetsExtension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 3F1FA83E28B60125009E246C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3F1FA84928B60126009E246C /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 3FF314DC26FC74450012E68E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -9035,6 +9165,28 @@ shellPath = /bin/bash; shellScript = "$SRCROOT/../Scripts/build-phases/swiftlint.sh\n"; }; + 5F0CE4E06C2CFA36FC2FD62B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-StoreWidgetsExtension-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 91990E72B3E1D58AC13D7628 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -9111,6 +9263,18 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 3F1FA83C28B60125009E246C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 265C99E628B9CB8E005E6117 /* StoreInfoViewModifiers.swift in Sources */, + 3F1FA84B28B60126009E246C /* StoreWidgets.intentdefinition in Sources */, + 265C99E228B9BCD0005E6117 /* StoreInfoWidget.swift in Sources */, + 265C99E428B9C834005E6117 /* StoreInfoProvider.swift in Sources */, + 3F1FA84628B60125009E246C /* StoreWidgets.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 3FF314DA26FC74450012E68E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -9187,6 +9351,7 @@ 024DF31E23743045006658FE /* TextList+AztecFormatting.swift in Sources */, 0260F40123224E8100EDA10A /* ProductsViewController.swift in Sources */, DE4D308928507B5B00E36ADD /* CouponCreationSuccess.swift in Sources */, + B95112DA28BF79CA00D9578D /* PaymentsRoute.swift in Sources */, 7E6A019F2725CD76001668D5 /* FilterProductCategoryListViewModel.swift in Sources */, CC53FB3C2757EC7200C4CA4F /* ProductSelectorViewModel.swift in Sources */, 4569D3C325DC008700CDC3E2 /* SiteAddress.swift in Sources */, @@ -10152,6 +10317,7 @@ 6856DB2E741639716E149967 /* KeyboardStateProvider.swift in Sources */, ABC35F18E744C5576B986CB3 /* InPersonPaymentsUnavailableView.swift in Sources */, ABC35528D2D6BE6F516E5CEF /* InPersonPaymentsOnboardingError.swift in Sources */, + 3F1FA84C28B60126009E246C /* StoreWidgets.intentdefinition in Sources */, ABC3521A374A2355001E3CD6 /* CardReaderSettingsSearchingViewController.swift in Sources */, 532842FC64B572D4545BD98E /* OrderFormCustomerNoteViewModel.swift in Sources */, 532846FAFFFCA93169B5E0BC /* WaitingTimeTracker.swift in Sources */, @@ -10428,6 +10594,7 @@ 021125B82578ECF10075AD2A /* BoldableTextParserTests.swift in Sources */, 4569D3F425DC1BFF00CDC3E2 /* ShippingLabelFormViewModelTests.swift in Sources */, 57F2C6CD246DECC10074063B /* SummaryTableViewCellViewModelTests.swift in Sources */, + 03EF250028C0E9EE006A033E /* InPersonPaymentsMenuViewModelTests.swift in Sources */, 02A275C423FE5B64005C560F /* MockPHAssetImageLoader.swift in Sources */, 456738972743DE9A00743054 /* OrderDateRangeFilterTests.swift in Sources */, A650BE872578E76600C655E0 /* MockStorageManager.swift in Sources */, @@ -10620,6 +10787,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 3F1FA84E28B60126009E246C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3F1FA83F28B60125009E246C /* StoreWidgetsExtension */; + targetProxy = 3F1FA84D28B60126009E246C /* PBXContainerItemProxy */; + }; 3FF314EC26FC76C60012E68E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 3FF314DD26FC74450012E68E /* UITestsFoundation */; @@ -10768,6 +10940,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 25D00C97936D2C6589F8ECE9 /* Pods-WooCommerce.release-alpha.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = "Resources/Woo-Alpha.entitlements"; "CODE_SIGN_ENTITLEMENTS[sdk=macosx*]" = "Resources/Woo-Alpha-macOS.entitlements"; @@ -10827,6 +11000,111 @@ }; name = "Release-Alpha"; }; + 3F1FA85128B60126009E246C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DA1AE99A10B90748C7676E95 /* Pods-StoreWidgetsExtension.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PZYM8XX95Q; + ENABLE_BITCODE = NO; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = StoreWidgets/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = StoreWidgets; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Automattic. All rights reserved."; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.automattic.woocommerce.storewidgets; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = "WooCommerce Store Widgets Development"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 3F1FA85228B60126009E246C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7D4CEC625891A6F236907541 /* Pods-StoreWidgetsExtension.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PZYM8XX95Q; + ENABLE_BITCODE = NO; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = StoreWidgets/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = StoreWidgets; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Automattic. All rights reserved."; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.automattic.woocommerce.storewidgets; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.automattic.woocommerce.storewidgets"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 3F1FA85328B60126009E246C /* Release-Alpha */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CB4839361AA061340BE98DA9 /* Pods-StoreWidgetsExtension.release-alpha.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 99KV9Z6BKV; + ENABLE_BITCODE = NO; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = StoreWidgets/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = StoreWidgets; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Automattic. All rights reserved."; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.automattic.alpha.woocommerce.storewidgets; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = "match InHouse com.automattic.alpha.woocommerce.storewidgets"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Release-Alpha"; + }; 3FF314E226FC74450012E68E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -11077,6 +11355,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 90AC1C0B391E04A837BDC64E /* Pods-WooCommerce.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = "Resources/Woo-Debug.entitlements"; "CODE_SIGN_ENTITLEMENTS[sdk=macosx*]" = "Resources/Woo-Debug-macOS.entitlements"; @@ -11108,6 +11387,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 33035144757869DE5E4DC88A /* Pods-WooCommerce.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = "Resources/Woo-Release.entitlements"; "CODE_SIGN_ENTITLEMENTS[sdk=macosx*]" = "Resources/Woo-Release-macOS.entitlements"; @@ -11319,6 +11599,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 3F1FA85428B60126009E246C /* Build configuration list for PBXNativeTarget "StoreWidgetsExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3F1FA85128B60126009E246C /* Debug */, + 3F1FA85228B60126009E246C /* Release */, + 3F1FA85328B60126009E246C /* Release-Alpha */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 3FF314E526FC74450012E68E /* Build configuration list for PBXNativeTarget "UITestsFoundation" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift b/WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift index 5f9b3a2abd5..87b1b90c044 100644 --- a/WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift +++ b/WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift @@ -3,7 +3,6 @@ import Experiments struct MockFeatureFlagService: FeatureFlagService { private let isJetpackConnectionPackageSupportOn: Bool - private let isHubMenuOn: Bool private let isInboxOn: Bool private let isSplitViewInOrdersTabOn: Bool private let isUpdateOrderOptimisticallyOn: Bool @@ -13,7 +12,6 @@ struct MockFeatureFlagService: FeatureFlagService { private let isLoginPrologueOnboardingEnabled: Bool init(isJetpackConnectionPackageSupportOn: Bool = false, - isHubMenuOn: Bool = false, isInboxOn: Bool = false, isSplitViewInOrdersTabOn: Bool = false, isUpdateOrderOptimisticallyOn: Bool = false, @@ -22,7 +20,6 @@ struct MockFeatureFlagService: FeatureFlagService { isBackgroundImageUploadEnabled: Bool = false, isLoginPrologueOnboardingEnabled: Bool = false) { self.isJetpackConnectionPackageSupportOn = isJetpackConnectionPackageSupportOn - self.isHubMenuOn = isHubMenuOn self.isInboxOn = isInboxOn self.isSplitViewInOrdersTabOn = isSplitViewInOrdersTabOn self.isUpdateOrderOptimisticallyOn = isUpdateOrderOptimisticallyOn @@ -36,8 +33,6 @@ struct MockFeatureFlagService: FeatureFlagService { switch featureFlag { case .jetpackConnectionPackageSupport: return isJetpackConnectionPackageSupportOn - case .hubMenu: - return isHubMenuOn case .inbox: return isInboxOn case .splitViewInOrdersTab: diff --git a/WooCommerce/WooCommerceTests/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewModelTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewModelTests.swift new file mode 100644 index 00000000000..efcb09de3e6 --- /dev/null +++ b/WooCommerce/WooCommerceTests/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsMenuViewModelTests.swift @@ -0,0 +1,194 @@ +import XCTest +import TestKit + +@testable import WooCommerce +import Yosemite +import Networking + +final class InPersonPaymentsMenuViewModelTests: XCTestCase { + private var stores: MockStoresManager! + + private var storageManager: MockStorageManager! + + private var noticePresenter: MockNoticePresenter! + + private var analyticsProvider: MockAnalyticsProvider! + private var analytics: Analytics! + + private var configuration: CardPresentPaymentsConfiguration! + + private var dependencies: InPersonPaymentsMenuViewModel.Dependencies! + + private var sut: InPersonPaymentsMenuViewModel! + + private let sampleStoreID: Int64 = 12345 + + override func setUp() { + stores = MockStoresManager(sessionManager: .makeForTesting()) + stores.sessionManager.setStoreId(sampleStoreID) + storageManager = MockStorageManager() + storageManager.insertSamplePaymentGateway(readOnlyGateway: PaymentGateway.fake().copy(siteID: sampleStoreID, + gatewayID: "cod")) + noticePresenter = MockNoticePresenter() + analyticsProvider = MockAnalyticsProvider() + analytics = WooAnalytics(analyticsProvider: analyticsProvider) + configuration = CardPresentPaymentsConfiguration.init(country: "US") + + dependencies = InPersonPaymentsMenuViewModel.Dependencies( + stores: stores, + storageManager: storageManager, + noticePresenter: noticePresenter, + analytics: analytics + ) + sut = InPersonPaymentsMenuViewModel(dependencies: dependencies, + configuration: configuration) + } + + // MARK: - Analytics tests + func test_updateCashOnDeliverySetting_enabled_tracks_paymentsHubCashOnDeliveryToggled_event() throws { + // Given + + // When + sut.updateCashOnDeliverySetting(enabled: true) + + // Then + assertNotEmpty(analyticsProvider.receivedEvents) + let indexOfEvent = try XCTUnwrap(analyticsProvider.receivedEvents.firstIndex(where: { $0 == AnalyticEvents.paymentsHubCashOnDeliveryToggled })) + let eventProperties = try XCTUnwrap(analyticsProvider.receivedProperties[indexOfEvent]) + assertEqual("US", eventProperties[AnalyticProperties.countryCodeKey] as? String) + assertEqual(true, eventProperties[AnalyticProperties.enabledKey] as? Bool) + } + + func test_updateCashOnDeliverySetting_disabled_tracks_paymentsHubCashOnDeliveryToggled_event() throws { + // Given + + // When + sut.updateCashOnDeliverySetting(enabled: false) + + // Then + assertNotEmpty(analyticsProvider.receivedEvents) + let indexOfEvent = try XCTUnwrap(analyticsProvider.receivedEvents.firstIndex(where: { $0 == AnalyticEvents.paymentsHubCashOnDeliveryToggled })) + let eventProperties = try XCTUnwrap(analyticsProvider.receivedProperties[indexOfEvent]) + assertEqual("US", eventProperties[AnalyticProperties.countryCodeKey] as? String) + assertEqual(false, eventProperties[AnalyticProperties.enabledKey] as? Bool) + } + + func test_updateCashOnDeliverySetting_enabled_success_logs_enable_success_event() throws { + // Given + assertEmpty(analyticsProvider.receivedEvents) + stores.whenReceivingAction(ofType: PaymentGatewayAction.self) { action in + switch action { + case let .updatePaymentGateway(paymentGateway, onCompletion): + onCompletion(.success(paymentGateway)) + default: + break + } + } + + // When + sut.updateCashOnDeliverySetting(enabled: true) + + // Then + assertNotEmpty(analyticsProvider.receivedEvents) + let indexOfEvent = try XCTUnwrap(analyticsProvider.receivedEvents.firstIndex(where: { $0 == AnalyticEvents.enableCashOnDeliverySuccess })) + let eventProperties = try XCTUnwrap(analyticsProvider.receivedProperties[indexOfEvent]) + assertEqual("US", eventProperties[AnalyticProperties.countryCodeKey] as? String) + assertEqual("payments_hub", eventProperties[AnalyticProperties.sourceKey] as? String) + } + + func test_updateCashOnDeliverySetting_enabled_failure_logs_enable_failure_event() throws { + // Given + stores.whenReceivingAction(ofType: PaymentGatewayAction.self) { action in + switch action { + case let .updatePaymentGateway(_, onCompletion): + onCompletion(.failure(DotcomError.noRestRoute)) + default: + break + } + } + + // When + sut.updateCashOnDeliverySetting(enabled: true) + + // Then + assertNotEmpty(analyticsProvider.receivedEvents) + let indexOfEvent = try XCTUnwrap(analyticsProvider.receivedEvents.firstIndex(where: { $0 == AnalyticEvents.enableCashOnDeliveryFailed })) + let eventProperties = try XCTUnwrap(analyticsProvider.receivedProperties[indexOfEvent]) + assertEqual("US", eventProperties[AnalyticProperties.countryCodeKey] as? String) + assertEqual("Dotcom Invalid REST Route", eventProperties[AnalyticProperties.errorDescriptionKey] as? String) + assertEqual("payments_hub", eventProperties[AnalyticProperties.sourceKey] as? String) + } + + func test_updateCashOnDeliverySetting_disabled_success_logs_disable_success_event() throws { + // Given + assertEmpty(analyticsProvider.receivedEvents) + stores.whenReceivingAction(ofType: PaymentGatewayAction.self) { action in + switch action { + case let .updatePaymentGateway(paymentGateway, onCompletion): + onCompletion(.success(paymentGateway)) + default: + break + } + } + + // When + sut.updateCashOnDeliverySetting(enabled: false) + + // Then + assertNotEmpty(analyticsProvider.receivedEvents) + let indexOfEvent = try XCTUnwrap(analyticsProvider.receivedEvents.firstIndex(where: { $0 == AnalyticEvents.disableCashOnDeliverySuccess })) + let eventProperties = try XCTUnwrap(analyticsProvider.receivedProperties[indexOfEvent]) + assertEqual("US", eventProperties[AnalyticProperties.countryCodeKey] as? String) + assertEqual("payments_hub", eventProperties[AnalyticProperties.sourceKey] as? String) + } + + func test_updateCashOnDeliverySetting_disabled_failure_logs_disable_failure_event() throws { + // Given + stores.whenReceivingAction(ofType: PaymentGatewayAction.self) { action in + switch action { + case let .updatePaymentGateway(_, onCompletion): + onCompletion(.failure(DotcomError.noRestRoute)) + default: + break + } + } + + // When + sut.updateCashOnDeliverySetting(enabled: false) + + // Then + assertNotEmpty(analyticsProvider.receivedEvents) + let indexOfEvent = try XCTUnwrap(analyticsProvider.receivedEvents.firstIndex(where: { $0 == AnalyticEvents.disableCashOnDeliveryFailed })) + let eventProperties = try XCTUnwrap(analyticsProvider.receivedProperties[indexOfEvent]) + assertEqual("US", eventProperties[AnalyticProperties.countryCodeKey] as? String) + assertEqual("Dotcom Invalid REST Route", eventProperties[AnalyticProperties.errorDescriptionKey] as? String) + assertEqual("payments_hub", eventProperties[AnalyticProperties.sourceKey] as? String) + } + + func test_learnMoreTapped_tracks_paymentsHubCashOnDeliveryToggleLearnMoreTapped_event() throws { + // Given + + // When + sut.learnMoreTapped(from: UIViewController()) + + // Then + let event = try XCTUnwrap(analyticsProvider.receivedEvents.first(where: { $0 == AnalyticEvents.paymentsHubCashOnDeliveryToggleLearnMoreTapped } )) + XCTAssertNotNil(event) + } +} + +private enum AnalyticEvents { + static let enableCashOnDeliverySuccess = "enable_cash_on_delivery_success" + static let enableCashOnDeliveryFailed = "enable_cash_on_delivery_failed" + static let disableCashOnDeliverySuccess = "disable_cash_on_delivery_success" + static let disableCashOnDeliveryFailed = "disable_cash_on_delivery_failed" + static let paymentsHubCashOnDeliveryToggled = "payments_hub_cash_on_delivery_toggled" + static let paymentsHubCashOnDeliveryToggleLearnMoreTapped = "payments_hub_cash_on_delivery_toggle_learn_more_tapped" +} + +private enum AnalyticProperties { + static let countryCodeKey = "country" + static let errorDescriptionKey = "error_description" + static let sourceKey = "source" + static let enabledKey = "enabled" +} diff --git a/WooCommerce/WooCommerceTests/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift index ba35455b385..00894d96331 100644 --- a/WooCommerce/WooCommerceTests/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift +++ b/WooCommerce/WooCommerceTests/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift @@ -189,6 +189,7 @@ final class InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests: let indexOfEvent = try XCTUnwrap(analyticsProvider.receivedEvents.firstIndex(where: { $0 == AnalyticEvents.enableCashOnDeliverySuccess })) let eventProperties = try XCTUnwrap(analyticsProvider.receivedProperties[indexOfEvent]) assertEqual("US", eventProperties[AnalyticProperties.countryCodeKey] as? String) + assertEqual("onboarding", eventProperties[AnalyticProperties.sourceKey] as? String) } func test_enable_failure_logs_enable_failure_event() throws { @@ -211,6 +212,7 @@ final class InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests: let eventProperties = try XCTUnwrap(analyticsProvider.receivedProperties[indexOfEvent]) assertEqual("US", eventProperties[AnalyticProperties.countryCodeKey] as? String) assertEqual("Dotcom Invalid REST Route", eventProperties[AnalyticProperties.errorDescriptionKey] as? String) + assertEqual("onboarding", eventProperties[AnalyticProperties.sourceKey] as? String) } } @@ -227,4 +229,5 @@ private enum AnalyticProperties { static let remindLaterKey = "remind_later" static let countryCodeKey = "country" static let errorDescriptionKey = "error_description" + static let sourceKey = "source" } diff --git a/WooCommerce/WooCommerceTests/ViewRelated/MainTabBarControllerTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/MainTabBarControllerTests.swift index 77ed31ae867..c50b258e813 100644 --- a/WooCommerce/WooCommerceTests/ViewRelated/MainTabBarControllerTests.swift +++ b/WooCommerce/WooCommerceTests/ViewRelated/MainTabBarControllerTests.swift @@ -42,8 +42,7 @@ final class MainTabBarControllerTests: XCTestCase { // Arrange // Sets mock `FeatureFlagService` before `MainTabBarController` is initialized so that the feature flags are set correctly. - let isHubMenuFeatureFlagOn = false - let featureFlagService = MockFeatureFlagService(isHubMenuOn: isHubMenuFeatureFlagOn) + let featureFlagService = MockFeatureFlagService() guard let tabBarController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController(creator: { coder in return MainTabBarController(coder: coder, featureFlagService: featureFlagService) }) else { @@ -59,21 +58,20 @@ final class MainTabBarControllerTests: XCTestCase { // Assert XCTAssertEqual(tabBarController.viewControllers?.count, 4) - assertThat(tabBarController.tabNavigationController(tab: .myStore, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .myStore)?.topViewController, isAnInstanceOf: DashboardViewController.self) - assertThat(tabBarController.tabNavigationController(tab: .orders, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .orders)?.topViewController, isAnInstanceOf: OrdersRootViewController.self) - assertThat(tabBarController.tabNavigationController(tab: .products, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .products)?.topViewController, isAnInstanceOf: ProductsViewController.self) - assertThat(tabBarController.tabNavigationController(tab: .reviews, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, - isAnInstanceOf: ReviewsViewController.self) + assertThat(tabBarController.tabNavigationController(tab: .hubMenu)?.topViewController, + isAnInstanceOf: HubMenuViewController.self) } - func test_tab_view_controllers_returns_expected_values_with_hub_menu_enabled() { + func test_tab_view_controllers_returns_expected_values() { // Arrange // Sets mock `FeatureFlagService` before `MainTabBarController` is initialized so that the feature flags are set correctly. - let isHubMenuFeatureFlagOn = true - let featureFlagService = MockFeatureFlagService(isHubMenuOn: isHubMenuFeatureFlagOn) + let featureFlagService = MockFeatureFlagService() guard let tabBarController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController(creator: { coder in return MainTabBarController(coder: coder, featureFlagService: featureFlagService) }) else { @@ -89,13 +87,13 @@ final class MainTabBarControllerTests: XCTestCase { // Assert XCTAssertEqual(tabBarController.viewControllers?.count, 4) - assertThat(tabBarController.tabNavigationController(tab: .myStore, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .myStore)?.topViewController, isAnInstanceOf: DashboardViewController.self) - assertThat(tabBarController.tabNavigationController(tab: .orders, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .orders)?.topViewController, isAnInstanceOf: OrdersRootViewController.self) - assertThat(tabBarController.tabNavigationController(tab: .products, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .products)?.topViewController, isAnInstanceOf: ProductsViewController.self) - assertThat(tabBarController.tabNavigationController(tab: .hubMenu, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .hubMenu)?.topViewController, isAnInstanceOf: HubMenuViewController.self) } @@ -103,8 +101,7 @@ final class MainTabBarControllerTests: XCTestCase { // Arrange // Sets mock `FeatureFlagService` before `MainTabBarController` is initialized so that the feature flags are set correctly. let isSplitViewInOrdersTabOn = true - let isHubMenuFeatureFlagOn = true - let featureFlagService = MockFeatureFlagService(isHubMenuOn: isHubMenuFeatureFlagOn, isSplitViewInOrdersTabOn: isSplitViewInOrdersTabOn) + let featureFlagService = MockFeatureFlagService(isSplitViewInOrdersTabOn: isSplitViewInOrdersTabOn) guard let tabBarController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController(creator: { coder in return MainTabBarController(coder: coder, featureFlagService: featureFlagService) @@ -121,20 +118,19 @@ final class MainTabBarControllerTests: XCTestCase { // Assert XCTAssertEqual(tabBarController.viewControllers?.count, 4) - assertThat(tabBarController.tabNavigationController(tab: .myStore, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .myStore)?.topViewController, isAnInstanceOf: DashboardViewController.self) - assertThat(tabBarController.tabNavigationController(tab: .orders, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .orders)?.topViewController, isAnInstanceOf: OrdersSplitViewWrapperController.self) - assertThat(tabBarController.tabNavigationController(tab: .products, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .products)?.topViewController, isAnInstanceOf: ProductsViewController.self) - assertThat(tabBarController.tabNavigationController(tab: .hubMenu, isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, + assertThat(tabBarController.tabNavigationController(tab: .hubMenu)?.topViewController, isAnInstanceOf: HubMenuViewController.self) } func test_tab_root_viewControllers_are_replaced_after_updating_to_a_different_site() throws { // Arrange - let isHubMenuFeatureFlagOn = false - ServiceLocator.setFeatureFlagService(MockFeatureFlagService(isHubMenuOn: isHubMenuFeatureFlagOn)) + ServiceLocator.setFeatureFlagService(MockFeatureFlagService()) guard let tabBarController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? MainTabBarController else { return } @@ -150,14 +146,14 @@ final class MainTabBarControllerTests: XCTestCase { // Assert XCTAssertEqual(viewControllersBeforeSiteChange.count, viewControllersAfterSiteChange.count) - XCTAssertNotEqual(viewControllersBeforeSiteChange[WooTab.myStore.visibleIndex(isHubMenuFeatureFlagOn)], - viewControllersAfterSiteChange[WooTab.myStore.visibleIndex(isHubMenuFeatureFlagOn)]) - XCTAssertNotEqual(viewControllersBeforeSiteChange[WooTab.orders.visibleIndex(isHubMenuFeatureFlagOn)], - viewControllersAfterSiteChange[WooTab.orders.visibleIndex(isHubMenuFeatureFlagOn)]) - XCTAssertNotEqual(viewControllersBeforeSiteChange[WooTab.products.visibleIndex(isHubMenuFeatureFlagOn)], - viewControllersAfterSiteChange[WooTab.products.visibleIndex(isHubMenuFeatureFlagOn)]) - XCTAssertNotEqual(viewControllersBeforeSiteChange[WooTab.reviews.visibleIndex(isHubMenuFeatureFlagOn)], - viewControllersAfterSiteChange[WooTab.reviews.visibleIndex(isHubMenuFeatureFlagOn)]) + XCTAssertNotEqual(viewControllersBeforeSiteChange[WooTab.myStore.visibleIndex()], + viewControllersAfterSiteChange[WooTab.myStore.visibleIndex()]) + XCTAssertNotEqual(viewControllersBeforeSiteChange[WooTab.orders.visibleIndex()], + viewControllersAfterSiteChange[WooTab.orders.visibleIndex()]) + XCTAssertNotEqual(viewControllersBeforeSiteChange[WooTab.products.visibleIndex()], + viewControllersAfterSiteChange[WooTab.products.visibleIndex()]) + XCTAssertNotEqual(viewControllersBeforeSiteChange[WooTab.hubMenu.visibleIndex()], + viewControllersAfterSiteChange[WooTab.hubMenu.visibleIndex()]) } func test_tab_view_controllers_stay_the_same_after_updating_to_the_same_site() throws { @@ -182,8 +178,7 @@ final class MainTabBarControllerTests: XCTestCase { func test_selected_tab_is_dashboard_after_navigating_to_products_tab_then_updating_to_a_different_site() throws { // Arrange - let isHubMenuFeatureFlagOn = false - ServiceLocator.setFeatureFlagService(MockFeatureFlagService(isHubMenuOn: isHubMenuFeatureFlagOn)) + ServiceLocator.setFeatureFlagService(MockFeatureFlagService()) guard let tabBarController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? MainTabBarController else { return } @@ -199,16 +194,12 @@ final class MainTabBarControllerTests: XCTestCase { let selectedTabIndexAfterSiteChange = tabBarController.selectedIndex // Assert - XCTAssertEqual(selectedTabIndexBeforeSiteChange, WooTab.products.visibleIndex(isHubMenuFeatureFlagOn)) - XCTAssertEqual(selectedTabIndexAfterSiteChange, WooTab.myStore.visibleIndex(isHubMenuFeatureFlagOn)) + XCTAssertEqual(selectedTabIndexBeforeSiteChange, WooTab.products.visibleIndex()) + XCTAssertEqual(selectedTabIndexAfterSiteChange, WooTab.myStore.visibleIndex()) } - func test_when_receiving_a_review_notification_from_a_different_site_navigates_to_reviews_tab_and_presents_review_details() throws { + func test_when_receiving_a_review_notification_from_a_different_site_navigates_to_hubMenu_tab() throws { // Arrange - // Sets mock `FeatureFlagService` before `MainTabBarController` is initialized so that the feature flags are set correctly. - let isHubMenuFeatureFlagOn = false - ServiceLocator.setFeatureFlagService(MockFeatureFlagService(isHubMenuOn: isHubMenuFeatureFlagOn)) - guard let tabBarController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? MainTabBarController else { return } @@ -242,10 +233,8 @@ final class MainTabBarControllerTests: XCTestCase { } } - assertThat(tabBarController.tabNavigationController(tab: .reviews, - - isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, - isAnInstanceOf: ReviewsViewController.self) + let hubMenuNavigationController = try XCTUnwrap(tabBarController.tabNavigationController(tab: .hubMenu)) + assertThat(hubMenuNavigationController.topViewController, isAnInstanceOf: HubMenuViewController.self) // Action // Send push notification in inactive state @@ -261,17 +250,11 @@ final class MainTabBarControllerTests: XCTestCase { // Assert waitUntil { - tabBarController.tabNavigationController(tab: .reviews, - isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.viewControllers.count == 2 + hubMenuNavigationController.viewControllers.count != 0 } - - XCTAssertEqual(tabBarController.selectedIndex, WooTab.reviews.visibleIndex(isHubMenuFeatureFlagOn)) - - // A ReviewDetailsViewController should be pushed - assertThat(tabBarController.tabNavigationController(tab: .reviews, - - isHubMenuFeatureFlagOn: isHubMenuFeatureFlagOn)?.topViewController, - isAnInstanceOf: ReviewDetailsViewController.self) + // HubMenuViewController should be pushed, and be the MainTabBarController visible index + assertThat(hubMenuNavigationController.topViewController, isAnInstanceOf: HubMenuViewController.self) + XCTAssertEqual(tabBarController.selectedIndex, WooTab.hubMenu.visibleIndex()) } func test_when_receiving_product_image_upload_error_a_notice_is_enqueued() throws { @@ -399,9 +382,7 @@ final class MainTabBarControllerTests: XCTestCase { let notice = try XCTUnwrap(noticePresenter.queuedNotices.first) notice.actionHandler?() - let productsNavigationController = try XCTUnwrap(tabBarController - .tabNavigationController(tab: .products, - isHubMenuFeatureFlagOn: featureFlagService.isFeatureFlagEnabled(.hubMenu))) + let productsNavigationController = try XCTUnwrap(tabBarController.tabNavigationController(tab: .products)) waitUntil { productsNavigationController.presentedViewController != nil } @@ -474,9 +455,7 @@ final class MainTabBarControllerTests: XCTestCase { let notice = try XCTUnwrap(noticePresenter.queuedNotices.first) notice.actionHandler?() - let productsNavigationController = try XCTUnwrap(tabBarController - .tabNavigationController(tab: .products, - isHubMenuFeatureFlagOn: featureFlagService.isFeatureFlagEnabled(.hubMenu))) + let productsNavigationController = try XCTUnwrap(tabBarController.tabNavigationController(tab: .products)) waitUntil { productsNavigationController.presentedViewController != nil } @@ -521,8 +500,7 @@ final class MainTabBarControllerTests: XCTestCase { notice.actionHandler?() let productsNavigationController = try XCTUnwrap(tabBarController - .tabNavigationController(tab: .products, - isHubMenuFeatureFlagOn: featureFlagService.isFeatureFlagEnabled(.hubMenu))) + .tabNavigationController(tab: .products)) waitUntil { productsNavigationController.presentedViewController != nil } @@ -542,8 +520,8 @@ private extension MainTabBarController { viewControllers?.compactMap { $0 as? UINavigationController }.compactMap { $0.viewControllers.first } ?? [] } - func tabNavigationController(tab: WooTab, isHubMenuFeatureFlagOn: Bool) -> UINavigationController? { - guard let navigationController = viewControllers?.compactMap({ $0 as? UINavigationController })[tab.visibleIndex(isHubMenuFeatureFlagOn)] else { + func tabNavigationController(tab: WooTab) -> UINavigationController? { + guard let navigationController = viewControllers?.compactMap({ $0 as? UINavigationController })[tab.visibleIndex()] else { XCTFail("Unexpected access to navigation controller at tab: \(tab)") return nil } diff --git a/WooCommerce/WooCommerceTests/ViewRelated/Settings/SettingsViewModelTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/Settings/SettingsViewModelTests.swift index 17653cb7219..d6f962ba043 100644 --- a/WooCommerce/WooCommerceTests/ViewRelated/Settings/SettingsViewModelTests.swift +++ b/WooCommerce/WooCommerceTests/ViewRelated/Settings/SettingsViewModelTests.swift @@ -48,36 +48,6 @@ final class SettingsViewModelTests: XCTestCase { XCTAssertTrue(viewModel.sections.count > 0) } - func test_selectedStoreSection_is_hidden_if_hub_menu_feature_flag_is_on() { - // Given - let featureFlagService = MockFeatureFlagService(isHubMenuOn: true) - let viewModel = SettingsViewModel(stores: stores, - storageManager: storageManager, - featureFlagService: featureFlagService, - appleIDCredentialChecker: appleIDCredentialChecker) - - // When - viewModel.onViewDidLoad() - - // Then - XCTAssertFalse(viewModel.sections.contains { $0.rows.contains(SettingsViewController.Row.selectedStore) }) - } - - func test_selectedStoreSection_is_shown_if_hub_menu_feature_flag_is_off() { - // Given - let featureFlagService = MockFeatureFlagService(isHubMenuOn: false) - let viewModel = SettingsViewModel(stores: stores, - storageManager: storageManager, - featureFlagService: featureFlagService, - appleIDCredentialChecker: appleIDCredentialChecker) - - // When - viewModel.onViewDidLoad() - - // Then - XCTAssertTrue(viewModel.sections.contains { $0.rows.contains(.selectedStore) }) - } - func test_sections_contain_install_jetpack_row_when_JCP_support_feature_flag_is_on_and_default_site_is_jcp() { // Given let featureFlagService = MockFeatureFlagService(isJetpackConnectionPackageSupportOn: true) diff --git a/config/Version.Public.xcconfig b/config/Version.Public.xcconfig index b5897d57743..63ecd4ccd90 100644 --- a/config/Version.Public.xcconfig +++ b/config/Version.Public.xcconfig @@ -1,4 +1,4 @@ -VERSION_SHORT=10.1 +VERSION_SHORT=10.2 // Public long version example: VERSION_LONG=1.2.0.0 -VERSION_LONG=10.1.0.0 +VERSION_LONG=10.2.0.1 diff --git a/fastlane/Deliverfile b/fastlane/Deliverfile index 94985f9b8b9..bcaf984f344 100644 --- a/fastlane/Deliverfile +++ b/fastlane/Deliverfile @@ -15,7 +15,7 @@ app_identifier 'com.automattic.woocommerce' screenshots_path './fastlane/promo_screenshots/' # Make sure to update these keys for a new version -app_version '10.1' +app_version "10.2" team_id '299112' diff --git a/fastlane/Fastfile b/fastlane/Fastfile index f44347303fe..f586065ae01 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -27,8 +27,19 @@ SCREENSHOT_DEVICES = [ 'iPad Pro (12.9-inch) (3rd generation)' ].freeze -MAIN_BUNDLE_IDENTIFIERS = %w[com.automattic.woocommerce].freeze # Registered in our main account, for development and AppStore -ALPHA_BUNDLE_IDENTIFIERS = %w[com.automattic.alpha.woocommerce].freeze # Registered in our Enterprise account, for App Center / Installable Builds +APP_STORE_VERSION_BUNDLE_IDENTIFIER = 'com.automattic.woocommerce' +# Registered in our main account, for development and App Store +MAIN_BUNDLE_IDENTIFIERS = [ + APP_STORE_VERSION_BUNDLE_IDENTIFIER, + "#{APP_STORE_VERSION_BUNDLE_IDENTIFIER}.storewidgets" +].freeze + +ALPHA_VERSION_BUNDLE_IDENTIFIER = 'com.automattic.alpha.woocommerce' +# Registered in our Enterprise account, for App Center / Installable Builds +ALPHA_BUNDLE_IDENTIFIERS = [ + ALPHA_VERSION_BUNDLE_IDENTIFIER, + "#{ALPHA_VERSION_BUNDLE_IDENTIFIER}.storewidgets" +].freeze TEST_SCHEME = 'WooCommerce' @@ -932,8 +943,8 @@ platform :ios do match( type: 'enterprise', team_id: get_required_env('INT_EXPORT_TEAM_ID'), - readonly: true, - app_identifier: ALPHA_BUNDLE_IDENTIFIERS + app_identifier: ALPHA_BUNDLE_IDENTIFIERS, + readonly: true ) end @@ -941,9 +952,8 @@ platform :ios do match( type: 'appstore', team_id: get_required_env('EXT_EXPORT_TEAM_ID'), - readonly: false, app_identifier: MAIN_BUNDLE_IDENTIFIERS, - template_name: 'Apple Pay Pass Suppression' + readonly: true ) end diff --git a/fastlane/metadata/ar-SA/release_notes.txt b/fastlane/metadata/ar-SA/release_notes.txt deleted file mode 100644 index d1f17582b5a..00000000000 --- a/fastlane/metadata/ar-SA/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -لقد قمنا بتسهيل العثور على كل شيء حول قبول المدفوعات في التطبيق كثيرًا. توجَّه إلى قسم المدفوعات من القائمة! لقد أصلحنا كذلك مشكلة حيث كان قد يتم حظرك من تلقي المدفوعات من دون داعٍ. -لقد أجرينا كذلك عدة تحسينات على عمليات سير تسجيل الدخول الخاصة بنا لمساعدتك على بدء استخدام التطبيق بسرعة. -وأخيرًا، لقد أجرينا بعض التعديلات على الأداء. لكننا لم ننتهِ بعد. نتطلع إلى مزيد من التحسينات في المستقبل. يرجى الاستمرار في إرسال ملاحظاتك! diff --git a/fastlane/metadata/de-DE/release_notes.txt b/fastlane/metadata/de-DE/release_notes.txt deleted file mode 100644 index df4b877955c..00000000000 --- a/fastlane/metadata/de-DE/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Es ist jetzt viel einfacher, alle Informationen zum Empfangen von Zahlungen in der App zu finden. Geh im Menü einfach zum Bereich „Zahlungen“. Wir haben auch ein Problem behoben, dass das Empfangen von Zahlungen blockieren konnte. -Und wir haben verschiedene Verbesserungen am Anmeldevorgang vorgenommen, damit du die App schneller nutzen kannst. -Außerdem haben wir ein paar raffinierte Änderungen vorgenommen, um die Performance zu verbessern. Aber das war noch nicht alles. Du darfst dich auf weitere kommende Verbesserungen freuen. Sende uns bitte weiterhin dein Feedback! diff --git a/fastlane/metadata/default/release_notes.txt b/fastlane/metadata/default/release_notes.txt index 8505d617e16..37304938ab9 100644 --- a/fastlane/metadata/default/release_notes.txt +++ b/fastlane/metadata/default/release_notes.txt @@ -1,3 +1 @@ -We made it much easier to find everything about accepting payments in the app. Head on to the Payments section from the Menu! We also fixed an issue where you might be unnecessarily blocked from taking payments. -We also made various enhancements to our login flows to help you get started quickly with the app. -Lastly, we’ve made some tweaks to performance. But we’re not done. Look forward to more improvements in the future. Please keep sending your feedback! +Even though this release doesn’t have any new features, we still put a lot of love into it! You can now enable or disable the option to take card or cash payments on collection or delivery. We also added a new Help Center page that makes it easier for you to login to the app. diff --git a/fastlane/metadata/es-ES/release_notes.txt b/fastlane/metadata/es-ES/release_notes.txt deleted file mode 100644 index fc70618e78a..00000000000 --- a/fastlane/metadata/es-ES/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Hemos facilitado el proceso de encontrar todo lo relacionado con la aceptación de pagos en la aplicación. Ve a la sección Pagos desde el menú. También hemos solucionado un problema por el que se podía bloquear innecesariamente la recepción de pagos. -Además, hemos hecho varias mejoras en los flujos de acceso para que puedas empezar rápidamente en la aplicación. -Por último, hemos hecho algunos ajustes de rendimiento. Pero hay más. Habrá más mejoras próximamente. Sigue enviándonos tus comentarios. diff --git a/fastlane/metadata/fr-FR/release_notes.txt b/fastlane/metadata/fr-FR/release_notes.txt deleted file mode 100644 index 6b7dc6b738d..00000000000 --- a/fastlane/metadata/fr-FR/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Il est désormais plus facile de trouver tout ce qui concerne l’acceptation des paiements dans l’application. Accédez à la section des paiements depuis le menu ! Nous avons également résolu un problème qui était susceptible de vous empêcher sans raison d’accepter des paiements. -De plus, nous avons apporté diverses améliorations à notre flux de connexion afin de vous permettre d’utiliser l'application plus rapidement. -Enfin, nous avons effectué quelques ajustements au niveau des performances. Mais ce n’est pas tout. Attendez-vous à plus d’améliorations à l'avenir. Continuez de nous donner votre avis ! diff --git a/fastlane/metadata/he/release_notes.txt b/fastlane/metadata/he/release_notes.txt deleted file mode 100644 index f4750e41bc3..00000000000 --- a/fastlane/metadata/he/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -כעת אפשר למצוא בקלות רבה יותר את כל מה שצריך לדעת על קבלת תשלומים באפליקציה. ניתן לעבור למקטע 'תשלומים' בתפריט! בנוסף, תיקנו בעיה שגרמה לחסימה לא מוצדקת של משתמשים מקבלת תשלומים. -גם הוספנו כמה שיפורים לתהליך ההתחברות כדי לעזור לך להתחיל מהר יותר את השימוש באפליקציה. -אחרון חביב, ביצענו כמה שינויים בביצועים. אבל עוד לא סיימנו. נשיק עוד שיפורים בעתיד, כדאי לחכות. נשמח להמשיך לקבל משוב! diff --git a/fastlane/metadata/id/release_notes.txt b/fastlane/metadata/id/release_notes.txt deleted file mode 100644 index 53f54928d1a..00000000000 --- a/fastlane/metadata/id/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Kami mempermudah Anda menemukan segala hal seputar penerimaan pembayaran di aplikasi. Buka bagian Pembayaran dari Menu! Kami juga memperbaiki kesalahan pemblokiran terhadap pengambilan pembayaran Anda. -Kami juga melakukan berbagai penyempurnaan dalam alur login agar Anda dapat memulai aplikasi dengan lebih cepat. -Terakhir, kami mengutak-atik performa supaya lebih baik. Namun, kami belum selesai. Nantikan perbaikan lainnya di masa mendatang. Terus kirimkan feedback Anda kepada kami! diff --git a/fastlane/metadata/it/release_notes.txt b/fastlane/metadata/it/release_notes.txt deleted file mode 100644 index 21941abbec3..00000000000 --- a/fastlane/metadata/it/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Ora è più facile trovare tutto ciò di cui hai bisogno su come accettare i pagamenti nell'app. Vai alla sezione Pagamenti dal menu. Abbiamo anche corretto un problema che impediva la riscossione dei pagamenti. -Inoltre, abbiamo apportato varie ottimizzazioni ai flussi di accesso per aiutarti a iniziare a usare rapidamente l'app. -Infine, abbiamo effettuato alcune piccole modifiche per migliorare le prestazioni. Ma non è tutto. Sono in arrivo altre ottimizzazioni in futuro. Continua a inviarci il tuo feedback. diff --git a/fastlane/metadata/ja/release_notes.txt b/fastlane/metadata/ja/release_notes.txt deleted file mode 100644 index e23a0eade05..00000000000 --- a/fastlane/metadata/ja/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -アプリでの支払いの受け入れに関するすべての項目が簡単に見つけられるようになりました。「メニュー」から「支払い」セクションに移動できます。 支払い時に不必要にブロックされることがある問題を修正しました。 -ログインフローにもさまざまな改善が行われ、すぐにアプリを使い始めることができるようになりました。 -さらに、パフォーマンスの微調整も行いました。 これで終わりではありません。 今後の改善点にもご注目ください。 引き続き皆さまのご意見をお待ちしております。 diff --git a/fastlane/metadata/ko/release_notes.txt b/fastlane/metadata/ko/release_notes.txt deleted file mode 100644 index 194ff05a5f5..00000000000 --- a/fastlane/metadata/ko/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -앱에서 결제를 수락하는 모든 기능을 훨씬 쉽게 찾을 수 있도록 했습니다. 메뉴에서 결제 섹션을 살펴보세요! 결제가 불필요하게 차단될 수도 있는 문제도 해결했습니다. -앱에서 빠르게 시작하는 데 도움이 되도록 로그인 흐름도 다양하게 개선했습니다. -마지막으로, 성능도 약간 조정했습니다. 그러나 아직 끝나지 않았습니다. 앞으로 더 많은 개선 사항을 기대해 주세요. 피드백을 계속 보내주세요! diff --git a/fastlane/metadata/nl-NL/release_notes.txt b/fastlane/metadata/nl-NL/release_notes.txt deleted file mode 100644 index 8505d617e16..00000000000 --- a/fastlane/metadata/nl-NL/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -We made it much easier to find everything about accepting payments in the app. Head on to the Payments section from the Menu! We also fixed an issue where you might be unnecessarily blocked from taking payments. -We also made various enhancements to our login flows to help you get started quickly with the app. -Lastly, we’ve made some tweaks to performance. But we’re not done. Look forward to more improvements in the future. Please keep sending your feedback! diff --git a/fastlane/metadata/pt-BR/release_notes.txt b/fastlane/metadata/pt-BR/release_notes.txt deleted file mode 100644 index 4969e4b5838..00000000000 --- a/fastlane/metadata/pt-BR/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Tornamos muito mais fácil encontrar tudo sobre como aceitar pagamentos no aplicativo. Vá para a seção de Pagamentos no Menu! Também corrigimos um problema que bloqueava o recebimento de pagamentos sem necessidade. -Além disso, fizemos várias melhorias em nossos fluxos de login para ajudar você a começar rapidamente com o aplicativo. -Por fim, fizemos alguns ajustes para melhorar o desempenho. E não para por aí. Aguarde mais melhorias no futuro. Continue enviando seu feedback! diff --git a/fastlane/metadata/ru/release_notes.txt b/fastlane/metadata/ru/release_notes.txt deleted file mode 100644 index 3c005455e04..00000000000 --- a/fastlane/metadata/ru/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Мы упростили поиск информации о приёме платежей в приложении. Для этого перейдите в раздел «Платежи» из меню. Устранена проблема, не позволявшая принимать платежи. -Улучшена процедура входа, чтобы вы могли быстрее начать работу с приложением. -Наконец, мы повысили производительность. Но это ещё не всё. Следите за появлением других улучшений в будущем. Продолжайте отправлять нам отзывы! diff --git a/fastlane/metadata/sv/release_notes.txt b/fastlane/metadata/sv/release_notes.txt deleted file mode 100644 index 308c69572eb..00000000000 --- a/fastlane/metadata/sv/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Vi har gjort det mycket enklare att hitta allt om att ta emot betalningar i appen. Det är bara att gå till sektionen Betalningar från menyn. Vi har också åtgärdat ett problem som gjorde att man felaktigt kunde bli blockerad från att ta emot betalningar. -Vi har dessutom gjort diverse förbättringar av våra inloggningsflöden, så att det ska gå snabbare att komma igång med appen. -Slutligen har vi även gjort några förbättringar av prestandan. Men vi är inte klara. Det kommer fler förbättringar framöver. Fortsätt att skicka feedback. diff --git a/fastlane/metadata/tr/release_notes.txt b/fastlane/metadata/tr/release_notes.txt deleted file mode 100644 index 589824339bc..00000000000 --- a/fastlane/metadata/tr/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Uygulama içinden ödeme kabul etmeyle ilgili her şeyi çok daha kolay hale getirdik. Menüden Ödemeler bölümüne gidin! Ayrıca ödeme almanızı gereksiz yere engellenebilecek bir sorunu da düzelttik. -Bunun yanında, uygulamayı kullanmaya hızlı şekilde başlamanıza yardımcı olmak için oturum açma akışlarımızda çeşitli geliştirmeler yaptık. -Son olarak, performansta bazı ince ayarlar yaptık. Ama işimiz daha bitmedi. Gelecekte daha fazla iyileştirme yapmayı umuyoruz. Lütfen geri bildirimlerinizi göndermeye devam edin! diff --git a/fastlane/metadata/zh-Hans/release_notes.txt b/fastlane/metadata/zh-Hans/release_notes.txt deleted file mode 100644 index 75900c048be..00000000000 --- a/fastlane/metadata/zh-Hans/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -我们做了相关改进,您可以更轻松地在应用程序中找到所有关于接受付款的信息。只需从“菜单”转至“付款”部分! 您在收款时可能会遇到不必要的阻碍,我们也修复了这个问题。 -我们还对登录流程做了各种改进,以帮助您快速开始使用该应用程序。 -最后,我们做了一些性能调整。 但是我们还不够完善。 敬请期待未来推出的更多改进。 请继续发送您的反馈意见! diff --git a/fastlane/metadata/zh-Hant/release_notes.txt b/fastlane/metadata/zh-Hant/release_notes.txt deleted file mode 100644 index 49b4be8f5b0..00000000000 --- a/fastlane/metadata/zh-Hant/release_notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -在應用程式中尋找關於接受付款的資訊變簡單了。現在只要從選單前往「付款」區段即可! 我們也修正了可能導致你無法收款的錯誤。 -另外也對登入流程進行各種改善,協助你快速開始使用應用程式。 -最後,我們對網站效能進行了些許調整。 但還沒結束。 敬請期待之後更多的改善功能。 請持續提供意見回饋給我們!