Bundle data was carrying localized strings (name, usage, items, description, imageAlt, badge) directly, so EN visitors saw German copy on the bundle page and home grid. Strings are now keyed under bundle.<id>.<field> in the i18n catalogue (DE + EN); src/api/bundles.js keeps only structural data + i18n key references. HomePage builds a localizedBundles computed that resolves the keys through t() before passing to the Bundles design-system component, so the existing component stays agnostic of i18n. BundlePage exposes a `bundleCopy` computed for the same reason, and resolvedItems now maps over `itemKeys` instead of static labels. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 line
3.2 KiB
JavaScript
1 line
3.2 KiB
JavaScript
import{B as e,C as t,G as n,S as r,T as i,ft as a,l as o,m as s,o as c,r as l,s as u,u as d,x as f}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{o as p}from"./vue-router-Cyqru1db.js";import{t as m}from"./i18n-XDSWEyNo.js";import{r as h}from"./products-BqW5PUnm.js";import{c as g,d as _,f as v,p as y,u as b}from"./api-DlB23x7f.js";import{t as x}from"./Navbar-DV-_CpC6.js";import{t as S}from"./CartDrawer-BdjtcjVt.js";import{t as C}from"./Footer-CjMyQsRh.js";var w={class:`bg-cream text-ink min-h-svh`},T={class:`mx-auto w-full max-w-3xl px-6 py-14 sm:px-8 sm:py-16 md:px-12 md:py-20 lg:px-16 lg:py-24`},E={class:`flex flex-col gap-3 mb-10 md:mb-14`},D={class:`eyebrow`},O={class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},k={key:0,class:`text-[12px] text-muted`},A={class:`flex flex-col gap-10`},j=[`id`],M={class:`font-display text-xl md:text-2xl font-normal text-brand leading-tight`},N={class:`text-[15px] leading-relaxed text-ink whitespace-pre-line`},P={__name:`LegalPage`,props:{kind:{type:String,required:!0,validator:e=>[`impressum`,`datenschutz`].includes(e)}},setup(P){let F=P,{t:I}=m(),L=y(),R=p(),z=e(!1);function B(){z.value=!1,R.push(`/checkout`)}let V=[{key:`nav.shop`,href:`/shop`},{key:`nav.bundles`,href:`/#bundles`},{key:`nav.revitalization`,href:`/#revitalize`},{key:`nav.about`,href:`/#about`}],H={impressum:[`operator`,`contact`,`register`,`vat`,`authority`,`liability`,`copyright`],datenschutz:[`controller`,`scope`,`legalBasis`,`data`,`cookies`,`analytics`,`payments`,`rights`,`retention`,`contact`]},U=c(()=>H[F.kind].map(e=>({id:e,heading:I(`legal.${F.kind}.section.${e}.heading`),body:I(`legal.${F.kind}.section.${e}.body`)}))),W=c(()=>I(`legal.${F.kind}.updated`));async function G(e){await g(e.id,1),z.value=!0}async function K({productId:e,quantity:t}){await v(e,t)}async function q(e){await _(e)}let J=e(null),Y=null;function X(){let e=J.value,t=e&&(e.$el||e);if(!t||typeof window>`u`)return;let n=Math.round(t.getBoundingClientRect().height);document.documentElement.style.setProperty(`--nav-h`,`${n}px`)}return r(()=>{if(b(),X(),typeof ResizeObserver<`u`&&J.value){let e=J.value.$el||J.value;Y=new ResizeObserver(X),Y.observe(e)}window.addEventListener(`resize`,X)}),f(()=>{Y&&Y.disconnect(),typeof window<`u`&&window.removeEventListener(`resize`,X)}),(e,r)=>(t(),d(l,null,[s(x,{ref_key:`navRef`,ref:J,variant:`cream`,layout:`standard`,items:V,"cart-count":n(L).count,products:n(h),onCart:r[0]||=e=>z.value=!0,onSearch:G},null,8,[`cart-count`,`products`]),u(`main`,w,[u(`div`,T,[u(`header`,E,[u(`p`,D,a(n(I)(`legal.${P.kind}.eyebrow`)),1),u(`h1`,O,a(n(I)(`legal.${P.kind}.title`)),1),W.value?(t(),d(`p`,k,a(W.value),1)):o(``,!0)]),u(`article`,A,[(t(!0),d(l,null,i(U.value,e=>(t(),d(`section`,{id:e.id,key:e.id,class:`flex flex-col gap-3`},[u(`h2`,M,a(e.heading),1),u(`p`,N,a(e.body),1)],8,j))),128))])])]),s(C),r[2]||=u(`div`,{"aria-hidden":`true`,class:`md:hidden`,style:{height:`calc(64px + env(safe-area-inset-bottom))`}},null,-1),s(S,{modelValue:z.value,"onUpdate:modelValue":r[1]||=e=>z.value=e,items:n(L).items,subtotal:n(L).subtotal,count:n(L).count,onUpdateQuantity:K,onRemove:q,onCheckout:B},null,8,[`modelValue`,`items`,`subtotal`,`count`])],64))}};export{P as default}; |