diff --git a/Modules/Sources/Networking/Model/ShippingLabel/Packages/CarriersAndRates/ShippingLabelPackageSelected.swift b/Modules/Sources/Networking/Model/ShippingLabel/Packages/CarriersAndRates/ShippingLabelPackageSelected.swift index 5a40bdc9a52..969fbf2f4f5 100644 --- a/Modules/Sources/Networking/Model/ShippingLabel/Packages/CarriersAndRates/ShippingLabelPackageSelected.swift +++ b/Modules/Sources/Networking/Model/ShippingLabel/Packages/CarriersAndRates/ShippingLabelPackageSelected.swift @@ -46,7 +46,10 @@ extension ShippingLabelPackageSelected: Encodable { try container.encode(boxID.isEmpty ? "0" : boxID, forKey: .boxID) try container.encode(length, forKey: .length) try container.encode(width, forKey: .width) - try container.encode(height, forKey: .height) + + // workaround because 0 would cause an error for the API request + try container.encode(height > 0 ? height : 0.25, forKey: .height) + try container.encode(weight, forKey: .weight) try container.encode(isLetter, forKey: .isLetter) try container.encodeIfPresent(hazmatCategory, forKey: .hazmatCategory) diff --git a/Modules/Sources/Networking/Model/ShippingLabel/Packages/PredefinedPackage/WooShippingPredefinedPackage.swift b/Modules/Sources/Networking/Model/ShippingLabel/Packages/PredefinedPackage/WooShippingPredefinedPackage.swift index 5d6961dcc9b..b8ad58f5397 100644 --- a/Modules/Sources/Networking/Model/ShippingLabel/Packages/PredefinedPackage/WooShippingPredefinedPackage.swift +++ b/Modules/Sources/Networking/Model/ShippingLabel/Packages/PredefinedPackage/WooShippingPredefinedPackage.swift @@ -38,7 +38,7 @@ public struct WooShippingPredefinedPackage: Equatable, GeneratedFakeable, Identi } public func getLength() -> Double { - let firstComponent = dimensions.components(separatedBy: " x ").first ?? "" + let firstComponent = dimensions.components(separatedBy: " x ")[safe: 0] ?? "" return Double(firstComponent) ?? 0 } @@ -48,7 +48,7 @@ public struct WooShippingPredefinedPackage: Equatable, GeneratedFakeable, Identi } public func getHeight() -> Double { - let lastComponent = dimensions.components(separatedBy: " x ").last ?? "" + let lastComponent = dimensions.components(separatedBy: " x ")[safe: 2] ?? "" return Double(lastComponent) ?? 0 } } diff --git a/Modules/Tests/NetworkingTests/Remote/WooShippingRemoteTests.swift b/Modules/Tests/NetworkingTests/Remote/WooShippingRemoteTests.swift index cd983cf8734..75df6524c44 100644 --- a/Modules/Tests/NetworkingTests/Remote/WooShippingRemoteTests.swift +++ b/Modules/Tests/NetworkingTests/Remote/WooShippingRemoteTests.swift @@ -172,6 +172,7 @@ final class WooShippingRemoteTests: XCTestCase { let remote = WooShippingRemote(network: network) network.simulateResponse(requestUrlSuffix: "label/rate", filename: "wooshipping-get-label-rates-success") let expectedDefaultRate = sampleLabelRate() + let expectedPackage = ShippingLabelPackageSelected.fake().copy(length: 12, width: 20, height: 0) // When let result: Result<[ShippingLabelCarriersAndRates], Error> = waitFor { promise in @@ -179,7 +180,7 @@ final class WooShippingRemoteTests: XCTestCase { orderID: self.sampleOrderID, originAddress: WooShippingAddress.fake(), destinationAddress: WooShippingAddress.fake(), - packages: [ShippingLabelPackageSelected.fake()]) { (result) in + packages: [expectedPackage]) { (result) in promise(result) } } @@ -188,6 +189,9 @@ final class WooShippingRemoteTests: XCTestCase { let request = try XCTUnwrap(network.requestsForResponseData.last as? JetpackRequest) let featuresParam = try XCTUnwrap(request.parameters["features_supported_by_client"] as? [String]) XCTAssertEqual(featuresParam, ["upsdap"]) + let packagesParam = try XCTUnwrap(request.parameters["packages"] as? [[String: Any]]) + let package = try XCTUnwrap(packagesParam.first) + XCTAssertEqual(package["height"] as? Double, 0.25) let successResponse = try XCTUnwrap(result.get()) XCTAssertEqual(successResponse.first?.defaultRates.first, expectedDefaultRate) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 4a1b322dce4..36d19ed99db 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -23,6 +23,7 @@ - [internal] Reduced fields fetched for variations in Point of Sale [https://github.com/woocommerce/woocommerce-ios/pull/15712] - [*] Order List: Prevent last updated time being truncated at larger font sizes [https://github.com/woocommerce/woocommerce-ios/pull/15717] - [***] Creating shipping labels is now supported for stores with the WooCommerce Shipping extension [https://github.com/woocommerce/woocommerce-ios/pull/15738] +- [internal] Optimized image handling with a fallback thumbnail size for image views that have empty bounds, preventing high memory usage. [https://github.com/woocommerce/woocommerce-ios/pull/15815] 22.5 ----- diff --git a/WooCommerce/Classes/Tools/ImageService/DefaultImageService.swift b/WooCommerce/Classes/Tools/ImageService/DefaultImageService.swift index f571473ec44..250d68657f9 100644 --- a/WooCommerce/Classes/Tools/ImageService/DefaultImageService.swift +++ b/WooCommerce/Classes/Tools/ImageService/DefaultImageService.swift @@ -59,7 +59,7 @@ struct DefaultImageService: ImageService { let targetSize: CGSize if ServiceLocator.featureFlagService.isFeatureFlagEnabled( .productImageOptimizedHandling - ) { + ) && !imageView.bounds.isEmpty { let scale = UIScreen.main.scale targetSize = CGSize( width: imageView.bounds.width * scale, diff --git a/WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShipping Package and Rate Selection/WooSavedPackagesSelectionView.swift b/WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShipping Package and Rate Selection/WooSavedPackagesSelectionView.swift index 2dd8c91efcb..70076ed16e2 100644 --- a/WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShipping Package and Rate Selection/WooSavedPackagesSelectionView.swift +++ b/WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShipping Package and Rate Selection/WooSavedPackagesSelectionView.swift @@ -92,6 +92,9 @@ struct WooShippingPackageData: WooShippingPackageDataRepresentable { extension WooShippingPackageDataRepresentable { func dimensionsDescription(unit: String) -> String { + guard height.isNotEmpty, let numericHeight = Int(height), numericHeight > 0 else { + return "\(length) x \(width) \( unit)" + } return "\(length) x \(width) x \(height) \( unit)" } diff --git a/WooCommerce/Classes/ViewRelated/Products/Cells/ProductsTabProductTableViewCell.swift b/WooCommerce/Classes/ViewRelated/Products/Cells/ProductsTabProductTableViewCell.swift index b39fa6d0764..fd61f42c2e3 100644 --- a/WooCommerce/Classes/ViewRelated/Products/Cells/ProductsTabProductTableViewCell.swift +++ b/WooCommerce/Classes/ViewRelated/Products/Cells/ProductsTabProductTableViewCell.swift @@ -101,6 +101,9 @@ extension ProductsTabProductTableViewCell { productImageView.layer.borderWidth = 0 } else { configureProductImageViewForBigImages() + /// Make sure `productImageView` is laid out and gained bounds + productImageView.layoutIfNeeded() + productImageView.image = .productsTabProductCellPlaceholderImage if let productURLString = viewModel.imageUrl { imageService.downloadAndCacheImageForImageView(productImageView, diff --git a/WooCommerce/Resources/de.lproj/Localizable.strings b/WooCommerce/Resources/de.lproj/Localizable.strings index ed9983f238a..b8148f78488 100644 --- a/WooCommerce/Resources/de.lproj/Localizable.strings +++ b/WooCommerce/Resources/de.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-17 09:54:05+0000 */ +/* Translation-Revision-Date: 2025-06-17 14:54:06+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: de */ @@ -8908,7 +8908,7 @@ If your translation of that term also happens to contains a hyphen, please be su "blazeBudgetSettingView.dailySpend" = "Ausgaben für einen Tag"; /* Value format for the daily spend amount on the Blaze ads campaign budget settings screen. */ -"blazeBudgetSettingView.dailySpendValue" = "USD%d"; +"blazeBudgetSettingView.dailySpendValue" = "%d USD"; /* Subtitle of the Blaze budget setting screen */ "blazeBudgetSettingView.description" = "Wie viel Geld willst du für deine Kampagne ausgeben und wie lange soll sie laufen?"; @@ -9161,13 +9161,13 @@ If your translation of that term also happens to contains a hyphen, please be su "blazeCampaignCreationFormViewModel.everywhere" = "Überall"; /* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration of more than 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ -"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "Ich stimme einer wiederkehrenden Abbuchung in Höhe von **$%1$.0f\/Woche** ab dem **%2$@** zu. Die Abbuchungen können zu verschiedenen Zeiten während der Kampagne erfolgen."; +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "Ich stimme einer wiederkehrenden Abbuchung in Höhe von bis zu **$%1$.0f\/Woche** ab dem **%2$@** zu. Die Abbuchungen können zu verschiedenen Zeiten während der Kampagne erfolgen."; /* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration up to 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ -"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "Ich stimme zu, dass mir die entstehenden Kosten in Höhe von **$%1$.0f** ab dem **%2$@** in Rechnung gestellt werden. Solange die Kampagne aktiv ist, können eine oder mehrere Zahlungen fällig werden."; +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "Ich stimme zu, dass mir die entstehenden Kosten in Höhe von bis zu **$%1$.0f** ab dem **%2$@** in Rechnung gestellt werden. Solange die Kampagne aktiv ist, können eine oder mehrere Zahlungen fällig werden."; /* First part of checkbox text for accepting terms of service for the endless Blaze campaign subscription. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ -"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "Ich stimme einer wiederkehrenden **wöchentlichen Abbuchung in Höhe von $%1$.0f** ab dem **%2$@** zu. Die Abbuchungen können zu verschiedenen Zeiten während der Kampagne erfolgen."; +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "Ich stimme einer wiederkehrenden **wöchentlichen Abbuchung in Höhe von bis zu $%1$.0f** ab dem **%2$@** zu. Die Abbuchungen können zu verschiedenen Zeiten während der Kampagne erfolgen."; /* Second part of checkbox text for accepting terms of service for finite Blaze campaigns. %@ is \"I can cancel anytime\" substring for a hyperlink. */ "blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@; ich bezahle nur für Werbung, die bis zur Kündigung geschaltet wurde."; diff --git a/WooCommerce/Resources/fr.lproj/Localizable.strings b/WooCommerce/Resources/fr.lproj/Localizable.strings index 4f93664a4f5..dc5ba031281 100644 --- a/WooCommerce/Resources/fr.lproj/Localizable.strings +++ b/WooCommerce/Resources/fr.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-03 09:54:05+0000 */ +/* Translation-Revision-Date: 2025-06-17 14:54:22+0000 */ /* Plural-Forms: nplurals=2; plural=n > 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: fr */ @@ -8907,6 +8907,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Title label for the daily spend amount on the Blaze ads campaign budget settings screen. */ "blazeBudgetSettingView.dailySpend" = "Dépense quotidienne"; +/* Value format for the daily spend amount on the Blaze ads campaign budget settings screen. */ +"blazeBudgetSettingView.dailySpendValue" = "%d $"; + /* Subtitle of the Blaze budget setting screen */ "blazeBudgetSettingView.description" = "Combien souhaitez-vous dépenser pour votre campagne et combien de temps doit-elle durer ?"; @@ -8934,6 +8937,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label for the campaign schedule on the Blaze budget setting screen */ "blazeBudgetSettingView.schedule" = "Planifier"; +/* Accessibility hint for the schedule section on the Blaze budget setting screen */ +"blazeBudgetSettingView.scheduleAccessibilityHint" = "Ouvre les réglages du calendrier de la campagne"; + /* Title of the Blaze budget setting screen */ "blazeBudgetSettingView.title" = "Définir votre budget"; @@ -8946,6 +8952,15 @@ If your translation of that term also happens to contains a hyphen, please be su /* The duration for a Blaze campaign with an end date. Placeholders are day count and formatted end date.Reads like: 10 days to Dec 19, 2024 */ "blazeBudgetSettingViewModel.dayCountToEndDate" = "%1$@ jusqu’au %2$@"; +/* The label for failed to load impressions */ +"blazeBudgetSettingViewModel.impressionsFailure" = "Échec du chargement des impressions"; + +/* The label for loading impressions */ +"blazeBudgetSettingViewModel.impressionsLoading" = "Chargement…"; + +/* The formatted estimated impression range for a Blaze campaign. Reads like: Estimated total impressions range is from 26100 to 35300 */ +"blazeBudgetSettingViewModel.impressionsSectionAccessibility" = "La plage d’impressions totales estimées va de %1$lld à %2$lld"; + /* The duration for a Blaze campaign in plural form. Reads like: 10 days */ "blazeBudgetSettingViewModel.multipleDays" = "%1$d jours"; @@ -9136,12 +9151,27 @@ If your translation of that term also happens to contains a hyphen, please be su /* Blaze campaign budget details with duration in singular form. Reads like: $35, 1 day from Dec 31 */ "blazeCampaignCreationFormViewModel.budgetSingleDay" = "%1$@, %2$d jour à partir du %3$@"; +/* Text that will become a hyperlink in the second line of the terms of service checkbox text. */ +"blazeCampaignCreationFormViewModel.campaignDetailsLinkText" = "Je peux annuler à tout moment."; + /* The formatted weekly budget for an evergreen Blaze campaign with a starting date. Reads as $11 USD weekly starting from May 11 2024. */ "blazeCampaignCreationFormViewModel.evergreenCampaignWeeklyBudget" = "%1$@ par semaine à partir du %2$@"; /* Text indicating all locations for a Blaze campaign */ "blazeCampaignCreationFormViewModel.everywhere" = "Partout"; +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration of more than 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "J’accepte des frais récurrents pouvant aller jusqu’à **$%1$.0f par semaine** à partir du **%2$@**. Les frais peuvent survenir à divers moments pendant la campagne."; + +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration up to 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "J’accepte d’être facturé(e) jusqu’à **$%1$.0f** à partir du **%2$@**. Des frais peuvent survenir sous la forme d’un ou plusieurs paiements pendant que la campagne est active."; + +/* First part of checkbox text for accepting terms of service for the endless Blaze campaign subscription. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "J’accepte des **frais hebdomadaires récurrents jusqu’à %1$.0f** à partir du **%2$@**. Les frais peuvent survenir à divers moments pendant la campagne."; + +/* Second part of checkbox text for accepting terms of service for finite Blaze campaigns. %@ is \"I can cancel anytime\" substring for a hyperlink. */ +"blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@ ; je ne paierai que les publicités livrées jusqu’à la résiliation."; + /* The formatted total budget for a Blaze campaign, fixed in USD. Reads as $11 USD. Keep %.0f as is. */ "blazeCampaignCreationFormViewModel.totalBudget" = "%.0f $ USD"; @@ -9508,6 +9538,12 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label of the start date picker on the Blaze campaign duration setting screen */ "blazeScheduleSettingView.startDate" = "Date de début"; +/* Accessibility hint for the start date picker on the Blaze campaign duration setting screen */ +"blazeScheduleSettingView.startDateAccessibilityHint" = "Appuyez deux fois pour modifier la date de début de la campagne"; + +/* Accessibility label for the start date picker on the Blaze campaign duration setting screen. %@ is replaced with the selected date. */ +"blazeScheduleSettingView.startDateAccessibilityLabel" = "La date de début de la campagne est le %@"; + /* Title of the row to select all target devices for Blaze campaign creation */ "blazeTargetDevicePickerView.allTitle" = "Tous les appareils"; @@ -11304,6 +11340,9 @@ which should be translated separately and considered part of this sentence. */ /* Title for pending funds overview in WooPayments Payouts view. This shows the balance which will be made available for pay out later. */ "payouts.currency.overview.pendingFunds" = "Fonds en attente"; +/* Accessibility label for the button to edit */ +"pencilEditButton.accessibility.editButtonAccessibilityLabel" = "Modifier"; + /* Shown with a 'Current:' label, but when we don't know what the plan that ended was */ "plan ended" = "plan ayant expiré"; @@ -11313,6 +11352,21 @@ which should be translated separately and considered part of this sentence. */ /* Title for the Plugin List view. */ "pluginListView.title.plugins" = "Extensions"; +/* Error message shown when there is an unknown networking error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.network" = "Échec de la demande réseau"; + +/* Error message shown when there is an internet connection error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.noInternetConnection" = "Aucune connexion internet"; + +/* Error message shown when parent product is not found for a variation. */ +"pointOfSale.barcodeScan.error.noParentProduct" = "Produit parent introuvable pour la variante"; + +/* Error message shown when a scanned item is not found in the store. */ +"pointOfSale.barcodeScan.error.notFound" = "Article scanné inconnu"; + +/* Error message shown when a scanned item is of an unsupported type. */ +"pointOfSale.barcodeScan.error.unsupportedProductType" = "Type d’article non pris en charge"; + /* Indicates the status of a card reader. Presented to users when payment collection starts */ "pointOfSale.cardPresent.cancelledOnReader.title" = "Paiement annulé sur le lecteur"; @@ -11685,6 +11739,9 @@ which should be translated separately and considered part of this sentence. */ /* The accessibility label for the `x` button next to each item in the Point of Sale cart.The button removes the item. The translation should be short, to make it quick to navigate by voice. */ "pointOfSale.item.removeFromCart.button.accessibilityLabel" = "Supprimer"; +/* Loading item accessibility label in POS */ +"pointOfSale.itemListCard.loadingItemAccessibilityLabel" = "En cours de chargement…"; + /* Button to come back to order editing when coupon validation fails. */ "pointOfSale.orderSync.couponsError.editOrder" = "Modifier la commande"; @@ -11904,6 +11961,9 @@ which should be translated separately and considered part of this sentence. */ /* Title of the simple products information modal in POS */ "pos.simpleProductsModal.title" = "Pourquoi ne puis-je pas voir mes produits ?"; +/* Label to be displayed in the product's card when there's stock of a given product */ +"pos.stockStatusLabel.inStockWithQuantity" = "%1$@ en stock"; + /* Label to be displayed in the product's card when out of stock */ "pos.stockStatusLabel.outofstock" = "Rupture de stock"; @@ -12418,6 +12478,9 @@ 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" = "Annuler"; +/* Label indicating the expiry date of a credit/debit card. The placeholder is the date. Reads like: Expire 08/26 */ +"shippingLabelPaymentMethod.expiry" = "Expirent le %1$@"; + /* Badge wording when the customs information is completed */ "shippingLabels.customs.completedBadge" = "Terminé"; @@ -12881,6 +12944,48 @@ which should be translated separately and considered part of this sentence. */ /* Product detailsl button title. */ "updateProductInventoryView.viewProductDetailsButtonTitle" = "Voir les détails du produit"; +/* Button to cancel confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.cancel" = "Annuler"; + +/* The first checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Terms of Service. Reads as: 'I agree to the UPS® Terms of Service.' */ +"upsTermsView.checkbox1" = "J’accepte le %1$@."; + +/* The second checkbox on the UPS Terms and Conditions view. The placeholder is a link to the list of prohibited items. Reads as: 'I will not ship any Prohibited Items that UPS® disallows, nor any regulated items without the necessary permissions.' */ +"upsTermsView.checkbox2" = "Je n’expédierai pas d’%1$@ non autorisés par UPS®, ni aucun article réglementé sans les autorisations requises."; + +/* The third checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Technology Agreement. Reads as: 'I also agree to the UPS® Technology Agreement.' */ +"upsTermsView.checkbox3" = "J’accepte également le %1$@."; + +/* Button to confirm all agreements on the UPS Terms and Conditions view */ +"upsTermsView.confirmButton" = "Confirmer et continuer"; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorMessage" = "Une erreur inattendue s’est produite lors de la confirmation de votre acceptation. Veuillez réessayer."; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorTitle" = "Erreur lors de la confirmation de l’acceptation"; + +/* Message on the UPS Terms and Conditions view */ +"upsTermsView.message" = "Pour commencer à expédier depuis cette adresse avec UPS®, vous devez accepter les conditions générales suivantes :"; + +/* Link to the prohibited items on the UPS Terms and Conditions view */ +"upsTermsView.prohibitedItems" = "Articles interdits"; + +/* Button to retry confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.retry" = "Réessayer"; + +/* Title label for the origin address on the UPS Terms and Conditions view */ +"upsTermsView.shippingFrom" = "Expédition depuis"; + +/* Link to the technology agreement on the UPS Terms and Conditions view */ +"upsTermsView.technologyAgreement" = "Contrat relatif aux technologies UPS®"; + +/* Link to the terms of service on the UPS Terms and Conditions view */ +"upsTermsView.termsOfService" = "Conditions d’utilisation d’UPS®"; + +/* Title of the UPS Terms and Conditions view */ +"upsTermsView.title" = "Conditions générales d’UPS®"; + /* Label displayed on video media items. */ "video" = "vidéo"; @@ -13391,6 +13496,15 @@ which should be translated separately and considered part of this sentence. */ /* Message to be displayed after moving items between shipments in the shipping label creation flow. The placeholders are the number of items and shipment index respectively. Reads as: 'Moved 3 items to Shipment 2'. */ "wooShipping.createLabels.splitShipment.movingCompletionFormat" = "%1$@ déplacé(s) vers %2$@"; +/* Cancel button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.cancel" = "Annuler"; + +/* Retry button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.retry" = "Réessayer"; + +/* Title of the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.title" = "Impossible d’enregistrer les modifications. Veuillez réessayer."; + /* Label for a shipment during shipping label creation. The placeholder is the index of the shipment. Reads like: 'Shipment 1' */ "wooShipping.createLabels.splitShipment.shipmentFormat" = "Envoi %1$d"; @@ -13640,6 +13754,30 @@ which should be translated separately and considered part of this sentence. */ /* Title of the HAZMAT detail view in the shipping label creation flow */ "wooShippingHazmatDetailView.title" = "Expédiez-vous des marchandises ou matières dangereuses ?"; +/* Button to dismiss the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.doneButton" = "Terminé"; + +/* Notice displayed after adding a new payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.methodAddedNotice" = "Moyen de paiement ajouté"; + +/* Title of the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.webViewTitle" = "Ajouter un moyen de paiement"; + +/* Button to confirm a credit/debit for purchasing a shipping label */ +"wooShippingPaymentMethodsView.confirmButton" = "Utiliser cette carte"; + +/* Button to dismiss an error alert on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.cancel" = "Annuler"; + +/* Button to retry an action on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.retry" = "Réessayer"; + +/* Title of the error alert when confirming a payment method for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.confirmErrorTitle" = "Impossible de confirmer le moyen de paiement"; + +/* Label of the toggle to enable emailing receipt upon purchasing a shipping label */ +"wooShippingPaymentMethodsView.emailReceipt" = "Envoyer le reçu par e-mail"; + /* Action button on the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.actionButton" = "Carte de crédit ou de débit"; @@ -13649,6 +13787,15 @@ which should be translated separately and considered part of this sentence. */ /* Title of the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.title" = "Ajouter un moyen de paiement"; +/* Note of the payment method sheet in the Shipping Label purchase flow. Placeholders are the name and username of an associated WordPress account. Please keep the `@` in front of the second placeholder. */ +"wooShippingPaymentMethodsView.noteWithUsername" = "Les cartes de crédit sont récupérées à partir du compte WordPress.com suivant : %1$@<@%2$@>."; + +/* Note for users without permission to manage payment methods for shipping label purchase. The placeholders are the store owner name and username respectively. */ +"wooShippingPaymentMethodsView.paymentMethodsNotEditableNote" = "Seul le propriétaire du site peut gérer les moyens de paiement des étiquettes d’expédition. Veuillez contacter le propriétaire de la boutique %1$@ (%2$@) pour gérer les moyens de paiement"; + +/* Title of the error alert when refresh payment methods for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.refreshErrorTitle" = "Impossible d’actualiser vos moyens de paiement"; + /* Subtitle of the payment method sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.subtitle" = "Choisissez un moyen de paiement."; diff --git a/WooCommerce/Resources/he.lproj/Localizable.strings b/WooCommerce/Resources/he.lproj/Localizable.strings index d14158350e9..a6979109233 100644 --- a/WooCommerce/Resources/he.lproj/Localizable.strings +++ b/WooCommerce/Resources/he.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-03 15:54:05+0000 */ +/* Translation-Revision-Date: 2025-06-17 16:54:04+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: he_IL */ @@ -8907,6 +8907,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Title label for the daily spend amount on the Blaze ads campaign budget settings screen. */ "blazeBudgetSettingView.dailySpend" = "הוצאה יומית"; +/* Value format for the daily spend amount on the Blaze ads campaign budget settings screen. */ +"blazeBudgetSettingView.dailySpendValue" = "$%d"; + /* Subtitle of the Blaze budget setting screen */ "blazeBudgetSettingView.description" = "כמה ברצונך להוציא על הקמפיין וכמה זמן ברצונך להפעיל אותו?"; @@ -8934,6 +8937,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label for the campaign schedule on the Blaze budget setting screen */ "blazeBudgetSettingView.schedule" = "תזמון"; +/* Accessibility hint for the schedule section on the Blaze budget setting screen */ +"blazeBudgetSettingView.scheduleAccessibilityHint" = "האפשרות פותחת את הגדרות התזמון של הקמפיין"; + /* Title of the Blaze budget setting screen */ "blazeBudgetSettingView.title" = "להגדיר את תקציב שלך"; @@ -8946,6 +8952,15 @@ If your translation of that term also happens to contains a hyphen, please be su /* The duration for a Blaze campaign with an end date. Placeholders are day count and formatted end date.Reads like: 10 days to Dec 19, 2024 */ "blazeBudgetSettingViewModel.dayCountToEndDate" = "%1$@ עד %2$@"; +/* The label for failed to load impressions */ +"blazeBudgetSettingViewModel.impressionsFailure" = "הטעינה של הצפיות נכשלה"; + +/* The label for loading impressions */ +"blazeBudgetSettingViewModel.impressionsLoading" = "טוען..."; + +/* The formatted estimated impression range for a Blaze campaign. Reads like: Estimated total impressions range is from 26100 to 35300 */ +"blazeBudgetSettingViewModel.impressionsSectionAccessibility" = "טווח הצפיות הכולל המשוער הוא מ-‎%1$lld ל-‎%2$lld"; + /* The duration for a Blaze campaign in plural form. Reads like: 10 days */ "blazeBudgetSettingViewModel.multipleDays" = "⁦%1$d⁩ ימים"; @@ -9136,12 +9151,27 @@ If your translation of that term also happens to contains a hyphen, please be su /* Blaze campaign budget details with duration in singular form. Reads like: $35, 1 day from Dec 31 */ "blazeCampaignCreationFormViewModel.budgetSingleDay" = "%1$@, יום ⁦%2$d⁩ מתאריך %3$@"; +/* Text that will become a hyperlink in the second line of the terms of service checkbox text. */ +"blazeCampaignCreationFormViewModel.campaignDetailsLinkText" = "הבנתי שניתן לבטל בכל עת"; + /* The formatted weekly budget for an evergreen Blaze campaign with a starting date. Reads as $11 USD weekly starting from May 11 2024. */ "blazeCampaignCreationFormViewModel.evergreenCampaignWeeklyBudget" = "חיוב שבועי של %1$@ החל מ-%2$@"; /* Text indicating all locations for a Blaze campaign */ "blazeCampaignCreationFormViewModel.everywhere" = "בכל מקום"; +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration of more than 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "אני רוצה להסכים לתשלום חוזר של עד **$%1$.0f בשבוע**, החל מתאריך **%2$@**. חיובים עשויים לחול במועדים שונים במהלך הקמפיין."; + +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration up to 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "אני רוצה להסכים לתשלום של עד **$%1$.0f** החל מתאריך **%2$@**. ייתכן שיחולו חיובים בתשלום אחד או יותר כל עוד הקמפיין פעיל."; + +/* First part of checkbox text for accepting terms of service for the endless Blaze campaign subscription. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "אני רוצה להסכים לתשלום **שבועי חוזר בחיוב של עד $%1$.0f** החל מתאריך **%2$@**. חיובים עשויים לחול במועדים שונים במהלך הקמפיין."; + +/* Second part of checkbox text for accepting terms of service for finite Blaze campaigns. %@ is \"I can cancel anytime\" substring for a hyperlink. */ +"blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@; אני אשלם רק עבור מודעות שנשלחו עד לביטול."; + /* The formatted total budget for a Blaze campaign, fixed in USD. Reads as $11 USD. Keep %.0f as is. */ "blazeCampaignCreationFormViewModel.totalBudget" = "$%.0f ‏$"; @@ -9508,6 +9538,12 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label of the start date picker on the Blaze campaign duration setting screen */ "blazeScheduleSettingView.startDate" = "תאריך התחלה"; +/* Accessibility hint for the start date picker on the Blaze campaign duration setting screen */ +"blazeScheduleSettingView.startDateAccessibilityHint" = "יש להקיש פעמיים כדי לערוך את תאריך ההתחלה של הקמפיין"; + +/* Accessibility label for the start date picker on the Blaze campaign duration setting screen. %@ is replaced with the selected date. */ +"blazeScheduleSettingView.startDateAccessibilityLabel" = "תאריך התחלת הקמפיין הוא %@"; + /* Title of the row to select all target devices for Blaze campaign creation */ "blazeTargetDevicePickerView.allTitle" = "כל המכשירים"; @@ -11304,6 +11340,9 @@ which should be translated separately and considered part of this sentence. */ /* Title for pending funds overview in WooPayments Payouts view. This shows the balance which will be made available for pay out later. */ "payouts.currency.overview.pendingFunds" = "יתרות בהמתנה לאישור"; +/* Accessibility label for the button to edit */ +"pencilEditButton.accessibility.editButtonAccessibilityLabel" = "לערוך"; + /* Shown with a 'Current:' label, but when we don't know what the plan that ended was */ "plan ended" = "התוכנית הסתיימה"; @@ -11313,6 +11352,21 @@ which should be translated separately and considered part of this sentence. */ /* Title for the Plugin List view. */ "pluginListView.title.plugins" = "תוספים"; +/* Error message shown when there is an unknown networking error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.network" = "בקשת הרשת נכשלה"; + +/* Error message shown when there is an internet connection error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.noInternetConnection" = "אין חיבור אינטרנט"; + +/* Error message shown when parent product is not found for a variation. */ +"pointOfSale.barcodeScan.error.noParentProduct" = "מוצר האב לא נמצא עבור הסוג"; + +/* Error message shown when a scanned item is not found in the store. */ +"pointOfSale.barcodeScan.error.notFound" = "הפריט שנסרק לא מוכר"; + +/* Error message shown when a scanned item is of an unsupported type. */ +"pointOfSale.barcodeScan.error.unsupportedProductType" = "סוג פריט לא נתמך"; + /* Indicates the status of a card reader. Presented to users when payment collection starts */ "pointOfSale.cardPresent.cancelledOnReader.title" = "התשלום בוטל דרך הקורא"; @@ -11685,6 +11739,9 @@ which should be translated separately and considered part of this sentence. */ /* The accessibility label for the `x` button next to each item in the Point of Sale cart.The button removes the item. The translation should be short, to make it quick to navigate by voice. */ "pointOfSale.item.removeFromCart.button.accessibilityLabel" = "להסיר"; +/* Loading item accessibility label in POS */ +"pointOfSale.itemListCard.loadingItemAccessibilityLabel" = "טוען"; + /* Button to come back to order editing when coupon validation fails. */ "pointOfSale.orderSync.couponsError.editOrder" = "עריכת הזמנה"; @@ -11904,6 +11961,9 @@ which should be translated separately and considered part of this sentence. */ /* Title of the simple products information modal in POS */ "pos.simpleProductsModal.title" = "למה המוצרים שלי לא מופיעים?"; +/* Label to be displayed in the product's card when there's stock of a given product */ +"pos.stockStatusLabel.inStockWithQuantity" = "%1$@ במלאי"; + /* Label to be displayed in the product's card when out of stock */ "pos.stockStatusLabel.outofstock" = "לא במלאי"; @@ -12418,6 +12478,9 @@ 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" = "ביטול"; +/* Label indicating the expiry date of a credit/debit card. The placeholder is the date. Reads like: Expire 08/26 */ +"shippingLabelPaymentMethod.expiry" = "התוקף פג בתאריך %1$@"; + /* Badge wording when the customs information is completed */ "shippingLabels.customs.completedBadge" = "הושלמה"; @@ -12881,6 +12944,48 @@ which should be translated separately and considered part of this sentence. */ /* Product detailsl button title. */ "updateProductInventoryView.viewProductDetailsButtonTitle" = "להציג פרטי המוצר"; +/* Button to cancel confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.cancel" = "ביטול"; + +/* The first checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Terms of Service. Reads as: 'I agree to the UPS® Terms of Service.' */ +"upsTermsView.checkbox1" = "הבעתי את הסכמתי על %1$@."; + +/* The second checkbox on the UPS Terms and Conditions view. The placeholder is a link to the list of prohibited items. Reads as: 'I will not ship any Prohibited Items that UPS® disallows, nor any regulated items without the necessary permissions.' */ +"upsTermsView.checkbox2" = "לא אשלח %1$@ ששליחתם אסורה לפי UPS®‎, ולא פריטים שנתונים לרגולציה ללא ההרשאות הנדרשות."; + +/* The third checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Technology Agreement. Reads as: 'I also agree to the UPS® Technology Agreement.' */ +"upsTermsView.checkbox3" = "הבעתי את הסכמתי גם על %1$@."; + +/* Button to confirm all agreements on the UPS Terms and Conditions view */ +"upsTermsView.confirmButton" = "לאשר ולהמשיך"; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorMessage" = "אירעה שגיאה בלתי צפויה בעת אישור הקבלה שלך. יש לנסות שוב."; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorTitle" = "שגיאה באישור הקבלה"; + +/* Message on the UPS Terms and Conditions view */ +"upsTermsView.message" = "כדי להתחיל לשלוח מהכתובת הזו עם UPS®‎, אנחנו צריכים לקבל את הסכמתך לתנאים וההתניות הבאים:"; + +/* Link to the prohibited items on the UPS Terms and Conditions view */ +"upsTermsView.prohibitedItems" = "פריטים אסורים"; + +/* Button to retry confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.retry" = "לנסות שוב"; + +/* Title label for the origin address on the UPS Terms and Conditions view */ +"upsTermsView.shippingFrom" = "מוצא המשלוח"; + +/* Link to the technology agreement on the UPS Terms and Conditions view */ +"upsTermsView.technologyAgreement" = "הסכם הטכנולוגיה של UPS®‎"; + +/* Link to the terms of service on the UPS Terms and Conditions view */ +"upsTermsView.termsOfService" = "תנאי השירות של UPS®‎"; + +/* Title of the UPS Terms and Conditions view */ +"upsTermsView.title" = "תנאים והתניות של UPS®‎"; + /* Label displayed on video media items. */ "video" = "וידאו"; @@ -13391,6 +13496,15 @@ which should be translated separately and considered part of this sentence. */ /* Message to be displayed after moving items between shipments in the shipping label creation flow. The placeholders are the number of items and shipment index respectively. Reads as: 'Moved 3 items to Shipment 2'. */ "wooShipping.createLabels.splitShipment.movingCompletionFormat" = "הפריט %1$@ הועבר אל %2$@"; +/* Cancel button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.cancel" = "ביטול"; + +/* Retry button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.retry" = "לנסות שוב"; + +/* Title of the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.title" = "אין אפשרות לשמור את השינויים. יש לנסות שוב."; + /* Label for a shipment during shipping label creation. The placeholder is the index of the shipment. Reads like: 'Shipment 1' */ "wooShipping.createLabels.splitShipment.shipmentFormat" = "משלוח ⁦%1$d⁩"; @@ -13640,6 +13754,30 @@ which should be translated separately and considered part of this sentence. */ /* Title of the HAZMAT detail view in the shipping label creation flow */ "wooShippingHazmatDetailView.title" = "המשלוח שלך כולל סחורות מסוכנות או חומרים מסוכנים?"; +/* Button to dismiss the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.doneButton" = "בוצע"; + +/* Notice displayed after adding a new payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.methodAddedNotice" = "אמצעי התשלום נוסף"; + +/* Title of the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.webViewTitle" = "להוסיף אמצעי תשלום"; + +/* Button to confirm a credit/debit for purchasing a shipping label */ +"wooShippingPaymentMethodsView.confirmButton" = "להשתמש בכרטיס הזה"; + +/* Button to dismiss an error alert on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.cancel" = "ביטול"; + +/* Button to retry an action on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.retry" = "לנסות שוב"; + +/* Title of the error alert when confirming a payment method for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.confirmErrorTitle" = "אין אפשרות לאשר את אמצעי התשלום"; + +/* Label of the toggle to enable emailing receipt upon purchasing a shipping label */ +"wooShippingPaymentMethodsView.emailReceipt" = "לשלוח את הקבלה באימייל"; + /* Action button on the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.actionButton" = "כרטיס אשראי או כרטיס חיוב חדשים"; @@ -13649,6 +13787,15 @@ which should be translated separately and considered part of this sentence. */ /* Title of the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.title" = "להוסיף אמצעי תשלום"; +/* Note of the payment method sheet in the Shipping Label purchase flow. Placeholders are the name and username of an associated WordPress account. Please keep the `@` in front of the second placeholder. */ +"wooShippingPaymentMethodsView.noteWithUsername" = "כרטיסי אשראי מתקבלים מהחשבון הבא של WordPress.com:‏ %1$@ ⁦<@%2$@>⁩."; + +/* Note for users without permission to manage payment methods for shipping label purchase. The placeholders are the store owner name and username respectively. */ +"wooShippingPaymentMethodsView.paymentMethodsNotEditableNote" = "רק בעלי האתר יכולים לנהל את אמצעי התשלום של תוויות המשלוח. יש ליצור קשר עם בעלי החנות %1$@ (%2$@) כדי לנהל את אמצעי התשלום"; + +/* Title of the error alert when refresh payment methods for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.refreshErrorTitle" = "אין אפשרות לרענן את אמצעי התשלום"; + /* Subtitle of the payment method sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.subtitle" = "יש לבחור אמצעי תשלום."; diff --git a/WooCommerce/Resources/it.lproj/Localizable.strings b/WooCommerce/Resources/it.lproj/Localizable.strings index 85c2ce5e71b..ea75fa1ec5b 100644 --- a/WooCommerce/Resources/it.lproj/Localizable.strings +++ b/WooCommerce/Resources/it.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-17 09:54:05+0000 */ +/* Translation-Revision-Date: 2025-06-17 14:54:05+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: it */ @@ -9164,13 +9164,13 @@ If your translation of that term also happens to contains a hyphen, please be su "blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "Accetto un addebito ricorrente che non superi un importo di **$%1$.0f a settimana**, a partire dal giorno **%2$@**. Il momento in cui avvengono gli addebiti può variare durante la campagna."; /* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration up to 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ -"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "Accetto un addebito che non superi un importo di **$%1$.0f**, a partire da giorno **%2$@**. Durante il periodo in cui la campagna è attiva, gli addebiti possono essere corrisposti in uno o più pagamenti."; +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "Accetto un addebito che non superi un importo di **$%1$.0f**, a partire dal giorno **%2$@**. Durante il periodo in cui la campagna è attiva, gli addebiti possono essere corrisposti in uno o più pagamenti."; /* First part of checkbox text for accepting terms of service for the endless Blaze campaign subscription. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ "blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "Accetto un addebito **settimanale ricorrente che non superi un importo di $%1$.0f**, a partire dal giorno **%2$@**. Il momento in cui avvengono gli addebiti può variare durante la campagna."; /* Second part of checkbox text for accepting terms of service for finite Blaze campaigns. %@ is \"I can cancel anytime\" substring for a hyperlink. */ -"blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@. Corrisponderò solo l'importo degli annunci pubblicitari consegnati prima della cancellazione."; +"blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@. Corrisponderò solo l'importo degli annunci pubblicitari inviati prima della cancellazione."; /* The formatted total budget for a Blaze campaign, fixed in USD. Reads as $11 USD. Keep %.0f as is. */ "blazeCampaignCreationFormViewModel.totalBudget" = "$ %.0f"; diff --git a/WooCommerce/Resources/nl.lproj/Localizable.strings b/WooCommerce/Resources/nl.lproj/Localizable.strings index 85266afffcc..7ba73163fd7 100644 --- a/WooCommerce/Resources/nl.lproj/Localizable.strings +++ b/WooCommerce/Resources/nl.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-04 14:54:06+0000 */ +/* Translation-Revision-Date: 2025-06-19 16:54:04+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: nl */ @@ -8901,6 +8901,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Title label for the daily spend amount on the Blaze ads campaign budget settings screen. */ "blazeBudgetSettingView.dailySpend" = "Dagelijkse uitgaven"; +/* Value format for the daily spend amount on the Blaze ads campaign budget settings screen. */ +"blazeBudgetSettingView.dailySpendValue" = "$%d"; + /* Subtitle of the Blaze budget setting screen */ "blazeBudgetSettingView.description" = "Hoeveel wil je uitgeven aan je campagne, en hoelang wil je dat deze loopt?"; @@ -8928,6 +8931,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label for the campaign schedule on the Blaze budget setting screen */ "blazeBudgetSettingView.schedule" = "Inplannen"; +/* Accessibility hint for the schedule section on the Blaze budget setting screen */ +"blazeBudgetSettingView.scheduleAccessibilityHint" = "Opent instellingen van campagneschema"; + /* Title of the Blaze budget setting screen */ "blazeBudgetSettingView.title" = "Stel je budget in"; @@ -8940,6 +8946,15 @@ If your translation of that term also happens to contains a hyphen, please be su /* The duration for a Blaze campaign with an end date. Placeholders are day count and formatted end date.Reads like: 10 days to Dec 19, 2024 */ "blazeBudgetSettingViewModel.dayCountToEndDate" = "%1$@ tot %2$@"; +/* The label for failed to load impressions */ +"blazeBudgetSettingViewModel.impressionsFailure" = "Laden van weergaven mislukt"; + +/* The label for loading impressions */ +"blazeBudgetSettingViewModel.impressionsLoading" = "Laden ..."; + +/* The formatted estimated impression range for a Blaze campaign. Reads like: Estimated total impressions range is from 26100 to 35300 */ +"blazeBudgetSettingViewModel.impressionsSectionAccessibility" = "Geschat totaal aantal weergaven varieert van %1$lld tot %2$lld"; + /* The duration for a Blaze campaign in plural form. Reads like: 10 days */ "blazeBudgetSettingViewModel.multipleDays" = "%1$d dagen"; @@ -9130,12 +9145,27 @@ If your translation of that term also happens to contains a hyphen, please be su /* Blaze campaign budget details with duration in singular form. Reads like: $35, 1 day from Dec 31 */ "blazeCampaignCreationFormViewModel.budgetSingleDay" = "%1$@, %2$d dag van %3$@"; +/* Text that will become a hyperlink in the second line of the terms of service checkbox text. */ +"blazeCampaignCreationFormViewModel.campaignDetailsLinkText" = "Ik kan op ieder moment opzeggen"; + /* The formatted weekly budget for an evergreen Blaze campaign with a starting date. Reads as $11 USD weekly starting from May 11 2024. */ "blazeCampaignCreationFormViewModel.evergreenCampaignWeeklyBudget" = "%1$@ wekelijks vanaf %2$@"; /* Text indicating all locations for a Blaze campaign */ "blazeCampaignCreationFormViewModel.everywhere" = "Overal"; +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration of more than 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "Ik ga akkoord met terugkerende kosten tot **$%1$.0f per week** vanaf **%2$@**. Kosten kunnen op verschillende momenten tijdens de campagne plaatsvinden."; + +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration up to 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "Ik ga ermee akkoord dat er tot **$%1$.0f** in rekening wordt gebracht vanaf **%2$@**. Er kunnen kosten in rekening worden gebracht bij een of meer betalingen terwijl de campagne actief is."; + +/* First part of checkbox text for accepting terms of service for the endless Blaze campaign subscription. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "Ik ga akkoord met terugkerende **wekelijkse kosten tot $%1$.0f** vanaf **%2$@**. Kosten kunnen op verschillende momenten tijdens de campagne plaatsvinden."; + +/* Second part of checkbox text for accepting terms of service for finite Blaze campaigns. %@ is \"I can cancel anytime\" substring for a hyperlink. */ +"blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@; ik betaal alleen voor advertenties die worden geleverd tot aan de annulering."; + /* The formatted total budget for a Blaze campaign, fixed in USD. Reads as $11 USD. Keep %.0f as is. */ "blazeCampaignCreationFormViewModel.totalBudget" = "$ %.0f USD"; @@ -9502,6 +9532,12 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label of the start date picker on the Blaze campaign duration setting screen */ "blazeScheduleSettingView.startDate" = "Startdatum"; +/* Accessibility hint for the start date picker on the Blaze campaign duration setting screen */ +"blazeScheduleSettingView.startDateAccessibilityHint" = "Tik dubbel om de startdatum van de campagne te bewerken"; + +/* Accessibility label for the start date picker on the Blaze campaign duration setting screen. %@ is replaced with the selected date. */ +"blazeScheduleSettingView.startDateAccessibilityLabel" = "Startdatum campagne is %@"; + /* Title of the row to select all target devices for Blaze campaign creation */ "blazeTargetDevicePickerView.allTitle" = "Alle apparaten"; @@ -11298,6 +11334,9 @@ which should be translated separately and considered part of this sentence. */ /* Title for pending funds overview in WooPayments Payouts view. This shows the balance which will be made available for pay out later. */ "payouts.currency.overview.pendingFunds" = "Bedragen in behandeling"; +/* Accessibility label for the button to edit */ +"pencilEditButton.accessibility.editButtonAccessibilityLabel" = "Bewerken"; + /* Shown with a 'Current:' label, but when we don't know what the plan that ended was */ "plan ended" = "abonnement beëindigd"; @@ -11307,6 +11346,21 @@ which should be translated separately and considered part of this sentence. */ /* Title for the Plugin List view. */ "pluginListView.title.plugins" = "Plugins"; +/* Error message shown when there is an unknown networking error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.network" = "Netwerkverzoek mislukt"; + +/* Error message shown when there is an internet connection error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.noInternetConnection" = "Geen internetverbinding"; + +/* Error message shown when parent product is not found for a variation. */ +"pointOfSale.barcodeScan.error.noParentProduct" = "Bovenliggend product niet gevonden voor variatie"; + +/* Error message shown when a scanned item is not found in the store. */ +"pointOfSale.barcodeScan.error.notFound" = "Onbekend gescand artikel"; + +/* Error message shown when a scanned item is of an unsupported type. */ +"pointOfSale.barcodeScan.error.unsupportedProductType" = "Niet-ondersteund artikeltype"; + /* Indicates the status of a card reader. Presented to users when payment collection starts */ "pointOfSale.cardPresent.cancelledOnReader.title" = "Betaling geannuleerd op lezer"; @@ -11679,6 +11733,9 @@ which should be translated separately and considered part of this sentence. */ /* The accessibility label for the `x` button next to each item in the Point of Sale cart.The button removes the item. The translation should be short, to make it quick to navigate by voice. */ "pointOfSale.item.removeFromCart.button.accessibilityLabel" = "Verwijderen"; +/* Loading item accessibility label in POS */ +"pointOfSale.itemListCard.loadingItemAccessibilityLabel" = "Laden"; + /* Button to come back to order editing when coupon validation fails. */ "pointOfSale.orderSync.couponsError.editOrder" = "Bestelling bewerken"; @@ -11898,6 +11955,9 @@ which should be translated separately and considered part of this sentence. */ /* Title of the simple products information modal in POS */ "pos.simpleProductsModal.title" = "Waarom kan ik mijn producten niet zien?"; +/* Label to be displayed in the product's card when there's stock of a given product */ +"pos.stockStatusLabel.inStockWithQuantity" = "%1$@ op voorraad"; + /* Label to be displayed in the product's card when out of stock */ "pos.stockStatusLabel.outofstock" = "Niet op voorraad"; @@ -12412,6 +12472,9 @@ 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" = "Annuleren"; +/* Label indicating the expiry date of a credit/debit card. The placeholder is the date. Reads like: Expire 08/26 */ +"shippingLabelPaymentMethod.expiry" = "Verloopt %1$@"; + /* Badge wording when the customs information is completed */ "shippingLabels.customs.completedBadge" = "Afgerond"; @@ -12875,6 +12938,48 @@ which should be translated separately and considered part of this sentence. */ /* Product detailsl button title. */ "updateProductInventoryView.viewProductDetailsButtonTitle" = "Productgegevens bekijken"; +/* Button to cancel confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.cancel" = "Annuleren"; + +/* The first checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Terms of Service. Reads as: 'I agree to the UPS® Terms of Service.' */ +"upsTermsView.checkbox1" = "Ik ga akkoord met de %1$@."; + +/* The second checkbox on the UPS Terms and Conditions view. The placeholder is a link to the list of prohibited items. Reads as: 'I will not ship any Prohibited Items that UPS® disallows, nor any regulated items without the necessary permissions.' */ +"upsTermsView.checkbox2" = "Ik zal geen %1$@ verzenden die niet door UPS® zijn toegestaan, alsook geen gereguleerde artikelen zonder de benodigde toestemmingen."; + +/* The third checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Technology Agreement. Reads as: 'I also agree to the UPS® Technology Agreement.' */ +"upsTermsView.checkbox3" = "Ik ga ook akkoord met de %1$@."; + +/* Button to confirm all agreements on the UPS Terms and Conditions view */ +"upsTermsView.confirmButton" = "Bevestigen en doorgaan"; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorMessage" = "Er is een onverwacht fout opgetreden bij het bevestigen van je acceptatie. Probeer het nog eens."; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorTitle" = "Fout bij bevestiging van acceptatie"; + +/* Message on the UPS Terms and Conditions view */ +"upsTermsView.message" = "Je moet akkoord gaan met de volgende algemene voorwaarden om vanaf dit adres te kunnen verzenden met UPS®:"; + +/* Link to the prohibited items on the UPS Terms and Conditions view */ +"upsTermsView.prohibitedItems" = "Verboden artikelen"; + +/* Button to retry confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.retry" = "Opnieuw proberen"; + +/* Title label for the origin address on the UPS Terms and Conditions view */ +"upsTermsView.shippingFrom" = "Verzenden vanaf"; + +/* Link to the technology agreement on the UPS Terms and Conditions view */ +"upsTermsView.technologyAgreement" = "UPS®-technologieovereenkomst"; + +/* Link to the terms of service on the UPS Terms and Conditions view */ +"upsTermsView.termsOfService" = "UPS®-servicevoorwaarden."; + +/* Title of the UPS Terms and Conditions view */ +"upsTermsView.title" = "Algemene voorwaarden van UPS®"; + /* Label displayed on video media items. */ "video" = "video"; @@ -13385,6 +13490,15 @@ which should be translated separately and considered part of this sentence. */ /* Message to be displayed after moving items between shipments in the shipping label creation flow. The placeholders are the number of items and shipment index respectively. Reads as: 'Moved 3 items to Shipment 2'. */ "wooShipping.createLabels.splitShipment.movingCompletionFormat" = "%1$@ naar %2$@ verplaatst"; +/* Cancel button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.cancel" = "Annuleren"; + +/* Retry button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.retry" = "Opnieuw proberen"; + +/* Title of the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.title" = "Opslaan van wijzigingen mislukt. Probeer het nog eens."; + /* Label for a shipment during shipping label creation. The placeholder is the index of the shipment. Reads like: 'Shipment 1' */ "wooShipping.createLabels.splitShipment.shipmentFormat" = "Verzending %1$d"; @@ -13631,6 +13745,30 @@ which should be translated separately and considered part of this sentence. */ /* Title of the HAZMAT detail view in the shipping label creation flow */ "wooShippingHazmatDetailView.title" = "Ben je van plan om gevaarlijke goederen of materialen te verzenden?"; +/* Button to dismiss the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.doneButton" = "Klaar"; + +/* Notice displayed after adding a new payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.methodAddedNotice" = "Betalingsmethode toegevoegd"; + +/* Title of the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.webViewTitle" = "Betalingsmethode toevoegen"; + +/* Button to confirm a credit/debit for purchasing a shipping label */ +"wooShippingPaymentMethodsView.confirmButton" = "Deze kaart gebruiken"; + +/* Button to dismiss an error alert on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.cancel" = "Annuleren"; + +/* Button to retry an action on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.retry" = "Opnieuw proberen"; + +/* Title of the error alert when confirming a payment method for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.confirmErrorTitle" = "Bevestigen van je betalingsmethoden niet mogelijk"; + +/* Label of the toggle to enable emailing receipt upon purchasing a shipping label */ +"wooShippingPaymentMethodsView.emailReceipt" = "Betalingsbewijs e-mailen"; + /* Action button on the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.actionButton" = "Nieuwe creditcard of betaalpas"; @@ -13640,6 +13778,12 @@ which should be translated separately and considered part of this sentence. */ /* Title of the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.title" = "Betalingsmethode toevoegen"; +/* Note of the payment method sheet in the Shipping Label purchase flow. Placeholders are the name and username of an associated WordPress account. Please keep the `@` in front of the second placeholder. */ +"wooShippingPaymentMethodsView.noteWithUsername" = "Creditcards worden opgehaald uit het volgende WordPress.com-account: %1$@. <@%2$@>"; + +/* Title of the error alert when refresh payment methods for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.refreshErrorTitle" = "Vernieuwen van je betalingsmethoden niet mogelijk"; + /* Subtitle of the payment method sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.subtitle" = "Kies een nieuwe betaalmethode."; diff --git a/WooCommerce/Resources/pt-BR.lproj/Localizable.strings b/WooCommerce/Resources/pt-BR.lproj/Localizable.strings index 30da430331c..c5dd94753d0 100644 --- a/WooCommerce/Resources/pt-BR.lproj/Localizable.strings +++ b/WooCommerce/Resources/pt-BR.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-03 15:54:04+0000 */ +/* Translation-Revision-Date: 2025-06-18 16:54:04+0000 */ /* Plural-Forms: nplurals=2; plural=(n > 1); */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: pt_BR */ @@ -8907,6 +8907,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Title label for the daily spend amount on the Blaze ads campaign budget settings screen. */ "blazeBudgetSettingView.dailySpend" = "Gasto diário"; +/* Value format for the daily spend amount on the Blaze ads campaign budget settings screen. */ +"blazeBudgetSettingView.dailySpendValue" = "US$ %d"; + /* Subtitle of the Blaze budget setting screen */ "blazeBudgetSettingView.description" = "Quanto você gostaria de gastar na sua campanha e por quanto tempo quer mantê-la ativa?"; @@ -8934,6 +8937,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label for the campaign schedule on the Blaze budget setting screen */ "blazeBudgetSettingView.schedule" = "Programar"; +/* Accessibility hint for the schedule section on the Blaze budget setting screen */ +"blazeBudgetSettingView.scheduleAccessibilityHint" = "Abre as configurações de cronograma da campanha"; + /* Title of the Blaze budget setting screen */ "blazeBudgetSettingView.title" = "Defina seu orçamento"; @@ -8946,6 +8952,15 @@ If your translation of that term also happens to contains a hyphen, please be su /* The duration for a Blaze campaign with an end date. Placeholders are day count and formatted end date.Reads like: 10 days to Dec 19, 2024 */ "blazeBudgetSettingViewModel.dayCountToEndDate" = "%1$@ (até %2$@)"; +/* The label for failed to load impressions */ +"blazeBudgetSettingViewModel.impressionsFailure" = "Falha ao carregar impressões"; + +/* The label for loading impressions */ +"blazeBudgetSettingViewModel.impressionsLoading" = "Carregando..."; + +/* The formatted estimated impression range for a Blaze campaign. Reads like: Estimated total impressions range is from 26100 to 35300 */ +"blazeBudgetSettingViewModel.impressionsSectionAccessibility" = "O intervalo estimado do total de impressões é de %1$lld a %2$lld"; + /* The duration for a Blaze campaign in plural form. Reads like: 10 days */ "blazeBudgetSettingViewModel.multipleDays" = "%1$d dias"; @@ -9136,12 +9151,27 @@ If your translation of that term also happens to contains a hyphen, please be su /* Blaze campaign budget details with duration in singular form. Reads like: $35, 1 day from Dec 31 */ "blazeCampaignCreationFormViewModel.budgetSingleDay" = "%1$@, %2$d dia a partir de %3$@"; +/* Text that will become a hyperlink in the second line of the terms of service checkbox text. */ +"blazeCampaignCreationFormViewModel.campaignDetailsLinkText" = "Posso cancelar quando quiser"; + /* The formatted weekly budget for an evergreen Blaze campaign with a starting date. Reads as $11 USD weekly starting from May 11 2024. */ "blazeCampaignCreationFormViewModel.evergreenCampaignWeeklyBudget" = "%1$@ por semana começando em %2$@"; /* Text indicating all locations for a Blaze campaign */ "blazeCampaignCreationFormViewModel.everywhere" = "Em todo lugar"; +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration of more than 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "Concordo com uma cobrança recorrente de até **US$ %1$.0f por semana** começando em **%2$@**. As cobranças podem ocorrer em diferentes momentos durante a campanha."; + +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration up to 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "Concordo com a cobrança de até **US$ %1$.0f**, começando em **%2$@**. As cobranças podem ocorrer em um ou mais pagamentos enquanto a campanha está ativa."; + +/* First part of checkbox text for accepting terms of service for the endless Blaze campaign subscription. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "Concordo com uma **cobrança semanal recorrente de até US$ %1$.0f**, começando em **%2$@**. As cobranças podem ocorrer em diferentes momentos durante a campanha."; + +/* Second part of checkbox text for accepting terms of service for finite Blaze campaigns. %@ is \"I can cancel anytime\" substring for a hyperlink. */ +"blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@, e pagarei apenas pelos anúncios entregues até o cancelamento."; + /* The formatted total budget for a Blaze campaign, fixed in USD. Reads as $11 USD. Keep %.0f as is. */ "blazeCampaignCreationFormViewModel.totalBudget" = "US$ %.0f"; @@ -9508,6 +9538,12 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label of the start date picker on the Blaze campaign duration setting screen */ "blazeScheduleSettingView.startDate" = "Data inicial"; +/* Accessibility hint for the start date picker on the Blaze campaign duration setting screen */ +"blazeScheduleSettingView.startDateAccessibilityHint" = "Toque duas vezes para editar a data de início da campanha"; + +/* Accessibility label for the start date picker on the Blaze campaign duration setting screen. %@ is replaced with the selected date. */ +"blazeScheduleSettingView.startDateAccessibilityLabel" = "A data de início da campanha é %@"; + /* Title of the row to select all target devices for Blaze campaign creation */ "blazeTargetDevicePickerView.allTitle" = "Todos os dispositivos"; @@ -11304,6 +11340,9 @@ which should be translated separately and considered part of this sentence. */ /* Title for pending funds overview in WooPayments Payouts view. This shows the balance which will be made available for pay out later. */ "payouts.currency.overview.pendingFunds" = "Dinheiro pendente"; +/* Accessibility label for the button to edit */ +"pencilEditButton.accessibility.editButtonAccessibilityLabel" = "Editar"; + /* Shown with a 'Current:' label, but when we don't know what the plan that ended was */ "plan ended" = "plano encerrado"; @@ -11313,6 +11352,21 @@ which should be translated separately and considered part of this sentence. */ /* Title for the Plugin List view. */ "pluginListView.title.plugins" = "Plugins"; +/* Error message shown when there is an unknown networking error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.network" = "Falha na solicitação de rede"; + +/* Error message shown when there is an internet connection error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.noInternetConnection" = "Sem conexão com a Internet"; + +/* Error message shown when parent product is not found for a variation. */ +"pointOfSale.barcodeScan.error.noParentProduct" = "Produto principal da variação não encontrado"; + +/* Error message shown when a scanned item is not found in the store. */ +"pointOfSale.barcodeScan.error.notFound" = "Item escaneado desconhecido"; + +/* Error message shown when a scanned item is of an unsupported type. */ +"pointOfSale.barcodeScan.error.unsupportedProductType" = "Tipo de item não compatível"; + /* Indicates the status of a card reader. Presented to users when payment collection starts */ "pointOfSale.cardPresent.cancelledOnReader.title" = "Pagamento cancelado no leitor"; @@ -11685,6 +11739,9 @@ which should be translated separately and considered part of this sentence. */ /* The accessibility label for the `x` button next to each item in the Point of Sale cart.The button removes the item. The translation should be short, to make it quick to navigate by voice. */ "pointOfSale.item.removeFromCart.button.accessibilityLabel" = "Remover"; +/* Loading item accessibility label in POS */ +"pointOfSale.itemListCard.loadingItemAccessibilityLabel" = "Carregando"; + /* Button to come back to order editing when coupon validation fails. */ "pointOfSale.orderSync.couponsError.editOrder" = "Editar pedido"; @@ -11904,6 +11961,9 @@ which should be translated separately and considered part of this sentence. */ /* Title of the simple products information modal in POS */ "pos.simpleProductsModal.title" = "Por que não consigo ver meus produtos?"; +/* Label to be displayed in the product's card when there's stock of a given product */ +"pos.stockStatusLabel.inStockWithQuantity" = "%1$@ em estoque"; + /* Label to be displayed in the product's card when out of stock */ "pos.stockStatusLabel.outofstock" = "Sem estoque"; @@ -12418,6 +12478,9 @@ 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" = "Cancelar"; +/* Label indicating the expiry date of a credit/debit card. The placeholder is the date. Reads like: Expire 08/26 */ +"shippingLabelPaymentMethod.expiry" = "Expira em %1$@"; + /* Badge wording when the customs information is completed */ "shippingLabels.customs.completedBadge" = "Concluído"; @@ -12881,6 +12944,48 @@ which should be translated separately and considered part of this sentence. */ /* Product detailsl button title. */ "updateProductInventoryView.viewProductDetailsButtonTitle" = "Visualizar detalhes do produto"; +/* Button to cancel confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.cancel" = "Cancelar"; + +/* The first checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Terms of Service. Reads as: 'I agree to the UPS® Terms of Service.' */ +"upsTermsView.checkbox1" = "Eu concordo com os %1$@."; + +/* The second checkbox on the UPS Terms and Conditions view. The placeholder is a link to the list of prohibited items. Reads as: 'I will not ship any Prohibited Items that UPS® disallows, nor any regulated items without the necessary permissions.' */ +"upsTermsView.checkbox2" = "Não enviarei quaisquer %1$@ que a UPS® desaprova nem itens regulamentados sem as permissões necessárias."; + +/* The third checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Technology Agreement. Reads as: 'I also agree to the UPS® Technology Agreement.' */ +"upsTermsView.checkbox3" = "Também concordo com o %1$@."; + +/* Button to confirm all agreements on the UPS Terms and Conditions view */ +"upsTermsView.confirmButton" = "Confirmar e continuar"; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorMessage" = "Ocorreu um erro inesperado ao confirmar sua aceitação. Tente novamente."; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorTitle" = "Erro ao confirmar aceitação"; + +/* Message on the UPS Terms and Conditions view */ +"upsTermsView.message" = "Para começar a fazer envios deste endereço com a UPS®, você precisa concordar com os seguintes termos e condições:"; + +/* Link to the prohibited items on the UPS Terms and Conditions view */ +"upsTermsView.prohibitedItems" = "itens proibidos"; + +/* Button to retry confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.retry" = "Tentar novamente"; + +/* Title label for the origin address on the UPS Terms and Conditions view */ +"upsTermsView.shippingFrom" = "Origem do envio"; + +/* Link to the technology agreement on the UPS Terms and Conditions view */ +"upsTermsView.technologyAgreement" = "Acordo de tecnologia da UPS®"; + +/* Link to the terms of service on the UPS Terms and Conditions view */ +"upsTermsView.termsOfService" = "Termos de serviço da UPS®"; + +/* Title of the UPS Terms and Conditions view */ +"upsTermsView.title" = "Termos e condições da UPS®"; + /* Label displayed on video media items. */ "video" = "vídeo"; @@ -13391,6 +13496,15 @@ which should be translated separately and considered part of this sentence. */ /* Message to be displayed after moving items between shipments in the shipping label creation flow. The placeholders are the number of items and shipment index respectively. Reads as: 'Moved 3 items to Shipment 2'. */ "wooShipping.createLabels.splitShipment.movingCompletionFormat" = "%1$@ movido(s) para %2$@"; +/* Cancel button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.cancel" = "Cancelar"; + +/* Retry button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.retry" = "Tentar novamente"; + +/* Title of the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.title" = "Não foi possível salvar as mudanças. Tente novamente."; + /* Label for a shipment during shipping label creation. The placeholder is the index of the shipment. Reads like: 'Shipment 1' */ "wooShipping.createLabels.splitShipment.shipmentFormat" = "Envio %1$d"; @@ -13640,6 +13754,30 @@ which should be translated separately and considered part of this sentence. */ /* Title of the HAZMAT detail view in the shipping label creation flow */ "wooShippingHazmatDetailView.title" = "Você está enviando mercadorias ou materiais perigosos?"; +/* Button to dismiss the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.doneButton" = "Concluído"; + +/* Notice displayed after adding a new payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.methodAddedNotice" = "Forma de pagamento adicionada"; + +/* Title of the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.webViewTitle" = "Adicionar forma de pagamento"; + +/* Button to confirm a credit/debit for purchasing a shipping label */ +"wooShippingPaymentMethodsView.confirmButton" = "Usar este cartão"; + +/* Button to dismiss an error alert on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.cancel" = "Cancelar"; + +/* Button to retry an action on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.retry" = "Tentar novamente"; + +/* Title of the error alert when confirming a payment method for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.confirmErrorTitle" = "Não foi possível confirmar a forma de pagamento"; + +/* Label of the toggle to enable emailing receipt upon purchasing a shipping label */ +"wooShippingPaymentMethodsView.emailReceipt" = "Enviar o recibo por e-mail"; + /* Action button on the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.actionButton" = "Novo cartão de crédito ou débito"; @@ -13649,6 +13787,15 @@ which should be translated separately and considered part of this sentence. */ /* Title of the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.title" = "Adicionar uma forma de pagamento"; +/* Note of the payment method sheet in the Shipping Label purchase flow. Placeholders are the name and username of an associated WordPress account. Please keep the `@` in front of the second placeholder. */ +"wooShippingPaymentMethodsView.noteWithUsername" = "Cartões de crédito são recuperados da seguinte conta do WordPress.com: %1$@ <@%2$@>."; + +/* Note for users without permission to manage payment methods for shipping label purchase. The placeholders are the store owner name and username respectively. */ +"wooShippingPaymentMethodsView.paymentMethodsNotEditableNote" = "Apenas o proprietário do site pode gerenciar as formas de pagamento de etiquetas de envio. Fale com o proprietário da loja %1$@ (%2$@) para gerenciá-las."; + +/* Title of the error alert when refresh payment methods for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.refreshErrorTitle" = "Não foi possível atualizar suas formas de pagamento"; + /* Subtitle of the payment method sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.subtitle" = "Escolha uma forma de pagamento."; diff --git a/WooCommerce/Resources/ru.lproj/Localizable.strings b/WooCommerce/Resources/ru.lproj/Localizable.strings index a2cec111825..cc39c450f4f 100644 --- a/WooCommerce/Resources/ru.lproj/Localizable.strings +++ b/WooCommerce/Resources/ru.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-17 09:54:05+0000 */ +/* Translation-Revision-Date: 2025-06-19 14:48:10+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 */ @@ -8959,7 +8959,7 @@ If your translation of that term also happens to contains a hyphen, please be su "blazeBudgetSettingViewModel.impressionsLoading" = "Загрузка…"; /* The formatted estimated impression range for a Blaze campaign. Reads like: Estimated total impressions range is from 26100 to 35300 */ -"blazeBudgetSettingViewModel.impressionsSectionAccessibility" = "Предполагаемый общий объём показов — от %1$lld до %2$lld"; +"blazeBudgetSettingViewModel.impressionsSectionAccessibility" = "Предполагаемый общий объём показов — от %1$lld до %2$lld"; /* The duration for a Blaze campaign in plural form. Reads like: 10 days */ "blazeBudgetSettingViewModel.multipleDays" = "%1$d дн."; @@ -12966,7 +12966,7 @@ which should be translated separately and considered part of this sentence. */ "upsTermsView.errorTitle" = "Ошибка при подтверждении согласия"; /* Message on the UPS Terms and Conditions view */ -"upsTermsView.message" = "Чтобы приступить к доставке с этого адреса посредством UPS®, нам необходимо получить ваше согласие со следующими правилами и условиями:"; +"upsTermsView.message" = "Чтобы приступить к доставке с этого адреса посредством UPS®, нам необходимо получить ваше согласие со следующими правилами и условиями."; /* Link to the prohibited items on the UPS Terms and Conditions view */ "upsTermsView.prohibitedItems" = "Предметы, запрещённые к пересылке"; @@ -13788,7 +13788,7 @@ which should be translated separately and considered part of this sentence. */ "wooShippingPaymentMethodsView.emptyView.title" = "Добавить способ оплаты"; /* Note of the payment method sheet in the Shipping Label purchase flow. Placeholders are the name and username of an associated WordPress account. Please keep the `@` in front of the second placeholder. */ -"wooShippingPaymentMethodsView.noteWithUsername" = "Сведения о кредитных картах получены из следующей учётной записи WordPress.com: %1$@.<@%2$@>"; +"wooShippingPaymentMethodsView.noteWithUsername" = "Сведения о кредитных картах получены из следующей учётной записи WordPress.com: %1$@ <@%2$@>."; /* Note for users without permission to manage payment methods for shipping label purchase. The placeholders are the store owner name and username respectively. */ "wooShippingPaymentMethodsView.paymentMethodsNotEditableNote" = "Только владелец сайта может управлять способами оплаты транспортных этикеток. Чтобы управлять способами оплаты, свяжитесь с владельцем магазина %1$@ (%2$@)."; diff --git a/WooCommerce/Resources/sv.lproj/Localizable.strings b/WooCommerce/Resources/sv.lproj/Localizable.strings index 928957e74b6..ad9c4879722 100644 --- a/WooCommerce/Resources/sv.lproj/Localizable.strings +++ b/WooCommerce/Resources/sv.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-13 17:26:49+0000 */ +/* Translation-Revision-Date: 2025-06-18 14:54:04+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: sv_SE */ @@ -8937,6 +8937,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label for the campaign schedule on the Blaze budget setting screen */ "blazeBudgetSettingView.schedule" = "Schema"; +/* Accessibility hint for the schedule section on the Blaze budget setting screen */ +"blazeBudgetSettingView.scheduleAccessibilityHint" = "Öppnar inställningar för kampanjschema"; + /* Title of the Blaze budget setting screen */ "blazeBudgetSettingView.title" = "Ställ in din budget"; @@ -8949,9 +8952,15 @@ If your translation of that term also happens to contains a hyphen, please be su /* The duration for a Blaze campaign with an end date. Placeholders are day count and formatted end date.Reads like: 10 days to Dec 19, 2024 */ "blazeBudgetSettingViewModel.dayCountToEndDate" = "%1$@ till %2$@"; +/* The label for failed to load impressions */ +"blazeBudgetSettingViewModel.impressionsFailure" = "Det gick inte att ladda visningar"; + /* The label for loading impressions */ "blazeBudgetSettingViewModel.impressionsLoading" = "Laddar in …"; +/* The formatted estimated impression range for a Blaze campaign. Reads like: Estimated total impressions range is from 26100 to 35300 */ +"blazeBudgetSettingViewModel.impressionsSectionAccessibility" = "Det uppskattade totala visningsintervallet är från %1$lld till %2$lld"; + /* The duration for a Blaze campaign in plural form. Reads like: 10 days */ "blazeBudgetSettingViewModel.multipleDays" = "%1$d dagar"; @@ -9151,6 +9160,18 @@ If your translation of that term also happens to contains a hyphen, please be su /* Text indicating all locations for a Blaze campaign */ "blazeCampaignCreationFormViewModel.everywhere" = "Överallt"; +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration of more than 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "Jag godkänner en återkommande avgift på upp till **$%1$.0f per vecka** med start **%2$@**. Avgifter kan förekomma vid olika tidpunkter under kampanjen."; + +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration up to 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "Jag samtycker till att debiteras upp till **$%1$.0f** med start **%2$@**. Avgifter kan uppstå i en eller flera betalningar medan kampanjen är aktiv."; + +/* First part of checkbox text for accepting terms of service for the endless Blaze campaign subscription. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "Jag godkänner en återkommande **veckovis debitering på upp till %1$.0f** USD med start **%2$@**. Avgifter kan förekomma vid olika tidpunkter under kampanjen."; + +/* Second part of checkbox text for accepting terms of service for finite Blaze campaigns. %@ is \"I can cancel anytime\" substring for a hyperlink. */ +"blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@; jag betalar endast för annonser som har levererats fram till avbokningen."; + /* The formatted total budget for a Blaze campaign, fixed in USD. Reads as $11 USD. Keep %.0f as is. */ "blazeCampaignCreationFormViewModel.totalBudget" = "$%.0f USD"; @@ -9517,6 +9538,12 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label of the start date picker on the Blaze campaign duration setting screen */ "blazeScheduleSettingView.startDate" = "Startdatum"; +/* Accessibility hint for the start date picker on the Blaze campaign duration setting screen */ +"blazeScheduleSettingView.startDateAccessibilityHint" = "Dubbeltryck för att redigera kampanjens startdatum"; + +/* Accessibility label for the start date picker on the Blaze campaign duration setting screen. %@ is replaced with the selected date. */ +"blazeScheduleSettingView.startDateAccessibilityLabel" = "Kampanjens startdatum är %@"; + /* Title of the row to select all target devices for Blaze campaign creation */ "blazeTargetDevicePickerView.allTitle" = "Alla enheter"; @@ -11331,6 +11358,15 @@ which should be translated separately and considered part of this sentence. */ /* Error message shown when there is an internet connection error while scanning a barcode. */ "pointOfSale.barcodeScan.error.noInternetConnection" = "Ingen internetanslutning"; +/* Error message shown when parent product is not found for a variation. */ +"pointOfSale.barcodeScan.error.noParentProduct" = "Överordnad produkt hittades inte för variationen"; + +/* Error message shown when a scanned item is not found in the store. */ +"pointOfSale.barcodeScan.error.notFound" = "Okänt skannat objekt"; + +/* Error message shown when a scanned item is of an unsupported type. */ +"pointOfSale.barcodeScan.error.unsupportedProductType" = "Objekttypen stöds inte"; + /* Indicates the status of a card reader. Presented to users when payment collection starts */ "pointOfSale.cardPresent.cancelledOnReader.title" = "Betalning avbruten på läsare"; @@ -12911,12 +12947,45 @@ which should be translated separately and considered part of this sentence. */ /* Button to cancel confirming all agreements on the UPS Terms and Conditions view fails */ "upsTermsView.cancel" = "Avbryt"; +/* The first checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Terms of Service. Reads as: 'I agree to the UPS® Terms of Service.' */ +"upsTermsView.checkbox1" = "Jag godkänner %1$@."; + +/* The second checkbox on the UPS Terms and Conditions view. The placeholder is a link to the list of prohibited items. Reads as: 'I will not ship any Prohibited Items that UPS® disallows, nor any regulated items without the necessary permissions.' */ +"upsTermsView.checkbox2" = "Jag kommer inte att skicka några %1$@ som UPS® inte godkänner, eller några reglerade varor utan nödvändiga tillstånd."; + +/* The third checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Technology Agreement. Reads as: 'I also agree to the UPS® Technology Agreement.' */ +"upsTermsView.checkbox3" = "Jag godkänner också %1$@."; + /* Button to confirm all agreements on the UPS Terms and Conditions view */ "upsTermsView.confirmButton" = "Bekräfta och fortsätt"; +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorMessage" = "Ett oväntat fel uppstod när ditt godkännande skulle bekräftas. Försök igen."; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorTitle" = "Det gick inte att bekräfta godkännande"; + +/* Message on the UPS Terms and Conditions view */ +"upsTermsView.message" = "Om du vill börja skicka från den här adressen med UPS® måste du godkänna följande villkor:"; + +/* Link to the prohibited items on the UPS Terms and Conditions view */ +"upsTermsView.prohibitedItems" = "Förbjudna varor"; + /* Button to retry confirming all agreements on the UPS Terms and Conditions view fails */ "upsTermsView.retry" = "Försök igen"; +/* Title label for the origin address on the UPS Terms and Conditions view */ +"upsTermsView.shippingFrom" = "Skickar från"; + +/* Link to the technology agreement on the UPS Terms and Conditions view */ +"upsTermsView.technologyAgreement" = "UPS® teknikavtal"; + +/* Link to the terms of service on the UPS Terms and Conditions view */ +"upsTermsView.termsOfService" = "UPS® användarvillkor"; + +/* Title of the UPS Terms and Conditions view */ +"upsTermsView.title" = "UPS® villkor"; + /* Label displayed on video media items. */ "video" = "video"; @@ -13706,6 +13775,9 @@ which should be translated separately and considered part of this sentence. */ /* Title of the error alert when confirming a payment method for purchasing shipping label fails */ "wooShippingPaymentMethodsView.confirmErrorTitle" = "Kan inte bekräfta betalningsmetoden"; +/* Label of the toggle to enable emailing receipt upon purchasing a shipping label */ +"wooShippingPaymentMethodsView.emailReceipt" = "Kvitto via e-post"; + /* Action button on the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.actionButton" = "Nytt kredit- eller betalkort"; @@ -13715,6 +13787,12 @@ which should be translated separately and considered part of this sentence. */ /* Title of the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.title" = "Lägg till en betalningsmetod"; +/* Note of the payment method sheet in the Shipping Label purchase flow. Placeholders are the name and username of an associated WordPress account. Please keep the `@` in front of the second placeholder. */ +"wooShippingPaymentMethodsView.noteWithUsername" = "Kreditkort hämtas från följande WordPress.com-konto: @%1$@ <@%2$@>."; + +/* Note for users without permission to manage payment methods for shipping label purchase. The placeholders are the store owner name and username respectively. */ +"wooShippingPaymentMethodsView.paymentMethodsNotEditableNote" = "Det är bara webbplatsens ägare som kan hantera betalningsmetoderna för fraktetiketter. Kontakta butiksägaren %1$@ (%2$@) för att hantera betalningsmetoder"; + /* Title of the error alert when refresh payment methods for purchasing shipping label fails */ "wooShippingPaymentMethodsView.refreshErrorTitle" = "Kan inte uppdatera dina betalningsmetoder"; diff --git a/WooCommerce/Resources/zh-Hans.lproj/Localizable.strings b/WooCommerce/Resources/zh-Hans.lproj/Localizable.strings index da32d8d614a..36609c908bb 100644 --- a/WooCommerce/Resources/zh-Hans.lproj/Localizable.strings +++ b/WooCommerce/Resources/zh-Hans.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-17 09:54:05+0000 */ +/* Translation-Revision-Date: 2025-06-17 14:54:09+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: zh_CN */ @@ -8953,10 +8953,10 @@ If your translation of that term also happens to contains a hyphen, please be su "blazeBudgetSettingViewModel.dayCountToEndDate" = "%1$@ 至 %2$@"; /* The label for failed to load impressions */ -"blazeBudgetSettingViewModel.impressionsFailure" = "加载展示次数失败"; +"blazeBudgetSettingViewModel.impressionsFailure" = "展示次数加载失败"; /* The label for loading impressions */ -"blazeBudgetSettingViewModel.impressionsLoading" = "正在加载……"; +"blazeBudgetSettingViewModel.impressionsLoading" = "正在加载..."; /* The formatted estimated impression range for a Blaze campaign. Reads like: Estimated total impressions range is from 26100 to 35300 */ "blazeBudgetSettingViewModel.impressionsSectionAccessibility" = "预计总展示次数范围为 %1$lld 至 %2$lld"; @@ -9152,7 +9152,7 @@ If your translation of that term also happens to contains a hyphen, please be su "blazeCampaignCreationFormViewModel.budgetSingleDay" = "%1$@,从 %3$@ 起 %2$d 天"; /* Text that will become a hyperlink in the second line of the terms of service checkbox text. */ -"blazeCampaignCreationFormViewModel.campaignDetailsLinkText" = "我随时可以取消"; +"blazeCampaignCreationFormViewModel.campaignDetailsLinkText" = "我可以随时取消"; /* The formatted weekly budget for an evergreen Blaze campaign with a starting date. Reads as $11 USD weekly starting from May 11 2024. */ "blazeCampaignCreationFormViewModel.evergreenCampaignWeeklyBudget" = "从 %2$@ 起每周 %1$@"; @@ -9164,10 +9164,10 @@ If your translation of that term also happens to contains a hyphen, please be su "blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "我同意从 **%2$@** 起每周支付最多 **$%1$.0f** 的周期性费用。 费用可能在广告活动期间分次收取。"; /* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration up to 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ -"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "我同意从 **%2$@** 起支付最多 **%1$.0f** 的费用。 在广告活动进行期间,费用可能会一次性或分次收取。"; +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "我同意从 **%2$@** 起支付最多 **$%1$.0f** 的费用。 费用可能一次性收取,也可能在广告活动期间分次收取。"; /* First part of checkbox text for accepting terms of service for the endless Blaze campaign subscription. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ -"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "我同意从 **%2$@** 起**每周支付最多 $%1$.0f** 的周期性费用。 费用可能在广告活动期间分次收取。"; +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePartEvergreen" = "我同意从 **%2$@** 起每周支付最多 **$%1$.0f** 的周期性费用。 费用可能在广告活动期间分次收取。"; /* Second part of checkbox text for accepting terms of service for finite Blaze campaigns. %@ is \"I can cancel anytime\" substring for a hyperlink. */ "blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@;我将仅为取消前已投放的广告付款。"; @@ -11962,7 +11962,7 @@ which should be translated separately and considered part of this sentence. */ "pos.simpleProductsModal.title" = "为何看不到我的产品?"; /* Label to be displayed in the product's card when there's stock of a given product */ -"pos.stockStatusLabel.inStockWithQuantity" = "库存 %1$@ 件"; +"pos.stockStatusLabel.inStockWithQuantity" = "库存:%1$@ 件"; /* Label to be displayed in the product's card when out of stock */ "pos.stockStatusLabel.outofstock" = "缺货"; @@ -12960,10 +12960,10 @@ which should be translated separately and considered part of this sentence. */ "upsTermsView.confirmButton" = "确认并继续"; /* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ -"upsTermsView.errorMessage" = "确认验收时发生意外错误。 请重试。"; +"upsTermsView.errorMessage" = "确认接受时发生意外错误。 请重试。"; /* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ -"upsTermsView.errorTitle" = "确认验收时出错"; +"upsTermsView.errorTitle" = "确认接受时出错"; /* Message on the UPS Terms and Conditions view */ "upsTermsView.message" = "要开始使用 UPS® 从该地址发货,我们需要您同意以下条款和条件:"; diff --git a/WooCommerce/Resources/zh-Hant.lproj/Localizable.strings b/WooCommerce/Resources/zh-Hant.lproj/Localizable.strings index d7a257c9b6b..5f721ec9c4a 100644 --- a/WooCommerce/Resources/zh-Hant.lproj/Localizable.strings +++ b/WooCommerce/Resources/zh-Hant.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2025-06-03 13:54:04+0000 */ +/* Translation-Revision-Date: 2025-06-18 14:54:04+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/2.4.0-alpha */ /* Language: zh_TW */ @@ -8907,6 +8907,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Title label for the daily spend amount on the Blaze ads campaign budget settings screen. */ "blazeBudgetSettingView.dailySpend" = "每日花費"; +/* Value format for the daily spend amount on the Blaze ads campaign budget settings screen. */ +"blazeBudgetSettingView.dailySpendValue" = "$%d"; + /* Subtitle of the Blaze budget setting screen */ "blazeBudgetSettingView.description" = "你想要在行銷活動上花費多少費用,希望活動持續多長時間?"; @@ -8934,6 +8937,9 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label for the campaign schedule on the Blaze budget setting screen */ "blazeBudgetSettingView.schedule" = "排程"; +/* Accessibility hint for the schedule section on the Blaze budget setting screen */ +"blazeBudgetSettingView.scheduleAccessibilityHint" = "開啟行銷活動排程設定"; + /* Title of the Blaze budget setting screen */ "blazeBudgetSettingView.title" = "設定預算"; @@ -8946,6 +8952,15 @@ If your translation of that term also happens to contains a hyphen, please be su /* The duration for a Blaze campaign with an end date. Placeholders are day count and formatted end date.Reads like: 10 days to Dec 19, 2024 */ "blazeBudgetSettingViewModel.dayCountToEndDate" = "%1$@至 %2$@止"; +/* The label for failed to load impressions */ +"blazeBudgetSettingViewModel.impressionsFailure" = "無法載入曝光數"; + +/* The label for loading impressions */ +"blazeBudgetSettingViewModel.impressionsLoading" = "正在載入..."; + +/* The formatted estimated impression range for a Blaze campaign. Reads like: Estimated total impressions range is from 26100 to 35300 */ +"blazeBudgetSettingViewModel.impressionsSectionAccessibility" = "預計曝光總數範圍為 %1$lld 到 %2$lld"; + /* The duration for a Blaze campaign in plural form. Reads like: 10 days */ "blazeBudgetSettingViewModel.multipleDays" = "%1$d 天"; @@ -9136,12 +9151,24 @@ If your translation of that term also happens to contains a hyphen, please be su /* Blaze campaign budget details with duration in singular form. Reads like: $35, 1 day from Dec 31 */ "blazeCampaignCreationFormViewModel.budgetSingleDay" = "%1$@,自 %3$@ 起 %2$d 天"; +/* Text that will become a hyperlink in the second line of the terms of service checkbox text. */ +"blazeCampaignCreationFormViewModel.campaignDetailsLinkText" = "我隨時皆可取消"; + /* The formatted weekly budget for an evergreen Blaze campaign with a starting date. Reads as $11 USD weekly starting from May 11 2024. */ "blazeCampaignCreationFormViewModel.evergreenCampaignWeeklyBudget" = "從 %2$@起,每週 %1$@"; /* Text indicating all locations for a Blaze campaign */ "blazeCampaignCreationFormViewModel.everywhere" = "所有地區"; +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration of more than 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.MoreThanSevenDays" = "我同意從 **%2$@* 起,支付 **每週 $%1$.0f** 的定期費用。 行銷活動期間,可能會在不同時間收取費用。"; + +/* First part of checkbox text for accepting terms of service for finite Blaze campaigns with the duration up to 7 days. %1$.0f is the weekly budget amount, %2$@ is the formatted start date. The content inside two double asterisks **...** denote bolded text. */ +"blazeCampaignCreationFormViewModel.tosCheckboxFirstLinePart.upToSevenDays" = "我同意從 **%2$@** 起,每次支付最多 **$%1$.0f** 的費用。 行銷活動啟用時,可能會產生一筆或多筆費用。"; + +/* Second part of checkbox text for accepting terms of service for finite Blaze campaigns. %@ is \"I can cancel anytime\" substring for a hyperlink. */ +"blazeCampaignCreationFormViewModel.tosCheckboxSecondLinePart" = "%@;我只會支付廣告費用直到取消行銷活動為止。"; + /* The formatted total budget for a Blaze campaign, fixed in USD. Reads as $11 USD. Keep %.0f as is. */ "blazeCampaignCreationFormViewModel.totalBudget" = "$%.0f 美元"; @@ -9508,6 +9535,12 @@ If your translation of that term also happens to contains a hyphen, please be su /* Label of the start date picker on the Blaze campaign duration setting screen */ "blazeScheduleSettingView.startDate" = "開始日期"; +/* Accessibility hint for the start date picker on the Blaze campaign duration setting screen */ +"blazeScheduleSettingView.startDateAccessibilityHint" = "點選兩下以編輯行銷活動開始日期"; + +/* Accessibility label for the start date picker on the Blaze campaign duration setting screen. %@ is replaced with the selected date. */ +"blazeScheduleSettingView.startDateAccessibilityLabel" = "行銷活動開始日期:%@"; + /* Title of the row to select all target devices for Blaze campaign creation */ "blazeTargetDevicePickerView.allTitle" = "所有裝置"; @@ -11304,6 +11337,9 @@ which should be translated separately and considered part of this sentence. */ /* Title for pending funds overview in WooPayments Payouts view. This shows the balance which will be made available for pay out later. */ "payouts.currency.overview.pendingFunds" = "待確認款項"; +/* Accessibility label for the button to edit */ +"pencilEditButton.accessibility.editButtonAccessibilityLabel" = "編輯"; + /* Shown with a 'Current:' label, but when we don't know what the plan that ended was */ "plan ended" = "方案已結束"; @@ -11313,6 +11349,21 @@ which should be translated separately and considered part of this sentence. */ /* Title for the Plugin List view. */ "pluginListView.title.plugins" = "外掛程式"; +/* Error message shown when there is an unknown networking error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.network" = "網路要求失敗"; + +/* Error message shown when there is an internet connection error while scanning a barcode. */ +"pointOfSale.barcodeScan.error.noInternetConnection" = "沒有網際網路連線"; + +/* Error message shown when parent product is not found for a variation. */ +"pointOfSale.barcodeScan.error.noParentProduct" = "找不到該款式的上層商品"; + +/* Error message shown when a scanned item is not found in the store. */ +"pointOfSale.barcodeScan.error.notFound" = "不明的掃描商品"; + +/* Error message shown when a scanned item is of an unsupported type. */ +"pointOfSale.barcodeScan.error.unsupportedProductType" = "不支援的商品類別"; + /* Indicates the status of a card reader. Presented to users when payment collection starts */ "pointOfSale.cardPresent.cancelledOnReader.title" = "讀卡機付款取消"; @@ -11685,6 +11736,9 @@ which should be translated separately and considered part of this sentence. */ /* The accessibility label for the `x` button next to each item in the Point of Sale cart.The button removes the item. The translation should be short, to make it quick to navigate by voice. */ "pointOfSale.item.removeFromCart.button.accessibilityLabel" = "移除"; +/* Loading item accessibility label in POS */ +"pointOfSale.itemListCard.loadingItemAccessibilityLabel" = "載入中"; + /* Button to come back to order editing when coupon validation fails. */ "pointOfSale.orderSync.couponsError.editOrder" = "編輯訂單"; @@ -11904,6 +11958,9 @@ which should be translated separately and considered part of this sentence. */ /* Title of the simple products information modal in POS */ "pos.simpleProductsModal.title" = "為什麼我無法查看自己的商品?"; +/* Label to be displayed in the product's card when there's stock of a given product */ +"pos.stockStatusLabel.inStockWithQuantity" = "「%1$@」尚有庫存"; + /* Label to be displayed in the product's card when out of stock */ "pos.stockStatusLabel.outofstock" = "沒有庫存"; @@ -12418,6 +12475,9 @@ 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" = "取消"; +/* Label indicating the expiry date of a credit/debit card. The placeholder is the date. Reads like: Expire 08/26 */ +"shippingLabelPaymentMethod.expiry" = "於 %1$@ 到期"; + /* Badge wording when the customs information is completed */ "shippingLabels.customs.completedBadge" = "已完成"; @@ -12881,6 +12941,48 @@ which should be translated separately and considered part of this sentence. */ /* Product detailsl button title. */ "updateProductInventoryView.viewProductDetailsButtonTitle" = "檢視產品詳細資訊"; +/* Button to cancel confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.cancel" = "取消"; + +/* The first checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Terms of Service. Reads as: 'I agree to the UPS® Terms of Service.' */ +"upsTermsView.checkbox1" = "我同意 %1$@。"; + +/* The second checkbox on the UPS Terms and Conditions view. The placeholder is a link to the list of prohibited items. Reads as: 'I will not ship any Prohibited Items that UPS® disallows, nor any regulated items without the necessary permissions.' */ +"upsTermsView.checkbox2" = "我不會運送任何未經 UPS® 許可的%1$@,也不會在未取得必要權限的情況下運送任何管制商品。"; + +/* The third checkbox on the UPS Terms and Conditions view. The placeholder is a link to the UPS Technology Agreement. Reads as: 'I also agree to the UPS® Technology Agreement.' */ +"upsTermsView.checkbox3" = "我也同意 %1$@。"; + +/* Button to confirm all agreements on the UPS Terms and Conditions view */ +"upsTermsView.confirmButton" = "確認並繼續"; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorMessage" = "確認同意時,發生不明錯誤。 請再試一次。"; + +/* Title of the alert when confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.errorTitle" = "確認同意時發生錯誤"; + +/* Message on the UPS Terms and Conditions view */ +"upsTermsView.message" = "若要採用 UPS® 服務從這個地址開始送貨,請同意以下條款與條件:"; + +/* Link to the prohibited items on the UPS Terms and Conditions view */ +"upsTermsView.prohibitedItems" = "禁運物品"; + +/* Button to retry confirming all agreements on the UPS Terms and Conditions view fails */ +"upsTermsView.retry" = "重試"; + +/* Title label for the origin address on the UPS Terms and Conditions view */ +"upsTermsView.shippingFrom" = "送件地址"; + +/* Link to the technology agreement on the UPS Terms and Conditions view */ +"upsTermsView.technologyAgreement" = "UPS® 技術協議"; + +/* Link to the terms of service on the UPS Terms and Conditions view */ +"upsTermsView.termsOfService" = "UPS® 服務條款"; + +/* Title of the UPS Terms and Conditions view */ +"upsTermsView.title" = "UPS® 條款與條件"; + /* Label displayed on video media items. */ "video" = "影片"; @@ -13391,6 +13493,15 @@ which should be translated separately and considered part of this sentence. */ /* Message to be displayed after moving items between shipments in the shipping label creation flow. The placeholders are the number of items and shipment index respectively. Reads as: 'Moved 3 items to Shipment 2'. */ "wooShipping.createLabels.splitShipment.movingCompletionFormat" = "已將 %1$@移至 %2$@"; +/* Cancel button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.cancel" = "取消"; + +/* Retry button title on the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.retry" = "重試"; + +/* Title of the error alert when saving split shipment changes fails */ +"wooShipping.createLabels.splitShipment.saveShipmentError.title" = "無法儲存變更。 請再試一次。"; + /* Label for a shipment during shipping label creation. The placeholder is the index of the shipment. Reads like: 'Shipment 1' */ "wooShipping.createLabels.splitShipment.shipmentFormat" = "貨件 %1$d"; @@ -13640,6 +13751,30 @@ which should be translated separately and considered part of this sentence. */ /* Title of the HAZMAT detail view in the shipping label creation flow */ "wooShippingHazmatDetailView.title" = "你要寄送的貨件,是否包含有害或危險物品?"; +/* Button to dismiss the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.doneButton" = "完成"; + +/* Notice displayed after adding a new payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.methodAddedNotice" = "已新增付款方式"; + +/* Title of the web view to add payment method for shipping label purchase */ +"wooShippingPaymentMethodsView.addPaymentMethod.webViewTitle" = "新增付款方式"; + +/* Button to confirm a credit/debit for purchasing a shipping label */ +"wooShippingPaymentMethodsView.confirmButton" = "使用這張卡"; + +/* Button to dismiss an error alert on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.cancel" = "取消"; + +/* Button to retry an action on the shipping label payment method sheet */ +"wooShippingPaymentMethodsView.confirmError.retry" = "重試"; + +/* Title of the error alert when confirming a payment method for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.confirmErrorTitle" = "無法確認付款方式"; + +/* Label of the toggle to enable emailing receipt upon purchasing a shipping label */ +"wooShippingPaymentMethodsView.emailReceipt" = "以電子郵件傳送收據"; + /* Action button on the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.actionButton" = "新增信用卡或簽帳金融卡"; @@ -13649,6 +13784,15 @@ which should be translated separately and considered part of this sentence. */ /* Title of the payment method empty sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.emptyView.title" = "新增付款方式"; +/* Note of the payment method sheet in the Shipping Label purchase flow. Placeholders are the name and username of an associated WordPress account. Please keep the `@` in front of the second placeholder. */ +"wooShippingPaymentMethodsView.noteWithUsername" = "從以下 WordPress.com 帳號擷取信用卡資訊:%1$@ <@%2$@>。"; + +/* Note for users without permission to manage payment methods for shipping label purchase. The placeholders are the store owner name and username respectively. */ +"wooShippingPaymentMethodsView.paymentMethodsNotEditableNote" = "僅限網站擁有者能管理運送標籤付款方式。 請聯絡商店擁有者「%1$@」(%2$@) 以管理付款方式。"; + +/* Title of the error alert when refresh payment methods for purchasing shipping label fails */ +"wooShippingPaymentMethodsView.refreshErrorTitle" = "無法重新整理付款方式"; + /* Subtitle of the payment method sheet in the Shipping Label purchase flow */ "wooShippingPaymentMethodsView.subtitle" = "選擇付款方式。"; diff --git a/WooCommerce/WooCommerceTests/Mocks/MockKingfisherImageDownloader.swift b/WooCommerce/WooCommerceTests/Mocks/MockKingfisherImageDownloader.swift index ca87e7a075a..71c653f5e4f 100644 --- a/WooCommerce/WooCommerceTests/Mocks/MockKingfisherImageDownloader.swift +++ b/WooCommerce/WooCommerceTests/Mocks/MockKingfisherImageDownloader.swift @@ -5,6 +5,8 @@ final class MockKingfisherImageDownloader: Kingfisher.ImageDownloader { // Mocks in-memory cache. private let imagesByKey: [String: UIImage] + private(set) var capturedProcessor: ImageProcessor? + init(imagesByKey: [String: UIImage]) { self.imagesByKey = imagesByKey super.init(name: "Mock!") @@ -14,6 +16,14 @@ final class MockKingfisherImageDownloader: Kingfisher.ImageDownloader { options: KingfisherOptionsInfo? = nil, progressBlock: DownloadProgressBlock?, completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? { + if let options = options { + for option in options { + if case .processor(let processor) = option { + capturedProcessor = processor + break + } + } + } if let image = imagesByKey[url.absoluteString] { completionHandler?(.success(.init(image: image, url: url, originalData: Data()))) } else { @@ -25,6 +35,7 @@ final class MockKingfisherImageDownloader: Kingfisher.ImageDownloader { override func downloadImage(with url: URL, options: KingfisherParsedOptionsInfo, completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? { + capturedProcessor = options.processor if let image = imagesByKey[url.absoluteString] { completionHandler?(.success(.init(image: image, url: url, originalData: Data()))) } else { diff --git a/WooCommerce/WooCommerceTests/Tools/DefaultImageServiceTests.swift b/WooCommerce/WooCommerceTests/Tools/DefaultImageServiceTests.swift index 5f74952e00d..5b5e12786e6 100644 --- a/WooCommerce/WooCommerceTests/Tools/DefaultImageServiceTests.swift +++ b/WooCommerce/WooCommerceTests/Tools/DefaultImageServiceTests.swift @@ -265,4 +265,40 @@ final class DefaultImageServiceTests: XCTestCase { waitForExpectations(timeout: Constants.expectationTimeout, handler: nil) } + + func testDownloadAndCacheImageForImageView_withEmptyBounds_usesDefaultThumbnailSize() { + // Given + let originalFeatureFlagService = ServiceLocator.featureFlagService + defer { + ServiceLocator.setFeatureFlagService(originalFeatureFlagService) + } + + ServiceLocator.setFeatureFlagService( + MockFeatureFlagService( + isProductImageOptimizedHandlingEnabled: true + ) + ) + + let mockImageView = UIImageView(frame: .zero) + let mockCache = MockImageCache(name: "Testing") + let mockDownloader = MockKingfisherImageDownloader(imagesByKey: [url.absoluteString: testImage]) + imageService = DefaultImageService(imageCache: mockCache, imageDownloader: mockDownloader) + + // When + imageService.downloadAndCacheImageForImageView( + mockImageView, + with: url.absoluteString, + placeholder: nil, + progressBlock: nil, + completion: nil + ) + + // Then + guard let downsamplingProcessor = mockDownloader.capturedProcessor as? DownsamplingImageProcessor else { + XCTFail("DownsamplingImageProcessor not found or not the correct type") + return + } + + XCTAssertEqual(downsamplingProcessor.size, CGSize(width: 800, height: 800)) + } } diff --git a/WooCommerce/WooCommerceTests/ViewRelated/Shipping Label/WooShipping Create Shipping Labels/WooShippingAddCustomPackageViewModelTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/Shipping Label/WooShipping Create Shipping Labels/WooShippingAddCustomPackageViewModelTests.swift index 4a749f5f999..c855584dcaf 100644 --- a/WooCommerce/WooCommerceTests/ViewRelated/Shipping Label/WooShipping Create Shipping Labels/WooShippingAddCustomPackageViewModelTests.swift +++ b/WooCommerce/WooCommerceTests/ViewRelated/Shipping Label/WooShipping Create Shipping Labels/WooShippingAddCustomPackageViewModelTests.swift @@ -187,6 +187,43 @@ final class WooShippingAddCustomPackageViewModelTests: XCTestCase { XCTAssertEqual(updatedPackageData.id, "a") } + func test_packageData_does_not_show_height_if_height_is_unavailable() throws { + // Given + let dimensionUnit = "cm" + let weightUnit = "kg" + let siteID: Int64 = 1234 + let mockStores = MockStoresManager(sessionManager: .testingInstance) + let viewModel = WooShippingAddCustomPackageViewModel(siteID: siteID, + stores: mockStores) + let length = "1" + let width = "2" + let height = "0" + let weight = "4" + + let expectedDimensions = "\(length) x \(width) \(dimensionUnit)" + let expectedWeight = "\(weight) \(weightUnit)" + + // When + viewModel.fieldValues[.length] = length + viewModel.fieldValues[.width] = width + viewModel.fieldValues[.height] = height + viewModel.fieldValues[.weight] = weight + + // Then + let packageData = try XCTUnwrap(viewModel.packageData) + XCTAssertEqual(packageData.dimensionsDescription(unit: dimensionUnit), expectedDimensions) + XCTAssertEqual(packageData.weightDescription(unit: weightUnit), expectedWeight) + XCTAssertEqual(packageData.id, "custom_box") + + // When: selecting a template + viewModel.showSaveTemplate = true + viewModel.packageTemplateName = "a" + + // Then + let updatedPackageData = try XCTUnwrap(viewModel.packageData) + XCTAssertEqual(updatedPackageData.id, "a") + } + @MainActor func test_save_package_as_template_action() async { // Given diff --git a/config/Version.Public.xcconfig b/config/Version.Public.xcconfig index 2b36ae0f073..56beba17fc2 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.6.0.1 +VERSION_LONG = 22.6.0.2 VERSION_SHORT = 22.6 diff --git a/fastlane/metadata/de-DE/release_notes.txt b/fastlane/metadata/de-DE/release_notes.txt index 65822b50162..c2f75a500da 100644 --- a/fastlane/metadata/de-DE/release_notes.txt +++ b/fastlane/metadata/de-DE/release_notes.txt @@ -1 +1 @@ -Deine Versanderfahrung mit Shipping ist jetzt noch besser! Durch unseren überarbeiteten Workflow ist es so einfach wie noch nie, Versandetiketten für Shops mit WooCommerce Shipping zu erstellen und zu verwalten. Wir haben auch einige Icons verbessert und ein Anzeigeproblem behoben, das sich bei der letzten Aktualisierung der Bestellliste ins System geschlichen hat. In dieser Version haben wir auch einige Performance-Verbesserungen hinter den Kulissen vorgenommen. +Deine Versanderfahrung mit Shipping ist jetzt noch besser! Durch unseren überarbeiteten Workflow ist es so einfach wie noch nie, Versandetiketten für Shops, die WooCommerce Shipping nutzen, zu erstellen und zu verwalten. Wir haben auch einige Icons verbessert und ein Anzeigeproblem behoben, das die Zeit für "zuletzt aktualisiert" für die Bestellliste betraf. In dieser Version haben wir auch einige Performance-Verbesserungen hinter den Kulissen vorgenommen. diff --git a/fastlane/metadata/fr-FR/release_notes.txt b/fastlane/metadata/fr-FR/release_notes.txt new file mode 100644 index 00000000000..1f2db0bf9ea --- /dev/null +++ b/fastlane/metadata/fr-FR/release_notes.txt @@ -0,0 +1 @@ +L’expédition vient de faire l’objet d’une mise à niveau majeure ! Notre flux remanié facilite plus que jamais la création et la gestion des étiquettes d’expédition pour les boutiques qui utilisent WooCommerce Shipping. Nous avons également amélioré certaines icônes et résolu un problème d’affichage lié à la dernière mise à jour de la liste de commandes. Cette version comporte également quelques améliorations des performances en arrière-plan. diff --git a/fastlane/metadata/he/release_notes.txt b/fastlane/metadata/he/release_notes.txt new file mode 100644 index 00000000000..d5a30b880e5 --- /dev/null +++ b/fastlane/metadata/he/release_notes.txt @@ -0,0 +1 @@ +המשלוחים השתדרגו באופן משמעותי! תהליך העבודה החדש יעזור לך ליצור ולנהל תוויות משלוח לחנויות באמצעות WooCommerce Shipping בקלות רבה יותר. שיפרנו גם כמה סמלים ותיקנו בעיית תצוגה שהופיעה בזמני העדכון האחרון ברשימת ההזמנות. גרסה זו כוללת גם מספר שיפורים של ביצועים מאחורי הקלעים. diff --git a/fastlane/metadata/id/release_notes.txt b/fastlane/metadata/id/release_notes.txt index 3e5333ce439..b07ebc7b5e5 100644 --- a/fastlane/metadata/id/release_notes.txt +++ b/fastlane/metadata/id/release_notes.txt @@ -1 +1 @@ -Pengiriman baru saja diupgrade besar-besaran! Alur yang baru memudahkan pembuatan dan pengelolaan label pengiriman toko menggunakan WooCommerce Shipping. Kami juga telah memperbaiki beberapa ikon dan masalah tampilan pada waktu pembaruan terakhir daftar pesanan. Rilis ini menyediakan beberapa peningkatan performa di balik layar. +Pengiriman baru saja diupgrade besar-besaran! Alur yang baru memudahkan pembuatan dan pengelolaan label pengiriman toko menggunakan WooCommerce Shipping. Kami juga telah memperbaiki beberapa ikon dan masalah tampilan pada waktu pembaruan terakhir daftar pesanan. Rilis ini juga menyediakan beberapa peningkatan performa di balik layar. diff --git a/fastlane/metadata/it/release_notes.txt b/fastlane/metadata/it/release_notes.txt index 39b1009b986..676a0d57110 100644 --- a/fastlane/metadata/it/release_notes.txt +++ b/fastlane/metadata/it/release_notes.txt @@ -1 +1 @@ -La spedizione ha appena ottenuto un aggiornamento importante. Il nostro nuovo flusso facilita più che mai la creazione e la gestione delle etichette di spedizione per i negozi attraverso l'utilizzo di WooCommerce Shipping. Abbiamo anche perfezionato alcune icone e risolto un problema di visualizzazione riguardante l'ora dell'ultimo aggiornamento dell'elenco degli ordini. Questo rilascio include anche alcuni miglioramenti dietro le quinte delle prestazioni. +La spedizione ha appena ottenuto un aggiornamento importante. Il nostro nuovo flusso facilita più che mai la creazione e la gestione delle etichette di spedizione per i negozi attraverso l'utilizzo di WooCommerce Shipping. Abbiamo anche perfezionato alcune icone e risolto un problema di visualizzazione riguardante l'ora dell'ultimo aggiornamento dell'elenco degli ordini. Questa versione include anche alcuni miglioramenti dietro le quinte delle prestazioni. diff --git a/fastlane/metadata/nl-NL/release_notes.txt b/fastlane/metadata/nl-NL/release_notes.txt new file mode 100644 index 00000000000..385e4f2f489 --- /dev/null +++ b/fastlane/metadata/nl-NL/release_notes.txt @@ -0,0 +1 @@ +De verzending heeft zojuist een grote upgrade gekregen! Ons vernieuwde proces maakt het eenvoudiger dan ooit om verzendlabels voor winkels te maken en te beheren met WooCommerce Shipping. We hebben ook enkele pictogrammen verbeterd en een weergaveprobleem opgelost m.b.t. de laatst bijgewerkte tijd van de bestellijst. Deze release bevat ook wat prestatieverbeteringen voor achter de schermen. diff --git a/fastlane/metadata/pt-BR/release_notes.txt b/fastlane/metadata/pt-BR/release_notes.txt new file mode 100644 index 00000000000..b8bc96adc36 --- /dev/null +++ b/fastlane/metadata/pt-BR/release_notes.txt @@ -0,0 +1 @@ +O Shipping acaba de receber um upgrade importante. Com nosso fluxo renovado, ficou mais fácil do que nunca criar e gerenciar etiquetas de envio para lojas que usam o WooCommerce Shipping. Melhoramos alguns ícones e corrigimos um problema de exibição da hora da última atualização da lista de pedidos. Esta versão inclui algumas melhorias no desempenho também. diff --git a/fastlane/metadata/sv/release_notes.txt b/fastlane/metadata/sv/release_notes.txt new file mode 100644 index 00000000000..d9105677b21 --- /dev/null +++ b/fastlane/metadata/sv/release_notes.txt @@ -0,0 +1 @@ +Frakt har precis fått en stor uppgradering! Vårt moderniserade flöde gör det enklare än någonsin att skapa och hantera fraktetiketter för butiker med WooCommerce Shipping. Vi har även förbättrat några ikoner och åtgärdat ett visningsproblem med beställningslistans senast uppdaterade tid. Den här versionen inkluderar även ett antal förbättringar bakom kulisserna. diff --git a/fastlane/metadata/zh-Hans/release_notes.txt b/fastlane/metadata/zh-Hans/release_notes.txt index 5e7820e5a90..d835262914d 100644 --- a/fastlane/metadata/zh-Hans/release_notes.txt +++ b/fastlane/metadata/zh-Hans/release_notes.txt @@ -1 +1 @@ -配送服务刚刚历经重大升级! 我们改进了流程,让使用 WooCommerce Shipping 的商店可以比以往更轻松地创建和管理配送标签。 此外,我们还改进了一些图标,并修复了订单列表最后更新时间的显示问题。 此版本还包含一些后台性能改进。 +配送功能现已重磅升级! 通过我们全新打造的流程,WooCommerce Shipping 商家的配送标签创建与管理将变得前所未有的轻松。 此外,我们还优化了部分图标样式,并修复了订单列表“最后更新时间”的显示问题。 此版本还包含多项后台性能改进。 diff --git a/fastlane/metadata/zh-Hant/release_notes.txt b/fastlane/metadata/zh-Hant/release_notes.txt new file mode 100644 index 00000000000..92876260959 --- /dev/null +++ b/fastlane/metadata/zh-Hant/release_notes.txt @@ -0,0 +1 @@ +運送功能剛獲得全面升級! 流程經過改頭換面,方便你輕輕鬆鬆透過 WooCommerce Shipping 為商店建立和管理貨運標籤。 我們也提升了部分圖示,並修正了訂單清單最後更新時間的顯示問題。 此版本也包含一些幕後效能改善項目。