Commit fc6822d036f for woocommerce

commit fc6822d036f63b5a280bd98dc6e0abb96273c159
Author: Luigi Teschio <gigitux@gmail.com>
Date:   Tue Oct 13 18:58:13 2026 +0200

    Restore translated metadata for product, Cart, and Checkout blocks (#69700)

    * fix blocks translations

    * remove unit test

    * update agent.md

    * improve types

    * simplify variation logic

    * improve ts-expect-error comment

diff --git a/AGENTS.md b/AGENTS.md
index 90b1dc2247d..0aa6068bd1d 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -277,6 +277,16 @@ Do not add `default` values to block attributes in `block.json`.

 Consult the [Gutenberg Block Metadata reference](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/) as the source of truth for `block.json` field types. Several fields (`style`, `editorStyle`, `script`, `viewScript`) accept `string | string[]`, so code that reads them must handle both shapes — don't assume a string.

+### Block Metadata Translations
+
+**Preserve server-translated metadata when registering blocks.** Pass the complete `block.json` metadata object as the first argument to `registerBlockType( metadata, settings )`, including through registration helpers.
+
+### Block Variation Translations
+
+When registering a block variation with `registerBlockVariation()` or a helper such as `registerElementVariation()`, translate its title, description, and keywords with `@wordpress/i18n` functions using literal strings and the `woocommerce` text domain, for example `__( 'Display the title of a product.', 'woocommerce' )`.
+
+Do not import these user-facing strings from `block.json`, pass JSON properties or variables to translation functions, or read another block's registered metadata to obtain them.
+
 ## Interactivity API Stores

 Most WooCommerce Interactivity API stores are **private by design**. Exception: the `woocommerce/product-filters` store is public for Product Filters inner-block extensibility.
diff --git a/plugins/woocommerce/changelog/fix-block-metadata-translations b/plugins/woocommerce/changelog/fix-block-metadata-translations
new file mode 100644
index 00000000000..e4a596aee3b
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-block-metadata-translations
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Restore translated names for product, Cart, Checkout blocks and related product patterns in the editor.
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-accepted-payment-methods-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-accepted-payment-methods-block/index.tsx
index 96c2f2e6c5b..7de16410ace 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-accepted-payment-methods-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-accepted-payment-methods-block/index.tsx
@@ -10,9 +10,7 @@ import { Icon, payment } from '@wordpress/icons';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-accepted-payment-methods-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-cross-sells-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-cross-sells-block/index.tsx
index 1a351b8116f..e212a12a8cf 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-cross-sells-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-cross-sells-block/index.tsx
@@ -34,10 +34,8 @@ export const createCrossSellsProductCollection = () => {
 	);
 };

-// @ts-expect-error - blockName can be either string or object
-registerBlockType( 'woocommerce/cart-cross-sells-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+// @ts-expect-error - registerBlockType isn't well typed for metadata as the first argument
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-cross-sells-products/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-cross-sells-products/index.tsx
index 22930e0665f..8398fb0639a 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-cross-sells-products/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-cross-sells-products/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import './style.scss';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-cross-sells-products-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-express-payment-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-express-payment-block/index.tsx
index 168b74a4203..feb2fccb080 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-express-payment-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-express-payment-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import expressIcon from '../../../cart-checkout-shared/icon';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-express-payment-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-items-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-items-block/index.tsx
index 7af4751fa23..60630fb161a 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-items-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-items-block/index.tsx
@@ -10,9 +10,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-items-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-line-items-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-line-items-block/index.tsx
index 88d93d5383e..60630fb161a 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-line-items-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-line-items-block/index.tsx
@@ -10,9 +10,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-line-items-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-block/index.tsx
index 13f29b22905..ee2310f894e 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-block/index.tsx
@@ -12,9 +12,7 @@ import { Edit, Save } from './edit';
 import deprecated from './deprecated';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-order-summary-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-coupon-form/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-coupon-form/index.tsx
index 3f0ad196e2f..f81289a9b5b 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-coupon-form/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-coupon-form/index.tsx
@@ -14,9 +14,7 @@ import metadata from './block.json';
  */
 import { Edit, Save } from './edit';

-registerBlockType( 'woocommerce/cart-order-summary-coupon-form-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-discount/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-discount/index.tsx
index 48ed2aaee94..a605dc326d2 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-discount/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-discount/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-order-summary-discount-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-fee/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-fee/index.tsx
index 9be439ea90e..a605dc326d2 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-fee/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-fee/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-order-summary-fee-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-heading/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-heading/index.tsx
index 8acaa637b20..a605dc326d2 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-heading/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-heading/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-order-summary-heading-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-shipping/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-shipping/index.tsx
index f309f07b985..a605dc326d2 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-shipping/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-shipping/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-order-summary-shipping-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-subtotal/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-subtotal/index.tsx
index 007570a3dff..a605dc326d2 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-subtotal/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-subtotal/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-order-summary-subtotal-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-taxes/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-taxes/index.tsx
index ba12925d857..8248f38325b 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-taxes/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-taxes/index.tsx
@@ -12,9 +12,7 @@ import { Edit, Save } from './edit';
 import attributes from './attributes';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-order-summary-taxes-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-totals/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-totals/index.tsx
index 9ff0c432315..0b8686262d7 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-totals/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-totals/index.tsx
@@ -12,9 +12,7 @@ import { Edit, Save } from './edit';
 import './style.scss';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-order-summary-totals-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-totals-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-totals-block/index.tsx
index 31fcc9dae9c..8398fb0639a 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-totals-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/cart-totals-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import './style.scss';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/cart-totals-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/empty-cart-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/empty-cart-block/index.tsx
index 89f331facb4..5970d543ff8 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/empty-cart-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/empty-cart-block/index.tsx
@@ -12,9 +12,7 @@ import { Edit, Save } from './edit';
 import './style.scss';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/empty-cart-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/filled-cart-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/filled-cart-block/index.tsx
index ea9e446f636..143bde56f56 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/filled-cart-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/filled-cart-block/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/filled-cart-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/proceed-to-checkout-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/proceed-to-checkout-block/index.tsx
index 46589224b17..7095999610f 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/proceed-to-checkout-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/cart/inner-blocks/proceed-to-checkout-block/index.tsx
@@ -12,9 +12,7 @@ import { Edit, Save } from './edit';
 import './style.scss';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/proceed-to-checkout-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-actions-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-actions-block/index.tsx
index 30bea937bc8..dad9560cccd 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-actions-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-actions-block/index.tsx
@@ -14,9 +14,7 @@ import { Edit, Save } from './edit';
 import metadata from './block.json';
 import './style.scss';

-const blockConfig: BlockConfiguration = {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+const blockConfig: Partial< BlockConfiguration > = {
 	example: {
 		attributes: {
 			showPrice: true,
@@ -37,4 +35,4 @@ const blockConfig: BlockConfiguration = {
 	edit: Edit,
 };

-registerBlockType( 'woocommerce/checkout-actions-block', blockConfig );
+registerBlockType( metadata, blockConfig );
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-additional-information-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-additional-information-block/index.tsx
index 5032a455f79..2292c20be7c 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-additional-information-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-additional-information-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import attributes from './attributes';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-additional-information-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	attributes,
 	icon: {
 		src: (
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/index.tsx
index 5edc7b3f6ba..09a44136579 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/index.tsx
@@ -10,9 +10,7 @@ import { Edit, Save } from './edit';
 import attributes from './attributes';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-billing-address-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/index.tsx
index ab053a73a3b..96e4fc07e01 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import attributes from './attributes';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-contact-information-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-express-payment-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-express-payment-block/index.tsx
index 518fbb31016..2577baa84b1 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-express-payment-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-express-payment-block/index.tsx
@@ -11,9 +11,7 @@ import expressIcon from '../../../cart-checkout-shared/icon';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-express-payment-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/index.tsx
index 1ac9e80d91d..8398fb0639a 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import './style.scss';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-fields-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-note-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-note-block/index.tsx
index 99928d12453..6fc28ee4b4d 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-note-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-note-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import metadata from './block.json';

 // Register the block
-registerBlockType( 'woocommerce/checkout-order-note-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-block/index.tsx
index c9bb540918d..dd09b156106 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-block/index.tsx
@@ -14,9 +14,7 @@ import deprecated from './deprecated';
 import './style.scss';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-order-summary-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-cart-items/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-cart-items/index.tsx
index 5043cfdb93e..b7df95ea815 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-cart-items/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-cart-items/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-order-summary-cart-items-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-coupon-form/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-coupon-form/index.tsx
index 02830b47b10..28e8d5c6013 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-coupon-form/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-coupon-form/index.tsx
@@ -10,9 +10,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-order-summary-coupon-form-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-discount/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-discount/index.tsx
index 8f8d5c4ac28..a605dc326d2 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-discount/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-discount/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-order-summary-discount-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-fee/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-fee/index.tsx
index 34a74405f69..a605dc326d2 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-fee/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-fee/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-order-summary-fee-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-shipping/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-shipping/index.tsx
index cc5f1536fdf..a605dc326d2 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-shipping/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-shipping/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-order-summary-shipping-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-subtotal/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-subtotal/index.tsx
index 2b3e2304306..a605dc326d2 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-subtotal/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-subtotal/index.tsx
@@ -11,9 +11,7 @@ import { registerBlockType } from '@wordpress/blocks';
 import { Edit, Save } from './edit';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-order-summary-subtotal-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-taxes/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-taxes/index.tsx
index cbe89d6ff9c..8248f38325b 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-taxes/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-taxes/index.tsx
@@ -12,9 +12,7 @@ import { Edit, Save } from './edit';
 import attributes from './attributes';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-order-summary-taxes-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-totals/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-totals/index.tsx
index 615dc358a13..40ee5d7ac70 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-totals/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-totals/index.tsx
@@ -12,9 +12,7 @@ import { Edit, Save } from './edit';
 import metadata from './block.json';
 import './style.scss';

-registerBlockType( 'woocommerce/checkout-order-summary-totals-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-payment-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-payment-block/index.tsx
index 067214bab04..a932fbedcd1 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-payment-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-payment-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import attributes from './attributes';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-payment-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/index.tsx
index 575ec94b37b..24f4330c21e 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/index.tsx
@@ -12,9 +12,7 @@ import attributes from './attributes';
 import metadata from './block.json';
 import './style.scss';

-registerBlockType( 'woocommerce/checkout-pickup-options-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/index.tsx
index d56f37484df..0a1db50304a 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import attributes from './attributes';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-shipping-address-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-method-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-method-block/index.tsx
index 93c8d1e2110..cdc4138238c 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-method-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-method-block/index.tsx
@@ -12,9 +12,7 @@ import attributes from './attributes';
 import metadata from './block.json';
 import './style.scss';

-registerBlockType( 'woocommerce/checkout-shipping-method-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/index.tsx
index ca617486df0..cdc4138238c 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/index.tsx
@@ -12,9 +12,7 @@ import attributes from './attributes';
 import metadata from './block.json';
 import './style.scss';

-registerBlockType( 'woocommerce/checkout-shipping-methods-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-terms-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-terms-block/index.tsx
index d7053d1d3bf..ddc69b417a6 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-terms-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-terms-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import metadata from './block.json';
 import './style.scss';

-registerBlockType( 'woocommerce/checkout-terms-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-totals-block/index.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-totals-block/index.tsx
index 395b04e394c..8398fb0639a 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-totals-block/index.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/inner-blocks/checkout-totals-block/index.tsx
@@ -11,9 +11,7 @@ import { Edit, Save } from './edit';
 import './style.scss';
 import metadata from './block.json';

-registerBlockType( 'woocommerce/checkout-totals-block', {
-	apiVersion: metadata.apiVersion,
-	title: metadata.title,
+registerBlockType( metadata, {
 	icon: {
 		src: (
 			<Icon
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/product-collection/variations/elements/product-title.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/product-collection/variations/elements/product-title.tsx
index ef3fa76b93b..12306b8f2dc 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/product-collection/variations/elements/product-title.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/product-collection/variations/elements/product-title.tsx
@@ -3,10 +3,7 @@
  */
 import { Icon } from '@wordpress/components';
 import { heading } from '@wordpress/icons';
-import {
-	title,
-	description,
-} from '@woocommerce/product-elements/title/block.json';
+import { __ } from '@wordpress/i18n';

 /**
  * Internal dependencies
@@ -19,9 +16,12 @@ export const VARIATION_NAME = `${ blockJson.name }/product-title`;

 const registerProductTitle = () => {
 	registerElementVariation( CORE_NAME, {
-		blockDescription: description,
+		blockDescription: __(
+			'Display the title of a product.',
+			'woocommerce'
+		),
 		blockIcon: <Icon icon={ heading } />,
-		blockTitle: title,
+		blockTitle: __( 'Product Title', 'woocommerce' ),
 		variationName: VARIATION_NAME,
 		scope: [ 'block', 'inserter' ],
 	} );
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/product-query/variations/elements/product-title.tsx b/plugins/woocommerce/client/blocks/assets/js/blocks/product-query/variations/elements/product-title.tsx
index 235bfbcae40..fc688de144d 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/product-query/variations/elements/product-title.tsx
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/product-query/variations/elements/product-title.tsx
@@ -2,10 +2,7 @@
  * External dependencies
  */
 import { Icon } from '@wordpress/components';
-import {
-	title,
-	description,
-} from '@woocommerce/product-elements/title/block.json';
+import { __ } from '@wordpress/i18n';
 import { heading } from '@wordpress/icons';

 /**
@@ -17,9 +14,9 @@ export const CORE_NAME = 'core/post-title';
 export const VARIATION_NAME = 'woocommerce/product-query/product-title';

 registerElementVariation( CORE_NAME, {
-	blockDescription: description,
+	blockDescription: __( 'Display the title of a product.', 'woocommerce' ),
 	blockIcon: <Icon icon={ heading } />,
-	blockTitle: title,
+	blockTitle: __( 'Product Title', 'woocommerce' ),
 	variationName: VARIATION_NAME,
 	scope: [ 'block' ],
 } );
diff --git a/plugins/woocommerce/client/blocks/assets/js/utils/register-product-block-type.ts b/plugins/woocommerce/client/blocks/assets/js/utils/register-product-block-type.ts
index 7e03da672f3..33cb26d8bc4 100644
--- a/plugins/woocommerce/client/blocks/assets/js/utils/register-product-block-type.ts
+++ b/plugins/woocommerce/client/blocks/assets/js/utils/register-product-block-type.ts
@@ -4,6 +4,7 @@
 import {
 	BlockAttributes,
 	BlockVariation,
+	getBlockVariations,
 	registerBlockType,
 	registerBlockVariation,
 	unregisterBlockType,
@@ -12,6 +13,7 @@ import {
 } from '@wordpress/blocks';
 import { subscribe, select } from '@wordpress/data';
 import { CORE_EDITOR_STORE } from '@woocommerce/utils';
+
 import { isEmpty } from '@woocommerce/types';

 /**
@@ -38,25 +40,12 @@ type ProductBlockSettings = {
  * @property {ProductBlockSettings}        productBlockSettings - Product block settings
  */
 type ProductBlockConfig< T extends BlockAttributes > = ProductBlockSettings & {
-	blockName: string;
-	settings: Partial< BlockConfiguration< T > >;
+	metadata: BlockConfiguration< T > & {
+		name: string;
+		variations?: BlockVariation< BlockAttributes >[] | undefined;
+	};
 };

-/**
- * Configuration object for registering a product block type.
- *
- * @typedef {Object} ProductBlockRegistrationConfig
- * @template T Extends BlockAttributes to define the block's attribute types
- * @property {Partial<BlockConfiguration>} settings                - Block settings configuration
- * @property {boolean}                     [isVariationBlock]      - Whether this block is a variation
- * @property {string}                      [variationName]         - The name of the variation if applicable
- * @property {boolean}                     isAvailableOnPostEditor - Whether the block should be available in post editor
- */
-type ProductBlockRegistrationConfig< T extends BlockAttributes > = Partial<
-	BlockConfiguration< T >
-> &
-	ProductBlockSettings;
-
 /**
  * Manages block registration and unregistration for WooCommerce product blocks in different contexts.
  * Implements the Singleton pattern to ensure consistent block management across the application.
@@ -128,7 +117,8 @@ export class BlockRegistrationManager {
 				// Register only blocks available in post editor
 				this.blocks.forEach( ( config ) => {
 					if ( config.isAvailableOnPostEditor ) {
-						const key = config.variationName || config.blockName;
+						const key =
+							config.variationName || config.metadata.name;
 						if ( ! this.hasAttemptedRegistration( key ) ) {
 							this.registerBlock( config );
 						}
@@ -216,20 +206,20 @@ export class BlockRegistrationManager {
 	private unregisterBlock< T extends BlockAttributes >(
 		config: ProductBlockConfig< T >
 	): void {
-		const { blockName, isVariationBlock, variationName } = config;
+		const { metadata, isVariationBlock, variationName } = config;

 		try {
 			if ( isVariationBlock && variationName ) {
-				unregisterBlockVariation( blockName, variationName );
+				unregisterBlockVariation( metadata.name, variationName );
 				this.attemptedRegisteredBlocks.delete( variationName );
 			} else {
-				unregisterBlockType( blockName );
-				this.attemptedRegisteredBlocks.delete( blockName );
+				unregisterBlockType( metadata.name );
+				this.attemptedRegisteredBlocks.delete( metadata.name );
 			}
 		} catch ( error ) {
 			// eslint-disable-next-line no-console
 			console.debug(
-				`Failed to unregister block ${ blockName }:`,
+				`Failed to unregister block ${ metadata.name }:`,
 				error
 			);
 		}
@@ -247,8 +237,7 @@ export class BlockRegistrationManager {
 		config: ProductBlockConfig< T >
 	): void {
 		const {
-			blockName,
-			settings,
+			metadata,
 			isVariationBlock,
 			variationName,
 			isAvailableOnPostEditor,
@@ -256,7 +245,7 @@ export class BlockRegistrationManager {

 		try {
 			// Check if block is already registered
-			const key = variationName || blockName;
+			const key = variationName || metadata.name;
 			if ( this.hasAttemptedRegistration( key ) ) {
 				return;
 			}
@@ -269,31 +258,53 @@ export class BlockRegistrationManager {
 			}

 			if ( isVariationBlock ) {
-				registerBlockVariation(
-					blockName,
-					settings as BlockVariation< BlockAttributes >
-				);
+				registerBlockVariation( metadata.name, {
+					...metadata,
+					name: variationName || metadata.name,
+				} as BlockVariation< BlockAttributes > );
 			} else {
-				const ancestor = isEmpty( settings?.ancestor )
+				const ancestor = isEmpty( metadata?.ancestor )
 					? [ 'woocommerce/single-product' ]
-					: settings?.ancestor;
+					: metadata?.ancestor;

 				// Only remove ancestor if we're in site editor AND in single-product template
 				const shouldRemoveAncestor =
 					editSiteStore &&
 					this.currentTemplateId?.includes( 'single-product' );

-				// @ts-expect-error - blockName can be either string or object
-				registerBlockType( blockName, {
+				const {
+					title,
+					description,
+					keywords,
+					styles,
+					variations,
+					...settings
+				} = metadata;
+
+				const registeredBlock = registerBlockType( metadata, {
 					...settings,
 					ancestor: shouldRemoveAncestor ? undefined : ancestor,
 				} );
+
+				this.blocks.set( key, {
+					...config,
+					metadata: {
+						...metadata,
+						title: registeredBlock?.title ?? metadata.title,
+						description:
+							registeredBlock?.description ??
+							metadata.description,
+					},
+				} );
 			}

 			this.attemptedRegisteredBlocks.add( key );
 		} catch ( error ) {
 			// eslint-disable-next-line no-console
-			console.error( `Failed to register block ${ blockName }:`, error );
+			console.error(
+				`Failed to register block ${ metadata.name }:`,
+				error
+			);
 		}
 	}

@@ -307,11 +318,20 @@ export class BlockRegistrationManager {
 	public registerBlockConfig< T extends BlockAttributes >(
 		config: ProductBlockConfig< T >
 	): void {
-		const key = config.variationName || config.blockName;
+		const key = config.variationName || config.metadata.name;
 		this.blocks.set( key, config as ProductBlockConfig< BlockAttributes > );
 		this.registerBlock( config );
 	}
 }
+/**
+ * Checks that block metadata includes a non-empty name.
+ *
+ * @param metadata - Block metadata to validate.
+ */
+const hasBlockName = < T extends BlockAttributes >(
+	metadata: BlockConfiguration< T >
+): metadata is BlockConfiguration< T > & { name: string } =>
+	typeof metadata?.name === 'string';

 /**
  * Registers a block type specifically for WooCommerce product templates and optionally makes it available
@@ -335,8 +355,8 @@ export class BlockRegistrationManager {
  * the block available in regular post editing contexts as well where ancestor constraints are enforced.
  *
  * @template T Extends BlockAttributes to define the block's attribute types
- * @param {string | Partial<BlockConfiguration<T>>}               blockNameOrMetadata - Either a string block name or block metadata object
- * @param {ProductBlockRegistrationConfig<BlockConfiguration<T>>} [settings]          - Optional settings for block registration
+ * @param {BlockConfiguration<T>}                                 metadata   - Block metadata and runtime settings
+ * @param {ProductBlockRegistrationConfig<BlockConfiguration<T>>} [settings] - Optional settings for block registration
  * @return {void}
  *
  * @example
@@ -353,15 +373,10 @@ export class BlockRegistrationManager {
  * ```
  */
 export const registerProductBlockType = < T extends BlockAttributes >(
-	blockNameOrMetadata: string | Partial< BlockConfiguration< T > >,
-	settings?: ProductBlockRegistrationConfig< BlockConfiguration< T > >
+	metadata: BlockConfiguration< T >,
+	settings?: ProductBlockSettings
 ): void => {
-	const blockName =
-		typeof blockNameOrMetadata === 'string'
-			? blockNameOrMetadata
-			: blockNameOrMetadata.name;
-
-	if ( ! blockName ) {
+	if ( ! hasBlockName( metadata ) ) {
 		// eslint-disable-next-line no-console
 		console.error(
 			'registerProductBlockType: Block name is required for registration'
@@ -369,31 +384,11 @@ export const registerProductBlockType = < T extends BlockAttributes >(
 		return;
 	}

-	// If blockNameOrMetadata is an object, use all its properties except 'name' as settings
-	const metaDataWithoutName =
-		typeof blockNameOrMetadata === 'string'
-			? {}
-			: ( ( { name, ...metadata } ) => metadata )( blockNameOrMetadata );
-
-	// Extract settings without custom properties
-	const {
-		isVariationBlock,
-		variationName,
-		isAvailableOnPostEditor,
-		...settingsWithoutCustomProperties
-	} = {
-		...metaDataWithoutName,
-		...( settings || {} ),
-	};
-
 	const internalConfig: ProductBlockConfig< T > = {
-		blockName,
-		settings: {
-			...settingsWithoutCustomProperties,
-		} as BlockConfiguration< T >,
-		isVariationBlock: isVariationBlock ?? false,
-		variationName: variationName ?? undefined,
-		isAvailableOnPostEditor: isAvailableOnPostEditor ?? false,
+		metadata,
+		isVariationBlock: settings?.isVariationBlock ?? false,
+		variationName: settings?.variationName ?? undefined,
+		isAvailableOnPostEditor: settings?.isAvailableOnPostEditor ?? false,
 	};

 	BlockRegistrationManager.getInstance().registerBlockConfig(
diff --git a/plugins/woocommerce/client/blocks/assets/js/utils/test/register-product-block-type.test.ts b/plugins/woocommerce/client/blocks/assets/js/utils/test/register-product-block-type.test.ts
index b2c66c1829d..7e60b7a7f4b 100644
--- a/plugins/woocommerce/client/blocks/assets/js/utils/test/register-product-block-type.test.ts
+++ b/plugins/woocommerce/client/blocks/assets/js/utils/test/register-product-block-type.test.ts
@@ -54,8 +54,12 @@ type RegisterProductBlockType =

 const blockSettings = {
 	title: 'Test product block',
-	category: 'woocommerce',
-} as Partial< BlockConfiguration >;
+	category: 'text',
+	apiVersion: 3,
+	attributes: {},
+	edit: () => null,
+	save: () => null,
+} satisfies BlockConfiguration;

 const loadRegistrationFunction = (): RegisterProductBlockType => {
 	let registerProductBlockType: RegisterProductBlockType | undefined;
@@ -76,7 +80,7 @@ const loadRegistrationFunction = (): RegisterProductBlockType => {
 describe( 'registerProductBlockType', () => {
 	beforeEach( () => {
 		jest.resetModules();
-		jest.clearAllMocks();
+		jest.resetAllMocks();
 		mockPostType = 'post';
 		mockTemplateSlug = '';
 		mockIsSiteEditor = false;
@@ -94,19 +98,29 @@ describe( 'registerProductBlockType', () => {
 	it( 'registers only post-editor-enabled blocks with the Single Product ancestor', () => {
 		const registerProductBlockType = loadRegistrationFunction();

-		registerProductBlockType( 'woocommerce/post-enabled', {
-			...blockSettings,
-			isAvailableOnPostEditor: true,
-		} );
-		registerProductBlockType( 'woocommerce/post-disabled', {
-			...blockSettings,
-			isAvailableOnPostEditor: false,
-		} );
+		registerProductBlockType(
+			{
+				...blockSettings,
+				name: 'woocommerce/post-enabled',
+			},
+			{
+				isAvailableOnPostEditor: true,
+			}
+		);
+		registerProductBlockType(
+			{
+				...blockSettings,
+				name: 'woocommerce/post-disabled',
+			},
+			{
+				isAvailableOnPostEditor: false,
+			}
+		);
 		mockContextSubscription();

 		expect( mockRegisterBlockType ).toHaveBeenCalledTimes( 1 );
 		expect( mockRegisterBlockType ).toHaveBeenCalledWith(
-			'woocommerce/post-enabled',
+			expect.objectContaining( { name: 'woocommerce/post-enabled' } ),
 			expect.objectContaining( {
 				ancestor: [ 'woocommerce/single-product' ],
 			} )
@@ -120,15 +134,17 @@ describe( 'registerProductBlockType', () => {
 		mockIsSiteEditor = true;
 		const registerProductBlockType = loadRegistrationFunction();

-		registerProductBlockType(
-			'woocommerce/site-editor-block',
-			blockSettings
-		);
+		registerProductBlockType( {
+			...blockSettings,
+			name: 'woocommerce/site-editor-block',
+		} );
 		mockContextSubscription();

 		expect( mockRegisterBlockType ).toHaveBeenCalledTimes( 1 );
 		expect( mockRegisterBlockType ).toHaveBeenCalledWith(
-			'woocommerce/site-editor-block',
+			expect.objectContaining( {
+				name: 'woocommerce/site-editor-block',
+			} ),
 			expect.objectContaining( {
 				ancestor: [ 'woocommerce/single-product' ],
 			} )
@@ -142,14 +158,14 @@ describe( 'registerProductBlockType', () => {
 		mockIsSiteEditor = true;
 		const registerProductBlockType = loadRegistrationFunction();

-		registerProductBlockType(
-			'woocommerce/transition-block',
-			blockSettings
-		);
-		registerProductBlockType(
-			'woocommerce/transition-block',
-			blockSettings
-		);
+		registerProductBlockType( {
+			...blockSettings,
+			name: 'woocommerce/transition-block',
+		} );
+		registerProductBlockType( {
+			...blockSettings,
+			name: 'woocommerce/transition-block',
+		} );
 		mockContextSubscription();

 		expect( mockRegisterBlockType ).toHaveBeenCalledTimes( 1 );
@@ -163,7 +179,7 @@ describe( 'registerProductBlockType', () => {
 		);
 		expect( mockRegisterBlockType ).toHaveBeenNthCalledWith(
 			2,
-			'woocommerce/transition-block',
+			expect.objectContaining( { name: 'woocommerce/transition-block' } ),
 			expect.objectContaining( { ancestor: undefined } )
 		);

@@ -178,7 +194,7 @@ describe( 'registerProductBlockType', () => {
 		expect( mockRegisterBlockType ).toHaveBeenCalledTimes( 3 );
 		expect( mockRegisterBlockType ).toHaveBeenNthCalledWith(
 			3,
-			'woocommerce/transition-block',
+			expect.objectContaining( { name: 'woocommerce/transition-block' } ),
 			expect.objectContaining( {
 				ancestor: [ 'woocommerce/single-product' ],
 			} )
@@ -191,14 +207,17 @@ describe( 'registerProductBlockType', () => {
 		mockIsSiteEditor = true;
 		const registerProductBlockType = loadRegistrationFunction();
 		const variationSettings = {
-			name: 'related-products',
 			title: 'Related products',
 			isVariationBlock: true,
 			variationName: 'related-products',
 		};

 		registerProductBlockType(
-			'woocommerce/product-query',
+			{
+				...blockSettings,
+				name: 'woocommerce/product-query',
+				title: 'Related products',
+			},
 			variationSettings
 		);
 		mockContextSubscription();
diff --git a/plugins/woocommerce/client/blocks/changelog/fix-block-metadata-translations b/plugins/woocommerce/client/blocks/changelog/fix-block-metadata-translations
new file mode 100644
index 00000000000..c3129267e19
--- /dev/null
+++ b/plugins/woocommerce/client/blocks/changelog/fix-block-metadata-translations
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Restore translated titles and descriptions for product, Cart, and Checkout blocks in the editor.