@@ -1869,6 +1869,9 @@ which should be translated separately and considered part of this sentence. */
18691869/* Title of the booking customer selector view */
18701870"bookingCustomerSelectorView.title" = "Customer";
18711871
1872+ /* Title of the Clear button in the date time picker for booking filter */
1873+ "bookingDateTimeFilterView.clear" = "Clear";
1874+
18721875/* Title of the Date row in the date time picker for booking filter */
18731876"bookingDateTimeFilterView.date" = "Date";
18741877
@@ -1917,6 +1920,9 @@ which should be translated separately and considered part of this sentence. */
19171920/* Add a booking note section in booking details view. */
19181921"BookingDetailsView.bookingNote.addNoteRow.title" = "Add note";
19191922
1923+ /* Content of error presented when updating the not of a Booking fails. It reads: Unable to update note of Booking #{Booking number}. Parameters: %1$d - Booking number */
1924+ "BookingDetailsView.bookingNote.failureMessage." = "Unable to update note of Booking #%1$d.";
1925+
19201926/* Footer text for the `Booking note` section in the booking details screen. */
19211927"BookingDetailsView.bookingNote.footerText" = "This is a private note. It'll not be shared with the customer.";
19221928
@@ -1956,6 +1962,9 @@ which should be translated separately and considered part of this sentence. */
19561962/* Header title for the 'Customer' section in the booking details screen. */
19571963"BookingDetailsView.customer.headerTitle" = "Customer";
19581964
1965+ /* Customer note row title in customer section in booking details view. */
1966+ "BookingDetailsView.customer.note.title" = "Note";
1967+
19591968/* 'Status' row title in attendance section in booking details view. */
19601969"BookingDetailsView.customer.status.title" = "Status";
19611970
@@ -2040,8 +2049,11 @@ which should be translated separately and considered part of this sentence. */
20402049/* Description for booking date range filter with only end date. Placeholder is a date. Reads as: Until October 27, 2025. */
20412050"bookingFiltersViewModel.dateRangeFilter.until" = "Until %1$@";
20422051
2043- /* Message displayed when searching bookings by keyword yields no results. */
2044- "bookingList.emptySearchText" = "We couldn't find any bookings with that name — try adjusting your search term to see more results.";
2052+ /* Button to clear the filters on booking list */
2053+ "bookingList.clearFilters" = "Clear filters";
2054+
2055+ /* Message displayed when searching bookings by keyword yields no results. Version without a dash. */
2056+ "bookingList.emptySearchText.noDash" = "We couldn't find any bookings with that name. Try adjusting your search term to see more results.";
20452057
20462058/* Error message when fetching bookings fails */
20472059"bookingList.errorMessage" = "Error fetching bookings";
@@ -2055,20 +2067,26 @@ which should be translated separately and considered part of this sentence. */
20552067/* Tab title for all bookings */
20562068"bookingListView.all" = "All";
20572069
2058- /* Description for the empty state when there's no bookings for the given filter */
2059- "bookingListView.emptyState.filter .description" = "No bookings match your filters. Try adjusting them to see more results .";
2070+ /* Description for the empty state when there's no bookings at all so far */
2071+ "bookingListView.emptyState.all .description" = "Bookings will appear here once customers start scheduling your services or registering for events .";
20602072
2061- /* Title for the empty state when there's no bookings for the given filter */
2073+ /* Title for the empty state when there's no bookings at all so far */
2074+ "bookingListView.emptyState.all.title" = "No bookings yet";
2075+
2076+ /* Description for the empty state when there's no bookings for the given filters */
2077+ "bookingListView.emptyState.filter.description.i3" = "Try adjusting or clearing your filters to see more results.";
2078+
2079+ /* Title for the empty state when there's no bookings for the given filters */
20622080"bookingListView.emptyState.filter.title" = "No bookings found";
20632081
20642082/* Description for the empty state when no bookings for today is found */
2065- "bookingListView.emptyState.today.description" = "You don't have any appointments or events scheduled for today.";
2083+ "bookingListView.emptyState.today.description.i3 " = "Any bookings scheduled for today will appear here .";
20662084
20672085/* Title for the empty state when no bookings for today is found */
20682086"bookingListView.emptyState.today.title" = "No bookings today";
20692087
20702088/* Description for the empty state when there's no upcoming bookings */
2071- "bookingListView.emptyState.upcoming.description" = "You don't have any future appointments or events scheduled yet .";
2089+ "bookingListView.emptyState.upcoming.description.i3 " = "New bookings will appear here as customers schedule your services or register for events .";
20722090
20732091/* Title for the empty state when there's no bookings for today */
20742092"bookingListView.emptyState.upcoming.title" = "No upcoming bookings";
@@ -2094,18 +2112,6 @@ which should be translated separately and considered part of this sentence. */
20942112/* Title of the booking list view */
20952113"bookingListView.view.title" = "Bookings";
20962114
2097- /* Status of a paid booking */
2098- "bookingPaymentStatus.title.paid" = "Paid";
2099-
2100- /* Status of a refunded booking */
2101- "bookingPaymentStatus.title.refunded" = "Refunded";
2102-
2103- /* Status of a booking with unexpected payment status */
2104- "bookingPaymentStatus.title.unknown" = "Unknown";
2105-
2106- /* Status of an unpaid booking */
2107- "bookingPaymentStatus.title.unpaid" = "Unpaid";
2108-
21092115/* Displayed name on the booking list when no customer is associated with a booking. */
21102116"bookings.guest" = "Guest";
21112117
@@ -7653,6 +7659,33 @@ which should be translated separately and considered part of this sentence. */
76537659/* Button title to retry synchronizing order and calculating order totals */
76547660"pointOfSale.orderSync.error.tryAgain" = "Try again";
76557661
7662+ /* Button to return to order editing when products are no longer available */
7663+ "pointOfSale.orderSync.missingProductsError.editOrder" = "Edit order";
7664+
7665+ /* Button title to remove a single unavailable product and retry creating the order */
7666+ "pointOfSale.orderSync.missingProductsError.removeProductSingular" = "Remove product";
7667+
7668+ /* Button title to remove multiple unavailable products and retry creating the order */
7669+ "pointOfSale.orderSync.missingProductsError.removeProductsPlural" = "Remove products";
7670+
7671+ /* Subtitle of the error when we can't identify which specific product is no longer available. */
7672+ "pointOfSale.orderSync.missingProductsError.subtitleGenericProduct" = "A product in the cart is no longer available.";
7673+
7674+ /* Subtitle of the error when multiple products are no longer available */
7675+ "pointOfSale.orderSync.missingProductsError.subtitlePlural" = "Some products in your cart are no longer available.";
7676+
7677+ /* Subtitle of the error when a single product is no longer available. Placeholder is the product name. */
7678+ "pointOfSale.orderSync.missingProductsError.subtitleSingular" = "%@ is no longer available.";
7679+
7680+ /* Title of the error when multiple products in the cart are no longer available */
7681+ "pointOfSale.orderSync.missingProductsError.titlePlural" = "Products no longer available";
7682+
7683+ /* Title of the error when a single product in the cart is no longer available */
7684+ "pointOfSale.orderSync.missingProductsError.titleSingular" = "Product no longer available";
7685+
7686+ /* Generic product name used when we can't identify which specific product is unavailable */
7687+ "pointOfSale.orderSync.missingProductsError.unknownProductName" = "One or more products";
7688+
76567689/* Message shown to users when payment is made. %1$@ is a placeholder for the order total, e.g $10.50. Please include %1$@ in your formatted string */
76577690"pointOfSale.paymentSuccessful.message.card.1" = "A card payment of %1$@ was successfully made.";
76587691
@@ -7839,7 +7872,7 @@ which should be translated separately and considered part of this sentence. */
78397872"pointOfSaleSettingsView.sidebarNavigationLocalCatalogSubtitle" = "Manage catalog settings";
78407873
78417874/* Title of the Local catalog section within Point of Sale settings. */
7842- "pointOfSaleSettingsView.sidebarNavigationLocalCatalogTitle" = "Catalog ";
7875+ "pointOfSaleSettingsView.sidebarNavigationLocalCatalogTitle.2 " = "Product catalog ";
78437876
78447877/* Description of the settings to be found within the Store section. */
78457878"pointOfSaleSettingsView.sidebarNavigationStoreSubtitle" = "Store configuration and settings";
@@ -8033,6 +8066,9 @@ which should be translated separately and considered part of this sentence. */
80338066/* Title for the 'Clear cart' confirmation button to remove all products from the Cart. */
80348067"pos.cartView.clearButtonTitle.1" = "Clear cart";
80358068
8069+ /* Title appearing in a modal when there's an error refreshing the catalog. */
8070+ "pos.catalog.refreshFailedTitle" = "Unable to refresh catalog";
8071+
80368072/* Title shown on a toast view that appears when there's no internet connection */
80378073"pos.connectivity.title" = "No internet connection";
80388074
@@ -8268,7 +8304,7 @@ which should be translated separately and considered part of this sentence. */
82688304"pos.orderListView.emptyOrdersSearchHint" = "Try adjusting your search term.";
82698305
82708306/* Subtitle appearing when order search returns no results. */
8271- "pos.orderListView.emptyOrdersSearchSubtitle" = "We couldn't find any orders matching your search .";
8307+ "pos.orderListView.emptyOrdersSearchSubtitle.1 " = "We couldn't find any orders with that name .";
82728308
82738309/* Title appearing when order search returns no results. */
82748310"pos.orderListView.emptyOrdersSearchTitle" = "No orders found";
@@ -8304,7 +8340,7 @@ which should be translated separately and considered part of this sentence. */
83048340"pos.parentProductCard.optionsAvailable" = "Options available";
83058341
83068342/* Text appearing on the coupons list screen as subtitle when there's no coupons found. */
8307- "pos.pointOfSaleItemListEmptyView.emptyCouponSearchSubtitle.2 " = "We couldn’t find any coupons with that name — try adjusting your search term.";
8343+ "pos.pointOfSaleItemListEmptyView.emptyCouponSearchSubtitle.3 " = "We couldn’t find any coupons with that name. Try adjusting your search term.";
83088344
83098345/* Text appearing on the coupons list screen as subtitle when there's no coupons found. */
83108346"pos.pointOfSaleItemListEmptyView.emptyCouponsSubtitle.2" = "Coupons can be an effective way to drive business. Would you like to create one?";
@@ -8322,7 +8358,7 @@ which should be translated separately and considered part of this sentence. */
83228358"pos.pointOfSaleItemListEmptyView.emptyProductsSearchHint" = "Variation names can't be searched, so use the parent product name.";
83238359
83248360/* Subtitle text suggesting to modify search terms when no products are found in the POS product search. */
8325- "pos.pointOfSaleItemListEmptyView.emptyProductsSearchSubtitle.2 " = "We couldn't find any matching products — try adjusting your search term.";
8361+ "pos.pointOfSaleItemListEmptyView.emptyProductsSearchSubtitle.3 " = "We couldn't find any matching products. Try adjusting your search term.";
83268362
83278363/* Text appearing on screen when a POS product search returns no results. */
83288364"pos.pointOfSaleItemListEmptyView.emptyProductsSearchTitle.2" = "No products found";
@@ -8402,38 +8438,41 @@ which should be translated separately and considered part of this sentence. */
84028438/* An error shown when the Point of Sale is used in iOS split view, but with not enough horizontal space. */
84038439"pos.unsupportedWidth.title" = "Point of Sale is not supported in this screen width.";
84048440
8405- /* Label for allow full sync on cellular data toggle in Point of Sale settings. */
8406- "posSettingsLocalCatalogDetailView.allowFullSyncOnCellular.1 " = "Allow full update on cellular data";
8441+ /* Label for allow sync on cellular data toggle in Point of Sale settings. */
8442+ "posSettingsLocalCatalogDetailView.allowSyncOnCellular.2 " = "Allow sync using cellular data";
84078443
8408- /* Label for catalog size field in Point of Sale settings. */
8409- "posSettingsLocalCatalogDetailView.catalogSize" = "Catalog size";
8444+ /* Button text for closing an error after a refresh fails */
8445+ "posSettingsLocalCatalogDetailView.catalogRefresh.error.cancelButton.title" = "Cancel";
8446+
8447+ /* Button text for retrying a refresh after it fails */
8448+ "posSettingsLocalCatalogDetailView.catalogRefresh.error.retryButton.title" = "Retry";
84108449
8411- /* Section title for catalog status in Point of Sale settings. */
8412- "posSettingsLocalCatalogDetailView.catalogStatus " = "Catalog Status ";
8450+ /* Label for catalog size field in Point of Sale settings. */
8451+ "posSettingsLocalCatalogDetailView.catalogSize.1 " = "Size ";
84138452
84148453/* Label for last full sync field in Point of Sale settings. */
8415- "posSettingsLocalCatalogDetailView.lastFullSync.1 " = "Last full update ";
8454+ "posSettingsLocalCatalogDetailView.lastFullSync.2 " = "Last full sync ";
84168455
8417- /* Label for last incremental update field in Point of Sale settings. */
8418- "posSettingsLocalCatalogDetailView.lastIncrementalSync" = "Last update ";
8456+ /* Label for last incremental sync field in Point of Sale settings. */
8457+ "posSettingsLocalCatalogDetailView.lastIncrementalSync.1 " = "Last incremental sync ";
84198458
84208459/* Section title for managing data usage in Point of Sale settings. */
8421- "posSettingsLocalCatalogDetailView.managingDataUsage.1 " = "Managing Data Usage ";
8460+ "posSettingsLocalCatalogDetailView.managingDataUsage.2 " = "Cellular data ";
84228461
84238462/* Section title for manual catalog update in Point of Sale settings. */
8424- "posSettingsLocalCatalogDetailView.manualCatalogUpdate" = "Manual Catalog Update";
8425-
8426- /* Info text explaining when to use manual catalog update. */
8427- "posSettingsLocalCatalogDetailView.manualUpdateInfo" = "Use this refresh only when something seems off - POS keeps data current automatically.";
8463+ "posSettingsLocalCatalogDetailView.manualCatalogUpdate.1" = "Catalog update";
84288464
8429- /* Button text for refreshing the catalog manually . */
8430- "posSettingsLocalCatalogDetailView.refreshCatalog " = "Refresh catalog";
8465+ /* Info text explaining the usage of the manual catalog update button . */
8466+ "posSettingsLocalCatalogDetailView.manualUpdateInfo.1 " = "Update the catalog manually ";
84318467
84328468/* Navigation title for the local catalog details in POS settings. */
8433- "posSettingsLocalCatalogDetailView.title" = "Catalog Settings";
8469+ "posSettingsLocalCatalogDetailView.title.1" = "Product catalog";
8470+
8471+ /* Button text for updating the catalog manually. */
8472+ "posSettingsLocalCatalogDetailView.updateCatalog" = "Update catalog";
84348473
84358474/* Format string for catalog size showing product count and variation count. %1$d will be replaced by the product count, and %2$ld will be replaced by the variation count. */
8436- "posSettingsLocalCatalogViewModel.catalogSizeFormat" = "%1$d products, %2$ld variations";
8475+ "posSettingsLocalCatalogViewModel.catalogSizeFormat" = "%1$d products and %2$ld variations";
84378476
84388477/* Text shown when catalog size cannot be determined. */
84398478"posSettingsLocalCatalogViewModel.catalogSizeUnavailable" = "Catalog size unavailable";
0 commit comments