@bikematrix/web-components 1.1.21 → 1.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bm_core.js CHANGED
@@ -80,7 +80,7 @@ function print() { __p += __j.call(arguments, '') }
80
80
  <a href="{{productUrl}}">{{productTitle}}{{bm-sort}}</a>
81
81
  </div>
82
82
  <div class="bm-compatible-product-price">
83
- <a href="{{productUrl}}" style="text-decoration: none; color: 'black'">
83
+ <a href="{{productUrl}}" style="text-decoration: none; color: #000">
84
84
  <p>
85
85
  <span>{{priceFrom}}</span>
86
86
  <strong>{{price}}</strong>
@@ -93,4 +93,4 @@ function print() { __p += __j.call(arguments, '') }
93
93
  </div>
94
94
  `;function hm({"data-title":n}){var D;const e=ye(null),t=window.BikeMatrix,r=t.getConfig(),[i,s]=ee(!1),[l,u]=ee(!0),[c,f]=ee({type:"unknown",details:"",details_code:""}),[p,h]=ee([]),{t:g}=Le(),m=!!t.getActiveSubscription(),P=r.currentCollectionHandle||"",x=r.collectionUrl||"",H=r.compatiblityListCurrentPage||0,A=!!r.showCompatibleList||!1,w=r.logLevel||"none",C=O=>{var M,Y;if(!(e!=null&&e.current))return null;const j=(Y=(M=e==null?void 0:e.current)==null?void 0:M.parentElement)==null?void 0:Y.querySelector('template[slot="product-card"]');w==="verbose"&&console.log("CompatibleList Product Card Template: ",j);const X=(j?j.innerHTML:pm()).replace(r.isShopify?/\@\@#if\s+(\w+)\@\@(.*?)\@\@\/if\@\@/gs:/\{\{#if\s+(\w+)\}\}(.*?)\{\{\/if\}\}/gs,(R,V,te)=>O[V]?te:"").replace(r.isShopify?/\@\@\s*(\w+)\s*\@\@/g:/\{\{\s*(\w+)\s*\}\}/g,(R,V)=>{if(V==="compatibility")return'<bikematrix-compatibilitylabel data-type="compatible"></bikematrix-compatibilitylabel>';const te=O[V];return V==="productTitle"?lm.decode(te):te||""});return w==="verbose"&&console.log("CompatibleList Product Card: ",X),b("li",{dangerouslySetInnerHTML:{__html:X}},O.productId)};return le(()=>{var X,M;const O=r.collections.map(Y=>Y.handle)||[];if(!A||!O.includes(P)){f({type:"unknown",...qn.unknown}),s(!1);return}if(!Oe.value){f({type:"selectbike",...qn.selectbike}),s(!Wt.value);return}if(!((M=(X=Oe.value)==null?void 0:X.compatibleCollections)==null?void 0:M.find(Y=>Y.handle===P))){s(!1);return}const L=dm(ci.value).map(C);h(L);const T=fm(H,L);f(T),s(!0)},[P,Oe.value,ci.value,Wt.value,H]),b(ae,{children:m&&i&&b("div",{ref:e,children:[b("style",{type:"text/css",children:sm}),b("div",{class:"bike-matrix-container",children:b("div",{class:"bm-compatible-products-wrapper",children:[b("div",{class:"bm-compatible-products-title",children:b("div",{id:"bm_customAccordion",class:l&&"active",onClick:()=>u(!l),children:[b("span",{children:n||g("compatiblelist_header")}),b("svg",{width:"24",height:"24",viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false",role:"presentation",class:"icon",children:b("path",{d:"M20 8.5 12.5 16 5 8.5",stroke:"currentColor","stroke-width":"1.5",fill:"none"})})]})}),b("div",{class:"bm-compatible-products-list",id:"bm_compatibleProductsListPanel",style:l?"display: block":"display: none",children:[b("div",{class:"lds-ring",id:"bm-loading-spinner",style:Wt.value?"":"display: none",children:[b("div",{}),b("div",{}),b("div",{}),b("div",{})]}),!Wt.value&&{error:b("p",{children:c.details}),unknown:b("p",{class:"bm-compatible-products-message"}),unavailable:b("p",{class:"bm-compatible-products-message",children:g(c==null?void 0:c.details_code)}),selectbike:b("div",{onClick:O=>{O.preventDefault(),document.dispatchEvent(new Event("BmToggleModal",{bubbles:!0,composed:!0}))},style:"cursor: pointer;",children:b("p",{class:"bm-compatible-products-message",children:g(c==null?void 0:c.details_code)})}),pageone:b("p",{class:"bm-compatible-products-message",children:b("div",{dangerouslySetInnerHTML:{__html:(D=g(c==null?void 0:c.details_code))==null?void 0:D.replace("<a>","<a href='"+x+"'>")}})}),noresults:b("p",{class:"bm-compatible-products-message",children:g(c==null?void 0:c.details_code)}),compatibleresults:b(ae,{})}[c==null?void 0:c.type],b("ul",{id:"bm_compatibleProductsList",children:!Wt.value&&(c==null?void 0:c.type)==="compatibleresults"&&p}),b("div",{class:"bm_result_link",children:b("a",{rel:"noreferrer",href:"http://www.bikematrix.io/landed-it",target:"_blank",class:"link",children:g("bikematrix_poweredby")})})]})]})})]})})}const vm=`.bike-selector-banner_wrapper{position:relative;height:40px}.bike-selector-banner{width:100%;height:40px;position:absolute;top:0;display:flex;align-items:center;justify-content:center;cursor:pointer;margin-bottom:2rem}.floating{border-radius:12px;box-shadow:0 4px 4px #0000001f}.bike-selector-banner_title{color:#fff;text-transform:uppercase;padding-top:2px;font:var(--heading-font-family);font-style:var(--heading-font-style);font-weight:var(--heading-font-weight);font-size:18px}@media (width <= 991px){.bike-selector-banner_title{display:none}}.bike-selector-banner_title_mobile{display:none;text-transform:uppercase;font:var(--heading-font-family);font-style:var(--heading-font-style);font-weight:var(--heading-font-weight);font-size:18px;color:#fff;padding-top:2px}@media (width <= 991px){.bike-selector-banner_title_mobile{display:block}}.bike-selector-banner_svg{height:19px}.bike-selector-banner_icon-wrapper{display:flex;align-items:center;justify-content:center;height:100%;position:relative}.bike-selector-banner_tick{width:12px;height:12px;position:absolute;right:6px;top:5px}
95
95
  `,gm=`.bm-button{cursor:pointer;border:none;font-weight:600}.bm-header-btn{display:inline-block;font-weight:200;background-color:#000;color:#fff;border-radius:5px;text-align:center;font-size:.75em;cursor:pointer}.bm-icon{display:inline-block;padding:6px;font-weight:200;border:none;text-align:center;font-size:.75em;background-color:transparent;height:44px;width:44px}.bm-icon svg{width:32px;height:32px}@media screen and (max-width: 991px){.bm-icon{padding:10px}.bm-icon svg{width:24px;height:24px}}.bm-bike-select-icon.show-selected,.bm-bike-select-icon.show-selected-banner{position:relative}.bm-bike-select-icon.show-selected:after{content:"";width:12px;height:12px;top:2px;right:2px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' xmlns:xlink='http://www.w3.org/1999/xlink' width='512' height='512' x='0' y='0' viewBox='0 0 191.667 191.667' style='enable-background:new 0 0 512 512' xml:space='preserve' class=''%3E%3Cg%3E%3Cpath d='M95.833 0C42.991 0 0 42.99 0 95.833s42.991 95.834 95.833 95.834 95.833-42.991 95.833-95.834S148.676 0 95.833 0zm55.029 79.646-60.207 60.207a13.463 13.463 0 0 1-9.583 3.969c-3.62 0-7.023-1.409-9.583-3.969l-30.685-30.685a13.464 13.464 0 0 1-3.97-9.583c0-3.621 1.41-7.024 3.97-9.584a13.46 13.46 0 0 1 9.583-3.97c3.62 0 7.024 1.41 9.583 3.971l21.101 21.1 50.623-50.623a13.463 13.463 0 0 1 9.583-3.969c3.62 0 7.023 1.409 9.583 3.969 5.286 5.286 5.286 13.883.002 19.167z' fill='%2300ab04' opacity='1' data-original='%23000000' class=''%3E%3C/path%3E%3C/g%3E%3C/svg%3E");position:absolute;background-size:contain}.bm-bike-select-icon.show-selected-banner:after{content:"";width:12px;height:12px;top:6px;right:0;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' xmlns:xlink='http://www.w3.org/1999/xlink' width='512' height='512' x='0' y='0' viewBox='0 0 191.667 191.667' style='enable-background:new 0 0 512 512' xml:space='preserve' class=''%3E%3Cg%3E%3Cpath d='M95.833 0C42.991 0 0 42.99 0 95.833s42.991 95.834 95.833 95.834 95.833-42.991 95.833-95.834S148.676 0 95.833 0zm55.029 79.646-60.207 60.207a13.463 13.463 0 0 1-9.583 3.969c-3.62 0-7.023-1.409-9.583-3.969l-30.685-30.685a13.464 13.464 0 0 1-3.97-9.583c0-3.621 1.41-7.024 3.97-9.584a13.46 13.46 0 0 1 9.583-3.97c3.62 0 7.024 1.41 9.583 3.971l21.101 21.1 50.623-50.623a13.463 13.463 0 0 1 9.583-3.969c3.62 0 7.023 1.409 9.583 3.969 5.286 5.286 5.286 13.883.002 19.167z' fill='%2300ab04' opacity='1' data-original='%23000000' class=''%3E%3C/path%3E%3C/g%3E%3C/svg%3E");position:absolute;background-size:contain}
96
- `;function oh({"data-color":n,banner:e}){const t=Oe.value;return window.BikeMatrix.getConfig(),b(ae,{children:[b("style",{type:"text/css",children:gm}),b("div",{className:"bm-bikon-wrapper",children:b("button",{className:`p-2 !ml-auto header__icon bm-header-btn bm-icon bm-bike-select-icon ${t&&!e?"show-selected":t&&e?"show-selected-banner":""}`,style:{color:n},onClick:e?()=>{}:()=>pi(),children:b("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",className:"w-full h-full",children:b("path",{fill:"currentColor",fillRule:"evenodd",d:"m35.745 12.17l-4.925 1.48l3.28 8.578a8 8 0 1 1-1.868.715l-1.648-4.31l-5.682 11.802A1 1 0 0 1 24 31h-4.062A8.001 8.001 0 0 1 4 30a8 8 0 0 1 15.938-1h2.5l-4.88-13.664A.998.998 0 0 1 17.5 15H16a1 1 0 1 1 0-2h4.5a1 1 0 1 1 0 2h-.938l1.842 5.157l8.127-4.277l-.965-2.523a1 1 0 0 1 .647-1.315l5.957-1.787l.575 1.915Zm-13.662 9.89l1.972 5.52l4.23-8.784l-6.202 3.264Zm12.983 8.297l-2.113-5.527a6 6 0 1 0 1.868-.715l2.113 5.528a1 1 0 0 1-1.868.714ZM17.917 29H12a1 1 0 1 0 0 2h5.917A6.002 6.002 0 0 1 6 30a6 6 0 0 1 11.917-1Z",clipRule:"evenodd"})})})})]})}function bm({"data-title":n,"data-color":e,"data-full-width":t,"data-font-color":r,"data-show":i}){const s=Oe.value;return typeof i>"u"||i!=="true"&&i!==""?b(ae,{}):b(ae,{children:[b("style",{type:"text/css",children:vm}),b("div",{onClick:()=>{pi()},class:"bike-selector-banner_wrapper",children:b("div",{class:`bike-selector-banner ${t==="false"?"floating":""}`,style:{backgroundColor:e??"#000",maxWidth:t??null},children:b(ae,{children:[b("h2",{class:"bike-selector-banner_title",style:{color:r==="black"?"#000":"#fff"},children:s?s.brand+" "+s.frameSeries:n}),b("h2",{class:"bike-selector-banner_title_mobile",style:{color:r==="black"?"#000":"#fff"},children:s?s.brand:"Check Compatibility"}),b(oh,{"data-color":"#fff",banner:!0})]})})})]})}const mm={type:"logger",log(n){this.output("log",n)},warn(n){this.output("warn",n)},error(n){this.output("error",n)},output(n,e){console&&console[n]&&console[n].apply(console,e)}};class Ws{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(e,t)}init(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=e||mm,this.options=t,this.debug=t.debug}log(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,"log","",!0)}warn(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,"warn","",!0)}error(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,"error","")}deprecate(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,"warn","WARNING DEPRECATED: ",!0)}forward(e,t,r,i){return i&&!this.debug?null:(typeof e[0]=="string"&&(e[0]=`${r}${this.prefix} ${e[0]}`),this.logger[t](e))}create(e){return new Ws(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return e=e||this.options,e.prefix=e.prefix||this.prefix,new Ws(this.logger,e)}}var Lr=new Ws;class Zs{constructor(){this.observers={}}on(e,t){return e.split(" ").forEach(r=>{this.observers[r]||(this.observers[r]=new Map);const i=this.observers[r].get(t)||0;this.observers[r].set(t,i+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}emit(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];this.observers[e]&&Array.from(this.observers[e].entries()).forEach(l=>{let[u,c]=l;for(let f=0;f<c;f++)u(...r)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(l=>{let[u,c]=l;for(let f=0;f<c;f++)u.apply(u,[e,...r])})}}const Ha=()=>{let n,e;const t=new Promise((r,i)=>{n=r,e=i});return t.resolve=n,t.reject=e,t},lh=n=>n==null?"":""+n,ym=(n,e,t)=>{n.forEach(r=>{e[r]&&(t[r]=e[r])})},xm=/###/g,uh=n=>n&&n.indexOf("###")>-1?n.replace(xm,"."):n,ch=n=>!n||typeof n=="string",Aa=(n,e,t)=>{const r=typeof e!="string"?e:e.split(".");let i=0;for(;i<r.length-1;){if(ch(n))return{};const s=uh(r[i]);!n[s]&&t&&(n[s]=new t),Object.prototype.hasOwnProperty.call(n,s)?n=n[s]:n={},++i}return ch(n)?{}:{obj:n,k:uh(r[i])}},dh=(n,e,t)=>{const{obj:r,k:i}=Aa(n,e,Object);if(r!==void 0||e.length===1){r[i]=t;return}let s=e[e.length-1],l=e.slice(0,e.length-1),u=Aa(n,l,Object);for(;u.obj===void 0&&l.length;)s=`${l[l.length-1]}.${s}`,l=l.slice(0,l.length-1),u=Aa(n,l,Object),u&&u.obj&&typeof u.obj[`${u.k}.${s}`]<"u"&&(u.obj=void 0);u.obj[`${u.k}.${s}`]=t},wm=(n,e,t,r)=>{const{obj:i,k:s}=Aa(n,e,Object);i[s]=i[s]||[],i[s].push(t)},Ys=(n,e)=>{const{obj:t,k:r}=Aa(n,e);if(t)return t[r]},Pm=(n,e,t)=>{const r=Ys(n,t);return r!==void 0?r:Ys(e,t)},fh=(n,e,t)=>{for(const r in e)r!=="__proto__"&&r!=="constructor"&&(r in n?typeof n[r]=="string"||n[r]instanceof String||typeof e[r]=="string"||e[r]instanceof String?t&&(n[r]=e[r]):fh(n[r],e[r],t):n[r]=e[r]);return n},Xi=n=>n.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var Cm={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};const km=n=>typeof n=="string"?n.replace(/[&<>"'\/]/g,e=>Cm[e]):n;class zm{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){const t=this.regExpMap.get(e);if(t!==void 0)return t;const r=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,r),this.regExpQueue.push(e),r}}const Hm=[" ",",","?","!",";"],Am=new zm(20),Dm=(n,e,t)=>{e=e||"",t=t||"";const r=Hm.filter(l=>e.indexOf(l)<0&&t.indexOf(l)<0);if(r.length===0)return!0;const i=Am.getRegExp(`(${r.map(l=>l==="?"?"\\?":l).join("|")})`);let s=!i.test(n);if(!s){const l=n.indexOf(t);l>0&&!i.test(n.substring(0,l))&&(s=!0)}return s},yu=function(n,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!n)return;if(n[e])return n[e];const r=e.split(t);let i=n;for(let s=0;s<r.length;){if(!i||typeof i!="object")return;let l,u="";for(let c=s;c<r.length;++c)if(c!==s&&(u+=t),u+=r[c],l=i[u],l!==void 0){if(["string","number","boolean"].indexOf(typeof l)>-1&&c<r.length-1)continue;s+=c-s+1;break}i=l}return i},Fs=n=>n&&n.replace("_","-");class ph extends Zs{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}removeNamespaces(e){const t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const s=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,l=i.ignoreJSONStructure!==void 0?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let u;e.indexOf(".")>-1?u=e.split("."):(u=[e,t],r&&(Array.isArray(r)?u.push(...r):typeof r=="string"&&s?u.push(...r.split(s)):u.push(r)));const c=Ys(this.data,u);return!c&&!t&&!r&&e.indexOf(".")>-1&&(e=u[0],t=u[1],r=u.slice(2).join(".")),c||!l||typeof r!="string"?c:yu(this.data&&this.data[e]&&this.data[e][t],r,s)}addResource(e,t,r,i){let s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const l=s.keySeparator!==void 0?s.keySeparator:this.options.keySeparator;let u=[e,t];r&&(u=u.concat(l?r.split(l):r)),e.indexOf(".")>-1&&(u=e.split("."),i=t,t=u[1]),this.addNamespaces(t),dh(this.data,u,i),s.silent||this.emit("added",e,t,r,i)}addResources(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const s in r)(typeof r[s]=="string"||Array.isArray(r[s]))&&this.addResource(e,t,s,r[s],{silent:!0});i.silent||this.emit("added",e,t,r)}addResourceBundle(e,t,r,i,s){let l=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1,skipCopy:!1},u=[e,t];e.indexOf(".")>-1&&(u=e.split("."),i=r,r=t,t=u[1]),this.addNamespaces(t);let c=Ys(this.data,u)||{};l.skipCopy||(r=JSON.parse(JSON.stringify(r))),i?fh(c,r,s):c={...c,...r},dh(this.data,u,c),l.silent||this.emit("added",e,t,r)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||(t=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(e,t)}:this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){const t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(i=>t[i]&&Object.keys(t[i]).length>0)}toJSON(){return this.data}}var hh={processors:{},addPostProcessor(n){this.processors[n.name]=n},handle(n,e,t,r,i){return n.forEach(s=>{this.processors[s]&&(e=this.processors[s].process(e,t,r,i))}),e}};const vh={};class Ns extends Zs{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),ym(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=Lr.create("translator")}changeLanguage(e){e&&(this.language=e)}exists(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(e==null)return!1;const r=this.resolve(e,t);return r&&r.res!==void 0}extractFromKey(e,t){let r=t.nsSeparator!==void 0?t.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const i=t.keySeparator!==void 0?t.keySeparator:this.options.keySeparator;let s=t.ns||this.options.defaultNS||[];const l=r&&e.indexOf(r)>-1,u=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!Dm(e,r,i);if(l&&!u){const c=e.match(this.interpolator.nestingRegexp);if(c&&c.length>0)return{key:e,namespaces:s};const f=e.split(r);(r!==i||r===i&&this.options.ns.indexOf(f[0])>-1)&&(s=f.shift()),e=f.join(i)}return typeof s=="string"&&(s=[s]),{key:e,namespaces:s}}translate(e,t,r){if(typeof t!="object"&&this.options.overloadTranslationOptionHandler&&(t=this.options.overloadTranslationOptionHandler(arguments)),typeof t=="object"&&(t={...t}),t||(t={}),e==null)return"";Array.isArray(e)||(e=[String(e)]);const i=t.returnDetails!==void 0?t.returnDetails:this.options.returnDetails,s=t.keySeparator!==void 0?t.keySeparator:this.options.keySeparator,{key:l,namespaces:u}=this.extractFromKey(e[e.length-1],t),c=u[u.length-1],f=t.lng||this.language,p=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(f&&f.toLowerCase()==="cimode"){if(p){const D=t.nsSeparator||this.options.nsSeparator;return i?{res:`${c}${D}${l}`,usedKey:l,exactUsedKey:l,usedLng:f,usedNS:c,usedParams:this.getUsedParamsDetails(t)}:`${c}${D}${l}`}return i?{res:l,usedKey:l,exactUsedKey:l,usedLng:f,usedNS:c,usedParams:this.getUsedParamsDetails(t)}:l}const h=this.resolve(e,t);let g=h&&h.res;const m=h&&h.usedKey||l,P=h&&h.exactUsedKey||l,x=Object.prototype.toString.apply(g),H=["[object Number]","[object Function]","[object RegExp]"],A=t.joinArrays!==void 0?t.joinArrays:this.options.joinArrays,w=!this.i18nFormat||this.i18nFormat.handleAsObject;if(w&&g&&(typeof g!="string"&&typeof g!="boolean"&&typeof g!="number")&&H.indexOf(x)<0&&!(typeof A=="string"&&Array.isArray(g))){if(!t.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const D=this.options.returnedObjectHandler?this.options.returnedObjectHandler(m,g,{...t,ns:u}):`key '${l} (${this.language})' returned an object instead of string.`;return i?(h.res=D,h.usedParams=this.getUsedParamsDetails(t),h):D}if(s){const D=Array.isArray(g),O=D?[]:{},j=D?P:m;for(const L in g)if(Object.prototype.hasOwnProperty.call(g,L)){const T=`${j}${s}${L}`;O[L]=this.translate(T,{...t,joinArrays:!1,ns:u}),O[L]===T&&(O[L]=g[L])}g=O}}else if(w&&typeof A=="string"&&Array.isArray(g))g=g.join(A),g&&(g=this.extendTranslation(g,e,t,r));else{let D=!1,O=!1;const j=t.count!==void 0&&typeof t.count!="string",L=Ns.hasDefaultValue(t),T=j?this.pluralResolver.getSuffix(f,t.count,t):"",X=t.ordinal&&j?this.pluralResolver.getSuffix(f,t.count,{ordinal:!1}):"",M=j&&!t.ordinal&&t.count===0&&this.pluralResolver.shouldUseIntlApi(),Y=M&&t[`defaultValue${this.options.pluralSeparator}zero`]||t[`defaultValue${T}`]||t[`defaultValue${X}`]||t.defaultValue;!this.isValidLookup(g)&&L&&(D=!0,g=Y),this.isValidLookup(g)||(O=!0,g=l);const V=(t.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&O?void 0:g,te=L&&Y!==g&&this.options.updateMissing;if(O||D||te){if(this.logger.log(te?"updateKey":"missingKey",f,c,l,te?Y:g),s){const Q=this.resolve(l,{...t,keySeparator:!1});Q&&Q.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let ne=[];const K=this.languageUtils.getFallbackCodes(this.options.fallbackLng,t.lng||this.language);if(this.options.saveMissingTo==="fallback"&&K&&K[0])for(let Q=0;Q<K.length;Q++)ne.push(K[Q]);else this.options.saveMissingTo==="all"?ne=this.languageUtils.toResolveHierarchy(t.lng||this.language):ne.push(t.lng||this.language);const re=(Q,Z,U)=>{const oe=L&&U!==g?U:V;this.options.missingKeyHandler?this.options.missingKeyHandler(Q,c,Z,oe,te,t):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(Q,c,Z,oe,te,t),this.emit("missingKey",Q,c,Z,g)};this.options.saveMissing&&(this.options.saveMissingPlurals&&j?ne.forEach(Q=>{const Z=this.pluralResolver.getSuffixes(Q,t);M&&t[`defaultValue${this.options.pluralSeparator}zero`]&&Z.indexOf(`${this.options.pluralSeparator}zero`)<0&&Z.push(`${this.options.pluralSeparator}zero`),Z.forEach(U=>{re([Q],l+U,t[`defaultValue${U}`]||Y)})}):re(ne,l,Y))}g=this.extendTranslation(g,e,t,h,r),O&&g===l&&this.options.appendNamespaceToMissingKey&&(g=`${c}:${l}`),(O||D)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?g=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${c}:${l}`:l,D?g:void 0):g=this.options.parseMissingKeyHandler(g))}return i?(h.res=g,h.usedParams=this.getUsedParamsDetails(t),h):g}extendTranslation(e,t,r,i,s){var l=this;if(this.i18nFormat&&this.i18nFormat.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const f=typeof e=="string"&&(r&&r.interpolation&&r.interpolation.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let p;if(f){const g=e.match(this.interpolator.nestingRegexp);p=g&&g.length}let h=r.replace&&typeof r.replace!="string"?r.replace:r;if(this.options.interpolation.defaultVariables&&(h={...this.options.interpolation.defaultVariables,...h}),e=this.interpolator.interpolate(e,h,r.lng||this.language||i.usedLng,r),f){const g=e.match(this.interpolator.nestingRegexp),m=g&&g.length;p<m&&(r.nest=!1)}!r.lng&&this.options.compatibilityAPI!=="v1"&&i&&i.res&&(r.lng=this.language||i.usedLng),r.nest!==!1&&(e=this.interpolator.nest(e,function(){for(var g=arguments.length,m=new Array(g),P=0;P<g;P++)m[P]=arguments[P];return s&&s[0]===m[0]&&!r.context?(l.logger.warn(`It seems you are nesting recursively key: ${m[0]} in key: ${t[0]}`),null):l.translate(...m,t)},r)),r.interpolation&&this.interpolator.reset()}const u=r.postProcess||this.options.postProcess,c=typeof u=="string"?[u]:u;return e!=null&&c&&c.length&&r.applyPostProcessor!==!1&&(e=hh.handle(c,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...i,usedParams:this.getUsedParamsDetails(r)},...r}:r,this)),e}resolve(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r,i,s,l,u;return typeof e=="string"&&(e=[e]),e.forEach(c=>{if(this.isValidLookup(r))return;const f=this.extractFromKey(c,t),p=f.key;i=p;let h=f.namespaces;this.options.fallbackNS&&(h=h.concat(this.options.fallbackNS));const g=t.count!==void 0&&typeof t.count!="string",m=g&&!t.ordinal&&t.count===0&&this.pluralResolver.shouldUseIntlApi(),P=t.context!==void 0&&(typeof t.context=="string"||typeof t.context=="number")&&t.context!=="",x=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);h.forEach(H=>{this.isValidLookup(r)||(u=H,!vh[`${x[0]}-${H}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(u)&&(vh[`${x[0]}-${H}`]=!0,this.logger.warn(`key "${i}" for languages "${x.join(", ")}" won't get resolved as namespace "${u}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),x.forEach(A=>{if(this.isValidLookup(r))return;l=A;const w=[p];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(w,p,A,H,t);else{let D;g&&(D=this.pluralResolver.getSuffix(A,t.count,t));const O=`${this.options.pluralSeparator}zero`,j=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(g&&(w.push(p+D),t.ordinal&&D.indexOf(j)===0&&w.push(p+D.replace(j,this.options.pluralSeparator)),m&&w.push(p+O)),P){const L=`${p}${this.options.contextSeparator}${t.context}`;w.push(L),g&&(w.push(L+D),t.ordinal&&D.indexOf(j)===0&&w.push(L+D.replace(j,this.options.pluralSeparator)),m&&w.push(L+O))}}let C;for(;C=w.pop();)this.isValidLookup(r)||(s=C,r=this.getResource(A,H,C,t))}))})}),{res:r,usedKey:i,exactUsedKey:s,usedLng:l,usedNS:u}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e==="")}getResource(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,t,r,i):this.resourceStore.getResource(e,t,r,i)}getUsedParamsDetails(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const t=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],r=e.replace&&typeof e.replace!="string";let i=r?e.replace:e;if(r&&typeof e.count<"u"&&(i.count=e.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!r){i={...i};for(const s of t)delete i[s]}return i}static hasDefaultValue(e){const t="defaultValue";for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&t===r.substring(0,t.length)&&e[r]!==void 0)return!0;return!1}}const xu=n=>n.charAt(0).toUpperCase()+n.slice(1);class gh{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Lr.create("languageUtils")}getScriptPartFromCode(e){if(e=Fs(e),!e||e.indexOf("-")<0)return null;const t=e.split("-");return t.length===2||(t.pop(),t[t.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(t.join("-"))}getLanguagePartFromCode(e){if(e=Fs(e),!e||e.indexOf("-")<0)return e;const t=e.split("-");return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(typeof e=="string"&&e.indexOf("-")>-1){if(typeof Intl<"u"&&typeof Intl.getCanonicalLocales<"u")try{let i=Intl.getCanonicalLocales(e)[0];if(i&&this.options.lowerCaseLng&&(i=i.toLowerCase()),i)return i}catch{}const t=["hans","hant","latn","cyrl","cans","mong","arab"];let r=e.split("-");return this.options.lowerCaseLng?r=r.map(i=>i.toLowerCase()):r.length===2?(r[0]=r[0].toLowerCase(),r[1]=r[1].toUpperCase(),t.indexOf(r[1].toLowerCase())>-1&&(r[1]=xu(r[1].toLowerCase()))):r.length===3&&(r[0]=r[0].toLowerCase(),r[1].length===2&&(r[1]=r[1].toUpperCase()),r[0]!=="sgn"&&r[2].length===2&&(r[2]=r[2].toUpperCase()),t.indexOf(r[1].toLowerCase())>-1&&(r[1]=xu(r[1].toLowerCase())),t.indexOf(r[2].toLowerCase())>-1&&(r[2]=xu(r[2].toLowerCase()))),r.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(r=>{if(t)return;const i=this.formatLanguageCode(r);(!this.options.supportedLngs||this.isSupportedCode(i))&&(t=i)}),!t&&this.options.supportedLngs&&e.forEach(r=>{if(t)return;const i=this.getLanguagePartFromCode(r);if(this.isSupportedCode(i))return t=i;t=this.options.supportedLngs.find(s=>{if(s===i)return s;if(!(s.indexOf("-")<0&&i.indexOf("-")<0)&&(s.indexOf("-")>0&&i.indexOf("-")<0&&s.substring(0,s.indexOf("-"))===i||s.indexOf(i)===0&&i.length>1))return s})}),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t}getFallbackCodes(e,t){if(!e)return[];if(typeof e=="function"&&(e=e(t)),typeof e=="string"&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let r=e[t];return r||(r=e[this.getScriptPartFromCode(t)]),r||(r=e[this.formatLanguageCode(t)]),r||(r=e[this.getLanguagePartFromCode(t)]),r||(r=e.default),r||[]}toResolveHierarchy(e,t){const r=this.getFallbackCodes(t||this.options.fallbackLng||[],e),i=[],s=l=>{l&&(this.isSupportedCode(l)?i.push(l):this.logger.warn(`rejecting language code not found in supportedLngs: ${l}`))};return typeof e=="string"&&(e.indexOf("-")>-1||e.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&s(this.formatLanguageCode(e)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&s(this.getScriptPartFromCode(e)),this.options.load!=="currentOnly"&&s(this.getLanguagePartFromCode(e))):typeof e=="string"&&s(this.formatLanguageCode(e)),r.forEach(l=>{i.indexOf(l)<0&&s(this.formatLanguageCode(l))}),i}}let Om=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],Xm={1:n=>+(n>1),2:n=>+(n!=1),3:n=>0,4:n=>n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2,5:n=>n==0?0:n==1?1:n==2?2:n%100>=3&&n%100<=10?3:n%100>=11?4:5,6:n=>n==1?0:n>=2&&n<=4?1:2,7:n=>n==1?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2,8:n=>n==1?0:n==2?1:n!=8&&n!=11?2:3,9:n=>+(n>=2),10:n=>n==1?0:n==2?1:n<7?2:n<11?3:4,11:n=>n==1||n==11?0:n==2||n==12?1:n>2&&n<20?2:3,12:n=>+(n%10!=1||n%100==11),13:n=>+(n!==0),14:n=>n==1?0:n==2?1:n==3?2:3,15:n=>n%10==1&&n%100!=11?0:n%10>=2&&(n%100<10||n%100>=20)?1:2,16:n=>n%10==1&&n%100!=11?0:n!==0?1:2,17:n=>n==1||n%10==1&&n%100!=11?0:1,18:n=>n==0?0:n==1?1:2,19:n=>n==1?0:n==0||n%100>1&&n%100<11?1:n%100>10&&n%100<20?2:3,20:n=>n==1?0:n==0||n%100>0&&n%100<20?1:2,21:n=>n%100==1?1:n%100==2?2:n%100==3||n%100==4?3:0,22:n=>n==1?0:n==2?1:(n<0||n>10)&&n%10==0?2:3};const Em=["v1","v2","v3"],Lm=["v4"],bh={zero:0,one:1,two:2,few:3,many:4,other:5},Bm=()=>{const n={};return Om.forEach(e=>{e.lngs.forEach(t=>{n[t]={numbers:e.nr,plurals:Xm[e.fc]}})}),n};class jm{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=e,this.options=t,this.logger=Lr.create("pluralResolver"),(!this.options.compatibilityJSON||Lm.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=Bm(),this.pluralRulesCache={}}addRule(e,t){this.rules[e]=t}clearCache(){this.pluralRulesCache={}}getRule(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{const r=Fs(e==="dev"?"en":e),i=t.ordinal?"ordinal":"cardinal",s=JSON.stringify({cleanedCode:r,type:i});if(s in this.pluralRulesCache)return this.pluralRulesCache[s];const l=new Intl.PluralRules(r,{type:i});return this.pluralRulesCache[s]=l,l}catch{return}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}needsPlural(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(e,t);return this.shouldUseIntlApi()?r&&r.resolvedOptions().pluralCategories.length>1:r&&r.numbers.length>1}getPluralFormsOfKey(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(e,r).map(i=>`${t}${i}`)}getSuffixes(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(e,t);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort((i,s)=>bh[i]-bh[s]).map(i=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:""}${i}`):r.numbers.map(i=>this.getSuffix(e,i,t)):[]}getSuffix(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const i=this.getRule(e,r);return i?this.shouldUseIntlApi()?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:""}${i.select(t)}`:this.getSuffixRetroCompatible(i,t):(this.logger.warn(`no plural rule found for: ${e}`),"")}getSuffixRetroCompatible(e,t){const r=e.noAbs?e.plurals(t):e.plurals(Math.abs(t));let i=e.numbers[r];this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1&&(i===2?i="plural":i===1&&(i=""));const s=()=>this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString();return this.options.compatibilityJSON==="v1"?i===1?"":typeof i=="number"?`_plural_${i.toString()}`:s():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1?s():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}shouldUseIntlApi(){return!Em.includes(this.options.compatibilityJSON)}}const mh=function(n,e,t){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=Pm(n,e,t);return!s&&i&&typeof t=="string"&&(s=yu(n,t,r),s===void 0&&(s=yu(e,t,r))),s},wu=n=>n.replace(/\$/g,"$$$$");class Tm{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Lr.create("interpolator"),this.options=e,this.format=e.interpolation&&e.interpolation.format||(t=>t),this.init(e)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});const{escape:t,escapeValue:r,useRawValueToEscape:i,prefix:s,prefixEscaped:l,suffix:u,suffixEscaped:c,formatSeparator:f,unescapeSuffix:p,unescapePrefix:h,nestingPrefix:g,nestingPrefixEscaped:m,nestingSuffix:P,nestingSuffixEscaped:x,nestingOptionsSeparator:H,maxReplaces:A,alwaysFormat:w}=e.interpolation;this.escape=t!==void 0?t:km,this.escapeValue=r!==void 0?r:!0,this.useRawValueToEscape=i!==void 0?i:!1,this.prefix=s?Xi(s):l||"{{",this.suffix=u?Xi(u):c||"}}",this.formatSeparator=f||",",this.unescapePrefix=p?"":h||"-",this.unescapeSuffix=this.unescapePrefix?"":p||"",this.nestingPrefix=g?Xi(g):m||Xi("$t("),this.nestingSuffix=P?Xi(P):x||Xi(")"),this.nestingOptionsSeparator=H||",",this.maxReplaces=A||1e3,this.alwaysFormat=w!==void 0?w:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const e=(t,r)=>t&&t.source===r?(t.lastIndex=0,t):new RegExp(r,"g");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(e,t,r,i){let s,l,u;const c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},f=m=>{if(m.indexOf(this.formatSeparator)<0){const A=mh(t,c,m,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(A,void 0,r,{...i,...t,interpolationkey:m}):A}const P=m.split(this.formatSeparator),x=P.shift().trim(),H=P.join(this.formatSeparator).trim();return this.format(mh(t,c,x,this.options.keySeparator,this.options.ignoreJSONStructure),H,r,{...i,...t,interpolationkey:x})};this.resetRegExp();const p=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,h=i&&i.interpolation&&i.interpolation.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:m=>wu(m)},{regex:this.regexp,safeValue:m=>this.escapeValue?wu(this.escape(m)):wu(m)}].forEach(m=>{for(u=0;s=m.regex.exec(e);){const P=s[1].trim();if(l=f(P),l===void 0)if(typeof p=="function"){const H=p(e,s,i);l=typeof H=="string"?H:""}else if(i&&Object.prototype.hasOwnProperty.call(i,P))l="";else if(h){l=s[0];continue}else this.logger.warn(`missed to pass in variable ${P} for interpolating ${e}`),l="";else typeof l!="string"&&!this.useRawValueToEscape&&(l=lh(l));const x=m.safeValue(l);if(e=e.replace(s[0],x),h?(m.regex.lastIndex+=l.length,m.regex.lastIndex-=s[0].length):m.regex.lastIndex=0,u++,u>=this.maxReplaces)break}}),e}nest(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i,s,l;const u=(c,f)=>{const p=this.nestingOptionsSeparator;if(c.indexOf(p)<0)return c;const h=c.split(new RegExp(`${p}[ ]*{`));let g=`{${h[1]}`;c=h[0],g=this.interpolate(g,l);const m=g.match(/'/g),P=g.match(/"/g);(m&&m.length%2===0&&!P||P.length%2!==0)&&(g=g.replace(/'/g,'"'));try{l=JSON.parse(g),f&&(l={...f,...l})}catch(x){return this.logger.warn(`failed parsing options string in nesting for key ${c}`,x),`${c}${p}${g}`}return l.defaultValue&&l.defaultValue.indexOf(this.prefix)>-1&&delete l.defaultValue,c};for(;i=this.nestingRegexp.exec(e);){let c=[];l={...r},l=l.replace&&typeof l.replace!="string"?l.replace:l,l.applyPostProcessor=!1,delete l.defaultValue;let f=!1;if(i[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(i[1])){const p=i[1].split(this.formatSeparator).map(h=>h.trim());i[1]=p.shift(),c=p,f=!0}if(s=t(u.call(this,i[1].trim(),l),l),s&&i[0]===e&&typeof s!="string")return s;typeof s!="string"&&(s=lh(s)),s||(this.logger.warn(`missed to resolve ${i[1]} for nesting ${e}`),s=""),f&&(s=c.reduce((p,h)=>this.format(p,h,r.lng,{...r,interpolationkey:i[1].trim()}),s.trim())),e=e.replace(i[0],s),this.regexp.lastIndex=0}return e}}const Im=n=>{let e=n.toLowerCase().trim();const t={};if(n.indexOf("(")>-1){const r=n.split("(");e=r[0].toLowerCase().trim();const i=r[1].substring(0,r[1].length-1);e==="currency"&&i.indexOf(":")<0?t.currency||(t.currency=i.trim()):e==="relativetime"&&i.indexOf(":")<0?t.range||(t.range=i.trim()):i.split(";").forEach(l=>{if(l){const[u,...c]=l.split(":"),f=c.join(":").trim().replace(/^'+|'+$/g,""),p=u.trim();t[p]||(t[p]=f),f==="false"&&(t[p]=!1),f==="true"&&(t[p]=!0),isNaN(f)||(t[p]=parseInt(f,10))}})}return{formatName:e,formatOptions:t}},Ei=n=>{const e={};return(t,r,i)=>{let s=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(s={...s,[i.interpolationkey]:void 0});const l=r+JSON.stringify(s);let u=e[l];return u||(u=n(Fs(r),i),e[l]=u),u(t)}};class Sm{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Lr.create("formatter"),this.options=e,this.formats={number:Ei((t,r)=>{const i=new Intl.NumberFormat(t,{...r});return s=>i.format(s)}),currency:Ei((t,r)=>{const i=new Intl.NumberFormat(t,{...r,style:"currency"});return s=>i.format(s)}),datetime:Ei((t,r)=>{const i=new Intl.DateTimeFormat(t,{...r});return s=>i.format(s)}),relativetime:Ei((t,r)=>{const i=new Intl.RelativeTimeFormat(t,{...r});return s=>i.format(s,r.range||"day")}),list:Ei((t,r)=>{const i=new Intl.ListFormat(t,{...r});return s=>i.format(s)})},this.init(e)}init(e){const r=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||","}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=Ei(t)}format(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const s=t.split(this.formatSeparator);if(s.length>1&&s[0].indexOf("(")>1&&s[0].indexOf(")")<0&&s.find(u=>u.indexOf(")")>-1)){const u=s.findIndex(c=>c.indexOf(")")>-1);s[0]=[s[0],...s.splice(1,u)].join(this.formatSeparator)}return s.reduce((u,c)=>{const{formatName:f,formatOptions:p}=Im(c);if(this.formats[f]){let h=u;try{const g=i&&i.formatParams&&i.formatParams[i.interpolationkey]||{},m=g.locale||g.lng||i.locale||i.lng||r;h=this.formats[f](u,m,{...p,...i,...g})}catch(g){this.logger.warn(g)}return h}else this.logger.warn(`there was no format function for ${f}`);return u},e)}}const Mm=(n,e)=>{n.pending[e]!==void 0&&(delete n.pending[e],n.pendingCount--)};class Wm extends Zs{constructor(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=e,this.store=t,this.services=r,this.languageUtils=r.languageUtils,this.options=i,this.logger=Lr.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(r,i.backend,i)}queueLoad(e,t,r,i){const s={},l={},u={},c={};return e.forEach(f=>{let p=!0;t.forEach(h=>{const g=`${f}|${h}`;!r.reload&&this.store.hasResourceBundle(f,h)?this.state[g]=2:this.state[g]<0||(this.state[g]===1?l[g]===void 0&&(l[g]=!0):(this.state[g]=1,p=!1,l[g]===void 0&&(l[g]=!0),s[g]===void 0&&(s[g]=!0),c[h]===void 0&&(c[h]=!0)))}),p||(u[f]=!0)}),(Object.keys(s).length||Object.keys(l).length)&&this.queue.push({pending:l,pendingCount:Object.keys(l).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(s),pending:Object.keys(l),toLoadLanguages:Object.keys(u),toLoadNamespaces:Object.keys(c)}}loaded(e,t,r){const i=e.split("|"),s=i[0],l=i[1];t&&this.emit("failedLoading",s,l,t),!t&&r&&this.store.addResourceBundle(s,l,r,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&r&&(this.state[e]=0);const u={};this.queue.forEach(c=>{wm(c.loaded,[s],l),Mm(c,e),t&&c.errors.push(t),c.pendingCount===0&&!c.done&&(Object.keys(c.loaded).forEach(f=>{u[f]||(u[f]={});const p=c.loaded[f];p.length&&p.forEach(h=>{u[f][h]===void 0&&(u[f][h]=!0)})}),c.done=!0,c.errors.length?c.callback(c.errors):c.callback())}),this.emit("loaded",u),this.queue=this.queue.filter(c=>!c.done)}read(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,l=arguments.length>5?arguments[5]:void 0;if(!e.length)return l(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:r,tried:i,wait:s,callback:l});return}this.readingCalls++;const u=(f,p)=>{if(this.readingCalls--,this.waitingReads.length>0){const h=this.waitingReads.shift();this.read(h.lng,h.ns,h.fcName,h.tried,h.wait,h.callback)}if(f&&p&&i<this.maxRetries){setTimeout(()=>{this.read.call(this,e,t,r,i+1,s*2,l)},s);return}l(f,p)},c=this.backend[r].bind(this.backend);if(c.length===2){try{const f=c(e,t);f&&typeof f.then=="function"?f.then(p=>u(null,p)).catch(u):u(null,f)}catch(f){u(f)}return}return c(e,t,u)}prepareLoading(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();typeof e=="string"&&(e=this.languageUtils.toResolveHierarchy(e)),typeof t=="string"&&(t=[t]);const s=this.queueLoad(e,t,r,i);if(!s.toLoad.length)return s.pending.length||i(),null;s.toLoad.forEach(l=>{this.loadOne(l)})}load(e,t,r){this.prepareLoading(e,t,{},r)}reload(e,t,r){this.prepareLoading(e,t,{reload:!0},r)}loadOne(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const r=e.split("|"),i=r[0],s=r[1];this.read(i,s,"read",void 0,void 0,(l,u)=>{l&&this.logger.warn(`${t}loading namespace ${s} for language ${i} failed`,l),!l&&u&&this.logger.log(`${t}loaded namespace ${s} for language ${i}`,u),this.loaded(e,l,u)})}saveMissing(e,t,r,i,s){let l=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},u=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${r}" as the namespace "${t}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(r==null||r==="")){if(this.backend&&this.backend.create){const c={...l,isUpdate:s},f=this.backend.create.bind(this.backend);if(f.length<6)try{let p;f.length===5?p=f(e,t,r,i,c):p=f(e,t,r,i),p&&typeof p.then=="function"?p.then(h=>u(null,h)).catch(u):u(null,p)}catch(p){u(p)}else f(e,t,r,i,u,c)}!e||!e[0]||this.store.addResource(e[0],t,r,i)}}}const yh=()=>({debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:n=>{let e={};if(typeof n[1]=="object"&&(e=n[1]),typeof n[1]=="string"&&(e.defaultValue=n[1]),typeof n[2]=="string"&&(e.tDescription=n[2]),typeof n[2]=="object"||typeof n[3]=="object"){const t=n[3]||n[2];Object.keys(t).forEach(r=>{e[r]=t[r]})}return e},interpolation:{escapeValue:!0,format:n=>n,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}),xh=n=>(typeof n.ns=="string"&&(n.ns=[n.ns]),typeof n.fallbackLng=="string"&&(n.fallbackLng=[n.fallbackLng]),typeof n.fallbackNS=="string"&&(n.fallbackNS=[n.fallbackNS]),n.supportedLngs&&n.supportedLngs.indexOf("cimode")<0&&(n.supportedLngs=n.supportedLngs.concat(["cimode"])),n),Rs=()=>{},Zm=n=>{Object.getOwnPropertyNames(Object.getPrototypeOf(n)).forEach(t=>{typeof n[t]=="function"&&(n[t]=n[t].bind(n))})};class Da extends Zs{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;if(super(),this.options=xh(e),this.services={},this.logger=Lr,this.modules={external:[]},Zm(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initImmediate)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,typeof t=="function"&&(r=t,t={}),!t.defaultNS&&t.defaultNS!==!1&&t.ns&&(typeof t.ns=="string"?t.defaultNS=t.ns:t.ns.indexOf("translation")<0&&(t.defaultNS=t.ns[0]));const i=yh();this.options={...i,...this.options,...xh(t)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...i.interpolation,...this.options.interpolation}),t.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=t.keySeparator),t.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=t.nsSeparator);const s=p=>p?typeof p=="function"?new p:p:null;if(!this.options.isClone){this.modules.logger?Lr.init(s(this.modules.logger),this.options):Lr.init(null,this.options);let p;this.modules.formatter?p=this.modules.formatter:typeof Intl<"u"&&(p=Sm);const h=new gh(this.options);this.store=new ph(this.options.resources,this.options);const g=this.services;g.logger=Lr,g.resourceStore=this.store,g.languageUtils=h,g.pluralResolver=new jm(h,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),p&&(!this.options.interpolation.format||this.options.interpolation.format===i.interpolation.format)&&(g.formatter=s(p),g.formatter.init(g,this.options),this.options.interpolation.format=g.formatter.format.bind(g.formatter)),g.interpolator=new Tm(this.options),g.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},g.backendConnector=new Wm(s(this.modules.backend),g.resourceStore,g,this.options),g.backendConnector.on("*",function(m){for(var P=arguments.length,x=new Array(P>1?P-1:0),H=1;H<P;H++)x[H-1]=arguments[H];e.emit(m,...x)}),this.modules.languageDetector&&(g.languageDetector=s(this.modules.languageDetector),g.languageDetector.init&&g.languageDetector.init(g,this.options.detection,this.options)),this.modules.i18nFormat&&(g.i18nFormat=s(this.modules.i18nFormat),g.i18nFormat.init&&g.i18nFormat.init(this)),this.translator=new Ns(this.services,this.options),this.translator.on("*",function(m){for(var P=arguments.length,x=new Array(P>1?P-1:0),H=1;H<P;H++)x[H-1]=arguments[H];e.emit(m,...x)}),this.modules.external.forEach(m=>{m.init&&m.init(this)})}if(this.format=this.options.interpolation.format,r||(r=Rs),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const p=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);p.length>0&&p[0]!=="dev"&&(this.options.lng=p[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(p=>{this[p]=function(){return e.store[p](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(p=>{this[p]=function(){return e.store[p](...arguments),e}});const c=Ha(),f=()=>{const p=(h,g)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),c.resolve(g),r(h,g)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return p(null,this.t.bind(this));this.changeLanguage(this.options.lng,p)};return this.options.resources||!this.options.initImmediate?f():setTimeout(f,0),c}loadResources(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Rs;const i=typeof e=="string"?e:this.language;if(typeof e=="function"&&(r=e),!this.options.resources||this.options.partialBundledLanguages){if(i&&i.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return r();const s=[],l=u=>{if(!u||u==="cimode")return;this.services.languageUtils.toResolveHierarchy(u).forEach(f=>{f!=="cimode"&&s.indexOf(f)<0&&s.push(f)})};i?l(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(c=>l(c)),this.options.preload&&this.options.preload.forEach(u=>l(u)),this.services.backendConnector.load(s,this.options.ns,u=>{!u&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(u)})}else r(null)}reloadResources(e,t,r){const i=Ha();return typeof e=="function"&&(r=e,e=void 0),typeof t=="function"&&(r=t,t=void 0),e||(e=this.languages),t||(t=this.options.ns),r||(r=Rs),this.services.backendConnector.reload(e,t,s=>{i.resolve(),r(s)}),i}use(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return e.type==="backend"&&(this.modules.backend=e),(e.type==="logger"||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type==="languageDetector"&&(this.modules.languageDetector=e),e.type==="i18nFormat"&&(this.modules.i18nFormat=e),e.type==="postProcessor"&&hh.addPostProcessor(e),e.type==="formatter"&&(this.modules.formatter=e),e.type==="3rdParty"&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&!(["cimode","dev"].indexOf(e)>-1))for(let t=0;t<this.languages.length;t++){const r=this.languages[t];if(!(["cimode","dev"].indexOf(r)>-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}}changeLanguage(e,t){var r=this;this.isLanguageChangingTo=e;const i=Ha();this.emit("languageChanging",e);const s=c=>{this.language=c,this.languages=this.services.languageUtils.toResolveHierarchy(c),this.resolvedLanguage=void 0,this.setResolvedLanguage(c)},l=(c,f)=>{f?(s(f),this.translator.changeLanguage(f),this.isLanguageChangingTo=void 0,this.emit("languageChanged",f),this.logger.log("languageChanged",f)):this.isLanguageChangingTo=void 0,i.resolve(function(){return r.t(...arguments)}),t&&t(c,function(){return r.t(...arguments)})},u=c=>{!e&&!c&&this.services.languageDetector&&(c=[]);const f=typeof c=="string"?c:this.services.languageUtils.getBestMatchFromCodes(c);f&&(this.language||s(f),this.translator.language||this.translator.changeLanguage(f),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(f)),this.loadResources(f,p=>{l(p,f)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?u(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(u):this.services.languageDetector.detect(u):u(e),i}getFixedT(e,t,r){var i=this;const s=function(l,u){let c;if(typeof u!="object"){for(var f=arguments.length,p=new Array(f>2?f-2:0),h=2;h<f;h++)p[h-2]=arguments[h];c=i.options.overloadTranslationOptionHandler([l,u].concat(p))}else c={...u};c.lng=c.lng||s.lng,c.lngs=c.lngs||s.lngs,c.ns=c.ns||s.ns,c.keyPrefix!==""&&(c.keyPrefix=c.keyPrefix||r||s.keyPrefix);const g=i.options.keySeparator||".";let m;return c.keyPrefix&&Array.isArray(l)?m=l.map(P=>`${c.keyPrefix}${g}${P}`):m=c.keyPrefix?`${c.keyPrefix}${g}${l}`:l,i.t(m,c)};return typeof e=="string"?s.lng=e:s.lngs=e,s.ns=t,s.keyPrefix=r,s}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=t.lng||this.resolvedLanguage||this.languages[0],i=this.options?this.options.fallbackLng:!1,s=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const l=(u,c)=>{const f=this.services.backendConnector.state[`${u}|${c}`];return f===-1||f===0||f===2};if(t.precheck){const u=t.precheck(this,l);if(u!==void 0)return u}return!!(this.hasResourceBundle(r,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||l(r,e)&&(!i||l(s,e)))}loadNamespaces(e,t){const r=Ha();return this.options.ns?(typeof e=="string"&&(e=[e]),e.forEach(i=>{this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}),this.loadResources(i=>{r.resolve(),t&&t(i)}),r):(t&&t(),Promise.resolve())}loadLanguages(e,t){const r=Ha();typeof e=="string"&&(e=[e]);const i=this.options.preload||[],s=e.filter(l=>i.indexOf(l)<0&&this.services.languageUtils.isSupportedCode(l));return s.length?(this.options.preload=i.concat(s),this.loadResources(l=>{r.resolve(),t&&t(l)}),r):(t&&t(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!e)return"rtl";const t=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],r=this.services&&this.services.languageUtils||new gh(yh());return t.indexOf(r.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return new Da(e,t)}cloneInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Rs;const r=e.forkResourceStore;r&&delete e.forkResourceStore;const i={...this.options,...e,isClone:!0},s=new Da(i);return(e.debug!==void 0||e.prefix!==void 0)&&(s.logger=s.logger.clone(e)),["store","services","language"].forEach(u=>{s[u]=this[u]}),s.services={...this.services},s.services.utils={hasLoadedNamespace:s.hasLoadedNamespace.bind(s)},r&&(s.store=new ph(this.store.data,i),s.services.resourceStore=s.store),s.translator=new Ns(s.services,i),s.translator.on("*",function(u){for(var c=arguments.length,f=new Array(c>1?c-1:0),p=1;p<c;p++)f[p-1]=arguments[p];s.emit(u,...f)}),s.init(i,t),s.translator.options=i,s.translator.backendConnector.services.utils={hasLoadedNamespace:s.hasLoadedNamespace.bind(s)},s}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const bt=Da.createInstance();bt.createInstance=Da.createInstance,bt.createInstance,bt.dir,bt.init,bt.loadResources,bt.reloadResources,bt.use,bt.changeLanguage,bt.getFixedT,bt.t,bt.exists,bt.setDefaultNamespace,bt.hasLoadedNamespace,bt.loadNamespaces,bt.loadLanguages;const Ym={de:{translation:{bikematrix_poweredby:"Angetrieben von Bike Matrix",bikeselector_addbike_brand_desc:"Die Marke deines Fahrrads ist normalerweise in den unten hervorgehobenen Bereichen zu finden.",bikeselector_addbike_brand_label:"Marke",bikeselector_addbike_brand_select:"Deine Fahrradmarke auswählen",bikeselector_addbike_find_btn:"Mein Fahrrad finden",bikeselector_addbike_framespec_desc:"Deine Rahmenspezifikation ist normalerweise in den unten hervorgehobenen Bereichen zu finden.",bikeselector_addbike_framespec_label:"Rahmenspezifikation",bikeselector_addbike_framespec_select:"Die Rahmenspezifikation deines Fahrrads auswählen",bikeselector_addbike_model_desc:"Dein Fahrradmodell ist normalerweise in den unten hervorgehobenen Bereichen zu finden.",bikeselector_addbike_model_label:"Modell",bikeselector_addbike_model_select:"Dein Fahrradmodell auswählen",bikeselector_addbike_title:"Fahrrad hinzufügen",bikeselector_browse_back_btn:"Zurück zur Bike-Lounge",bikeselector_browse_products_label:"Kompatible Produkte shoppen",bikeselector_browse_shop_btn:"Produkte shoppen",bikeselector_browse_title:"Mit dem Einkauf beginnen!",bikeselector_confirm_brandmodelframespec_label:"Marke, Modell, Rahmenspezifikation",bikeselector_confirm_confirm_btn:"Ja, das ist mein Fahrrad!",bikeselector_confirm_framesize_label:"Rahmengröße",bikeselector_confirm_notyourride_msg:"Nicht dein Fahrrad? Um eine Änderung vorzunehmen, wähle oben ein Feld aus.",bikeselector_confirm_title:"Dein Fahrrad bestätigen",bikeselector_confirm_yearbikespec_label:"Jahr, Ausstattungsvariante",bikeselector_home_add_a_bike:"Füge zunächst unten ein Fahrrad hinzu …",bikeselector_home_add_btn:"Fahrrad hinzufügen",bikeselector_home_browse_btn:"Kompatibilität prüfen",bikeselector_home_close_btn:"Schließen",bikeselector_home_empty:"Deine Lounge ist leer!",bikeselector_home_footer_message:"Fahrradhersteller können die Spezifikationen ihrer Fahrräder ohne vorherige Ankündigung ändern. Abweichungen gegenüber der Serienausstattung können Auswirkungen auf die Kompatibilität haben.",bikeselector_home_title:"Meine Bike-Lounge",bikeselector_search_bikespec_label:"Ausstattungsvariante",bikeselector_search_bikespec_select:"Ausstattungsvariante wählen",bikeselector_search_bikespec_select_all:"Alle",bikeselector_search_confirm_btn:"Auswahl bestätigen",bikeselector_search_no_bikes_found:"Keine Fahrräder gefunden",bikeselector_search_number_bikes_found:"{{number_found}} Fahrräder gefunden",bikeselector_search_one_bike_found:"1 Fahrrad gefunden",bikeselector_search_searching:"Suche läuft …",bikeselector_search_title:"Fahrradsuche",bikeselector_search_year_label:"Jahr",bikeselector_size_confirm_btn:"Größe bestätigen",bikeselector_size_framesize_desc:"Die Rahmengröße deines Fahrrads ist normalerweise in den unten hervorgehobenen Bereichen zu finden.",bikeselector_size_framesize_label:"Rahmengröße",bikeselector_size_framesize_one_size:"Einheitsgröße",bikeselector_size_framesize_select:"Deine Rahmengröße wählen",bikeselector_size_title:"Deine Größe wählen",cancel:"Abbrechen",category_brakeadapterrear:"Bremsadapter hinten",category_brakecaliperrear:"Bremssattel hinten",category_brakecaliperfront:"Bremssattel vorne",category_brakeleverlh:"Bremshebel links",category_brakeleverrh:"Bremshebel rechts",category_brakepadsfront:"Bremsbeläge vorne",category_brakepadsrear:"Bremsbeläge hinten",category_brakerotorfront:"Bremsscheibe vorne",category_brakes:"Bremsen",category_chainringspider:"Kettenblatt-Spider",category_cockpit:"Cockpit",category_drivetrain:"Antriebsstrang",category_framefork:"Rahmen und Gabel",category_largestchainring:"Größtes Kettenblatt",category_secondlargestchainring:"Zweitgrößtes Kettenblatt",category_shifteradapterlh:"Schalthebeladapter für die linke Hand",category_shifteradapterrh:"Schalthebeladapter rechts",category_shifterbrakecombolh:"Schalthebel-Bremskombination links",category_shifterbrakecomborh:"Schalthebel-Bremskombination rechts",category_shifterlh:"Schalthebel für die linke Hand",category_shifterrh:"Schalthebel rechts",category_thirdlargestchainring:"Drittgrößtes Kettenblatt",category_tyrefront:"Reifen vorne",category_tyrerear:"Reifen hinten",category_wheelstyres:"Räder und Reifen",category_brakeadapterfront:"Bremsadapter vorne",category_brakerotorrear:"Bremsscheibe hinten",compatible:"Kompatibel",compatible_check_notes:"Kompatibel – Notizen prüfen",compatiblelist_header:"Kompatible Produkte",compatiblelist_nobikeselected:"Kein Fahrrad ausgewählt. Hier klicken, um dein Fahrrad zur Suche nach kompatiblen Teilen hinzuzufügen",compatiblelist_noresults:"Keine kompatiblen Produkte gefunden",compatiblelist_pageone:"Alle für dein Fahrrad kompatiblen Produkte können <a>hier</a> eingesehen werden.",compatiblelist_unavailable:"Kompatibilität für diese Produktkategorie ist für deine gewählte Fahrradmarke demnächst verfügbar!",confirm:"Bestätigen",copy:"Kopieren",edit:"Bearbeiten",error_add_component:"Die Komponente wurde vom Fahrrad wohl abgelehnt. Versuche es erneut, aber dieses Mal mit mehr Nachdruck.",error_add_custom_bike:"Ups! Wir konnten dein Custom-Bike nicht erstellen. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_find_products:"Hmmm … Heute ist bei uns wohl ein wenig Sand im Getriebe. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_find_products_no_results:"Hmmm … Wir können das Produkt nicht finden. Versuche eine andere Modellnummer und korrigiere die Schreibweise.",error_generic:"Es gab einen Fehler am Endpunkt – {{endpoint_location}}",error_get_bike_bom:"Das ist uns peinlich! Leider konnte deine Fahrradkonfiguration nicht abgerufen werden. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_invalid_email:"Dies ist scheinbar keine gültige E-Mail-Adresse. Hast du eine andere Option?",error_remove_component:"Diese Komponente will anscheinend am Fahrrad bleiben. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_revert_component:"Diese Komponente will anscheinend am Fahrrad bleiben. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_save_custom_bike:"Leider wurde dein Fahrrad nicht gespeichert. Versuche es erneut und tritt diesmal etwas kräftiger in die Pedale.",error_update_custom_bike:"Oh, das hat nicht geklappt. Sorry! Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_update_custom_bike_name:"Der Name deines Fahrrads konnte nicht geändert werden. Vielleicht mag es den neuen Namen nicht. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",not_compatible:"Nicht kompatibel",onboarding_explore:"Gehen Sie entdecken",onboarding_green_spanner:"Suchen Sie nach dem Grünen Schraubenschlüssel",onboarding_green_spanner_description:"Wenn eine Komponente einen grünen Schraubenschlüssel hat, kann sie ausgetauscht oder komplett aus dem Build entfernt werden.",onboarding_linked_components:"Verknüpfte Komponenten verstehen",onboarding_linked_components_description:"Einige Teile (z. B. Kurbelgarnitur + Tretlager) sind miteinander verbunden. Um eines auszutauschen, müssen Sie möglicherweise beide entfernen – andernfalls markiert das System es möglicherweise als inkompatibel.",onboarding_next:"Nächste",onboarding_open_bike_build:"Öffnen Sie Ihren Fahrradaufbau",onboarding_open_bike_build_description:"Erweitern Sie beim Anzeigen Ihres Fahrradaufbaus die Komponentengruppen, um die Komponenten anzuzeigen, die für Ihr Fahrrad gelten.",onboarding_preview:"Vorschau anzeigen oder Änderungen speichern",onboarding_preview_description:"Sie können Komponenten austauschen/entfernen und Änderungen bestätigen, um Upgrades zu erkunden. Diese können vor dem Speichern jederzeit rückgängig gemacht werden. Nach dem Speichern können Änderungen nicht mehr rückgängig gemacht, sondern nur entfernt oder erneut ersetzt werden.",onboarding_replacement:"Wählen Sie den richtigen Ersatz",onboarding_replacement_description:"Verwenden Sie zur Suche den Barcode oder die Teilenummer des Herstellers (auf der Verpackung oder Ihrer Rechnung). Sie können auch die Modellnummer verwenden, überprüfen Sie dies jedoch noch einmal – einige Nummern gelten für mehrere Versionen.",onboarding_settings:"Einstellungsseite anzeigen",onboarding_settings_description:"Auf Ihrer Einstellungsseite können Sie den Namen Ihres Fahrrads ändern, Ihre E-Mail-Adresse aktualisieren und dort finden Sie Ihre Bike Matrix-ID sowie Ihre Share-ID.",onboarding_title:"Virtueller Workshop – Kurzanleitung",onboarding_vw_description:"Ändern Sie die digitale Aufzeichnung Ihres Fahrrads entsprechend den von Ihnen vorgenommenen Upgrades, um sicherzustellen, dass die Kompatibilitätsprüfungen so genau wie möglich sind.",productcheck_nobikeselected_label:"Kompatibilität prüfen",productcheck_nobikeselected_message:"Dein Fahrrad hinzufügen, um die Kompatibilität dieses Teils zu prüfen",productcheck_questionmark:"?",save:"Speichern",share:"Teilen",virtualworkshop_add_bike_text:"Deine Bike Matrix ID findest du auf der Seite Einstellungen in der virtuellen Werkstatt",virtualworkshop_bm_id_text:"Du kannst entweder die Bike Matrix ID verwenden, die du in den Einstellungen der virtuellen Werkstatt findest, oder die geteilte ID, die dir von einer anderen Person mitgeteilt wurde.",virtualworkshop_bom_title:"Materialliste",virtualworkshop_build_text:"Details zur Konfiguration",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"Bei der Aktualisierung ihres Fahrrad-Datensatzes übernehmen Nutzer die volle Verantwortung für die richtige Zusammenstellung der Komponenten und sind sich bewusst, dass sich Änderungen auf die Kompatibilität auswirken können.",virtualworkshop_do_not_pass:"Der virtuelle Workshop ist noch nicht für alle Fahrradmarken verfügbar.",virtualworkshop_drivetrain:"Antrieb",virtualworkshop_e_drive:"E-Antrieb",virtualworkshop_enter_button:"Virtuelle Werkstatt betreten",virtualworkshop_frame_fork:"Rahmen und Gabel",virtualworkshop_intro_text:"Optimiere deine Fahrradkonfiguration mit neuen Komponenten und speichere dein Fahrrad durch die Angabe einer E-Mail-Adresse. Betrachte geteilte Fahrradkonfigurationen und greife auf deine Fahrrad-IDs zu.",virtualworkshop_other_parts:"Sonstige Teile",virtualworkshop_remove_btn:"Komponente entfernen",virtualworkshop_remove_subtitle:"Das Entfernen einer Komponente führt dazu, dass sie aus deiner Fahrradkonfiguration gelöscht wird. Dies kann die Kompatibilität mit anderen Teilen beeinträchtigen.",virtualworkshop_remove_title:"Bist du sicher?",virtualworkshop_revert_btn:"Rückgängig machen",virtualworkshop_save_btn:"Fahrrad speichern",virtualworkshop_save_text:"Um dein Custom-Bike zu speichern, benötigen wir deine E-Mail-Adresse.",virtualworkshop_save_title:"E-Mail-Adresse eingeben",virtualworkshop_search_text:"Barcode eingeben oder nach Marke, Modell, Teilenummer etc. suchen",virtualworkshop_settings_bike_name:"Name des Fahrrads",virtualworkshop_settings_email:"E-Mail",virtualworkshop_settings_id:"Bike Matrix ID",virtualworkshop_settings_share_id:"Geteilte ID",virtualworkshop_shared_icon:"Mit dir geteilt",virtualworkshop_swap_btn:"Komponente tauschen",virtualworkshop_title:"Virtuelle Werkstatt",virtualworkshop_unsaved_changes:"Ungespeicherte Änderungen betrachten",virtualworkshop_wheels_tyres:"Laufräder & Reifen",category_bike:"Fahrrad",category_bottombracket:"Tretlager",category_bottombracketpart:"Tretlager-Ersatzteile",category_brakeadapter:"Bremsadapter",category_brakeadapterpart:"Bremsadapter-Ersatzteile",category_brakecaliper:"Bremssattel",category_brakecaliperpart:"Bremssattel-Ersatzteile",category_brakecaliperservicekit:"Bremssattel-Servicekit",category_brakelever:"Bremshebel",category_brakeleverpart:"Bremshebel-Ersatzteile",category_brakeleverservicekit:"Bremshebel-Servicekit",category_brakepads:"Bremsbeläge",category_brakerotor:"Bremsscheibe",category_brakerotorpart:"Bremsscheiben-Ersatzteile",category_brakesystem:"Bremssystem",category_brakesystempart:"Bremssystem-Ersatzteile",category_cassette:"Kassette",category_cassettepart:"Kassetten-Ersatzteile",category_chain:"Kette",category_chainguide:"Kettenführung",category_chainguidepart:"Kettenführung-Ersatzteile",category_chainjoiner:"Kettenschloss/-nietstift",category_chainring:"Kettenblatt",category_chainringbolt:"Kettenblattschrauben",category_crankpart:"Kurbelgarnitur-Ersatzteile",category_crankset:"Kurbelgarnitur",category_dropperlever:"Variosattelstützenhebel",category_dropperleverpart:"Variosattelstützenhebel-Ersatzteile",category_ebikebattery:"E-Bike Akku",category_ebikebatterypart:"E-Bike Akku-Ersatzteile",category_ebikecharger:"E-Bike Ladegerät",category_ebikechargerpart:"E-Bike Ladegerät-Ersatzteile",category_ebikecontrolunit:"E-Bike Bedieneinheit",category_ebikecontrolunitpart:"E-Bike Bedieneinheit-Ersatzteile",category_ebikeinterconnect:"E-Bike Kabelstrang",category_ebikeinterconnectpart:"E-Bike Kabelstrang-Ersatzteile",category_ebikemotorsystem:"E-Bike Antriebssystem",category_ebikemotorsystempart:"E-Bike Antriebssystem-Ersatzteile",category_fork:"Gabel",category_forkpart:"Gabel-Ersatzteile",category_forkservicekit:"Gabel-Servicekit",category_frame:"Rahmen",category_framepart:"Rahmen-Ersatzteile",category_frontaxle:"Vorderradachse",category_frontaxlepart:"Vorderradachsen-Ersatzteile",category_frontderailleur:"Umwerfer",category_frontderailleurpart:"Umwerfer-Ersatzteile",category_fronthub:"Vorderradnabe",category_fronthubpart:"Vorderradnaben-Ersatzteile",category_frontwheel:"Vorderrad",category_grips:"Griffe",category_gripspart:"Griff-Ersatzteile",category_handlebar:"Lenker",category_headset:"Steuersatz",category_headsetpart:"Steuersatz-Ersatzteile",category_nipple:"Speichennippel",category_pedals:"Pedale",category_pedalspart:"Pedal-Ersatzteil",category_rearaxle:"Hinterradachse",category_rearaxlepart:"Hinterradachsen-Ersatzteile",category_rearderailleur:"Schaltwerk",category_rearderailleurpart:"Schaltwerk-Ersatzteile",category_rearhub:"Hinterradnabe",category_rearhubpart:"Hinterradnaben-Ersatzteile",category_rearshock:"Hinterbaudämpfer",category_rearshockpart:"Hinterbaudämpfer-Ersatzteile",category_rearshockservicekit:"Hinterbaudämpfer-Servicekit",category_rearwheel:"Hinterrad",category_rim:"Felge",category_saddle:"Sattel",category_seatpost:"Sattelstütze",category_seatpostclamp:"Sattelstützenklemme",category_seatpostclamppart:"Sattelstützenklemmen-Ersatzteile",category_seatpostpart:"Sattelstützen-Ersatzteile",category_seatpostservicekit:"Sattelstützen-Servicekit",category_shiftadapter:"Schaltadapter",category_shiftadapterpart:"Schaltadapter-Ersatzteile",category_shiftbrakecombo:"Schalt-/Bremshebel",category_shiftbrakecombopart:"Schalt-/Bremshebel-Ersatzteile",category_shifter:"Schalthebel",category_shifterpart:"Schalthebel-Ersatzteile",category_spoke:"Speiche",category_stem:"Vorbau",category_stempart:"Vorbau-Ersatzteile",category_tube:"Schlauch",category_tyre:"Reifen",category_wheelset:"Laufradsatz",checksku_message_nobikefound:"Es konnte kein Fahrrad mit der angegebenen Fahrradschlüsselnummer gefunden werden",checksku_message_nocompatibilityinfo:"Keine Informationen zur Kompatibilität",checksku_message_noproductfound:"Es konnte kein Teil mit der angegebenen SKU-/Teile-Nr. oder dem Barcode gefunden werden",checksku_message_notcompatible:"Nicht kompatibel",checksku_warning_unabletoperformcheck:"Es konnte keine Prüfung der Kompatibilität durchgeführt werden. Die Kompatibilität muss persönlich überprüft werden."}},it:{translation:{bikematrix_poweredby:"Offerto da Bike Matrix",bikeselector_addbike_brand_desc:"In genere, la marca della tua bici si trova nelle aree evidenziate di seguito.",bikeselector_addbike_brand_label:"Marca",bikeselector_addbike_brand_select:"Seleziona la marca della tua bici",bikeselector_addbike_find_btn:"Trova la mia bici",bikeselector_addbike_framespec_desc:"In genere, le informazioni sulla serie del telaio della tua bici si trovano nelle aree evidenziate di seguito.",bikeselector_addbike_framespec_label:"Serie del telaio",bikeselector_addbike_framespec_select:"Seleziona la serie del telaio della tua bici",bikeselector_addbike_model_desc:"In genere, il modello della tua bici si trova nelle aree evidenziate di seguito.",bikeselector_addbike_model_label:"Modello",bikeselector_addbike_model_select:"Seleziona il modello della tua bici",bikeselector_addbike_title:"Aggiungi una bici",bikeselector_browse_back_btn:"Torna alla pagina Le mie bici",bikeselector_browse_products_label:"Acquista i prodotti compatibili",bikeselector_browse_shop_btn:"Acquista i prodotti",bikeselector_browse_title:"Inizia l’acquisto!",bikeselector_confirm_brandmodelframespec_label:"Marca, modello, serie del telaio",bikeselector_confirm_confirm_btn:"Sì, questa è la mia bici!",bikeselector_confirm_framesize_label:"Misura del telaio",bikeselector_confirm_notyourride_msg:"Non è la tua bici? Seleziona un campo sopra per apportare una modifica.",bikeselector_confirm_title:"Conferma la tua bici",bikeselector_confirm_yearbikespec_label:"Anno, versione della bici",bikeselector_home_add_a_bike:"Aggiungi una bici qui sotto per iniziare...",bikeselector_home_add_btn:"Aggiungi una bici",bikeselector_home_browse_btn:"Sfoglia compatibilità",bikeselector_home_close_btn:"Chiudi",bikeselector_home_empty:"La tua Bike Lounge è vuota!",bikeselector_home_footer_message:"I produttori delle bici possono modificare le specifiche senza preavviso. Eventuali differenze rispetto alle specifiche di serie possono condizionare la compatibilità.",bikeselector_home_title:"Le mie bici",bikeselector_search_bikespec_label:"Versione della bici",bikeselector_search_bikespec_select:"Seleziona la versione della bici",bikeselector_search_bikespec_select_all:"Tutti",bikeselector_search_confirm_btn:"Conferma la scelta",bikeselector_search_no_bikes_found:"Nessuna bici trovata",bikeselector_search_number_bikes_found:"{{number_found}} bici trovate",bikeselector_search_one_bike_found:"1 bici trovata",bikeselector_search_searching:"Ricerca in corso...",bikeselector_search_title:"Ricerca bici",bikeselector_search_year_label:"Anno",bikeselector_size_confirm_btn:"Conferma la misura",bikeselector_size_framesize_desc:"In genere, la misura del telaio della tua bici si trova nelle aree evidenziate di seguito.",bikeselector_size_framesize_label:"Misura del telaio",bikeselector_size_framesize_one_size:"Misura unica",bikeselector_size_framesize_select:"Seleziona la misura del tuo telaio",bikeselector_size_title:"Seleziona la tua misura",cancel:"Cancella",category_brakeadapterrear:"Adattatore freno posteriore",category_brakecaliperrear:"Pinza freno posteriore",category_brakecaliperfront:"Pinza freno anteriore",category_brakeleverlh:"Leva del freno sinistra",category_brakeleverrh:"Leva del freno destra",category_brakepadsfront:"Pastiglie Freno Anteriori",category_brakepadsrear:"Pastiglie Freno Posteriori",category_brakerotorfront:"Rotore del freno anteriore",category_brakes:"Freni",category_chainringspider:"Ragno della corona",category_cockpit:"Pozzetto",category_drivetrain:"Trasmissione",category_framefork:"Telaio e forcella",category_largestchainring:"Corona più grande",category_secondlargestchainring:"Seconda corona più grande",category_shifteradapterlh:"Adattatore del cambio per mano sinistra",category_shifteradapterrh:"Adattatore del cambio destro",category_shifterbrakecombolh:"Combinazione freno cambio mano sinistra",category_shifterbrakecomborh:"Combinazione freno cambio mano destra",category_shifterlh:"Mano sinistra del cambio",category_shifterrh:"Mano destra del cambio",category_thirdlargestchainring:"Terzo corona più grande",category_tyrefront:"Pneumatico anteriore",category_tyrerear:"Pneumatico posteriore",category_wheelstyres:"Ruote e pneumatici",category_brakeadapterfront:"Adattatore freno anteriore",category_brakerotorrear:"Rotore freno posteriore",compatible:"Compatibile",compatible_check_notes:"Compatibile - Controlla le note",compatiblelist_header:"Prodotti compatibili",compatiblelist_nobikeselected:"Nessuna bici selezionata. Clicca qui per aggiungere la tua bici e verificare la compatibilità dei componenti",compatiblelist_noresults:"Nessun prodotto compatibile trovato",compatiblelist_pageone:"Puoi vedere tutti i prodotti compatibili con la tua bici <a>qui</a>.",compatiblelist_unavailable:"I dati sulla compatibilità per questa categoria di prodotto e per la marca di bici selezionata saranno disponibili a breve!",confirm:"Conferma",copy:"Copia",edit:"Modifica",error_add_component:"Il componente non è stato installato. Riprova e questa volta pedala un po' più forte.",error_add_custom_bike:"Ops... Non siamo riusciti a creare la tua bici personalizzata. Aggiorna e riprova.",error_find_products:"Uhm... Sembra che le nostre ruote non girino bene. Aggiorna e riprova.",error_find_products_no_results:"Uhm... Non riusciamo a trovare il prodotto. Prova un codice prodotto diverso o prova a scriverlo in un altro modo.",error_generic:"Si è verificato un errore in un punto terminale - {{endpoint_location}}",error_get_bike_bom:"Siamo spiacenti! Non è stato possibile recuperare la configurazione della tua bici. Aggiorna e riprova.",error_invalid_email:"Sembra che l'indirizzo email non sia valido: sono disponibili altre opzioni?",error_remove_component:"Questo componente vuole davvero restare sulla bici. Aggiorna e riprova.",error_revert_component:"Questo componente vuole davvero restare sulla bici. Aggiorna e riprova.",error_save_custom_bike:"Colpa nostra, la tua bici non è stata salvata. Riprova e questa volta pedala un po' più forte.",error_update_custom_bike:"Oh, non ha funzionato. Ci spiace! Aggiorna e riprova.",error_update_custom_bike_name:"Non è stato possibile cambiare il nome della tua bici. Forse non le piace! Aggiorna e riprova",not_compatible:"Non compatibile",onboarding_explore:"Gehen Sie entdecken",onboarding_green_spanner:"Cerca la chiave inglese verde",onboarding_green_spanner_description:"Se un componente ha una chiave inglese verde, può essere scambiato o rimosso completamente dalla build.",onboarding_linked_components:"Comprendere i componenti collegati",onboarding_linked_components_description:"Alcune parti (ad esempio guarnitura + movimento centrale) sono collegate. Per scambiarne uno, potrebbe essere necessario rimuoverli entrambi, altrimenti il ??sistema potrebbe contrassegnarlo come incompatibile.",onboarding_next:"Nächste",onboarding_open_bike_build:"Apri la costruzione della tua bici",onboarding_open_bike_build_description:"Quando visualizzi la costruzione della tua bici, espandi i gruppi di componenti per visualizzare i componenti che si applicano alla tua bici.",onboarding_preview:"Anteprima o salvataggio delle modifiche",onboarding_preview_description:"Puoi scambiare/rimuovere componenti e confermare le modifiche per esplorare gli aggiornamenti. Queste operazioni possono essere annullate in qualsiasi momento prima del salvataggio. Una volta salvate, le modifiche non possono essere annullate, ma solo rimosse o sostituite di nuovo.",onboarding_replacement:"Scegli il sostituto giusto",onboarding_replacement_description:"Utilizza il codice a barre o il codice articolo del produttore (trovato sulla confezione o sulla fattura) per effettuare la ricerca. Puoi anche utilizzare il numero del modello, ma ricontrolla: alcuni numeri si applicano a più versioni.",onboarding_settings:"Visualizza la pagina Impostazioni",onboarding_settings_description:"La pagina delle impostazioni è dove puoi cambiare il nome della tua bicicletta, aggiornare la tua email e dove troverai il tuo ID Bike Matrix e il tuo ID di condivisione.",onboarding_title:"Workshop virtuale – Guida rapida",onboarding_vw_description:"Modifica il profilo digitale della tua bici per riflettere le modifiche apportate, assicurando che i controlli di compatibilità siano il più precisi possibile.",productcheck_nobikeselected_label:"Controlla compatibilità",productcheck_nobikeselected_message:"Aggiungi la tua bici per verificare se questo componente è idoneo",productcheck_questionmark:"?",save:"Salva",share:"Condividi",virtualworkshop_add_bike_text:"Il tuo ID Bike Matrix può essere trovato nella pagina Impostazioni all'interno dell'Officina virtuale",virtualworkshop_bm_id_text:"Puoi utilizzare l'ID Bike Matrix, presente nella sezione delle impostazioni dell'Officina virtuale, oppure l'ID condiviso con te da qualcun altro.",virtualworkshop_bom_title:"Elenco materiali",virtualworkshop_build_text:"Dettagli configurazione",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"Aggiornando l'allestimento delle proprie bici, l'utente si assume la piena responsabilità di verificare che i componenti siano corretti, consapevole del fatto che eventuali differenze possono condizionare la compatibilità.",virtualworkshop_do_not_pass:"L'officina virtuale non è disponibile per tutte le marche di biciclette.",virtualworkshop_drivetrain:"Trasmissione",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Accedi all'Officina virtuale",virtualworkshop_frame_fork:"Telaio e forcella",virtualworkshop_intro_text:"Aggiorna la configurazione della tua bici con nuovi componenti e salvala fornendo un indirizzo email. Visualizza le configurazioni condivise e accedi agli ID delle tue bici",virtualworkshop_other_parts:"Altre parti",virtualworkshop_remove_btn:"Rimuovi componente",virtualworkshop_remove_subtitle:"Rimuovendo un componente, verrà eliminato dalla configurazione della tua bici. Ciò può condizionare la compatibilità con altre parti.",virtualworkshop_remove_title:"Confermi?",virtualworkshop_revert_btn:"Ripristina",virtualworkshop_save_btn:"Salva la bici",virtualworkshop_save_text:"Per poter memorizzare una bici personalizzata dobbiamo salvarla associandola al tuo indirizzo email",virtualworkshop_save_title:"Inserisci la tua email",virtualworkshop_search_text:"Inserisci il codice a barre o cerca per marca, modello, codice prodotto...",virtualworkshop_settings_bike_name:"Nome della bici",virtualworkshop_settings_email:"Email",virtualworkshop_settings_id:"ID Bike Matrix",virtualworkshop_settings_share_id:"Condividi ID",virtualworkshop_shared_icon:"Condiviso con te",virtualworkshop_swap_btn:"Sostituisci il componente",virtualworkshop_title:"Officina virtuale",virtualworkshop_unsaved_changes:"Visualizza le modifiche non salvate",virtualworkshop_wheels_tyres:"Ruote e pneumatici",category_bike:"Bici",category_bottombracket:"Movimento centrale",category_bottombracketpart:"Componente movimento centrale",category_brakeadapter:"Adattatore freno",category_brakeadapterpart:"Componente adattatore freno",category_brakecaliper:"Pinza freno",category_brakecaliperpart:"Componente pinza freno",category_brakecaliperservicekit:"Kit manutenzione pinza freno",category_brakelever:"Leva freno",category_brakeleverpart:"Componente leva freno",category_brakeleverservicekit:"Kit manutenzione leva freno",category_brakepads:"Pastiglie/pattini freno",category_brakerotor:"Rotore freno",category_brakerotorpart:"Componente rotore freno",category_brakesystem:"Impianto frenante",category_brakesystempart:"Componente impianto frenante",category_cassette:"Cassetta",category_cassettepart:"Componente cassetta",category_chain:"Catena",category_chainguide:"Guidacatena",category_chainguidepart:"Componente guidacatena",category_chainjoiner:"Falsamaglia",category_chainring:"Corona",category_chainringbolt:"Vite corona",category_crankpart:"Componente guarnitura",category_crankset:"Guarnitura",category_dropperlever:"Leva reggisella telescopico",category_dropperleverpart:"Componente leva reggisella telescopico",category_ebikebattery:"Batteria eBike",category_ebikebatterypart:"Componente batteria eBike",category_ebikecharger:"Caricabatteria eBike",category_ebikechargerpart:"Componente caricabatteria eBike",category_ebikecontrolunit:"Unità di controllo eBike",category_ebikecontrolunitpart:"Componente unità di controllo eBike",category_ebikeinterconnect:"Interconnessione eBike",category_ebikeinterconnectpart:"Componente interconnessione eBike",category_ebikemotorsystem:"Sistema motore eBike",category_ebikemotorsystempart:"Componente sistema motore eBike",category_fork:"Forcella",category_forkpart:"Componente forcella",category_forkservicekit:"Kit di manutenzione forcella",category_frame:"Telaio",category_framepart:"Componente telaio",category_frontaxle:"Perno anteriore",category_frontaxlepart:"Componente perno anteriore",category_frontderailleur:"Deragliatore anteriore",category_frontderailleurpart:"Componente deragliatore anteriore",category_fronthub:"Mozzo anteriore",category_fronthubpart:"Componente mozzo anteriore",category_frontwheel:"Ruota anteriore",category_grips:"Manopole",category_gripspart:"Componente manopole",category_handlebar:"Manubrio",category_headset:"Serie sterzo",category_headsetpart:"Componente serie sterzo",category_nipple:"Nipplo",category_pedals:"Pedali",category_pedalspart:"Componente pedali",category_rearaxle:"Perno posteriore",category_rearaxlepart:"Componente perno posteriore",category_rearderailleur:"Deragliatore posteriore",category_rearderailleurpart:"Componente deragliatore posteriore",category_rearhub:"Mozzo posteriore",category_rearhubpart:"Componente mozzo posteriore",category_rearshock:"Sospensione posteriore",category_rearshockpart:"Componente sospensione posteriore",category_rearshockservicekit:"Kit manutenzione sospensione posteriore",category_rearwheel:"Ruota posteriore",category_rim:"Cerchio",category_saddle:"Sella",category_seatpost:"Reggisella",category_seatpostclamp:"Morsetto reggisella",category_seatpostclamppart:"Componente morsetto reggisella",category_seatpostpart:"Componente reggisella",category_seatpostservicekit:"Kit manutenzione reggisella",category_shiftadapter:"Adattatore cambio",category_shiftadapterpart:"Componente adattatore cambio",category_shiftbrakecombo:"Comando integrato freno/cambio",category_shiftbrakecombopart:"Componente comando integrato freno/cambio",category_shifter:"Comando cambio",category_shifterpart:"Componente comando cambio",category_spoke:"Raggio",category_stem:"Attacco manubrio",category_stempart:"Componente attacco manubrio",category_tube:"Camera d'aria",category_tyre:"Pneumatico",category_wheelset:"Set ruote",checksku_message_nobikefound:"Impossibile trovare una bici con la chiave di ricerca fornita",checksku_message_nocompatibilityinfo:"Nessuna informazione sulla compatibilità",checksku_message_noproductfound:"Impossibile trovare il componente con lo SKU/codice a barre/codice componente fornito",checksku_message_notcompatible:"Non compatibile",checksku_warning_unabletoperformcheck:"Impossibile eseguire il controllo di compatibilità. Verificare manualmente la compatibilità."}},nl:{translation:{bikematrix_poweredby:"Mogelijk gemaakt door Bike Matrix",bikeselector_addbike_brand_desc:"Het merk van uw fiets kunt u meestal vinden in de hieronder gemarkeerde gebieden.",bikeselector_addbike_brand_label:"Merk",bikeselector_addbike_brand_select:"Selecteer het merk van uw fiets",bikeselector_addbike_find_btn:"Vind mijn fiets",bikeselector_addbike_framespec_desc:"De framespecificaties van uw fiets kunt u meestal vinden in de hieronder gemarkeerde gebieden.",bikeselector_addbike_framespec_label:"Framespecificaties",bikeselector_addbike_framespec_select:"Selecteer de framespecificaties van uw fiets",bikeselector_addbike_model_desc:"Het model van uw fiets kunt u meestal vinden in de hieronder gemarkeerde gebieden.",bikeselector_addbike_model_label:"Model",bikeselector_addbike_model_select:"Selecteer het model van uw fiets",bikeselector_addbike_title:"Fiets toevoegen",bikeselector_browse_back_btn:"Terug naar Fietsenrek",bikeselector_browse_products_label:"Bekijk compatibele producten",bikeselector_browse_shop_btn:"Bekijk producten",bikeselector_browse_title:"Begin met winkelen!",bikeselector_confirm_brandmodelframespec_label:"Merk, model, framespecificaties",bikeselector_confirm_confirm_btn:"Ja, dat is mijn fiets!",bikeselector_confirm_framesize_label:"Framemaat",bikeselector_confirm_notyourride_msg:"Niet uw fiets? Selecteer hierboven een veld om te wijzigen.",bikeselector_confirm_title:"Bevestig uw fiets",bikeselector_confirm_yearbikespec_label:"Jaar, fietsspecificaties",bikeselector_home_add_a_bike:"Voeg hieronder een fiets toe om te beginnen...",bikeselector_home_add_btn:"Fiets toevoegen",bikeselector_home_browse_btn:"Compatibiliteit bekijken",bikeselector_home_close_btn:"Sluiten",bikeselector_home_empty:"Uw fietsenrek is leeg!",bikeselector_home_footer_message:"Fietsfabrikanten kunnen de specificaties van fietsen zonder kennisgeving wijzigen. De compatibiliteit kan veranderen door verschillen in de specificaties van de voorraad.",bikeselector_home_title:"Mijn Fietsenrek",bikeselector_search_bikespec_label:"Fietsspecificaties",bikeselector_search_bikespec_select:"Specificatieniveau selecteren",bikeselector_search_bikespec_select_all:"Alles",bikeselector_search_confirm_btn:"Selectie bevestigen",bikeselector_search_no_bikes_found:"Geen fietsen gevonden",bikeselector_search_number_bikes_found:"{{number_found}} fietsen gevonden",bikeselector_search_one_bike_found:"1 fiets gevonden",bikeselector_search_searching:"Zoeken...",bikeselector_search_title:"Fiets zoeken",bikeselector_search_year_label:"Jaar",bikeselector_size_confirm_btn:"Maat bevestigen",bikeselector_size_framesize_desc:"De framemaat van uw fiets kunt u meestal vinden in de hieronder gemarkeerde gebieden.",bikeselector_size_framesize_label:"Framemaat",bikeselector_size_framesize_one_size:"Eén maat",bikeselector_size_framesize_select:"Selecteer uw framemaat",bikeselector_size_title:"Selecteer de maat",cancel:"Annuleren",category_brakeadapterrear:"Remadapter achter",category_brakecaliperrear:"Remklauw achter",category_brakecaliperfront:"Remklauw voorzijde",category_brakeleverlh:"Remhendel links",category_brakeleverrh:"Remhendel Rechts",category_brakepadsfront:"Remblokken voorzijde",category_brakepadsrear:"Remblokken Achter",category_brakerotorfront:"Remrotor voorzijde",category_brakes:"Remmen",category_chainringspider:"Kettingblad Spider",category_cockpit:"Kuip",category_drivetrain:"Aandrijflijn",category_framefork:"Frame en vork",category_largestchainring:"Grootste kettingblad",category_secondlargestchainring:"Op een na grootste kettingblad",category_shifteradapterlh:"Verstelleradapter links",category_shifteradapterrh:"Versnellingsadapter Rechts",category_shifterbrakecombolh:"Shifter Brake Combinatie Linkerhand",category_shifterbrakecomborh:"Shifter Brake Combinatie Rechterhand",category_shifterlh:"Shifter linkerhand",category_shifterrh:"Shifter rechterhand",category_thirdlargestchainring:"Derde grootste kettingblad",category_tyrefront:"Buitenband voorkant",category_tyrerear:"Buitenband achterkant",category_wheelstyres:"Wielen en banden",category_brakeadapterfront:"Remadapter voorzijde",category_brakerotorrear:"Remrotor achter",compatible:"Compatibel",compatible_check_notes:"Compatibel (zie notities)",compatiblelist_header:"Compatibele producten",compatiblelist_nobikeselected:"Geen fiets geselecteerd. Klik hier om uw fiets toe te voegen voor het opzoeken van compatibele onderdelen",compatiblelist_noresults:"Geen compatibele producten gevonden",compatiblelist_pageone:"Alle producten die compatibel zijn met uw fiets vindt u <a>hier</a>.",compatiblelist_unavailable:"Voor het geselecteerde fietsmerk zijn er in deze categorie binnenkort compatibele producten beschikbaar.",confirm:"Bevestigen",copy:"Kopiëren",edit:"Bewerken",error_add_component:"Dat onderdeel bleef niet zitten. Probeer het nu eens wat harder op de fiets te gooien.",error_add_custom_bike:"Helaas... We kunnen uw aangepaste fiets niet maken. Vernieuw de pagina en probeer het nog een keer.",error_find_products:"Hm... het lijkt erop dat onze wielen vastlopen. Vernieuw de pagina en probeer het opnieuw.",error_find_products_no_results:"Hm... Dat product kunnen we niet vinden. Probeer een ander modelnummer of een andere spelling.",error_generic:"Er is een fout opgetreden bij het eindpunt {{endpoint_location}}",error_get_bike_bom:"Dat valt tegen! We kunnen uw fietsmontage niet ophalen. Vernieuw de pagina en probeer het opnieuw.",error_invalid_email:"Dat ziet er niet uit als een geldig e-mailadres. Kunt u iets anders proberen?",error_remove_component:"Dit onderdeel wil blijkbaar graag op de fiets blijven zitten. Vernieuw de pagina en probeer het opnieuw.",error_revert_component:"Dit onderdeel wil blijkbaar graag op de fiets blijven zitten. Vernieuw de pagina en probeer het opnieuw.",error_save_custom_bike:"Sorry, we hebben uw fiets niet opgeslagen. Probeer nu eens wat harder te trappen.",error_update_custom_bike:"O, dat werkte niet. Sorry! Vernieuw de pagina en probeer het opnieuw.",error_update_custom_bike_name:"Het is niet gelukt om de naam van uw fiets te veranderen. Misschien vindt uw fiets het geen mooie naam. Vernieuw de pagina en probeer het opnieuw",not_compatible:"Niet compatibel",onboarding_explore:"Ga verkennen",onboarding_green_spanner:"Zoek naar de groene moersleutel",onboarding_green_spanner_description:"Als een component een groene moersleutel heeft, kan deze volledig worden verwisseld of uit de constructie worden verwijderd.",onboarding_linked_components:"Begrijp gekoppelde componenten",onboarding_linked_components_description:"Sommige onderdelen (bijvoorbeeld crankstel + trapas) zijn met elkaar verbonden. Als u er één wilt verwisselen, moet u mogelijk beide verwijderen. Anders markeert het systeem deze mogelijk als incompatibel.",onboarding_next:"Volgende",onboarding_open_bike_build:"Open je fietsbuild",onboarding_open_bike_build_description:"Wanneer u uw fietsopbouw bekijkt, vouwt u de componentgroepen uit om de componenten te bekijken die op uw fiets van toepassing zijn.",onboarding_preview:"Bekijk een voorbeeld of sla wijzigingen op",onboarding_preview_description:"U kunt componenten verwisselen/verwijderen en wijzigingen bevestigen om upgrades te verkennen. Deze kunnen op elk moment ongedaan worden gemaakt voordat ze worden opgeslagen. Nadat u de wijzigingen heeft opgeslagen, kunnen ze niet meer worden teruggedraaid, maar alleen worden verwijderd of opnieuw vervangen.",onboarding_replacement:"Kies de juiste vervanging",onboarding_replacement_description:"Gebruik de streepjescode of het onderdeelnummer van de fabrikant (te vinden op de verpakking of uw factuur) om te zoeken. U kunt ook het modelnummer gebruiken, maar controleer dit nogmaals: sommige nummers gelden voor meerdere versies.",onboarding_settings:"Bekijk de instellingenpagina",onboarding_settings_description:"Op uw instellingenpagina kunt u de naam van uw fiets wijzigen, uw e-mailadres bijwerken en waar u zowel uw Bike Matrix ID als uw Share ID kunt vinden.",onboarding_title:"Virtuele workshop – Beknopte handleiding",onboarding_vw_description:"Pas het digitale bestand van uw fiets aan zodat deze overeenkomt met de upgrades die u heeft uitgevoerd, zodat de compatibiliteitscontroles zo nauwkeurig mogelijk zijn.",productcheck_nobikeselected_label:"Compatibiliteit controleren",productcheck_nobikeselected_message:"Voeg uw fiets toe om te controleren of dit onderdeel erop past",productcheck_questionmark:"?",save:"Opslaan",share:"Delen",virtualworkshop_add_bike_text:"Uw Bike Matrix-ID vindt u op de pagina Instellingen van de Virtuele werkplaats.",virtualworkshop_bm_id_text:"U kunt uw Bike Matrix-ID gebruiken (die vindt u in de Instellingen van de Virtuele werkplaats) of een Deel-ID die u van iemand anders heeft gekregen.",virtualworkshop_bom_title:"Stuklijst",virtualworkshop_build_text:"Montagedetails",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"Door gegevens voor een fiets aan te passen, aanvaardt de gebruiker de volledige verantwoordelijkheid om de juiste onderdelen te selecteren, in de wetenschap dat wijzigingen gevolgen hebben voor de compatibiliteit.",virtualworkshop_do_not_pass:"Virtuele Workshop is nog niet voor alle fietsmerken beschikbaar.",virtualworkshop_drivetrain:"Aandrijving",virtualworkshop_e_drive:"Elektrische aandrijving",virtualworkshop_enter_button:"Virtuele werkplaats openen",virtualworkshop_frame_fork:"Frame en voorvork",virtualworkshop_intro_text:"Pas uw fietsmontage aan met nieuwe onderdelen en sla uw fiets op door een e-mailadres in te voeren. Bekijk gedeelde fietsmontages en vindt uw fiets-ID's",virtualworkshop_other_parts:"Andere onderdelen",virtualworkshop_remove_btn:"Onderdeel verwijderen",virtualworkshop_remove_subtitle:"Als u een onderdeel verwijdert, wordt het uit uw fietsmontage gehaald. Dit kan gevolgen hebben voor de compatibiliteit van andere onderdelen.",virtualworkshop_remove_title:"Weet u het zeker?",virtualworkshop_revert_btn:"Terugdraaien",virtualworkshop_save_btn:"Fiets opslaan",virtualworkshop_save_text:"We hebben uw e-mailadres nodig om uw aangepaste fiets op te slaan.",virtualworkshop_save_title:"Voer uw e-mailadres in",virtualworkshop_search_text:"Voer barcode in of zoek op merk, model, onderdeelnummer...",virtualworkshop_settings_bike_name:"Naam fiets",virtualworkshop_settings_email:"E-mailadres",virtualworkshop_settings_id:"Bike Matrix-ID",virtualworkshop_settings_share_id:"Deel-ID",virtualworkshop_shared_icon:"Met u gedeeld",virtualworkshop_swap_btn:"Onderdeel vervangen",virtualworkshop_title:"Virtuele werkplaats",virtualworkshop_unsaved_changes:"Niet-opgeslagen wijzigingen bekijken",virtualworkshop_wheels_tyres:"Wielen en banden",category_bike:"Fiets",category_bottombracket:"Trapas",category_bottombracketpart:"Trapasonderdeel",category_brakeadapter:"Remadapter",category_brakeadapterpart:"Remadapteronderdeel",category_brakecaliper:"Remklauw",category_brakecaliperpart:"Remklauwonderdeel",category_brakecaliperservicekit:"Servicekit remklauw",category_brakelever:"Remhendel",category_brakeleverpart:"Remhendelonderdeel",category_brakeleverservicekit:"Servicekit remhendel",category_brakepads:"Remblokken",category_brakerotor:"Remschijf",category_brakerotorpart:"Remschijfonderdeel",category_brakesystem:"Remsysteem",category_brakesystempart:"Remsysteemonderdeel",category_cassette:"Cassette",category_cassettepart:"Cassetteonderdeel",category_chain:"Ketting",category_chainguide:"Kettinggeleider",category_chainguidepart:"Kettinggeleideronderdeel",category_chainjoiner:"Verbindingsschakel",category_chainring:"Kettingblad",category_chainringbolt:"Kettingbladbout",category_crankpart:"Crankonderdeel",category_crankset:"Crankset",category_dropperlever:"Dropperhendel",category_dropperleverpart:"Dropperhendelonderdeel",category_ebikebattery:"Batterij elektrische fiets",category_ebikebatterypart:"Batterijonderdeel van elektrische fiets",category_ebikecharger:"Oplader elektrische fiets",category_ebikechargerpart:"Opladeronderdeel van elektrische fiets",category_ebikecontrolunit:"Bediening elektrische fiets",category_ebikecontrolunitpart:"Bedieningsonderdeel van elektrische fiets",category_ebikeinterconnect:"Verbinding elektrische fiets",category_ebikeinterconnectpart:"Verbindingsonderdeel van elektrische fiets",category_ebikemotorsystem:"Motor elektrische fiets",category_ebikemotorsystempart:"Motoronderdeel van elektrische fiets",category_fork:"Voorvork",category_forkpart:"Voorvorkonderdeel",category_forkservicekit:"Servicekit voorvork",category_frame:"Frame",category_framepart:"Frameonderdeel",category_frontaxle:"Vooras",category_frontaxlepart:"Voorasonderdeel",category_frontderailleur:"Voorderailleur",category_frontderailleurpart:"Voorderailleuronderdeel",category_fronthub:"Voornaaf",category_fronthubpart:"Voornaafonderdeel",category_frontwheel:"Voorwiel",category_grips:"Handvatten",category_gripspart:"Handvatonderdeel",category_handlebar:"Stuur",category_headset:"Balhoofdstel",category_headsetpart:"Balhoofdonderdeel",category_nipple:"Spaaknippel",category_pedals:"Pedalen",category_pedalspart:"Pedaalonderdeel",category_rearaxle:"Achteras",category_rearaxlepart:"Achterasonderdeel",category_rearderailleur:"Achterderailleur",category_rearderailleurpart:"Achterderailleuronderdeel",category_rearhub:"Achternaaf",category_rearhubpart:"Achternaafonderdeel",category_rearshock:"Schokdemper voor achterwiel",category_rearshockpart:"Schokdemperonderdeel voor achterwiel",category_rearshockservicekit:"Servicekit schokdemper voor achterwiel",category_rearwheel:"Achterwiel",category_rim:"Velg",category_saddle:"Zadel",category_seatpost:"Zadelpen",category_seatpostclamp:"Zadelpenklem",category_seatpostclamppart:"Zadelpenklemonderdeel",category_seatpostpart:"Zadelpenonderdeel",category_seatpostservicekit:"Servicekit zadelpen",category_shiftadapter:"Versnellingsadapter",category_shiftadapterpart:"Versnellingsadapteronderdeel",category_shiftbrakecombo:"Schakel-/remhendel",category_shiftbrakecombopart:"Schakel-/remhendelonderdeel",category_shifter:"Shifter",category_shifterpart:"Shifteronderdeel",category_spoke:"Spaak",category_stem:"Stuurpen",category_stempart:"Stuurpenonderdeel",category_tube:"Binnenband",category_tyre:"Buitenband",category_wheelset:"Wielset",checksku_message_nobikefound:"Kan geen fiets vinden met het opgegeven Fietsnummer",checksku_message_nocompatibilityinfo:"Geen informatie over compatibiliteit",checksku_message_noproductfound:"Kan geen onderdeel vinden met de opgegeven SKU/Barcode/Onderdeelnummer",checksku_message_notcompatible:"Niet compatibel",checksku_warning_unabletoperformcheck:"Kan de compatibiliteitscontrole niet uitvoeren. Controleer de compatibiliteit handmatig."}},"en-GB":{translation:{bikematrix_poweredby:"Powered by Bike Matrix",bikeselector_addbike_brand_desc:"Your bike brand is typically found in the areas highlighted below.",bikeselector_addbike_brand_label:"Brand",bikeselector_addbike_brand_select:"Select your bike brand",bikeselector_addbike_find_btn:"Find my ride",bikeselector_addbike_framespec_desc:"Your bike frame spec is typically found in the areas highlighted below.",bikeselector_addbike_framespec_label:"Frame Spec",bikeselector_addbike_framespec_select:"Select your bike's frame spec",bikeselector_addbike_model_desc:"Your bike model is typically found in the areas highlighted below.",bikeselector_addbike_model_label:"Model",bikeselector_addbike_model_select:"Select your bike model",bikeselector_addbike_title:"Add A Bike",bikeselector_browse_back_btn:"Back to bike Lounge",bikeselector_browse_products_label:"Shop for compatible products",bikeselector_browse_shop_btn:"Shop Products",bikeselector_browse_title:"Start Shopping!",bikeselector_confirm_brandmodelframespec_label:"Brand, Model, Frame Series",bikeselector_confirm_confirm_btn:"Yep, that's my ride!",bikeselector_confirm_framesize_label:"Frame Size",bikeselector_confirm_notyourride_msg:"Not your ride? Select a field above to make a change.",bikeselector_confirm_title:"Confirm Your Ride",bikeselector_confirm_yearbikespec_label:"Year, Bike Spec",bikeselector_home_add_a_bike:"Add a bike below to get started...",bikeselector_home_add_btn:"Add A Bike",bikeselector_home_browse_btn:"Browse Compatiblity",bikeselector_home_close_btn:"Close",bikeselector_home_empty:"Your lounge is empty!",bikeselector_home_footer_message:"Bike manufacturers may change bike specifications without notice. Differences from stock specifications can impact compatibility results.",bikeselector_home_title:"My Bike Lounge",bikeselector_search_bikespec_label:"Bike Spec",bikeselector_search_bikespec_select:"Select spec level",bikeselector_search_bikespec_select_all:"All",bikeselector_search_confirm_btn:"Confirm Selection",bikeselector_search_no_bikes_found:"No bikes found",bikeselector_search_number_bikes_found:"{{number_found}} bikes found",bikeselector_search_one_bike_found:"1 bike found",bikeselector_search_searching:"Searching...",bikeselector_search_title:"Bike Search",bikeselector_search_year_label:"Year",bikeselector_size_confirm_btn:"Confirm Size",bikeselector_size_framesize_desc:"Your bike frame size is typically found in the areas highlighted below.",bikeselector_size_framesize_label:"Frame Size",bikeselector_size_framesize_one_size:"One Size",bikeselector_size_framesize_select:"Select your frame size",bikeselector_size_title:"Select Your Size",cancel:"Cancel",category_brakeadapterrear:"Brake Adapter Rear",category_brakecaliperrear:"Brake Caliper Rear",category_brakecaliperfront:"Brake Caliper Front",category_brakeleverlh:"Brake Lever LH",category_brakeleverrh:"Brake Lever RH",category_brakepadsfront:"Brake Pads Front",category_brakepadsrear:"Brake Pads Rear",category_brakerotorfront:"Brake Rotor Front",category_brakes:"Brakes",category_chainringspider:"Chainring Spider",category_cockpit:"Cockpit",category_drivetrain:"Drivetrain",category_framefork:"Frame & Fork",category_largestchainring:"Largest Chainring",category_secondlargestchainring:"Second Largest Chainring",category_shifteradapterlh:"Shifter Adapter LH",category_shifteradapterrh:"Shifter Adapter RH",category_shifterbrakecombolh:"Shifter Brake Combo LH",category_shifterbrakecomborh:"Shifter Brake Combo RH",category_shifterlh:"Shifter LH",category_shifterrh:"Shifter RH",category_thirdlargestchainring:"Third Largeest Chainring",category_tyrefront:"Tyre Front",category_tyrerear:"Tyre Rear",category_wheelstyres:"Wheels & Tyres",category_brakeadapterfront:"Brake Adapter Front",category_brakerotorrear:"Brake Rotor Rear",compatible:"Compatible",compatible_check_notes:"Compatible - Check Notes",compatiblelist_header:"Compatible Products",compatiblelist_nobikeselected:"No bike selected. Click here to add your ride to check for compatible parts",compatiblelist_noresults:"No compatible products found",compatiblelist_pageone:"All products compatible with your bike can be seen <a>here</a>.",compatiblelist_unavailable:"Compatibility for this product category for your selected bike brand is coming soon!",confirm:"Confirm",copy:"Copy",edit:"Edit",error_add_component:"That component didn't stick. Try again and throw it a little harder this time.",error_add_custom_bike:"Oops... We couldn't create your custom bike. Refresh and give it another try.",error_find_products:"Hmmm… It looks like our wheels aren’t quite spinning. Refresh and try again.",error_find_products_no_results:"Hmmm... We can’t find that product. Try a different model number or adjust your spelling.",error_generic:"There was an error on the endpoint - {{endpoint_location}}",error_get_bike_bom:"That's embarrassing! Your bike build could not be retrieved. Refresh and try again.",error_invalid_email:"It doesn’t look like that’s a valid email, any other options?",error_remove_component:"This component really wants to stay on the bike. Refresh and try again.",error_revert_component:"This component really wants to stay on the bike. Refresh and try again.",error_save_custom_bike:"Our bad, your bike wasn’t saved. Try again and pedal a bit harder this time.",error_update_custom_bike:"Oh, that didn't work. Sorry! Refresh and try again.",error_update_custom_bike_name:"Couldn’t change your bike's name. Maybe it doesn't like that one. Refresh and try again",not_compatible:"Not Compatible",onboarding_explore:"Go Explore",onboarding_green_spanner:"Look for the Green Spanner",onboarding_green_spanner_description:"If a component has a green spanner, it can be swapped or removed from the build completely.",onboarding_linked_components:"Understand Linked Components",onboarding_linked_components_description:"Some parts (e.g. crankset + bottom bracket) are linked. To swap one, you may need to remove both—otherwise, the system may flag it as incompatible.",onboarding_next:"Next",onboarding_open_bike_build:"Open Your Bike Build",onboarding_open_bike_build_description:"When viewing your bike build expand the component groups to view the components that apply to your bike.",onboarding_preview:"Preview or Save Changes",onboarding_preview_description:"You can swap/remove components and confirm changes to explore upgrades. These can be undone anytime before saving. Once you save, changes can’t be reverted—only removed or replaced again.",onboarding_replacement:"Choose the Right Replacement",onboarding_replacement_description:"Use the barcode or manufacturer’s part number (found on packaging or your invoice) to search. You can also use the model number, but double-check—some numbers apply to multiple versions.",onboarding_settings:"View Settings Page",onboarding_settings_description:"Your settings page is where you can change the name of your bike, update your email, and where you'll find your Bike Matrix ID as well as your Share ID.",onboarding_title:"Virtual Workshop – Quick Guide",onboarding_vw_description:"Modify the digital record of your bike to match upgrades you’ve made, ensuring compatibility checks are as accurate as possible.",productcheck_nobikeselected_label:"Check Compatiblity",productcheck_nobikeselected_message:"Add your ride to check if this part fits",productcheck_questionmark:"?",save:"Save",share:"Share",virtualworkshop_add_bike_text:"Your Bike Matrix ID can be found in the Settings page inside the Virtual Workshop",virtualworkshop_bm_id_text:"You can use either the Bike Matrix ID—found in the settings section of the Virtual Workshop—or Share ID which has been shared with you by someone else.",virtualworkshop_bom_title:"Bill Of Materials",virtualworkshop_build_text:"Build details",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"When updating their bike record, the user takes full responsibility for ensuring components are correct, understanding that changes will affect compatibility results.",virtualworkshop_do_not_pass:"Virtual Workshop is not yet available for all Bike Brands.",virtualworkshop_drivetrain:"Drivetrain",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Enter Virtual Workshop",virtualworkshop_frame_fork:"Frame & Fork",virtualworkshop_intro_text:"Update your bike build with new components and save your bike by providing an email address. View shared bike builds and access your bike IDs",virtualworkshop_other_parts:"Other Parts",virtualworkshop_remove_btn:"Remove Component",virtualworkshop_remove_subtitle:"Removing a component will delete it from your bike build. This can affect compatibility for other parts.",virtualworkshop_remove_title:"Are you sure?",virtualworkshop_revert_btn:"Revert",virtualworkshop_save_btn:"Save Bike",virtualworkshop_save_text:"In order to store your custom bike we need to save it against your email address",virtualworkshop_save_title:"Enter your email",virtualworkshop_search_text:"Enter Barcode or Search by Brand, Model, Part Number...",virtualworkshop_settings_bike_name:"Bike Name",virtualworkshop_settings_email:"Email",virtualworkshop_settings_id:"Bike Matrix ID",virtualworkshop_settings_share_id:"Share ID",virtualworkshop_shared_icon:"Shared with you",virtualworkshop_swap_btn:"Swap Component",virtualworkshop_title:"Virtual Workshop",virtualworkshop_unsaved_changes:"View unsaved changes",virtualworkshop_wheels_tyres:"Wheels & Tyres",category_bike:"Bike",category_bottombracket:"Bottom Bracket",category_bottombracketpart:"Bottom Bracket Part",category_brakeadapter:"Brake Adapter",category_brakeadapterpart:"Brake Adapter Part",category_brakecaliper:"Brake Caliper",category_brakecaliperpart:"Brake Caliper Part",category_brakecaliperservicekit:"Brake Caliper Service Kit",category_brakelever:"Brake Lever",category_brakeleverpart:"Brake Lever Part",category_brakeleverservicekit:"Brake Lever Service Kit",category_brakepads:"Brake Pads",category_brakerotor:"Brake Rotor",category_brakerotorpart:"Brake Rotor Part",category_brakesystem:"Brake System",category_brakesystempart:"Brake System Part",category_cassette:"Cassette",category_cassettepart:"Cassette Part",category_chain:"Chain",category_chainguide:"Chainguide",category_chainguidepart:"Chainguide Part",category_chainjoiner:"Chain Joiner",category_chainring:"Chainring",category_chainringbolt:"Chainring Bolt",category_crankpart:"Crank Part",category_crankset:"Crankset",category_dropperlever:"Dropper Lever",category_dropperleverpart:"Dropper Lever Part",category_ebikebattery:"eBike Battery",category_ebikebatterypart:"eBike Battery Part",category_ebikecharger:"eBike Charger",category_ebikechargerpart:"eBike Charger Part",category_ebikecontrolunit:"eBike Control Unit",category_ebikecontrolunitpart:"eBike Control Unit Part",category_ebikeinterconnect:"eBike Interconnect",category_ebikeinterconnectpart:"eBike Interconnect Part",category_ebikemotorsystem:"eBike Motor System",category_ebikemotorsystempart:"eBike Motor System Part",category_fork:"Fork",category_forkpart:"Fork Part",category_forkservicekit:"Fork Service Kit",category_frame:"Frame",category_framepart:"Frame Part",category_frontaxle:"Front Axle",category_frontaxlepart:"Front Axle Part",category_frontderailleur:"Front Derailleur",category_frontderailleurpart:"Front Derailleur Part",category_fronthub:"Front Hub",category_fronthubpart:"Front Hub Part",category_frontwheel:"Front Wheel",category_grips:"Grips",category_gripspart:"Grips Part",category_handlebar:"Handlebar",category_headset:"Headset",category_headsetpart:"Headset Part",category_nipple:"Nipple",category_pedals:"Pedals",category_pedalspart:"Pedals Part",category_rearaxle:"Rear Axle",category_rearaxlepart:"Rear Axle Part",category_rearderailleur:"Rear Derailleur",category_rearderailleurpart:"Rear Derailleur Part",category_rearhub:"Rear Hub",category_rearhubpart:"Rear Hub Part",category_rearshock:"Rear Shock",category_rearshockpart:"Rear Shock Part",category_rearshockservicekit:"Rear Shock Service Kit",category_rearwheel:"Rear Wheel",category_rim:"Rim",category_saddle:"Saddle",category_seatpost:"Seat Post",category_seatpostclamp:"Seat Post Clamp",category_seatpostclamppart:"Seat Post Clamp Part",category_seatpostpart:"Seat Post Part",category_seatpostservicekit:"Seat Post Service Kit",category_shiftadapter:"Shift Adapter",category_shiftadapterpart:"Shift Adapter Part",category_shiftbrakecombo:"Shift Brake Combo",category_shiftbrakecombopart:"Shift Brake Combo Part",category_shifter:"Shifter",category_shifterpart:"Shifter Part",category_spoke:"Spoke",category_stem:"Stem",category_stempart:"Stem Part",category_tube:"Tube",category_tyre:"Tyre",category_wheelset:"Wheelset",checksku_message_nobikefound:"Could not find a bike with the provided Bike Key",checksku_message_nocompatibilityinfo:"No Compatibility Information",checksku_message_noproductfound:"Could not find a part with the provided SKU/Barcode/Part No",checksku_message_notcompatible:"Not Compatible",checksku_warning_unabletoperformcheck:"Unable to perform compatibility check. Please check the compatibility manually."}},fr:{translation:{bikematrix_poweredby:"Une solution Bike Matrix",bikeselector_addbike_brand_desc:"Votre marque de vélo se trouve généralement dans les zones mises en évidence ci-dessous.",bikeselector_addbike_brand_label:"Marque",bikeselector_addbike_brand_select:"Sélectionnez la marque de votre vélo",bikeselector_addbike_find_btn:"Trouver mon vélo",bikeselector_addbike_framespec_desc:"Votre version de cadre de vélo se trouve généralement dans les zones mises en évidence ci-dessous.",bikeselector_addbike_framespec_label:"Version du cadre",bikeselector_addbike_framespec_select:"Sélectionnez votre version de cadre",bikeselector_addbike_model_desc:"Votre modèle de vélo se trouve généralement dans les zones mises en évidence ci-dessous.",bikeselector_addbike_model_label:"Modèle",bikeselector_addbike_model_select:"Sélectionnez votre modèle de vélo",bikeselector_addbike_title:"Ajouter un vélo",bikeselector_browse_back_btn:"Retourner à mes vélos",bikeselector_browse_products_label:"Voir les produits compatibles",bikeselector_browse_shop_btn:"Voir les produits",bikeselector_browse_title:"Commencer vos achats",bikeselector_confirm_brandmodelframespec_label:"Marque, modèle, version du cadre",bikeselector_confirm_confirm_btn:"Oui, c’est mon vélo !",bikeselector_confirm_framesize_label:"Taille du cadre",bikeselector_confirm_notyourride_msg:"Ce n’est pas votre vélo ? Sélectionnez un champ ci-dessus pour effectuer une modification.",bikeselector_confirm_title:"Confirmer votre vélo",bikeselector_confirm_yearbikespec_label:"Année, version du vélo",bikeselector_home_add_a_bike:"Ajoutez un vélo ci-dessous pour démarrer...",bikeselector_home_add_btn:"Ajouter un vélo",bikeselector_home_browse_btn:"Parcourir les compatibilités",bikeselector_home_close_btn:"Fermer",bikeselector_home_empty:"L’espace Mes vélos est vide !",bikeselector_home_footer_message:"Les fabricants de vélo peuvent changer les caractéristiques des vélos sans préavis. Les différences par rapport aux spécifications d’origine peuvent avoir un impact sur les résultats de compatibilité.",bikeselector_home_title:"Mes vélos",bikeselector_search_bikespec_label:"Version du vélo",bikeselector_search_bikespec_select:"Sélectionnez la version du vélo",bikeselector_search_bikespec_select_all:"Tous",bikeselector_search_confirm_btn:"Confirmer la sélection",bikeselector_search_no_bikes_found:"Nous n’avons pas trouvé de vélo",bikeselector_search_number_bikes_found:"{{number_found}} vélos trouvés",bikeselector_search_one_bike_found:"1 vélo trouvé",bikeselector_search_searching:"Recherche...",bikeselector_search_title:"Recherche du vélo",bikeselector_search_year_label:"Année",bikeselector_size_confirm_btn:"Confirmer la taille",bikeselector_size_framesize_desc:"La taille de votre cadre se trouve généralement dans les zones mises en évidence ci-dessous.",bikeselector_size_framesize_label:"Taille du cadre",bikeselector_size_framesize_one_size:"Taille unique",bikeselector_size_framesize_select:"Sélectionnez votre taille de cadre",bikeselector_size_title:"Sélectionnez votre taille",cancel:"Annuler",category_brakeadapterrear:"Adaptateur de frein arrière",category_brakecaliperrear:"Étrier De Frein Arrière",category_brakecaliperfront:"Etrier De Frein Avant",category_brakeleverlh:"Levier De Frein Main Gauche",category_brakeleverrh:"Levier De Frein Main Droite",category_brakepadsfront:"Plaquettes De Frein Avant",category_brakepadsrear:"Plaquettes De Frein Arrière",category_brakerotorfront:"Disque De Frein Avant",category_brakes:"Freins",category_chainringspider:"Étoile de Plateau",category_cockpit:"Poste de pilotage",category_drivetrain:"Transmission",category_framefork:"Cadre et Fourche",category_largestchainring:"Plus Grand Plateau",category_secondlargestchainring:"Deuxième Plus Grand Plateau",category_shifteradapterlh:"Adaptateur de levier de vitesse, main gauche",category_shifteradapterrh:"Adaptateur de levier de vitesse, main droite",category_shifterbrakecombolh:"Manette De Vitesse Et Frein Combo Main Gauche",category_shifterbrakecomborh:"Combo frein de levier de vitesse, main droite",category_shifterlh:"Manette De Vitesse Gauche",category_shifterrh:"Manette De Vitesse Main Droite",category_thirdlargestchainring:"Troisième Plus Grand Plateau",category_tyrefront:"Pneu Avant",category_tyrerear:"Pneu arrière",category_wheelstyres:"Roues et pneus",category_brakeadapterfront:"Adaptateur De Frein Avant",category_brakerotorrear:"Disque De Frein Arrière",compatible:"Compatible",compatible_check_notes:"Compatible - Consultez les notes",compatiblelist_header:"Produits compatibles",compatiblelist_nobikeselected:"Aucun vélo sélectionné. Cliquez ici pour ajouter votre vélo et voir les composants compatibles",compatiblelist_noresults:"Nous n’avons pas trouvé de produits compatibles",compatiblelist_pageone:"Tous les produits compatibles avec votre vélo peuvent être consultés <a>ici</a>.",compatiblelist_unavailable:"Nous proposerons bientôt des pièces compatibles de cette catégorie de produits pour la marque de vélo que vous avez sélectionnée.",confirm:"Confirmer",copy:"Copier",edit:"Modifier",error_add_component:"Cette pièce n’a pas pu être ajoutée. Essayez à nouveau, cette fois-ci sera la bonne.",error_add_custom_bike:"Oups... Nous n’avons pas pu créer votre vélo personnalisé. Actualisez la page et réessayez.",error_find_products:"Hum... Nous avons du mal à monter la côte... Actualisez la page et réessayez.",error_find_products_no_results:"Hum... Nous ne trouvons pas ce produit. Essayez un autre numéro de modèle ou épelez différemment.",error_generic:"Une erreur s’est produite dans le sprint final - {{endpoint_location}}",error_get_bike_bom:"C’est embarrassant ! Votre configuration de vélo n’a pas pu être récupérée. Actualisez la page et réessayez.",error_invalid_email:"Cet e-mail n’a pas l’air valide. Avez-vous une autre option ?",error_remove_component:"Cette pièce veut vraiment rester sur votre vélo. Actualisez la page et réessayez.",error_revert_component:"Cette pièce veut vraiment rester sur votre vélo. Actualisez la page et réessayez.",error_save_custom_bike:"Désolés, votre vélo n’a pas été enregistré. Essayez à nouveau, en pédalant plus vite cette fois.",error_update_custom_bike:"Oh, cela n’a pas marché. Désolés ! Actualisez la page et réessayez.",error_update_custom_bike_name:"Nous n’avons pas pu changer le nom de votre vélo. Peut-être qu’il en préfère un autre. Actualisez la page et réessayez",not_compatible:"Non compatible",onboarding_explore:"Allez explorer",onboarding_green_spanner:"Recherchez l'icône d'outil verte",onboarding_green_spanner_description:"Si un composant a un outil vert, il peut être échangé ou supprimé complètement de la construction",onboarding_linked_components:"Comprendre les composants liés",onboarding_linked_components_description:"Certaines pièces (ex : pédalier + pédalier) sont liées. Pour en échanger un, vous devrez peut-être supprimer les deux, sinon le système pourrait le signaler comme incompatible.",onboarding_next:"Suivante",onboarding_open_bike_build:"Ouvrez votre construction de vélo",onboarding_open_bike_build_description:"Lorsque vous visualisez la construction de votre vélo, développez les groupes de composants pour afficher les composants qui s'appliquent à votre vélo.",onboarding_preview:"Prévisualiser ou enregistrer les modifications",onboarding_preview_description:"Vous pouvez échanger/supprimer des composants et confirmer les modifications pour explorer les mises à niveau. Ceux-ci peuvent être annulés à tout moment avant d’enregistrer. Une fois enregistrées, les modifications ne peuvent pas être annulées : elles sont uniquement supprimées ou remplacées à nouveau.",onboarding_replacement:"Choisissez le bon remplacement",onboarding_replacement_description:"Utilisez le code-barres ou le numéro de pièce du fabricant (trouvé sur l’emballage ou sur votre facture) pour effectuer une recherche. Vous pouvez également utiliser le numéro de modèle, mais vérifiez bien : certains numéros s'appliquent à plusieurs versions.",onboarding_settings:"Afficher la page des paramètres",onboarding_settings_description:"Votre page de paramètres est l’endroit où vous pouvez modifier le nom de votre vélo, mettre à jour votre adresse e-mail, et où vous trouverez votre identifiant Bike Matrix ainsi que votre identifiant de partage.",onboarding_title:"Atelier virtuel – Guide rapide",onboarding_vw_description:"Mettez à jour les informations numériques de votre vélo pour refléter les changements apportés et garantir des vérifications de compatibilité aussi précises que possible.",productcheck_nobikeselected_label:"Vérifier la compatibilité",productcheck_nobikeselected_message:"Ajoutez votre vélo pour vérifier si ce composant est compatible",productcheck_questionmark:"?",save:"Enregistrer",share:"Partager",virtualworkshop_add_bike_text:"Votre identificateur Bike Matrix peut être trouvé dans la page de configuration de votre Atelier virtuel",virtualworkshop_bm_id_text:"Vous pouvez utiliser l’identificateur Bike Matrix qui se trouve dans la page de configuration de votre Atelier virtuel, ou un identificateur de partage qui vous a été donné par quelqu’un d’autre.",virtualworkshop_bom_title:"Liste des pièces",virtualworkshop_build_text:"Détails de configuration",virtualworkshop_cockpit:"Poste de pilotage",virtualworkshop_disclaimer:"Lors de l’actualisation de la configuration de son vélo, la personne utilisatrice doit s’assurer que les composants sont corrects, sachant que les modifications affecteront les résultats de compatibilité.",virtualworkshop_do_not_pass:"Der virtuelle Workshop ist noch nicht für alle Fahrradmarken verfügbar.",virtualworkshop_drivetrain:"Groupe de transmission",virtualworkshop_e_drive:"Transmission électrique",virtualworkshop_enter_button:"Entrer dans l’Atelier virtuel",virtualworkshop_frame_fork:"Cadre et fourche",virtualworkshop_intro_text:"Actualisez votre configuration de vélo avec de nouveaux composants et enregistrez votre vélo en fournissant une adresse e-mail. Voir les configurations de vélo partagées et accéder aux identificateurs de vos vélos",virtualworkshop_other_parts:"Autres pièces",virtualworkshop_remove_btn:"Retirer le composant",virtualworkshop_remove_subtitle:"Retirer un composant le supprimera de la configuration de votre vélo. Cela peut affecter la compatibilité avec d’autres pièces.",virtualworkshop_remove_title:"Êtes-vous sûr·e ?",virtualworkshop_revert_btn:"Rétablir",virtualworkshop_save_btn:"Sauvegarder le vélo",virtualworkshop_save_text:"Afin de sauvegarder votre vélo personnalisé, nous devons l’enregistrer avec votre adresse e-mail",virtualworkshop_save_title:"Saisir votre e-mail",virtualworkshop_search_text:"Saisir un code-barre ou chercher par marque, modèle, numéro de pièce...",virtualworkshop_settings_bike_name:"Nom du vélo",virtualworkshop_settings_email:"Adresse e-mail",virtualworkshop_settings_id:"Identificateur Bike Matrix",virtualworkshop_settings_share_id:"Identificateur de partage",virtualworkshop_shared_icon:"Partagé avec vous",virtualworkshop_swap_btn:"Échanger le composant",virtualworkshop_title:"Atelier virtuel",virtualworkshop_unsaved_changes:"Voir les changements non sauvegardés",virtualworkshop_wheels_tyres:"Roues et pneus",category_bike:"Vélo",category_bottombracket:"Boîtier de pédalier",category_bottombracketpart:"Pièce de boîtier de pédalier",category_brakeadapter:"Adaptateur pour frein",category_brakeadapterpart:"Pièce d’adaptateur pour frein",category_brakecaliper:"Étrier de frein",category_brakecaliperpart:"Pièce d’étrier de frein",category_brakecaliperservicekit:"Kit d’entretien d’étrier de frein",category_brakelever:"Levier de frein",category_brakeleverpart:"Pièce de levier de frein",category_brakeleverservicekit:"Kit d’entretien de levier de frein",category_brakepads:"Patins/plaquettes de frein",category_brakerotor:"Disque de frein",category_brakerotorpart:"Pièce de disque de frein",category_brakesystem:"Système de freinage",category_brakesystempart:"Pièce de système de freinage",category_cassette:"Cassette",category_cassettepart:"Pièce de cassette",category_chain:"Chaîne",category_chainguide:"Guide-chaîne",category_chainguidepart:"Pièce de guide-chaîne",category_chainjoiner:"Attache rapide",category_chainring:"Plateau",category_chainringbolt:"Écrou de plateau",category_crankpart:"Pièce de pédalier",category_crankset:"Pédalier",category_dropperlever:"Levier de tige de selle télescopique",category_dropperleverpart:"Pièce de levier de tige de selle télescopique",category_ebikebattery:"Batterie ebike",category_ebikebatterypart:"Pièce batterie ebike",category_ebikecharger:"Chargeur ebike",category_ebikechargerpart:"Pièce de chargeur ebike",category_ebikecontrolunit:"Commande de contrôle ebike",category_ebikecontrolunitpart:"Pièce de commande de contrôle ebike",category_ebikeinterconnect:"Câbles de connexion ebike",category_ebikeinterconnectpart:"Pièce de câbles connexion ebike",category_ebikemotorsystem:"Système moteur ebike",category_ebikemotorsystempart:"Pièce système moteur ebike",category_fork:"Fourche",category_forkpart:"Pièce de fourche",category_forkservicekit:"Kit d’entretien de fourche",category_frame:"Cadre",category_framepart:"Pièce de cadre",category_frontaxle:"Axe avant",category_frontaxlepart:"Pièce d’axe avant",category_frontderailleur:"Dérailleur avant",category_frontderailleurpart:"Pièce de dérailleur avant",category_fronthub:"Moyeu avant",category_fronthubpart:"Pièce de moyeu avant",category_frontwheel:"Roue avant",category_grips:"Poignées",category_gripspart:"Pièce de poignées",category_handlebar:"Guidon",category_headset:"Jeu de direction",category_headsetpart:"Pièce de jeu de direction",category_nipple:"Écrou de rayon",category_pedals:"Pédales",category_pedalspart:"Pièce de pédales",category_rearaxle:"Axe arrière",category_rearaxlepart:"Pièce d’axe arrière",category_rearderailleur:"Dérailleur arrière",category_rearderailleurpart:"Pièce de dérailleur arrière",category_rearhub:"Moyeu arrière",category_rearhubpart:"Pièce de moyeu arrière",category_rearshock:"Amortisseur arrière",category_rearshockpart:"Pièce d’amortisseur arrière",category_rearshockservicekit:"Kit d’entretien pour amortisseur arrière",category_rearwheel:"Roue arrière",category_rim:"Jante",category_saddle:"Selle",category_seatpost:"Tige de selle",category_seatpostclamp:"Collier de serrage pour tige de selle",category_seatpostclamppart:"Pièce de collier de serrage pour tige de selle",category_seatpostpart:"Pièce de tige de selle",category_seatpostservicekit:"Kit d’entretien de tige de selle",category_shiftadapter:"Adaptateur de commande de vitesse",category_shiftadapterpart:"Pièce d’adaptateur de commande de vitesse",category_shiftbrakecombo:"Combo levier manette",category_shiftbrakecombopart:"Pièce de combo levier manette",category_shifter:"Commande de vitesse",category_shifterpart:"Pièce de commande de vitesse",category_spoke:"Rayon",category_stem:"Potence",category_stempart:"Pièce de potence",category_tube:"Chambre à air",category_tyre:"Pneu",category_wheelset:"Paire de roues",checksku_message_nobikefound:"Nous n’avons pas pu trouver de vélo avec le Code Vélo fourni",checksku_message_nocompatibilityinfo:"Pas d’information concernant la compatibilité",checksku_message_noproductfound:"Nous n’avons pas pu trouver de composant avec le code produit/code-barre/numéro de composant fourni",checksku_message_notcompatible:"Non compatible",checksku_warning_unabletoperformcheck:"Impossible de vérifier la compatibilité. Veuillez vérifier la compatibilité manuellement."}},"en-US":{translation:{bikematrix_poweredby:"Powered by Bike Matrix",bikeselector_addbike_brand_desc:"Your bike brand is typically found in the areas highlighted below.",bikeselector_addbike_brand_label:"Brand",bikeselector_addbike_brand_select:"Select your bike brand",bikeselector_addbike_find_btn:"Find my ride",bikeselector_addbike_framespec_desc:"Your bike frame spec is typically found in the areas highlighted below.",bikeselector_addbike_framespec_label:"Frame Spec",bikeselector_addbike_framespec_select:"Select your bike's frame spec",bikeselector_addbike_model_desc:"Your bike model is typically found in the areas highlighted below.",bikeselector_addbike_model_label:"Model",bikeselector_addbike_model_select:"Select your bike model",bikeselector_addbike_title:"Add A Bike",bikeselector_browse_back_btn:"Back to bike Lounge",bikeselector_browse_products_label:"Shop for compatible products",bikeselector_browse_shop_btn:"Shop Products",bikeselector_browse_title:"Start Shopping!",bikeselector_confirm_brandmodelframespec_label:"Brand, Model, Frame Series",bikeselector_confirm_confirm_btn:"Yep, that's my ride!",bikeselector_confirm_framesize_label:"Frame Size",bikeselector_confirm_notyourride_msg:"Not your ride? Select a field above to make a change.",bikeselector_confirm_title:"Confirm Your Ride",bikeselector_confirm_yearbikespec_label:"Year, Bike Spec",bikeselector_home_add_a_bike:"Add a bike below to get started...",bikeselector_home_add_btn:"Add A Bike",bikeselector_home_browse_btn:"Browse Compatiblity",bikeselector_home_close_btn:"Close",bikeselector_home_empty:"Your lounge is empty!",bikeselector_home_footer_message:"Bike manufacturers may change bike specifications without notice. Differences from stock specifications can impact compatibility results.",bikeselector_home_title:"My Bike Lounge",bikeselector_search_bikespec_label:"Bike Spec",bikeselector_search_bikespec_select:"Select spec level",bikeselector_search_bikespec_select_all:"All",bikeselector_search_confirm_btn:"Confirm Selection",bikeselector_search_no_bikes_found:"No bikes found",bikeselector_search_number_bikes_found:"{{number_found}} bikes found",bikeselector_search_one_bike_found:"1 bike found",bikeselector_search_searching:"Searching...",bikeselector_search_title:"Bike Search",bikeselector_search_year_label:"Year",bikeselector_size_confirm_btn:"Confirm Size",bikeselector_size_framesize_desc:"Your bike frame size is typically found in the areas highlighted below.",bikeselector_size_framesize_label:"Frame Size",bikeselector_size_framesize_one_size:"One Size",bikeselector_size_framesize_select:"Select your frame size",bikeselector_size_title:"Select Your Size",cancel:"Cancel",category_brakeadapterrear:"Brake Adapter Rear",category_brakecaliperrear:"Brake Caliper Rear",category_brakecaliperfront:"Brake Caliper Front",category_brakeleverlh:"Brake Lever LH",category_brakeleverrh:"Brake Lever RH",category_brakepadsfront:"Brake Pads Front",category_brakepadsrear:"Brake Pads Rear",category_brakerotorfront:"Brake Rotor Front",category_brakes:"Brakes",category_chainringspider:"Chainring Spider",category_cockpit:"Cockpit",category_drivetrain:"Drivetrain",category_framefork:"Frame & Fork",category_largestchainring:"Largest Chainring",category_secondlargestchainring:"Second Largest Chainring",category_shifteradapterlh:"Shifter Adapter LH",category_shifteradapterrh:"Shifter Adapter RH",category_shifterbrakecombolh:"Shifter Brake Combo LH",category_shifterbrakecomborh:"Shifter Brake Combo RH",category_shifterlh:"Shifter LH",category_shifterrh:"Shifter RH",category_thirdlargestchainring:"Third Largeest Chainring",category_tyrefront:"Tyre Front",category_tyrerear:"Tyre Rear",category_wheelstyres:"Wheels & Tires",category_brakeadapterfront:"Brake Adapter Front",category_brakerotorrear:"Brake Rotor Rear",compatible:"Compatible",compatible_check_notes:"Compatible - Check Notes",compatiblelist_header:"Compatible Products",compatiblelist_nobikeselected:"No bike selected. Click here to add your ride to check for compatible parts",compatiblelist_noresults:"No compatible products found",compatiblelist_pageone:"All products compatible with your bike can be seen <a>here</a>.",compatiblelist_unavailable:"Compatibility for this product category for your selected bike brand is coming soon!",confirm:"Confirm",copy:"Copy",edit:"Edit",error_add_component:"That component didn't stick. Try again and throw it a little harder this time.",error_add_custom_bike:"Oops... We couldn't create your custom bike. Refresh and give it another try.",error_find_products:"Hmmm… It looks like our wheels aren’t quite spinning. Refresh and try again.",error_find_products_no_results:"Hmmm... We can’t find that product. Try a different model number or adjust your spelling.",error_generic:"There was an error on the endpoint - {{endpoint_location}}",error_get_bike_bom:"That's embarrassing! Your bike build could not be retrieved. Refresh and try again.",error_invalid_email:"It doesn’t look like that’s a valid email, any other options?",error_remove_component:"This component really wants to stay on the bike. Refresh and try again.",error_revert_component:"This component really wants to stay on the bike. Refresh and try again.",error_save_custom_bike:"Our bad, your bike wasn’t saved. Try again and pedal a bit harder this time.",error_update_custom_bike:"Oh, that didn't work. Sorry! Refresh and try again.",error_update_custom_bike_name:"Couldn’t change your bike's name. Maybe it doesn't like that one. Refresh and try again",not_compatible:"Not Compatible",onboarding_explore:"Go Explore",onboarding_green_spanner:"Look for the Green Spanner ",onboarding_green_spanner_description:"If a component has a green spanner, it can be swapped or removed from the build completely.",onboarding_linked_components:"Understand Linked Components",onboarding_linked_components_description:"Some parts (e.g. crankset + bottom bracket) are linked. To swap one, you may need to remove both—otherwise, the system may flag it as incompatible.",onboarding_next:"Next",onboarding_open_bike_build:"Open Your Bike Build",onboarding_open_bike_build_description:"When viewing your bike build expand the component groups to view the components that apply to your bike.",onboarding_preview:"Preview or Save Changes",onboarding_preview_description:"You can swap/remove components and confirm changes to explore upgrades. These can be undone anytime before saving. Once you save, changes can’t be reverted—only removed or replaced again.",onboarding_replacement:"Choose the Right Replacement",onboarding_replacement_description:"Use the barcode or manufacturer’s part number (found on packaging or your invoice) to search. You can also use the model number, but double-check—some numbers apply to multiple versions.",onboarding_settings:"View Settings Page",onboarding_settings_description:"Your settings page is where you can change the name of your bike, update your email, and where you'll find your Bike Matrix ID as well as your Share ID.",onboarding_title:"Virtual Workshop – Quick Guide",onboarding_vw_description:"Modify the digital record of your bike to match upgrades you’ve made, ensuring compatibility checks are as accurate as possible.",productcheck_nobikeselected_label:"Check Compatiblity",productcheck_nobikeselected_message:"Add your ride to check if this part fits",productcheck_questionmark:"?",save:"Save",share:"Share",virtualworkshop_add_bike_text:"Your Bike Matrix ID can be found in the Settings page inside the Virtual Workshop",virtualworkshop_bm_id_text:"You can use either the Bike Matrix ID—found in the settings section of the Virtual Workshop—or Share ID which has been shared with you by someone else.",virtualworkshop_bom_title:"Bill Of Materials",virtualworkshop_build_text:"Build details",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"When updating their bike record, the user takes full responsibility for ensuring components are correct, understanding that changes will affect compatibility results.",virtualworkshop_do_not_pass:"Virtual Workshop is not yet available for all Bike Brands.",virtualworkshop_drivetrain:"Drivetrain",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Enter Virtual Workshop",virtualworkshop_frame_fork:"Frame & Fork",virtualworkshop_intro_text:"Update your bike build with new components and save your bike by providing an email address. View shared bike builds and access your bike IDs",virtualworkshop_other_parts:"Other Parts",virtualworkshop_remove_btn:"Remove Component",virtualworkshop_remove_subtitle:"Removing a component will delete it from your bike build. This can affect compatibility for other parts.",virtualworkshop_remove_title:"Are you sure?",virtualworkshop_revert_btn:"Revert",virtualworkshop_save_btn:"Save Bike",virtualworkshop_save_text:"In order to store your custom bike we need to save it against your email address",virtualworkshop_save_title:"Enter your email",virtualworkshop_search_text:"Enter Barcode or Search by Brand, Model, Part Number...",virtualworkshop_settings_bike_name:"Bike Name",virtualworkshop_settings_email:"Email",virtualworkshop_settings_id:"Bike Matrix ID",virtualworkshop_settings_share_id:"Share ID",virtualworkshop_shared_icon:"Shared with you",virtualworkshop_swap_btn:"Swap Component",virtualworkshop_title:"Virtual Workshop",virtualworkshop_unsaved_changes:"View unsaved changes",virtualworkshop_wheels_tyres:"Wheels & Tyres",category_bike:"Bike",category_bottombracket:"Bottom Bracket",category_bottombracketpart:"Bottom Bracket Part",category_brakeadapter:"Brake Adapter",category_brakeadapterpart:"Brake Adapter Part",category_brakecaliper:"Brake Caliper",category_brakecaliperpart:"Brake Caliper Part",category_brakecaliperservicekit:"Brake Caliper Service Kit",category_brakelever:"Brake Lever",category_brakeleverpart:"Brake Lever Part",category_brakeleverservicekit:"Brake Lever Service Kit",category_brakepads:"Brake Pads",category_brakerotor:"Brake Rotor",category_brakerotorpart:"Brake Rotor Part",category_brakesystem:"Brake System",category_brakesystempart:"Brake System Part",category_cassette:"Cassette",category_cassettepart:"Cassette Part",category_chain:"Chain",category_chainguide:"Chainguide",category_chainguidepart:"Chainguide Part",category_chainjoiner:"Chain Joiner",category_chainring:"Chainring",category_chainringbolt:"Chainring Bolt",category_crankpart:"Crank Part",category_crankset:"Crankset",category_dropperlever:"Dropper Lever",category_dropperleverpart:"Dropper Lever Part",category_ebikebattery:"eBike Battery",category_ebikebatterypart:"eBike Battery Part",category_ebikecharger:"eBike Charger",category_ebikechargerpart:"eBike Charger Part",category_ebikecontrolunit:"eBike Control Unit",category_ebikecontrolunitpart:"eBike Control Unit Part",category_ebikeinterconnect:"eBike Interconnect",category_ebikeinterconnectpart:"eBike Interconnect Part",category_ebikemotorsystem:"eBike Motor System",category_ebikemotorsystempart:"eBike Motor System Part",category_fork:"Fork",category_forkpart:"Fork Part",category_forkservicekit:"Fork Service Kit",category_frame:"Frame",category_framepart:"Frame Part",category_frontaxle:"Front Axle",category_frontaxlepart:"Front Axle Part",category_frontderailleur:"Front Derailleur",category_frontderailleurpart:"Front Derailleur Part",category_fronthub:"Front Hub",category_fronthubpart:"Front Hub Part",category_frontwheel:"Front Wheel",category_grips:"Grips",category_gripspart:"Grips Part",category_handlebar:"Handlebar",category_headset:"Headset",category_headsetpart:"Headset Part",category_nipple:"Nipple",category_pedals:"Pedals",category_pedalspart:"Pedals Part",category_rearaxle:"Rear Axle",category_rearaxlepart:"Rear Axle Part",category_rearderailleur:"Rear Derailleur",category_rearderailleurpart:"Rear Derailleur Part",category_rearhub:"Rear Hub",category_rearhubpart:"Rear Hub Part",category_rearshock:"Rear Shock",category_rearshockpart:"Rear Shock Part",category_rearshockservicekit:"Rear Shock Service Kit",category_rearwheel:"Rear Wheel",category_rim:"Rim",category_saddle:"Saddle",category_seatpost:"Seat Post",category_seatpostclamp:"Seat Post Clamp",category_seatpostclamppart:"Seat Post Clamp Part",category_seatpostpart:"Seat Post Part",category_seatpostservicekit:"Seat Post Service Kit",category_shiftadapter:"Shift Adapter",category_shiftadapterpart:"Shift Adapter Part",category_shiftbrakecombo:"Shift Brake Combo",category_shiftbrakecombopart:"Shift Brake Combo Part",category_shifter:"Shifter",category_shifterpart:"Shifter Part",category_spoke:"Spoke",category_stem:"Stem",category_stempart:"Stem Part",category_tube:"Tube",category_tyre:"Tire",category_wheelset:"Wheelset",checksku_message_nobikefound:"Could not find a bike with the provided Bike Key",checksku_message_nocompatibilityinfo:"No Compatibility Information",checksku_message_noproductfound:"Could not find a part with the provided SKU/Barcode/Part No",checksku_message_notcompatible:"Not Compatible",checksku_warning_unabletoperformcheck:"Unable to perform compatibility check. Please check the compatibility manually"}},es:{translation:{bikematrix_poweredby:"Con tecnología de Bike Matrix",bikeselector_addbike_brand_desc:"La marca de la bicicleta suele indicarse en los lugares resaltados a continuación.",bikeselector_addbike_brand_label:"Marca",bikeselector_addbike_brand_select:"Selecciona la marca de la bicicleta",bikeselector_addbike_find_btn:"Buscar mi bicicleta",bikeselector_addbike_framespec_desc:"La versión del cuadro de la bicicleta suele indicarse en los lugares resaltados a continuación.",bikeselector_addbike_framespec_label:"Versión del cuadro",bikeselector_addbike_framespec_select:"Selecciona la versión del cuadro de la bicicleta",bikeselector_addbike_model_desc:"El modelo de la bicicleta suele indicarse en los lugares resaltados a continuación.",bikeselector_addbike_model_label:"Modelo",bikeselector_addbike_model_select:"Selecciona el modelo de la bicicleta",bikeselector_addbike_title:"Añadir una bicicleta",bikeselector_browse_back_btn:"Volver a mi rincón ciclista",bikeselector_browse_products_label:"Comprar productos compatibles",bikeselector_browse_shop_btn:"Comprar productos",bikeselector_browse_title:"¡A comprar!",bikeselector_confirm_brandmodelframespec_label:"Marca, modelo y versión del cuadro",bikeselector_confirm_confirm_btn:"¡Ahí está mi bici!",bikeselector_confirm_framesize_label:"Talla del cuadro",bikeselector_confirm_notyourride_msg:"¿No es la que buscas? Selecciona uno de los campos de arriba para modificarlo.",bikeselector_confirm_title:"Confirmación de la bicicleta",bikeselector_confirm_yearbikespec_label:"Año y versión de la bicicleta",bikeselector_home_add_a_bike:"Añade una bicicleta a continuación para empezar.",bikeselector_home_add_btn:"Añadir una bicicleta",bikeselector_home_browse_btn:"Ver compatibilidad",bikeselector_home_close_btn:"Cerrar",bikeselector_home_empty:"¡Tu rincón ciclista está vacío!",bikeselector_home_footer_message:"Los fabricantes pueden modificar la versión de la bicicleta sin previo aviso. Las diferencias con la versión de las unidades en existencias pueden afectar a la compatibilidad.",bikeselector_home_title:"Mi rincón ciclista",bikeselector_search_bikespec_label:"Versión de la bicicleta",bikeselector_search_bikespec_select:"Selecciona la versión",bikeselector_search_bikespec_select_all:"Todos",bikeselector_search_confirm_btn:"Confirmar selección",bikeselector_search_no_bikes_found:"No se han encontrado bicicletas",bikeselector_search_number_bikes_found:"Se han encontrado {{number_found}} bicicletas",bikeselector_search_one_bike_found:"Se ha encontrado 1 bicicleta",bikeselector_search_searching:"Buscando...",bikeselector_search_title:"Búsqueda de bicicletas",bikeselector_search_year_label:"Año",bikeselector_size_confirm_btn:"Confirmar talla",bikeselector_size_framesize_desc:"La talla del cuadro de la bicicleta suele indicarse en los lugares resaltados a continuación.",bikeselector_size_framesize_label:"Talla del cuadro",bikeselector_size_framesize_one_size:"Talla única",bikeselector_size_framesize_select:"Selecciona la talla del cuadro",bikeselector_size_title:"Selecciona la talla",cancel:"Cancelar",category_brakeadapterrear:"Adaptador de freno trasero",category_brakecaliperrear:"Pinza de freno trasera",category_brakecaliperfront:"Pinza de freno delantera",category_brakeleverlh:"Palanca de freno izquierda",category_brakeleverrh:"Palanca de freno derecha",category_brakepadsfront:"Pastillas de freno delanteras",category_brakepadsrear:"Pastillas de freno traseras",category_brakerotorfront:"Rotor de freno delantero",category_brakes:"Frenos",category_chainringspider:"Araña de plato",category_cockpit:"Carlinga",category_drivetrain:"Transmisión",category_framefork:"Cuadro y horquilla",category_largestchainring:"Plato más grande",category_secondlargestchainring:"Segundo plato más grande",category_shifteradapterlh:"Adaptador de palanca de cambios mano izquierda",category_shifteradapterrh:"Adaptador de cambio de mano derecha",category_shifterbrakecombolh:"Combinación de freno de palanca de cambios mano izquierda",category_shifterbrakecomborh:"Combo de freno de palanca de cambios mano derecha",category_shifterlh:"Palanca de cambios mano izquierda",category_shifterrh:"Palanca de cambios mano derecha",category_thirdlargestchainring:"Tercero plato más grande",category_tyrefront:"Neumático delantero",category_tyrerear:"Neumático trasero",category_wheelstyres:"Ruedas y neumáticos",category_brakeadapterfront:"Adaptador de freno delantero",category_brakerotorrear:"Rotor de freno trasero",compatible:"Compatible",compatible_check_notes:"Compatible - Consulta las notas",compatiblelist_header:"Productos compatibles",compatiblelist_nobikeselected:"No se ha seleccionado ninguna bicicleta. Haz clic aquí para añadir tu bicicleta y buscar componentes compatibles",compatiblelist_noresults:"No se han encontrado productos compatibles",compatiblelist_pageone:"Puedes consultar todos los productos compatibles con tu bicicleta <a>aquí</a>.",compatiblelist_unavailable:"Muy pronto podrás consultar la compatibilidad de esta categoría de productos con la marca de bicicleta que has seleccionado.",confirm:"Confirmar",copy:"Copiar",edit:"Editar",error_add_component:"El componente no ha cuajado. Inténtalo de nuevo y presta un poco más de atención esta vez.",error_add_custom_bike:"Vaya... No hemos podido crear tu bicicleta personalizada. Actualiza la página e inténtalo de nuevo.",error_find_products:"Vaya… Parece que tenemos problemas. Actualiza la página e inténtalo de nuevo.",error_find_products_no_results:"Vaya... No encontramos el producto. Prueba con otro número de modelo o intenta escribirlo de otra manera.",error_generic:"Se ha producido un error en el extremo: {{endpoint_location}}",error_get_bike_bom:"¡Menuda faena! No se ha podido recuperar la configuración de tu bicicleta. Actualiza la página e inténtalo de nuevo.",error_invalid_email:"Parece que este correo electrónico no es válido. ¿Puedes probar con otro?",error_remove_component:"Este componente no quiere bajarse de la bicicleta. Actualiza la página e inténtalo de nuevo.",error_revert_component:"Este componente no quiere bajarse de la bicicleta. Actualiza la página e inténtalo de nuevo.",error_save_custom_bike:"¡Oh, no! La bicicleta no se ha guardado. Inténtalo de nuevo y dale con más ganas esta vez.",error_update_custom_bike:"Vaya, las cosas no han salido bien. ¡Lo sentimos! Actualiza la página e inténtalo de nuevo.",error_update_custom_bike_name:"No hemos podido cambiar el nombre de la bicicleta. Puede que no le guste. Actualiza la página e inténtalo de nuevo",not_compatible:"No compatible",onboarding_explore:"Ir a explorar",onboarding_green_spanner:"Busca la llave inglesa verde",onboarding_green_spanner_description:"Si un componente tiene una llave verde, se puede cambiar o eliminar completamente de la compilación.",onboarding_linked_components:"Comprender los componentes vinculados",onboarding_linked_components_description:"Algunas piezas (por ejemplo, juego de bielas + pedalier) están vinculadas. Para intercambiar uno, es posible que tengas que eliminar ambos; de lo contrario, el sistema puede marcarlo como incompatible.",onboarding_next:"Próximo",onboarding_open_bike_build:"Abre tu construcción de bicicletas",onboarding_open_bike_build_description:"Al ver la construcción de su bicicleta, expanda los grupos de componentes para ver los componentes que se aplican a su bicicleta.",onboarding_preview:"Vista previa o guardar cambios",onboarding_preview_description:"Puede intercambiar/eliminar componentes y confirmar cambios para explorar actualizaciones. Estos se pueden deshacer en cualquier momento antes de guardarlos. Una vez que guardes, los cambios no se pueden revertir, solo eliminarlos o reemplazarlos nuevamente.",onboarding_replacement:"Elija el reemplazo adecuado",onboarding_replacement_description:"Utilice el código de barras o el número de pieza del fabricante (que se encuentra en el paquete o en su factura) para buscar. También puedes usar el número de modelo, pero vuelve a verificar: algunos números se aplican a varias versiones.",onboarding_settings:"Ver la página de configuración",onboarding_settings_description:"Su página de configuración es donde puede cambiar el nombre de su bicicleta, actualizar su correo electrónico y donde encontrará su ID de Bike Matrix y su ID de Share.",onboarding_title:"Taller Virtual – Guía Rápida",onboarding_vw_description:"Modifica el registro digital de tu bicicleta para reflejar las mejoras que has realizado y asegurar que las comprobaciones de compatibilidad sean lo más precisas posible.",productcheck_nobikeselected_label:"Comprobar compatibilidad",productcheck_nobikeselected_message:"Quieres añadir la bicicleta para comprobar si este componente es adecuado",productcheck_questionmark:"?",save:"Guardar",share:"Compartir",virtualworkshop_add_bike_text:"Puedes consultar tu ID de Bike Matrix en la página Ajustes del Taller virtual",virtualworkshop_bm_id_text:"Puedes usar el ID de Bike Matrix (que está disponible en la sección Ajustes del Taller virtual) o el ID de uso compartido que alguien haya compartido contigo.",virtualworkshop_bom_title:"Lista de materiales",virtualworkshop_build_text:"Detalles de la configuración",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"Siempre que se modifique el registro de la bicicleta, el usuario será el responsable final de comprobar que los componentes sean correctos, y deberá tener en cuenta que cualquier cambio que realice afectará a la compatibilidad.",virtualworkshop_do_not_pass:"El Taller Virtual aún no está disponible para todas las Marcas de Bicicletas.",virtualworkshop_drivetrain:"Sistema de transmisión",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Acceder al Taller virtual",virtualworkshop_frame_fork:"Cuadro y horquilla",virtualworkshop_intro_text:"Renueva la configuración de tu bicicleta con nuevos componentes e indica una dirección de correo electrónico para guardarla. Consulta las configuraciones de bicicleta compartidas contigo y accede a los ID de tus bicicletas.",virtualworkshop_other_parts:"Otros componentes",virtualworkshop_remove_btn:"Quitar componente",virtualworkshop_remove_subtitle:"Si quitas un componente, se eliminará de la configuración de la bicicleta. Esta acción puede afectar a la compatibilidad de otros componentes.",virtualworkshop_remove_title:"¿Seguro?",virtualworkshop_revert_btn:"Deshacer",virtualworkshop_save_btn:"Guardar bicicleta",virtualworkshop_save_text:"Para guardar tu bicicleta personalizada, debemos vincularla con tu dirección de correo electrónico",virtualworkshop_save_title:"Introduce tu correo electrónico",virtualworkshop_search_text:"Introduce un código de barras o busca por marca, modelo, número de referencia...",virtualworkshop_settings_bike_name:"Nombre de la bicicleta",virtualworkshop_settings_email:"Correo electrónico",virtualworkshop_settings_id:"ID de Bike Matrix",virtualworkshop_settings_share_id:"ID de uso compartido",virtualworkshop_shared_icon:"Compartido contigo",virtualworkshop_swap_btn:"Cambiar componente",virtualworkshop_title:"Taller virtual",virtualworkshop_unsaved_changes:"Ver los cambios sin guardar",virtualworkshop_wheels_tyres:"Ruedas y neumáticos",category_bike:"Bicicleta",category_bottombracket:"Pedalier",category_bottombracketpart:"Componente del pedalier",category_brakeadapter:"Adaptador de freno",category_brakeadapterpart:"Componente del adaptador de freno",category_brakecaliper:"Pinza de freno",category_brakecaliperpart:"Componente de la pinza de freno",category_brakecaliperservicekit:"Kit de mantenimiento de las pinzas de freno",category_brakelever:"Maneta de freno",category_brakeleverpart:"Componente de la maneta de freno",category_brakeleverservicekit:"Kit de mantenimiento de la maneta de freno",category_brakepads:"Pastillas de freno",category_brakerotor:"Disco de freno",category_brakerotorpart:"Componente del disco de freno",category_brakesystem:"Sistema de frenos",category_brakesystempart:"Componente del sistema de frenos",category_cassette:"Cassette",category_cassettepart:"Componente del cassette",category_chain:"Cadena",category_chainguide:"Guiacadenas",category_chainguidepart:"Componente del guiacadenas",category_chainjoiner:"Enlace de cadena",category_chainring:"Plato",category_chainringbolt:"Tornillo para plato",category_crankpart:"Componente de la biela",category_crankset:"Juego de bielas",category_dropperlever:"Palanca de tija telescópica",category_dropperleverpart:"Componente de la palanca de tija telescópica",category_ebikebattery:"Batería para bicicleta eléctrica",category_ebikebatterypart:"Componente de la batería para bicicleta eléctrica",category_ebikecharger:"Cargador para bicicleta eléctrica",category_ebikechargerpart:"Componente del cargador para bicicleta eléctrica",category_ebikecontrolunit:"Unidad de control para bicicleta eléctrica",category_ebikecontrolunitpart:"Componente de la unidad de control para bicicleta eléctrica",category_ebikeinterconnect:"Sistema de conexión para bicicleta eléctrica",category_ebikeinterconnectpart:"Componente del sistema de conexión para bicicleta eléctrica",category_ebikemotorsystem:"Motor para bicicleta eléctrica",category_ebikemotorsystempart:"Componente del motor para bicicleta eléctrica",category_fork:"Horquilla",category_forkpart:"Componente de la horquilla",category_forkservicekit:"Kit de mantenimiento de la horquilla",category_frame:"Cuadro",category_framepart:"Componente del cuadro",category_frontaxle:"Eje delantero",category_frontaxlepart:"Componente del eje delantero",category_frontderailleur:"Desviador delantero",category_frontderailleurpart:"Componente del desviador delantero",category_fronthub:"Buje delantero",category_fronthubpart:"Componente del buje delantero",category_frontwheel:"Rueda delantera",category_grips:"Puños",category_gripspart:"Componente de los puños",category_handlebar:"Manillar",category_headset:"Dirección",category_headsetpart:"Componente de la dirección",category_nipple:"Válvula",category_pedals:"Pedales",category_pedalspart:"Componente de los pedales",category_rearaxle:"Eje trasero",category_rearaxlepart:"Componente del eje trasero",category_rearderailleur:"Desviador trasero",category_rearderailleurpart:"Componente del desviador trasero",category_rearhub:"Buje trasero",category_rearhubpart:"Componente del buje trasero",category_rearshock:"Amortiguador trasero",category_rearshockpart:"Componente del amortiguador trasero",category_rearshockservicekit:"Kit de mantenimiento del amortiguador trasero",category_rearwheel:"Rueda trasera",category_rim:"Llanta",category_saddle:"Sillín",category_seatpost:"Tija del sillín",category_seatpostclamp:"Abrazadera de la tija del sillín",category_seatpostclamppart:"Componente de la abrazadera de la tija del sillín",category_seatpostpart:"Componente de la tija del sillín",category_seatpostservicekit:"Kit de mantenimiento de la tija del sillín",category_shiftadapter:"Adaptador del cambio",category_shiftadapterpart:"Componente del adaptador del cambio",category_shiftbrakecombo:"Maneta de cambio/freno",category_shiftbrakecombopart:"Componente de la maneta de cambio/freno",category_shifter:"Mando de cambio",category_shifterpart:"Componente del mando de cambio",category_spoke:"Radio",category_stem:"Potencia",category_stempart:"Componente de la potencia",category_tube:"Cámara",category_tyre:"Neumático",category_wheelset:"Juego de ruedas",checksku_message_nobikefound:"No se ha encontrado ninguna bicicleta con la clave indicada",checksku_message_nocompatibilityinfo:"No hay información sobre la compatibilidad",checksku_message_noproductfound:"No se ha encontrado ningún componente con la referencia, el código de barras o el número de pieza indicado",checksku_message_notcompatible:"No compatible",checksku_warning_unabletoperformcheck:"No se puede comprobar la compatibilidad. Comprueba la compatibilidad de forma manual."}},fi:{translation:{bikematrix_poweredby:"Powered by Bike Matrix",bikeselector_addbike_brand_desc:"Pyörän valmistaja löytyy yleensä korostetulta alueelta",bikeselector_addbike_brand_label:"Valmistaja",bikeselector_addbike_brand_select:"Valitse pyörän valmistaja",bikeselector_addbike_find_btn:"Etsi pyörä",bikeselector_addbike_framespec_desc:"Pyöräsi runkokoko löytyy yleensä alta korostetuilta alueilta",bikeselector_addbike_framespec_label:"Rungon mallitarkennus",bikeselector_addbike_framespec_select:"Valitse pyöräsi rungon tiedot",bikeselector_addbike_model_desc:"Pyöräsi malli löytyy yleensä alta korostetuilta alueilta",bikeselector_addbike_model_label:"Malli",bikeselector_addbike_model_select:"Valitse pyöräsi malli",bikeselector_addbike_title:"Lisää pyörä",bikeselector_browse_back_btn:"Takaisin Bike Loungeen",bikeselector_browse_products_label:"Osta yhteensopivia tuotteita",bikeselector_browse_shop_btn:"Osta tuotteita",bikeselector_browse_title:"Aloita ostokset!",bikeselector_confirm_brandmodelframespec_label:"Tuotemerkki, malli, runkosarja",bikeselector_confirm_confirm_btn:"Kyllä, tämä on pyöräni",bikeselector_confirm_framesize_label:"Rungon koko",bikeselector_confirm_notyourride_msg:"Tämä ei ole pyöräsi? Valitse ylhäältä muuttaaksesi hakua",bikeselector_confirm_title:"Vahvista pyöräsi",bikeselector_confirm_yearbikespec_label:"Vuosi, Pyörän kokoonpano",bikeselector_home_add_a_bike:"Lisää pyörä aloittaaksesi",bikeselector_home_add_btn:"Lisää pyörä",bikeselector_home_browse_btn:"Selaa yhteensopivuuksia",bikeselector_home_close_btn:"Sulje",bikeselector_home_empty:"Bike Lounge on tyhjä!",bikeselector_home_footer_message:"Pyörän valmistaja voi muuttaa pyörän teknisiä tietoja ilman erillistä ilmoitusta. Teknisten tietojen erot voivat vaikuttaa yhteensopivuustuloksiin.",bikeselector_home_title:"Minun Bike Lounge",bikeselector_search_bikespec_label:"Pyörän mallitarkennus",bikeselector_search_bikespec_select:"Valitse pyörän kokoonpano",bikeselector_search_bikespec_select_all:"Kaikki",bikeselector_search_confirm_btn:"Vahvista valinta",bikeselector_search_no_bikes_found:"Pyöriä ei löytynyt",bikeselector_search_number_bikes_found:"{{number_found}} pyörää löydetty",bikeselector_search_one_bike_found:"1 pyörä löydetty",bikeselector_search_searching:"Etsii...",bikeselector_search_title:"Pyörähaku",bikeselector_search_year_btn:"Tietoja ei vaadita",bikeselector_search_year_label:"Vuosi",bikeselector_size_confirm_btn:"Vahvista koko",bikeselector_size_framesize_desc:"Pyöräsi runkokoko löytyy yleensä korostetuilta alueelta",bikeselector_size_framesize_label:"Rungon koko",bikeselector_size_framesize_one_size:"Yksi koko",bikeselector_size_framesize_select:"Valitse rungon koko",bikeselector_size_title:"Valitse kokosi",cancel:"Peruuta",category_brakeadapterrear:"Jarru adapteri takana",category_brakecaliperrear:"Jarrusatula Taka",category_brakecaliperfront:"Jarrusatula Edessä",category_brakeleverlh:"Jarruvipu vasen käsi",category_brakeleverrh:"Jarruvipu Oikea käsi",category_brakepadsfront:"Jarrupalat edessä",category_brakepadsrear:"Jarrupalat Taka",category_brakerotorfront:"Jarru roottori edessä",category_brakes:"Jarrut",category_chainringspider:"Chainring Spider",category_cockpit:"Ohjaamo",category_drivetrain:"Voimansiirto",category_framefork:"Runko & haarukka",category_largestchainring:"Suurin ketjurengas",category_secondlargestchainring:"Toiseksi suurin ketjurengas",category_shifteradapterlh:"Vaihteensovitin vasen käsi",category_shifteradapterrh:"Vaihteensovitin Oikea käsi",category_shifterbrakecombolh:"Vaihdejarruyhdistelmä vasen käsi",category_shifterbrakecomborh:"Vaihdejarruyhdistelmä oikea käsi",category_shifterlh:"Vaihteisto vasen käsi",category_shifterrh:"Vaihteisto Oikea käsi",category_thirdlargestchainring:"Kolmanneksi suurin ketjurengas",category_tyrefront:"Rengas Etu",category_tyrerear:"Rengas Taka",category_wheelstyres:"Pyörät & Renkaat",category_brakeadapterfront:"Jarru adapteri edessä",category_brakerotorrear:"Jarru roottori takana",compatible:"Yhteensopiva",compatible_check_notes:"Yhteensopiva - tarkista lisätiedot",compatiblelist_header:"Yhteensopivat tuotteet",compatiblelist_nobikeselected:"Pyörää ei ole valittu. Klikkaa tästä lisätäksesi pyörän yhteensopivien osien tarkistamiseksi.",compatiblelist_noresults:"Yhteensopivia tuotteita ei löytynyt",compatiblelist_pageone:"Kaikki pyöräsi kanssa yhteensopivat tuotteet näet tässä",compatiblelist_unavailable:"Yhteensopivat tuotteet tämän tuotekategorian ja valitsemasi pyörätuotemerkin kanssa on tulossa pian!",confirm:"Vahvista",copy:"Kopioi",edit:"Muokkaa",error_add_component:"Se komponentti ei ottanut tarttuakseen. Kokeile uudestaan ja heitä tällä kertaa vähän kovemmin.",error_add_custom_bike:"Oops... Emme pystyneet luomaan kustomoitua pyörääsi. Päivitä ja kokeile uudestaan.",error_find_products:"Hmmm... Näyttää siltä, että pyörämme eivät oikein pyöri. Päivitä ja kokeile uudestaan.",error_find_products_no_results:"Hmmm... Emme löytäneet etsimääsi tuotetta. Kokeile toista mallinumeroa tai muokkaa hakusanaa.",error_generic:"Päätepisteessä oli virhe - {{endpoint_location}}",error_get_bike_bom:"Onpa noloa! Emme löytäneet pyöräkokoonpanoasi. Päivitä ja kokeile uudestaan.",error_invalid_email:"Sähköpostiosoitteesi ei vaikuta olevan voimassa, olisiko jotain toista vaihtoehtoa?",error_remove_component:"Tämä komponenti haluaa tosissaan pysyä pyörässäsi. Päivitä ja kokeile uudestaan.",error_revert_component:"Tämä komponenti haluaa tosissaan pysyä pyörässäsi. Päivitä ja kokeile uudestaan.",error_save_custom_bike:"Meidän moka ettei pyöräsi ollut tallennettu. Kokeile uudestaan ja polje tällä kertaa vähän kovemmin.",error_update_custom_bike:"Oho, se ei toiminut. Pahoittelut! Päivitä ja kokeile uudestaan.",error_update_custom_bike_name:"Emme voineet vaihtaa pyöräsi nimeä. Ehkä se ei pidä siitä? Päivitä ja kokeile uudestaan.",not_compatible:"Yhteensopimaton",onboarding_explore:"Mene Tutkimaan",onboarding_green_spanner:"Etsi vihreä jakoavain",onboarding_green_spanner_description:"Jos komponentissa on vihreä jakoavain, se voidaan vaihtaa tai poistaa kokonaan.",onboarding_linked_components:"Ymmärrä linkitetyt komponentit",onboarding_linked_components_description:"Jotkut osat (esim. kampi + alakiinnike) on linkitetty. Jos haluat vaihtaa toisen, saatat joutua poistamaan molemmat – muuten järjestelmä voi merkitä sen yhteensopimattomaksi.",onboarding_next:"Seuraavaksi",onboarding_open_bike_build:"Avaa pyörä rakentaa.",onboarding_open_bike_build_description:"Kun tarkastelet pyörääsi, laajenna komponenttiryhmät nähdäksesi pyörääsi koskevat komponentit.",onboarding_preview:"Esikatsele tai tallenna muutokset",onboarding_preview_description:"Voit vaihtaa/poistaa komponentteja ja vahvistaa muutokset tutkiaksesi päivityksiä. Nämä voidaan peruuttaa milloin tahansa ennen tallentamista. Kun olet tallentanut, muutoksia ei voi peruuttaa – ne voidaan vain poistaa tai korvata uudelleen.",onboarding_replacement:"Valitse oikea korvike",onboarding_replacement_description:"Käytä hakuun viivakoodia tai valmistajan osanumeroa (löytyy pakkauksesta tai laskusta). Voit myös käyttää mallinumeroa, mutta tarkista vielä kerran – jotkin numerot koskevat useita versioita.",onboarding_settings:"Näytä asetussivu",onboarding_settings_description:"Asetussivullasi voit muuttaa pyöräsi nimeä, päivittää sähköpostiosoitteesi ja sieltä löydät Bike Matrix -tunnuksesi sekä jakotunnuksesi.",onboarding_title:"Virtuaalinen työpaja – Pikaopas",onboarding_vw_description:"Muokkaa pyöräsi digitaalista tietuetta vastaamaan tekemiäsi päivityksiä ja varmista, että yhteensopivuustarkastukset ovat mahdollisimman tarkkoja.",productcheck_nobikeselected_label:"Tarkista yhteensopivuus",productcheck_nobikeselected_message:"Lisää pyörä tarkistaaksesi yhteensopivuus",productcheck_questionmark:"?",save:"Tallenna",share:"Jaa",virtualworkshop_add_bike_text:"Sinun Bike Matrix ID löytyy Virtual Workshopin asetukset -sivuilta",virtualworkshop_bm_id_text:"Voit käyttää Bike Matrix ID:tä, joka löytyy Virtual Workshopin asetukset -sivuilta tai Share Id:tä, joka on jaettu sinulle toisen henkilön toimesta.",virtualworkshop_bom_title:"Materiaaliluoettelo",virtualworkshop_build_text:"Kokoonpanotiedot",virtualworkshop_cockpit:"Ohjaamo",virtualworkshop_disclaimer:"Päivitessään pyörän tietoja käyttäjä on vastuussa siitä, että komponentit ovat oikein merkitty ymmärtäen, että muutokset vaikuttavat yhteensopivuustuloksiin.",virtualworkshop_do_not_pass:"Virtuaalityöpaja ei ole vielä saatavilla kaikille pyörämerkeille.",virtualworkshop_drivetrain:"Voimansiirto",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Virtuaaliseen Workshopiin",virtualworkshop_frame_fork:"Runko & etuhaarukka",virtualworkshop_intro_text:"Päivitä pyörääsi uusilla komponenteilla ja tallenna pyöräsi antamalla sähköpostiosoitteesi. Tarkastele jaettuja pyöriä ja pääse käsiksi pyöräsi tunnuksiin.",virtualworkshop_other_parts:"Muut osat",virtualworkshop_remove_btn:"Poista komponentti",virtualworkshop_remove_subtitle:"Komponentin poistaminen poistaa sen pyöräsi kokoonpanosta. Tämä voi vaikuttaa muiden osien yhteensopivuuteen.",virtualworkshop_remove_title:"Oletko varma?",virtualworkshop_revert_btn:"Palaa",virtualworkshop_save_btn:"Tallenna pyörä",virtualworkshop_save_text:"Voidaksemme tallentaa kustomoidun pyöräsi, se on tallennettava sähköpostiosoitteellasi",virtualworkshop_save_title:"Syötä sähköpostiosoitteesi",virtualworkshop_search_text:"Syötä viivakoodi tai hae tuotemerkillä, mallilla, osanumerolla...",virtualworkshop_settings_bike_name:"Pyörän nimi",virtualworkshop_settings_email:"Sähköpostiosoite",virtualworkshop_settings_id:"Bike Matrix ID",virtualworkshop_settings_share_id:"Jaa ID",virtualworkshop_shared_icon:"Jaettu sinulle",virtualworkshop_swap_btn:"Vaihda komponenttia",virtualworkshop_title:"Virtuaalinen Workshop",virtualworkshop_unsaved_changes:"Katsele tallentamattomia muutoksia",virtualworkshop_wheels_tyres:"Vanteet & renkaat",category_bike:"Pyörä",category_bottombracket:"Keskiö",category_bottombracketpart:"Keskiön osa",category_brakeadapter:"Jarruadapteri",category_brakeadapterpart:"Jarruadapterin osa",category_brakecaliper:"Jarrusatula",category_brakecaliperpart:"Jarrusatulan osa",category_brakecaliperservicekit:"Jarrusatulan huoltosarja",category_brakelever:"Jarrukahva",category_brakeleverpart:"Jarrukahvan osa",category_brakeleverservicekit:"Jarrukahvan huoltosarja",category_brakepads:"Jarrupalat",category_brakerotor:"Jarrulevy",category_brakerotorpart:"Jarrulevyn osa",category_brakesystem:"Jarrujärjestelmä",category_brakesystempart:"Jarrujärjestelmän osa",category_cassette:"Takapakka",category_cassettepart:"Takapakan osa",category_chain:"Ketju",category_chainguide:"Ketjusuoja",category_chainguidepart:"Ketjusuojan osa",category_chainjoiner:"Ketjuliitin",category_chainring:"Eturatas",category_chainringbolt:"Eturattaan pultti",category_crankpart:"Kammen osa",category_crankset:"Kampisarja",category_dropperlever:"Hissitolpan vipu",category_dropperleverpart:"Hissitolpan vivun osa",category_ebikebattery:"Sähköpyörän akku",category_ebikebatterypart:"Sähköpyörän akun osa",category_ebikecharger:"Sähköpyörän laturi",category_ebikechargerpart:"Sähköpyörän laturin osa",category_ebikecontrolunit:"Sähköpyörän ohjausyksikkö",category_ebikecontrolunitpart:"Sähköpyörän ohjausyksikön osa",category_ebikeinterconnect:"eBike-liitin",category_ebikeinterconnectpart:"eBike-liittimen osa",category_ebikemotorsystem:"Sähköpyörän moottorijärjestelmä",category_ebikemotorsystempart:"Sähköpyörän moottorijärjestelmän osa",category_fork:"Keula",category_forkpart:"Keulan osa",category_forkservicekit:"Keulan huoltosarja",category_frame:"Runko",category_framepart:"Rungon osa",category_frontaxle:"Etuakseli",category_frontaxlepart:"Etuakselin osa",category_frontderailleur:"Etuvaihtaja",category_frontderailleurpart:"Etuvaihtajan osa",category_fronthub:"Etunapa",category_fronthubpart:"Etunavan osa",category_frontwheel:"Etukiekko",category_grips:"Kädensijat",category_gripspart:"Kädensijojen osa",category_handlebar:"Ohjaustanko",category_headset:"Ohjainlaakeri",category_headsetpart:"Ohjainlaakerin osa",category_nipple:"Nippeli",category_pedals:"Polkimet",category_pedalspart:"Polkimien osa",category_rearaxle:"Taka-akseli",category_rearaxlepart:"Taka-akselin osa",category_rearderailleur:"Takavaihtaja",category_rearderailleurpart:"Takavaihtajan osa",category_rearhub:"Takanapa",category_rearhubpart:"Takanavan osa",category_rearshock:"Takaiskari",category_rearshockpart:"Takaiskarin osa",category_rearshockservicekit:"Takaiskarin huoltosarja",category_rearwheel:"Takakiekko",category_rim:"Vanne",category_saddle:"Satula",category_seatpost:"Satulaputki",category_seatpostclamp:"Satulaputken kiristin",category_seatpostclamppart:"Satulaputken kiristimen osa",category_seatpostpart:"Satulaputken osa",category_seatpostservicekit:"Hissitolpan huoltosarja",category_shiftadapter:"Vaihtajan adapteri",category_shiftadapterpart:"Vaihtajan adapterin osa",category_shiftbrakecombo:"Vaihdevipu-jarrukahva yhdistelmä",category_shiftbrakecombopart:"Vaihdevipu-jarrukahva yhdistelmän osa",category_shifter:"Vaihdevipu",category_shifterpart:"Vaihdevivun osa",category_spoke:"Pinna",category_stem:"Ohjainkannatin",category_stempart:"Ohjainkannattimen osa",category_tube:"Sisärengas",category_tyre:"Ulkorengas",category_wheelset:"Kiekkosarja",checksku_message_nobikefound:"Pöyrää ei löytynyt annetulla Bike Key:llä.",checksku_message_nocompatibilityinfo:"Ei yhteensopivuus tietoja",checksku_message_noproductfound:"Osaa ei löytynyt annetulla SKU:lla/Viivakoodilla/Osanumerolla",checksku_message_notcompatible:"Ei yhteensopiva",checksku_warning_unabletoperformcheck:"Yhteensopivuuden tarkistusta ei voitu suorittaa. Pyydämme tarkistamaan yhteensopivuuden manuaalisesti."}}},{slice:Fm,forEach:Nm}=[];function Rm(n){return Nm.call(Fm.call(arguments,1),e=>{if(e)for(const t in e)n[t]===void 0&&(n[t]=e[t])}),n}const wh=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,Gm=(n,e,t)=>{const r=t||{};r.path=r.path||"/";const i=encodeURIComponent(e);let s=`${n}=${i}`;if(r.maxAge>0){const l=r.maxAge-0;if(Number.isNaN(l))throw new Error("maxAge should be a Number");s+=`; Max-Age=${Math.floor(l)}`}if(r.domain){if(!wh.test(r.domain))throw new TypeError("option domain is invalid");s+=`; Domain=${r.domain}`}if(r.path){if(!wh.test(r.path))throw new TypeError("option path is invalid");s+=`; Path=${r.path}`}if(r.expires){if(typeof r.expires.toUTCString!="function")throw new TypeError("option expires is invalid");s+=`; Expires=${r.expires.toUTCString()}`}if(r.httpOnly&&(s+="; HttpOnly"),r.secure&&(s+="; Secure"),r.sameSite)switch(typeof r.sameSite=="string"?r.sameSite.toLowerCase():r.sameSite){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;case"none":s+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return s},Ph={create(n,e,t,r){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};t&&(i.expires=new Date,i.expires.setTime(i.expires.getTime()+t*60*1e3)),r&&(i.domain=r),document.cookie=Gm(n,encodeURIComponent(e),i)},read(n){const e=`${n}=`,t=document.cookie.split(";");for(let r=0;r<t.length;r++){let i=t[r];for(;i.charAt(0)===" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return i.substring(e.length,i.length)}return null},remove(n){this.create(n,"",-1)}};var Qm={name:"cookie",lookup(n){let{lookupCookie:e}=n;if(e&&typeof document<"u")return Ph.read(e)||void 0},cacheUserLanguage(n,e){let{lookupCookie:t,cookieMinutes:r,cookieDomain:i,cookieOptions:s}=e;t&&typeof document<"u"&&Ph.create(t,n,r,i,s)}},qm={name:"querystring",lookup(n){var r;let{lookupQuerystring:e}=n,t;if(typeof window<"u"){let{search:i}=window.location;!window.location.search&&((r=window.location.hash)==null?void 0:r.indexOf("?"))>-1&&(i=window.location.hash.substring(window.location.hash.indexOf("?")));const l=i.substring(1).split("&");for(let u=0;u<l.length;u++){const c=l[u].indexOf("=");c>0&&l[u].substring(0,c)===e&&(t=l[u].substring(c+1))}}return t}};let Oa=null;const Ch=()=>{if(Oa!==null)return Oa;try{Oa=window!=="undefined"&&window.localStorage!==null;const n="i18next.translate.boo";window.localStorage.setItem(n,"foo"),window.localStorage.removeItem(n)}catch{Oa=!1}return Oa};var Vm={name:"localStorage",lookup(n){let{lookupLocalStorage:e}=n;if(e&&Ch())return window.localStorage.getItem(e)||void 0},cacheUserLanguage(n,e){let{lookupLocalStorage:t}=e;t&&Ch()&&window.localStorage.setItem(t,n)}};let Xa=null;const kh=()=>{if(Xa!==null)return Xa;try{Xa=window!=="undefined"&&window.sessionStorage!==null;const n="i18next.translate.boo";window.sessionStorage.setItem(n,"foo"),window.sessionStorage.removeItem(n)}catch{Xa=!1}return Xa};var Jm={name:"sessionStorage",lookup(n){let{lookupSessionStorage:e}=n;if(e&&kh())return window.sessionStorage.getItem(e)||void 0},cacheUserLanguage(n,e){let{lookupSessionStorage:t}=e;t&&kh()&&window.sessionStorage.setItem(t,n)}},Um={name:"navigator",lookup(n){const e=[];if(typeof navigator<"u"){const{languages:t,userLanguage:r,language:i}=navigator;if(t)for(let s=0;s<t.length;s++)e.push(t[s]);r&&e.push(r),i&&e.push(i)}return e.length>0?e:void 0}},Km={name:"htmlTag",lookup(n){let{htmlTag:e}=n,t;const r=e||(typeof document<"u"?document.documentElement:null);return r&&typeof r.getAttribute=="function"&&(t=r.getAttribute("lang")),t}},_m={name:"path",lookup(n){var i;let{lookupFromPathIndex:e}=n;if(typeof window>"u")return;const t=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(t)?(i=t[typeof e=="number"?e:0])==null?void 0:i.replace("/",""):void 0}},$m={name:"subdomain",lookup(n){var i,s;let{lookupFromSubdomainIndex:e}=n;const t=typeof e=="number"?e+1:1,r=typeof window<"u"&&((s=(i=window.location)==null?void 0:i.hostname)==null?void 0:s.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i));if(r)return r[t]}};function e5(){return{order:["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"],lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:n=>n}}class zh{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(e,t)}init(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=e||{languageUtils:{}},this.options=Rm(t,this.options||{},e5()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=i=>i.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=r,this.addDetector(Qm),this.addDetector(qm),this.addDetector(Vm),this.addDetector(Jm),this.addDetector(Um),this.addDetector(Km),this.addDetector(_m),this.addDetector($m)}addDetector(e){return this.detectors[e.name]=e,this}detect(e){e||(e=this.options.order);let t=[];return e.forEach(r=>{if(this.detectors[r]){let i=this.detectors[r].lookup(this.options);i&&typeof i=="string"&&(i=[i]),i&&(t=t.concat(i))}}),t=t.map(r=>this.options.convertDetectedLanguage(r)),this.services.languageUtils.getBestMatchFromCodes?t:t.length>0?t[0]:null}cacheUserLanguage(e,t){t||(t=this.options.caches),t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach(r=>{this.detectors[r]&&this.detectors[r].cacheUserLanguage(e,this.options)}))}}zh.type="languageDetector",bt.use(l3).use(zh).init({debug:!1,resources:Ym,detection:{order:["htmlTag","querystring","cookie","localStorage","sessionStorage","navigator","path","subdomain"]},supportedLngs:["en","en-GB","en-US","de","fr","es","it","nl"],fallbackLng:"en-GB",interpolation:{escapeValue:!1}});const t5=typeof window<"u";function Vn(n,e,t=[],r=null){p1(s=>il.value?b(n,{...s}):b(ae,{}),e,t,r)}function r5(){Vn($0,"bikematrix-bikeselector",[],{shadow:!0}),Vn(tm,"bikematrix-productresult",["data-sku"],{shadow:!0}),Vn(am,"bikematrix-collectionresult",["data-product-id","data-product-skus"],{shadow:!0}),Vn(sh,"bikematrix-compatibilitylabel",["data-type"],{shadow:!0}),Vn(hm,"bikematrix-compatiblelist",["data-title"]),Vn(bm,"bikematrix-bikeselectorbanner",["data-title","data-color","data-full-width","data-font-color","data-show"],{shadow:!0}),Vn(oh,"bikematrix-bikon",["data-color"],{shadow:!0})}function n5(){if(!t5)return null;const n=rg.getInstance(),e={isInitialized:()=>n.isInitialized(),init:t=>n.initialize(t),refresh:()=>n.refresh(),destroy:()=>n.destroy(),reload:(t=!0)=>n.reload(t),reset:()=>n.reset(),getConfig:()=>n.getConfig(),getCurrentBike:()=>n.getCurrentBike(),getActiveSubscription:()=>n.getActiveSubscription(),updateConfig:t=>n.updateConfig(t),updateSku:t=>n.updateSku(t)};return typeof process<"u"&&process.env.NODE_ENV==="development"&&(e.core=n),window.BikeMatrix=e,r5(),document.currentScript&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>e.init()):e.init()),e}return n5()}();
96
+ `;function oh({"data-color":n,banner:e}){const t=Oe.value;return window.BikeMatrix.getConfig(),b(ae,{children:[b("style",{type:"text/css",children:gm}),b("div",{className:"bm-bikon-wrapper",children:b("button",{className:`p-2 !ml-auto header__icon bm-header-btn bm-icon bm-bike-select-icon ${t&&!e?"show-selected":t&&e?"show-selected-banner":""}`,style:{color:n},onClick:e?()=>{}:()=>pi(),children:b("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",className:"w-full h-full",children:b("path",{fill:"currentColor",fillRule:"evenodd",d:"m35.745 12.17l-4.925 1.48l3.28 8.578a8 8 0 1 1-1.868.715l-1.648-4.31l-5.682 11.802A1 1 0 0 1 24 31h-4.062A8.001 8.001 0 0 1 4 30a8 8 0 0 1 15.938-1h2.5l-4.88-13.664A.998.998 0 0 1 17.5 15H16a1 1 0 1 1 0-2h4.5a1 1 0 1 1 0 2h-.938l1.842 5.157l8.127-4.277l-.965-2.523a1 1 0 0 1 .647-1.315l5.957-1.787l.575 1.915Zm-13.662 9.89l1.972 5.52l4.23-8.784l-6.202 3.264Zm12.983 8.297l-2.113-5.527a6 6 0 1 0 1.868-.715l2.113 5.528a1 1 0 0 1-1.868.714ZM17.917 29H12a1 1 0 1 0 0 2h5.917A6.002 6.002 0 0 1 6 30a6 6 0 0 1 11.917-1Z",clipRule:"evenodd"})})})})]})}function bm({"data-title":n,"data-color":e,"data-full-width":t,"data-font-color":r,"data-show":i}){const s=Oe.value;return typeof i>"u"||i!=="true"&&i!==""?b(ae,{}):b(ae,{children:[b("style",{type:"text/css",children:vm}),b("div",{onClick:()=>{pi()},class:"bike-selector-banner_wrapper",children:b("div",{class:`bike-selector-banner ${t==="false"?"floating":""}`,style:{backgroundColor:e??"#000",maxWidth:t??null},children:b(ae,{children:[b("h2",{class:"bike-selector-banner_title",style:{color:r==="black"?"#000":"#fff"},children:s?s.brand+" "+s.frameSeries:n}),b("h2",{class:"bike-selector-banner_title_mobile",style:{color:r==="black"?"#000":"#fff"},children:s?s.brand:"Check Compatibility"}),b(oh,{"data-color":"#fff",banner:!0})]})})})]})}const mm={type:"logger",log(n){this.output("log",n)},warn(n){this.output("warn",n)},error(n){this.output("error",n)},output(n,e){console&&console[n]&&console[n].apply(console,e)}};class Ws{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(e,t)}init(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=e||mm,this.options=t,this.debug=t.debug}log(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,"log","",!0)}warn(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,"warn","",!0)}error(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,"error","")}deprecate(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,"warn","WARNING DEPRECATED: ",!0)}forward(e,t,r,i){return i&&!this.debug?null:(typeof e[0]=="string"&&(e[0]=`${r}${this.prefix} ${e[0]}`),this.logger[t](e))}create(e){return new Ws(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return e=e||this.options,e.prefix=e.prefix||this.prefix,new Ws(this.logger,e)}}var Lr=new Ws;class Zs{constructor(){this.observers={}}on(e,t){return e.split(" ").forEach(r=>{this.observers[r]||(this.observers[r]=new Map);const i=this.observers[r].get(t)||0;this.observers[r].set(t,i+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}emit(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];this.observers[e]&&Array.from(this.observers[e].entries()).forEach(l=>{let[u,c]=l;for(let f=0;f<c;f++)u(...r)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(l=>{let[u,c]=l;for(let f=0;f<c;f++)u.apply(u,[e,...r])})}}const Ha=()=>{let n,e;const t=new Promise((r,i)=>{n=r,e=i});return t.resolve=n,t.reject=e,t},lh=n=>n==null?"":""+n,ym=(n,e,t)=>{n.forEach(r=>{e[r]&&(t[r]=e[r])})},xm=/###/g,uh=n=>n&&n.indexOf("###")>-1?n.replace(xm,"."):n,ch=n=>!n||typeof n=="string",Aa=(n,e,t)=>{const r=typeof e!="string"?e:e.split(".");let i=0;for(;i<r.length-1;){if(ch(n))return{};const s=uh(r[i]);!n[s]&&t&&(n[s]=new t),Object.prototype.hasOwnProperty.call(n,s)?n=n[s]:n={},++i}return ch(n)?{}:{obj:n,k:uh(r[i])}},dh=(n,e,t)=>{const{obj:r,k:i}=Aa(n,e,Object);if(r!==void 0||e.length===1){r[i]=t;return}let s=e[e.length-1],l=e.slice(0,e.length-1),u=Aa(n,l,Object);for(;u.obj===void 0&&l.length;)s=`${l[l.length-1]}.${s}`,l=l.slice(0,l.length-1),u=Aa(n,l,Object),u&&u.obj&&typeof u.obj[`${u.k}.${s}`]<"u"&&(u.obj=void 0);u.obj[`${u.k}.${s}`]=t},wm=(n,e,t,r)=>{const{obj:i,k:s}=Aa(n,e,Object);i[s]=i[s]||[],i[s].push(t)},Ys=(n,e)=>{const{obj:t,k:r}=Aa(n,e);if(t)return t[r]},Pm=(n,e,t)=>{const r=Ys(n,t);return r!==void 0?r:Ys(e,t)},fh=(n,e,t)=>{for(const r in e)r!=="__proto__"&&r!=="constructor"&&(r in n?typeof n[r]=="string"||n[r]instanceof String||typeof e[r]=="string"||e[r]instanceof String?t&&(n[r]=e[r]):fh(n[r],e[r],t):n[r]=e[r]);return n},Xi=n=>n.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var Cm={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};const km=n=>typeof n=="string"?n.replace(/[&<>"'\/]/g,e=>Cm[e]):n;class zm{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){const t=this.regExpMap.get(e);if(t!==void 0)return t;const r=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,r),this.regExpQueue.push(e),r}}const Hm=[" ",",","?","!",";"],Am=new zm(20),Dm=(n,e,t)=>{e=e||"",t=t||"";const r=Hm.filter(l=>e.indexOf(l)<0&&t.indexOf(l)<0);if(r.length===0)return!0;const i=Am.getRegExp(`(${r.map(l=>l==="?"?"\\?":l).join("|")})`);let s=!i.test(n);if(!s){const l=n.indexOf(t);l>0&&!i.test(n.substring(0,l))&&(s=!0)}return s},yu=function(n,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!n)return;if(n[e])return n[e];const r=e.split(t);let i=n;for(let s=0;s<r.length;){if(!i||typeof i!="object")return;let l,u="";for(let c=s;c<r.length;++c)if(c!==s&&(u+=t),u+=r[c],l=i[u],l!==void 0){if(["string","number","boolean"].indexOf(typeof l)>-1&&c<r.length-1)continue;s+=c-s+1;break}i=l}return i},Fs=n=>n&&n.replace("_","-");class ph extends Zs{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}removeNamespaces(e){const t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const s=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,l=i.ignoreJSONStructure!==void 0?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let u;e.indexOf(".")>-1?u=e.split("."):(u=[e,t],r&&(Array.isArray(r)?u.push(...r):typeof r=="string"&&s?u.push(...r.split(s)):u.push(r)));const c=Ys(this.data,u);return!c&&!t&&!r&&e.indexOf(".")>-1&&(e=u[0],t=u[1],r=u.slice(2).join(".")),c||!l||typeof r!="string"?c:yu(this.data&&this.data[e]&&this.data[e][t],r,s)}addResource(e,t,r,i){let s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const l=s.keySeparator!==void 0?s.keySeparator:this.options.keySeparator;let u=[e,t];r&&(u=u.concat(l?r.split(l):r)),e.indexOf(".")>-1&&(u=e.split("."),i=t,t=u[1]),this.addNamespaces(t),dh(this.data,u,i),s.silent||this.emit("added",e,t,r,i)}addResources(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const s in r)(typeof r[s]=="string"||Array.isArray(r[s]))&&this.addResource(e,t,s,r[s],{silent:!0});i.silent||this.emit("added",e,t,r)}addResourceBundle(e,t,r,i,s){let l=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1,skipCopy:!1},u=[e,t];e.indexOf(".")>-1&&(u=e.split("."),i=r,r=t,t=u[1]),this.addNamespaces(t);let c=Ys(this.data,u)||{};l.skipCopy||(r=JSON.parse(JSON.stringify(r))),i?fh(c,r,s):c={...c,...r},dh(this.data,u,c),l.silent||this.emit("added",e,t,r)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||(t=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(e,t)}:this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){const t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(i=>t[i]&&Object.keys(t[i]).length>0)}toJSON(){return this.data}}var hh={processors:{},addPostProcessor(n){this.processors[n.name]=n},handle(n,e,t,r,i){return n.forEach(s=>{this.processors[s]&&(e=this.processors[s].process(e,t,r,i))}),e}};const vh={};class Ns extends Zs{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),ym(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=Lr.create("translator")}changeLanguage(e){e&&(this.language=e)}exists(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(e==null)return!1;const r=this.resolve(e,t);return r&&r.res!==void 0}extractFromKey(e,t){let r=t.nsSeparator!==void 0?t.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const i=t.keySeparator!==void 0?t.keySeparator:this.options.keySeparator;let s=t.ns||this.options.defaultNS||[];const l=r&&e.indexOf(r)>-1,u=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!Dm(e,r,i);if(l&&!u){const c=e.match(this.interpolator.nestingRegexp);if(c&&c.length>0)return{key:e,namespaces:s};const f=e.split(r);(r!==i||r===i&&this.options.ns.indexOf(f[0])>-1)&&(s=f.shift()),e=f.join(i)}return typeof s=="string"&&(s=[s]),{key:e,namespaces:s}}translate(e,t,r){if(typeof t!="object"&&this.options.overloadTranslationOptionHandler&&(t=this.options.overloadTranslationOptionHandler(arguments)),typeof t=="object"&&(t={...t}),t||(t={}),e==null)return"";Array.isArray(e)||(e=[String(e)]);const i=t.returnDetails!==void 0?t.returnDetails:this.options.returnDetails,s=t.keySeparator!==void 0?t.keySeparator:this.options.keySeparator,{key:l,namespaces:u}=this.extractFromKey(e[e.length-1],t),c=u[u.length-1],f=t.lng||this.language,p=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(f&&f.toLowerCase()==="cimode"){if(p){const D=t.nsSeparator||this.options.nsSeparator;return i?{res:`${c}${D}${l}`,usedKey:l,exactUsedKey:l,usedLng:f,usedNS:c,usedParams:this.getUsedParamsDetails(t)}:`${c}${D}${l}`}return i?{res:l,usedKey:l,exactUsedKey:l,usedLng:f,usedNS:c,usedParams:this.getUsedParamsDetails(t)}:l}const h=this.resolve(e,t);let g=h&&h.res;const m=h&&h.usedKey||l,P=h&&h.exactUsedKey||l,x=Object.prototype.toString.apply(g),H=["[object Number]","[object Function]","[object RegExp]"],A=t.joinArrays!==void 0?t.joinArrays:this.options.joinArrays,w=!this.i18nFormat||this.i18nFormat.handleAsObject;if(w&&g&&(typeof g!="string"&&typeof g!="boolean"&&typeof g!="number")&&H.indexOf(x)<0&&!(typeof A=="string"&&Array.isArray(g))){if(!t.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const D=this.options.returnedObjectHandler?this.options.returnedObjectHandler(m,g,{...t,ns:u}):`key '${l} (${this.language})' returned an object instead of string.`;return i?(h.res=D,h.usedParams=this.getUsedParamsDetails(t),h):D}if(s){const D=Array.isArray(g),O=D?[]:{},j=D?P:m;for(const L in g)if(Object.prototype.hasOwnProperty.call(g,L)){const T=`${j}${s}${L}`;O[L]=this.translate(T,{...t,joinArrays:!1,ns:u}),O[L]===T&&(O[L]=g[L])}g=O}}else if(w&&typeof A=="string"&&Array.isArray(g))g=g.join(A),g&&(g=this.extendTranslation(g,e,t,r));else{let D=!1,O=!1;const j=t.count!==void 0&&typeof t.count!="string",L=Ns.hasDefaultValue(t),T=j?this.pluralResolver.getSuffix(f,t.count,t):"",X=t.ordinal&&j?this.pluralResolver.getSuffix(f,t.count,{ordinal:!1}):"",M=j&&!t.ordinal&&t.count===0&&this.pluralResolver.shouldUseIntlApi(),Y=M&&t[`defaultValue${this.options.pluralSeparator}zero`]||t[`defaultValue${T}`]||t[`defaultValue${X}`]||t.defaultValue;!this.isValidLookup(g)&&L&&(D=!0,g=Y),this.isValidLookup(g)||(O=!0,g=l);const V=(t.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&O?void 0:g,te=L&&Y!==g&&this.options.updateMissing;if(O||D||te){if(this.logger.log(te?"updateKey":"missingKey",f,c,l,te?Y:g),s){const Q=this.resolve(l,{...t,keySeparator:!1});Q&&Q.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let ne=[];const K=this.languageUtils.getFallbackCodes(this.options.fallbackLng,t.lng||this.language);if(this.options.saveMissingTo==="fallback"&&K&&K[0])for(let Q=0;Q<K.length;Q++)ne.push(K[Q]);else this.options.saveMissingTo==="all"?ne=this.languageUtils.toResolveHierarchy(t.lng||this.language):ne.push(t.lng||this.language);const re=(Q,Z,U)=>{const oe=L&&U!==g?U:V;this.options.missingKeyHandler?this.options.missingKeyHandler(Q,c,Z,oe,te,t):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(Q,c,Z,oe,te,t),this.emit("missingKey",Q,c,Z,g)};this.options.saveMissing&&(this.options.saveMissingPlurals&&j?ne.forEach(Q=>{const Z=this.pluralResolver.getSuffixes(Q,t);M&&t[`defaultValue${this.options.pluralSeparator}zero`]&&Z.indexOf(`${this.options.pluralSeparator}zero`)<0&&Z.push(`${this.options.pluralSeparator}zero`),Z.forEach(U=>{re([Q],l+U,t[`defaultValue${U}`]||Y)})}):re(ne,l,Y))}g=this.extendTranslation(g,e,t,h,r),O&&g===l&&this.options.appendNamespaceToMissingKey&&(g=`${c}:${l}`),(O||D)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?g=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${c}:${l}`:l,D?g:void 0):g=this.options.parseMissingKeyHandler(g))}return i?(h.res=g,h.usedParams=this.getUsedParamsDetails(t),h):g}extendTranslation(e,t,r,i,s){var l=this;if(this.i18nFormat&&this.i18nFormat.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const f=typeof e=="string"&&(r&&r.interpolation&&r.interpolation.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let p;if(f){const g=e.match(this.interpolator.nestingRegexp);p=g&&g.length}let h=r.replace&&typeof r.replace!="string"?r.replace:r;if(this.options.interpolation.defaultVariables&&(h={...this.options.interpolation.defaultVariables,...h}),e=this.interpolator.interpolate(e,h,r.lng||this.language||i.usedLng,r),f){const g=e.match(this.interpolator.nestingRegexp),m=g&&g.length;p<m&&(r.nest=!1)}!r.lng&&this.options.compatibilityAPI!=="v1"&&i&&i.res&&(r.lng=this.language||i.usedLng),r.nest!==!1&&(e=this.interpolator.nest(e,function(){for(var g=arguments.length,m=new Array(g),P=0;P<g;P++)m[P]=arguments[P];return s&&s[0]===m[0]&&!r.context?(l.logger.warn(`It seems you are nesting recursively key: ${m[0]} in key: ${t[0]}`),null):l.translate(...m,t)},r)),r.interpolation&&this.interpolator.reset()}const u=r.postProcess||this.options.postProcess,c=typeof u=="string"?[u]:u;return e!=null&&c&&c.length&&r.applyPostProcessor!==!1&&(e=hh.handle(c,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...i,usedParams:this.getUsedParamsDetails(r)},...r}:r,this)),e}resolve(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r,i,s,l,u;return typeof e=="string"&&(e=[e]),e.forEach(c=>{if(this.isValidLookup(r))return;const f=this.extractFromKey(c,t),p=f.key;i=p;let h=f.namespaces;this.options.fallbackNS&&(h=h.concat(this.options.fallbackNS));const g=t.count!==void 0&&typeof t.count!="string",m=g&&!t.ordinal&&t.count===0&&this.pluralResolver.shouldUseIntlApi(),P=t.context!==void 0&&(typeof t.context=="string"||typeof t.context=="number")&&t.context!=="",x=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);h.forEach(H=>{this.isValidLookup(r)||(u=H,!vh[`${x[0]}-${H}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(u)&&(vh[`${x[0]}-${H}`]=!0,this.logger.warn(`key "${i}" for languages "${x.join(", ")}" won't get resolved as namespace "${u}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),x.forEach(A=>{if(this.isValidLookup(r))return;l=A;const w=[p];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(w,p,A,H,t);else{let D;g&&(D=this.pluralResolver.getSuffix(A,t.count,t));const O=`${this.options.pluralSeparator}zero`,j=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(g&&(w.push(p+D),t.ordinal&&D.indexOf(j)===0&&w.push(p+D.replace(j,this.options.pluralSeparator)),m&&w.push(p+O)),P){const L=`${p}${this.options.contextSeparator}${t.context}`;w.push(L),g&&(w.push(L+D),t.ordinal&&D.indexOf(j)===0&&w.push(L+D.replace(j,this.options.pluralSeparator)),m&&w.push(L+O))}}let C;for(;C=w.pop();)this.isValidLookup(r)||(s=C,r=this.getResource(A,H,C,t))}))})}),{res:r,usedKey:i,exactUsedKey:s,usedLng:l,usedNS:u}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e==="")}getResource(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,t,r,i):this.resourceStore.getResource(e,t,r,i)}getUsedParamsDetails(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const t=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],r=e.replace&&typeof e.replace!="string";let i=r?e.replace:e;if(r&&typeof e.count<"u"&&(i.count=e.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!r){i={...i};for(const s of t)delete i[s]}return i}static hasDefaultValue(e){const t="defaultValue";for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&t===r.substring(0,t.length)&&e[r]!==void 0)return!0;return!1}}const xu=n=>n.charAt(0).toUpperCase()+n.slice(1);class gh{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Lr.create("languageUtils")}getScriptPartFromCode(e){if(e=Fs(e),!e||e.indexOf("-")<0)return null;const t=e.split("-");return t.length===2||(t.pop(),t[t.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(t.join("-"))}getLanguagePartFromCode(e){if(e=Fs(e),!e||e.indexOf("-")<0)return e;const t=e.split("-");return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(typeof e=="string"&&e.indexOf("-")>-1){if(typeof Intl<"u"&&typeof Intl.getCanonicalLocales<"u")try{let i=Intl.getCanonicalLocales(e)[0];if(i&&this.options.lowerCaseLng&&(i=i.toLowerCase()),i)return i}catch{}const t=["hans","hant","latn","cyrl","cans","mong","arab"];let r=e.split("-");return this.options.lowerCaseLng?r=r.map(i=>i.toLowerCase()):r.length===2?(r[0]=r[0].toLowerCase(),r[1]=r[1].toUpperCase(),t.indexOf(r[1].toLowerCase())>-1&&(r[1]=xu(r[1].toLowerCase()))):r.length===3&&(r[0]=r[0].toLowerCase(),r[1].length===2&&(r[1]=r[1].toUpperCase()),r[0]!=="sgn"&&r[2].length===2&&(r[2]=r[2].toUpperCase()),t.indexOf(r[1].toLowerCase())>-1&&(r[1]=xu(r[1].toLowerCase())),t.indexOf(r[2].toLowerCase())>-1&&(r[2]=xu(r[2].toLowerCase()))),r.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(r=>{if(t)return;const i=this.formatLanguageCode(r);(!this.options.supportedLngs||this.isSupportedCode(i))&&(t=i)}),!t&&this.options.supportedLngs&&e.forEach(r=>{if(t)return;const i=this.getLanguagePartFromCode(r);if(this.isSupportedCode(i))return t=i;t=this.options.supportedLngs.find(s=>{if(s===i)return s;if(!(s.indexOf("-")<0&&i.indexOf("-")<0)&&(s.indexOf("-")>0&&i.indexOf("-")<0&&s.substring(0,s.indexOf("-"))===i||s.indexOf(i)===0&&i.length>1))return s})}),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t}getFallbackCodes(e,t){if(!e)return[];if(typeof e=="function"&&(e=e(t)),typeof e=="string"&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let r=e[t];return r||(r=e[this.getScriptPartFromCode(t)]),r||(r=e[this.formatLanguageCode(t)]),r||(r=e[this.getLanguagePartFromCode(t)]),r||(r=e.default),r||[]}toResolveHierarchy(e,t){const r=this.getFallbackCodes(t||this.options.fallbackLng||[],e),i=[],s=l=>{l&&(this.isSupportedCode(l)?i.push(l):this.logger.warn(`rejecting language code not found in supportedLngs: ${l}`))};return typeof e=="string"&&(e.indexOf("-")>-1||e.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&s(this.formatLanguageCode(e)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&s(this.getScriptPartFromCode(e)),this.options.load!=="currentOnly"&&s(this.getLanguagePartFromCode(e))):typeof e=="string"&&s(this.formatLanguageCode(e)),r.forEach(l=>{i.indexOf(l)<0&&s(this.formatLanguageCode(l))}),i}}let Om=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],Xm={1:n=>+(n>1),2:n=>+(n!=1),3:n=>0,4:n=>n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2,5:n=>n==0?0:n==1?1:n==2?2:n%100>=3&&n%100<=10?3:n%100>=11?4:5,6:n=>n==1?0:n>=2&&n<=4?1:2,7:n=>n==1?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2,8:n=>n==1?0:n==2?1:n!=8&&n!=11?2:3,9:n=>+(n>=2),10:n=>n==1?0:n==2?1:n<7?2:n<11?3:4,11:n=>n==1||n==11?0:n==2||n==12?1:n>2&&n<20?2:3,12:n=>+(n%10!=1||n%100==11),13:n=>+(n!==0),14:n=>n==1?0:n==2?1:n==3?2:3,15:n=>n%10==1&&n%100!=11?0:n%10>=2&&(n%100<10||n%100>=20)?1:2,16:n=>n%10==1&&n%100!=11?0:n!==0?1:2,17:n=>n==1||n%10==1&&n%100!=11?0:1,18:n=>n==0?0:n==1?1:2,19:n=>n==1?0:n==0||n%100>1&&n%100<11?1:n%100>10&&n%100<20?2:3,20:n=>n==1?0:n==0||n%100>0&&n%100<20?1:2,21:n=>n%100==1?1:n%100==2?2:n%100==3||n%100==4?3:0,22:n=>n==1?0:n==2?1:(n<0||n>10)&&n%10==0?2:3};const Em=["v1","v2","v3"],Lm=["v4"],bh={zero:0,one:1,two:2,few:3,many:4,other:5},Bm=()=>{const n={};return Om.forEach(e=>{e.lngs.forEach(t=>{n[t]={numbers:e.nr,plurals:Xm[e.fc]}})}),n};class jm{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=e,this.options=t,this.logger=Lr.create("pluralResolver"),(!this.options.compatibilityJSON||Lm.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=Bm(),this.pluralRulesCache={}}addRule(e,t){this.rules[e]=t}clearCache(){this.pluralRulesCache={}}getRule(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{const r=Fs(e==="dev"?"en":e),i=t.ordinal?"ordinal":"cardinal",s=JSON.stringify({cleanedCode:r,type:i});if(s in this.pluralRulesCache)return this.pluralRulesCache[s];const l=new Intl.PluralRules(r,{type:i});return this.pluralRulesCache[s]=l,l}catch{return}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}needsPlural(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(e,t);return this.shouldUseIntlApi()?r&&r.resolvedOptions().pluralCategories.length>1:r&&r.numbers.length>1}getPluralFormsOfKey(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(e,r).map(i=>`${t}${i}`)}getSuffixes(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(e,t);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort((i,s)=>bh[i]-bh[s]).map(i=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:""}${i}`):r.numbers.map(i=>this.getSuffix(e,i,t)):[]}getSuffix(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const i=this.getRule(e,r);return i?this.shouldUseIntlApi()?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:""}${i.select(t)}`:this.getSuffixRetroCompatible(i,t):(this.logger.warn(`no plural rule found for: ${e}`),"")}getSuffixRetroCompatible(e,t){const r=e.noAbs?e.plurals(t):e.plurals(Math.abs(t));let i=e.numbers[r];this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1&&(i===2?i="plural":i===1&&(i=""));const s=()=>this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString();return this.options.compatibilityJSON==="v1"?i===1?"":typeof i=="number"?`_plural_${i.toString()}`:s():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1?s():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}shouldUseIntlApi(){return!Em.includes(this.options.compatibilityJSON)}}const mh=function(n,e,t){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=Pm(n,e,t);return!s&&i&&typeof t=="string"&&(s=yu(n,t,r),s===void 0&&(s=yu(e,t,r))),s},wu=n=>n.replace(/\$/g,"$$$$");class Tm{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Lr.create("interpolator"),this.options=e,this.format=e.interpolation&&e.interpolation.format||(t=>t),this.init(e)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});const{escape:t,escapeValue:r,useRawValueToEscape:i,prefix:s,prefixEscaped:l,suffix:u,suffixEscaped:c,formatSeparator:f,unescapeSuffix:p,unescapePrefix:h,nestingPrefix:g,nestingPrefixEscaped:m,nestingSuffix:P,nestingSuffixEscaped:x,nestingOptionsSeparator:H,maxReplaces:A,alwaysFormat:w}=e.interpolation;this.escape=t!==void 0?t:km,this.escapeValue=r!==void 0?r:!0,this.useRawValueToEscape=i!==void 0?i:!1,this.prefix=s?Xi(s):l||"{{",this.suffix=u?Xi(u):c||"}}",this.formatSeparator=f||",",this.unescapePrefix=p?"":h||"-",this.unescapeSuffix=this.unescapePrefix?"":p||"",this.nestingPrefix=g?Xi(g):m||Xi("$t("),this.nestingSuffix=P?Xi(P):x||Xi(")"),this.nestingOptionsSeparator=H||",",this.maxReplaces=A||1e3,this.alwaysFormat=w!==void 0?w:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const e=(t,r)=>t&&t.source===r?(t.lastIndex=0,t):new RegExp(r,"g");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(e,t,r,i){let s,l,u;const c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},f=m=>{if(m.indexOf(this.formatSeparator)<0){const A=mh(t,c,m,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(A,void 0,r,{...i,...t,interpolationkey:m}):A}const P=m.split(this.formatSeparator),x=P.shift().trim(),H=P.join(this.formatSeparator).trim();return this.format(mh(t,c,x,this.options.keySeparator,this.options.ignoreJSONStructure),H,r,{...i,...t,interpolationkey:x})};this.resetRegExp();const p=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,h=i&&i.interpolation&&i.interpolation.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:m=>wu(m)},{regex:this.regexp,safeValue:m=>this.escapeValue?wu(this.escape(m)):wu(m)}].forEach(m=>{for(u=0;s=m.regex.exec(e);){const P=s[1].trim();if(l=f(P),l===void 0)if(typeof p=="function"){const H=p(e,s,i);l=typeof H=="string"?H:""}else if(i&&Object.prototype.hasOwnProperty.call(i,P))l="";else if(h){l=s[0];continue}else this.logger.warn(`missed to pass in variable ${P} for interpolating ${e}`),l="";else typeof l!="string"&&!this.useRawValueToEscape&&(l=lh(l));const x=m.safeValue(l);if(e=e.replace(s[0],x),h?(m.regex.lastIndex+=l.length,m.regex.lastIndex-=s[0].length):m.regex.lastIndex=0,u++,u>=this.maxReplaces)break}}),e}nest(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i,s,l;const u=(c,f)=>{const p=this.nestingOptionsSeparator;if(c.indexOf(p)<0)return c;const h=c.split(new RegExp(`${p}[ ]*{`));let g=`{${h[1]}`;c=h[0],g=this.interpolate(g,l);const m=g.match(/'/g),P=g.match(/"/g);(m&&m.length%2===0&&!P||P.length%2!==0)&&(g=g.replace(/'/g,'"'));try{l=JSON.parse(g),f&&(l={...f,...l})}catch(x){return this.logger.warn(`failed parsing options string in nesting for key ${c}`,x),`${c}${p}${g}`}return l.defaultValue&&l.defaultValue.indexOf(this.prefix)>-1&&delete l.defaultValue,c};for(;i=this.nestingRegexp.exec(e);){let c=[];l={...r},l=l.replace&&typeof l.replace!="string"?l.replace:l,l.applyPostProcessor=!1,delete l.defaultValue;let f=!1;if(i[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(i[1])){const p=i[1].split(this.formatSeparator).map(h=>h.trim());i[1]=p.shift(),c=p,f=!0}if(s=t(u.call(this,i[1].trim(),l),l),s&&i[0]===e&&typeof s!="string")return s;typeof s!="string"&&(s=lh(s)),s||(this.logger.warn(`missed to resolve ${i[1]} for nesting ${e}`),s=""),f&&(s=c.reduce((p,h)=>this.format(p,h,r.lng,{...r,interpolationkey:i[1].trim()}),s.trim())),e=e.replace(i[0],s),this.regexp.lastIndex=0}return e}}const Im=n=>{let e=n.toLowerCase().trim();const t={};if(n.indexOf("(")>-1){const r=n.split("(");e=r[0].toLowerCase().trim();const i=r[1].substring(0,r[1].length-1);e==="currency"&&i.indexOf(":")<0?t.currency||(t.currency=i.trim()):e==="relativetime"&&i.indexOf(":")<0?t.range||(t.range=i.trim()):i.split(";").forEach(l=>{if(l){const[u,...c]=l.split(":"),f=c.join(":").trim().replace(/^'+|'+$/g,""),p=u.trim();t[p]||(t[p]=f),f==="false"&&(t[p]=!1),f==="true"&&(t[p]=!0),isNaN(f)||(t[p]=parseInt(f,10))}})}return{formatName:e,formatOptions:t}},Ei=n=>{const e={};return(t,r,i)=>{let s=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(s={...s,[i.interpolationkey]:void 0});const l=r+JSON.stringify(s);let u=e[l];return u||(u=n(Fs(r),i),e[l]=u),u(t)}};class Sm{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Lr.create("formatter"),this.options=e,this.formats={number:Ei((t,r)=>{const i=new Intl.NumberFormat(t,{...r});return s=>i.format(s)}),currency:Ei((t,r)=>{const i=new Intl.NumberFormat(t,{...r,style:"currency"});return s=>i.format(s)}),datetime:Ei((t,r)=>{const i=new Intl.DateTimeFormat(t,{...r});return s=>i.format(s)}),relativetime:Ei((t,r)=>{const i=new Intl.RelativeTimeFormat(t,{...r});return s=>i.format(s,r.range||"day")}),list:Ei((t,r)=>{const i=new Intl.ListFormat(t,{...r});return s=>i.format(s)})},this.init(e)}init(e){const r=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||","}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=Ei(t)}format(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const s=t.split(this.formatSeparator);if(s.length>1&&s[0].indexOf("(")>1&&s[0].indexOf(")")<0&&s.find(u=>u.indexOf(")")>-1)){const u=s.findIndex(c=>c.indexOf(")")>-1);s[0]=[s[0],...s.splice(1,u)].join(this.formatSeparator)}return s.reduce((u,c)=>{const{formatName:f,formatOptions:p}=Im(c);if(this.formats[f]){let h=u;try{const g=i&&i.formatParams&&i.formatParams[i.interpolationkey]||{},m=g.locale||g.lng||i.locale||i.lng||r;h=this.formats[f](u,m,{...p,...i,...g})}catch(g){this.logger.warn(g)}return h}else this.logger.warn(`there was no format function for ${f}`);return u},e)}}const Mm=(n,e)=>{n.pending[e]!==void 0&&(delete n.pending[e],n.pendingCount--)};class Wm extends Zs{constructor(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=e,this.store=t,this.services=r,this.languageUtils=r.languageUtils,this.options=i,this.logger=Lr.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(r,i.backend,i)}queueLoad(e,t,r,i){const s={},l={},u={},c={};return e.forEach(f=>{let p=!0;t.forEach(h=>{const g=`${f}|${h}`;!r.reload&&this.store.hasResourceBundle(f,h)?this.state[g]=2:this.state[g]<0||(this.state[g]===1?l[g]===void 0&&(l[g]=!0):(this.state[g]=1,p=!1,l[g]===void 0&&(l[g]=!0),s[g]===void 0&&(s[g]=!0),c[h]===void 0&&(c[h]=!0)))}),p||(u[f]=!0)}),(Object.keys(s).length||Object.keys(l).length)&&this.queue.push({pending:l,pendingCount:Object.keys(l).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(s),pending:Object.keys(l),toLoadLanguages:Object.keys(u),toLoadNamespaces:Object.keys(c)}}loaded(e,t,r){const i=e.split("|"),s=i[0],l=i[1];t&&this.emit("failedLoading",s,l,t),!t&&r&&this.store.addResourceBundle(s,l,r,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&r&&(this.state[e]=0);const u={};this.queue.forEach(c=>{wm(c.loaded,[s],l),Mm(c,e),t&&c.errors.push(t),c.pendingCount===0&&!c.done&&(Object.keys(c.loaded).forEach(f=>{u[f]||(u[f]={});const p=c.loaded[f];p.length&&p.forEach(h=>{u[f][h]===void 0&&(u[f][h]=!0)})}),c.done=!0,c.errors.length?c.callback(c.errors):c.callback())}),this.emit("loaded",u),this.queue=this.queue.filter(c=>!c.done)}read(e,t,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,l=arguments.length>5?arguments[5]:void 0;if(!e.length)return l(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:r,tried:i,wait:s,callback:l});return}this.readingCalls++;const u=(f,p)=>{if(this.readingCalls--,this.waitingReads.length>0){const h=this.waitingReads.shift();this.read(h.lng,h.ns,h.fcName,h.tried,h.wait,h.callback)}if(f&&p&&i<this.maxRetries){setTimeout(()=>{this.read.call(this,e,t,r,i+1,s*2,l)},s);return}l(f,p)},c=this.backend[r].bind(this.backend);if(c.length===2){try{const f=c(e,t);f&&typeof f.then=="function"?f.then(p=>u(null,p)).catch(u):u(null,f)}catch(f){u(f)}return}return c(e,t,u)}prepareLoading(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();typeof e=="string"&&(e=this.languageUtils.toResolveHierarchy(e)),typeof t=="string"&&(t=[t]);const s=this.queueLoad(e,t,r,i);if(!s.toLoad.length)return s.pending.length||i(),null;s.toLoad.forEach(l=>{this.loadOne(l)})}load(e,t,r){this.prepareLoading(e,t,{},r)}reload(e,t,r){this.prepareLoading(e,t,{reload:!0},r)}loadOne(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const r=e.split("|"),i=r[0],s=r[1];this.read(i,s,"read",void 0,void 0,(l,u)=>{l&&this.logger.warn(`${t}loading namespace ${s} for language ${i} failed`,l),!l&&u&&this.logger.log(`${t}loaded namespace ${s} for language ${i}`,u),this.loaded(e,l,u)})}saveMissing(e,t,r,i,s){let l=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},u=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${r}" as the namespace "${t}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(r==null||r==="")){if(this.backend&&this.backend.create){const c={...l,isUpdate:s},f=this.backend.create.bind(this.backend);if(f.length<6)try{let p;f.length===5?p=f(e,t,r,i,c):p=f(e,t,r,i),p&&typeof p.then=="function"?p.then(h=>u(null,h)).catch(u):u(null,p)}catch(p){u(p)}else f(e,t,r,i,u,c)}!e||!e[0]||this.store.addResource(e[0],t,r,i)}}}const yh=()=>({debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:n=>{let e={};if(typeof n[1]=="object"&&(e=n[1]),typeof n[1]=="string"&&(e.defaultValue=n[1]),typeof n[2]=="string"&&(e.tDescription=n[2]),typeof n[2]=="object"||typeof n[3]=="object"){const t=n[3]||n[2];Object.keys(t).forEach(r=>{e[r]=t[r]})}return e},interpolation:{escapeValue:!0,format:n=>n,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}),xh=n=>(typeof n.ns=="string"&&(n.ns=[n.ns]),typeof n.fallbackLng=="string"&&(n.fallbackLng=[n.fallbackLng]),typeof n.fallbackNS=="string"&&(n.fallbackNS=[n.fallbackNS]),n.supportedLngs&&n.supportedLngs.indexOf("cimode")<0&&(n.supportedLngs=n.supportedLngs.concat(["cimode"])),n),Rs=()=>{},Zm=n=>{Object.getOwnPropertyNames(Object.getPrototypeOf(n)).forEach(t=>{typeof n[t]=="function"&&(n[t]=n[t].bind(n))})};class Da extends Zs{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;if(super(),this.options=xh(e),this.services={},this.logger=Lr,this.modules={external:[]},Zm(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initImmediate)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,typeof t=="function"&&(r=t,t={}),!t.defaultNS&&t.defaultNS!==!1&&t.ns&&(typeof t.ns=="string"?t.defaultNS=t.ns:t.ns.indexOf("translation")<0&&(t.defaultNS=t.ns[0]));const i=yh();this.options={...i,...this.options,...xh(t)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...i.interpolation,...this.options.interpolation}),t.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=t.keySeparator),t.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=t.nsSeparator);const s=p=>p?typeof p=="function"?new p:p:null;if(!this.options.isClone){this.modules.logger?Lr.init(s(this.modules.logger),this.options):Lr.init(null,this.options);let p;this.modules.formatter?p=this.modules.formatter:typeof Intl<"u"&&(p=Sm);const h=new gh(this.options);this.store=new ph(this.options.resources,this.options);const g=this.services;g.logger=Lr,g.resourceStore=this.store,g.languageUtils=h,g.pluralResolver=new jm(h,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),p&&(!this.options.interpolation.format||this.options.interpolation.format===i.interpolation.format)&&(g.formatter=s(p),g.formatter.init(g,this.options),this.options.interpolation.format=g.formatter.format.bind(g.formatter)),g.interpolator=new Tm(this.options),g.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},g.backendConnector=new Wm(s(this.modules.backend),g.resourceStore,g,this.options),g.backendConnector.on("*",function(m){for(var P=arguments.length,x=new Array(P>1?P-1:0),H=1;H<P;H++)x[H-1]=arguments[H];e.emit(m,...x)}),this.modules.languageDetector&&(g.languageDetector=s(this.modules.languageDetector),g.languageDetector.init&&g.languageDetector.init(g,this.options.detection,this.options)),this.modules.i18nFormat&&(g.i18nFormat=s(this.modules.i18nFormat),g.i18nFormat.init&&g.i18nFormat.init(this)),this.translator=new Ns(this.services,this.options),this.translator.on("*",function(m){for(var P=arguments.length,x=new Array(P>1?P-1:0),H=1;H<P;H++)x[H-1]=arguments[H];e.emit(m,...x)}),this.modules.external.forEach(m=>{m.init&&m.init(this)})}if(this.format=this.options.interpolation.format,r||(r=Rs),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const p=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);p.length>0&&p[0]!=="dev"&&(this.options.lng=p[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(p=>{this[p]=function(){return e.store[p](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(p=>{this[p]=function(){return e.store[p](...arguments),e}});const c=Ha(),f=()=>{const p=(h,g)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),c.resolve(g),r(h,g)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return p(null,this.t.bind(this));this.changeLanguage(this.options.lng,p)};return this.options.resources||!this.options.initImmediate?f():setTimeout(f,0),c}loadResources(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Rs;const i=typeof e=="string"?e:this.language;if(typeof e=="function"&&(r=e),!this.options.resources||this.options.partialBundledLanguages){if(i&&i.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return r();const s=[],l=u=>{if(!u||u==="cimode")return;this.services.languageUtils.toResolveHierarchy(u).forEach(f=>{f!=="cimode"&&s.indexOf(f)<0&&s.push(f)})};i?l(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(c=>l(c)),this.options.preload&&this.options.preload.forEach(u=>l(u)),this.services.backendConnector.load(s,this.options.ns,u=>{!u&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(u)})}else r(null)}reloadResources(e,t,r){const i=Ha();return typeof e=="function"&&(r=e,e=void 0),typeof t=="function"&&(r=t,t=void 0),e||(e=this.languages),t||(t=this.options.ns),r||(r=Rs),this.services.backendConnector.reload(e,t,s=>{i.resolve(),r(s)}),i}use(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return e.type==="backend"&&(this.modules.backend=e),(e.type==="logger"||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type==="languageDetector"&&(this.modules.languageDetector=e),e.type==="i18nFormat"&&(this.modules.i18nFormat=e),e.type==="postProcessor"&&hh.addPostProcessor(e),e.type==="formatter"&&(this.modules.formatter=e),e.type==="3rdParty"&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&!(["cimode","dev"].indexOf(e)>-1))for(let t=0;t<this.languages.length;t++){const r=this.languages[t];if(!(["cimode","dev"].indexOf(r)>-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}}changeLanguage(e,t){var r=this;this.isLanguageChangingTo=e;const i=Ha();this.emit("languageChanging",e);const s=c=>{this.language=c,this.languages=this.services.languageUtils.toResolveHierarchy(c),this.resolvedLanguage=void 0,this.setResolvedLanguage(c)},l=(c,f)=>{f?(s(f),this.translator.changeLanguage(f),this.isLanguageChangingTo=void 0,this.emit("languageChanged",f),this.logger.log("languageChanged",f)):this.isLanguageChangingTo=void 0,i.resolve(function(){return r.t(...arguments)}),t&&t(c,function(){return r.t(...arguments)})},u=c=>{!e&&!c&&this.services.languageDetector&&(c=[]);const f=typeof c=="string"?c:this.services.languageUtils.getBestMatchFromCodes(c);f&&(this.language||s(f),this.translator.language||this.translator.changeLanguage(f),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(f)),this.loadResources(f,p=>{l(p,f)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?u(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(u):this.services.languageDetector.detect(u):u(e),i}getFixedT(e,t,r){var i=this;const s=function(l,u){let c;if(typeof u!="object"){for(var f=arguments.length,p=new Array(f>2?f-2:0),h=2;h<f;h++)p[h-2]=arguments[h];c=i.options.overloadTranslationOptionHandler([l,u].concat(p))}else c={...u};c.lng=c.lng||s.lng,c.lngs=c.lngs||s.lngs,c.ns=c.ns||s.ns,c.keyPrefix!==""&&(c.keyPrefix=c.keyPrefix||r||s.keyPrefix);const g=i.options.keySeparator||".";let m;return c.keyPrefix&&Array.isArray(l)?m=l.map(P=>`${c.keyPrefix}${g}${P}`):m=c.keyPrefix?`${c.keyPrefix}${g}${l}`:l,i.t(m,c)};return typeof e=="string"?s.lng=e:s.lngs=e,s.ns=t,s.keyPrefix=r,s}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=t.lng||this.resolvedLanguage||this.languages[0],i=this.options?this.options.fallbackLng:!1,s=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const l=(u,c)=>{const f=this.services.backendConnector.state[`${u}|${c}`];return f===-1||f===0||f===2};if(t.precheck){const u=t.precheck(this,l);if(u!==void 0)return u}return!!(this.hasResourceBundle(r,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||l(r,e)&&(!i||l(s,e)))}loadNamespaces(e,t){const r=Ha();return this.options.ns?(typeof e=="string"&&(e=[e]),e.forEach(i=>{this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}),this.loadResources(i=>{r.resolve(),t&&t(i)}),r):(t&&t(),Promise.resolve())}loadLanguages(e,t){const r=Ha();typeof e=="string"&&(e=[e]);const i=this.options.preload||[],s=e.filter(l=>i.indexOf(l)<0&&this.services.languageUtils.isSupportedCode(l));return s.length?(this.options.preload=i.concat(s),this.loadResources(l=>{r.resolve(),t&&t(l)}),r):(t&&t(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!e)return"rtl";const t=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],r=this.services&&this.services.languageUtils||new gh(yh());return t.indexOf(r.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return new Da(e,t)}cloneInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Rs;const r=e.forkResourceStore;r&&delete e.forkResourceStore;const i={...this.options,...e,isClone:!0},s=new Da(i);return(e.debug!==void 0||e.prefix!==void 0)&&(s.logger=s.logger.clone(e)),["store","services","language"].forEach(u=>{s[u]=this[u]}),s.services={...this.services},s.services.utils={hasLoadedNamespace:s.hasLoadedNamespace.bind(s)},r&&(s.store=new ph(this.store.data,i),s.services.resourceStore=s.store),s.translator=new Ns(s.services,i),s.translator.on("*",function(u){for(var c=arguments.length,f=new Array(c>1?c-1:0),p=1;p<c;p++)f[p-1]=arguments[p];s.emit(u,...f)}),s.init(i,t),s.translator.options=i,s.translator.backendConnector.services.utils={hasLoadedNamespace:s.hasLoadedNamespace.bind(s)},s}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const bt=Da.createInstance();bt.createInstance=Da.createInstance,bt.createInstance,bt.dir,bt.init,bt.loadResources,bt.reloadResources,bt.use,bt.changeLanguage,bt.getFixedT,bt.t,bt.exists,bt.setDefaultNamespace,bt.hasLoadedNamespace,bt.loadNamespaces,bt.loadLanguages;const Ym={de:{translation:{bikematrix_poweredby:"Angetrieben von Bike Matrix",bikeselector_addbike_brand_desc:"Die Marke deines Fahrrads ist normalerweise in den unten hervorgehobenen Bereichen zu finden.",bikeselector_addbike_brand_label:"Marke",bikeselector_addbike_brand_select:"Deine Fahrradmarke auswählen",bikeselector_addbike_find_btn:"Mein Fahrrad finden",bikeselector_addbike_framespec_desc:"Deine Rahmenspezifikation ist normalerweise in den unten hervorgehobenen Bereichen zu finden.",bikeselector_addbike_framespec_label:"Rahmenspezifikation",bikeselector_addbike_framespec_select:"Die Rahmenspezifikation deines Fahrrads auswählen",bikeselector_addbike_model_desc:"Dein Fahrradmodell ist normalerweise in den unten hervorgehobenen Bereichen zu finden.",bikeselector_addbike_model_label:"Modell",bikeselector_addbike_model_select:"Dein Fahrradmodell auswählen",bikeselector_addbike_title:"Fahrrad hinzufügen",bikeselector_browse_back_btn:"Zurück zur Bike-Lounge",bikeselector_browse_products_label:"Kompatible Produkte shoppen",bikeselector_browse_shop_btn:"Produkte shoppen",bikeselector_browse_title:"Mit dem Einkauf beginnen!",bikeselector_confirm_brandmodelframespec_label:"Marke, Modell, Rahmenspezifikation",bikeselector_confirm_confirm_btn:"Ja, das ist mein Fahrrad!",bikeselector_confirm_framesize_label:"Rahmengröße",bikeselector_confirm_notyourride_msg:"Nicht dein Fahrrad? Um eine Änderung vorzunehmen, wähle oben ein Feld aus.",bikeselector_confirm_title:"Dein Fahrrad bestätigen",bikeselector_confirm_yearbikespec_label:"Jahr, Ausstattungsvariante",bikeselector_home_add_a_bike:"Füge zunächst unten ein Fahrrad hinzu …",bikeselector_home_add_btn:"Fahrrad hinzufügen",bikeselector_home_browse_btn:"Kompatibilität prüfen",bikeselector_home_close_btn:"Schließen",bikeselector_home_empty:"Deine Lounge ist leer!",bikeselector_home_footer_message:"Fahrradhersteller können die Spezifikationen ihrer Fahrräder ohne vorherige Ankündigung ändern. Abweichungen gegenüber der Serienausstattung können Auswirkungen auf die Kompatibilität haben.",bikeselector_home_title:"Meine Bike-Lounge",bikeselector_search_bikespec_label:"Ausstattungsvariante",bikeselector_search_bikespec_select:"Ausstattungsvariante wählen",bikeselector_search_bikespec_select_all:"Alle",bikeselector_search_confirm_btn:"Auswahl bestätigen",bikeselector_search_no_bikes_found:"Keine Fahrräder gefunden",bikeselector_search_number_bikes_found:"{{number_found}} Fahrräder gefunden",bikeselector_search_one_bike_found:"1 Fahrrad gefunden",bikeselector_search_searching:"Suche läuft …",bikeselector_search_title:"Fahrradsuche",bikeselector_search_year_label:"Jahr",bikeselector_size_confirm_btn:"Größe bestätigen",bikeselector_size_framesize_desc:"Die Rahmengröße deines Fahrrads ist normalerweise in den unten hervorgehobenen Bereichen zu finden.",bikeselector_size_framesize_label:"Rahmengröße",bikeselector_size_framesize_one_size:"Einheitsgröße",bikeselector_size_framesize_select:"Deine Rahmengröße wählen",bikeselector_size_title:"Deine Größe wählen",cancel:"Abbrechen",category_brakeadapterrear:"Bremsadapter hinten",category_brakecaliperrear:"Bremssattel hinten",category_brakecaliperfront:"Bremssattel vorne",category_brakeleverlh:"Bremshebel links",category_brakeleverrh:"Bremshebel rechts",category_brakepadsfront:"Bremsbeläge vorne",category_brakepadsrear:"Bremsbeläge hinten",category_brakerotorfront:"Bremsscheibe vorne",category_brakes:"Bremsen",category_chainringspider:"Kettenblatt-Spider",category_cockpit:"Cockpit",category_drivetrain:"Antriebsstrang",category_framefork:"Rahmen und Gabel",category_largestchainring:"Größtes Kettenblatt",category_secondlargestchainring:"Zweitgrößtes Kettenblatt",category_shifteradapterlh:"Schalthebeladapter für die linke Hand",category_shifteradapterrh:"Schalthebeladapter rechts",category_shifterbrakecombolh:"Schalthebel-Bremskombination links",category_shifterbrakecomborh:"Schalthebel-Bremskombination rechts",category_shifterlh:"Schalthebel für die linke Hand",category_shifterrh:"Schalthebel rechts",category_thirdlargestchainring:"Drittgrößtes Kettenblatt",category_tyrefront:"Reifen vorne",category_tyrerear:"Reifen hinten",category_wheelstyres:"Räder und Reifen",category_brakeadapterfront:"Bremsadapter vorne",category_brakerotorrear:"Bremsscheibe hinten",compatible:"Kompatibel",compatible_check_notes:"Kompatibel – Notizen prüfen",compatiblelist_header:"Kompatible Produkte",compatiblelist_nobikeselected:"Kein Fahrrad ausgewählt. Hier klicken, um dein Fahrrad zur Suche nach kompatiblen Teilen hinzuzufügen",compatiblelist_noresults:"Keine kompatiblen Produkte gefunden",compatiblelist_pageone:"Alle für dein Fahrrad kompatiblen Produkte können <a>hier</a> eingesehen werden.",compatiblelist_unavailable:"Kompatibilität für diese Produktkategorie ist für deine gewählte Fahrradmarke demnächst verfügbar!",confirm:"Bestätigen",copy:"Kopieren",edit:"Bearbeiten",error_add_component:"Die Komponente wurde vom Fahrrad wohl abgelehnt. Versuche es erneut, aber dieses Mal mit mehr Nachdruck.",error_add_custom_bike:"Ups! Wir konnten dein Custom-Bike nicht erstellen. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_find_products:"Hmmm … Heute ist bei uns wohl ein wenig Sand im Getriebe. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_find_products_no_results:"Hmmm … Wir können das Produkt nicht finden. Versuche eine andere Modellnummer und korrigiere die Schreibweise.",error_generic:"Es gab einen Fehler am Endpunkt – {{endpoint_location}}",error_get_bike_bom:"Das ist uns peinlich! Leider konnte deine Fahrradkonfiguration nicht abgerufen werden. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_invalid_email:"Dies ist scheinbar keine gültige E-Mail-Adresse. Hast du eine andere Option?",error_remove_component:"Diese Komponente will anscheinend am Fahrrad bleiben. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_revert_component:"Diese Komponente will anscheinend am Fahrrad bleiben. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_save_custom_bike:"Leider wurde dein Fahrrad nicht gespeichert. Versuche es erneut und tritt diesmal etwas kräftiger in die Pedale.",error_update_custom_bike:"Oh, das hat nicht geklappt. Sorry! Bitte klicke auf „Aktualisieren“ und versuche es erneut.",error_update_custom_bike_name:"Der Name deines Fahrrads konnte nicht geändert werden. Vielleicht mag es den neuen Namen nicht. Bitte klicke auf „Aktualisieren“ und versuche es erneut.",not_compatible:"Nicht kompatibel",onboarding_explore:"Gehen Sie entdecken",onboarding_green_spanner:"Suchen Sie nach dem Grünen Schraubenschlüssel",onboarding_green_spanner_description:"Wenn eine Komponente einen grünen Schraubenschlüssel hat, kann sie ausgetauscht oder komplett aus dem Build entfernt werden.",onboarding_linked_components:"Verknüpfte Komponenten verstehen",onboarding_linked_components_description:"Einige Teile (z. B. Kurbelgarnitur + Tretlager) sind miteinander verbunden. Um eines auszutauschen, müssen Sie möglicherweise beide entfernen – andernfalls markiert das System es möglicherweise als inkompatibel.",onboarding_next:"Nächste",onboarding_open_bike_build:"Öffnen Sie Ihren Fahrradaufbau",onboarding_open_bike_build_description:"Erweitern Sie beim Anzeigen Ihres Fahrradaufbaus die Komponentengruppen, um die Komponenten anzuzeigen, die für Ihr Fahrrad gelten.",onboarding_preview:"Vorschau anzeigen oder Änderungen speichern",onboarding_preview_description:"Sie können Komponenten austauschen/entfernen und Änderungen bestätigen, um Upgrades zu erkunden. Diese können vor dem Speichern jederzeit rückgängig gemacht werden. Nach dem Speichern können Änderungen nicht mehr rückgängig gemacht, sondern nur entfernt oder erneut ersetzt werden.",onboarding_replacement:"Wählen Sie den richtigen Ersatz",onboarding_replacement_description:"Verwenden Sie zur Suche den Barcode oder die Teilenummer des Herstellers (auf der Verpackung oder Ihrer Rechnung). Sie können auch die Modellnummer verwenden, überprüfen Sie dies jedoch noch einmal – einige Nummern gelten für mehrere Versionen.",onboarding_settings:"Einstellungsseite anzeigen",onboarding_settings_description:"Auf Ihrer Einstellungsseite können Sie den Namen Ihres Fahrrads ändern, Ihre E-Mail-Adresse aktualisieren und dort finden Sie Ihre Bike Matrix-ID sowie Ihre Share-ID.",onboarding_title:"Virtueller Workshop – Kurzanleitung",onboarding_vw_description:"Ändern Sie die digitale Aufzeichnung Ihres Fahrrads entsprechend den von Ihnen vorgenommenen Upgrades, um sicherzustellen, dass die Kompatibilitätsprüfungen so genau wie möglich sind.",productcheck_nobikeselected_label:"Kompatibilität prüfen",productcheck_nobikeselected_message:"Dein Fahrrad hinzufügen, um die Kompatibilität dieses Teils zu prüfen",productcheck_questionmark:"?",save:"Speichern",share:"Teilen",virtualworkshop_add_bike_text:"Deine Bike Matrix ID findest du auf der Seite Einstellungen in der virtuellen Werkstatt",virtualworkshop_bm_id_text:"Du kannst entweder die Bike Matrix ID verwenden, die du in den Einstellungen der virtuellen Werkstatt findest, oder die geteilte ID, die dir von einer anderen Person mitgeteilt wurde.",virtualworkshop_bom_title:"Materialliste",virtualworkshop_build_text:"Details zur Konfiguration",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"Bei der Aktualisierung ihres Fahrrad-Datensatzes übernehmen Nutzer die volle Verantwortung für die richtige Zusammenstellung der Komponenten und sind sich bewusst, dass sich Änderungen auf die Kompatibilität auswirken können.",virtualworkshop_do_not_pass:"Der virtuelle Workshop ist noch nicht für alle Fahrradmarken verfügbar.",virtualworkshop_drivetrain:"Antrieb",virtualworkshop_e_drive:"E-Antrieb",virtualworkshop_enter_button:"Virtuelle Werkstatt betreten",virtualworkshop_frame_fork:"Rahmen und Gabel",virtualworkshop_intro_text:"Optimiere deine Fahrradkonfiguration mit neuen Komponenten und speichere dein Fahrrad durch die Angabe einer E-Mail-Adresse. Betrachte geteilte Fahrradkonfigurationen und greife auf deine Fahrrad-IDs zu.",virtualworkshop_other_parts:"Sonstige Teile",virtualworkshop_remove_btn:"Komponente entfernen",virtualworkshop_remove_subtitle:"Das Entfernen einer Komponente führt dazu, dass sie aus deiner Fahrradkonfiguration gelöscht wird. Dies kann die Kompatibilität mit anderen Teilen beeinträchtigen.",virtualworkshop_remove_title:"Bist du sicher?",virtualworkshop_revert_btn:"Rückgängig machen",virtualworkshop_save_btn:"Fahrrad speichern",virtualworkshop_save_text:"Um dein Custom-Bike zu speichern, benötigen wir deine E-Mail-Adresse.",virtualworkshop_save_title:"E-Mail-Adresse eingeben",virtualworkshop_search_text:"Barcode eingeben oder nach Marke, Modell, Teilenummer etc. suchen",virtualworkshop_settings_bike_name:"Name des Fahrrads",virtualworkshop_settings_email:"E-Mail",virtualworkshop_settings_id:"Bike Matrix ID",virtualworkshop_settings_share_id:"Geteilte ID",virtualworkshop_shared_icon:"Mit dir geteilt",virtualworkshop_swap_btn:"Komponente tauschen",virtualworkshop_title:"Virtuelle Werkstatt",virtualworkshop_unsaved_changes:"Ungespeicherte Änderungen betrachten",virtualworkshop_wheels_tyres:"Laufräder & Reifen",category_bike:"Fahrrad",category_bottombracket:"Tretlager",category_bottombracketpart:"Tretlager-Ersatzteile",category_brakeadapter:"Bremsadapter",category_brakeadapterpart:"Bremsadapter-Ersatzteile",category_brakecaliper:"Bremssattel",category_brakecaliperpart:"Bremssattel-Ersatzteile",category_brakecaliperservicekit:"Bremssattel-Servicekit",category_brakelever:"Bremshebel",category_brakeleverpart:"Bremshebel-Ersatzteile",category_brakeleverservicekit:"Bremshebel-Servicekit",category_brakepads:"Bremsbeläge",category_brakerotor:"Bremsscheibe",category_brakerotorpart:"Bremsscheiben-Ersatzteile",category_brakesystem:"Bremssystem",category_brakesystempart:"Bremssystem-Ersatzteile",category_cassette:"Kassette",category_cassettepart:"Kassetten-Ersatzteile",category_chain:"Kette",category_chainguide:"Kettenführung",category_chainguidepart:"Kettenführung-Ersatzteile",category_chainjoiner:"Kettenschloss/-nietstift",category_chainring:"Kettenblatt",category_chainringbolt:"Kettenblattschrauben",category_crankpart:"Kurbelgarnitur-Ersatzteile",category_crankset:"Kurbelgarnitur",category_dropperlever:"Variosattelstützenhebel",category_dropperleverpart:"Variosattelstützenhebel-Ersatzteile",category_ebikebattery:"E-Bike Akku",category_ebikebatterypart:"E-Bike Akku-Ersatzteile",category_ebikecharger:"E-Bike Ladegerät",category_ebikechargerpart:"E-Bike Ladegerät-Ersatzteile",category_ebikecontrolunit:"E-Bike Bedieneinheit",category_ebikecontrolunitpart:"E-Bike Bedieneinheit-Ersatzteile",category_ebikeinterconnect:"E-Bike Kabelstrang",category_ebikeinterconnectpart:"E-Bike Kabelstrang-Ersatzteile",category_ebikemotorsystem:"E-Bike Antriebssystem",category_ebikemotorsystempart:"E-Bike Antriebssystem-Ersatzteile",category_fork:"Gabel",category_forkpart:"Gabel-Ersatzteile",category_forkservicekit:"Gabel-Servicekit",category_frame:"Rahmen",category_framepart:"Rahmen-Ersatzteile",category_frontaxle:"Vorderradachse",category_frontaxlepart:"Vorderradachsen-Ersatzteile",category_frontderailleur:"Umwerfer",category_frontderailleurpart:"Umwerfer-Ersatzteile",category_fronthub:"Vorderradnabe",category_fronthubpart:"Vorderradnaben-Ersatzteile",category_frontwheel:"Vorderrad",category_grips:"Griffe",category_gripspart:"Griff-Ersatzteile",category_handlebar:"Lenker",category_headset:"Steuersatz",category_headsetpart:"Steuersatz-Ersatzteile",category_nipple:"Speichennippel",category_pedals:"Pedale",category_pedalspart:"Pedal-Ersatzteil",category_rearaxle:"Hinterradachse",category_rearaxlepart:"Hinterradachsen-Ersatzteile",category_rearderailleur:"Schaltwerk",category_rearderailleurpart:"Schaltwerk-Ersatzteile",category_rearhub:"Hinterradnabe",category_rearhubpart:"Hinterradnaben-Ersatzteile",category_rearshock:"Hinterbaudämpfer",category_rearshockpart:"Hinterbaudämpfer-Ersatzteile",category_rearshockservicekit:"Hinterbaudämpfer-Servicekit",category_rearwheel:"Hinterrad",category_rim:"Felge",category_saddle:"Sattel",category_seatpost:"Sattelstütze",category_seatpostclamp:"Sattelstützenklemme",category_seatpostclamppart:"Sattelstützenklemmen-Ersatzteile",category_seatpostpart:"Sattelstützen-Ersatzteile",category_seatpostservicekit:"Sattelstützen-Servicekit",category_shiftadapter:"Schaltadapter",category_shiftadapterpart:"Schaltadapter-Ersatzteile",category_shiftbrakecombo:"Schalt-/Bremshebel",category_shiftbrakecombopart:"Schalt-/Bremshebel-Ersatzteile",category_shifter:"Schalthebel",category_shifterpart:"Schalthebel-Ersatzteile",category_spoke:"Speiche",category_stem:"Vorbau",category_stempart:"Vorbau-Ersatzteile",category_tube:"Schlauch",category_tyre:"Reifen",category_wheelset:"Laufradsatz",checksku_message_nobikefound:"Es konnte kein Fahrrad mit der angegebenen Fahrradschlüsselnummer gefunden werden",checksku_message_nocompatibilityinfo:"Keine Informationen zur Kompatibilität",checksku_message_noproductfound:"Es konnte kein Teil mit der angegebenen SKU-/Teile-Nr. oder dem Barcode gefunden werden",checksku_message_notcompatible:"Nicht kompatibel",checksku_warning_unabletoperformcheck:"Es konnte keine Prüfung der Kompatibilität durchgeführt werden. Die Kompatibilität muss persönlich überprüft werden."}},it:{translation:{bikematrix_poweredby:"Offerto da Bike Matrix",bikeselector_addbike_brand_desc:"In genere, la marca della tua bici si trova nelle aree evidenziate di seguito.",bikeselector_addbike_brand_label:"Marca",bikeselector_addbike_brand_select:"Seleziona la marca della tua bici",bikeselector_addbike_find_btn:"Trova la mia bici",bikeselector_addbike_framespec_desc:"In genere, le informazioni sulla serie del telaio della tua bici si trovano nelle aree evidenziate di seguito.",bikeselector_addbike_framespec_label:"Serie del telaio",bikeselector_addbike_framespec_select:"Seleziona la serie del telaio della tua bici",bikeselector_addbike_model_desc:"In genere, il modello della tua bici si trova nelle aree evidenziate di seguito.",bikeselector_addbike_model_label:"Modello",bikeselector_addbike_model_select:"Seleziona il modello della tua bici",bikeselector_addbike_title:"Aggiungi una bici",bikeselector_browse_back_btn:"Torna alla pagina Le mie bici",bikeselector_browse_products_label:"Acquista i prodotti compatibili",bikeselector_browse_shop_btn:"Acquista i prodotti",bikeselector_browse_title:"Inizia l’acquisto!",bikeselector_confirm_brandmodelframespec_label:"Marca, modello, serie del telaio",bikeselector_confirm_confirm_btn:"Sì, questa è la mia bici!",bikeselector_confirm_framesize_label:"Misura del telaio",bikeselector_confirm_notyourride_msg:"Non è la tua bici? Seleziona un campo sopra per apportare una modifica.",bikeselector_confirm_title:"Conferma la tua bici",bikeselector_confirm_yearbikespec_label:"Anno, versione della bici",bikeselector_home_add_a_bike:"Aggiungi una bici qui sotto per iniziare...",bikeselector_home_add_btn:"Aggiungi una bici",bikeselector_home_browse_btn:"Sfoglia compatibilità",bikeselector_home_close_btn:"Chiudi",bikeselector_home_empty:"La tua Bike Lounge è vuota!",bikeselector_home_footer_message:"I produttori delle bici possono modificare le specifiche senza preavviso. Eventuali differenze rispetto alle specifiche di serie possono condizionare la compatibilità.",bikeselector_home_title:"Le mie bici",bikeselector_search_bikespec_label:"Versione della bici",bikeselector_search_bikespec_select:"Seleziona la versione della bici",bikeselector_search_bikespec_select_all:"Tutti",bikeselector_search_confirm_btn:"Conferma la scelta",bikeselector_search_no_bikes_found:"Nessuna bici trovata",bikeselector_search_number_bikes_found:"{{number_found}} bici trovate",bikeselector_search_one_bike_found:"1 bici trovata",bikeselector_search_searching:"Ricerca in corso...",bikeselector_search_title:"Ricerca bici",bikeselector_search_year_label:"Anno",bikeselector_size_confirm_btn:"Conferma la misura",bikeselector_size_framesize_desc:"In genere, la misura del telaio della tua bici si trova nelle aree evidenziate di seguito.",bikeselector_size_framesize_label:"Misura del telaio",bikeselector_size_framesize_one_size:"Misura unica",bikeselector_size_framesize_select:"Seleziona la misura del tuo telaio",bikeselector_size_title:"Seleziona la tua misura",cancel:"Cancella",category_brakeadapterrear:"Adattatore freno posteriore",category_brakecaliperrear:"Pinza freno posteriore",category_brakecaliperfront:"Pinza freno anteriore",category_brakeleverlh:"Leva del freno sinistra",category_brakeleverrh:"Leva del freno destra",category_brakepadsfront:"Pastiglie Freno Anteriori",category_brakepadsrear:"Pastiglie Freno Posteriori",category_brakerotorfront:"Rotore del freno anteriore",category_brakes:"Freni",category_chainringspider:"Ragno della corona",category_cockpit:"Pozzetto",category_drivetrain:"Trasmissione",category_framefork:"Telaio e forcella",category_largestchainring:"Corona più grande",category_secondlargestchainring:"Seconda corona più grande",category_shifteradapterlh:"Adattatore del cambio per mano sinistra",category_shifteradapterrh:"Adattatore del cambio destro",category_shifterbrakecombolh:"Combinazione freno cambio mano sinistra",category_shifterbrakecomborh:"Combinazione freno cambio mano destra",category_shifterlh:"Mano sinistra del cambio",category_shifterrh:"Mano destra del cambio",category_thirdlargestchainring:"Terzo corona più grande",category_tyrefront:"Pneumatico anteriore",category_tyrerear:"Pneumatico posteriore",category_wheelstyres:"Ruote e pneumatici",category_brakeadapterfront:"Adattatore freno anteriore",category_brakerotorrear:"Rotore freno posteriore",compatible:"Compatibile",compatible_check_notes:"Compatibile - Controlla le note",compatiblelist_header:"Prodotti compatibili",compatiblelist_nobikeselected:"Nessuna bici selezionata. Clicca qui per aggiungere la tua bici e verificare la compatibilità dei componenti",compatiblelist_noresults:"Nessun prodotto compatibile trovato",compatiblelist_pageone:"Puoi vedere tutti i prodotti compatibili con la tua bici <a>qui</a>.",compatiblelist_unavailable:"I dati sulla compatibilità per questa categoria di prodotto e per la marca di bici selezionata saranno disponibili a breve!",confirm:"Conferma",copy:"Copia",edit:"Modifica",error_add_component:"Il componente non è stato installato. Riprova e questa volta pedala un po' più forte.",error_add_custom_bike:"Ops... Non siamo riusciti a creare la tua bici personalizzata. Aggiorna e riprova.",error_find_products:"Uhm... Sembra che le nostre ruote non girino bene. Aggiorna e riprova.",error_find_products_no_results:"Uhm... Non riusciamo a trovare il prodotto. Prova un codice prodotto diverso o prova a scriverlo in un altro modo.",error_generic:"Si è verificato un errore in un punto terminale - {{endpoint_location}}",error_get_bike_bom:"Siamo spiacenti! Non è stato possibile recuperare la configurazione della tua bici. Aggiorna e riprova.",error_invalid_email:"Sembra che l'indirizzo email non sia valido: sono disponibili altre opzioni?",error_remove_component:"Questo componente vuole davvero restare sulla bici. Aggiorna e riprova.",error_revert_component:"Questo componente vuole davvero restare sulla bici. Aggiorna e riprova.",error_save_custom_bike:"Colpa nostra, la tua bici non è stata salvata. Riprova e questa volta pedala un po' più forte.",error_update_custom_bike:"Oh, non ha funzionato. Ci spiace! Aggiorna e riprova.",error_update_custom_bike_name:"Non è stato possibile cambiare il nome della tua bici. Forse non le piace! Aggiorna e riprova",not_compatible:"Non compatibile",onboarding_explore:"Gehen Sie entdecken",onboarding_green_spanner:"Cerca la chiave inglese verde",onboarding_green_spanner_description:"Se un componente ha una chiave inglese verde, può essere scambiato o rimosso completamente dalla build.",onboarding_linked_components:"Comprendere i componenti collegati",onboarding_linked_components_description:"Alcune parti (ad esempio guarnitura + movimento centrale) sono collegate. Per scambiarne uno, potrebbe essere necessario rimuoverli entrambi, altrimenti il ??sistema potrebbe contrassegnarlo come incompatibile.",onboarding_next:"Nächste",onboarding_open_bike_build:"Apri la costruzione della tua bici",onboarding_open_bike_build_description:"Quando visualizzi la costruzione della tua bici, espandi i gruppi di componenti per visualizzare i componenti che si applicano alla tua bici.",onboarding_preview:"Anteprima o salvataggio delle modifiche",onboarding_preview_description:"Puoi scambiare/rimuovere componenti e confermare le modifiche per esplorare gli aggiornamenti. Queste operazioni possono essere annullate in qualsiasi momento prima del salvataggio. Una volta salvate, le modifiche non possono essere annullate, ma solo rimosse o sostituite di nuovo.",onboarding_replacement:"Scegli il sostituto giusto",onboarding_replacement_description:"Utilizza il codice a barre o il codice articolo del produttore (trovato sulla confezione o sulla fattura) per effettuare la ricerca. Puoi anche utilizzare il numero del modello, ma ricontrolla: alcuni numeri si applicano a più versioni.",onboarding_settings:"Visualizza la pagina Impostazioni",onboarding_settings_description:"La pagina delle impostazioni è dove puoi cambiare il nome della tua bicicletta, aggiornare la tua email e dove troverai il tuo ID Bike Matrix e il tuo ID di condivisione.",onboarding_title:"Workshop virtuale – Guida rapida",onboarding_vw_description:"Modifica il profilo digitale della tua bici per riflettere le modifiche apportate, assicurando che i controlli di compatibilità siano il più precisi possibile.",productcheck_nobikeselected_label:"Controlla compatibilità",productcheck_nobikeselected_message:"Aggiungi la tua bici per verificare se questo componente è idoneo",productcheck_questionmark:"?",save:"Salva",share:"Condividi",virtualworkshop_add_bike_text:"Il tuo ID Bike Matrix può essere trovato nella pagina Impostazioni all'interno dell'Officina virtuale",virtualworkshop_bm_id_text:"Puoi utilizzare l'ID Bike Matrix, presente nella sezione delle impostazioni dell'Officina virtuale, oppure l'ID condiviso con te da qualcun altro.",virtualworkshop_bom_title:"Elenco materiali",virtualworkshop_build_text:"Dettagli configurazione",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"Aggiornando l'allestimento delle proprie bici, l'utente si assume la piena responsabilità di verificare che i componenti siano corretti, consapevole del fatto che eventuali differenze possono condizionare la compatibilità.",virtualworkshop_do_not_pass:"L'officina virtuale non è disponibile per tutte le marche di biciclette.",virtualworkshop_drivetrain:"Trasmissione",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Accedi all'Officina virtuale",virtualworkshop_frame_fork:"Telaio e forcella",virtualworkshop_intro_text:"Aggiorna la configurazione della tua bici con nuovi componenti e salvala fornendo un indirizzo email. Visualizza le configurazioni condivise e accedi agli ID delle tue bici",virtualworkshop_other_parts:"Altre parti",virtualworkshop_remove_btn:"Rimuovi componente",virtualworkshop_remove_subtitle:"Rimuovendo un componente, verrà eliminato dalla configurazione della tua bici. Ciò può condizionare la compatibilità con altre parti.",virtualworkshop_remove_title:"Confermi?",virtualworkshop_revert_btn:"Ripristina",virtualworkshop_save_btn:"Salva la bici",virtualworkshop_save_text:"Per poter memorizzare una bici personalizzata dobbiamo salvarla associandola al tuo indirizzo email",virtualworkshop_save_title:"Inserisci la tua email",virtualworkshop_search_text:"Inserisci il codice a barre o cerca per marca, modello, codice prodotto...",virtualworkshop_settings_bike_name:"Nome della bici",virtualworkshop_settings_email:"Email",virtualworkshop_settings_id:"ID Bike Matrix",virtualworkshop_settings_share_id:"Condividi ID",virtualworkshop_shared_icon:"Condiviso con te",virtualworkshop_swap_btn:"Sostituisci il componente",virtualworkshop_title:"Officina virtuale",virtualworkshop_unsaved_changes:"Visualizza le modifiche non salvate",virtualworkshop_wheels_tyres:"Ruote e pneumatici",category_bike:"Bici",category_bottombracket:"Movimento centrale",category_bottombracketpart:"Componente movimento centrale",category_brakeadapter:"Adattatore freno",category_brakeadapterpart:"Componente adattatore freno",category_brakecaliper:"Pinza freno",category_brakecaliperpart:"Componente pinza freno",category_brakecaliperservicekit:"Kit manutenzione pinza freno",category_brakelever:"Leva freno",category_brakeleverpart:"Componente leva freno",category_brakeleverservicekit:"Kit manutenzione leva freno",category_brakepads:"Pastiglie/pattini freno",category_brakerotor:"Rotore freno",category_brakerotorpart:"Componente rotore freno",category_brakesystem:"Impianto frenante",category_brakesystempart:"Componente impianto frenante",category_cassette:"Cassetta",category_cassettepart:"Componente cassetta",category_chain:"Catena",category_chainguide:"Guidacatena",category_chainguidepart:"Componente guidacatena",category_chainjoiner:"Falsamaglia",category_chainring:"Corona",category_chainringbolt:"Vite corona",category_crankpart:"Componente guarnitura",category_crankset:"Guarnitura",category_dropperlever:"Leva reggisella telescopico",category_dropperleverpart:"Componente leva reggisella telescopico",category_ebikebattery:"Batteria eBike",category_ebikebatterypart:"Componente batteria eBike",category_ebikecharger:"Caricabatteria eBike",category_ebikechargerpart:"Componente caricabatteria eBike",category_ebikecontrolunit:"Unità di controllo eBike",category_ebikecontrolunitpart:"Componente unità di controllo eBike",category_ebikeinterconnect:"Interconnessione eBike",category_ebikeinterconnectpart:"Componente interconnessione eBike",category_ebikemotorsystem:"Sistema motore eBike",category_ebikemotorsystempart:"Componente sistema motore eBike",category_fork:"Forcella",category_forkpart:"Componente forcella",category_forkservicekit:"Kit di manutenzione forcella",category_frame:"Telaio",category_framepart:"Componente telaio",category_frontaxle:"Perno anteriore",category_frontaxlepart:"Componente perno anteriore",category_frontderailleur:"Deragliatore anteriore",category_frontderailleurpart:"Componente deragliatore anteriore",category_fronthub:"Mozzo anteriore",category_fronthubpart:"Componente mozzo anteriore",category_frontwheel:"Ruota anteriore",category_grips:"Manopole",category_gripspart:"Componente manopole",category_handlebar:"Manubrio",category_headset:"Serie sterzo",category_headsetpart:"Componente serie sterzo",category_nipple:"Nipplo",category_pedals:"Pedali",category_pedalspart:"Componente pedali",category_rearaxle:"Perno posteriore",category_rearaxlepart:"Componente perno posteriore",category_rearderailleur:"Deragliatore posteriore",category_rearderailleurpart:"Componente deragliatore posteriore",category_rearhub:"Mozzo posteriore",category_rearhubpart:"Componente mozzo posteriore",category_rearshock:"Sospensione posteriore",category_rearshockpart:"Componente sospensione posteriore",category_rearshockservicekit:"Kit manutenzione sospensione posteriore",category_rearwheel:"Ruota posteriore",category_rim:"Cerchio",category_saddle:"Sella",category_seatpost:"Reggisella",category_seatpostclamp:"Morsetto reggisella",category_seatpostclamppart:"Componente morsetto reggisella",category_seatpostpart:"Componente reggisella",category_seatpostservicekit:"Kit manutenzione reggisella",category_shiftadapter:"Adattatore cambio",category_shiftadapterpart:"Componente adattatore cambio",category_shiftbrakecombo:"Comando integrato freno/cambio",category_shiftbrakecombopart:"Componente comando integrato freno/cambio",category_shifter:"Comando cambio",category_shifterpart:"Componente comando cambio",category_spoke:"Raggio",category_stem:"Attacco manubrio",category_stempart:"Componente attacco manubrio",category_tube:"Camera d'aria",category_tyre:"Pneumatico",category_wheelset:"Set ruote",checksku_message_nobikefound:"Impossibile trovare una bici con la chiave di ricerca fornita",checksku_message_nocompatibilityinfo:"Nessuna informazione sulla compatibilità",checksku_message_noproductfound:"Impossibile trovare il componente con lo SKU/codice a barre/codice componente fornito",checksku_message_notcompatible:"Non compatibile",checksku_warning_unabletoperformcheck:"Impossibile eseguire il controllo di compatibilità. Verificare manualmente la compatibilità."}},nl:{translation:{bikematrix_poweredby:"Mogelijk gemaakt door Bike Matrix",bikeselector_addbike_brand_desc:"Het merk van uw fiets kunt u meestal vinden in de hieronder gemarkeerde gebieden.",bikeselector_addbike_brand_label:"Merk",bikeselector_addbike_brand_select:"Selecteer het merk van uw fiets",bikeselector_addbike_find_btn:"Vind mijn fiets",bikeselector_addbike_framespec_desc:"De framespecificaties van uw fiets kunt u meestal vinden in de hieronder gemarkeerde gebieden.",bikeselector_addbike_framespec_label:"Framespecificaties",bikeselector_addbike_framespec_select:"Selecteer de framespecificaties van uw fiets",bikeselector_addbike_model_desc:"Het model van uw fiets kunt u meestal vinden in de hieronder gemarkeerde gebieden.",bikeselector_addbike_model_label:"Model",bikeselector_addbike_model_select:"Selecteer het model van uw fiets",bikeselector_addbike_title:"Fiets toevoegen",bikeselector_browse_back_btn:"Terug naar Fietsenrek",bikeselector_browse_products_label:"Bekijk compatibele producten",bikeselector_browse_shop_btn:"Bekijk producten",bikeselector_browse_title:"Begin met winkelen!",bikeselector_confirm_brandmodelframespec_label:"Merk, model, framespecificaties",bikeselector_confirm_confirm_btn:"Ja, dat is mijn fiets!",bikeselector_confirm_framesize_label:"Framemaat",bikeselector_confirm_notyourride_msg:"Niet uw fiets? Selecteer hierboven een veld om te wijzigen.",bikeselector_confirm_title:"Bevestig uw fiets",bikeselector_confirm_yearbikespec_label:"Jaar, fietsspecificaties",bikeselector_home_add_a_bike:"Voeg hieronder een fiets toe om te beginnen...",bikeselector_home_add_btn:"Fiets toevoegen",bikeselector_home_browse_btn:"Compatibiliteit bekijken",bikeselector_home_close_btn:"Sluiten",bikeselector_home_empty:"Uw fietsenrek is leeg!",bikeselector_home_footer_message:"Fietsfabrikanten kunnen de specificaties van fietsen zonder kennisgeving wijzigen. De compatibiliteit kan veranderen door verschillen in de specificaties van de voorraad.",bikeselector_home_title:"Mijn Fietsenrek",bikeselector_search_bikespec_label:"Fietsspecificaties",bikeselector_search_bikespec_select:"Specificatieniveau selecteren",bikeselector_search_bikespec_select_all:"Alles",bikeselector_search_confirm_btn:"Selectie bevestigen",bikeselector_search_no_bikes_found:"Geen fietsen gevonden",bikeselector_search_number_bikes_found:"{{number_found}} fietsen gevonden",bikeselector_search_one_bike_found:"1 fiets gevonden",bikeselector_search_searching:"Zoeken...",bikeselector_search_title:"Fiets zoeken",bikeselector_search_year_label:"Jaar",bikeselector_size_confirm_btn:"Maat bevestigen",bikeselector_size_framesize_desc:"De framemaat van uw fiets kunt u meestal vinden in de hieronder gemarkeerde gebieden.",bikeselector_size_framesize_label:"Framemaat",bikeselector_size_framesize_one_size:"Eén maat",bikeselector_size_framesize_select:"Selecteer uw framemaat",bikeselector_size_title:"Selecteer de maat",cancel:"Annuleren",category_brakeadapterrear:"Remadapter achter",category_brakecaliperrear:"Remklauw achter",category_brakecaliperfront:"Remklauw voorzijde",category_brakeleverlh:"Remhendel links",category_brakeleverrh:"Remhendel Rechts",category_brakepadsfront:"Remblokken voorzijde",category_brakepadsrear:"Remblokken Achter",category_brakerotorfront:"Remrotor voorzijde",category_brakes:"Remmen",category_chainringspider:"Kettingblad Spider",category_cockpit:"Kuip",category_drivetrain:"Aandrijflijn",category_framefork:"Frame en vork",category_largestchainring:"Grootste kettingblad",category_secondlargestchainring:"Op een na grootste kettingblad",category_shifteradapterlh:"Verstelleradapter links",category_shifteradapterrh:"Versnellingsadapter Rechts",category_shifterbrakecombolh:"Shifter Brake Combinatie Linkerhand",category_shifterbrakecomborh:"Shifter Brake Combinatie Rechterhand",category_shifterlh:"Shifter linkerhand",category_shifterrh:"Shifter rechterhand",category_thirdlargestchainring:"Derde grootste kettingblad",category_tyrefront:"Buitenband voorkant",category_tyrerear:"Buitenband achterkant",category_wheelstyres:"Wielen en banden",category_brakeadapterfront:"Remadapter voorzijde",category_brakerotorrear:"Remrotor achter",compatible:"Compatibel",compatible_check_notes:"Compatibel (zie notities)",compatiblelist_header:"Compatibele producten",compatiblelist_nobikeselected:"Geen fiets geselecteerd. Klik hier om uw fiets toe te voegen voor het opzoeken van compatibele onderdelen",compatiblelist_noresults:"Geen compatibele producten gevonden",compatiblelist_pageone:"Alle producten die compatibel zijn met uw fiets vindt u <a>hier</a>.",compatiblelist_unavailable:"Voor het geselecteerde fietsmerk zijn er in deze categorie binnenkort compatibele producten beschikbaar.",confirm:"Bevestigen",copy:"Kopiëren",edit:"Bewerken",error_add_component:"Dat onderdeel bleef niet zitten. Probeer het nu eens wat harder op de fiets te gooien.",error_add_custom_bike:"Helaas... We kunnen uw aangepaste fiets niet maken. Vernieuw de pagina en probeer het nog een keer.",error_find_products:"Hm... het lijkt erop dat onze wielen vastlopen. Vernieuw de pagina en probeer het opnieuw.",error_find_products_no_results:"Hm... Dat product kunnen we niet vinden. Probeer een ander modelnummer of een andere spelling.",error_generic:"Er is een fout opgetreden bij het eindpunt {{endpoint_location}}",error_get_bike_bom:"Dat valt tegen! We kunnen uw fietsmontage niet ophalen. Vernieuw de pagina en probeer het opnieuw.",error_invalid_email:"Dat ziet er niet uit als een geldig e-mailadres. Kunt u iets anders proberen?",error_remove_component:"Dit onderdeel wil blijkbaar graag op de fiets blijven zitten. Vernieuw de pagina en probeer het opnieuw.",error_revert_component:"Dit onderdeel wil blijkbaar graag op de fiets blijven zitten. Vernieuw de pagina en probeer het opnieuw.",error_save_custom_bike:"Sorry, we hebben uw fiets niet opgeslagen. Probeer nu eens wat harder te trappen.",error_update_custom_bike:"O, dat werkte niet. Sorry! Vernieuw de pagina en probeer het opnieuw.",error_update_custom_bike_name:"Het is niet gelukt om de naam van uw fiets te veranderen. Misschien vindt uw fiets het geen mooie naam. Vernieuw de pagina en probeer het opnieuw",not_compatible:"Niet compatibel",onboarding_explore:"Ga verkennen",onboarding_green_spanner:"Zoek naar de groene moersleutel",onboarding_green_spanner_description:"Als een component een groene moersleutel heeft, kan deze volledig worden verwisseld of uit de constructie worden verwijderd.",onboarding_linked_components:"Begrijp gekoppelde componenten",onboarding_linked_components_description:"Sommige onderdelen (bijvoorbeeld crankstel + trapas) zijn met elkaar verbonden. Als u er één wilt verwisselen, moet u mogelijk beide verwijderen. Anders markeert het systeem deze mogelijk als incompatibel.",onboarding_next:"Volgende",onboarding_open_bike_build:"Open je fietsbuild",onboarding_open_bike_build_description:"Wanneer u uw fietsopbouw bekijkt, vouwt u de componentgroepen uit om de componenten te bekijken die op uw fiets van toepassing zijn.",onboarding_preview:"Bekijk een voorbeeld of sla wijzigingen op",onboarding_preview_description:"U kunt componenten verwisselen/verwijderen en wijzigingen bevestigen om upgrades te verkennen. Deze kunnen op elk moment ongedaan worden gemaakt voordat ze worden opgeslagen. Nadat u de wijzigingen heeft opgeslagen, kunnen ze niet meer worden teruggedraaid, maar alleen worden verwijderd of opnieuw vervangen.",onboarding_replacement:"Kies de juiste vervanging",onboarding_replacement_description:"Gebruik de streepjescode of het onderdeelnummer van de fabrikant (te vinden op de verpakking of uw factuur) om te zoeken. U kunt ook het modelnummer gebruiken, maar controleer dit nogmaals: sommige nummers gelden voor meerdere versies.",onboarding_settings:"Bekijk de instellingenpagina",onboarding_settings_description:"Op uw instellingenpagina kunt u de naam van uw fiets wijzigen, uw e-mailadres bijwerken en waar u zowel uw Bike Matrix ID als uw Share ID kunt vinden.",onboarding_title:"Virtuele workshop – Beknopte handleiding",onboarding_vw_description:"Pas het digitale bestand van uw fiets aan zodat deze overeenkomt met de upgrades die u heeft uitgevoerd, zodat de compatibiliteitscontroles zo nauwkeurig mogelijk zijn.",productcheck_nobikeselected_label:"Compatibiliteit controleren",productcheck_nobikeselected_message:"Voeg uw fiets toe om te controleren of dit onderdeel erop past",productcheck_questionmark:"?",save:"Opslaan",share:"Delen",virtualworkshop_add_bike_text:"Uw Bike Matrix-ID vindt u op de pagina Instellingen van de Virtuele werkplaats.",virtualworkshop_bm_id_text:"U kunt uw Bike Matrix-ID gebruiken (die vindt u in de Instellingen van de Virtuele werkplaats) of een Deel-ID die u van iemand anders heeft gekregen.",virtualworkshop_bom_title:"Stuklijst",virtualworkshop_build_text:"Montagedetails",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"Door gegevens voor een fiets aan te passen, aanvaardt de gebruiker de volledige verantwoordelijkheid om de juiste onderdelen te selecteren, in de wetenschap dat wijzigingen gevolgen hebben voor de compatibiliteit.",virtualworkshop_do_not_pass:"Virtuele Workshop is nog niet voor alle fietsmerken beschikbaar.",virtualworkshop_drivetrain:"Aandrijving",virtualworkshop_e_drive:"Elektrische aandrijving",virtualworkshop_enter_button:"Virtuele werkplaats openen",virtualworkshop_frame_fork:"Frame en voorvork",virtualworkshop_intro_text:"Pas uw fietsmontage aan met nieuwe onderdelen en sla uw fiets op door een e-mailadres in te voeren. Bekijk gedeelde fietsmontages en vindt uw fiets-ID's",virtualworkshop_other_parts:"Andere onderdelen",virtualworkshop_remove_btn:"Onderdeel verwijderen",virtualworkshop_remove_subtitle:"Als u een onderdeel verwijdert, wordt het uit uw fietsmontage gehaald. Dit kan gevolgen hebben voor de compatibiliteit van andere onderdelen.",virtualworkshop_remove_title:"Weet u het zeker?",virtualworkshop_revert_btn:"Terugdraaien",virtualworkshop_save_btn:"Fiets opslaan",virtualworkshop_save_text:"We hebben uw e-mailadres nodig om uw aangepaste fiets op te slaan.",virtualworkshop_save_title:"Voer uw e-mailadres in",virtualworkshop_search_text:"Voer barcode in of zoek op merk, model, onderdeelnummer...",virtualworkshop_settings_bike_name:"Naam fiets",virtualworkshop_settings_email:"E-mailadres",virtualworkshop_settings_id:"Bike Matrix-ID",virtualworkshop_settings_share_id:"Deel-ID",virtualworkshop_shared_icon:"Met u gedeeld",virtualworkshop_swap_btn:"Onderdeel vervangen",virtualworkshop_title:"Virtuele werkplaats",virtualworkshop_unsaved_changes:"Niet-opgeslagen wijzigingen bekijken",virtualworkshop_wheels_tyres:"Wielen en banden",category_bike:"Fiets",category_bottombracket:"Trapas",category_bottombracketpart:"Trapasonderdeel",category_brakeadapter:"Remadapter",category_brakeadapterpart:"Remadapteronderdeel",category_brakecaliper:"Remklauw",category_brakecaliperpart:"Remklauwonderdeel",category_brakecaliperservicekit:"Servicekit remklauw",category_brakelever:"Remhendel",category_brakeleverpart:"Remhendelonderdeel",category_brakeleverservicekit:"Servicekit remhendel",category_brakepads:"Remblokken",category_brakerotor:"Remschijf",category_brakerotorpart:"Remschijfonderdeel",category_brakesystem:"Remsysteem",category_brakesystempart:"Remsysteemonderdeel",category_cassette:"Cassette",category_cassettepart:"Cassetteonderdeel",category_chain:"Ketting",category_chainguide:"Kettinggeleider",category_chainguidepart:"Kettinggeleideronderdeel",category_chainjoiner:"Verbindingsschakel",category_chainring:"Kettingblad",category_chainringbolt:"Kettingbladbout",category_crankpart:"Crankonderdeel",category_crankset:"Crankset",category_dropperlever:"Dropperhendel",category_dropperleverpart:"Dropperhendelonderdeel",category_ebikebattery:"Batterij elektrische fiets",category_ebikebatterypart:"Batterijonderdeel van elektrische fiets",category_ebikecharger:"Oplader elektrische fiets",category_ebikechargerpart:"Opladeronderdeel van elektrische fiets",category_ebikecontrolunit:"Bediening elektrische fiets",category_ebikecontrolunitpart:"Bedieningsonderdeel van elektrische fiets",category_ebikeinterconnect:"Verbinding elektrische fiets",category_ebikeinterconnectpart:"Verbindingsonderdeel van elektrische fiets",category_ebikemotorsystem:"Motor elektrische fiets",category_ebikemotorsystempart:"Motoronderdeel van elektrische fiets",category_fork:"Voorvork",category_forkpart:"Voorvorkonderdeel",category_forkservicekit:"Servicekit voorvork",category_frame:"Frame",category_framepart:"Frameonderdeel",category_frontaxle:"Vooras",category_frontaxlepart:"Voorasonderdeel",category_frontderailleur:"Voorderailleur",category_frontderailleurpart:"Voorderailleuronderdeel",category_fronthub:"Voornaaf",category_fronthubpart:"Voornaafonderdeel",category_frontwheel:"Voorwiel",category_grips:"Handvatten",category_gripspart:"Handvatonderdeel",category_handlebar:"Stuur",category_headset:"Balhoofdstel",category_headsetpart:"Balhoofdonderdeel",category_nipple:"Spaaknippel",category_pedals:"Pedalen",category_pedalspart:"Pedaalonderdeel",category_rearaxle:"Achteras",category_rearaxlepart:"Achterasonderdeel",category_rearderailleur:"Achterderailleur",category_rearderailleurpart:"Achterderailleuronderdeel",category_rearhub:"Achternaaf",category_rearhubpart:"Achternaafonderdeel",category_rearshock:"Schokdemper voor achterwiel",category_rearshockpart:"Schokdemperonderdeel voor achterwiel",category_rearshockservicekit:"Servicekit schokdemper voor achterwiel",category_rearwheel:"Achterwiel",category_rim:"Velg",category_saddle:"Zadel",category_seatpost:"Zadelpen",category_seatpostclamp:"Zadelpenklem",category_seatpostclamppart:"Zadelpenklemonderdeel",category_seatpostpart:"Zadelpenonderdeel",category_seatpostservicekit:"Servicekit zadelpen",category_shiftadapter:"Versnellingsadapter",category_shiftadapterpart:"Versnellingsadapteronderdeel",category_shiftbrakecombo:"Schakel-/remhendel",category_shiftbrakecombopart:"Schakel-/remhendelonderdeel",category_shifter:"Shifter",category_shifterpart:"Shifteronderdeel",category_spoke:"Spaak",category_stem:"Stuurpen",category_stempart:"Stuurpenonderdeel",category_tube:"Binnenband",category_tyre:"Buitenband",category_wheelset:"Wielset",checksku_message_nobikefound:"Kan geen fiets vinden met het opgegeven Fietsnummer",checksku_message_nocompatibilityinfo:"Geen informatie over compatibiliteit",checksku_message_noproductfound:"Kan geen onderdeel vinden met de opgegeven SKU/Barcode/Onderdeelnummer",checksku_message_notcompatible:"Niet compatibel",checksku_warning_unabletoperformcheck:"Kan de compatibiliteitscontrole niet uitvoeren. Controleer de compatibiliteit handmatig."}},"en-GB":{translation:{bikematrix_poweredby:"Powered by Bike Matrix",bikeselector_addbike_brand_desc:"Your bike brand is typically found in the areas highlighted below.",bikeselector_addbike_brand_label:"Brand",bikeselector_addbike_brand_select:"Select your bike brand",bikeselector_addbike_find_btn:"Find my ride",bikeselector_addbike_framespec_desc:"Your bike frame spec is typically found in the areas highlighted below.",bikeselector_addbike_framespec_label:"Frame Spec",bikeselector_addbike_framespec_select:"Select your bike's frame spec",bikeselector_addbike_model_desc:"Your bike model is typically found in the areas highlighted below.",bikeselector_addbike_model_label:"Model",bikeselector_addbike_model_select:"Select your bike model",bikeselector_addbike_title:"Add A Bike",bikeselector_browse_back_btn:"Back to bike Lounge",bikeselector_browse_products_label:"Shop for compatible products",bikeselector_browse_shop_btn:"Shop Products",bikeselector_browse_title:"Start Shopping!",bikeselector_confirm_brandmodelframespec_label:"Brand, Model, Frame Series",bikeselector_confirm_confirm_btn:"Yep, that's my ride!",bikeselector_confirm_framesize_label:"Frame Size",bikeselector_confirm_notyourride_msg:"Not your ride? Select a field above to make a change.",bikeselector_confirm_title:"Confirm Your Ride",bikeselector_confirm_yearbikespec_label:"Year, Bike Spec",bikeselector_home_add_a_bike:"Add a bike below to get started...",bikeselector_home_add_btn:"Add A Bike",bikeselector_home_browse_btn:"Browse Compatiblity",bikeselector_home_close_btn:"Close",bikeselector_home_empty:"Your lounge is empty!",bikeselector_home_footer_message:"Bike manufacturers may change bike specifications without notice. Differences from stock specifications can impact compatibility results.",bikeselector_home_title:"My Bike Lounge",bikeselector_search_bikespec_label:"Bike Spec",bikeselector_search_bikespec_select:"Select spec level",bikeselector_search_bikespec_select_all:"All",bikeselector_search_confirm_btn:"Confirm Selection",bikeselector_search_no_bikes_found:"No bikes found",bikeselector_search_number_bikes_found:"{{number_found}} bikes found",bikeselector_search_one_bike_found:"1 bike found",bikeselector_search_searching:"Searching...",bikeselector_search_title:"Bike Search",bikeselector_search_year_label:"Year",bikeselector_size_confirm_btn:"Confirm Size",bikeselector_size_framesize_desc:"Your bike frame size is typically found in the areas highlighted below.",bikeselector_size_framesize_label:"Frame Size",bikeselector_size_framesize_one_size:"One Size",bikeselector_size_framesize_select:"Select your frame size",bikeselector_size_title:"Select Your Size",cancel:"Cancel",category_brakeadapterrear:"Brake Adapter Rear",category_brakecaliperrear:"Brake Caliper Rear",category_brakecaliperfront:"Brake Caliper Front",category_brakeleverlh:"Brake Lever LH",category_brakeleverrh:"Brake Lever RH",category_brakepadsfront:"Brake Pads Front",category_brakepadsrear:"Brake Pads Rear",category_brakerotorfront:"Brake Rotor Front",category_brakes:"Brakes",category_chainringspider:"Chainring Spider",category_cockpit:"Cockpit",category_drivetrain:"Drivetrain",category_framefork:"Frame & Fork",category_largestchainring:"Largest Chainring",category_secondlargestchainring:"Second Largest Chainring",category_shifteradapterlh:"Shifter Adapter LH",category_shifteradapterrh:"Shifter Adapter RH",category_shifterbrakecombolh:"Shifter Brake Combo LH",category_shifterbrakecomborh:"Shifter Brake Combo RH",category_shifterlh:"Shifter LH",category_shifterrh:"Shifter RH",category_thirdlargestchainring:"Third Largeest Chainring",category_tyrefront:"Tyre Front",category_tyrerear:"Tyre Rear",category_wheelstyres:"Wheels & Tyres",category_brakeadapterfront:"Brake Adapter Front",category_brakerotorrear:"Brake Rotor Rear",compatible:"Compatible",compatible_check_notes:"Compatible - Check Notes",compatiblelist_header:"Compatible Products",compatiblelist_nobikeselected:"No bike selected. Click here to add your ride to check for compatible parts",compatiblelist_noresults:"No compatible products found",compatiblelist_pageone:"All products compatible with your bike can be seen <a>here</a>.",compatiblelist_unavailable:"Compatibility for this product category for your selected bike brand is coming soon!",confirm:"Confirm",copy:"Copy",edit:"Edit",error_add_component:"That component didn't stick. Try again and throw it a little harder this time.",error_add_custom_bike:"Oops... We couldn't create your custom bike. Refresh and give it another try.",error_find_products:"Hmmm… It looks like our wheels aren’t quite spinning. Refresh and try again.",error_find_products_no_results:"Hmmm... We can’t find that product. Try a different model number or adjust your spelling.",error_generic:"There was an error on the endpoint - {{endpoint_location}}",error_get_bike_bom:"That's embarrassing! Your bike build could not be retrieved. Refresh and try again.",error_invalid_email:"It doesn’t look like that’s a valid email, any other options?",error_remove_component:"This component really wants to stay on the bike. Refresh and try again.",error_revert_component:"This component really wants to stay on the bike. Refresh and try again.",error_save_custom_bike:"Our bad, your bike wasn’t saved. Try again and pedal a bit harder this time.",error_update_custom_bike:"Oh, that didn't work. Sorry! Refresh and try again.",error_update_custom_bike_name:"Couldn’t change your bike's name. Maybe it doesn't like that one. Refresh and try again",not_compatible:"Not Compatible",onboarding_explore:"Go Explore",onboarding_green_spanner:"Look for the Green Spanner",onboarding_green_spanner_description:"If a component has a green spanner, it can be swapped or removed from the build completely.",onboarding_linked_components:"Understand Linked Components",onboarding_linked_components_description:"Some parts (e.g. crankset + bottom bracket) are linked. To swap one, you may need to remove both—otherwise, the system may flag it as incompatible.",onboarding_next:"Next",onboarding_open_bike_build:"Open Your Bike Build",onboarding_open_bike_build_description:"When viewing your bike build expand the component groups to view the components that apply to your bike.",onboarding_preview:"Preview or Save Changes",onboarding_preview_description:"You can swap/remove components and confirm changes to explore upgrades. These can be undone anytime before saving. Once you save, changes can’t be reverted—only removed or replaced again.",onboarding_replacement:"Choose the Right Replacement",onboarding_replacement_description:"Use the barcode or manufacturer’s part number (found on packaging or your invoice) to search. You can also use the model number, but double-check—some numbers apply to multiple versions.",onboarding_settings:"View Settings Page",onboarding_settings_description:"Your settings page is where you can change the name of your bike, update your email, and where you'll find your Bike Matrix ID as well as your Share ID.",onboarding_title:"Virtual Workshop – Quick Guide",onboarding_vw_description:"Modify the digital record of your bike to match upgrades you’ve made, ensuring compatibility checks are as accurate as possible.",productcheck_nobikeselected_label:"Check Compatiblity",productcheck_nobikeselected_message:"Add your ride to check if this part fits",productcheck_questionmark:"?",save:"Save",share:"Share",virtualworkshop_add_bike_text:"Your Bike Matrix ID can be found in the Settings page inside the Virtual Workshop",virtualworkshop_bm_id_text:"You can use either the Bike Matrix ID—found in the settings section of the Virtual Workshop—or Share ID which has been shared with you by someone else.",virtualworkshop_bom_title:"Bill Of Materials",virtualworkshop_build_text:"Build details",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"When updating their bike record, the user takes full responsibility for ensuring components are correct, understanding that changes will affect compatibility results.",virtualworkshop_do_not_pass:"Virtual Workshop is not yet available for all Bike Brands.",virtualworkshop_drivetrain:"Drivetrain",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Enter Virtual Workshop",virtualworkshop_frame_fork:"Frame & Fork",virtualworkshop_intro_text:"Update your bike build with new components and save your bike by providing an email address. View shared bike builds and access your bike IDs",virtualworkshop_other_parts:"Other Parts",virtualworkshop_remove_btn:"Remove Component",virtualworkshop_remove_subtitle:"Removing a component will delete it from your bike build. This can affect compatibility for other parts.",virtualworkshop_remove_title:"Are you sure?",virtualworkshop_revert_btn:"Revert",virtualworkshop_save_btn:"Save Bike",virtualworkshop_save_text:"In order to store your custom bike we need to save it against your email address",virtualworkshop_save_title:"Enter your email",virtualworkshop_search_text:"Enter Barcode or Search by Brand, Model, Part Number...",virtualworkshop_settings_bike_name:"Bike Name",virtualworkshop_settings_email:"Email",virtualworkshop_settings_id:"Bike Matrix ID",virtualworkshop_settings_share_id:"Share ID",virtualworkshop_shared_icon:"Shared with you",virtualworkshop_swap_btn:"Swap Component",virtualworkshop_title:"Virtual Workshop",virtualworkshop_unsaved_changes:"View unsaved changes",virtualworkshop_wheels_tyres:"Wheels & Tyres",category_bike:"Bike",category_bottombracket:"Bottom Bracket",category_bottombracketpart:"Bottom Bracket Part",category_brakeadapter:"Brake Adapter",category_brakeadapterpart:"Brake Adapter Part",category_brakecaliper:"Brake Caliper",category_brakecaliperpart:"Brake Caliper Part",category_brakecaliperservicekit:"Brake Caliper Service Kit",category_brakelever:"Brake Lever",category_brakeleverpart:"Brake Lever Part",category_brakeleverservicekit:"Brake Lever Service Kit",category_brakepads:"Brake Pads",category_brakerotor:"Brake Rotor",category_brakerotorpart:"Brake Rotor Part",category_brakesystem:"Brake System",category_brakesystempart:"Brake System Part",category_cassette:"Cassette",category_cassettepart:"Cassette Part",category_chain:"Chain",category_chainguide:"Chainguide",category_chainguidepart:"Chainguide Part",category_chainjoiner:"Chain Joiner",category_chainring:"Chainring",category_chainringbolt:"Chainring Bolt",category_crankpart:"Crank Part",category_crankset:"Crankset",category_dropperlever:"Dropper Lever",category_dropperleverpart:"Dropper Lever Part",category_ebikebattery:"eBike Battery",category_ebikebatterypart:"eBike Battery Part",category_ebikecharger:"eBike Charger",category_ebikechargerpart:"eBike Charger Part",category_ebikecontrolunit:"eBike Control Unit",category_ebikecontrolunitpart:"eBike Control Unit Part",category_ebikeinterconnect:"eBike Interconnect",category_ebikeinterconnectpart:"eBike Interconnect Part",category_ebikemotorsystem:"eBike Motor System",category_ebikemotorsystempart:"eBike Motor System Part",category_fork:"Fork",category_forkpart:"Fork Part",category_forkservicekit:"Fork Service Kit",category_frame:"Frame",category_framepart:"Frame Part",category_frontaxle:"Front Axle",category_frontaxlepart:"Front Axle Part",category_frontderailleur:"Front Derailleur",category_frontderailleurpart:"Front Derailleur Part",category_fronthub:"Front Hub",category_fronthubpart:"Front Hub Part",category_frontwheel:"Front Wheel",category_grips:"Grips",category_gripspart:"Grips Part",category_handlebar:"Handlebar",category_headset:"Headset",category_headsetpart:"Headset Part",category_nipple:"Nipple",category_pedals:"Pedals",category_pedalspart:"Pedals Part",category_rearaxle:"Rear Axle",category_rearaxlepart:"Rear Axle Part",category_rearderailleur:"Rear Derailleur",category_rearderailleurpart:"Rear Derailleur Part",category_rearhub:"Rear Hub",category_rearhubpart:"Rear Hub Part",category_rearshock:"Rear Shock",category_rearshockpart:"Rear Shock Part",category_rearshockservicekit:"Rear Shock Service Kit",category_rearwheel:"Rear Wheel",category_rim:"Rim",category_saddle:"Saddle",category_seatpost:"Seat Post",category_seatpostclamp:"Seat Post Clamp",category_seatpostclamppart:"Seat Post Clamp Part",category_seatpostpart:"Seat Post Part",category_seatpostservicekit:"Seat Post Service Kit",category_shiftadapter:"Shift Adapter",category_shiftadapterpart:"Shift Adapter Part",category_shiftbrakecombo:"Shift Brake Combo",category_shiftbrakecombopart:"Shift Brake Combo Part",category_shifter:"Shifter",category_shifterpart:"Shifter Part",category_spoke:"Spoke",category_stem:"Stem",category_stempart:"Stem Part",category_tube:"Tube",category_tyre:"Tyre",category_wheelset:"Wheelset",checksku_message_nobikefound:"Could not find a bike with the provided Bike Key",checksku_message_nocompatibilityinfo:"No Compatibility Information",checksku_message_noproductfound:"Could not find a part with the provided SKU/Barcode/Part No",checksku_message_notcompatible:"Not Compatible",checksku_warning_unabletoperformcheck:"Unable to perform compatibility check. Please check the compatibility manually."}},fr:{translation:{bikematrix_poweredby:"Une solution Bike Matrix",bikeselector_addbike_brand_desc:"Votre marque de vélo se trouve généralement dans les zones mises en évidence ci-dessous.",bikeselector_addbike_brand_label:"Marque",bikeselector_addbike_brand_select:"Sélectionnez la marque de votre vélo",bikeselector_addbike_find_btn:"Trouver mon vélo",bikeselector_addbike_framespec_desc:"Votre version de cadre de vélo se trouve généralement dans les zones mises en évidence ci-dessous.",bikeselector_addbike_framespec_label:"Version du cadre",bikeselector_addbike_framespec_select:"Sélectionnez votre version de cadre",bikeselector_addbike_model_desc:"Votre modèle de vélo se trouve généralement dans les zones mises en évidence ci-dessous.",bikeselector_addbike_model_label:"Modèle",bikeselector_addbike_model_select:"Sélectionnez votre modèle de vélo",bikeselector_addbike_title:"Ajouter un vélo",bikeselector_browse_back_btn:"Retourner à mes vélos",bikeselector_browse_products_label:"Voir les produits compatibles",bikeselector_browse_shop_btn:"Voir les produits",bikeselector_browse_title:"Commencer vos achats",bikeselector_confirm_brandmodelframespec_label:"Marque, modèle, version du cadre",bikeselector_confirm_confirm_btn:"Oui, c’est mon vélo !",bikeselector_confirm_framesize_label:"Taille du cadre",bikeselector_confirm_notyourride_msg:"Ce n’est pas votre vélo ? Sélectionnez un champ ci-dessus pour effectuer une modification.",bikeselector_confirm_title:"Confirmer votre vélo",bikeselector_confirm_yearbikespec_label:"Année, version du vélo",bikeselector_home_add_a_bike:"Ajoutez un vélo ci-dessous pour démarrer...",bikeselector_home_add_btn:"Ajouter un vélo",bikeselector_home_browse_btn:"Parcourir les compatibilités",bikeselector_home_close_btn:"Fermer",bikeselector_home_empty:"L’espace Mes vélos est vide !",bikeselector_home_footer_message:"Les fabricants de vélo peuvent changer les caractéristiques des vélos sans préavis. Les différences par rapport aux spécifications d’origine peuvent avoir un impact sur les résultats de compatibilité.",bikeselector_home_title:"Mes vélos",bikeselector_search_bikespec_label:"Version du vélo",bikeselector_search_bikespec_select:"Sélectionnez la version du vélo",bikeselector_search_bikespec_select_all:"Tous",bikeselector_search_confirm_btn:"Confirmer la sélection",bikeselector_search_no_bikes_found:"Nous n’avons pas trouvé de vélo",bikeselector_search_number_bikes_found:"{{number_found}} vélos trouvés",bikeselector_search_one_bike_found:"1 vélo trouvé",bikeselector_search_searching:"Recherche...",bikeselector_search_title:"Recherche du vélo",bikeselector_search_year_label:"Année",bikeselector_size_confirm_btn:"Confirmer la taille",bikeselector_size_framesize_desc:"La taille de votre cadre se trouve généralement dans les zones mises en évidence ci-dessous.",bikeselector_size_framesize_label:"Taille du cadre",bikeselector_size_framesize_one_size:"Taille unique",bikeselector_size_framesize_select:"Sélectionnez votre taille de cadre",bikeselector_size_title:"Sélectionnez votre taille",cancel:"Annuler",category_brakeadapterrear:"Adaptateur de frein arrière",category_brakecaliperrear:"Étrier De Frein Arrière",category_brakecaliperfront:"Etrier De Frein Avant",category_brakeleverlh:"Levier De Frein Main Gauche",category_brakeleverrh:"Levier De Frein Main Droite",category_brakepadsfront:"Plaquettes De Frein Avant",category_brakepadsrear:"Plaquettes De Frein Arrière",category_brakerotorfront:"Disque De Frein Avant",category_brakes:"Freins",category_chainringspider:"Étoile de Plateau",category_cockpit:"Poste de pilotage",category_drivetrain:"Transmission",category_framefork:"Cadre et Fourche",category_largestchainring:"Plus Grand Plateau",category_secondlargestchainring:"Deuxième Plus Grand Plateau",category_shifteradapterlh:"Adaptateur de levier de vitesse, main gauche",category_shifteradapterrh:"Adaptateur de levier de vitesse, main droite",category_shifterbrakecombolh:"Manette De Vitesse Et Frein Combo Main Gauche",category_shifterbrakecomborh:"Combo frein de levier de vitesse, main droite",category_shifterlh:"Manette De Vitesse Gauche",category_shifterrh:"Manette De Vitesse Main Droite",category_thirdlargestchainring:"Troisième Plus Grand Plateau",category_tyrefront:"Pneu Avant",category_tyrerear:"Pneu arrière",category_wheelstyres:"Roues et pneus",category_brakeadapterfront:"Adaptateur De Frein Avant",category_brakerotorrear:"Disque De Frein Arrière",compatible:"Compatible",compatible_check_notes:"Compatible - Consultez les notes",compatiblelist_header:"Produits compatibles",compatiblelist_nobikeselected:"Aucun vélo sélectionné. Cliquez ici pour ajouter votre vélo et voir les composants compatibles",compatiblelist_noresults:"Nous n’avons pas trouvé de produits compatibles",compatiblelist_pageone:"Tous les produits compatibles avec votre vélo peuvent être consultés <a>ici</a>.",compatiblelist_unavailable:"Nous proposerons bientôt des pièces compatibles de cette catégorie de produits pour la marque de vélo que vous avez sélectionnée.",confirm:"Confirmer",copy:"Copier",edit:"Modifier",error_add_component:"Cette pièce n’a pas pu être ajoutée. Essayez à nouveau, cette fois-ci sera la bonne.",error_add_custom_bike:"Oups... Nous n’avons pas pu créer votre vélo personnalisé. Actualisez la page et réessayez.",error_find_products:"Hum... Nous avons du mal à monter la côte... Actualisez la page et réessayez.",error_find_products_no_results:"Hum... Nous ne trouvons pas ce produit. Essayez un autre numéro de modèle ou épelez différemment.",error_generic:"Une erreur s’est produite dans le sprint final - {{endpoint_location}}",error_get_bike_bom:"C’est embarrassant ! Votre configuration de vélo n’a pas pu être récupérée. Actualisez la page et réessayez.",error_invalid_email:"Cet e-mail n’a pas l’air valide. Avez-vous une autre option ?",error_remove_component:"Cette pièce veut vraiment rester sur votre vélo. Actualisez la page et réessayez.",error_revert_component:"Cette pièce veut vraiment rester sur votre vélo. Actualisez la page et réessayez.",error_save_custom_bike:"Désolés, votre vélo n’a pas été enregistré. Essayez à nouveau, en pédalant plus vite cette fois.",error_update_custom_bike:"Oh, cela n’a pas marché. Désolés ! Actualisez la page et réessayez.",error_update_custom_bike_name:"Nous n’avons pas pu changer le nom de votre vélo. Peut-être qu’il en préfère un autre. Actualisez la page et réessayez",not_compatible:"Non compatible",onboarding_explore:"Allez explorer",onboarding_green_spanner:"Recherchez l'icône d'outil verte",onboarding_green_spanner_description:"Si un composant a un outil vert, il peut être échangé ou supprimé complètement de la construction",onboarding_linked_components:"Comprendre les composants liés",onboarding_linked_components_description:"Certaines pièces (ex : pédalier + pédalier) sont liées. Pour en échanger un, vous devrez peut-être supprimer les deux, sinon le système pourrait le signaler comme incompatible.",onboarding_next:"Suivante",onboarding_open_bike_build:"Ouvrez votre construction de vélo",onboarding_open_bike_build_description:"Lorsque vous visualisez la construction de votre vélo, développez les groupes de composants pour afficher les composants qui s'appliquent à votre vélo.",onboarding_preview:"Prévisualiser ou enregistrer les modifications",onboarding_preview_description:"Vous pouvez échanger/supprimer des composants et confirmer les modifications pour explorer les mises à niveau. Ceux-ci peuvent être annulés à tout moment avant d’enregistrer. Une fois enregistrées, les modifications ne peuvent pas être annulées : elles sont uniquement supprimées ou remplacées à nouveau.",onboarding_replacement:"Choisissez le bon remplacement",onboarding_replacement_description:"Utilisez le code-barres ou le numéro de pièce du fabricant (trouvé sur l’emballage ou sur votre facture) pour effectuer une recherche. Vous pouvez également utiliser le numéro de modèle, mais vérifiez bien : certains numéros s'appliquent à plusieurs versions.",onboarding_settings:"Afficher la page des paramètres",onboarding_settings_description:"Votre page de paramètres est l’endroit où vous pouvez modifier le nom de votre vélo, mettre à jour votre adresse e-mail, et où vous trouverez votre identifiant Bike Matrix ainsi que votre identifiant de partage.",onboarding_title:"Atelier virtuel – Guide rapide",onboarding_vw_description:"Mettez à jour les informations numériques de votre vélo pour refléter les changements apportés et garantir des vérifications de compatibilité aussi précises que possible.",productcheck_nobikeselected_label:"Vérifier la compatibilité",productcheck_nobikeselected_message:"Ajoutez votre vélo pour vérifier si ce composant est compatible",productcheck_questionmark:"?",save:"Enregistrer",share:"Partager",virtualworkshop_add_bike_text:"Votre identificateur Bike Matrix peut être trouvé dans la page de configuration de votre Atelier virtuel",virtualworkshop_bm_id_text:"Vous pouvez utiliser l’identificateur Bike Matrix qui se trouve dans la page de configuration de votre Atelier virtuel, ou un identificateur de partage qui vous a été donné par quelqu’un d’autre.",virtualworkshop_bom_title:"Liste des pièces",virtualworkshop_build_text:"Détails de configuration",virtualworkshop_cockpit:"Poste de pilotage",virtualworkshop_disclaimer:"Lors de l’actualisation de la configuration de son vélo, la personne utilisatrice doit s’assurer que les composants sont corrects, sachant que les modifications affecteront les résultats de compatibilité.",virtualworkshop_do_not_pass:"Der virtuelle Workshop ist noch nicht für alle Fahrradmarken verfügbar.",virtualworkshop_drivetrain:"Groupe de transmission",virtualworkshop_e_drive:"Transmission électrique",virtualworkshop_enter_button:"Entrer dans l’Atelier virtuel",virtualworkshop_frame_fork:"Cadre et fourche",virtualworkshop_intro_text:"Actualisez votre configuration de vélo avec de nouveaux composants et enregistrez votre vélo en fournissant une adresse e-mail. Voir les configurations de vélo partagées et accéder aux identificateurs de vos vélos",virtualworkshop_other_parts:"Autres pièces",virtualworkshop_remove_btn:"Retirer le composant",virtualworkshop_remove_subtitle:"Retirer un composant le supprimera de la configuration de votre vélo. Cela peut affecter la compatibilité avec d’autres pièces.",virtualworkshop_remove_title:"Êtes-vous sûr·e ?",virtualworkshop_revert_btn:"Rétablir",virtualworkshop_save_btn:"Sauvegarder le vélo",virtualworkshop_save_text:"Afin de sauvegarder votre vélo personnalisé, nous devons l’enregistrer avec votre adresse e-mail",virtualworkshop_save_title:"Saisir votre e-mail",virtualworkshop_search_text:"Saisir un code-barre ou chercher par marque, modèle, numéro de pièce...",virtualworkshop_settings_bike_name:"Nom du vélo",virtualworkshop_settings_email:"Adresse e-mail",virtualworkshop_settings_id:"Identificateur Bike Matrix",virtualworkshop_settings_share_id:"Identificateur de partage",virtualworkshop_shared_icon:"Partagé avec vous",virtualworkshop_swap_btn:"Échanger le composant",virtualworkshop_title:"Atelier virtuel",virtualworkshop_unsaved_changes:"Voir les changements non sauvegardés",virtualworkshop_wheels_tyres:"Roues et pneus",category_bike:"Vélo",category_bottombracket:"Boîtier de pédalier",category_bottombracketpart:"Pièce de boîtier de pédalier",category_brakeadapter:"Adaptateur pour frein",category_brakeadapterpart:"Pièce d’adaptateur pour frein",category_brakecaliper:"Étrier de frein",category_brakecaliperpart:"Pièce d’étrier de frein",category_brakecaliperservicekit:"Kit d’entretien d’étrier de frein",category_brakelever:"Levier de frein",category_brakeleverpart:"Pièce de levier de frein",category_brakeleverservicekit:"Kit d’entretien de levier de frein",category_brakepads:"Patins/plaquettes de frein",category_brakerotor:"Disque de frein",category_brakerotorpart:"Pièce de disque de frein",category_brakesystem:"Système de freinage",category_brakesystempart:"Pièce de système de freinage",category_cassette:"Cassette",category_cassettepart:"Pièce de cassette",category_chain:"Chaîne",category_chainguide:"Guide-chaîne",category_chainguidepart:"Pièce de guide-chaîne",category_chainjoiner:"Attache rapide",category_chainring:"Plateau",category_chainringbolt:"Écrou de plateau",category_crankpart:"Pièce de pédalier",category_crankset:"Pédalier",category_dropperlever:"Levier de tige de selle télescopique",category_dropperleverpart:"Pièce de levier de tige de selle télescopique",category_ebikebattery:"Batterie ebike",category_ebikebatterypart:"Pièce batterie ebike",category_ebikecharger:"Chargeur ebike",category_ebikechargerpart:"Pièce de chargeur ebike",category_ebikecontrolunit:"Commande de contrôle ebike",category_ebikecontrolunitpart:"Pièce de commande de contrôle ebike",category_ebikeinterconnect:"Câbles de connexion ebike",category_ebikeinterconnectpart:"Pièce de câbles connexion ebike",category_ebikemotorsystem:"Système moteur ebike",category_ebikemotorsystempart:"Pièce système moteur ebike",category_fork:"Fourche",category_forkpart:"Pièce de fourche",category_forkservicekit:"Kit d’entretien de fourche",category_frame:"Cadre",category_framepart:"Pièce de cadre",category_frontaxle:"Axe avant",category_frontaxlepart:"Pièce d’axe avant",category_frontderailleur:"Dérailleur avant",category_frontderailleurpart:"Pièce de dérailleur avant",category_fronthub:"Moyeu avant",category_fronthubpart:"Pièce de moyeu avant",category_frontwheel:"Roue avant",category_grips:"Poignées",category_gripspart:"Pièce de poignées",category_handlebar:"Guidon",category_headset:"Jeu de direction",category_headsetpart:"Pièce de jeu de direction",category_nipple:"Écrou de rayon",category_pedals:"Pédales",category_pedalspart:"Pièce de pédales",category_rearaxle:"Axe arrière",category_rearaxlepart:"Pièce d’axe arrière",category_rearderailleur:"Dérailleur arrière",category_rearderailleurpart:"Pièce de dérailleur arrière",category_rearhub:"Moyeu arrière",category_rearhubpart:"Pièce de moyeu arrière",category_rearshock:"Amortisseur arrière",category_rearshockpart:"Pièce d’amortisseur arrière",category_rearshockservicekit:"Kit d’entretien pour amortisseur arrière",category_rearwheel:"Roue arrière",category_rim:"Jante",category_saddle:"Selle",category_seatpost:"Tige de selle",category_seatpostclamp:"Collier de serrage pour tige de selle",category_seatpostclamppart:"Pièce de collier de serrage pour tige de selle",category_seatpostpart:"Pièce de tige de selle",category_seatpostservicekit:"Kit d’entretien de tige de selle",category_shiftadapter:"Adaptateur de commande de vitesse",category_shiftadapterpart:"Pièce d’adaptateur de commande de vitesse",category_shiftbrakecombo:"Combo levier manette",category_shiftbrakecombopart:"Pièce de combo levier manette",category_shifter:"Commande de vitesse",category_shifterpart:"Pièce de commande de vitesse",category_spoke:"Rayon",category_stem:"Potence",category_stempart:"Pièce de potence",category_tube:"Chambre à air",category_tyre:"Pneu",category_wheelset:"Paire de roues",checksku_message_nobikefound:"Nous n’avons pas pu trouver de vélo avec le Code Vélo fourni",checksku_message_nocompatibilityinfo:"Pas d’information concernant la compatibilité",checksku_message_noproductfound:"Nous n’avons pas pu trouver de composant avec le code produit/code-barre/numéro de composant fourni",checksku_message_notcompatible:"Non compatible",checksku_warning_unabletoperformcheck:"Impossible de vérifier la compatibilité. Veuillez vérifier la compatibilité manuellement."}},"en-US":{translation:{bikematrix_poweredby:"Powered by Bike Matrix",bikeselector_addbike_brand_desc:"Your bike brand is typically found in the areas highlighted below.",bikeselector_addbike_brand_label:"Brand",bikeselector_addbike_brand_select:"Select your bike brand",bikeselector_addbike_find_btn:"Find my ride",bikeselector_addbike_framespec_desc:"Your bike frame spec is typically found in the areas highlighted below.",bikeselector_addbike_framespec_label:"Frame Spec",bikeselector_addbike_framespec_select:"Select your bike's frame spec",bikeselector_addbike_model_desc:"Your bike model is typically found in the areas highlighted below.",bikeselector_addbike_model_label:"Model",bikeselector_addbike_model_select:"Select your bike model",bikeselector_addbike_title:"Add A Bike",bikeselector_browse_back_btn:"Back to bike Lounge",bikeselector_browse_products_label:"Shop for compatible products",bikeselector_browse_shop_btn:"Shop Products",bikeselector_browse_title:"Start Shopping!",bikeselector_confirm_brandmodelframespec_label:"Brand, Model, Frame Series",bikeselector_confirm_confirm_btn:"Yep, that's my ride!",bikeselector_confirm_framesize_label:"Frame Size",bikeselector_confirm_notyourride_msg:"Not your ride? Select a field above to make a change.",bikeselector_confirm_title:"Confirm Your Ride",bikeselector_confirm_yearbikespec_label:"Year, Bike Spec",bikeselector_home_add_a_bike:"Add a bike below to get started...",bikeselector_home_add_btn:"Add A Bike",bikeselector_home_browse_btn:"Browse Compatiblity",bikeselector_home_close_btn:"Close",bikeselector_home_empty:"Your lounge is empty!",bikeselector_home_footer_message:"Bike manufacturers may change bike specifications without notice. Differences from stock specifications can impact compatibility results.",bikeselector_home_title:"My Bike Lounge",bikeselector_search_bikespec_label:"Bike Spec",bikeselector_search_bikespec_select:"Select spec level",bikeselector_search_bikespec_select_all:"All",bikeselector_search_confirm_btn:"Confirm Selection",bikeselector_search_no_bikes_found:"No bikes found",bikeselector_search_number_bikes_found:"{{number_found}} bikes found",bikeselector_search_one_bike_found:"1 bike found",bikeselector_search_searching:"Searching...",bikeselector_search_title:"Bike Search",bikeselector_search_year_label:"Year",bikeselector_size_confirm_btn:"Confirm Size",bikeselector_size_framesize_desc:"Your bike frame size is typically found in the areas highlighted below.",bikeselector_size_framesize_label:"Frame Size",bikeselector_size_framesize_one_size:"One Size",bikeselector_size_framesize_select:"Select your frame size",bikeselector_size_title:"Select Your Size",cancel:"Cancel",category_brakeadapterrear:"Brake Adapter Rear",category_brakecaliperrear:"Brake Caliper Rear",category_brakecaliperfront:"Brake Caliper Front",category_brakeleverlh:"Brake Lever LH",category_brakeleverrh:"Brake Lever RH",category_brakepadsfront:"Brake Pads Front",category_brakepadsrear:"Brake Pads Rear",category_brakerotorfront:"Brake Rotor Front",category_brakes:"Brakes",category_chainringspider:"Chainring Spider",category_cockpit:"Cockpit",category_drivetrain:"Drivetrain",category_framefork:"Frame & Fork",category_largestchainring:"Largest Chainring",category_secondlargestchainring:"Second Largest Chainring",category_shifteradapterlh:"Shifter Adapter LH",category_shifteradapterrh:"Shifter Adapter RH",category_shifterbrakecombolh:"Shifter Brake Combo LH",category_shifterbrakecomborh:"Shifter Brake Combo RH",category_shifterlh:"Shifter LH",category_shifterrh:"Shifter RH",category_thirdlargestchainring:"Third Largeest Chainring",category_tyrefront:"Tyre Front",category_tyrerear:"Tyre Rear",category_wheelstyres:"Wheels & Tires",category_brakeadapterfront:"Brake Adapter Front",category_brakerotorrear:"Brake Rotor Rear",compatible:"Compatible",compatible_check_notes:"Compatible - Check Notes",compatiblelist_header:"Compatible Products",compatiblelist_nobikeselected:"No bike selected. Click here to add your ride to check for compatible parts",compatiblelist_noresults:"No compatible products found",compatiblelist_pageone:"All products compatible with your bike can be seen <a>here</a>.",compatiblelist_unavailable:"Compatibility for this product category for your selected bike brand is coming soon!",confirm:"Confirm",copy:"Copy",edit:"Edit",error_add_component:"That component didn't stick. Try again and throw it a little harder this time.",error_add_custom_bike:"Oops... We couldn't create your custom bike. Refresh and give it another try.",error_find_products:"Hmmm… It looks like our wheels aren’t quite spinning. Refresh and try again.",error_find_products_no_results:"Hmmm... We can’t find that product. Try a different model number or adjust your spelling.",error_generic:"There was an error on the endpoint - {{endpoint_location}}",error_get_bike_bom:"That's embarrassing! Your bike build could not be retrieved. Refresh and try again.",error_invalid_email:"It doesn’t look like that’s a valid email, any other options?",error_remove_component:"This component really wants to stay on the bike. Refresh and try again.",error_revert_component:"This component really wants to stay on the bike. Refresh and try again.",error_save_custom_bike:"Our bad, your bike wasn’t saved. Try again and pedal a bit harder this time.",error_update_custom_bike:"Oh, that didn't work. Sorry! Refresh and try again.",error_update_custom_bike_name:"Couldn’t change your bike's name. Maybe it doesn't like that one. Refresh and try again",not_compatible:"Not Compatible",onboarding_explore:"Go Explore",onboarding_green_spanner:"Look for the Green Spanner ",onboarding_green_spanner_description:"If a component has a green spanner, it can be swapped or removed from the build completely.",onboarding_linked_components:"Understand Linked Components",onboarding_linked_components_description:"Some parts (e.g. crankset + bottom bracket) are linked. To swap one, you may need to remove both—otherwise, the system may flag it as incompatible.",onboarding_next:"Next",onboarding_open_bike_build:"Open Your Bike Build",onboarding_open_bike_build_description:"When viewing your bike build expand the component groups to view the components that apply to your bike.",onboarding_preview:"Preview or Save Changes",onboarding_preview_description:"You can swap/remove components and confirm changes to explore upgrades. These can be undone anytime before saving. Once you save, changes can’t be reverted—only removed or replaced again.",onboarding_replacement:"Choose the Right Replacement",onboarding_replacement_description:"Use the barcode or manufacturer’s part number (found on packaging or your invoice) to search. You can also use the model number, but double-check—some numbers apply to multiple versions.",onboarding_settings:"View Settings Page",onboarding_settings_description:"Your settings page is where you can change the name of your bike, update your email, and where you'll find your Bike Matrix ID as well as your Share ID.",onboarding_title:"Virtual Workshop – Quick Guide",onboarding_vw_description:"Modify the digital record of your bike to match upgrades you’ve made, ensuring compatibility checks are as accurate as possible.",productcheck_nobikeselected_label:"Check Compatiblity",productcheck_nobikeselected_message:"Add your ride to check if this part fits",productcheck_questionmark:"?",save:"Save",share:"Share",virtualworkshop_add_bike_text:"Your Bike Matrix ID can be found in the Settings page inside the Virtual Workshop",virtualworkshop_bm_id_text:"You can use either the Bike Matrix ID—found in the settings section of the Virtual Workshop—or Share ID which has been shared with you by someone else.",virtualworkshop_bom_title:"Bill Of Materials",virtualworkshop_build_text:"Build details",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"When updating their bike record, the user takes full responsibility for ensuring components are correct, understanding that changes will affect compatibility results.",virtualworkshop_do_not_pass:"Virtual Workshop is not yet available for all Bike Brands.",virtualworkshop_drivetrain:"Drivetrain",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Enter Virtual Workshop",virtualworkshop_frame_fork:"Frame & Fork",virtualworkshop_intro_text:"Update your bike build with new components and save your bike by providing an email address. View shared bike builds and access your bike IDs",virtualworkshop_other_parts:"Other Parts",virtualworkshop_remove_btn:"Remove Component",virtualworkshop_remove_subtitle:"Removing a component will delete it from your bike build. This can affect compatibility for other parts.",virtualworkshop_remove_title:"Are you sure?",virtualworkshop_revert_btn:"Revert",virtualworkshop_save_btn:"Save Bike",virtualworkshop_save_text:"In order to store your custom bike we need to save it against your email address",virtualworkshop_save_title:"Enter your email",virtualworkshop_search_text:"Enter Barcode or Search by Brand, Model, Part Number...",virtualworkshop_settings_bike_name:"Bike Name",virtualworkshop_settings_email:"Email",virtualworkshop_settings_id:"Bike Matrix ID",virtualworkshop_settings_share_id:"Share ID",virtualworkshop_shared_icon:"Shared with you",virtualworkshop_swap_btn:"Swap Component",virtualworkshop_title:"Virtual Workshop",virtualworkshop_unsaved_changes:"View unsaved changes",virtualworkshop_wheels_tyres:"Wheels & Tyres",category_bike:"Bike",category_bottombracket:"Bottom Bracket",category_bottombracketpart:"Bottom Bracket Part",category_brakeadapter:"Brake Adapter",category_brakeadapterpart:"Brake Adapter Part",category_brakecaliper:"Brake Caliper",category_brakecaliperpart:"Brake Caliper Part",category_brakecaliperservicekit:"Brake Caliper Service Kit",category_brakelever:"Brake Lever",category_brakeleverpart:"Brake Lever Part",category_brakeleverservicekit:"Brake Lever Service Kit",category_brakepads:"Brake Pads",category_brakerotor:"Brake Rotor",category_brakerotorpart:"Brake Rotor Part",category_brakesystem:"Brake System",category_brakesystempart:"Brake System Part",category_cassette:"Cassette",category_cassettepart:"Cassette Part",category_chain:"Chain",category_chainguide:"Chainguide",category_chainguidepart:"Chainguide Part",category_chainjoiner:"Chain Joiner",category_chainring:"Chainring",category_chainringbolt:"Chainring Bolt",category_crankpart:"Crank Part",category_crankset:"Crankset",category_dropperlever:"Dropper Lever",category_dropperleverpart:"Dropper Lever Part",category_ebikebattery:"eBike Battery",category_ebikebatterypart:"eBike Battery Part",category_ebikecharger:"eBike Charger",category_ebikechargerpart:"eBike Charger Part",category_ebikecontrolunit:"eBike Control Unit",category_ebikecontrolunitpart:"eBike Control Unit Part",category_ebikeinterconnect:"eBike Interconnect",category_ebikeinterconnectpart:"eBike Interconnect Part",category_ebikemotorsystem:"eBike Motor System",category_ebikemotorsystempart:"eBike Motor System Part",category_fork:"Fork",category_forkpart:"Fork Part",category_forkservicekit:"Fork Service Kit",category_frame:"Frame",category_framepart:"Frame Part",category_frontaxle:"Front Axle",category_frontaxlepart:"Front Axle Part",category_frontderailleur:"Front Derailleur",category_frontderailleurpart:"Front Derailleur Part",category_fronthub:"Front Hub",category_fronthubpart:"Front Hub Part",category_frontwheel:"Front Wheel",category_grips:"Grips",category_gripspart:"Grips Part",category_handlebar:"Handlebar",category_headset:"Headset",category_headsetpart:"Headset Part",category_nipple:"Nipple",category_pedals:"Pedals",category_pedalspart:"Pedals Part",category_rearaxle:"Rear Axle",category_rearaxlepart:"Rear Axle Part",category_rearderailleur:"Rear Derailleur",category_rearderailleurpart:"Rear Derailleur Part",category_rearhub:"Rear Hub",category_rearhubpart:"Rear Hub Part",category_rearshock:"Rear Shock",category_rearshockpart:"Rear Shock Part",category_rearshockservicekit:"Rear Shock Service Kit",category_rearwheel:"Rear Wheel",category_rim:"Rim",category_saddle:"Saddle",category_seatpost:"Seat Post",category_seatpostclamp:"Seat Post Clamp",category_seatpostclamppart:"Seat Post Clamp Part",category_seatpostpart:"Seat Post Part",category_seatpostservicekit:"Seat Post Service Kit",category_shiftadapter:"Shift Adapter",category_shiftadapterpart:"Shift Adapter Part",category_shiftbrakecombo:"Shift Brake Combo",category_shiftbrakecombopart:"Shift Brake Combo Part",category_shifter:"Shifter",category_shifterpart:"Shifter Part",category_spoke:"Spoke",category_stem:"Stem",category_stempart:"Stem Part",category_tube:"Tube",category_tyre:"Tire",category_wheelset:"Wheelset",checksku_message_nobikefound:"Could not find a bike with the provided Bike Key",checksku_message_nocompatibilityinfo:"No Compatibility Information",checksku_message_noproductfound:"Could not find a part with the provided SKU/Barcode/Part No",checksku_message_notcompatible:"Not Compatible",checksku_warning_unabletoperformcheck:"Unable to perform compatibility check. Please check the compatibility manually"}},es:{translation:{bikematrix_poweredby:"Con tecnología de Bike Matrix",bikeselector_addbike_brand_desc:"La marca de la bicicleta suele indicarse en los lugares resaltados a continuación.",bikeselector_addbike_brand_label:"Marca",bikeselector_addbike_brand_select:"Selecciona la marca de la bicicleta",bikeselector_addbike_find_btn:"Buscar mi bicicleta",bikeselector_addbike_framespec_desc:"La versión del cuadro de la bicicleta suele indicarse en los lugares resaltados a continuación.",bikeselector_addbike_framespec_label:"Versión del cuadro",bikeselector_addbike_framespec_select:"Selecciona la versión del cuadro de la bicicleta",bikeselector_addbike_model_desc:"El modelo de la bicicleta suele indicarse en los lugares resaltados a continuación.",bikeselector_addbike_model_label:"Modelo",bikeselector_addbike_model_select:"Selecciona el modelo de la bicicleta",bikeselector_addbike_title:"Añadir una bicicleta",bikeselector_browse_back_btn:"Volver a mi rincón ciclista",bikeselector_browse_products_label:"Comprar productos compatibles",bikeselector_browse_shop_btn:"Comprar productos",bikeselector_browse_title:"¡A comprar!",bikeselector_confirm_brandmodelframespec_label:"Marca, modelo y versión del cuadro",bikeselector_confirm_confirm_btn:"¡Ahí está mi bici!",bikeselector_confirm_framesize_label:"Talla del cuadro",bikeselector_confirm_notyourride_msg:"¿No es la que buscas? Selecciona uno de los campos de arriba para modificarlo.",bikeselector_confirm_title:"Confirmación de la bicicleta",bikeselector_confirm_yearbikespec_label:"Año y versión de la bicicleta",bikeselector_home_add_a_bike:"Añade una bicicleta a continuación para empezar.",bikeselector_home_add_btn:"Añadir una bicicleta",bikeselector_home_browse_btn:"Ver compatibilidad",bikeselector_home_close_btn:"Cerrar",bikeselector_home_empty:"¡Tu rincón ciclista está vacío!",bikeselector_home_footer_message:"Los fabricantes pueden modificar la versión de la bicicleta sin previo aviso. Las diferencias con la versión de las unidades en existencias pueden afectar a la compatibilidad.",bikeselector_home_title:"Mi rincón ciclista",bikeselector_search_bikespec_label:"Versión de la bicicleta",bikeselector_search_bikespec_select:"Selecciona la versión",bikeselector_search_bikespec_select_all:"Todos",bikeselector_search_confirm_btn:"Confirmar selección",bikeselector_search_no_bikes_found:"No se han encontrado bicicletas",bikeselector_search_number_bikes_found:"Se han encontrado {{number_found}} bicicletas",bikeselector_search_one_bike_found:"Se ha encontrado 1 bicicleta",bikeselector_search_searching:"Buscando...",bikeselector_search_title:"Búsqueda de bicicletas",bikeselector_search_year_label:"Año",bikeselector_size_confirm_btn:"Confirmar talla",bikeselector_size_framesize_desc:"La talla del cuadro de la bicicleta suele indicarse en los lugares resaltados a continuación.",bikeselector_size_framesize_label:"Talla del cuadro",bikeselector_size_framesize_one_size:"Talla única",bikeselector_size_framesize_select:"Selecciona la talla del cuadro",bikeselector_size_title:"Selecciona la talla",cancel:"Cancelar",category_brakeadapterrear:"Adaptador de freno trasero",category_brakecaliperrear:"Pinza de freno trasera",category_brakecaliperfront:"Pinza de freno delantera",category_brakeleverlh:"Palanca de freno izquierda",category_brakeleverrh:"Palanca de freno derecha",category_brakepadsfront:"Pastillas de freno delanteras",category_brakepadsrear:"Pastillas de freno traseras",category_brakerotorfront:"Rotor de freno delantero",category_brakes:"Frenos",category_chainringspider:"Araña de plato",category_cockpit:"Carlinga",category_drivetrain:"Transmisión",category_framefork:"Cuadro y horquilla",category_largestchainring:"Plato más grande",category_secondlargestchainring:"Segundo plato más grande",category_shifteradapterlh:"Adaptador de palanca de cambios mano izquierda",category_shifteradapterrh:"Adaptador de cambio de mano derecha",category_shifterbrakecombolh:"Combinación de freno de palanca de cambios mano izquierda",category_shifterbrakecomborh:"Combo de freno de palanca de cambios mano derecha",category_shifterlh:"Palanca de cambios mano izquierda",category_shifterrh:"Palanca de cambios mano derecha",category_thirdlargestchainring:"Tercero plato más grande",category_tyrefront:"Neumático delantero",category_tyrerear:"Neumático trasero",category_wheelstyres:"Ruedas y neumáticos",category_brakeadapterfront:"Adaptador de freno delantero",category_brakerotorrear:"Rotor de freno trasero",compatible:"Compatible",compatible_check_notes:"Compatible - Consulta las notas",compatiblelist_header:"Productos compatibles",compatiblelist_nobikeselected:"No se ha seleccionado ninguna bicicleta. Haz clic aquí para añadir tu bicicleta y buscar componentes compatibles",compatiblelist_noresults:"No se han encontrado productos compatibles",compatiblelist_pageone:"Puedes consultar todos los productos compatibles con tu bicicleta <a>aquí</a>.",compatiblelist_unavailable:"Muy pronto podrás consultar la compatibilidad de esta categoría de productos con la marca de bicicleta que has seleccionado.",confirm:"Confirmar",copy:"Copiar",edit:"Editar",error_add_component:"El componente no ha cuajado. Inténtalo de nuevo y presta un poco más de atención esta vez.",error_add_custom_bike:"Vaya... No hemos podido crear tu bicicleta personalizada. Actualiza la página e inténtalo de nuevo.",error_find_products:"Vaya… Parece que tenemos problemas. Actualiza la página e inténtalo de nuevo.",error_find_products_no_results:"Vaya... No encontramos el producto. Prueba con otro número de modelo o intenta escribirlo de otra manera.",error_generic:"Se ha producido un error en el extremo: {{endpoint_location}}",error_get_bike_bom:"¡Menuda faena! No se ha podido recuperar la configuración de tu bicicleta. Actualiza la página e inténtalo de nuevo.",error_invalid_email:"Parece que este correo electrónico no es válido. ¿Puedes probar con otro?",error_remove_component:"Este componente no quiere bajarse de la bicicleta. Actualiza la página e inténtalo de nuevo.",error_revert_component:"Este componente no quiere bajarse de la bicicleta. Actualiza la página e inténtalo de nuevo.",error_save_custom_bike:"¡Oh, no! La bicicleta no se ha guardado. Inténtalo de nuevo y dale con más ganas esta vez.",error_update_custom_bike:"Vaya, las cosas no han salido bien. ¡Lo sentimos! Actualiza la página e inténtalo de nuevo.",error_update_custom_bike_name:"No hemos podido cambiar el nombre de la bicicleta. Puede que no le guste. Actualiza la página e inténtalo de nuevo",not_compatible:"No compatible",onboarding_explore:"Ir a explorar",onboarding_green_spanner:"Busca la llave inglesa verde",onboarding_green_spanner_description:"Si un componente tiene una llave verde, se puede cambiar o eliminar completamente de la compilación.",onboarding_linked_components:"Comprender los componentes vinculados",onboarding_linked_components_description:"Algunas piezas (por ejemplo, juego de bielas + pedalier) están vinculadas. Para intercambiar uno, es posible que tengas que eliminar ambos; de lo contrario, el sistema puede marcarlo como incompatible.",onboarding_next:"Próximo",onboarding_open_bike_build:"Abre tu construcción de bicicletas",onboarding_open_bike_build_description:"Al ver la construcción de su bicicleta, expanda los grupos de componentes para ver los componentes que se aplican a su bicicleta.",onboarding_preview:"Vista previa o guardar cambios",onboarding_preview_description:"Puede intercambiar/eliminar componentes y confirmar cambios para explorar actualizaciones. Estos se pueden deshacer en cualquier momento antes de guardarlos. Una vez que guardes, los cambios no se pueden revertir, solo eliminarlos o reemplazarlos nuevamente.",onboarding_replacement:"Elija el reemplazo adecuado",onboarding_replacement_description:"Utilice el código de barras o el número de pieza del fabricante (que se encuentra en el paquete o en su factura) para buscar. También puedes usar el número de modelo, pero vuelve a verificar: algunos números se aplican a varias versiones.",onboarding_settings:"Ver la página de configuración",onboarding_settings_description:"Su página de configuración es donde puede cambiar el nombre de su bicicleta, actualizar su correo electrónico y donde encontrará su ID de Bike Matrix y su ID de Share.",onboarding_title:"Taller Virtual – Guía Rápida",onboarding_vw_description:"Modifica el registro digital de tu bicicleta para reflejar las mejoras que has realizado y asegurar que las comprobaciones de compatibilidad sean lo más precisas posible.",productcheck_nobikeselected_label:"Comprobar compatibilidad",productcheck_nobikeselected_message:"Quieres añadir la bicicleta para comprobar si este componente es adecuado",productcheck_questionmark:"?",save:"Guardar",share:"Compartir",virtualworkshop_add_bike_text:"Puedes consultar tu ID de Bike Matrix en la página Ajustes del Taller virtual",virtualworkshop_bm_id_text:"Puedes usar el ID de Bike Matrix (que está disponible en la sección Ajustes del Taller virtual) o el ID de uso compartido que alguien haya compartido contigo.",virtualworkshop_bom_title:"Lista de materiales",virtualworkshop_build_text:"Detalles de la configuración",virtualworkshop_cockpit:"Cockpit",virtualworkshop_disclaimer:"Siempre que se modifique el registro de la bicicleta, el usuario será el responsable final de comprobar que los componentes sean correctos, y deberá tener en cuenta que cualquier cambio que realice afectará a la compatibilidad.",virtualworkshop_do_not_pass:"El Taller Virtual aún no está disponible para todas las Marcas de Bicicletas.",virtualworkshop_drivetrain:"Sistema de transmisión",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Acceder al Taller virtual",virtualworkshop_frame_fork:"Cuadro y horquilla",virtualworkshop_intro_text:"Renueva la configuración de tu bicicleta con nuevos componentes e indica una dirección de correo electrónico para guardarla. Consulta las configuraciones de bicicleta compartidas contigo y accede a los ID de tus bicicletas.",virtualworkshop_other_parts:"Otros componentes",virtualworkshop_remove_btn:"Quitar componente",virtualworkshop_remove_subtitle:"Si quitas un componente, se eliminará de la configuración de la bicicleta. Esta acción puede afectar a la compatibilidad de otros componentes.",virtualworkshop_remove_title:"¿Seguro?",virtualworkshop_revert_btn:"Deshacer",virtualworkshop_save_btn:"Guardar bicicleta",virtualworkshop_save_text:"Para guardar tu bicicleta personalizada, debemos vincularla con tu dirección de correo electrónico",virtualworkshop_save_title:"Introduce tu correo electrónico",virtualworkshop_search_text:"Introduce un código de barras o busca por marca, modelo, número de referencia...",virtualworkshop_settings_bike_name:"Nombre de la bicicleta",virtualworkshop_settings_email:"Correo electrónico",virtualworkshop_settings_id:"ID de Bike Matrix",virtualworkshop_settings_share_id:"ID de uso compartido",virtualworkshop_shared_icon:"Compartido contigo",virtualworkshop_swap_btn:"Cambiar componente",virtualworkshop_title:"Taller virtual",virtualworkshop_unsaved_changes:"Ver los cambios sin guardar",virtualworkshop_wheels_tyres:"Ruedas y neumáticos",category_bike:"Bicicleta",category_bottombracket:"Pedalier",category_bottombracketpart:"Componente del pedalier",category_brakeadapter:"Adaptador de freno",category_brakeadapterpart:"Componente del adaptador de freno",category_brakecaliper:"Pinza de freno",category_brakecaliperpart:"Componente de la pinza de freno",category_brakecaliperservicekit:"Kit de mantenimiento de las pinzas de freno",category_brakelever:"Maneta de freno",category_brakeleverpart:"Componente de la maneta de freno",category_brakeleverservicekit:"Kit de mantenimiento de la maneta de freno",category_brakepads:"Pastillas de freno",category_brakerotor:"Disco de freno",category_brakerotorpart:"Componente del disco de freno",category_brakesystem:"Sistema de frenos",category_brakesystempart:"Componente del sistema de frenos",category_cassette:"Cassette",category_cassettepart:"Componente del cassette",category_chain:"Cadena",category_chainguide:"Guiacadenas",category_chainguidepart:"Componente del guiacadenas",category_chainjoiner:"Enlace de cadena",category_chainring:"Plato",category_chainringbolt:"Tornillo para plato",category_crankpart:"Componente de la biela",category_crankset:"Juego de bielas",category_dropperlever:"Palanca de tija telescópica",category_dropperleverpart:"Componente de la palanca de tija telescópica",category_ebikebattery:"Batería para bicicleta eléctrica",category_ebikebatterypart:"Componente de la batería para bicicleta eléctrica",category_ebikecharger:"Cargador para bicicleta eléctrica",category_ebikechargerpart:"Componente del cargador para bicicleta eléctrica",category_ebikecontrolunit:"Unidad de control para bicicleta eléctrica",category_ebikecontrolunitpart:"Componente de la unidad de control para bicicleta eléctrica",category_ebikeinterconnect:"Sistema de conexión para bicicleta eléctrica",category_ebikeinterconnectpart:"Componente del sistema de conexión para bicicleta eléctrica",category_ebikemotorsystem:"Motor para bicicleta eléctrica",category_ebikemotorsystempart:"Componente del motor para bicicleta eléctrica",category_fork:"Horquilla",category_forkpart:"Componente de la horquilla",category_forkservicekit:"Kit de mantenimiento de la horquilla",category_frame:"Cuadro",category_framepart:"Componente del cuadro",category_frontaxle:"Eje delantero",category_frontaxlepart:"Componente del eje delantero",category_frontderailleur:"Desviador delantero",category_frontderailleurpart:"Componente del desviador delantero",category_fronthub:"Buje delantero",category_fronthubpart:"Componente del buje delantero",category_frontwheel:"Rueda delantera",category_grips:"Puños",category_gripspart:"Componente de los puños",category_handlebar:"Manillar",category_headset:"Dirección",category_headsetpart:"Componente de la dirección",category_nipple:"Válvula",category_pedals:"Pedales",category_pedalspart:"Componente de los pedales",category_rearaxle:"Eje trasero",category_rearaxlepart:"Componente del eje trasero",category_rearderailleur:"Desviador trasero",category_rearderailleurpart:"Componente del desviador trasero",category_rearhub:"Buje trasero",category_rearhubpart:"Componente del buje trasero",category_rearshock:"Amortiguador trasero",category_rearshockpart:"Componente del amortiguador trasero",category_rearshockservicekit:"Kit de mantenimiento del amortiguador trasero",category_rearwheel:"Rueda trasera",category_rim:"Llanta",category_saddle:"Sillín",category_seatpost:"Tija del sillín",category_seatpostclamp:"Abrazadera de la tija del sillín",category_seatpostclamppart:"Componente de la abrazadera de la tija del sillín",category_seatpostpart:"Componente de la tija del sillín",category_seatpostservicekit:"Kit de mantenimiento de la tija del sillín",category_shiftadapter:"Adaptador del cambio",category_shiftadapterpart:"Componente del adaptador del cambio",category_shiftbrakecombo:"Maneta de cambio/freno",category_shiftbrakecombopart:"Componente de la maneta de cambio/freno",category_shifter:"Mando de cambio",category_shifterpart:"Componente del mando de cambio",category_spoke:"Radio",category_stem:"Potencia",category_stempart:"Componente de la potencia",category_tube:"Cámara",category_tyre:"Neumático",category_wheelset:"Juego de ruedas",checksku_message_nobikefound:"No se ha encontrado ninguna bicicleta con la clave indicada",checksku_message_nocompatibilityinfo:"No hay información sobre la compatibilidad",checksku_message_noproductfound:"No se ha encontrado ningún componente con la referencia, el código de barras o el número de pieza indicado",checksku_message_notcompatible:"No compatible",checksku_warning_unabletoperformcheck:"No se puede comprobar la compatibilidad. Comprueba la compatibilidad de forma manual."}},fi:{translation:{bikematrix_poweredby:"Powered by Bike Matrix",bikeselector_addbike_brand_desc:"Pyörän valmistaja löytyy yleensä korostetulta alueelta",bikeselector_addbike_brand_label:"Valmistaja",bikeselector_addbike_brand_select:"Valitse pyörän valmistaja",bikeselector_addbike_find_btn:"Etsi pyörä",bikeselector_addbike_framespec_desc:"Pyöräsi runkokoko löytyy yleensä alta korostetuilta alueilta",bikeselector_addbike_framespec_label:"Rungon mallitarkennus",bikeselector_addbike_framespec_select:"Valitse pyöräsi rungon tiedot",bikeselector_addbike_model_desc:"Pyöräsi malli löytyy yleensä alta korostetuilta alueilta",bikeselector_addbike_model_label:"Malli",bikeselector_addbike_model_select:"Valitse pyöräsi malli",bikeselector_addbike_title:"Lisää pyörä",bikeselector_browse_back_btn:"Takaisin Bike Loungeen",bikeselector_browse_products_label:"Osta yhteensopivia tuotteita",bikeselector_browse_shop_btn:"Osta tuotteita",bikeselector_browse_title:"Aloita ostokset!",bikeselector_confirm_brandmodelframespec_label:"Tuotemerkki, malli, runkosarja",bikeselector_confirm_confirm_btn:"Kyllä, tämä on pyöräni",bikeselector_confirm_framesize_label:"Rungon koko",bikeselector_confirm_notyourride_msg:"Tämä ei ole pyöräsi? Valitse ylhäältä muuttaaksesi hakua",bikeselector_confirm_title:"Vahvista pyöräsi",bikeselector_confirm_yearbikespec_label:"Vuosi, Pyörän kokoonpano",bikeselector_home_add_a_bike:"Lisää pyörä aloittaaksesi",bikeselector_home_add_btn:"Lisää pyörä",bikeselector_home_browse_btn:"Selaa yhteensopivuuksia",bikeselector_home_close_btn:"Sulje",bikeselector_home_empty:"Bike Lounge on tyhjä!",bikeselector_home_footer_message:"Pyörän valmistaja voi muuttaa pyörän teknisiä tietoja ilman erillistä ilmoitusta. Teknisten tietojen erot voivat vaikuttaa yhteensopivuustuloksiin.",bikeselector_home_title:"Minun Bike Lounge",bikeselector_search_bikespec_label:"Pyörän mallitarkennus",bikeselector_search_bikespec_select:"Valitse pyörän kokoonpano",bikeselector_search_bikespec_select_all:"Kaikki",bikeselector_search_confirm_btn:"Vahvista valinta",bikeselector_search_no_bikes_found:"Pyöriä ei löytynyt",bikeselector_search_number_bikes_found:"{{number_found}} pyörää löydetty",bikeselector_search_one_bike_found:"1 pyörä löydetty",bikeselector_search_searching:"Etsii...",bikeselector_search_title:"Pyörähaku",bikeselector_search_year_btn:"Tietoja ei vaadita",bikeselector_search_year_label:"Vuosi",bikeselector_size_confirm_btn:"Vahvista koko",bikeselector_size_framesize_desc:"Pyöräsi runkokoko löytyy yleensä korostetuilta alueelta",bikeselector_size_framesize_label:"Rungon koko",bikeselector_size_framesize_one_size:"Yksi koko",bikeselector_size_framesize_select:"Valitse rungon koko",bikeselector_size_title:"Valitse kokosi",cancel:"Peruuta",category_brakeadapterrear:"Jarru adapteri takana",category_brakecaliperrear:"Jarrusatula Taka",category_brakecaliperfront:"Jarrusatula Edessä",category_brakeleverlh:"Jarruvipu vasen käsi",category_brakeleverrh:"Jarruvipu Oikea käsi",category_brakepadsfront:"Jarrupalat edessä",category_brakepadsrear:"Jarrupalat Taka",category_brakerotorfront:"Jarru roottori edessä",category_brakes:"Jarrut",category_chainringspider:"Chainring Spider",category_cockpit:"Ohjaamo",category_drivetrain:"Voimansiirto",category_framefork:"Runko & haarukka",category_largestchainring:"Suurin ketjurengas",category_secondlargestchainring:"Toiseksi suurin ketjurengas",category_shifteradapterlh:"Vaihteensovitin vasen käsi",category_shifteradapterrh:"Vaihteensovitin Oikea käsi",category_shifterbrakecombolh:"Vaihdejarruyhdistelmä vasen käsi",category_shifterbrakecomborh:"Vaihdejarruyhdistelmä oikea käsi",category_shifterlh:"Vaihteisto vasen käsi",category_shifterrh:"Vaihteisto Oikea käsi",category_thirdlargestchainring:"Kolmanneksi suurin ketjurengas",category_tyrefront:"Rengas Etu",category_tyrerear:"Rengas Taka",category_wheelstyres:"Pyörät & Renkaat",category_brakeadapterfront:"Jarru adapteri edessä",category_brakerotorrear:"Jarru roottori takana",compatible:"Yhteensopiva",compatible_check_notes:"Yhteensopiva - tarkista lisätiedot",compatiblelist_header:"Yhteensopivat tuotteet",compatiblelist_nobikeselected:"Pyörää ei ole valittu. Klikkaa tästä lisätäksesi pyörän yhteensopivien osien tarkistamiseksi.",compatiblelist_noresults:"Yhteensopivia tuotteita ei löytynyt",compatiblelist_pageone:"Kaikki pyöräsi kanssa yhteensopivat tuotteet näet tässä",compatiblelist_unavailable:"Yhteensopivat tuotteet tämän tuotekategorian ja valitsemasi pyörätuotemerkin kanssa on tulossa pian!",confirm:"Vahvista",copy:"Kopioi",edit:"Muokkaa",error_add_component:"Se komponentti ei ottanut tarttuakseen. Kokeile uudestaan ja heitä tällä kertaa vähän kovemmin.",error_add_custom_bike:"Oops... Emme pystyneet luomaan kustomoitua pyörääsi. Päivitä ja kokeile uudestaan.",error_find_products:"Hmmm... Näyttää siltä, että pyörämme eivät oikein pyöri. Päivitä ja kokeile uudestaan.",error_find_products_no_results:"Hmmm... Emme löytäneet etsimääsi tuotetta. Kokeile toista mallinumeroa tai muokkaa hakusanaa.",error_generic:"Päätepisteessä oli virhe - {{endpoint_location}}",error_get_bike_bom:"Onpa noloa! Emme löytäneet pyöräkokoonpanoasi. Päivitä ja kokeile uudestaan.",error_invalid_email:"Sähköpostiosoitteesi ei vaikuta olevan voimassa, olisiko jotain toista vaihtoehtoa?",error_remove_component:"Tämä komponenti haluaa tosissaan pysyä pyörässäsi. Päivitä ja kokeile uudestaan.",error_revert_component:"Tämä komponenti haluaa tosissaan pysyä pyörässäsi. Päivitä ja kokeile uudestaan.",error_save_custom_bike:"Meidän moka ettei pyöräsi ollut tallennettu. Kokeile uudestaan ja polje tällä kertaa vähän kovemmin.",error_update_custom_bike:"Oho, se ei toiminut. Pahoittelut! Päivitä ja kokeile uudestaan.",error_update_custom_bike_name:"Emme voineet vaihtaa pyöräsi nimeä. Ehkä se ei pidä siitä? Päivitä ja kokeile uudestaan.",not_compatible:"Yhteensopimaton",onboarding_explore:"Mene Tutkimaan",onboarding_green_spanner:"Etsi vihreä jakoavain",onboarding_green_spanner_description:"Jos komponentissa on vihreä jakoavain, se voidaan vaihtaa tai poistaa kokonaan.",onboarding_linked_components:"Ymmärrä linkitetyt komponentit",onboarding_linked_components_description:"Jotkut osat (esim. kampi + alakiinnike) on linkitetty. Jos haluat vaihtaa toisen, saatat joutua poistamaan molemmat – muuten järjestelmä voi merkitä sen yhteensopimattomaksi.",onboarding_next:"Seuraavaksi",onboarding_open_bike_build:"Avaa pyörä rakentaa.",onboarding_open_bike_build_description:"Kun tarkastelet pyörääsi, laajenna komponenttiryhmät nähdäksesi pyörääsi koskevat komponentit.",onboarding_preview:"Esikatsele tai tallenna muutokset",onboarding_preview_description:"Voit vaihtaa/poistaa komponentteja ja vahvistaa muutokset tutkiaksesi päivityksiä. Nämä voidaan peruuttaa milloin tahansa ennen tallentamista. Kun olet tallentanut, muutoksia ei voi peruuttaa – ne voidaan vain poistaa tai korvata uudelleen.",onboarding_replacement:"Valitse oikea korvike",onboarding_replacement_description:"Käytä hakuun viivakoodia tai valmistajan osanumeroa (löytyy pakkauksesta tai laskusta). Voit myös käyttää mallinumeroa, mutta tarkista vielä kerran – jotkin numerot koskevat useita versioita.",onboarding_settings:"Näytä asetussivu",onboarding_settings_description:"Asetussivullasi voit muuttaa pyöräsi nimeä, päivittää sähköpostiosoitteesi ja sieltä löydät Bike Matrix -tunnuksesi sekä jakotunnuksesi.",onboarding_title:"Virtuaalinen työpaja – Pikaopas",onboarding_vw_description:"Muokkaa pyöräsi digitaalista tietuetta vastaamaan tekemiäsi päivityksiä ja varmista, että yhteensopivuustarkastukset ovat mahdollisimman tarkkoja.",productcheck_nobikeselected_label:"Tarkista yhteensopivuus",productcheck_nobikeselected_message:"Lisää pyörä tarkistaaksesi yhteensopivuus",productcheck_questionmark:"?",save:"Tallenna",share:"Jaa",virtualworkshop_add_bike_text:"Sinun Bike Matrix ID löytyy Virtual Workshopin asetukset -sivuilta",virtualworkshop_bm_id_text:"Voit käyttää Bike Matrix ID:tä, joka löytyy Virtual Workshopin asetukset -sivuilta tai Share Id:tä, joka on jaettu sinulle toisen henkilön toimesta.",virtualworkshop_bom_title:"Materiaaliluoettelo",virtualworkshop_build_text:"Kokoonpanotiedot",virtualworkshop_cockpit:"Ohjaamo",virtualworkshop_disclaimer:"Päivitessään pyörän tietoja käyttäjä on vastuussa siitä, että komponentit ovat oikein merkitty ymmärtäen, että muutokset vaikuttavat yhteensopivuustuloksiin.",virtualworkshop_do_not_pass:"Virtuaalityöpaja ei ole vielä saatavilla kaikille pyörämerkeille.",virtualworkshop_drivetrain:"Voimansiirto",virtualworkshop_e_drive:"eDrive",virtualworkshop_enter_button:"Virtuaaliseen Workshopiin",virtualworkshop_frame_fork:"Runko & etuhaarukka",virtualworkshop_intro_text:"Päivitä pyörääsi uusilla komponenteilla ja tallenna pyöräsi antamalla sähköpostiosoitteesi. Tarkastele jaettuja pyöriä ja pääse käsiksi pyöräsi tunnuksiin.",virtualworkshop_other_parts:"Muut osat",virtualworkshop_remove_btn:"Poista komponentti",virtualworkshop_remove_subtitle:"Komponentin poistaminen poistaa sen pyöräsi kokoonpanosta. Tämä voi vaikuttaa muiden osien yhteensopivuuteen.",virtualworkshop_remove_title:"Oletko varma?",virtualworkshop_revert_btn:"Palaa",virtualworkshop_save_btn:"Tallenna pyörä",virtualworkshop_save_text:"Voidaksemme tallentaa kustomoidun pyöräsi, se on tallennettava sähköpostiosoitteellasi",virtualworkshop_save_title:"Syötä sähköpostiosoitteesi",virtualworkshop_search_text:"Syötä viivakoodi tai hae tuotemerkillä, mallilla, osanumerolla...",virtualworkshop_settings_bike_name:"Pyörän nimi",virtualworkshop_settings_email:"Sähköpostiosoite",virtualworkshop_settings_id:"Bike Matrix ID",virtualworkshop_settings_share_id:"Jaa ID",virtualworkshop_shared_icon:"Jaettu sinulle",virtualworkshop_swap_btn:"Vaihda komponenttia",virtualworkshop_title:"Virtuaalinen Workshop",virtualworkshop_unsaved_changes:"Katsele tallentamattomia muutoksia",virtualworkshop_wheels_tyres:"Vanteet & renkaat",category_bike:"Pyörä",category_bottombracket:"Keskiö",category_bottombracketpart:"Keskiön osa",category_brakeadapter:"Jarruadapteri",category_brakeadapterpart:"Jarruadapterin osa",category_brakecaliper:"Jarrusatula",category_brakecaliperpart:"Jarrusatulan osa",category_brakecaliperservicekit:"Jarrusatulan huoltosarja",category_brakelever:"Jarrukahva",category_brakeleverpart:"Jarrukahvan osa",category_brakeleverservicekit:"Jarrukahvan huoltosarja",category_brakepads:"Jarrupalat",category_brakerotor:"Jarrulevy",category_brakerotorpart:"Jarrulevyn osa",category_brakesystem:"Jarrujärjestelmä",category_brakesystempart:"Jarrujärjestelmän osa",category_cassette:"Takapakka",category_cassettepart:"Takapakan osa",category_chain:"Ketju",category_chainguide:"Ketjusuoja",category_chainguidepart:"Ketjusuojan osa",category_chainjoiner:"Ketjuliitin",category_chainring:"Eturatas",category_chainringbolt:"Eturattaan pultti",category_crankpart:"Kammen osa",category_crankset:"Kampisarja",category_dropperlever:"Hissitolpan vipu",category_dropperleverpart:"Hissitolpan vivun osa",category_ebikebattery:"Sähköpyörän akku",category_ebikebatterypart:"Sähköpyörän akun osa",category_ebikecharger:"Sähköpyörän laturi",category_ebikechargerpart:"Sähköpyörän laturin osa",category_ebikecontrolunit:"Sähköpyörän ohjausyksikkö",category_ebikecontrolunitpart:"Sähköpyörän ohjausyksikön osa",category_ebikeinterconnect:"eBike-liitin",category_ebikeinterconnectpart:"eBike-liittimen osa",category_ebikemotorsystem:"Sähköpyörän moottorijärjestelmä",category_ebikemotorsystempart:"Sähköpyörän moottorijärjestelmän osa",category_fork:"Keula",category_forkpart:"Keulan osa",category_forkservicekit:"Keulan huoltosarja",category_frame:"Runko",category_framepart:"Rungon osa",category_frontaxle:"Etuakseli",category_frontaxlepart:"Etuakselin osa",category_frontderailleur:"Etuvaihtaja",category_frontderailleurpart:"Etuvaihtajan osa",category_fronthub:"Etunapa",category_fronthubpart:"Etunavan osa",category_frontwheel:"Etukiekko",category_grips:"Kädensijat",category_gripspart:"Kädensijojen osa",category_handlebar:"Ohjaustanko",category_headset:"Ohjainlaakeri",category_headsetpart:"Ohjainlaakerin osa",category_nipple:"Nippeli",category_pedals:"Polkimet",category_pedalspart:"Polkimien osa",category_rearaxle:"Taka-akseli",category_rearaxlepart:"Taka-akselin osa",category_rearderailleur:"Takavaihtaja",category_rearderailleurpart:"Takavaihtajan osa",category_rearhub:"Takanapa",category_rearhubpart:"Takanavan osa",category_rearshock:"Takaiskari",category_rearshockpart:"Takaiskarin osa",category_rearshockservicekit:"Takaiskarin huoltosarja",category_rearwheel:"Takakiekko",category_rim:"Vanne",category_saddle:"Satula",category_seatpost:"Satulaputki",category_seatpostclamp:"Satulaputken kiristin",category_seatpostclamppart:"Satulaputken kiristimen osa",category_seatpostpart:"Satulaputken osa",category_seatpostservicekit:"Hissitolpan huoltosarja",category_shiftadapter:"Vaihtajan adapteri",category_shiftadapterpart:"Vaihtajan adapterin osa",category_shiftbrakecombo:"Vaihdevipu-jarrukahva yhdistelmä",category_shiftbrakecombopart:"Vaihdevipu-jarrukahva yhdistelmän osa",category_shifter:"Vaihdevipu",category_shifterpart:"Vaihdevivun osa",category_spoke:"Pinna",category_stem:"Ohjainkannatin",category_stempart:"Ohjainkannattimen osa",category_tube:"Sisärengas",category_tyre:"Ulkorengas",category_wheelset:"Kiekkosarja",checksku_message_nobikefound:"Pöyrää ei löytynyt annetulla Bike Key:llä.",checksku_message_nocompatibilityinfo:"Ei yhteensopivuus tietoja",checksku_message_noproductfound:"Osaa ei löytynyt annetulla SKU:lla/Viivakoodilla/Osanumerolla",checksku_message_notcompatible:"Ei yhteensopiva",checksku_warning_unabletoperformcheck:"Yhteensopivuuden tarkistusta ei voitu suorittaa. Pyydämme tarkistamaan yhteensopivuuden manuaalisesti."}}},{slice:Fm,forEach:Nm}=[];function Rm(n){return Nm.call(Fm.call(arguments,1),e=>{if(e)for(const t in e)n[t]===void 0&&(n[t]=e[t])}),n}const wh=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,Gm=(n,e,t)=>{const r=t||{};r.path=r.path||"/";const i=encodeURIComponent(e);let s=`${n}=${i}`;if(r.maxAge>0){const l=r.maxAge-0;if(Number.isNaN(l))throw new Error("maxAge should be a Number");s+=`; Max-Age=${Math.floor(l)}`}if(r.domain){if(!wh.test(r.domain))throw new TypeError("option domain is invalid");s+=`; Domain=${r.domain}`}if(r.path){if(!wh.test(r.path))throw new TypeError("option path is invalid");s+=`; Path=${r.path}`}if(r.expires){if(typeof r.expires.toUTCString!="function")throw new TypeError("option expires is invalid");s+=`; Expires=${r.expires.toUTCString()}`}if(r.httpOnly&&(s+="; HttpOnly"),r.secure&&(s+="; Secure"),r.sameSite)switch(typeof r.sameSite=="string"?r.sameSite.toLowerCase():r.sameSite){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;case"none":s+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return s},Ph={create(n,e,t,r){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};t&&(i.expires=new Date,i.expires.setTime(i.expires.getTime()+t*60*1e3)),r&&(i.domain=r),document.cookie=Gm(n,encodeURIComponent(e),i)},read(n){const e=`${n}=`,t=document.cookie.split(";");for(let r=0;r<t.length;r++){let i=t[r];for(;i.charAt(0)===" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return i.substring(e.length,i.length)}return null},remove(n){this.create(n,"",-1)}};var Qm={name:"cookie",lookup(n){let{lookupCookie:e}=n;if(e&&typeof document<"u")return Ph.read(e)||void 0},cacheUserLanguage(n,e){let{lookupCookie:t,cookieMinutes:r,cookieDomain:i,cookieOptions:s}=e;t&&typeof document<"u"&&Ph.create(t,n,r,i,s)}},qm={name:"querystring",lookup(n){var r;let{lookupQuerystring:e}=n,t;if(typeof window<"u"){let{search:i}=window.location;!window.location.search&&((r=window.location.hash)==null?void 0:r.indexOf("?"))>-1&&(i=window.location.hash.substring(window.location.hash.indexOf("?")));const l=i.substring(1).split("&");for(let u=0;u<l.length;u++){const c=l[u].indexOf("=");c>0&&l[u].substring(0,c)===e&&(t=l[u].substring(c+1))}}return t}};let Oa=null;const Ch=()=>{if(Oa!==null)return Oa;try{Oa=window!=="undefined"&&window.localStorage!==null;const n="i18next.translate.boo";window.localStorage.setItem(n,"foo"),window.localStorage.removeItem(n)}catch{Oa=!1}return Oa};var Vm={name:"localStorage",lookup(n){let{lookupLocalStorage:e}=n;if(e&&Ch())return window.localStorage.getItem(e)||void 0},cacheUserLanguage(n,e){let{lookupLocalStorage:t}=e;t&&Ch()&&window.localStorage.setItem(t,n)}};let Xa=null;const kh=()=>{if(Xa!==null)return Xa;try{Xa=window!=="undefined"&&window.sessionStorage!==null;const n="i18next.translate.boo";window.sessionStorage.setItem(n,"foo"),window.sessionStorage.removeItem(n)}catch{Xa=!1}return Xa};var Jm={name:"sessionStorage",lookup(n){let{lookupSessionStorage:e}=n;if(e&&kh())return window.sessionStorage.getItem(e)||void 0},cacheUserLanguage(n,e){let{lookupSessionStorage:t}=e;t&&kh()&&window.sessionStorage.setItem(t,n)}},Um={name:"navigator",lookup(n){const e=[];if(typeof navigator<"u"){const{languages:t,userLanguage:r,language:i}=navigator;if(t)for(let s=0;s<t.length;s++)e.push(t[s]);r&&e.push(r),i&&e.push(i)}return e.length>0?e:void 0}},Km={name:"htmlTag",lookup(n){let{htmlTag:e}=n,t;const r=e||(typeof document<"u"?document.documentElement:null);return r&&typeof r.getAttribute=="function"&&(t=r.getAttribute("lang")),t}},_m={name:"path",lookup(n){var i;let{lookupFromPathIndex:e}=n;if(typeof window>"u")return;const t=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(t)?(i=t[typeof e=="number"?e:0])==null?void 0:i.replace("/",""):void 0}},$m={name:"subdomain",lookup(n){var i,s;let{lookupFromSubdomainIndex:e}=n;const t=typeof e=="number"?e+1:1,r=typeof window<"u"&&((s=(i=window.location)==null?void 0:i.hostname)==null?void 0:s.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i));if(r)return r[t]}};function e5(){return{order:["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"],lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:n=>n}}class zh{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(e,t)}init(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=e||{languageUtils:{}},this.options=Rm(t,this.options||{},e5()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=i=>i.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=r,this.addDetector(Qm),this.addDetector(qm),this.addDetector(Vm),this.addDetector(Jm),this.addDetector(Um),this.addDetector(Km),this.addDetector(_m),this.addDetector($m)}addDetector(e){return this.detectors[e.name]=e,this}detect(e){e||(e=this.options.order);let t=[];return e.forEach(r=>{if(this.detectors[r]){let i=this.detectors[r].lookup(this.options);i&&typeof i=="string"&&(i=[i]),i&&(t=t.concat(i))}}),t=t.map(r=>this.options.convertDetectedLanguage(r)),this.services.languageUtils.getBestMatchFromCodes?t:t.length>0?t[0]:null}cacheUserLanguage(e,t){t||(t=this.options.caches),t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach(r=>{this.detectors[r]&&this.detectors[r].cacheUserLanguage(e,this.options)}))}}zh.type="languageDetector",bt.use(l3).use(zh).init({debug:!1,resources:Ym,detection:{order:["htmlTag","querystring","cookie","localStorage","sessionStorage","navigator","path","subdomain"]},supportedLngs:["en","en-GB","en-US","de","fr","es","it","nl","fi"],fallbackLng:"en-GB",interpolation:{escapeValue:!1}});const t5=typeof window<"u";function Vn(n,e,t=[],r=null){p1(s=>il.value?b(n,{...s}):b(ae,{}),e,t,r)}function r5(){Vn($0,"bikematrix-bikeselector",[],{shadow:!0}),Vn(tm,"bikematrix-productresult",["data-sku"],{shadow:!0}),Vn(am,"bikematrix-collectionresult",["data-product-id","data-product-skus"],{shadow:!0}),Vn(sh,"bikematrix-compatibilitylabel",["data-type"],{shadow:!0}),Vn(hm,"bikematrix-compatiblelist",["data-title"]),Vn(bm,"bikematrix-bikeselectorbanner",["data-title","data-color","data-full-width","data-font-color","data-show"],{shadow:!0}),Vn(oh,"bikematrix-bikon",["data-color"],{shadow:!0})}function n5(){if(!t5)return null;const n=rg.getInstance(),e={isInitialized:()=>n.isInitialized(),init:t=>n.initialize(t),refresh:()=>n.refresh(),destroy:()=>n.destroy(),reload:(t=!0)=>n.reload(t),reset:()=>n.reset(),getConfig:()=>n.getConfig(),getCurrentBike:()=>n.getCurrentBike(),getActiveSubscription:()=>n.getActiveSubscription(),updateConfig:t=>n.updateConfig(t),updateSku:t=>n.updateSku(t)};return typeof process<"u"&&process.env.NODE_ENV==="development"&&(e.core=n),window.BikeMatrix=e,r5(),document.currentScript&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>e.init()):e.init()),e}return n5()}();