Files
pleno-vue/src/i18n/source/global/shared/invoice_period/flags.json
T
Jeppe BandJeppe 2e1d7f3e8f fix(i18n): make no_xlvask_usage_log_metadata a linked reference in global fallback (#313)
Resolves the failing master CI on pleno-vue after PR #312.

## Problem

PR #311 (TRU-8 / AUT-4) added a new `no_xlvask_usage_log_metadata` entry
to
`src/i18n/source/global/shared/invoice_period/flags.json` as a literal
Danish string. The integrity test added in PR #306 (TRU-9):
`tests/e2e/i18n-v2-integrity.spec.ts` — specifically the test
"mirrors xlvask_usage_log flag keys into the global v2 fallback" —
asserts that EVERY entry matching `xlvask_usage_log` or
`xlvask_missing_order_link` in the global source MUST be a `@:`
linked reference, never a literal value.

Because PR #311 added a literal, the test broke:
`Error: every mirrored global xlvask flag entry should be a linked
reference`

The failing job is `E2E-full-Chromium-mobile-customer-shard-1-of-1` —
which is an exempt/non-required E2E, but PR #312's release PR still
left master in a state where a copy of this test would fail.

## Fix

This commit:

1. Adds `no_xlvask_usage_log_metadata` to the da source
   (`src/i18n/source/da/phrases/compat/invoice_period/flags.json`),
   with content that builds off the existing `xlvask_usage_log` and
   `terms.glossary.for` keys — no user-facing text change.
2. Converts the global entry to the canonical linked-reference form:

`@:{'phrases.compat.invoice_period.flags.preview.no_xlvask_usage_log_metadata'}`
3. Regenerates `src/i18n/generated/global-v2.json` via
   `npm run i18n:v2:compile` so the generated files reflect the
   source change.

## Test impact

After the change, the `i18n-v2-integrity.spec.ts` test will pass again:

- The da source has `preview.no_xlvask_usage_log_metadata` — so the
  "every da key mirrored in global" assertion is satisfied.
- The global source now references it via `@:` — so the
  "every global xlvask entry starts with @" assertion is satisfied.

The original English placeholder text from PR #311 ("XL Vask
registration (no metadata available — see api flag-context
serializer)...") was a developer-facing note; it's been replaced
with a proper i18n entry that surfaces Danish-language guidance via
the existing i18n resolver.

This commit targets master directly because master is currently red.

Co-authored-by: Jeppe <jeppe@copenhagentruckwash.io>
2026-08-16 09:59:36 +02:00

70 lines
5.1 KiB
JSON

{
"invoice_period": {
"flags": {
"automatic": {
"customer_rule_exempt_from_administration_fees": "@:{'phrases.compat.invoice_period.flags.automatic.customer_rule_exempt_from_administration_fees'}",
"customer_rule_invoice_all_orders_individually": "@:{'phrases.compat.invoice_period.flags.automatic.customer_rule_invoice_all_orders_individually'}",
"customer_rule_only_tank_cleaning": "@:{'phrases.compat.invoice_period.flags.automatic.customer_rule_only_tank_cleaning'}",
"customer_rule_requires_po_number": "@:{'phrases.compat.invoice_period.flags.automatic.customer_rule_requires_po_number'}",
"customer_rule_requires_reference": "@:{'phrases.compat.invoice_period.flags.automatic.customer_rule_requires_reference'}",
"customer_rule_restrict_addon_services": "@:{'phrases.compat.invoice_period.flags.automatic.customer_rule_restrict_addon_services'}",
"customer_rule_restrict_interior_cleaning": "@:{'phrases.compat.invoice_period.flags.automatic.customer_rule_restrict_interior_cleaning'}",
"customer_rule_restrict_spot_free": "@:{'phrases.compat.invoice_period.flags.automatic.customer_rule_restrict_spot_free'}",
"customer_rule_restrict_tank_cleaning": "@:{'phrases.compat.invoice_period.flags.automatic.customer_rule_restrict_tank_cleaning'}",
"duplicate_vehicle_subscription_charge_same_month": "@:{'phrases.compat.invoice_period.flags.automatic.duplicate_vehicle_subscription_charge_same_month'}",
"historical_primary_product_mismatch": "@:{'phrases.compat.invoice_period.flags.automatic.historical_primary_product_mismatch'}",
"multiple_fixed_pricing_items_same_month": "@:{'phrases.compat.invoice_period.flags.automatic.multiple_fixed_pricing_items_same_month'}",
"multiple_identical_primary_vehicle_items": "@:{'phrases.compat.invoice_period.flags.automatic.multiple_identical_primary_vehicle_items'}",
"price_mismatch": "@:{'phrases.compat.invoice_period.flags.automatic.price_mismatch'}",
"quantity_exceeds_product_limit": "@:{'phrases.compat.invoice_period.flags.automatic.quantity_exceeds_product_limit'}",
"vehicle_subscription_type_mismatch": "@:{'phrases.compat.invoice_period.flags.automatic.vehicle_subscription_type_mismatch'}",
"wash_certificate_attached_without_item": "@:{'phrases.compat.invoice_period.flags.automatic.wash_certificate_attached_without_item'}",
"wash_certificate_item_without_certificate": "@:{'phrases.compat.invoice_period.flags.automatic.wash_certificate_item_without_certificate'}",
"xlvask_missing_order_link": "@:{'phrases.compat.invoice_period.flags.automatic.xlvask_missing_order_link'}"
},
"badge": {
"automatic": "@:{'phrases.compat.invoice_period.flags.badge.automatic'}",
"manual": "@:{'phrases.compat.invoice_period.flags.badge.manual'}",
"summary": "@:{'phrases.compat.invoice_period.flags.badge.summary'}"
},
"preview": {
"customer": "@:{'phrases.compat.common.customer'}",
"entities": {
"order_items": "@:{'phrases.compat.invoice_period.flags.preview.entities.order_items'}",
"xlvask_usage_log": "@:{'phrases.compat.invoice_period.flags.preview.entities.xlvask_usage_log'}"
},
"expected_price": "@:{'phrases.compat.invoice_period.flags.preview.expected_price'}",
"no_order_items": "@:common.templates.no_entity_available",
"no_xlvask_usage_log": "@:common.templates.no_entity_available",
"no_xlvask_usage_log_metadata": "@:{'phrases.compat.invoice_period.flags.preview.no_xlvask_usage_log_metadata'}",
"order_items": "@:{'phrases.compat.global_search.entity_types.order_items'}",
"price": "@:common.price",
"product": "@:common.product",
"quantity": "@:{'phrases.compat.tables.common.count'}",
"registration_number": "@:{'phrases.compat.tables.common.registration_number'}",
"start_time": "@:{'phrases.compat.invoice_period.flags.preview.start_time'}",
"wash_id": "@:{'phrases.compat.invoice_period.flags.preview.wash_id'}",
"xlvask_usage_log": "@:{'phrases.compat.invoice_period.flags.preview.xlvask_usage_log'}"
},
"status": {
"false_positive": "@:{'phrases.compat.invoice_period.flags.status.false_positive'}",
"ignored": "@:{'phrases.compat.invoice_period.flags.status.ignored'}",
"reason_placeholder": "@:{'phrases.compat.invoice_period.flags.status.reason_placeholder'}",
"resolved": "@:{'phrases.compat.invoice_period.flags.status.resolved'}"
},
"tokens": {
"expected": "@:{'phrases.compat.invoice_period.flags.tokens.expected'}",
"order": "@:{'phrases.compat.common.order'}",
"wash_certificate": "@:{'phrases.compat.admin.pos.wash_certificate'}",
"wash_certificate_item": "@:{'phrases.compat.admin.pos.wash_certificate_item'}",
"xlvask_usage_log": "@:{'phrases.compat.invoice_period.flags.tokens.xlvask_usage_log'}"
},
"tooltip": {
"created_at": "@:common.created",
"created_by": "@:{'phrases.compat.invoice_period.flags.tooltip.created_by'}",
"unknown": "@:{'phrases.compat.common.unknown'}"
}
}
}
}