diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dec8c93e5c..5c79d1dc341 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ +## 22.9 +This update enhances Shipping Labels with improved accessibility, smarter address validation, and faster performance. We’ve also made the dedicated Point of Sale tab more widely available for quicker access, and POS orders are now filterable in your order list for better organization. Plus, we've optimized assets to reduce the app’s size. + ## 22.8 Our latest update brings smoother split shipment screens and improved accessibility for Shipping Labels, plus easier label size selection, and POS badges within the order list. In Point of Sale, enjoy a new barcode scan flow, and a safer cart clear button. diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 8f9580dbdc9..236ba20fac0 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,6 +1,10 @@ *** PLEASE FOLLOW THIS FORMAT: [] [] *** Use [*****] to indicate smoke tests of all critical flows should be run on the final IPA before release (e.g. major library or OS update). +23.0 +----- + + 22.9 ----- - [*] Shipping Labels: Empty dimensions are no longer presented for product cards [https://github.com/woocommerce/woocommerce-ios/pull/15912] diff --git a/WooCommerce/Resources/AppStoreStrings.pot b/WooCommerce/Resources/AppStoreStrings.pot index c9be9c78d41..99d4459ffcd 100644 --- a/WooCommerce/Resources/AppStoreStrings.pot +++ b/WooCommerce/Resources/AppStoreStrings.pot @@ -61,9 +61,9 @@ msgctxt "app_store_promo_text" msgid "Run your store from anywhere" msgstr "" -msgctxt "v22.8-whats-new" +msgctxt "v22.9-whats-new" msgid "" -"Our latest update brings smoother split shipment screens and improved accessibility for Shipping Labels, plus easier label size selection, and POS badges within the order list. In Point of Sale, enjoy a new barcode scan flow, and a safer cart clear button.\n" +"This update enhances Shipping Labels with improved accessibility, smarter address validation, and faster performance. We've also added a dedicated Point of Sale tab for quicker access, and POS orders are now filterable in your order list for better organization. Plus, we've optimized assets to reduce the app's size!\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/en.lproj/Localizable.strings b/WooCommerce/Resources/en.lproj/Localizable.strings index 8970cf76c39..b8689fe0c5b 100644 --- a/WooCommerce/Resources/en.lproj/Localizable.strings +++ b/WooCommerce/Resources/en.lproj/Localizable.strings @@ -5054,9 +5054,6 @@ which should be translated separately and considered part of this sentence. */ /* Description of one of the hub menu options */ "hubMenu.customersDescription" = "Get customer insights"; -/* Description of the POS menu in the hub menu */ -"hubMenu.pointOfSale.description" = "Accept payments at your physical store"; - /* Title of the view containing a single Product Review */ "hubMenu.productReview" = "Product Review"; @@ -6961,6 +6958,9 @@ which should be translated separately and considered part of this sentence. */ /* Title of Shipping Section in Order Details screen */ "orderDetailsDataSource.shippingLines.title" = "Shipping"; +/* Title of Shipping Labels Section in Order Details screen. */ +"orderDetailsDataSource.title.shippingLabels" = "Shipping Labels"; + /* VoiceOver accessibility hint, informing the user that the button can be used to view the order custom fields information. */ "orderDetailsDataSource.trashOrder.accessibilityHint" = "Put this order in the trash."; @@ -6970,6 +6970,39 @@ which should be translated separately and considered part of this sentence. */ /* Text on the button title to trash an order */ "orderDetailsDataSource.trashOrder.button.title" = "Move to trash"; +/* Button to copy the tracking number of a shipping label */ +"orderDetailsShipmentDetailsView.copyTrackingNumber" = "Copy tracking number"; + +/* Button to create a shipping label for a shipment */ +"orderDetailsShipmentDetailsView.createShippingLabel" = "Create Shipping Label"; + +/* Plural item count for a shipment. Reads like: 2 items */ +"orderDetailsShipmentDetailsView.itemCountPlural" = "%1$d items"; + +/* Singular item count for a shipment. Reads like: 1 item */ +"orderDetailsShipmentDetailsView.itemCountSingular" = "%1$d item"; + +/* Button to print the customs form for a purchased shipping label. */ +"orderDetailsShipmentDetailsView.printCustomsForm" = "Print customs form"; + +/* Button to print a shipping label for a shipment. Placeholder is the shipment index. Reads like: Print Shipping Label (1/2) */ +"orderDetailsShipmentDetailsView.printShippingLabel" = "Print Shipping Label (%1$@)"; + +/* Message for a refunded shipping label. */ +"orderDetailsShipmentDetailsView.refundMessage" = "You have successfully submitted a request for refund. You can purchase a new label."; + +/* Button to request a refund for a purchased shipping label. */ +"orderDetailsShipmentDetailsView.requestRefund" = "Request a refund"; + +/* Order shipment title format. The placeholder indicates the index of the shipping label package. */ +"orderDetailsShipmentDetailsView.title" = "Shipment %1$@"; + +/* Title for the tracking number of a shipping label */ +"orderDetailsShipmentDetailsView.trackingNumber" = "Tracking number"; + +/* Button to view details of a shipping label */ +"orderDetailsShipmentDetailsView.viewShippingLabel" = "View purchased shipping label"; + /* Notice that appears when no receipt can be retrieved upon tapping on 'See receipt' in the Order Details view. */ "OrderDetailsViewModel.displayReceiptRetrievalErrorNotice.notice" = "Unable to retrieve receipt."; @@ -7556,9 +7589,6 @@ which should be translated separately and considered part of this sentence. */ Navigates to Plugins screen. */ "Plugins" = "Plugins"; -/* Title of the POS menu in the hub menu */ -"Point of Sale Mode" = "Point of Sale Mode"; - /* Error message shown when scan is too short. */ "pointOfSale.barcodeScan.error.barcodeTooShort" = "Barcode too short"; @@ -8025,6 +8055,27 @@ which should be translated separately and considered part of this sentence. */ /* Heading for the barcode info modal in POS, introducing barcode scanning feature */ "pos.barcodeInfoModal.heading" = "Barcode scanning"; +/* New message about Bluetooth barcode scanner settings */ +"pos.barcodeInfoModal.i2.bluetoothMessage" = "• Refer to your Bluetooth barcode scanner in iOS Bluetooth settings."; + +/* Accessible version of Bluetooth message without bullet character for screen readers */ +"pos.barcodeInfoModal.i2.bluetoothMessage.accessible" = "First: Refer to your Bluetooth barcode scanner in iOS Bluetooth settings."; + +/* New introductory message for barcode scanner information */ +"pos.barcodeInfoModal.i2.introMessage" = "You can scan barcodes using an external scanner to quickly build a cart."; + +/* New message about scanning barcodes on item list */ +"pos.barcodeInfoModal.i2.scanMessage" = "• Scan barcodes while on the item list to add products to the cart."; + +/* Accessible version of scan message without bullet character for screen readers */ +"pos.barcodeInfoModal.i2.scanMessage.accessible" = "Second: Scan barcodes while on the item list to add products to the cart."; + +/* New message about ensuring search field is disabled during scanning */ +"pos.barcodeInfoModal.i2.searchMessage" = "• Ensure the search field is not enabled while scanning barcodes."; + +/* Accessible version of search message without bullet character for screen readers */ +"pos.barcodeInfoModal.i2.searchMessage.accessible" = "Third: Ensure the search field is not enabled while scanning barcodes."; + /* Introductory message in the barcode info modal in POS, explaining the use of external barcode scanners */ "pos.barcodeInfoModal.introMessage" = "You can scan barcodes using an external scanner to quickly build a cart."; @@ -8040,6 +8091,15 @@ which should be translated separately and considered part of this sentence. */ /* Accessible version of primary bullet point in barcode info modal, without bullet character for screen readers */ "pos.barcodeInfoModal.primaryMessage.accessible" = "First: Set up barcodes in the \"G-T-I-N, U-P-C, E-A-N, I-S-B-N\" field by navigating to Products, then Product Details, then Inventory."; +/* Link text for product barcode setup documentation. Used together with pos.barcodeInfoModal.productSetup.message. */ +"pos.barcodeInfoModal.productSetup.linkText" = "visit the documentation"; + +/* Message explaining how to set up barcodes in product inventory. %1$@ is replaced with a text and link to documentation. For example, visit the documentation. */ +"pos.barcodeInfoModal.productSetup.message" = "You can set up barcodes in the GTIN, UPC, EAN, ISBN field in the product's inventory tab. For more details %1$@."; + +/* Accessible version of product setup message, announcing link for screen readers */ +"pos.barcodeInfoModal.productSetup.message.accessible" = "You can set up barcodes in the G-T-I-N, U-P-C, E-A-N, I-S-B-N field in the product's inventory tab. For more details visit the documentation, link."; + /* Quaternary bullet point in the barcode info modal in POS, instructing to scan barcodes on item list to add to cart */ "pos.barcodeInfoModal.quaternaryMessage" = "• Scan barcodes while on the item list to add products to the cart."; @@ -8067,38 +8127,26 @@ which should be translated separately and considered part of this sentence. */ /* Title for the done button in barcode scanner setup navigation */ "pos.barcodeScannerSetup.done.button.title" = "Done"; -/* Heading for the barcode scanner setup flow in POS */ -"pos.barcodeScannerSetup.heading" = "Barcode Scanner Setup"; +/* Title for the back button in barcode scanner setup error step */ +"pos.barcodeScannerSetup.error.back.button.title" = "Back"; + +/* Title for the retry button in barcode scanner setup error step */ +"pos.barcodeScannerSetup.error.retry.button.title" = "Retry"; -/* Introductory message in the barcode scanner setup flow in POS */ -"pos.barcodeScannerSetup.introMessage" = "Choose your barcode scanner to get started with the setup process."; +/* Title for Netum 1228BC scanner option in barcode scanner setup */ +"pos.barcodeScannerSetup.netum1228BC.title" = "Netum 1228BC"; /* Title for the next button in barcode scanner setup navigation */ "pos.barcodeScannerSetup.next.button.title" = "Next"; -/* Subtitle for other scanner option in barcode scanner setup */ -"pos.barcodeScannerSetup.other.subtitle" = "General scanner setup instructions"; - /* Title for other scanner option in barcode scanner setup */ "pos.barcodeScannerSetup.other.title" = "Other"; -/* Subtitle for Socket S720 scanner option in barcode scanner setup */ -"pos.barcodeScannerSetup.socketS720.subtitle" = "Small handheld scanner with a charging dock or stand"; - -/* Title for Socket S720 scanner option in barcode scanner setup */ -"pos.barcodeScannerSetup.socketS720.title" = "Socket S720"; - -/* Subtitle for Star BSH-20B scanner option in barcode scanner setup */ -"pos.barcodeScannerSetup.starBSH20B.subtitle" = "Ergonomic scanner with a stand"; - /* Title for Star BSH-20B scanner option in barcode scanner setup */ "pos.barcodeScannerSetup.starBSH20B.title" = "Star BSH-20B"; -/* Subtitle for TBC scanner option in barcode scanner setup */ -"pos.barcodeScannerSetup.tbcScanner.subtitle" = "Recommended scanner"; - -/* Title for TBC scanner option in barcode scanner setup */ -"pos.barcodeScannerSetup.tbcScanner.title" = "Scanner TBC"; +/* Title for Tera 1200 2D scanner option in barcode scanner setup */ +"pos.barcodeScannerSetup.tera12002D.title" = "Tera 1200 2D"; /* Hint to add products to the Cart when this is empty. */ "pos.cartView.addItemsToCartHint" = "Tap on a product to \n add it to the cart"; @@ -8136,32 +8184,32 @@ which should be translated separately and considered part of this sentence. */ /* Button title to dismiss POS ineligible view */ "pos.ineligible.dismiss.button.title" = "Exit POS"; +/* Button title to enable the POS feature switch and refresh POS eligibility check */ +"pos.ineligible.enable.pos.feature.and.refresh.button.title.1" = "Enable POS feature"; + /* Button title to refresh POS eligibility check */ "pos.ineligible.refresh.button.title" = "Retry"; /* Suggestion for disabled feature switch: enable feature in WooCommerce settings */ -"pos.ineligible.suggestion.featureSwitchDisabled" = "Point of Sale must be enabled to proceed. Please enable the POS feature from your WordPress admin under WooCommerce settings > Advanced > Features."; - -/* Suggestion for feature switch sync failure: relaunch or check connection */ -"pos.ineligible.suggestion.featureSwitchSyncFailure" = "Try relaunching the app or check your internet connection and try again."; +"pos.ineligible.suggestion.featureSwitchDisabled.3" = "Point of Sale must be enabled to proceed. Please enable the POS feature below or from your WordPress admin under WooCommerce settings > Advanced > Features and try again."; /* Suggestion for self deallocated: relaunch */ "pos.ineligible.suggestion.selfDeallocated" = "Try relaunching the app to resolve this issue."; /* Suggestion for site settings unavailable: check connection or contact support */ -"pos.ineligible.suggestion.siteSettingsNotAvailable" = "Check your internet connection and try relaunching the app. If the issue persists, please contact support."; +"pos.ineligible.suggestion.siteSettingsNotAvailable.1" = "We were unable to load the site settings info. Please check your internet connection and try again. If the issue persists, contact support for assistance."; -/* Suggestion for unsupported currency with list of supported currencies. %1$@ is a placeholder for the localized list of supported currency codes. */ -"pos.ineligible.suggestion.unsupportedCurrency" = "The POS system is not available for your store’s currency. It currently supports only %1$@. Please check your store currency settings or contact support for assistance."; +/* Suggestion for unsupported currency with list of supported currencies. %1$@ is a placeholder for the localized country name, and %2$@ is a placeholder for the localized list of supported currency codes. */ +"pos.ineligible.suggestion.unsupportedCurrency.1" = "The POS system is not available for your store’s currency. In %1$@, it currently supports only %2$@. Please check your store currency settings or contact support for assistance."; /* Suggestion for unsupported iOS version: update iOS */ -"pos.ineligible.suggestion.unsupportedIOSVersion" = "Point of Sale requires iOS 17 or later. Please update your device to iOS 17+ to use this feature."; +"pos.ineligible.suggestion.unsupportedIOSVersion.1" = "The POS system requires iOS 17 or later. Please update your device to iOS 17+ to use this feature."; /* Suggestion for unsupported WooCommerce version: update plugin. %1$@ is a placeholder for the minimum required version. */ "pos.ineligible.suggestion.unsupportedWooCommerceVersion" = "Your WooCommerce version is not supported. The POS system requires WooCommerce version %1$@ or above. Please update WooCommerce to the latest version."; /* Suggestion for missing WooCommerce plugin: install plugin */ -"pos.ineligible.suggestion.wooCommercePluginNotFound" = "Install and activate the WooCommerce plugin from your WordPress admin."; +"pos.ineligible.suggestion.wooCommercePluginNotFound.3" = "We were unable to load the WooCommerce plugin info. Please make sure the WooCommerce plugin is installed and activated from your WordPress admin. If there is still an issue, contact support for assistance."; /* Title shown in POS ineligible view */ "pos.ineligible.title" = "Unable to load"; @@ -9446,6 +9494,12 @@ which should be translated separately and considered part of this sentence. */ /* No comment provided by engineer. */ "Sales reports" = "Sales reports"; +/* Description for the Sales channel filter option, when selecting 'Any' order */ +"salesChannelFilter.row.any.description" = "Any"; + +/* Description for the Sales channel filter option, when selecting 'Point of Sale' orders */ +"salesChannelFilter.row.pos.description" = "Point of Sale"; + /* Country option for a site address. */ "Samoa" = "Samoa"; @@ -9870,6 +9924,18 @@ which should be translated separately and considered part of this sentence. */ /* Title on the refund screen that lists the shipping total cost */ "Shipping Refund" = "Shipping Refund"; +/* Accessibility hint to collapse the product items section */ +"shipping-labels.packages.items.collapse.accessibility-hint" = "Double-tap to hide all items"; + +/* Accessibility hint to expand the product items section */ +"shipping-labels.packages.items.expand.accessibility-hint" = "Double-tap to show all items"; + +/* Accessibility label for collapsible products section */ +"shipping-labels.packages.items.header.accessibilityLabel" = "Products section"; + +/* Accessibility label for the summary of product items in a shipment. The %1$@ is items count. The %2$@ is total weight. The %3$@ is total price. */ +"shipping-labels.packages.items.summary.accessibility-label" = "%1$@ with a total weight of %2$@ and a total price of %3$@"; + /* Body for the custom items description educational dialog */ "shipping.customs.descriptionInfoDialogBody" = "When shipping to countries that follow European Union (EU) customs rules, you must provide a clear, specific description on every item. For example, if you are sending clothing, you must indicate what type of clothing (e.g. men's shirts, girl's vest, boy's jacket) for the description to be acceptable. Otherwise, shipments may be delayed or interrupted at customs."; @@ -9894,6 +9960,12 @@ which should be translated separately and considered part of this sentence. */ /* Cancel button title for the Shipping Label purchase flow, shown in the nav bar */ "shipping.label.navigationBar.cancel.button.title" = "Cancel"; +/* Accessibility value for a shipping item row. The %1$@ is details text. The %2$@ is weight. The %3$@ is a total price */ +"shipping_item_row.accessibility_value.format" = "%1$@, Weight: %2$@, Total price: %3$@"; + +/* Format for plural item quantity. The %1$@ is a plural quantity. The %2$@ is the item name. */ +"shipping_item_row.quantity.format" = "%1$d items of %2$@"; + /* Label indicating the expiry date of a credit/debit card. The placeholder is the date. Reads like: Expire 08/26 */ "shippingLabelPaymentMethod.expiry" = "Expire %1$@"; @@ -12446,6 +12518,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Info label for height input field */ "wooShipping.createLabel.addPackage.height" = "Height"; +/* Message when user attempts to confirm a package with invalid dimension in the shipping label creation flow */ +"wooShipping.createLabel.addPackage.invalidDimensions" = "Package dimensions should all be larger than 0"; + /* The title for a button to dismiss the keyboard on the order creation/editing screen */ "wooShipping.createLabel.addPackage.keyboard.toolbar.done.button.title" = "Done"; @@ -12497,6 +12572,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Title of the button to dismiss the shipping label screen */ "wooShipping.createLabel.closeButton" = "Close"; +/* Accessibility hint of the button to open the shipments editing form. */ +"wooShipping.createLabel.editButton.accessibility.hint" = "Opens the shipments editing form."; + /* Title for the Edit Package screen Done button */ "wooShipping.createLabel.editPackage.done" = "Done"; @@ -12515,6 +12593,12 @@ If your translation of that term also happens to contains a hyphen, please be su /* Value for section in shipping label creation to declare when a package contains hazardous materials. */ "wooShipping.createLabel.hazmatRow.yes" = "Yes"; +/* Accessibility value indicating that the shipment of a tab is fulfilled. */ +"wooShipping.createLabel.shipmentTab.accessibility.value.fulfilled" = "Fulfilled."; + +/* Accessibility value indicating that the shipment of a tab is unfulfilled. */ +"wooShipping.createLabel.shipmentTab.accessibility.value.unfulfilled" = "Unfulfilled."; + /* Message in the shipping rate section during shipping label creation, when there is no selected package. */ "wooShipping.createLabel.shippingRate.placeholderMessage" = "Enter your package's dimensions or pick a carrier package option to see the available shipping rates."; @@ -12662,6 +12746,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label when the address is unverified in the Woo Shipping label creation flow */ "wooShipping.createLabels.editAddress.unverified" = "Unverified address"; +/* Button to proceed with the input address even when validation fails */ +"wooShipping.createLabels.editAddress.useAddressAsEntered" = "Use address as entered"; + /* Button label indicating the address needs to be validated and saved for a Woo Shipping label */ "wooShipping.createLabels.editAddress.validateAddress" = "Validate & Save"; @@ -13091,8 +13178,8 @@ If your translation of that term also happens to contains a hyphen, please be su /* Message on a notice when saving a package fails in the shipping creation flow */ "wooShippingAddPackageViewModel.savingPackageFailure" = "Unable to save package"; -/* Message when the ITN field is invalid in the customs form of a shipping label */ -"wooShippingCustomsFormViewModel.ITNValidationError.invalidFormat" = "Please enter a valid ITN in one of these formats: X12345678901234, AES X12345678901234, or NOEEI 30.37(a)."; +/* Message when the ITN field is invalid in the customs form of a shipping label. Doesn't contain X12345678901234 format example. */ +"wooShippingCustomsFormViewModel.ITNValidationError.invalidFormat.mandatoryAES" = "Please enter a valid ITN in one of these formats: AES X12345678901234, or NOEEI 30.37(a)."; /* Message when the ITN field is missing in the customs form of a shipping label to the given destination country */ "wooShippingCustomsFormViewModel.ITNValidationError.missingForDestination" = "International Transaction Number is required for shipments to the destination country."; diff --git a/WooCommerce/Resources/release_notes.txt b/WooCommerce/Resources/release_notes.txt index 5057a91b19d..ed56f529f3e 100644 --- a/WooCommerce/Resources/release_notes.txt +++ b/WooCommerce/Resources/release_notes.txt @@ -1 +1 @@ -Our latest update brings smoother split shipment screens and improved accessibility for Shipping Labels, plus easier label size selection, and POS badges within the order list. In Point of Sale, enjoy a new barcode scan flow, and a safer cart clear button. \ No newline at end of file +This update enhances Shipping Labels with improved accessibility, smarter address validation, and faster performance. We've also added a dedicated Point of Sale tab for quicker access, and POS orders are now filterable in your order list for better organization. Plus, we've optimized assets to reduce the app's size! diff --git a/config/Version.Public.xcconfig b/config/Version.Public.xcconfig index d94987b9493..95d86eea9bc 100644 --- a/config/Version.Public.xcconfig +++ b/config/Version.Public.xcconfig @@ -1,4 +1,4 @@ CURRENT_PROJECT_VERSION = $VERSION_LONG MARKETING_VERSION = $VERSION_SHORT -VERSION_LONG = 22.8.0.1 -VERSION_SHORT = 22.8 +VERSION_LONG = 22.9.0.0 +VERSION_SHORT = 22.9